/* ---------------------------------------------------------
   Loving Care Disability Services — design tokens
   Cream/ink base + given radius carried over from brief;
   accent hues sampled from the LCDS mark (blue + orange).
--------------------------------------------------------- */
:root {
  /* Surface hierarchy: base -> elevated -> recessed.
     The peach is now an accent, reserved for the masthead + hero. */
  /* Neutral grey base + pure white cards. Was #e5e5e5 (kismet's value); lifted to
     #eff0f0 — trymeridian.com's base — so the whole site sits on one slightly
     brighter neutral. Every page inherits this through `body`. */
  --cream: #eff0f0;
  --paper: #ffffff;
  --surface-alt: #ededed;
  /* Masthead + hero share this. Set to the page base so the hero reads as one
     continuous surface with the rest of the site (was sage #dbe2cd). */
  --accent-warm: #eff0f0;
  --ink: #241f1c;
  /* Darkened from #6b6058 on 2026-08-24. At the old value this sat at 5.35:1 on
     the cream base — passing, but with only 0.85 of headroom above AA, which is
     what capped the page-wide dot field at a barely-visible alpha. #5a514a
     measures 6.62:1 and buys back ~1.3 of that budget. Every one of its 30 uses
     is re-checked against its real rendered background by _ink-soft-audit.mjs,
     because a few sit on dark surfaces where darkening HURTS. */
  --ink-soft: #5a514a;
  --line: #e3dbd2;

  --sun: #a4552a;
  --sun-dark: #83421f;
  --sky: #5f7565;
  --sky-deep: #3a4a3f;

  /* Warm glow, ported from trymeridian.com. Their hero is
     `linear-gradient(0deg, #f75d00, #eff0f0 50%)` — a saturated orange pooled at
     the section's bottom edge dissolving upward into the page base. That base is
     near-identical to our --cream, so the blend transfers directly.

     One change from the reference: Meridian lets the orange run to full
     saturation at the bottom edge because a white strip follows it. Our hero is
     followed by the dark green zone, and orange meeting that head-on reads as a
     hard seam. So the glow peaks at --glow-peak and fades back to the page base
     by --glow-fade, leaving a neutral bottom edge for the dark section to meet. */
  --glow: #f9832f;
  --glow-peak: 18%;
  --glow-fade: 55%;
  /* How much of --glow the hero band is allowed to reach. The band used to run
     to full #f9832f at --glow-peak and the user called it too much orange on
     2026-08-27, so the peak is now a mix toward the page base rather than the
     raw token. --glow itself is unchanged: it still drives the .arc-card
     gradient and the card/footer dot fields at full strength, so this dims the
     hero only. Raise the percentage to bring the orange back. */
  --glow-hero: color-mix(in srgb, var(--glow) 45%, var(--accent-warm));

  /* Button fill — warm gold. The roles inverted 2026-08-24: gold is now the
     resting fill and the logo blue became the colour in motion (see the sweep
     tokens below). Label text had to flip with it — cream on gold is ~2:1, so
     buttons now carry --ink. */
  --cta: #f2a51a;
  --cta-dark: #d9910f;

  /* The blue that stayed. Still the LCDS mark's blue, held dark enough to pass
     AA as text on the light page base; the sweep uses a lighter tint. */
  --blue-ink: #1f6ba5;

  /* Endpoints of the CTA's sweep (see .btn-chars::before). --cta-sweep-a is the
     resting fill, --cta-sweep-b is the travelling band. All three stops are
     chosen so --ink label text clears AA across the whole sweep — measured
     with _sweep-contrast.mjs by decoding real pixels, not reasoned about.
     The band is a LIGHT blue on purpose: the mark's full-strength #1f6ba5
     drops dark-on-blue to 2.88:1 and would fail mid-sweep. */
  --cta-sweep-a: #f2a51a;
  --cta-sweep-b: #5fa3d9;
  /* Bridges gold to blue through a pale tint rather than blending them
     directly — they are near-complementary, so a straight blend meets in a
     muddy grey-olive. Same lesson as the previous blue/rust pairing. */
  --cta-sweep-mid: #e6d9bf;

  --radius: 1.5rem;
  --radius-sm: 0.85rem;
  /* Tighter corner for compact cards sitting inside a larger surface —
     trymeridian.com's enterprise cards, measured at 10px. */
  --radius-xs: 0.625rem;
  --radius-pill: 999px;

  /* Shared neumorphic pill treatment used by Services headings and homepage
     card labels. Centralized so the two components cannot drift apart. */
  --soft-pill-surface: #e0e5ec;
  --soft-pill-ink: #3d4852;
  --soft-pill-accent: #6c63ff;
  --soft-pill-shadow-dark: rgba(163, 177, 198, 0.62);
  --soft-pill-shadow-light: rgba(255, 255, 255, 0.72);

  /* Single family throughout, as kismet.healthcare does. Was Hanken Grotesk
     (a free stand-in for kismet's commercial TT Hoves Pro); swapped to DM Sans
     on 2026-09-09 at the user's request, after biofarma.com.ar/nosotros was
     found to use it. Free, open-source (SIL OFL), loaded the same way Hanken
     was -- no licensing gate needed, unlike the TT Hoves/TT Norms trial packs
     evaluated earlier (tt-hoves-preview.css, still on disk, not linked from
     any page). --font-utility is untouched: biofarma has no equivalent to the
     mono eyebrow/stat-caption labels, so that design element is unaffected. */
  --font-display: "DM Sans", "Segoe UI", sans-serif;
  --font-body: "DM Sans", "Segoe UI", sans-serif;
  --font-utility: "IBM Plex Mono", ui-monospace, monospace;

  /* z-index scale — no arbitrary values */
  --z-header: 50;
  --z-topbar: 51;
  --z-grain: 60;
  --z-skip: 70;

  /* Type scale — wider jumps between levels so hierarchy reads at a glance */
  /* h1 matched to biofarma.com.ar/nosotros's own <h1>, measured live at both
     ends of its responsive range: 60px at 1440px wide, 32px at 390px wide.
     2rem/3.75rem are exactly 32px/60px at the 16px root this site uses. */
  --fs-h1: clamp(2rem, 5vw, 3.75rem);
  --fs-h2: clamp(1.9rem, 3vw, 2.6rem);
  --fs-h2-sm: clamp(1.6rem, 2.4vw, 2rem);

  /* Layered, colour-tinted shadows: tight contact shadow + wide ambient */
  --shadow-soft: 0 2px 4px -1px rgba(42, 16, 6, 0.05), 0 24px 48px -24px rgba(42, 16, 6, 0.18);
  --shadow-card: 0 1px 2px rgba(42, 16, 6, 0.04), 0 10px 26px -14px rgba(42, 16, 6, 0.14);
  --shadow-raised: 0 1px 2px rgba(42, 16, 6, 0.05), 0 4px 12px -6px rgba(42, 16, 6, 0.1);
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  /* The base colour lives here rather than on `body` so the fixed .page-dots
     canvas can sit at z-index:-1 — behind every section, but still in front of
     the page ground. With the fill on `body` it paints in a later step and
     buries the canvas entirely. Visually identical on pages without the canvas:
     both elements cover the viewport. */
  background: var(--cream);
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

body {
  margin: 0;
  /* Transparent on purpose — see the note on `html` above. */
  background: transparent;
  color: var(--ink);
  font-family: var(--font-body);
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* Fixed grain overlay breaks up the flat colour fields */
body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: var(--z-grain);
  pointer-events: none;
  opacity: 0.04;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
}

.skip-link {
  position: fixed;
  top: 0.6rem;
  left: 0.6rem;
  z-index: var(--z-skip);
  padding: 0.7rem 1.15rem;
  border-radius: var(--radius-pill);
  background: var(--ink);
  color: #fff8f0;
  font-weight: 600;
  font-size: 0.9rem;
  text-decoration: none;
  transform: translateY(-250%);
  transition: transform 0.2s cubic-bezier(0.215, 0.61, 0.355, 1);
}

.skip-link:focus-visible {
  transform: translateY(0);
}

img {
  max-width: 100%;
  /* Load-bearing since every <img> gained intrinsic width/height attributes
     on 2026-09-08. Those reserve the aspect box and stop layout shift, but
     without height:auto the height attribute wins over the CSS width and the
     image is stretched — the NDIS badge rendered at a 2.077 ratio against
     its true 2.439. Components that set their own height (.referral-media img,
     .tile img) are more specific and still win. */
  height: auto;
  display: block;
}

a {
  color: inherit;
}

:focus-visible {
  outline: 3px solid var(--sky);
  outline-offset: 3px;
}

.wrap {
  width: min(1180px, 100% - 3rem);
  margin-inline: auto;
}

h1, h2, h3 {
  font-family: var(--font-display);
  font-weight: 500;
  margin: 0;
  text-wrap: balance;
}

/* The Tailwind CDN injects Preflight into <head> at runtime, so it lands AFTER
   this stylesheet. Its `h1..h6 {font-weight:inherit}` and `body{line-height:inherit}`
   tie on specificity and win on order — these descendant selectors take it back. */
html body {
  line-height: 1.7;
}

/* Kismet sets headings at 400. 500 keeps that light, airy feel while holding
   up at the larger sizes used here. */
body h1,
body h2 {
  font-weight: 500;
}

/* Default heading leading, so headings don't inherit the 1.7 body value.
   Section rules carrying a class still override these. */
body h1 {
  line-height: 1.05;
}

body h2 {
  line-height: 1.15;
}

body h3 {
  font-weight: 600;
  line-height: 1.35;
}

/* Tracking scaled per level — a serif needs less negative tracking than a grotesk */
h1 {
  letter-spacing: -0.02em;
}

h2 {
  letter-spacing: -0.015em;
}

/* Serif is for display sizes only — at card-title size it turns muddy,
   so h3 drops back to the sans */
h3 {
  font-family: var(--font-body);
  font-weight: 600;
  letter-spacing: -0.005em;
}

p {
  text-wrap: pretty;
}

/* Figures line up in columns instead of jittering */
.glass-stat-value,
.glass-mini-item .v,
.stat-number,
.glass-meter-row {
  font-variant-numeric: tabular-nums;
}

p {
  margin: 0;
}

/* One warm treatment for every eyebrow, on every page (2026-08-24).
   These used to be four different colours — sage for --core, rust for
   --capacity, translucent white for --light on dark bands, and a white pill
   for --paper — which made the same component read as four things. The
   modifier classes are kept as aliases rather than stripped out of the markup,
   so a variant can diverge again later without touching four HTML files.

   Fill is --sun at 20% over white (#eddcd4); text is --sun-dark. Measured
   5.75:1, so it clears AA for text this small. Note the fill is opaque, which
   is what lets the same pill sit on the dark green bands as well as the light
   page without a second variant. */
.eyebrow,
.eyebrow--core,
.eyebrow--capacity,
.eyebrow--light,
.eyebrow--paper {
  background: color-mix(in srgb, var(--sun) 20%, white);
  border: 1px solid color-mix(in srgb, var(--sun) 38%, transparent);
  color: var(--sun-dark);
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-family: var(--font-utility);
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 0.4rem 0.85rem;
  border-radius: var(--radius-pill);
  font-weight: 600;
}

.btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 0.95rem;
  /* Shape and size ported from trymeridian.com's header buttons — measured
     there at border-radius 10px, 1px border, padding 10px 20px, 36.4px tall.
     Was a pill (--radius-pill) until 2026-08-27; trialled on the homepage
     first as .btn--rect, then rolled out to every button on every page at the
     user's request, so the modifier is gone and this is simply what a button
     is now. Only font-size was NOT taken from the reference — theirs is 12px
     mono, which is most of how they reach 36px, and this site's audience
     includes people with low vision. At 0.95rem the button lands at ~45px.
     --radius-xs is the same corner .trust-card and .arc-card use. */
  padding: 0.625rem 1.25rem;
  border-radius: var(--radius-xs);
  border: 1px solid transparent;
  cursor: pointer;
  text-decoration: none;
  transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
  white-space: nowrap;
}

.btn:hover {
  transform: translateY(-1px);
}

/* Dark label, not cream: cream on this gold measures ~2:1. Shadows retinted
   warm to match the new fill — a blue-tinted shadow under a gold button reads
   as a mismatched light source. */
.btn--primary {
  background: var(--cta);
  color: var(--ink);
  box-shadow: 0 10px 24px -10px rgba(180, 118, 12, 0.55);
}

.btn--primary:hover {
  background: var(--cta-dark);
}

.btn--on-dark {
  background: var(--cta);
  color: var(--ink);
  box-shadow: 0 10px 24px -10px rgba(180, 118, 12, 0.55);
}

.btn--on-dark:hover {
  background: var(--cta-dark);
}

/* The outlined half of the reference's CTA pair ("Login" beside "Get
   Started"). `.btn--ghost` was already in the markup on the homepage hero but
   had NO rule anywhere in this stylesheet, so that button was rendering as
   bare text with padding — a secondary CTA with no affordance at all. It is
   used exactly once, on the pair this shape was ported for, so defining it
   here affects nothing else. The reference's outline is full black; --ink is
   the equivalent. */
.btn--ghost {
  background: transparent;
  border-color: var(--ink);
  color: var(--ink);
}

.btn--ghost:hover,
.btn--ghost:focus-visible {
  background: var(--ink);
  color: var(--cream);
}

/* `.btn--rect` was the trial modifier for the shape above. It is now the
   default on `.btn` for every button on every page, so the modifier is gone.
   Any stray `btn--rect` left in markup is harmless — it matches nothing. */

/* Warm light sweeping across the CTA — the technique ditiswatt.nl uses on its
   hero button.

   The trick is the @property registrations below. A custom property is an
   untyped token by default and CANNOT be transitioned — declaring a `syntax`
   gives the browser a type it can interpolate, which is what lets the gradient's
   colour stops travel instead of snapping. Drop the @property blocks and this
   degrades to an instant jump, not a broken button.

   Two differences from the reference, both deliberate:

   1. It sweeps a <percentage> along a linear gradient rather than rotating
      <angle> stops in a conic one. A conic gradient on a wide pill radiates
      wedges from its centre, which fights the shape; the reference's button is
      a large rounded rect where that reads fine. Same mechanism, better fit.
   2. The warm band stays narrow instead of splitting the button in half. Blue
      and rust are near-complementary, so a 50/50 blend meets in a muddy olive.
      Keeping the band narrow reads as light crossing the button and never lets
      the two sit at full strength side by side.

   The two edges use slightly different durations so the band stretches a little
   as it travels, rather than sliding rigidly — same idea as the reference's
   uneven .7/.6/.7. */
@property --s0 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: -34%;
}

@property --s1 {
  syntax: "<percentage>";
  inherits: false;
  initial-value: -8%;
}

/* Fill lives on a ::before layer so it can swell on hover without moving the text */
.btn-chars {
  position: relative;
  background: transparent;
  isolation: isolate;
}

.btn-chars::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  --s0: -34%;
  --s1: -8%;
  background:
    linear-gradient(
      100deg,
      var(--cta-sweep-a) 0%,
      var(--cta-sweep-a) var(--s0),
      var(--cta-sweep-mid) calc(var(--s0) + 13%),
      var(--cta-sweep-b) var(--s1),
      var(--cta-sweep-mid) calc(var(--s1) + 13%),
      var(--cta-sweep-a) calc(var(--s1) + 28%),
      var(--cta-sweep-a) 100%
    );
  transition: --s0 0.75s ease-in-out, --s1 0.6s ease-in-out,
    transform 0.5s cubic-bezier(0.215, 0.61, 0.355, 1);
}

.btn-chars:hover::before,
.btn-chars:focus-visible::before {
  --s0: 82%;
  --s1: 108%;
  transform: scale(1.05);
}

.btn-chars:hover {
  transform: none;
}

/* Pressed feedback — physical click cue that was missing everywhere */
.btn:active,
.btn-chars:active {
  transform: scale(0.97);
}

.strip-list a:active {
  transform: translateY(0) scale(0.99);
}

.btn-chars .char-track {
  display: inline-block;
}

.btn-chars .char-group {
  display: inline-block;
}

.btn-chars .char {
  display: inline-block;
  opacity: 0;
  /* Was --cta-dark, which under the old blue fill meant letters shifted colour
     as they faded in (the vaulk.com effect shifts opacity AND colour). Under
     the gold fill that start value is gold-on-gold, so the label spent ~0.7s
     mid-reveal at a very low contrast ratio. Starting at --ink keeps the
     per-letter stagger but leaves every letter legible the moment it appears. */
  color: var(--ink);
}

.btn-chars.is-revealed .char {
  opacity: 1;
  color: var(--ink);
  transition: opacity 1.4s cubic-bezier(0.215, 0.61, 0.355, 1), color 1.4s cubic-bezier(0.215, 0.61, 0.355, 1);
  transition-delay: var(--d, 0s);
}

.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-weight: 600;
  color: var(--sky-deep);
  text-decoration: none;
  border-bottom: 1px solid transparent;
}

.link-arrow:hover {
  border-color: currentColor;
}

.link-arrow svg {
  transition: transform 0.15s ease;
}

.link-arrow:hover svg {
  transform: translateX(3px);
}

/* ---------------------------------- top utility bar ---------------------------------- */

.topbar {
  position: sticky;
  top: 0;
  z-index: var(--z-topbar);
  height: 42px;
  background: var(--accent-warm);
  overflow: hidden;
}

.topbar-cut {
  position: absolute;
  inset: 0;
  background: linear-gradient(120deg, var(--sky), var(--sky-deep));
  clip-path: polygon(29% 0, 100% 0, 100% 100%, 24% 100%);
}

/* Full-bleed so the top bar's right edge lines up with the nav below it */
.topbar-inner {
  width: 100%;
  max-width: none;
  padding-inline: 4rem;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 2rem;
}

.topbar-inner a {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  color: #fff;
  text-decoration: none;
  font-size: 0.82rem;
  font-weight: 600;
}

.topbar-inner a:hover {
  text-decoration: underline;
}

/* ---------------------------------- header ---------------------------------- */

/* Header modelled on kismet.healthcare: transparent, no shadow, content held
   in a 1280px column with a hairline rule beneath it. */
.site-header {
  position: sticky;
  top: 0;
  z-index: var(--z-header);
  background: var(--accent-warm);
}

/* Header runs edge to edge rather than sitting in the 1180px content column,
   so the logo sits hard left and the nav hard right */
/* Three zones: logo left, nav centred, CTA right — kismet's arrangement.
   The 1fr side columns are what keeps the nav optically centred. */
.site-header .wrap {
  position: relative;
  z-index: 1;
  width: min(1280px, 100% - 4rem);
  max-width: none;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 1rem;
  height: 105px;
  padding: 0;
  border-bottom: 1px solid rgba(36, 31, 28, 0.14);
}

.site-header .brand {
  justify-self: start;
}

.site-header .site-nav {
  justify-self: center;
}

/* Was a single <a>; now wraps two, so the class moved from the anchor to a
   flex container around both. justify-self:end still places the WHOLE group
   in the header grid's right-hand 1fr column (see .site-header .wrap above)
   — nothing else about that placement changed. */
.header-cta {
  justify-self: end;
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

/* The in-panel duplicate only exists for the mobile menu */
.nav-cta-mobile {
  display: none;
}

.brand {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  text-decoration: none;
  color: var(--ink);
}

.brand-logo {
  height: 54px;
  width: auto;
  display: block;
}

.brand-logo--footer {
  height: 68px;
}

.site-nav {
  display: flex;
  align-items: center;
  gap: 1.6rem;
}

/* 16px / weight 400, matching kismet */
.site-nav a:not(.btn) {
  text-decoration: none;
  font-weight: 400;
  font-size: 1rem;
  color: var(--ink);
}

.site-nav a:not(.btn):hover {
  color: var(--ink);
}

/* Dropdown panels are light, so their links stay dark */
.nav-dropdown li a,
.nav-dropdown li a:hover {
  color: var(--ink);
}

/* Mobile: collapse to logo + hamburger, and surface the CTA inside the panel */
@media (max-width: 900px) {
  .site-header .wrap {
    grid-template-columns: auto auto;
    justify-content: space-between;
    height: 76px;
    width: min(1280px, 100% - 3rem);
  }

  .site-header .site-nav {
    justify-self: end;
  }

  .header-cta {
    display: none;
  }

  .nav-cta-mobile {
    display: inline-flex;
    justify-content: center;
    margin-top: 0.5rem;
  }

  .nav-item.is-active::after {
    display: none;
  }
}

/* 32px between links, matching kismet's nav rhythm */
.nav-links {
  display: flex;
  align-items: center;
  gap: 2rem;
}

.nav-item {
  position: relative;
  padding-bottom: 0.9rem;
  margin-bottom: -0.9rem;
}

.nav-link {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}

/* Current page gets a short rule beneath it, as kismet does */
.nav-item.is-active .nav-link {
  color: var(--ink);
  font-weight: 500;
}

.nav-item.is-active {
  position: relative;
}

/* -25px lands it exactly on the header's bottom rule (measured: nav item
   bottom sits 25px above the wrap's border) */
.nav-item.is-active::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -25px;
  height: 2px;
  background: var(--ink);
}

.nav-chevron {
  flex-shrink: 0;
  transition: transform 0.15s ease;
}

.nav-item:hover .nav-chevron,
.nav-item:focus-within .nav-chevron {
  transform: rotate(180deg);
}

.nav-dropdown {
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  box-shadow: var(--shadow-card);
  padding: 0.6rem;
  min-width: 210px;
  list-style: none;
  margin: 0;
  display: none;
  z-index: 60;
}

.nav-item:hover .nav-dropdown,
.nav-item:focus-within .nav-dropdown {
  display: block;
}

.nav-dropdown li a {
  display: block;
  padding: 0.55rem 0.8rem;
  border-radius: 0.5rem;
  font-size: 0.88rem;
  font-weight: 600;
  color: var(--ink);
  white-space: nowrap;
}

.nav-dropdown li a:hover {
  background: var(--cream);
  color: var(--sky);
}

.nav-toggle {
  display: none;
  border: none;
  background: none;
  padding: 0.4rem;
  cursor: pointer;
}

.nav-toggle span,
.nav-toggle::before,
.nav-toggle::after {
  content: "";
  display: block;
  width: 22px;
  height: 2px;
  background: var(--ink);
  margin: 5px 0;
  border-radius: 2px;
}

/* ---------------------------------- internal page photo headers ----------------------------------
   A consistent split banner for every page except Home. The image is kept in
   the document (rather than as a decorative background) so its meaning and
   dimensions remain available to assistive technology and the browser. */

.page-header {
  padding-block: 0 clamp(2.25rem, 4vw, 3.5rem);
  border-bottom: 0;
}

.page-header .page-header-card {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(360px, 1.1fr);
  width: 100%;
  max-width: none;
  height: clamp(320px, 25vw, 360px);
  min-height: 0;
  padding: 0;
  overflow: hidden;
  border-block: 1px solid rgba(185, 104, 44, 0.14);
  border-inline: 0;
  border-radius: 0;
  background:
    radial-gradient(circle at 5% 0%, rgba(255, 183, 77, 0.18), transparent 42%),
    linear-gradient(135deg, #fffaf4 0%, #fff0df 100%);
  box-shadow: var(--shadow-card);
}

.page-header-copy {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  padding-block: 1.5rem;
  padding-right: clamp(1.5rem, 3vw, 3.5rem);
  padding-left: max(1.5rem, calc((100vw - 1180px) / 2 + 1.5rem));
}

.page-header-copy::before {
  content: "";
  width: 3.4rem;
  height: 0.3rem;
  margin-bottom: 0.8rem;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--sun-dark), var(--sun));
}

.page-header h1 {
  max-width: 14ch;
  margin: 0 0 0.75rem;
  color: var(--ink);
  font-size: clamp(2rem, 3.5vw, 3.15rem);
  line-height: 1.04;
  text-wrap: balance;
}

.page-header p {
  max-width: 52ch;
  color: var(--ink-soft);
  font-size: 0.98rem;
  line-height: 1.55;
}

.page-header-media {
  position: relative;
  height: 100%;
  min-height: 0;
  overflow: hidden;
  background: #eadfce;
}

.page-header-media::after {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: clamp(2.5rem, 6vw, 6.5rem);
  background: linear-gradient(90deg, rgba(255, 240, 223, 0.88), transparent);
  pointer-events: none;
}

.page-header-media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Referral header: the official transparent logo is repeated through the Z
   axis to give the mark visible depth during its slow rotation. This stays as
   live HTML/CSS rather than a video, so it remains sharp and lightweight. */
.page-header-media--logo {
  display: grid;
  place-items: center;
  isolation: isolate;
  overflow: hidden;
  perspective: 1100px;
  background:
    radial-gradient(circle at 68% 34%, rgba(255, 184, 0, 0.32), transparent 24%),
    radial-gradient(circle at 28% 68%, rgba(34, 164, 221, 0.3), transparent 28%),
    linear-gradient(135deg, #f8fbfd 0%, #e5f2f7 48%, #fff1dc 100%);
}

.page-header-media--logo::before {
  content: "";
  position: absolute;
  width: min(72%, 34rem);
  aspect-ratio: 1;
  border: 1px solid rgba(255, 255, 255, 0.75);
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.18);
  box-shadow:
    inset 18px 18px 36px rgba(34, 164, 221, 0.1),
    inset -18px -18px 36px rgba(255, 184, 0, 0.1),
    0 18px 50px rgba(36, 73, 92, 0.12);
}

.page-header-media--logo::after {
  inset: auto 50% 11%;
  width: min(52%, 25rem);
  height: 1.35rem;
  border-radius: 50%;
  background: rgba(36, 73, 92, 0.22);
  filter: blur(13px);
  transform: translateX(50%);
  animation: referral-logo-shadow 7.2s ease-in-out infinite;
}

.referral-logo-stage {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  transform-style: preserve-3d;
}

.referral-logo-reveal {
  position: relative;
  width: min(76%, 34rem);
  aspect-ratio: 1122 / 570;
  transform-style: preserve-3d;
}

.page-header-media--logo .referral-logo-layer {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  backface-visibility: hidden;
  transform-origin: 50% 45%;
  will-change: transform, opacity, clip-path, filter;
}

.referral-logo-symbol,
.referral-logo-piece {
  clip-path: inset(0 0 40% 0);
  filter:
    drop-shadow(0 7px 7px rgba(24, 79, 108, 0.17))
    drop-shadow(0 15px 20px rgba(24, 79, 108, 0.13));
}

.referral-logo-symbol {
  animation: referral-logo-symbol 7.2s linear infinite;
}

.referral-logo-piece {
  opacity: 0;
  filter:
    brightness(0.92)
    saturate(1.15)
    drop-shadow(8px 8px 5px rgba(22, 67, 93, 0.18))
    drop-shadow(-3px -2px 2px rgba(31, 169, 230, 0.28));
}

.referral-logo-piece--left {
  clip-path: polygon(0 0, 42.5% 0, 42.5% 60%, 0 60%);
  animation: referral-logo-piece-left 7.2s cubic-bezier(0.22, 0.72, 0.18, 1) infinite;
}

.referral-logo-piece--centre {
  clip-path: polygon(42.5% 0, 59% 0, 59% 60%, 42.5% 60%);
  animation: referral-logo-piece-centre 7.2s cubic-bezier(0.22, 0.72, 0.18, 1) infinite;
}

.referral-logo-piece--right {
  clip-path: polygon(59% 0, 100% 0, 100% 60%, 59% 60%);
  animation: referral-logo-piece-right 7.2s cubic-bezier(0.22, 0.72, 0.18, 1) infinite;
}

.referral-logo-wordmark {
  clip-path: inset(60% 0 0 0);
  filter:
    drop-shadow(0 5px 5px rgba(24, 79, 108, 0.15))
    drop-shadow(0 12px 18px rgba(24, 79, 108, 0.12));
  animation: referral-logo-wordmark 7.2s cubic-bezier(0.22, 0.72, 0.18, 1) infinite;
}

@keyframes referral-logo-symbol {
  0%, 13% { opacity: 1; transform: scale(1); }
  15%, 48% { opacity: 0; transform: scale(0.96); }
  51%, 100% { opacity: 1; transform: scale(1); }
}

@keyframes referral-logo-piece-left {
  0%, 13% { opacity: 0; transform: translate3d(0, 0, 0) rotate(0); }
  15% { opacity: 1; transform: translate3d(0, 0, 0) rotate(0); }
  27% { opacity: 1; transform: translate3d(-2.35rem, 0.75rem, 2rem) rotateY(48deg) rotateZ(-8deg) scale(0.9); }
  38% { opacity: 1; transform: translate3d(-1.3rem, -0.4rem, 1rem) rotateY(27deg) rotateZ(-3deg) scale(0.94); }
  48% { opacity: 1; transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  51%, 100% { opacity: 0; transform: translate3d(0, 0, 0) rotate(0); }
}

@keyframes referral-logo-piece-centre {
  0%, 13% { opacity: 0; transform: translate3d(0, 0, 0) rotate(0); }
  15% { opacity: 1; transform: translate3d(0, 0, 0) rotate(0); }
  27% { opacity: 1; transform: translate3d(0, -2rem, 2.6rem) rotateX(26deg) rotateY(-38deg) scale(0.88); }
  38% { opacity: 1; transform: translate3d(0, -0.8rem, 1.2rem) rotateX(12deg) rotateY(-20deg) scale(0.95); }
  48% { opacity: 1; transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  51%, 100% { opacity: 0; transform: translate3d(0, 0, 0) rotate(0); }
}

@keyframes referral-logo-piece-right {
  0%, 13% { opacity: 0; transform: translate3d(0, 0, 0) rotate(0); }
  15% { opacity: 1; transform: translate3d(0, 0, 0) rotate(0); }
  27% { opacity: 1; transform: translate3d(2.35rem, 0.85rem, 2rem) rotateY(-48deg) rotateZ(8deg) scale(0.9); }
  38% { opacity: 1; transform: translate3d(1.3rem, -0.35rem, 1rem) rotateY(-27deg) rotateZ(3deg) scale(0.94); }
  48% { opacity: 1; transform: translate3d(0, 0, 0) rotate(0) scale(1); }
  51%, 100% { opacity: 0; transform: translate3d(0, 0, 0) rotate(0); }
}

@keyframes referral-logo-wordmark {
  0%, 13% {
    opacity: 1;
    clip-path: inset(60% 0 0 0);
    filter: drop-shadow(0 8px 12px rgba(24, 79, 108, 0.14));
  }
  16%, 52% {
    opacity: 0;
    clip-path: inset(60% 100% 0 0);
    filter: grayscale(0.35) brightness(0.82) blur(1px);
  }
  53% {
    opacity: 1;
    clip-path: inset(60% 100% 0 0);
    filter: grayscale(0.35) brightness(0.82) blur(1px);
  }
  72%, 100% {
    opacity: 1;
    clip-path: inset(60% 0 0 0);
    filter: drop-shadow(0 8px 12px rgba(24, 79, 108, 0.14));
  }
}

@keyframes referral-logo-shadow {
  0%, 13%, 51%, 100% {
    opacity: 0.82;
    transform: translateX(50%) scaleX(1);
  }
  27%, 38% {
    opacity: 0.38;
    transform: translateX(50%) scaleX(0.48);
  }
}

@media (prefers-reduced-motion: reduce) {
  .referral-logo-symbol,
  .referral-logo-piece,
  .referral-logo-wordmark,
  .page-header-media--logo::after {
    animation: none;
  }

  .referral-logo-symbol,
  .referral-logo-wordmark {
    opacity: 1;
    transform: none;
  }

  .referral-logo-wordmark {
    clip-path: inset(60% 0 0 0);
  }

  .referral-logo-piece {
    opacity: 0;
  }
}

.page-header .eyebrow {
  margin-bottom: 0.85rem;
}

.page-header .policy-meta {
  margin-top: 1rem;
  font-size: 0.8rem;
}

.page-header .policy-actions {
  max-width: none;
  margin-top: 1.25rem;
}

@media (max-width: 820px) {
  .page-header .page-header-card {
    grid-template-columns: 1fr;
    height: auto;
    min-height: 0;
  }

  .page-header-copy {
    padding: clamp(1.5rem, 7vw, 2.5rem);
  }

  .page-header-media {
    height: auto;
    min-height: clamp(180px, 52vw, 280px);
  }

  .page-header-media::after {
    inset: 0 0 auto;
    width: auto;
    height: 3.5rem;
    background: linear-gradient(180deg, rgba(255, 240, 223, 0.72), transparent);
  }

}

@media (max-width: 480px) {
  .page-header {
    padding-block: 0 2.25rem;
  }

  .page-header h1 {
    font-size: clamp(2rem, 10vw, 2.75rem);
  }

  .page-header p {
    font-size: 0.98rem;
  }
}

/* .page-header p (1 class + 1 element) otherwise outranks .purpose-lead
   (1 class) on font-size, leaving the About hero's lead line the same
   size as the paragraph under it. */
.page-header .purpose-lead {
  font-size: 1.16rem;
  margin-bottom: 0.6rem;
}

/* ---------------------------------- hero ---------------------------------- */

.hero {
  position: relative;
  z-index: 1;
  background: linear-gradient(
    0deg,
    var(--accent-warm) 0%,
    var(--glow-hero) var(--glow-peak),
    var(--accent-warm) var(--glow-fade)
  );
  padding-block: 3.5rem 7rem;
}

.hero-grid {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: 3.5rem;
  align-items: center;
}

.hero-copy h1 {
  font-size: var(--fs-h1);
  line-height: 1.02;
  margin-block: 1.1rem 1.1rem;
}

.hero-accent {
  color: var(--sun);
  display: block;
}

.hero-sub {
  font-size: 1.08rem;
  color: var(--ink-soft);
  max-width: 46ch;
}

.hero-actions {
  display: flex;
  gap: 0.9rem;
  margin-top: 1.8rem;
  flex-wrap: wrap;
}

/* The six trust points that used to sit here repeated the why-choose-us cards
   below word for word, so the hero now lists what we actually do instead. */
.hero-services {
  list-style: none;
  margin: 2rem 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.7rem 1.4rem;
}

.hero-services a {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-weight: 600;
  font-size: 0.92rem;
  color: var(--ink);
  text-decoration: none;
  transition: color 0.2s cubic-bezier(0.215, 0.61, 0.355, 1);
}

.hero-services svg {
  color: var(--sun);
  flex-shrink: 0;
  transition: transform 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);
}

@media (hover: hover) and (pointer: fine) {
  .hero-services a:hover {
    color: var(--sun-dark);
  }

  .hero-services a:hover svg {
    transform: translateX(3px);
  }
}

.hero-services a:focus-visible {
  color: var(--sun-dark);
  border-radius: 0.35rem;
  outline-offset: 4px;
}

.hero-services a:focus-visible svg {
  transform: translateX(3px);
}

.hero-services a:active svg {
  transform: translateX(1px);
}

.hero-badge {
  height: 52px;
  width: auto;
  margin-top: 1.8rem;
}

.hero-visual {
  position: relative;
}

/* No card chrome — the photo dissolves straight into the hero background
   via a soft elliptical mask instead of sitting on it as a framed object. */
.hero-photo-card {
  position: relative;
}

.hero-photo-card img {
  width: 100%;
  height: 520px;
  object-fit: cover;
  object-position: center 35%;
  display: block;
  /* Feather all four edges while keeping the centre fully opaque — a radial
     vignette would wash out the two faces, which sit near the outer edges. */
  -webkit-mask-image:
    linear-gradient(to right, transparent 0%, #000 14%, #000 86%, transparent 100%),
    linear-gradient(to bottom, transparent 0%, #000 12%, #000 84%, transparent 100%);
  mask-image:
    linear-gradient(to right, transparent 0%, #000 14%, #000 86%, transparent 100%),
    linear-gradient(to bottom, transparent 0%, #000 12%, #000 84%, transparent 100%);
  -webkit-mask-composite: source-in;
  mask-composite: intersect;
}

/* ---------------------------------- quick contact band ---------------------------------- */

.quick-band {
  padding-block: clamp(2rem, 4vw, 3.5rem);
}

.quick-band-inner {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(19rem, 0.75fr);
  gap: clamp(1rem, 2vw, 1.6rem);
  align-items: stretch;
}

.quick-band-copy {
  position: relative;
  min-height: 27rem;
  overflow: hidden;
  border: 1px solid rgba(31, 107, 165, 0.12);
  border-radius: var(--radius);
  background:
    radial-gradient(circle at 85% 78%, rgba(242, 165, 26, 0.22), transparent 28%),
    linear-gradient(135deg, #eef6fb 0%, #dcecf6 100%);
  box-shadow: 0 18px 38px -26px rgba(31, 107, 165, 0.36);
  isolation: isolate;
}

.quick-band-copy h2 {
  position: relative;
  z-index: 2;
  width: 55%;
  max-width: 11ch;
  margin: 0;
  padding: clamp(2rem, 4vw, 3.25rem) 0 2rem clamp(1.5rem, 3.5vw, 3rem);
  color: #17384e;
  font-size: clamp(2.1rem, 4vw, 3.8rem);
  line-height: 1.02;
  letter-spacing: -0.045em;
}

.quick-band-copy__portrait {
  position: absolute;
  z-index: 1;
  right: clamp(-1.5rem, -1vw, -0.4rem);
  bottom: -0.2rem;
  width: min(55%, 25rem);
  height: 96%;
  object-fit: contain;
  object-position: right bottom;
  filter: drop-shadow(0 16px 20px rgba(23, 56, 78, 0.16));
}

.quick-band-copy p {
  color: var(--ink-soft);
  max-width: 46ch;
}

.quick-band-copy a {
  color: var(--sun-dark);
  font-weight: 600;
}

@media (max-width: 860px) {
  .quick-band-inner {
    grid-template-columns: 1fr;
    gap: 1rem;
  }

  .quick-band-copy h2 {
    width: 58%;
  }
}

.quick-contact {
  display: flex;
  padding: 1.35rem;
  border: 1px solid rgba(31, 107, 165, 0.14);
  border-radius: var(--radius);
  background: linear-gradient(145deg, #f7fafc 0%, #e8f2f8 100%);
  box-shadow: 0 18px 38px -26px rgba(31, 107, 165, 0.34);
  flex-direction: column;
  justify-content: center;
}

.quick-contact h3 {
  margin-bottom: 0.85rem;
  color: #17384e;
  font-size: 1.3rem;
}

.qc-field {
  margin-bottom: 0.72rem;
}

.qc-field input,
.qc-field select {
  width: 100%;
  padding: 0.68rem 0.85rem;
  border: 1px solid rgba(23, 56, 78, 0.18);
  border-radius: 0.6rem;
  background: rgba(255, 255, 255, 0.92);
  font-family: var(--font-body);
  font-size: 0.95rem;
  color: var(--ink);
}

.qc-field input::placeholder {
  color: var(--ink-soft);
}

.qc-error {
  display: none;
  color: #dc2626;
  font-weight: 700;
  font-size: 0.82rem;
  margin: 0.4rem 0 0;
}

.qc-field.invalid input {
  border-color: #dc2626;
  border-bottom: 2px solid #dc2626;
}

.qc-field.invalid .qc-error {
  display: block;
}

.qc-submit {
  width: 100%;
  padding: 0.78rem;
  border: none;
  border-radius: 0.75rem;
  background: linear-gradient(100deg, var(--sun-dark), var(--cta));
  color: #071a29;
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 1rem;
  cursor: pointer;
  transition: background 0.15s ease;
}

.qc-submit:hover {
  background: linear-gradient(100deg, #713716, var(--cta-dark));
}

@media (max-width: 560px) {
  .quick-band-copy {
    min-height: 31rem;
  }

  .quick-band-copy h2 {
    width: 100%;
    max-width: 12ch;
    padding: 1.6rem 1.35rem;
    font-size: clamp(2rem, 10vw, 3rem);
  }

  .quick-band-copy__portrait {
    right: -1.25rem;
    width: min(82%, 23rem);
    height: 72%;
  }
}

/* ---------------------------------- service strip ---------------------------------- */

.service-strip {
  padding-block: 1rem 3rem;
}

/* ---------------------------------- elastic service gallery ---------------------------------- */

.strip-heading {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 1.7rem;
}

.elastic-gallery {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  gap: 0.7rem;
  height: 460px;
}

.eg-item {
  flex: 1 1 0;
  min-width: 0;
  transition: flex-grow 0.7s cubic-bezier(0.25, 1, 0.5, 1);
}

/* Expand on hover or keyboard focus — siblings keep flex-grow 1 and give way */
.eg-item:hover,
.eg-item:focus-within {
  flex-grow: 4;
}

.eg-item > a {
  position: relative;
  display: block;
  height: 100%;
  overflow: hidden;
  border-radius: var(--radius);
  text-decoration: none;
  isolation: isolate;
}

.eg-item img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1.09);
  transition: transform 0.9s cubic-bezier(0.25, 1, 0.5, 1);
}

.eg-item:hover img,
.eg-item:focus-within img {
  transform: scale(1);
}

/* Dim every panel once the row is engaged, then bring the hovered one back */
.eg-item > a::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(12, 6, 2, 0.82), rgba(12, 6, 2, 0.25) 55%, rgba(12, 6, 2, 0.3));
  transition: background 0.5s ease;
}

.elastic-gallery:hover .eg-item > a::after,
.elastic-gallery:focus-within .eg-item > a::after {
  background: linear-gradient(to top, rgba(12, 6, 2, 0.7), rgba(12, 6, 2, 0.55) 55%, rgba(12, 6, 2, 0.6));
}

.elastic-gallery .eg-item:hover > a::after,
.elastic-gallery .eg-item:focus-within > a::after {
  background: linear-gradient(to top, rgba(12, 6, 2, 0.85), rgba(12, 6, 2, 0.12) 60%, transparent);
}

/* Collapsed state — vertical spine label */
.eg-spine {
  position: absolute;
  bottom: 1.6rem;
  left: 50%;
  z-index: 1;
  transform: translateX(-50%);
  writing-mode: vertical-rl;
  white-space: nowrap;
  font-family: var(--font-utility);
  font-size: 0.74rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  font-weight: 600;
  color: #fff8f0;
  opacity: 1;
  transition: opacity 0.35s ease;
}

.eg-item:hover .eg-spine,
.eg-item:focus-within .eg-spine {
  opacity: 0;
  transition-duration: 0.2s;
}

/* Expanded state — full detail panel */
.eg-panel {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.5rem;
  padding: 1.8rem;
  opacity: 0;
  transform: translateY(2.5rem);
  transition: opacity 0.45s ease, transform 0.55s cubic-bezier(0.25, 1, 0.5, 1);
}

.eg-item:hover .eg-panel,
.eg-item:focus-within .eg-panel {
  opacity: 1;
  transform: translateY(0);
  transition-delay: 0.12s;
}

.eg-tag {
  font-family: var(--font-utility);
  font-size: 0.66rem;
  letter-spacing: 0.14em;
  font-weight: 600;
  color: #fff8f0;
  padding: 0.25rem 0.6rem;
  border-radius: var(--radius-pill);
  border: 1px solid rgba(255, 255, 255, 0.32);
  background: rgba(255, 255, 255, 0.14);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

.eg-title {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(1.5rem, 2.2vw, 2.1rem);
  line-height: 1.05;
  letter-spacing: -0.015em;
  color: #fff8f0;
}

.eg-desc {
  font-size: 0.92rem;
  color: rgba(255, 248, 240, 0.82);
  max-width: 34ch;
}

.eg-cta {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  margin-top: 0.4rem;
  font-family: var(--font-utility);
  font-size: 0.7rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--sun);
}

.eg-item:hover .eg-cta svg,
.eg-item:focus-within .eg-cta svg {
  transform: translate(2px, -2px);
}

.eg-cta svg {
  transition: transform 0.35s cubic-bezier(0.25, 1, 0.5, 1);
}

/* Touch devices get no hover, so drop the accordion for a plain card grid */
@media (max-width: 900px) {
  .elastic-gallery {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0.7rem;
    height: auto;
  }

  .eg-item,
  .eg-item:hover,
  .eg-item:focus-within {
    flex: none;
  }

  .eg-item > a {
    height: 190px;
  }

  .eg-item img,
  .eg-item:hover img {
    transform: scale(1);
  }

  .eg-spine {
    display: none;
  }

  .eg-panel {
    opacity: 1;
    transform: none;
    padding: 1rem;
    gap: 0.3rem;
  }

  .eg-tag,
  .eg-desc {
    display: none;
  }

  .eg-title {
    font-size: 1.05rem;
  }

  .eg-cta {
    font-size: 0.6rem;
  }
}

.service-strip .eyebrow {
  margin-bottom: 1.1rem;
}

.strip-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.9rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

.strip-list a {
  display: grid;
  grid-template-columns: auto 1fr;
  column-gap: 0.75rem;
  row-gap: 0.3rem;
  text-decoration: none;
  color: var(--ink);
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  padding: 1.1rem 1.2rem;
  box-shadow: var(--shadow-raised);
  transition: border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
}

.strip-list a:hover {
  border-color: var(--sky);
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
}

.strip-icon {
  grid-row: 1 / 3;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: color-mix(in srgb, var(--sky) 12%, white);
  color: var(--sky-deep);
  flex-shrink: 0;
}

.strip-title {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  font-weight: 700;
  font-size: 0.98rem;
}

.strip-arrow {
  color: var(--ink-soft);
  flex-shrink: 0;
  transition: transform 0.15s ease;
}

.strip-list a:hover .strip-arrow {
  transform: translateX(3px);
  color: var(--sky);
}

.strip-desc {
  font-size: 0.85rem;
  color: var(--ink-soft);
  line-height: 1.4;
}

/* ---------------------------------- about ---------------------------------- */

.about {
  padding-block: 3rem 4.5rem;
}

.about .wrap {
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  gap: 3rem;
  align-items: center;
}

.about-media {
  border-radius: var(--radius);
  overflow: hidden;
  border: 1px solid var(--line);
  box-shadow: var(--shadow-card);
}

.about-media img {
  width: 100%;
  height: 320px;
  object-fit: cover;
  object-position: top;
}

.about-copy h2 {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 1rem;
  line-height: 1.15;
}

.about-copy p {
  color: var(--ink-soft);
  font-size: 1.02rem;
  max-width: 56ch;
}

.about-copy p + p {
  margin-top: 1rem;
}

.stat-callout {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4rem 0.8rem;
  margin-top: 1.4rem;
  padding: 1rem 1.2rem;
  background: var(--paper);
  border: 1px solid var(--line);
  border-left: 3px solid var(--sun);
  border-radius: var(--radius-sm);
  max-width: 56ch;
}

.stat-number {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.5rem;
  color: var(--ink);
  flex-shrink: 0;
}

.stat-label {
  font-size: 0.85rem;
  color: var(--ink-soft);
  line-height: 1.4;
}

/* ---------------------------------- trust grid ---------------------------------- */

/* One continuous dark region spanning the stats band + "Why choose us",
   so the page switches background colour once instead of twice. */
.dark-zone {
  position: relative;
  isolation: isolate;
  color: #f4ece3;
  background:
    radial-gradient(85% 55% at 3% 0%, rgba(110, 143, 118, 0.32), transparent 62%),
    radial-gradient(75% 60% at 97% 100%, rgba(164, 85, 42, 0.17), transparent 64%),
    linear-gradient(155deg, var(--sky-deep), #2d3a31);
}

.dark-zone::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  opacity: 0.28;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='dz'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23dz)' opacity='0.4'/%3E%3C/svg%3E");
}

/* First child of the dark zone now, so it needs its own top breathing room */
.trust {
  padding-block: 4rem 4.5rem;
}

.trust h2 {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 0.9rem;
  color: #fff;
}

.trust-intro {
  color: rgba(244, 236, 227, 0.72);
  font-size: 1.02rem;
  max-width: 62ch;
  margin-bottom: 1.8rem;
}

.trust-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
}

/* About's commitments grid holds four cards, so three columns strand the last
   one alone on a second row. Four across matches trymeridian.com's enterprise
   row, which is where this card treatment comes from. Drops to two columns
   early — at 1100px four cards are ~250px wide and the mono label starts
   wrapping to three lines. Below 900px / 560px the shared .trust-grid rules in
   the responsive block take over. */
.trust-grid--four {
  grid-template-columns: repeat(4, 1fr);
}

@media (max-width: 1100px) {
  .trust-grid--four {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ---------------------------------- NDIS stats band ---------------------------------- */

/* Deep near-black strip capping the page just above the footer */
.stats-band {
  position: relative;
  color: #f4ece3;
  background:
    radial-gradient(70% 130% at 94% 50%, rgba(164, 85, 42, 0.2), transparent 62%),
    linear-gradient(180deg, #28322b, #303c34);
  padding-block: 3.2rem;
}

.stats-band-inner {
  display: grid;
  grid-template-columns: 1.35fr 1fr;
  gap: 3rem;
  align-items: center;
}

.stats-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}

.stats-list li {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding-left: 1.5rem;
  border-left: 1px solid rgba(255, 255, 255, 0.16);
}

.stats-list li:first-child {
  padding-left: 0;
  border-left: 0;
}

.stat-num {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(1.7rem, 2.6vw, 2.5rem);
  line-height: 1;
  letter-spacing: -0.02em;
  color: #fff;
  font-variant-numeric: tabular-nums;
}

.stat-cap {
  font-size: 0.84rem;
  line-height: 1.4;
  color: rgba(244, 236, 227, 0.68);
}

.stats-aside p {
  color: rgba(244, 236, 227, 0.8);
  font-size: 0.95rem;
  max-width: 44ch;
}

.stats-link {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  margin-top: 1rem;
  font-weight: 700;
  font-size: 0.92rem;
  /* Was --sun. That rust is built for the LIGHT page, where it passes
     comfortably; on this dark green band it measured 2.15-2.47:1 at 14.72px/700
     — under half the 4.5 it needs, and failing with the dot field entirely
     disabled, so this was a pre-existing bug rather than anything the field
     introduced. Gold is the site's existing on-dark accent (see .ed-cta) and
     measures 5.58:1 against the band's darkest stop. */
  color: var(--cta);
  text-decoration: none;
}

.stats-link svg {
  transition: transform 0.35s cubic-bezier(0.25, 1, 0.5, 1);
}

.stats-link:hover svg,
.stats-link:focus-visible svg {
  transform: translateX(4px);
}

/* Needs to out-specify `.stats-aside p` above, which would otherwise win on size */
.stats-aside .stats-source {
  margin-top: 1.2rem;
  font-family: var(--font-utility);
  font-size: 0.64rem;
  letter-spacing: 0.06em;
  line-height: 1.5;
  color: rgba(244, 236, 227, 0.45);
  max-width: none;
}

@media (max-width: 900px) {
  .stats-band-inner {
    grid-template-columns: 1fr;
    gap: 2rem;
  }

  .stats-list {
    grid-template-columns: 1fr;
    gap: 1.2rem;
  }

  .stats-list li {
    padding-left: 0;
    border-left: 0;
    border-top: 1px solid rgba(255, 255, 255, 0.14);
    padding-top: 1.1rem;
  }

  .stats-list li:first-child {
    border-top: 0;
    padding-top: 0;
  }
}

/* Same frosted treatment as the glass stats card in the closing band */
/* Solid light cards on the dark green field. These were translucent white over
   the dark zone; going opaque means everything inside had to flip from
   light-on-dark to dark-on-light, and backdrop-filter came out — there's nothing
   left to blur through an opaque card, it was only costing GPU time. */
/* Geometry ported from trymeridian.com/enterprise, measured rather than
   eyeballed: 1px hairline, 10px radius, 16px/20px padding, 128px min-height,
   flat fill with no drop shadow. Their card fill is #eff0f0 — the same value
   this card already used — so only the frame changed.

   Two deliberate departures. Their border is #c5c7c8, a cool grey; here it is
   ink at 20% over the fill, which composites to ~#c6c6c6 at the same weight
   but carries the site's warm tint instead of a second grey family. And their
   card is shadowless because it sits on a near-white page: on a dark green
   band a shadowless card reads as pasted on, so a single tight contact shadow
   tinted to the band's own green keeps it seated without reintroducing the
   floating-tile stack this card used to carry. */
.trust-card {
  position: relative;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 8rem;
  background: #eff0f0;
  border: 1px solid rgba(36, 31, 28, 0.2);
  border-radius: var(--radius-xs);
  padding: 1rem 1.25rem;
  box-shadow: 0 1px 2px rgba(20, 28, 23, 0.24);
  transition: transform 0.45s cubic-bezier(0.25, 1, 0.5, 1),
    box-shadow 0.45s cubic-bezier(0.25, 1, 0.5, 1), border-color 0.35s ease,
    background 0.35s ease;
}

/* Warm wash that rises from the lower-left corner on hover */
.trust-card::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0;
  background: radial-gradient(115% 90% at 18% 112%, color-mix(in srgb, var(--sun) 18%, transparent), transparent 68%);
  transition: opacity 0.45s ease;
}

/* Accent rule that draws across the top edge */
.trust-card::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(90deg, var(--sun), #ffc857);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.55s cubic-bezier(0.25, 1, 0.5, 1);
}

.trust-card > * {
  position: relative;
  z-index: 1;
}

/* Gated to real pointers — on touch, :hover sticks after a tap and would
   leave a card stuck in its lifted state */
@media (hover: hover) and (pointer: fine) {
  .trust-card:hover {
    transform: translateY(-3px);
    background: #ffffff;
    border-color: color-mix(in srgb, var(--sun) 42%, transparent);
    box-shadow: 0 1px 2px rgba(20, 28, 23, 0.26), 0 14px 28px -18px rgba(20, 28, 23, 0.5);
  }

  .trust-card:hover::before {
    opacity: 1;
  }

  .trust-card:hover::after {
    transform: scaleX(1);
  }
}

/* Icon and title share a row, as on the reference — 20px icon, 10px gap,
   centred, 20px of air before the body copy. The icon lost its rounded tinted
   chip in the process: the reference sets the accent on the glyph itself, and
   a chip at this card size would outweigh the label beside it. */
.trust-card-head {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  margin-bottom: 1.25rem;
}

.trust-icon {
  display: inline-flex;
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
  align-items: center;
  justify-content: center;
  /* Full-strength --sun, the direct equivalent of the reference's brand
     orange. 4.67:1 on this fill — icons need 3:1, so there is room. */
  color: var(--sun);
  transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1), color 0.35s ease;
}

@media (hover: hover) and (pointer: fine) {
  .trust-card:hover .trust-icon {
    transform: scale(1.1);
    color: var(--sun-dark);
  }
}

/* --------- animated line icons: About commitments and home services ---------

   A plain-CSS port of the icon motion on galvanite.io. Theirs is a Lottie —
   an After Effects export played through Webflow's lottie-web: measured live
   at 36 frames / 60fps = 0.6s, autoplay off, loop off, parked at frame 0 and
   played forward on card hover, snapping back to frame 0 on mouse-out.

   Not ported as Lottie, deliberately. That needs lottie-web plus a JSON per
   icon, and this project's stack is static files with puppeteer as the only
   npm dependency — CLAUDE.md's standing instruction is to port effects to
   plain CSS. What is reproduced is the READ, not the file: each part of the
   icon pops into place with a stagger, over the reference's own 0.6s total
   (0.42s per part + 3 x 0.06s of stagger), then sits still. Mouse-out drops
   the animation, which is the snap-back to frame 0.

   The same build motion is shared by About's commitments and the circular
   service icons beneath the home hero, keeping the icon language consistent.

   `transform-box: fill-box` is load-bearing: without it each path scales about
   the SVG's origin and the pieces fly in from the top-left corner instead of
   growing in place.

   Gated twice, as every motion on this site is: never under reduced motion,
   and never on coarse pointers, where :hover sticks after a tap and would
   leave the icon mid-build. */
@media (prefers-reduced-motion: no-preference) {
  @media (hover: hover) and (pointer: fine) {
    .trust-grid--four .trust-icon svg > *,
    .home-service-overview__icon svg > * {
      transform-box: fill-box;
      transform-origin: 50% 50%;
    }

    .trust-grid--four .trust-card:hover .trust-icon svg > *,
    .home-service-overview__grid a:hover .home-service-overview__icon svg > * {
      animation: icon-build 0.42s cubic-bezier(0.34, 1.56, 0.64, 1) both;
    }

    .trust-grid--four .trust-card:hover .trust-icon svg > *:nth-child(2),
    .home-service-overview__grid a:hover .home-service-overview__icon svg > *:nth-child(2) {
      animation-delay: 0.06s;
    }

    .trust-grid--four .trust-card:hover .trust-icon svg > *:nth-child(3),
    .home-service-overview__grid a:hover .home-service-overview__icon svg > *:nth-child(3) {
      animation-delay: 0.12s;
    }

    .trust-grid--four .trust-card:hover .trust-icon svg > *:nth-child(4),
    .home-service-overview__grid a:hover .home-service-overview__icon svg > *:nth-child(4) {
      animation-delay: 0.18s;
    }
  }
}

@keyframes icon-build {
  from {
    opacity: 0;
    transform: scale(0.35);
  }

  60% {
    opacity: 1;
  }

  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* The mono uppercase label is the reference's defining move. It costs nothing
   here: IBM Plex Mono is already loaded on all four pages as --font-utility,
   and the site already uses it for eyebrows, badges and stat captions — so
   this reads as an existing convention at a larger size, not a new typeface.
   Kept as a real <h3> with text-transform doing the casing, so the outline and
   screen-reader text stay sentence case. */
.trust-card h3 {
  font-family: var(--font-utility);
  font-size: 0.95rem;
  font-weight: 500;
  line-height: 1.2;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  margin-bottom: 0;
  color: var(--ink);
  text-wrap: balance;
}

.trust-card p {
  font-size: 0.95rem;
  color: var(--ink-soft);
  line-height: 1.5;
  text-wrap: pretty;
}

/* ---------------------------------- feature sections ---------------------------------- */

.feature {
  padding-block: 3.2rem;
  border-top: 1px solid var(--line);
}

.feature:first-of-type {
  border-top: none;
}

.feature .wrap {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 3.5rem;
  align-items: center;
}

.feature.reverse .wrap {
  direction: rtl;
}

.feature.reverse .wrap > * {
  direction: ltr;
}

.feature-media {
  border-radius: var(--radius);
  overflow: hidden;
  border: 1px solid var(--line);
  box-shadow: var(--shadow-card);
}

.feature-media img {
  width: 100%;
  height: 360px;
  object-fit: cover;
}

.feature-copy h2 {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 0.85rem;
  line-height: 1.18;
}

.feature-copy p {
  color: var(--ink-soft);
  font-size: 1rem;
  max-width: 48ch;
}

.feature-list {
  list-style: none;
  margin: 1.3rem 0 1.5rem;
  padding: 0;
  display: grid;
  gap: 0.6rem;
}

.feature-list li {
  display: flex;
  gap: 0.6rem;
  align-items: flex-start;
  font-weight: 600;
  font-size: 0.94rem;
}

.feature-list svg {
  color: var(--sun);
  flex-shrink: 0;
  margin-top: 0.15rem;
}

.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* ---------------------------------- community photo banner ---------------------------------- */

.community-photo {
  padding-block: 1rem 4rem;
}

/* ---------------------------------- layered home photo gallery ---------------------------------- */

.moment-gallery {
  position: relative;
  isolation: isolate;
  padding-block: clamp(2.5rem, 5vw, 5.5rem);
  overflow: hidden;
  background:
    radial-gradient(circle at 50% 46%, rgba(31, 107, 165, 0.16), transparent 30rem),
    linear-gradient(180deg, rgba(7, 30, 48, 0.7), rgba(10, 44, 67, 0.82)),
    url("assets/brisbane-story-bridge.jpg") center 52% / cover no-repeat;
}

.moment-gallery::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    linear-gradient(90deg, rgba(4, 21, 34, 0.32), transparent 24% 76%, rgba(4, 21, 34, 0.32)),
    linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent 42%, rgba(3, 18, 29, 0.24));
}

.moment-gallery__inner {
  position: relative;
  z-index: 1;
  width: min(1480px, 100% - 2rem);
}

.moment-stage {
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
}

.moment-stage::-webkit-scrollbar {
  display: none;
}

.moment-rail {
  display: flex;
  gap: 0.9rem;
  width: max-content;
}

.moment-card {
  position: relative;
  flex: 0 0 min(78vw, 340px);
  aspect-ratio: 3 / 4;
  padding: 0;
  overflow: hidden;
  scroll-snap-align: center;
  border: 0;
  border-radius: clamp(1rem, 1.7vw, 1.4rem);
  background: #d9d3c8;
  color: #fff;
  box-shadow: 0 16px 38px rgba(48, 36, 22, 0.14);
  cursor: pointer;
  isolation: isolate;
}

.moment-card::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(to top, rgba(25, 19, 13, 0.7), rgba(25, 19, 13, 0.08) 48%, transparent 68%);
  pointer-events: none;
}

.moment-card img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--photo-position, center);
  transition: transform 0.8s cubic-bezier(0.22, 1, 0.36, 1);
}

.moment-card:nth-child(3) img {
  --photo-position: 66% center;
}

.moment-card__label {
  position: absolute;
  z-index: 2;
  left: clamp(1rem, 2vw, 1.5rem);
  right: clamp(1rem, 2vw, 1.5rem);
  bottom: clamp(1rem, 2vw, 1.4rem);
  color: #fff;
  font-size: clamp(0.92rem, 1.2vw, 1.05rem);
  font-weight: 600;
  line-height: 1.25;
  text-align: left;
  text-shadow: 0 1px 12px rgba(0, 0, 0, 0.35);
}

.moment-gallery.is-enhanced .moment-stage {
  position: relative;
  height: clamp(31rem, 45vw, 40rem);
  overflow: visible;
  scroll-snap-type: none;
}

.moment-gallery.is-enhanced .moment-rail {
  position: relative;
  width: 100%;
  height: 100%;
  display: block;
}

.moment-gallery.is-enhanced .moment-card {
  position: absolute;
  top: 50%;
  left: 50%;
  width: clamp(17.5rem, 27vw, 24rem);
  height: clamp(23rem, 36vw, 32rem);
  aspect-ratio: auto;
  transform:
    translate(-50%, -50%)
    translateX(calc(var(--offset) * clamp(12.5rem, 20vw, 18rem)))
    translateY(calc((var(--distance) * 1.25rem) - 0.8rem))
    scale(calc(1 - (var(--distance) * 0.11)));
  opacity: calc(1 - (var(--distance) * 0.1));
  transition:
    transform 1.45s cubic-bezier(0.22, 1, 0.36, 1),
    opacity 1s ease,
    filter 1s ease,
    box-shadow 1s ease;
  will-change: transform;
}

.moment-gallery.is-enhanced .moment-card:not(.is-active) {
  filter: saturate(0.88) brightness(0.93);
}

.moment-gallery.is-enhanced .moment-card.is-active {
  box-shadow: 0 32px 70px rgba(2, 15, 25, 0.48);
}

.moment-gallery.is-enhanced .moment-card.is-active img {
  transform: scale(1.015);
}

.moment-gallery.is-enhanced .moment-card.is-outside {
  opacity: 0;
  pointer-events: none;
}

.moment-gallery.is-enhanced .moment-card:not(.is-active) .moment-card__label {
  opacity: 0;
}

.moment-controls {
  width: min(49rem, 100%);
  min-height: 3.25rem;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
}

.moment-caption,
.moment-count {
  margin: 0;
}

.moment-caption {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.moment-controls__actions,
.moment-nav,
.moment-count {
  display: flex;
  align-items: center;
}

.moment-controls__actions {
  gap: 0;
}

.moment-count {
  display: none;
}

.moment-count__line {
  width: clamp(2.5rem, 5vw, 4rem);
  height: 1px;
  background: var(--line);
}

.moment-nav {
  gap: 0.55rem;
}

.moment-arrow {
  width: 46px;
  height: 46px;
  padding: 0;
  display: grid;
  place-items: center;
  border: 1px solid rgba(255, 255, 255, 0.5);
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.9);
  color: var(--blue-ink);
  box-shadow: 0 7px 22px rgba(2, 15, 25, 0.28);
  cursor: pointer;
  backdrop-filter: blur(10px);
  transition: color 0.2s ease, background 0.2s ease, transform 0.2s ease;
}

.moment-arrow:active {
  transform: scale(0.93);
}

.moment-pause {
  min-height: 46px;
  padding: 0.65rem 0.95rem;
  border: 1px solid rgba(255, 255, 255, 0.5);
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.9);
  color: var(--blue-ink);
  box-shadow: 0 7px 22px rgba(2, 15, 25, 0.22);
  cursor: pointer;
  font: inherit;
  font-size: 0.8rem;
  font-weight: 700;
  backdrop-filter: blur(10px);
}

.moment-pause:hover,
.moment-pause[aria-pressed="true"] {
  background: var(--blue-ink);
  color: #fff;
}

@media (hover: hover) and (pointer: fine) {
  .moment-arrow:hover {
    background: var(--blue-ink);
    color: #fff;
  }

  .moment-gallery.is-enhanced .moment-card:not(.is-active):hover {
    filter: saturate(0.96) brightness(0.95);
  }
}

@media (max-width: 700px) {
  .moment-gallery {
    padding-block: 2.25rem 3rem;
  }

  .moment-gallery__inner {
    width: min(100% - 1rem, 34rem);
  }

  .moment-gallery.is-enhanced .moment-stage {
    height: 29rem;
  }

  .moment-gallery.is-enhanced .moment-card {
    width: min(76vw, 18.5rem);
    height: min(101vw, 24.7rem);
    transform:
      translate(-50%, -50%)
      translateX(calc(var(--offset) * 66vw))
      translateY(calc((var(--distance) * 0.8rem) - 0.45rem))
      scale(calc(1 - (var(--distance) * 0.12)));
  }

  .moment-controls {
    padding-inline: 0.5rem;
  }

  .moment-arrow {
    width: 43px;
    height: 43px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .moment-gallery.is-enhanced .moment-card,
  .moment-card img,
  .moment-arrow {
    transition: none;
  }
}


/* Copy and image share one card — the photo is anchored by large type rather
   than floating on its own, which is how kismet pairs the two. */
.photo-banner {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: center;
  gap: 3.5rem;
  background: var(--paper);
  border-radius: var(--radius);
  box-shadow: var(--shadow-card);
  overflow: hidden;
  padding: 3.5rem;
}

/* Image-only variant. The services page uses .photo-banner with no copy
   alongside it, which left the two-column grid with an empty half and the
   photo stranded at a fraction of the card's width. Here the image is the
   whole thing: one track, no padding, so it fills the rounded card edge to
   edge (the parent already clips with overflow: hidden). */
.photo-banner--solo {
  grid-template-columns: 1fr;
  gap: 0;
  padding: 0;
}

.photo-banner--solo img {
  width: 100%;
  height: clamp(16rem, 32vw, 26rem);
  object-fit: cover;
  /* Focal point sits high: this is a wide band cropped from a much squarer
     source, and centring it decapitated the standing figure. Real people —
     keep the faces in frame. */
  object-position: center 18%;
}

.photo-banner-copy h2 {
  font-size: var(--fs-h2);
  margin-bottom: 1.4rem;
  max-width: 14ch;
}

.photo-banner-copy p {
  color: var(--ink-soft);
  margin-bottom: 1.1rem;
  max-width: 46ch;
}

.photo-banner-copy .link-arrow {
  margin-top: 0.4rem;
}

.photo-banner-media {
  border-radius: var(--radius-sm);
  overflow: hidden;
}

.photo-banner-media img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  object-position: center 32%;
  display: block;
}

/* Mission, Vision and Values share one purpose-built static visual language. */
.concept-media {
  aspect-ratio: 4 / 3;
  background: #fff4e7;
}

.concept-media img {
  width: 100%;
  height: 100%;
  aspect-ratio: auto;
  object-fit: cover;
  object-position: center;
  display: block;
}

@media (max-width: 860px) {
  .photo-banner {
    grid-template-columns: 1fr;
    gap: 2rem;
    padding: 2rem;
  }

  .photo-banner-copy h2 {
    max-width: none;
  }
}

/* ---------------------------------- signature / approach band ---------------------------------- */

.approach {
  position: relative;
  padding-block: 5rem;
  color: #f6ede0;
  overflow: hidden;
  isolation: isolate;
}

.approach::before {
  content: "";
  position: absolute;
  inset: 0;
  /* Green overlay matching the page-bottom sections (globe band + footer, both
     built on --sky-deep #3a4a3f). This was a navy #091b2b/#0f2f4a, which made
     About's dark band the only blue-tinted dark surface on the site and read as
     a different palette from the homepage. */
  background-image: linear-gradient(120deg, rgba(45, 58, 49, 0.94), rgba(58, 74, 63, 0.86)),
    url("fitness-session.webp");
  background-size: cover;
  background-position: center 35%;
  z-index: -1;
}

.approach .wrap {
  max-width: 720px;
}

.approach h2 {
  font-size: var(--fs-h2);
  line-height: 1.15;
  margin-block: 1.1rem 1.2rem;
}

.approach p {
  font-size: 1.08rem;
  color: rgba(246, 237, 224, 0.86);
  max-width: 54ch;
}

.approach .btn {
  margin-top: 1.8rem;
}

/* ---------------------------------- testimonials ---------------------------------- */

.testimonials {
  padding-block: 4.5rem;
  border-top: 1px solid var(--line);
}

.testimonials h2 {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 1.6rem;
}

.testimonial-track {
  overflow: hidden;
  padding-block: 0.5rem 1rem;
  margin-bottom: 0.5rem;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 2.5rem, #000 calc(100% - 2.5rem), transparent);
  mask-image: linear-gradient(90deg, transparent, #000 2.5rem, #000 calc(100% - 2.5rem), transparent);
}

.testimonial-marquee {
  display: flex;
  gap: 1rem;
  width: max-content;
  animation: testimonial-scroll 58s linear infinite;
  will-change: transform;
}

.marquee-duplicate {
  display: contents;
}

.testimonial-marquee--legacy {
  display: none;
}

.testimonial-track:hover .testimonial-marquee,
.testimonial-track:focus-within .testimonial-marquee,
.testimonial-marquee.is-paused {
  animation-play-state: paused;
}

@keyframes testimonial-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(calc(-50% - 0.5rem)); }
}

.testimonial-card {
  flex: 0 0 min(23rem, calc(100vw - 3rem));
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  padding: 1.3rem;
  display: flex;
  flex-direction: column;
  box-shadow: var(--shadow-raised);
}

.testimonial-head {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  margin-bottom: 0.9rem;
}

.testimonial-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 0.95rem;
  color: #fff8f0;
  background: var(--sky);
}

.testimonial-card:nth-child(6n+2) .testimonial-avatar { background: var(--sun); }
.testimonial-card:nth-child(6n+3) .testimonial-avatar { background: var(--sky-deep); }
.testimonial-card:nth-child(6n+4) .testimonial-avatar { background: var(--sun-dark); }
.testimonial-card:nth-child(6n+5) .testimonial-avatar { background: #4a7a9e; }
.testimonial-card:nth-child(6n+6) .testimonial-avatar { background: #b8722f; }

.testimonial-name {
  display: block;
  font-size: 0.95rem;
  font-weight: 700;
  margin-bottom: 0.15rem;
}

.stars {
  color: #f5b400;
  letter-spacing: 2px;
  font-size: 0.95rem;
  margin-bottom: 0.7rem;
}

.testimonial-card p {
  font-size: 0.92rem;
  color: var(--ink);
  line-height: 1.5;
  margin-bottom: 0;
  flex-grow: 1;
}

.testimonial-meta {
  display: flex;
  align-items: center;
  gap: 0.55rem;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--ink-soft);
}

.google-mark {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--cream);
  border: 1px solid var(--line);
  display: grid;
  place-items: center;
  font-family: var(--font-utility);
  font-weight: 700;
  font-size: 0.68rem;
  color: #4285f4;
  flex-shrink: 0;
}

/* ---------------------------------- referral strip ---------------------------------- */

/* Was a two-column white card holding a photo of two support workers. That
   photo came out at the user's request on 2026-08-26. The section then held
   THREE gradient cards for a day, which was an overreach — it is back to one,
   which is what was asked for, so the row/panel/list rules that served the
   three-card layout are gone rather than left dead in the stylesheet. */
.referral {
  padding-block: 4rem;
}

/* Single white-to-orange card, treatment ported from trymeridian.com's
   enterprise row (`.home_time_visual_col`).

   THE MECHANISM IS `mix-blend-mode: luminosity`. A first build painted a
   translucent white dome over the gradient and it was badly wrong — sampling
   both at the same nine points put the reference's bottom-centre at #ff711a
   against #fde6d8 here. A white overlay does not shade an orange, it erases
   it. Luminosity keeps the hue and saturation underneath and takes only
   lightness from above, so the sphere shades the orange rather than covering
   it. `isolation: isolate` is load-bearing: without a stacking context the
   blend reaches the page behind the card instead of the card's own gradient.

   Two departures from the reference, both because the context differs:
   - The gradient starts at --paper WHITE, not their #eff0f0. Theirs is a
     page-grey card on a white page; this site is the other way round — the
     page IS #eff0f0 — so their value would dissolve the card's top edge.
   - The corner is --radius, not their 10px. Theirs is a 335px-wide card in a
     row of four; this is one full-width panel, and --radius is what every
     other full-width card on this page already uses. */
.arc-card {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  /* Copy at the top, arc below it — the reference's own structure, and here it
     is also a contrast requirement. Centred vertically, the paragraph's last
     lines ran down into the warm half and measured 4.81:1: passing, but 0.31
     above AA with a gradient underneath, which is no margin at all. Held to
     the top, it sits on white at 6.79:1. */
  justify-content: flex-start;
  min-height: 22rem;
  padding: 2.75rem;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  /* The reference ramps to full orange exactly at the bottom edge, which works
     there because its sphere is near-black and throws the surrounding orange
     into relief. With the pale dome used here, that left the orange as a thin
     strip in the bottom corners — so the ramp finishes at 95%. It also starts
     at 55% rather than their 20%, to keep the copy block clear of it. */
  background: linear-gradient(180deg, var(--paper) 55%, var(--glow) 95%);
  box-shadow: var(--shadow-card);
}

/* The reference's sphere is 469px across a 335px card and runs black-to-white,
   so each of its cards carries a near-black mass — sampled on all three, the
   darkest pixel is #040100. The screenshot this was chosen from shows a pale
   peach arc with no dark region, so the radial runs white-to-transparent
   instead: it lightens the orange into a dome and leaves it at full strength
   outside. Fading to `transparent` also replaces the reference's two
   54px-blur/40px-spread white shadows — a blended pixel at alpha 0 contributes
   nothing, so the edge feathers on its own.

   Sized off the card's WIDTH so the arc stays a shallow horizon across a
   full-width panel rather than the tall dome the reference's narrow card
   gets. To restore the reference exactly, swap the radial back for
   `radial-gradient(circle at 30% 30%, #000, #fff)`. */
.arc-sphere {
  position: absolute;
  top: 42%;
  left: 50%;
  width: 120%;
  aspect-ratio: 1;
  transform: translateX(-50%);
  border-radius: 50%;
  background: radial-gradient(
    circle at 50% 38%,
    rgba(255, 255, 255, 0.82) 0 44%,
    rgba(255, 255, 255, 0.54) 68%,
    rgba(255, 255, 255, 0) 88%
  );
  mix-blend-mode: luminosity;
  pointer-events: none;
}

/* Sits above the sphere. Named for the section rather than the card because
   `_page-dots-check.mjs` measures these two selectors by name. */
.referral-head {
  position: relative;
  z-index: 1;
  max-width: 52ch;
}

.referral-head h2 {
  font-size: var(--fs-h2-sm);
  margin-block: 0 0.8rem;
}

.referral-head p {
  color: var(--ink-soft);
  margin-bottom: 1.6rem;
}

/* ---------------------------------- enquiry form ---------------------------------- */

.enquiry {
  padding-block: 1rem 4rem;
}

.enquiry-card {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 2.5rem;
  box-shadow: var(--shadow-card);
}

.enquiry-intro {
  max-width: 60ch;
  margin-bottom: 1.8rem;
}

.enquiry-intro h2 {
  font-size: var(--fs-h2-sm);
  margin-block: 0.9rem 0.6rem;
}

.enquiry-intro p {
  color: var(--ink-soft);
}

.enquiry-form {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.1rem 1.5rem;
}

.field {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}

.field--full {
  grid-column: 1 / -1;
}

.field label {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--ink);
}

.field input,
.field select,
.field textarea {
  font-family: var(--font-body);
  font-size: 0.95rem;
  padding: 0.7rem 0.9rem;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--surface-alt);
  color: var(--ink);
  /* width: 100% + min-width: 0 were missing here. Every prior <select> on the
     site had short option text, so nothing ever exercised the gap: a native
     <select> can take its longest <option>'s rendered text as an intrinsic
     minimum width, and as a CSS Grid item that minimum inflates BOTH 1fr
     columns of .enquiry-form to fit it — every field in the grid, not just
     the select, ends up stretched. Found via referral.html's "As their
     support coordinator or plan manager" option: 30px of page-level overflow
     at 390px, traced by bisection to this one <select>, confirmed by
     shortening the option text and watching the overflow disappear before
     this fix (the general one) was written instead. */
  width: 100%;
  min-width: 0;
}

.field textarea {
  resize: vertical;
  min-height: 90px;
}

.form-actions {
  display: flex;
}

/* Divides the referral form into "about you" / "about the participant"
   without leaving the shared 2-column grid — both are `field--full` so they
   span it, same mechanism `.field-group` uses below. */
.form-subhead {
  margin: 0.6rem 0 0;
  padding-top: 1.4rem;
  border-top: 1px solid var(--line);
  font-size: 1.05rem;
  color: var(--ink);
}

.form-subhead-note {
  margin: -0.3rem 0 0;
  font-size: 0.85rem;
  color: var(--ink-soft);
}

/* ---------------------------------- field groups (radio/checkbox) ----------------------------------
   No precedent existed for a grouped radio/checkbox field before the referral
   form — every prior form on the site is text/email/tel/select/textarea only.
   Built to sit beside those: same label weight, same surface-alt/line/radius
   language as `.field input`, so a fieldset doesn't read as a different
   component bolted on. Native <input type="radio">/"checkbox"> throughout —
   keyboard and screen-reader support come free, which matters more here than
   on any other form on the site. */

.field-group {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  /* <fieldset> carries a default border/padding/min-width UAs disagree on. */
  border: 0;
  padding: 0;
  margin: 0;
  min-width: 0;
  /* min-width: 0 alone was not enough — measured this grid item rendering at
     content width (370px) rather than its actual ~289px cell at 390px
     viewport, overflowing the page by 30px. justify-self: stretch is the
     grid default and should have sized it to the cell on its own; it did
     not, here, with a flex-column child of a fieldset in the mix. width:
     100% forces the fill directly rather than depending on that default. */
  width: 100%;
}

.field-group > legend {
  display: block;
  width: 100%;
  padding: 0;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--ink);
}

.option-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
}

.option {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  padding: 0.55rem 0.9rem;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--surface-alt);
  color: var(--ink);
  font-size: 0.88rem;
  line-height: 1.3;
  cursor: pointer;
  transition: border-color 0.15s ease, background 0.15s ease;
}

.option input[type="radio"],
.option input[type="checkbox"] {
  flex-shrink: 0;
  width: 1.05rem;
  height: 1.05rem;
  accent-color: var(--cta-dark);
  margin: 0;
}

/* Progressive enhancement: the native control already shows its own checked
   state without this, so a browser lacking :has() just skips the pill tint —
   nothing is lost, nothing looks broken. */
.option:has(input:checked) {
  border-color: var(--cta-dark);
  background: color-mix(in srgb, var(--cta) 14%, var(--surface-alt));
}

@media (hover: hover) and (pointer: fine) {
  .option:hover {
    border-color: color-mix(in srgb, var(--cta-dark) 50%, var(--line));
  }
}

/* A checkbox has no border wide enough for the site's usual red-border invalid
   cue to read clearly, so grouped radios/checkboxes get an outline instead —
   same signal, better suited to a small native control. */
.option input[aria-invalid="true"] {
  outline: 2px solid #b91c1c;
  outline-offset: 2px;
}

/* One long sentence rather than a short label, so it takes the .option pill's
   inline-flex layout but drops the fixed padding rhythm meant for short
   words — align-items: flex-start keeps the checkbox pinned to the first
   line instead of drifting to the paragraph's vertical centre. */
.consent-option {
  align-items: flex-start;
  width: 100%;
  max-width: 60ch;
}

.consent-option input {
  margin-top: 0.2rem;
}

/* ---------------------------------- faq ---------------------------------- */

.faq {
  padding-block: 1rem 4.5rem;
}

.faq h2 {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 1.6rem;
}

.faq-list {
  display: grid;
  gap: 0.8rem;
  max-width: 760px;
}

.faq-item {
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  padding: 1.1rem 1.3rem;
  box-shadow: var(--shadow-raised);
}

.faq-item + .faq-item {
  margin-top: 0;
}

.faq-item summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  font-weight: 700;
  font-size: 1rem;
}

.faq-item summary::-webkit-details-marker {
  display: none;
}

.faq-chevron {
  flex-shrink: 0;
  color: var(--sky);
  transition: transform 0.2s ease;
}

.faq-item[open] .faq-chevron {
  transform: rotate(180deg);
}

.faq-item p {
  color: var(--ink-soft);
  margin-top: 0.8rem;
  font-size: 0.95rem;
  max-width: 60ch;
}

/* ---------------------------------- contact ---------------------------------- */

.contact {
  padding-block: 1rem 5rem;
}

.contact .wrap {
  background: linear-gradient(135deg, var(--sky-deep), #2f3d34);
  border-radius: var(--radius);
  padding: 3rem;
  color: #f4ece3;
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 2.5rem;
  align-items: center;
}

.contact h2 {
  font-size: var(--fs-h2);
  line-height: 1.15;
  margin-bottom: 0.9rem;
}

.contact-copy p {
  color: rgba(244, 236, 227, 0.78);
  max-width: 42ch;
}

.contact-details {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 1rem;
}

.contact-details li {
  display: flex;
  gap: 0.8rem;
  align-items: center;
  font-size: 0.98rem;
}

.contact-details a {
  text-decoration: none;
  font-weight: 700;
  color: #fff;
}

.contact-details .label {
  display: block;
  font-family: var(--font-utility);
  font-size: 0.66rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(244, 236, 227, 0.55);
  margin-bottom: 0.15rem;
}

.contact-icon {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  display: grid;
  place-items: center;
  flex-shrink: 0;
}

/* ---------------------------------- home closing cta ---------------------------------- */

.home-cta {
  padding-block: 1rem 5rem;
}

.home-cta .wrap {
  background: linear-gradient(135deg, var(--sky-deep), #2f3d34);
  border-radius: var(--radius);
  padding: 3.5rem 2.5rem;
  color: #f4ece3;
  text-align: center;
}

/* ---------------------------------- glass trust band ---------------------------------- */

/* Grain moved OFF ::before and into the background stack as its own top layer
   (2026-08-24). It lived on `::before` at z-index:-1, which needed
   `isolation: isolate` to keep it above the card's own gradient — and that
   stacking context, plus `overflow: hidden`, is exactly what stops the
   .lit-card halo from escaping the card's edges. Both are gone now.
   The old element carried `opacity: .3` over an SVG rect already at `.4`; a
   background layer has no per-layer opacity, so the product (.12) is baked
   into the rect instead and the render is unchanged. */
.trust-band .wrap {
  position: relative;
  text-align: left;
  padding: 3.2rem 3rem;
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.12'/%3E%3C/svg%3E"),
    radial-gradient(110% 85% at 8% 4%, rgba(110, 143, 118, 0.42), transparent 58%),
    radial-gradient(95% 85% at 94% 96%, rgba(164, 85, 42, 0.28), transparent 60%),
    linear-gradient(135deg, var(--sky-deep), #2d3a31);
}

.trust-band-inner {
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  gap: 2.75rem;
  align-items: center;
}

.trust-band .reveal {
  transition-delay: var(--rd, 0s);
}

.glass-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.45rem 0.9rem;
  border-radius: var(--radius-pill);
  border: 1px solid rgba(255, 255, 255, 0.14);
  background: rgba(255, 255, 255, 0.07);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  font-family: var(--font-utility);
  font-size: 0.66rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 600;
  color: rgba(244, 236, 227, 0.88);
}

.glass-badge svg {
  color: #ffc857;
}

.trust-band h2 {
  margin-block: 1.1rem 0.9rem;
  max-width: 18ch;
  line-height: 1.1;
}

/* Stays warm across the whole word so it reads as an accent, not a glitch,
   against the white text beside it */
.grad-text {
  background: linear-gradient(115deg, #ffcf9e 0%, #ffa657 45%, var(--sun) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.trust-band p {
  margin-inline: 0;
  color: rgba(244, 236, 227, 0.76);
  max-width: 46ch;
}

.trust-band-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.8rem;
  margin-top: 1.8rem;
}

/* Beats the `.home-cta .btn` margin further down the file */
.trust-band .trust-band-actions .btn {
  margin-top: 0;
}

.btn--glass {
  border: 1px solid rgba(255, 255, 255, 0.16);
  background: rgba(255, 255, 255, 0.07);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  color: #f4ece3;
}

.btn--glass:hover,
.btn--glass:focus-visible {
  background: rgba(255, 255, 255, 0.15);
  border-color: rgba(255, 255, 255, 0.32);
}

/* --- frosted stats card --- */

.glass-card {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius);
  border: 1px solid rgba(255, 255, 255, 0.12);
  background: rgba(255, 255, 255, 0.06);
  backdrop-filter: blur(18px);
  -webkit-backdrop-filter: blur(18px);
  padding: 1.9rem;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.22), 0 26px 52px -26px rgba(0, 0, 0, 0.6);
}

.glass-card::after {
  content: "";
  position: absolute;
  top: -4rem;
  right: -4rem;
  width: 15rem;
  height: 15rem;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.08);
  filter: blur(46px);
  pointer-events: none;
}

.glass-card-head {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-bottom: 1.6rem;
}

.glass-icon {
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  flex-shrink: 0;
  border-radius: 0.9rem;
  background: rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
  color: #ffc857;
}

.glass-stat-value {
  font-family: var(--font-display);
  font-size: 2rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1;
  color: #fff;
}

.glass-stat-value span {
  font-size: 1rem;
  color: rgba(244, 236, 227, 0.5);
}

.glass-stat-label {
  margin-top: 0.3rem;
  font-size: 0.82rem;
  color: rgba(244, 236, 227, 0.62);
}

.glass-meter-row {
  display: flex;
  justify-content: space-between;
  font-size: 0.84rem;
  color: rgba(244, 236, 227, 0.62);
  margin-bottom: 0.55rem;
}

.glass-meter-row strong {
  color: #fff;
  font-weight: 600;
}

.glass-track {
  display: block;
  height: 7px;
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.1);
  overflow: hidden;
}

.glass-fill {
  display: block;
  height: 100%;
  width: 94%;
  border-radius: var(--radius-pill);
  background: linear-gradient(90deg, var(--sun), #ffc857);
}

.glass-rule {
  height: 1px;
  background: rgba(255, 255, 255, 0.12);
  margin-block: 1.5rem 1.2rem;
}

.glass-mini {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
}

.glass-mini-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  flex: 1;
}

.glass-mini-item .v {
  font-family: var(--font-display);
  font-size: 1.2rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: #fff;
}

.glass-mini-item .l {
  font-family: var(--font-utility);
  font-size: 0.6rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(244, 236, 227, 0.5);
  margin-top: 0.2rem;
}

.glass-divider {
  width: 1px;
  align-self: stretch;
  background: rgba(255, 255, 255, 0.12);
}

.glass-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 1.5rem;
}

.glass-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.35rem 0.75rem;
  border-radius: var(--radius-pill);
  border: 1px solid rgba(255, 255, 255, 0.12);
  background: rgba(255, 255, 255, 0.06);
  font-family: var(--font-utility);
  font-size: 0.6rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 600;
  color: rgba(244, 236, 227, 0.8);
}

.live-dot {
  position: relative;
  display: inline-flex;
  width: 8px;
  height: 8px;
}

.live-dot-ping,
.live-dot-core {
  position: absolute;
  inset: 0;
  border-radius: 50%;
}

.live-dot-core {
  background: #3ddc84;
}

.live-dot-ping {
  background: rgba(61, 220, 132, 0.75);
  animation: glass-ping 1.9s cubic-bezier(0, 0, 0.2, 1) infinite;
}

@keyframes glass-ping {
  75%,
  100% {
    transform: scale(2.4);
    opacity: 0;
  }
}

.glass-creds {
  margin-top: 1.5rem;
}

.glass-creds img {
  height: 46px;
  width: auto;
  padding: 0.5rem 0.7rem;
  border-radius: 0.7rem;
  background: rgba(255, 255, 255, 0.92);
}

@media (max-width: 900px) {
  .trust-band-inner {
    grid-template-columns: 1fr;
    gap: 2rem;
  }

  .trust-band .wrap {
    padding: 2.5rem 1.6rem;
  }

  .trust-band h2 {
    max-width: none;
  }
}

.home-cta h2 {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 0.9rem;
}

.home-cta p {
  color: rgba(244, 236, 227, 0.78);
  max-width: 52ch;
  margin-inline: auto;
}

.home-cta .btn {
  margin-top: 1.6rem;
}

/* ---------------------------------- vision / mission ----------------------------------
   Long-form brand copy, so this leans on typography rather than card chrome: a
   constrained measure, one lead paragraph per block at a larger size, and a
   hairline between the two. Boxing this much prose would make it heavier to read,
   not lighter. */

.purpose {
  padding-block: 4rem 4.5rem;
}

.purpose-block + .purpose-block {
  margin-top: 3.2rem;
  padding-top: 3.2rem;
  border-top: 1px solid var(--line);
}

.purpose-block h2 {
  font-size: var(--fs-h2);
  margin-bottom: 1.2rem;
}

.purpose-block p {
  max-width: 68ch;
  color: var(--ink-soft);
  margin-block: 0 1rem;
}

/* Lead paragraph carries the statement itself, so it takes the eye first */
.purpose-lead {
  font-size: 1.16rem;
  line-height: 1.6;
  color: var(--ink) !important;
}

.commitments {
  list-style: none;
  margin: 1.8rem 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.6rem;
}

.commitments li {
  padding: 1.3rem 1.4rem;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-raised);
}

.commitments h3 {
  font-size: 1rem;
  margin-bottom: 0.45rem;
  color: var(--ink);
}

.commitments p {
  margin: 0;
  font-size: 0.92rem;
  line-height: 1.55;
}

/* ---------------------------------- values ----------------------------------
   Eleven items. Full cards for each would read as a wall of boxes, so these are
   separated by hairlines with an indexed counter — enough structure to scan,
   little enough chrome to stay calm. */

.values {
  background: var(--paper);
  padding-block: 4rem 4.5rem;
  border-top: 1px solid var(--line);
}

.values-heading {
  font-size: var(--fs-h2);
  margin-bottom: 0.9rem;
}

.values-intro {
  color: var(--ink-soft);
  max-width: 62ch;
  margin: 0;
}

.values-list {
  list-style: none;
  margin: 2.4rem 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
  gap: 0 2.4rem;
}

.values-list li {
  padding-block: 1.4rem;
  border-top: 1px solid var(--line);
}

.value-index {
  display: block;
  font-family: var(--font-utility);
  font-size: 0.72rem;
  letter-spacing: 0.08em;
  color: var(--sun);
  margin-bottom: 0.5rem;
}

.values-list h3 {
  font-size: 1rem;
  margin-bottom: 0.35rem;
  color: var(--ink);
}

.values-list p {
  margin: 0;
  font-size: 0.9rem;
  line-height: 1.55;
  color: var(--ink-soft);
}

@media (max-width: 700px) {
  .commitments {
    grid-template-columns: 1fr;
  }
}

/* ---------------------------------- stat cascade ----------------------------------
   Staggered rise, the effect ditiswatt.nl uses on its statistics row. Measured
   there: each column's content starts pushed down and travels to 0, staggered
   left to right, scrubbed by scroll position.

   Worth knowing: the diagonal "staircase" this produces is the animation caught
   mid-flight, not a static shape — at rest every column is flush. Each panel
   rises inside a clipping item, so a column part-way through shows section
   background above it, and the tops form a descending line.

   Driven by `animation-timeline: view()` so it scrubs with scroll rather than
   firing once. Deliberately NOT scroll-jacking: the page scrolls normally and
   this only reads the position. Where the timeline isn't supported, or the
   reader prefers reduced motion, the panels simply sit in their final state —
   the animation block is opt-in, so no-support is the readable default, never a
   blank or half-risen column. */

.cascade {
  background: var(--cream);
  padding-block: 4rem 4.5rem;
  overflow: hidden;
}

.cascade-heading {
  font-size: var(--fs-h2);
  margin-block: 0.9rem 0.8rem;
}

.cascade-intro {
  color: var(--ink-soft);
  max-width: 56ch;
  margin: 0;
}

.cascade-list {
  list-style: none;
  margin: 2.6rem 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 2px;
}

/* Clips its panel while it rises — this is what creates the diagonal */
.cascade-item {
  display: flex;
  overflow: hidden;
  min-height: 27rem;
}

.cascade-panel {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 2.5rem;
  padding: 1.9rem 1.4rem;
  color: #fff;
  /* Logo blue into brand rust — same pair as the CTA sweep, so the two read as
     one system. The purple midpoint is doing real work: blue and rust are near
     complementary, so blending them directly desaturates to grey through the
     middle of the panel. The reference solves it the same way. All three stops
     clear AA against white; see PROJECT-CONTEXT. */
  background: linear-gradient(180deg, var(--cta-sweep-a), #6b5a86 52%, var(--cta-sweep-b));
}

.cascade-num {
  font-family: var(--font-display);
  font-size: clamp(2.4rem, 3.4vw, 3.4rem);
  font-weight: 500;
  line-height: 1;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
}

.cascade-unit {
  font-size: 0.42em;
  font-weight: 500;
  margin-left: 0.35rem;
  letter-spacing: 0;
}

.cascade-copy {
  margin: 0;
  font-size: 0.92rem;
  line-height: 1.5;
  color: rgba(255, 255, 255, 0.92);
}

.cascade-copy strong {
  color: #fff;
  font-weight: 600;
}

.cascade-source {
  margin: 1.5rem 0 0;
  font-size: 0.8rem;
  line-height: 1.6;
  color: var(--ink-soft);
  max-width: 78ch;
}

.cascade-source span {
  white-space: nowrap;
}

/* Plays once when the section comes into view, rather than scrubbing with scroll
   position. This was `animation-timeline: view()` first, which matched the
   reference exactly but had two problems in practice: it only runs in Chromium
   and Safari, and if the section was already on screen when the page loaded the
   animation was already finished before you looked at it. Reusing the site's
   existing IntersectionObserver (script.js adds .is-visible to .reveal) fires it
   the same way in every browser, every visit.

   Scoped to no-preference so reduced-motion readers never receive the offset at
   all — panels render flush without depending on the observer to un-hide them. */
@media (prefers-reduced-motion: no-preference) {
  .cascade-panel.reveal {
    /* Rises without fading — .reveal's default opacity:0 is overridden here
       because the reference panels slide up at full strength. */
    opacity: 1;
    transform: translateY(64%);
    transition: transform 0.95s cubic-bezier(0.22, 1, 0.36, 1);
    /* --i comes off the parent .cascade-item and inherits down. */
    transition-delay: calc(var(--i, 0) * 0.13s);
  }

  .cascade-panel.reveal.is-visible {
    transform: translateY(0);
  }
}

@media (max-width: 900px) {
  .cascade-list {
    grid-template-columns: 1fr 1fr;
  }

  .cascade-item {
    min-height: 22rem;
  }

  .cascade-source span {
    white-space: normal;
  }
}

@media (max-width: 560px) {
  .cascade-list {
    grid-template-columns: 1fr;
  }

  .cascade-item {
    min-height: 0;
  }

  .cascade-panel {
    gap: 1.2rem;
  }
}

/* ---------------------------------- globe band ----------------------------------
   Closes the page the way trymeridian.com does: a planet rising off the bottom
   edge. It runs into the footer rather than stopping at a seam, so the whole
   page-bottom reads as one dark field. Canvas is decorative and aria-hidden;
   the copy above it carries the meaning. */

/* The former homepage globe was removed; the statistics strip now meets the
   footer directly. */

.globe-canvas {
  /* Clears the copy above it, then runs off the bottom edge into the footer.
     The sphere's rim is a hard arc — letting it cross a line of text cuts the
     text in half, so this has to start below the paragraph, not behind it. */
  top: 17rem;
  width: min(1150px, 130%);
  height: 28rem;
  pointer-events: none;
  /* The band ends before the sphere does. Without this the bright lower half
     would be chopped by the footer edge, leaving the same hard seam the hero
     gradient was reworked to avoid. */
  -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 80%, transparent 100%);
  mask-image: linear-gradient(to bottom, #000 0%, #000 80%, transparent 100%);
}

@media (max-width: 900px) {
  .globe-band {
    /* Same rule as above: canvas top (16) + canvas height (22). */
    min-height: 38rem;
    padding-block: 3.2rem 0;
  }

  .globe-canvas {
    top: 16rem;
    width: 165%;
    height: 22rem;
  }
}

/* ---------------------------------- footer ---------------------------------- */

.site-footer {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background: linear-gradient(160deg, var(--sky-deep), #2f3d34);
  padding-block: 3.5rem 2rem;
  color: #f4ece3;
}

.site-footer .wrap {
  position: relative;
}

/* Footer dot field + breathing glow (2026-08-25). Same mechanism as .lit-card,
   deliberately reshaped: the footer is full-bleed with square corners and no
   page margin around it, so a halo bleeding outward past the box (what
   .lit-card::before does) has nothing to escape into — most of it would just
   be clipped by the viewport edge. This instead reads as a light source
   glowing DOWN from the top seam, contained inside the footer's own bounds. */
.footer-glow,
.band-glow {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 280px;
  z-index: 0;
  pointer-events: none;
  background: radial-gradient(65% 100% at 50% 0%, rgba(249, 131, 47, 0.24), transparent 72%);
}

@media (prefers-reduced-motion: no-preference) {
  .footer-glow,
  .band-glow {
    animation: cta-glow-breathe 3.5s cubic-bezier(0.37, 0, 0.63, 1) infinite;
  }
}

/* Full-bleed green bands that carry the dot field: .dark-zone and .globe-band
   on the homepage, both .ed-dark sections on About. Same treatment as the
   footer, which is the shape this has to take on a square, edge-to-edge
   surface — an outward-blooming .lit-card halo has no page margin to escape
   into here and would simply be clipped.

   These already set `isolation: isolate` (their grain lives on ::before at
   z-index:-1 and needs the stacking context to stay above their own
   background). That is fine for the canvas — a positioned child at z-index
   auto still paints above the grain. What it does mean is that non-positioned
   content would paint UNDER the canvas, so the children have to be lifted. */
/* `:not(canvas)` is a guard, not decoration. This selector is 0-3-0, which
   outranks a plain `.some-canvas { position: absolute }` at 0-1-0 — applied to
   .globe-band it forced .globe-canvas back to `relative` and destroyed its
   `top/left/transform` placement, wrecking the globe. Any decorative canvas in
   one of these bands is absolutely positioned by definition, so none of them
   should ever be lifted by this rule. */
.lit-band > :not(.cta-dots):not(.band-glow):not(canvas) {
  position: relative;
}

/* The glow breathes with `transform: scale(1.008)`, which on a full-bleed band
   pushes it ~1px past each viewport edge and adds a horizontal scrollbar. The
   footer and .globe-band already clip it because they set `overflow: hidden`
   for their own reasons; .dark-zone and the .ed-dark sections did not, so a
   2px document overflow showed up at 390px. Clip it here for all of them. */
.lit-band {
  overflow: hidden;
}

.site-footer .footer-top,
.site-footer .footer-bottom {
  position: relative;
}

.footer-top {
  display: grid;
  grid-template-columns: 1.2fr 0.85fr 0.95fr 0.95fr;
  gap: 2.5rem;
  padding-bottom: 2.4rem;
}

.footer-brand .brand {
  margin-bottom: 0.8rem;
}

.footer-brand p {
  color: rgba(244, 236, 227, 0.72);
  max-width: 34ch;
  font-size: 0.94rem;
  margin-bottom: 1.3rem;
}

.footer-social {
  display: flex;
  gap: 0.7rem;
}

.footer-social a {
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  color: #f4ece3;
  transition: background 0.15s ease, color 0.15s ease;
}

.footer-social a:hover {
  background: var(--sun);
  color: #fff8f0;
}

.footer-col h3 {
  font-family: var(--font-utility);
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(244, 236, 227, 0.55);
  font-weight: 600;
  margin-bottom: 0.9rem;
}

.footer-col ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0.6rem;
}

.footer-col a {
  text-decoration: none;
  font-weight: 600;
  font-size: 0.92rem;
  color: #f4ece3;
}

.footer-col a:hover {
  color: var(--sun);
}

.footer-contact {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0.6rem;
  font-size: 0.92rem;
  font-weight: 600;
  color: #f4ece3;
}

.footer-contact a {
  text-decoration: none;
  color: #f4ece3;
}

.footer-contact a:hover {
  color: var(--sun);
}

.footer-bottom {
  border-top: 1px solid rgba(244, 236, 227, 0.15);
  padding-top: 1.5rem;
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  font-size: 0.82rem;
  color: rgba(244, 236, 227, 0.6);
}

/* ---------------------------------- acknowledgement of country ---------------------------------- */

.acknowledgement {
  border-top: 1px solid var(--line);
  background: var(--paper);
  padding-block: 1.4rem;
}

.acknowledgement-inner {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  flex-wrap: wrap;
}

.ack-flags {
  display: flex;
  gap: 0.5rem;
  flex-shrink: 0;
}

.ack-flag {
  width: 54px;
  height: 36px;
  border-radius: 4px;
  flex-shrink: 0;
}

.ack-text {
  font-size: 0.86rem;
  color: var(--ink-soft);
  max-width: 62ch;
  line-height: 1.5;
}

/* ---------------------------------- responsive ---------------------------------- */

@media (max-width: 900px) {
  .about .wrap,
  .feature .wrap,
  .contact .wrap {
    grid-template-columns: 1fr;
  }

  /* The referral card is a single full-width panel; it needs less padding
     here, not a column change. */
  .arc-card {
    padding: 2rem 1.6rem;
    min-height: 17rem;
  }

  .strip-list,
  .trust-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .enquiry-form {
    grid-template-columns: 1fr;
  }

  .feature.reverse .wrap {
    direction: ltr;
  }

  .feature-media {
    order: -1;
  }

  .hero-grid {
    grid-template-columns: 1fr;
  }

  .hero-services {
    grid-template-columns: 1fr;
  }

  .hero-photo-card img {
    height: 320px;
  }

  .hero {
    padding-bottom: 3.5rem;
  }

  .quick-contact {
    padding: 1.5rem;
  }

  .footer-top {
    grid-template-columns: 1fr 1fr;
  }

  .footer-brand {
    grid-column: 1 / -1;
  }
}

@media (max-width: 640px) {
  .topbar-cut {
    clip-path: none;
  }

  .topbar-inner {
    justify-content: center;
    gap: 1.2rem;
  }

  .topbar-inner a {
    font-size: 0.75rem;
  }
}

@media (max-width: 720px) {
  .nav-links {
    position: fixed;
    top: 6.4rem;
    left: 1.5rem;
    right: 1.5rem;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    box-shadow: var(--shadow-card);
    flex-direction: column;
    align-items: flex-start;
    padding: 1.2rem 1.5rem 1.6rem;
    gap: 1rem;
    transform: translateY(-8px);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.15s ease, transform 0.15s ease;
  }

  .nav-links.is-open {
    opacity: 1;
    transform: translateY(0);
    pointer-events: auto;
  }

  .nav-links {
    overflow-y: auto;
    max-height: calc(100vh - 8rem);
  }

  .nav-item {
    width: 100%;
  }

  .nav-chevron {
    display: none;
  }

  .nav-dropdown {
    position: static;
    display: block;
    transform: none;
    box-shadow: none;
    border: none;
    background: transparent;
    padding: 0.2rem 0 0 0.9rem;
    min-width: 0;
  }

  .nav-dropdown li a {
    padding: 0.4rem 0;
    color: var(--ink-soft);
    font-weight: 500;
  }

  .nav-toggle {
    display: block;
  }

  .site-nav .btn {
    display: none;
  }

  .nav-links .btn {
    display: inline-flex;
  }
}

@media (max-width: 560px) {
  .approach .wrap,
  .contact .wrap {
    padding: 1.6rem;
  }

  .enquiry-card {
    padding: 1.6rem;
  }

  .footer-top {
    grid-template-columns: 1fr;
  }

  .strip-list,
  .trust-grid {
    grid-template-columns: 1fr;
  }

  .acknowledgement-inner {
    flex-direction: column;
    align-items: flex-start;
  }
}

/* ==========================================================================
   EDITORIAL SYSTEM — About page only (scoped under .ed)
   --------------------------------------------------------------------------
   Design language taken from k9lingo.com, measured via Puppeteer rather than
   eyeballed. What was borrowed is the *system*, not the styling:

     - Monospace uppercase micro-labels with wide tracking as section markers
       (K9: IBM Plex Mono 500, 11.5px, 1.84px tracking, uppercase). This site
       already loads IBM Plex Mono as --font-utility, so it transferred free.
     - Very tight leading on display type (K9 runs LH 0.98-1.02 at 48-84px) so
       a heading reads as one solid block rather than loose lines.
     - Generous section rhythm (K9 uses a flat 120px top and bottom).
     - Alternating light/dark bands to segment a long page.
     - Rules and whitespace instead of card chrome.

   Deliberately NOT borrowed: Oswald. K9's punch comes from a condensed,
   heavy, quasi-military face. That is the wrong voice for a disability
   provider, and this site is deliberately single-family (see PROJECT-CONTEXT).
   The editorial density here comes from tight leading + negative tracking +
   scale + weight on Hanken Grotesk, which is already loaded.

   Everything is scoped under .ed so no other page is affected.
   ========================================================================== */

.ed {
  /* Section rhythm. K9 uses a flat 120px; this scales down on small screens
     instead, since a fixed 120px eats a phone viewport. */
  --ed-gap: clamp(4rem, 9vw, 7.5rem);
  /* Optical, not mathematical: bottom padding runs slightly heavier than top
     so a band does not look bottom-light where it meets the next one. */
  --ed-gap-b: clamp(4.5rem, 10vw, 8.5rem);
  --ed-rail: 11rem;
  /* Warm gold for the closing CTA. Scoped here rather than added to :root,
     since only this page uses it. Sits between the palette's existing warm
     accents — --glow #f9832f and the #ffc857 highlight on .trust-card::after —
     so it reads as part of the family rather than an imported colour. */
  --ed-gold: #f2a51a;
  --ed-gold-hi: #f8ad25;
}

.ed-section {
  padding-block: var(--ed-gap) var(--ed-gap-b);
  /* The header is sticky (105px desktop / 76px under 900px), so an anchor jump
     from the nav would otherwise park a section label underneath it. Scoped to
     this page rather than applied globally. */
  scroll-margin-top: clamp(5.5rem, 8vw, 7.5rem);
}

.ed .cascade {
  scroll-margin-top: clamp(5.5rem, 8vw, 7.5rem);
}

/* Band colours reuse existing tokens — no new palette is introduced. */
.ed-paper {
  background: var(--paper);
}

.ed-dark {
  position: relative;
  isolation: isolate;
  color: #f4ece3;
  background:
    radial-gradient(85% 55% at 3% 0%, rgba(110, 143, 118, 0.32), transparent 62%),
    radial-gradient(75% 60% at 97% 100%, rgba(164, 85, 42, 0.17), transparent 64%),
    linear-gradient(155deg, var(--sky-deep), #2d3a31);
}

/* Same grain treatment the homepage dark zone uses, so the bands match. */
.ed-dark::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  opacity: 0.28;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='ez'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23ez)' opacity='0.4'/%3E%3C/svg%3E");
}

/* ---------------------------------- editorial grid ----------------------------------
   Asymmetric three-track layout: a narrow label rail, the display statement,
   then the supporting prose. The rail is what makes the page read as a
   numbered document rather than a stack of centred sections. */

.ed-grid {
  display: grid;
  grid-template-columns: var(--ed-rail) minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: 0 clamp(2rem, 4vw, 3.5rem);
  align-items: start;
}

/* ---------------------------------- section labels ---------------------------------- */

.ed-label {
  grid-column: 1;
  font-family: var(--font-utility);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  line-height: 1.5;
  padding-top: 0.5rem;
  border-top: 1px solid var(--line);
  margin: 0;
}

.ed-label--light {
  color: rgba(244, 236, 227, 0.66);
  border-top-color: rgba(244, 236, 227, 0.26);
}

/* The section number carries the accent. The reference puts a § mark here in
   amber; that was removed at the user's request, so the rust moved onto the
   numeral itself rather than dropping the label's colour cue entirely. */
.ed-num {
  color: var(--sun);
  font-variant-numeric: tabular-nums;
}

.ed-label--light .ed-num {
  color: #e8a765;
}

.ed-slash {
  opacity: 0.45;
  margin-inline: 0.15rem;
}

/* ---------------------------------- display type ----------------------------------
   Tight leading is the whole trick. At 1.0-1.05 a multi-line heading reads as
   a single mass; at the body default of 1.7 the same words read as a list. */

.ed-display {
  grid-column: 2;
  font-family: var(--font-display);
  font-size: clamp(2.5rem, 5.6vw, 4.1rem);
  font-weight: 600;
  line-height: 1.02;
  letter-spacing: -0.03em;
  margin: 0;
  text-wrap: balance;
}

.ed-display--sm {
  font-size: clamp(2.1rem, 4.2vw, 3.15rem);
  line-height: 1.06;
  letter-spacing: -0.025em;
}

.ed-statement-col {
  grid-column: 2;
}

/* "Respect. Support. Empower." — forced onto three lines so the triad reads
   as a cadence rather than a run-on sentence. */
.ed-triad span {
  display: block;
}

/* ---------------------------------- supporting prose ---------------------------------- */

.ed-support-col {
  grid-column: 3;
  /* Optical alignment: nudges the first line of prose down onto the display
     type's baseline, which sits low because of the tight leading. */
  padding-top: 0.55rem;
}

.ed-support-col p {
  color: var(--ink-soft);
  font-size: 1rem;
  line-height: 1.75;
  max-width: 46ch;
}

.ed-support-col p + p {
  margin-top: 1.15rem;
}

.ed-dark .ed-support-col p {
  color: rgba(244, 236, 227, 0.78);
}

/* Lead paragraph carries the statement, so it takes the eye before the rest */
.ed-lead {
  font-size: 1.15rem !important;
  line-height: 1.6 !important;
  color: var(--ink) !important;
  font-weight: 500;
}

.ed-dark .ed-lead {
  color: #fff !important;
}

/* ---------------------------------- section heading (non-split sections) ---------------------------------- */

.ed-heading {
  font-family: var(--font-display);
  font-size: clamp(1.9rem, 3.4vw, 2.7rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.025em;
  margin: 1.1rem 0 0;
  max-width: 20ch;
}

.ed-dark .ed-heading {
  color: #fff;
}

/* ---------------------------------- opening spread ----------------------------------
   Section 01 breaks the label-rail pattern the rest of the page uses: copy
   stacks in a left column with the image beside it, which is how the reference
   opens. The rail returns from section 02 on, so the opener reads as a cover
   and the numbered sections read as the document. */

.ed-intro {
  display: grid;
  grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
  gap: clamp(2.5rem, 5vw, 4.5rem);
  align-items: center;
}

.ed-intro-copy .ed-label {
  /* Sits above the heading here rather than in a rail, so it needs no border
     and no grid placement. */
  grid-column: auto;
  border-top: none;
  padding-top: 0;
  margin-bottom: 1.4rem;
}

.ed-intro-copy .ed-display {
  grid-column: auto;
  margin-bottom: 1.6rem;
}

.ed-intro-copy p {
  color: var(--ink-soft);
  font-size: 1rem;
  line-height: 1.75;
  max-width: 46ch;
}

.ed-intro-copy p + p {
  margin-top: 1.15rem;
}

.ed-intro-media {
  margin: 0;
}

.ed-intro-media img {
  width: 100%;
  height: clamp(20rem, 36vw, 30rem);
  object-fit: cover;
  object-position: center 40%;
  border-radius: var(--radius-sm);
}

.ed-intro-media figcaption {
  margin-top: 0.9rem;
  font-family: var(--font-utility);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

/* Text link with a trailing mark, as the reference uses. Blue — the colour
   that moved off the buttons and into motion still belongs to the brand, and
   this is where it stays legible as a static element. */
.ed-link {
  display: inline-flex;
  align-items: center;
  gap: 0.65rem;
  margin-top: 2rem;
  color: var(--blue-ink);
  font-weight: 600;
  font-size: 1rem;
  text-decoration: none;
}

.ed-link-mark {
  font-size: 1.25em;
  line-height: 1;
  transition: transform 0.25s cubic-bezier(0.215, 0.61, 0.355, 1);
}

@media (hover: hover) and (pointer: fine) {
  .ed-link:hover .ed-link-mark {
    transform: rotate(90deg);
  }
}

.ed-link:focus-visible {
  outline: 3px solid var(--blue-ink);
  outline-offset: 4px;
  border-radius: 2px;
}

/* ---------------------------------- commitment rows ----------------------------------
   Deliberately not cards. Each commitment is a ruled row with a large index,
   which is the editorial equivalent of a spec sheet — it scans faster than
   four boxes and carries no shadow/border noise. */

.ed-rows {
  list-style: none;
  margin: clamp(2.5rem, 5vw, 4rem) 0 0;
  padding: 0;
}

.ed-row {
  display: grid;
  grid-template-columns: var(--ed-rail) minmax(0, 1.05fr) minmax(0, 0.95fr);
  gap: 0 clamp(2rem, 4vw, 3.5rem);
  align-items: start;
  padding-block: clamp(1.75rem, 3vw, 2.5rem);
  border-top: 1px solid var(--line);
}

.ed-row:last-child {
  border-bottom: 1px solid var(--line);
}

.ed-row-num {
  font-family: var(--font-utility);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  color: var(--sun);
  padding-top: 0.4rem;
  font-variant-numeric: tabular-nums;
}

.ed-row h3 {
  font-family: var(--font-display);
  font-size: clamp(1.25rem, 2.1vw, 1.6rem);
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.015em;
  margin: 0;
  color: var(--ink);
}

.ed-row p {
  color: var(--ink-soft);
  font-size: 0.98rem;
  line-height: 1.7;
  max-width: 46ch;
  padding-top: 0.2rem;
}

/* ---------------------------------- values ----------------------------------
   Eleven items. An accordion was considered and rejected: it hides content
   behind interaction for no benefit, needs JS, and this audience includes
   people using assistive tech. A ruled two-column index stays fully readable,
   needs no script, and collapses cleanly to one column. */

.ed-values {
  list-style: none;
  margin: clamp(2.5rem, 5vw, 4rem) 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 clamp(2.5rem, 5vw, 4.5rem);
}

.ed-values li {
  display: grid;
  grid-template-columns: 2.75rem minmax(0, 1fr);
  gap: 0 1rem;
  align-items: start;
  padding-block: 1.5rem;
  border-top: 1px solid var(--line);
}

.ed-v-num {
  grid-column: 1;
  grid-row: 1;
  font-family: var(--font-utility);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  color: var(--sun);
  padding-top: 0.3rem;
  font-variant-numeric: tabular-nums;
}

/* Both of these must be pinned to column 2. The li declares two tracks but
   holds three children, so without this the <p> auto-flows onto row 2 of
   column 1 — the 2.75rem number track — and wraps one word per line. */
.ed-values h3 {
  grid-column: 2;
  grid-row: 1;
  font-family: var(--font-display);
  font-size: 1.08rem;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -0.01em;
  margin: 0 0 0.3rem;
  color: var(--ink);
}

.ed-values p {
  grid-column: 2;
  grid-row: 2;
  margin: 0;
  font-size: 0.94rem;
  line-height: 1.65;
  color: var(--ink-soft);
  max-width: 42ch;
}

/* ---------------------------------- closing ---------------------------------- */

.ed-closing .wrap {
  max-width: 62rem;
}

.ed-closing-statement {
  font-family: var(--font-display);
  font-size: clamp(1.9rem, 4vw, 3rem);
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -0.025em;
  color: #fff;
  margin: 1.3rem 0 0;
  max-width: 22ch;
  text-wrap: balance;
}

.ed-closing .ed-cta {
  margin-top: 2.4rem;
}

/* ---------------------------------- closing CTA ----------------------------------
   Reference: k9lingo's amber button — mono uppercase, wide tracking, dark ink
   on warm gold, hard dark border, shallow radius.

   This deliberately does NOT extend .btn. Every button on this site is a pill
   with a blue fill; this one is a squared editorial slab, which is the whole
   point of the reference. Subclassing .btn would mean fighting six inherited
   declarations (radius, padding, background, shadow, colour, transition), so
   it is built standalone — and stays scoped to this one page.

   The label is sentence case in the markup and uppercased in CSS: screen
   readers can announce literal all-caps as an initialism, letter by letter. */

.ed-cta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-utility);
  font-size: clamp(0.9rem, 1.5vw, 1.05rem);
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  color: var(--ink);
  background: var(--ed-gold);
  border: 2px solid var(--ink);
  border-radius: 6px;
  /* Optical centring, verified by decoding rendered pixels rather than by
     reading box metrics. letter-spacing appends a gap after the FINAL
     character too, so with symmetric padding the right gap measures one full
     tracking unit wider than the left and the label sits visibly left of
     centre. The compensation belongs on the RIGHT (trimming the surplus), not
     the left — adding it to the left doubles the error instead of cancelling
     it. A Range bounding rect cannot show this: it includes the trailing
     space, so it reports the button as already centred. */
  padding: 1.15rem calc(2.4rem - 0.16em) 1.15rem 2.4rem;
  /* Comfortable touch target on every breakpoint */
  min-height: 3.25rem;
  /* Layered edge: a light lip along the top, a soft dark line along the bottom
     inside, and a hard dark ledge underneath that the slab sits on. The ledge
     is what makes it read as physical rather than printed. */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.38),
    inset 0 -1px 0 rgba(36, 31, 28, 0.18),
    0 4px 0 var(--ink);
  transition: transform 0.18s cubic-bezier(0.215, 0.61, 0.355, 1),
    box-shadow 0.18s cubic-bezier(0.215, 0.61, 0.355, 1),
    background 0.18s ease;
}

/* Gated to real pointers — on touch, :hover sticks after a tap and would leave
   the button floating above its own ledge. */
@media (hover: hover) and (pointer: fine) {
  .ed-cta:hover {
    background: var(--ed-gold-hi);
    transform: translateY(-2px);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.45),
      inset 0 -1px 0 rgba(36, 31, 28, 0.18),
      0 6px 0 var(--ink);
  }
}

/* Presses down onto its own ledge */
.ed-cta:active {
  transform: translateY(2px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.3),
    inset 0 -1px 0 rgba(36, 31, 28, 0.18),
    0 1px 0 var(--ink);
}

/* White ring — the band behind is dark green, so the site's default sage
   outline would not separate from it. */
.ed-cta:focus-visible {
  outline: 3px solid #ffffff;
  outline-offset: 4px;
}

/* The cascade sits inside the editorial page now, so it picks up the same
   rhythm as the .ed sections around it. */
.ed .cascade {
  padding-block: var(--ed-gap) var(--ed-gap-b);
}

.ed .cascade-intro {
  margin-top: 1rem;
}

/* ---------------------------------- responsive ----------------------------------
   Not a shrink: the rail is dropped and the label becomes a header above the
   statement, which is how a printed document reflows to a single column. */

@media (max-width: 900px) {
  .ed-grid,
  .ed-row {
    grid-template-columns: 1fr;
    gap: 0;
  }

  /* Copy first, image after — the heading should still be the first thing read
     on a phone, rather than scrolling past a photo to reach it. */
  .ed-intro {
    grid-template-columns: 1fr;
    gap: 2.5rem;
  }

  .ed-intro-copy p {
    max-width: 60ch;
  }

  .ed-label,
  .ed-statement-col,
  .ed-display,
  .ed-support-col {
    grid-column: 1;
  }

  .ed-label {
    margin-bottom: 1.25rem;
  }

  .ed-support-col {
    padding-top: 1.5rem;
  }

  .ed-support-col p,
  .ed-row p,
  .ed-values p {
    max-width: 60ch;
  }

  .ed-row-num {
    padding-top: 0;
    margin-bottom: 0.6rem;
    display: block;
  }

  .ed-row h3 {
    margin-bottom: 0.5rem;
  }

  .ed-row p {
    padding-top: 0;
  }

  .ed-values {
    grid-template-columns: 1fr;
  }

  .ed-heading {
    max-width: 100%;
  }
}

@media (max-width: 560px) {
  .ed-intro-media img {
    height: 15rem;
  }

  .ed-values li {
    grid-template-columns: 2.25rem minmax(0, 1fr);
  }

  .ed-closing-statement {
    max-width: 100%;
  }

  /* Type comes down a step and padding tightens, but the tracking stays wide
     (0.14em) — dropping it would lose the character that makes this button
     work. Width still hugs the label rather than going full-bleed, matching
     how every other CTA on the site behaves. min-height holds the 48px touch
     target even though the type is smaller. */
  .ed-cta {
    font-size: 0.82rem;
    letter-spacing: 0.14em;
    padding: 1rem calc(1.5rem - 0.14em) 1rem 1.5rem;
    min-height: 3rem;
  }
}

/* ---------------------------------------------------------
   Lit CTA — pointer-reactive dot field + breathing halo
   Ported from melius.com's pricing page (its compiled CSS and canvas were read
   directly, not eyeballed). Two effects stack on the closing CTA card:

   1. A dot grid on a <canvas> that warms toward the cursor. Melius runs this as
      one sticky full-viewport canvas per section; here it's scoped to the card,
      because that card is the only dark surface on this page and the effect
      needs a dark ground to read at all.
   2. A halo that breathes around the card. Melius animates `box-shadow` between
      two `color-mix()` values. Box-shadow can't be composited, and this file's
      standing rule is transform/opacity only — so the same read is built from a
      blurred element whose opacity and scale animate instead. Same 3.5s cadence,
      same sine easing.

   The colour is ours, not theirs. Melius glows its brand red-orange #f04e23;
   this uses --glow #f9832f (already the hero's warm band), so the halo, the dots
   and the gold button inside the card all read as a single light source.
--------------------------------------------------------- */

/* Page-wide field. Viewport-fixed rather than document-tall: melius.com does
   the same with one sticky 100dvh canvas per section, and it keeps the canvas
   cheap (one viewport of dots) no matter how long the page runs. It shows
   through wherever the page is bare cream, and is covered wherever a section
   paints its own opaque background — the dark CTA and footer included, which is
   why the CTA carries its own inverted field. */
.page-dots {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
  pointer-events: none;
}

.lit-card {
  position: relative;
  /* Inset rather than a real border: a border would add 2px to the box and
     nudge the padding this card already relies on. */
  box-shadow: inset 0 0 0 1px rgba(249, 131, 47, 0.34);
}

/* The halo. `.wrap` deliberately does NOT get a stacking context, so z-index:-1
   drops this behind the card's own gradient and it can only ever show as a rim
   of light escaping the edges — never as a wash over the dark green. */
.lit-card::before {
  content: "";
  position: absolute;
  inset: -10px;
  z-index: -1;
  border-radius: calc(var(--radius) + 10px);
  background: var(--glow);
  filter: blur(20px);
  opacity: 0.26;
}

@media (prefers-reduced-motion: no-preference) {
  .lit-card::before {
    /* cubic-bezier(.37,0,.63,1) is a sine-in-out curve — it swells and settles
       rather than ticking linearly between the two ends. */
    animation: cta-glow-breathe 3.5s cubic-bezier(0.37, 0, 0.63, 1) infinite;
  }
}

@keyframes cta-glow-breathe {
  0%,
  100% {
    opacity: 0.22;
    transform: scale(0.994);
  }
  50% {
    opacity: 0.38;
    transform: scale(1.008);
  }
}

/* Sits above the card gradient. pointer-events:none matters — the enquiry
   button is layered on top of this and must stay clickable. */
.cta-dots {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border-radius: inherit;
  pointer-events: none;
}

/* ...and the copy sits above the dot field. Both are positioned, so DOM order
   decides the paint order and no z-index is needed. */
.lit-card > :not(.cta-dots) {
  position: relative;
}

/* ---------------------------------------------------------
   About: values index (2026-08-25)
   The one genuinely new block on the rebuilt About page. Everything else there
   reuses Services components (.page-header, .feature/.feature.reverse,
   .feature-list, .link-arrow, .community-photo, .home-cta .lit-card) or
   existing site components (.dark-zone + .trust-grid, .cascade).

   Seven values stay easy to scan in a ruled two-column index that matches the
   hairline rhythm used between .feature sections. Numbers are generated rather
   than written into the markup, so re-ordering cannot desynchronise them.
--------------------------------------------------------- */

.values {
  padding-block: 3.2rem 3.6rem;
  border-top: 1px solid var(--line);
}

.values-banner {
  margin-bottom: 2.4rem;
}

.values-banner .values-intro {
  margin-bottom: 0;
}

.values h2 {
  font-size: var(--fs-h2);
  margin-block: 0 0.8rem;
  line-height: 1.18;
}

.values-intro {
  color: var(--ink-soft);
  max-width: 56ch;
  margin: 0 0 2.2rem;
}

.value-list {
  list-style: none;
  counter-reset: value;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0 3.5rem;
}

.value-list li {
  counter-increment: value;
  display: grid;
  /* Fixed numeral track, so every title starts on the same x regardless of
     whether the count has ticked into double digits. */
  grid-template-columns: 2.5rem 1fr;
  align-items: start;
  padding-block: 1.1rem;
  border-top: 1px solid var(--line);
}

/* The first row in each column already sits under the section's own rule. */
.value-list li:nth-child(-n + 2) {
  border-top: none;
  padding-top: 0;
}

.value-list li::before {
  content: counter(value, decimal-leading-zero);
  grid-column: 1;
  grid-row: 1 / span 2;
  font-family: var(--font-utility);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  color: var(--sun);
  padding-top: 0.28rem;
}

/* Both children pinned to column 2 — the same bug the old .ed-values list hit,
   where a two-track grid holding three children auto-flowed the <p> into the
   narrow numeral track and wrapped it one word per line. */
.value-list h3 {
  grid-column: 2;
  font-size: 1.02rem;
  font-weight: 600;
  margin: 0 0 0.2rem;
  line-height: 1.3;
}

.value-list p {
  grid-column: 2;
  margin: 0;
  color: var(--ink-soft);
  font-size: 0.94rem;
  max-width: 42ch;
}

@media (max-width: 900px) {
  .value-list {
    grid-template-columns: 1fr;
    gap: 0;
  }

  /* Single column now, so only the very first row is under the section rule. */
  .value-list li:nth-child(-n + 2) {
    border-top: 1px solid var(--line);
    padding-top: 1.1rem;
  }

  .value-list li:first-child {
    border-top: none;
    padding-top: 0;
  }
}

/* Compact Values index inside the photo card. */
.banner-row.values {
  padding-block: 1.5rem;
  border-top: 0;
}

.values-banner {
  margin-bottom: 0;
}

.values-banner .photo-banner-copy h2 {
  margin-bottom: 1.25rem;
}

.values-compact-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0 1.25rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.values-compact-list li {
  display: flex;
  gap: 0.6rem;
  align-items: flex-start;
  min-width: 0;
  padding-block: 0.72rem;
  border-top: 1px solid var(--line);
  color: var(--ink);
  font-size: 0.98rem;
  font-weight: 600;
  line-height: 1.25;
}

.values-compact-list svg {
  width: 1.125rem;
  height: 1.125rem;
  flex: 0 0 auto;
  margin-top: 0.05rem;
  color: var(--sun);
}

.values-compact-list li:nth-child(-n + 2) {
  padding-top: 0;
  border-top: 0;
}

@media (max-width: 520px) {
  .values-compact-list {
    grid-template-columns: 1fr;
  }

  .values-compact-list li:nth-child(2) {
    padding-top: 0.72rem;
    border-top: 1px solid var(--line);
  }
}

/* ---------------------------------------------------------
   About: stacked photo banners (2026-08-26)
   About's photo+copy sections moved from .feature (open rows with hairline
   rules, one long paragraph + a checklist) to the homepage's .photo-banner
   treatment — a white card holding a short 14ch heading and two tight
   paragraphs. Same component, so the type scale, radius, shadow, image crop
   and 860px stacking all come along unchanged.
--------------------------------------------------------- */

/* .community-photo's padding (1rem top / 4rem bottom) is tuned for ONE closing
   banner and reads lopsided when several are stacked. */
.banner-row {
  padding-block: 1.5rem;
}

.banner-row:first-of-type {
  padding-top: 2.6rem;
}

/* Alternates which side the photo sits on down the page. The homepage only
   ever shows one banner so it never needed this; four in a column do.
   Uses `order` rather than the `direction: rtl` trick .feature.reverse uses —
   no ltr reset needed on the children, and the single-column mobile stack
   keeps DOM order, so the heading still comes before the photo. */
.photo-banner--flip .photo-banner-copy {
  order: 2;
}

@media (max-width: 860px) {
  .photo-banner--flip .photo-banner-copy {
    order: 0;
  }
}

/* ---------------------------------- policy pages ----------------------------------
   Privacy, complaints, participant rights, accessibility and 404. Long-form
   reading, so the measure is capped and the vertical rhythm is looser than the
   marketing pages. Reuses .page-header and the shared header/footer. */

.policy {
  padding-block: 1rem 4.5rem;
}

.policy-body {
  /* ~68 characters at this size — the readable measure for continuous prose. */
  max-width: 68ch;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: clamp(1.6rem, 4vw, 3rem);
  box-shadow: var(--shadow-card);
}

.policy-body h2 {
  font-size: 1.35rem;
  line-height: 1.25;
  margin-block: 2.4rem 0.8rem;
}

.policy-body h2:first-child {
  margin-top: 0;
}

.policy-body p,
.policy-body li {
  color: var(--ink-soft);
  line-height: 1.7;
}

.policy-body p {
  margin-bottom: 1rem;
}

.policy-body ul,
.policy-body ol {
  margin: 0 0 1.2rem;
  padding-left: 1.3rem;
}

.policy-body li {
  margin-bottom: 0.55rem;
}

.policy-body strong {
  color: var(--ink);
}

.policy-body a {
  color: var(--blue-ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.policy-meta {
  font-family: var(--font-utility);
  font-size: 0.78rem;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.policy-actions {
  display: flex;
  gap: 0.8rem;
  flex-wrap: wrap;
  margin-top: 1.6rem;
}

/* Unverified business specifics — retention periods, an ABN, a regulator's
   phone number. Deliberately loud: these must be filled in or removed before
   launch, and a quiet placeholder is one that ships by accident. Contrast is
   7.4:1 on this fill, so it stays readable rather than being colour alone. */
/* `.policy-body li` (0-1-1) outranks a bare `.needs-confirm` (0-1-0), so a
   marker used as a whole list item kept --ink-soft and measured 2.70:1 on this
   gold fill — a real AA failure caught by _ink-soft-audit.mjs. The compound
   selectors below take the colour back. */
.needs-confirm,
.policy-body .needs-confirm,
.policy-body li.needs-confirm {
  color: var(--ink);
}

/* Dark-surface variant. The light gold chip is built for the cream pages; on
   the dark green footer it reads as a bright blob against cream text, and it
   dragged the footer's own contrast measurement to 1.02:1 because the
   brightest pixel in the bottom bar became the chip rather than the band.
   Same "obviously unfinished" signal, carried by a gold rule instead of a
   gold fill. */
.footer-bottom .needs-confirm {
  background: transparent;
  color: #fff8f0;
  border-bottom: 2px solid var(--cta);
  border-radius: 0;
  padding: 0 0.15em;
  font-weight: 600;
}

.needs-confirm {
  display: inline;
  background: color-mix(in srgb, var(--cta) 26%, white);
  border-bottom: 2px solid var(--cta-dark);
  color: var(--ink);
  font-weight: 600;
  padding: 0.1em 0.35em;
  border-radius: 0.25rem;
}

/* ---- footer policy row ---- */

.footer-legal {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem 1.5rem;
  padding-top: 1.4rem;
  font-size: 0.82rem;
}

.footer-legal a {
  color: rgba(244, 236, 227, 0.78);
  text-decoration: none;
  transition: color 0.25s ease;
}

.footer-legal a:hover,
.footer-legal a:focus-visible {
  color: #fff8f0;
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ---------------------------------- form accessibility ----------------------------------
   Added 2026-09-08. The homepage quick-contact form relied on placeholders as
   labels: they vanish the moment someone types, they are not reliably read as
   names by assistive tech, and low-vision users lose the field's purpose
   entirely. Every field now has a real visible label. */

.qc-field label,
.field label {
  display: block;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--ink);
  margin-bottom: 0.35rem;
}

.field-hint {
  font-size: 0.82rem;
  color: var(--ink-soft);
  line-height: 1.5;
  margin-top: 0.4rem;
}

/* Errors are tied to their field with aria-describedby and revealed by
   aria-invalid, so the state is announced rather than signalled by colour
   alone. The icon carries the meaning for anyone who cannot see the red. */
.qc-field input[aria-invalid="true"],
.field input[aria-invalid="true"],
.field textarea[aria-invalid="true"] {
  border-color: #b91c1c;
  border-bottom-width: 2px;
}

.qc-field.invalid .qc-error {
  display: block;
}

.qc-error::before {
  content: "⚠ ";
}

/* Honeypot. Deliberately NOT display:none — bots skip hidden inputs, but they
   fill this one. Kept out of the tab order and out of the accessibility tree. */
.hp-field {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* Submission outcome. A live region, so the result is announced; never colour
   alone, so each state carries a symbol too. */
.form-status {
  margin-top: 0.9rem;
  font-size: 0.9rem;
  font-weight: 600;
  line-height: 1.5;
}

.form-status:empty {
  display: none;
}

.form-status--ok {
  color: #14532d;
}

.form-status--ok::before {
  content: "✓ ";
}

.form-status--error {
  color: #b91c1c;
}

.form-status--error::before {
  content: "⚠ ";
}


.form-required-note,
.form-error-summary {
  grid-column: 1 / -1;
}

.form-required-note {
  margin: 0 0 0.15rem;
  color: var(--ink-soft);
  font-size: 0.82rem;
}

.form-required-note > span,
.required-indicator > span:first-child {
  color: #9f271c;
  font-weight: 800;
}

.field-error {
  display: none;
  margin: 0.4rem 0 0;
  color: #9f271c;
  font-size: 0.82rem;
  font-weight: 700;
  line-height: 1.4;
}

.field-error::before {
  content: "! ";
}

.invalid .field-error:not([hidden]) {
  display: block;
}

.form-error-summary {
  padding: 0.85rem 1rem;
  border: 2px solid #9f271c;
  border-radius: var(--radius-sm);
  background: #fff5f3;
  color: #6f1d16;
}

.form-error-summary[hidden] {
  display: none;
}

.form-error-summary__title {
  margin: 0;
  font-weight: 800;
}

.form-error-summary ul {
  margin: 0.4rem 0 0;
  padding-left: 1.25rem;
}

.form-error-summary a {
  color: inherit;
  font-weight: 700;
  text-decoration: underline;
  text-underline-offset: 0.15em;
}

.testimonials-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}

.reviews-controls {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

.review-arrow {
  display: inline-grid;
  width: 44px;
  height: 44px;
  flex: 0 0 44px;
  padding: 0;
  border: 1px solid rgba(31, 107, 165, 0.24);
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.78);
  box-shadow: 0 8px 18px -14px rgba(18, 56, 78, 0.7);
  color: var(--blue-ink);
  cursor: pointer;
  place-items: center;
  transition: transform 0.2s ease, border-color 0.2s ease, background 0.2s ease, color 0.2s ease;
}

.review-arrow svg {
  width: 1.2rem;
  height: 1.2rem;
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 2;
}

.review-arrow:focus-visible,
.marquee-toggle:focus-visible {
  outline: 3px solid rgba(31, 107, 165, 0.3);
  outline-offset: 3px;
}

.marquee-toggle {
  display: inline-flex;
  min-height: 44px;
  align-items: center;
  gap: 0.45rem;
  padding: 0.5rem 0.9rem;
  border: 1px solid rgba(31, 107, 165, 0.24);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.72);
  color: var(--blue-ink);
  font: inherit;
  font-size: 0.84rem;
  font-weight: 700;
  cursor: pointer;
}

.marquee-toggle svg {
  width: 1rem;
  height: 1rem;
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 2;
}

.marquee-toggle .marquee-icon--play {
  display: none;
  fill: currentColor;
  stroke: none;
}

.marquee-toggle[aria-pressed="true"] .marquee-icon--pause { display: none; }
.marquee-toggle[aria-pressed="true"] .marquee-icon--play { display: block; }

@media (hover: hover) and (pointer: fine) {
  .marquee-toggle:hover,
  .review-arrow:hover {
    border-color: rgba(31, 107, 165, 0.48);
    background: #fff;
  }

  .review-arrow:hover {
    transform: translateY(-2px);
    background: var(--blue-ink);
    color: #fff;
  }
}

@media (max-width: 560px) {
  .testimonials-head {
    align-items: flex-start;
  }

  .reviews-controls {
    width: 100%;
  }

  .marquee-toggle {
    flex: 1;
    justify-content: center;
  }
}

/* ---------------------------------- tap targets ----------------------------------
   WCAG 2.2 SC 2.5.8 asks for 24x24 CSS px on pointer targets. Links sitting in
   a sentence are exempt (their size is constrained by the surrounding text),
   but a stacked list of links is not — and the footer columns, footer policy
   row and nav dropdowns were all rendering ~19px tall on a phone.

   Padding rather than min-height, so the target grows around the text without
   changing where the text sits or opening gaps in the column rhythm. */

.footer-col ul a,
.footer-contact a,
.footer-legal a,
.nav-dropdown a,
.contact-details a {
  display: inline-block;
  padding-block: 0.3rem;
}

.footer-col ul li,
.footer-contact li {
  /* Absorb the new padding so the columns keep their existing spacing. */
  margin-bottom: 0.05rem;
}

/* ---------------------------------- arc band (homepage why-choose-us) ----------------------------------
   A full-bleed neutral surface shared with the service section below. The
   decorative sphere is disabled so the gradient cards carry the colour. */
.arc-band {
  position: relative;
  overflow: hidden;
  /* Contains the sphere's luminosity blend; without it the blend reaches the
     page behind the band instead of the band's own gradient. */
  isolation: isolate;
  /* Match the neutral page surface used by the service section immediately
     below, giving the colourful cards a quieter, continuous backdrop. */
  background: var(--cream);
}

.arc-band .arc-sphere {
  display: none;
}

.arc-band .trust {
  position: relative;
  z-index: 1;
}

/* Copy flips from cream-on-dark to ink-on-light. */
.arc-band .trust h2 {
  color: var(--ink);
}

.arc-band .trust-intro {
  color: var(--ink-soft);
}

/* White rather than the #eff0f0 the dark version used: on a cream-to-orange
   ground a near-cream card has almost no edge at the top of the band. The
   shadow is retinted warm — the green-tinted one was matched to the dark
   green surface it used to sit on. */
.arc-band .trust-card {
  background: var(--paper);
  border-color: rgba(36, 31, 28, 0.14);
  box-shadow: 0 1px 2px rgba(120, 60, 20, 0.14), 0 10px 24px -18px rgba(120, 60, 20, 0.4);
}

@media (hover: hover) and (pointer: fine) {
  .arc-band .trust-card:hover {
    background: var(--paper);
    box-shadow: 0 1px 2px rgba(120, 60, 20, 0.18), 0 16px 30px -18px rgba(120, 60, 20, 0.5);
  }
}

/* ---------------------------------- homepage image-led expectation cards ----------------------------------
   Large editorial cards based on the supplied reference: generous photography,
   a soft curved transition, spacious copy and a wide rounded action. */
.trust-grid--gradient {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(1.5rem, 3vw, 3rem);
  max-width: 94rem;
  margin-inline: auto;
}

/* Let the image-led cards use the page width while retaining a small,
   responsive safety gutter at the viewport edges. */
.arc-band .trust > .wrap {
  width: calc(100% - clamp(1.25rem, 4vw, 4rem));
  max-width: 98rem;
}

.arc-band {
  background: linear-gradient(180deg, var(--cream) 0%, #f7f4ec 55%, #f4f7f5 100%);
}

.arc-band .trust h2 {
  color: #123f46;
  text-align: center;
}

.arc-band .trust-intro {
  margin: 0 auto 2.5rem;
  color: #596763;
  text-align: center;
}

.trust-card.gradient-card {
  position: relative;
  display: flex;
  min-width: 0;
  min-height: clamp(39rem, 50vw, 47rem);
  overflow: hidden;
  padding: 0;
  flex-direction: column;
  border: 1px solid rgba(31, 107, 165, 0.12);
  border-radius: clamp(1.5rem, 2.2vw, 2rem);
  background: #f7f4ea;
  box-shadow: 0 18px 48px -32px rgba(18, 56, 78, 0.5);
  isolation: isolate;
  transition: transform 0.35s cubic-bezier(0.25, 1, 0.5, 1), box-shadow 0.35s ease;
}

.gradient-card::before,
.gradient-card::after {
  display: none;
}

.gradient-card-media {
  position: relative;
  height: auto;
  aspect-ratio: 8 / 5;
  overflow: hidden;
  background: #dce7ed;
}

.gradient-card-media::after {
  position: absolute;
  z-index: 1;
  right: -1px;
  bottom: -1px;
  left: -1px;
  height: clamp(3.7rem, 6vw, 5.5rem);
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1000 100' preserveAspectRatio='none'%3E%3Cpath fill='%23dfe8e9' d='M0 16C180 23 330 54 520 70C700 85 845 65 1000 43V100H0Z'/%3E%3Cpath fill='%23f7f4ea' d='M0 29C180 36 330 67 520 83C700 98 845 78 1000 56V100H0Z'/%3E%3C/svg%3E") center / 100% 100% no-repeat;
  content: "";
  pointer-events: none;
}

.gradient-card-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--card-photo-position, center center);
  transform-origin: var(--card-photo-position, center center);
  filter: saturate(0.92) contrast(0.97);
  transition: transform 0.55s cubic-bezier(0.25, 1, 0.5, 1), filter 0.35s ease;
}

.gradient-card-icon {
  display: none;
}

.gradient-card:nth-child(1) { --card-photo-position: center 48%; }
.gradient-card:nth-child(2) { --card-photo-position: center 46%; }
.gradient-card:nth-child(3) { --card-photo-position: center 42%; }
.gradient-card:nth-child(4) { --card-photo-position: center 43%; }
.gradient-card:nth-child(5) { --card-photo-position: center 42%; }
.gradient-card:nth-child(6) { --card-photo-position: center 50%; }

.gradient-card-icon svg {
  width: 55%;
  height: 55%;
}

.gradient-card-body {
  display: flex;
  min-height: clamp(17.5rem, 22vw, 20rem);
  padding: clamp(2rem, 3.2vw, 3rem) clamp(1.5rem, 4vw, 3.6rem) clamp(2rem, 3vw, 2.75rem);
  flex: 1;
  flex-direction: column;
  background: #f7f4ea;
}

.gradient-card .gradient-card-title {
  margin: 0 0 1rem;
  color: var(--blue-ink);
  font-family: var(--font-body);
  font-size: clamp(1.55rem, 2.15vw, 2.15rem);
  font-weight: 700;
  line-height: 1.24;
  letter-spacing: -0.018em;
  text-transform: none;
  text-wrap: balance;
}

.gradient-card-body > p {
  margin: 0;
  max-width: 35rem;
  color: #3f4f59;
  font-size: clamp(1rem, 1.35vw, 1.2rem);
  line-height: 1.6;
  text-wrap: pretty;
}

.gradient-card-cta {
  display: inline-flex;
  width: min(100%, 18rem);
  min-height: 3.4rem;
  justify-content: center;
  align-items: center;
  gap: 0.5rem;
  margin-top: auto;
  padding: 0.9rem 1.4rem;
  border: 1px solid rgba(36, 31, 28, 0.16);
  border-radius: var(--radius-pill);
  background: var(--cta);
  box-shadow: 0 10px 20px -14px rgba(131, 66, 31, 0.7);
  color: var(--ink);
  font-size: 0.9rem;
  font-weight: 750;
  letter-spacing: 0.055em;
  text-decoration: none;
  text-transform: uppercase;
  transition: transform 0.25s ease, background 0.25s ease, color 0.25s ease, box-shadow 0.25s ease;
}

.gradient-card-cta svg {
  color: currentColor;
  transition: transform 0.3s ease;
}

.gradient-card-cta:focus-visible {
  border-radius: 0.25rem;
  outline: 3px solid rgba(27, 90, 99, 0.28);
  outline-offset: 3px;
}

@media (hover: hover) and (pointer: fine) {
  .arc-band .gradient-card:hover,
  .arc-band .gradient-card:focus-within {
    transform: translateY(-6px);
    background: #f7f4ea;
    box-shadow: 0 26px 50px -30px rgba(18, 56, 78, 0.58);
  }

  .gradient-card:hover .gradient-card-image,
  .gradient-card:focus-within .gradient-card-image {
    transform: scale(1.055);
    filter: saturate(1) contrast(1);
  }

  .gradient-card-cta:hover svg,
  .gradient-card-cta:focus-visible svg {
    transform: translateX(4px);
  }

  .gradient-card-cta:hover,
  .gradient-card-cta:focus-visible {
    transform: translateY(-2px);
    background: var(--blue-ink);
    box-shadow: 0 14px 26px -16px rgba(18, 56, 78, 0.78);
    color: #fff;
  }
}

@media (max-width: 760px) {
  .trust-grid--gradient {
    grid-template-columns: 1fr;
    gap: 1.5rem;
  }
}

@media (max-width: 620px) {
  .trust-card.gradient-card {
    min-height: 0;
  }

  .gradient-card-media {
    height: auto;
    aspect-ratio: 4 / 3;
  }

  .gradient-card-body {
    min-height: 16.5rem;
    padding: 2rem 1.5rem 1.6rem;
  }

  .gradient-card-cta {
    width: 100%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .testimonial-marquee {
    animation: none;
  }

  .gradient-card,
  .gradient-card-image,
  .gradient-card-icon,
  .gradient-card-cta svg {
    transition: none;
  }
}

/* ---------------------------------- shared soft UI heading pills ----------------------------------
   Page-scoped Services headings and homepage card labels share this geometry,
   depth and typography while leaving other site labels unchanged. */
.services-page .eyebrow,
.gradient-card-badge {
  min-height: 38px;
  padding: 0.62rem 1rem;
  border: 0;
  border-radius: var(--radius-pill);
  background: var(--soft-pill-surface);
  box-shadow:
    5px 5px 10px var(--soft-pill-shadow-dark),
    -5px -5px 10px var(--soft-pill-shadow-light);
  color: var(--soft-pill-ink);
  font-family: var(--font-body);
  font-size: 0.74rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.08em;
  transition: transform 0.3s ease-out, box-shadow 0.3s ease-out;
}

/* Service names remain real section headings while retaining the compact pill
   treatment after the larger marketing headlines were removed. */
.services-page .feature-copy > h2.eyebrow {
  display: flex;
  width: fit-content;
  margin: 0 0 1rem;
}

/* Inset accent well creates the nested raised -> pressed depth signature. */
.services-page .eyebrow::before {
  content: "";
  width: 0.62rem;
  height: 0.62rem;
  flex: 0 0 auto;
  border-radius: 50%;
  background: var(--soft-pill-accent);
  box-shadow:
    inset 2px 2px 4px rgba(61, 72, 82, 0.34),
    inset -2px -2px 4px rgba(255, 255, 255, 0.56),
    0 0 0 4px rgba(108, 99, 255, 0.1);
}

.gradient-card-dot {
  width: 0.62rem;
  height: 0.62rem;
  background: var(--soft-pill-accent);
  box-shadow:
    inset 2px 2px 4px rgba(61, 72, 82, 0.34),
    inset -2px -2px 4px rgba(255, 255, 255, 0.56),
    0 0 0 4px rgba(108, 99, 255, 0.1);
}

/* Homepage labels keep the shared soft-pill geometry and use one warm peach
   accent across every neutral card. */
.gradient-card-badge {
  background: var(--card-pill-bg);
  box-shadow:
    5px 5px 10px var(--card-pill-shadow),
    -5px -5px 10px rgba(255, 255, 255, 0.78);
  color: var(--card-pill-ink);
}

.gradient-card-dot {
  background: #b45e28;
  box-shadow:
    inset 2px 2px 4px rgba(112, 56, 24, 0.42),
    inset -2px -2px 4px rgba(255, 255, 255, 0.58),
    0 0 0 4px rgba(180, 94, 40, 0.14);
}

/* The lead label gets slightly more breathing room without creating a second
   component variant. */
.services-page .page-header .eyebrow {
  min-height: 44px;
  padding-inline: 1.15rem;
  font-size: 0.875rem;
  box-shadow:
    7px 7px 14px var(--soft-pill-shadow-dark),
    -7px -7px 14px var(--soft-pill-shadow-light);
}

@media (hover: hover) and (pointer: fine) {
  .services-page .feature:hover .eyebrow,
  .services-page .home-cta:hover .eyebrow {
    transform: translateY(-1px);
    box-shadow:
      7px 7px 13px rgba(163, 177, 198, 0.68),
      -7px -7px 13px rgba(255, 255, 255, 0.8);
  }
}

@media (max-width: 560px) {
  .services-page .eyebrow,
  .services-page .page-header .eyebrow,
  .gradient-card-badge {
    min-height: 40px;
    padding: 0.58rem 0.88rem;
    font-size: 0.875rem;
    box-shadow:
      4px 4px 8px var(--soft-pill-shadow-dark),
      -4px -4px 8px var(--soft-pill-shadow-light);
  }
}

@media (prefers-reduced-motion: reduce) {
  .services-page .eyebrow,
  .gradient-card-badge {
    transition: none;
  }
}

@media (forced-colors: active) {
  .services-page .eyebrow,
  .gradient-card-badge {
    border: 1px solid CanvasText;
    box-shadow: none;
  }

  .services-page .eyebrow::before,
  .gradient-card-dot {
    background: Highlight;
    box-shadow: none;
  }
}

/* ---------------------------------- homepage: photographic hero ----------------------------------
   Inspired by the supplied hospice reference: an editorial overlay on a
   full-width care image, with a deep teal reading field and curved lower edge.
   The modifier keeps the original hero rules available without leaking this
   composition into internal pages. */
.hero.hero--photo {
  position: relative;
  min-height: clamp(39rem, 68vh, 47rem);
  overflow: hidden;
  padding: 0;
  background: #123f46;
  color: #fff;
  isolation: isolate;
}

.hero--photo::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    radial-gradient(circle at 46% 74%, rgba(242, 165, 26, 0.24), transparent 30%),
    linear-gradient(90deg, #123f46 0%, rgba(18, 63, 70, 0.96) 27%, rgba(18, 63, 70, 0.54) 49%, rgba(18, 63, 70, 0.14) 72%, transparent 100%);
}

.hero--photo .hero-grid {
  position: relative;
  z-index: 2;
  display: flex;
  min-height: clamp(39rem, 68vh, 47rem);
  align-items: center;
  padding-block: clamp(4.5rem, 8vw, 7rem) clamp(7rem, 10vw, 9rem);
}

.hero--photo .hero-copy {
  position: relative;
  z-index: 1;
  width: min(52%, 43rem);
}

.hero--photo .hero-copy h1 {
  max-width: 13ch;
  margin: 0 0 1.6rem;
  color: #fff;
  font-family: var(--font-body);
  font-size: clamp(4rem, 6.2vw, 6.15rem);
  font-weight: 650;
  line-height: 0.96;
  letter-spacing: -0.035em;
  text-shadow: 0 2px 22px rgba(4, 25, 29, 0.2);
}

.hero--photo .hero-accent {
  display: block;
  color: var(--sun-dark);
}

.hero--photo .hero-sub {
  max-width: 37ch;
  color: rgba(255, 255, 255, 0.88);
  font-size: clamp(1.08rem, 1.55vw, 1.32rem);
  line-height: 1.55;
  text-shadow: 0 1px 12px rgba(4, 25, 29, 0.24);
}

.hero--photo .hero-actions {
  margin-top: 2.35rem;
}

.hero--photo .hero-call {
  min-height: 58px;
  min-width: min(100%, 19.5rem);
  justify-content: center;
  padding: 0.95rem 1.6rem;
  border: 2px solid rgba(255, 255, 255, 0.66);
  border-radius: var(--radius-xs);
  background: linear-gradient(100deg, #c46722 0%, var(--cta) 62%, #f9b62e 100%);
  box-shadow: 0 10px 28px rgba(126, 65, 16, 0.34);
  color: var(--ink);
  font-size: 1rem;
  font-weight: 700;
}

.hero--photo .hero-enquiry {
  min-height: 58px;
  justify-content: center;
  padding: 0.95rem 1.6rem;
  border: 2px solid rgba(7, 26, 41, 0.44);
  border-radius: var(--radius-xs);
  background: rgba(255, 255, 255, 0.82);
  color: #071a29;
  font-weight: 700;
  text-decoration: none;
}

.hero--photo .hero-enquiry:hover {
  background: #fff;
}

.hero--photo .hero-enquiry:focus-visible {
  outline: 3px solid #071a29;
  outline-offset: 4px;
}

.hero--photo .hero-call::before,
.hero--photo .hero-call::after {
  display: none;
}

.hero--photo .hero-call svg {
  flex: 0 0 auto;
}

.hero--photo .hero-call:focus-visible {
  outline: 3px solid #fff;
  outline-offset: 4px;
}

@media (hover: hover) and (pointer: fine) {
  .hero--photo .hero-call:hover {
    transform: translateY(-2px);
    border-color: rgba(255, 255, 255, 0.88);
    background: linear-gradient(100deg, #d47728 0%, #f7ae21 62%, #ffc64a 100%);
    box-shadow: 0 15px 34px rgba(126, 65, 16, 0.42);
  }
}

.hero--photo .hero-proof {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-top: 2.55rem;
}

.hero--photo .hero-badge {
  width: auto;
  height: 56px;
  margin: 0;
  padding: 0.38rem 0.52rem;
  border-radius: 0.8rem;
  background: rgba(255, 255, 255, 0.94);
  box-shadow: 0 8px 24px rgba(5, 29, 34, 0.22);
}

.hero--photo .hero-proof p {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 0.18rem;
  color: rgba(255, 255, 255, 0.72);
  font-size: 0.9rem;
  line-height: 1.35;
}

.hero--photo .hero-proof strong {
  color: #fff;
  font-size: 0.98rem;
  font-weight: 700;
}

.hero--photo .hero-visual {
  position: absolute;
  inset: 0;
  z-index: 0;
}

.hero--photo .hero-photo-card {
  width: min(80%, 76rem);
  height: 100%;
  margin-left: auto;
}

.hero--photo .hero-photo-card img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 42%;
  filter: saturate(0.98) contrast(1.02);
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, rgba(0, 0, 0, 0.82) 10%, #000 24%, #000 100%);
  mask-image: linear-gradient(90deg, transparent 0%, rgba(0, 0, 0, 0.82) 10%, #000 24%, #000 100%);
}

.hero-wave {
  position: absolute;
  right: 0;
  bottom: -1px;
  left: 0;
  z-index: 3;
  display: block;
  width: 100%;
  height: clamp(3.25rem, 6vw, 5.5rem);
  color: var(--cream);
  pointer-events: none;
}

@media (max-width: 900px) {
  .hero.hero--photo,
  .hero--photo .hero-grid {
    min-height: 43rem;
  }

  .hero--photo::before {
    background:
      radial-gradient(circle at 52% 82%, rgba(242, 165, 26, 0.2), transparent 34%),
      linear-gradient(180deg, rgba(13, 53, 60, 0.92) 0%, rgba(13, 53, 60, 0.82) 58%, rgba(13, 53, 60, 0.5) 100%),
      linear-gradient(90deg, rgba(18, 63, 70, 0.9), rgba(18, 63, 70, 0.18));
  }

  .hero--photo .hero-grid {
    align-items: flex-start;
    padding-block: 4rem 7rem;
  }

  .hero--photo .hero-copy {
    width: 100%;
    max-width: 38rem;
  }

  .hero--photo .hero-copy h1 {
    max-width: 12ch;
    font-size: clamp(3.5rem, 13.5vw, 5.2rem);
  }

  .hero--photo .hero-photo-card {
    width: 100%;
  }

  .hero--photo .hero-photo-card img {
    height: 100%;
    object-position: 72% center;
    -webkit-mask-image: none;
    mask-image: none;
  }
}

@media (max-width: 560px) {
  .hero.hero--photo,
  .hero--photo .hero-grid {
    min-height: 42rem;
  }

  .hero--photo .hero-grid {
    padding-top: 3.4rem;
  }

  .hero--photo .hero-copy h1 {
    margin-bottom: 1.25rem;
    font-size: clamp(3.25rem, 14vw, 4rem);
  }

  .hero--photo .hero-sub {
    max-width: 31ch;
    font-size: 1.04rem;
  }

  .hero--photo .hero-actions {
    margin-top: 1.8rem;
  }

  .hero--photo .hero-call {
    width: 100%;
    min-width: 0;
  }

  .hero--photo .hero-enquiry {
    width: 100%;
  }

  .hero--photo .hero-proof {
    align-items: flex-start;
    gap: 0.8rem;
    margin-top: 2rem;
  }

  .hero--photo .hero-badge {
    height: 49px;
  }

  .hero--photo .hero-proof p {
    font-size: 0.78rem;
  }

  .hero--photo .hero-proof strong {
    font-size: 0.88rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .hero--photo .hero-call {
    transition: none;
  }
}

/* ---------------------------------- homepage service overview ----------------------------------
   The slim, two-colour line icons take their cue from the supplied civic-site
   reference: small editorial illustrations rather than heavy badge graphics. */
.home-service-overview {
  position: relative;
  padding-block: clamp(1.25rem, 2.5vw, 2rem) clamp(4rem, 7vw, 6.25rem);
  background:
    radial-gradient(circle at 50% 0%, rgba(242, 165, 26, 0.12), transparent 25rem),
    var(--cream);
}

.home-service-overview__heading {
  max-width: 42rem;
  margin-inline: auto;
  text-align: center;
}

.home-service-overview__kicker {
  margin: 0 0 0.55rem;
  color: var(--blue-ink);
  font-family: var(--font-utility);
  font-size: 0.875rem;
  font-weight: 600;
  letter-spacing: 0.13em;
  text-transform: uppercase;
}

.home-service-overview__grid {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: clamp(0.55rem, 1.15vw, 1rem);
  margin: clamp(1.35rem, 2.5vw, 2rem) 0 0;
  padding: 0;
  list-style: none;
}

.home-service-overview__grid li {
  min-width: 0;
}

.home-service-overview__grid a {
  display: flex;
  height: 100%;
  min-height: 8.75rem;
  align-items: center;
  padding: 0.9rem 0.45rem 1.1rem;
  border-radius: var(--radius-sm);
  color: inherit;
  flex-direction: column;
  text-align: center;
  text-decoration: none;
  transition: color 0.3s ease, transform 0.3s ease, background-color 0.3s ease;
}

.home-service-overview__icon {
  position: relative;
  display: grid;
  width: clamp(3.65rem, 4.5vw, 4.35rem);
  aspect-ratio: 1;
  margin-bottom: 0.95rem;
  border: 0;
  background: transparent;
  box-shadow: none;
  color: #2c86c9;
  place-items: center;
  transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1);
}

.home-service-overview__icon::before {
  content: "";
  position: absolute;
  top: 0.2rem;
  right: 0.15rem;
  width: 1.45rem;
  aspect-ratio: 1;
  border-radius: 50%;
  background: rgba(164, 85, 42, 0.1);
  transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1), background 0.3s ease;
}

.home-service-overview__icon svg {
  position: relative;
  z-index: 1;
  width: 74%;
  height: 74%;
  stroke-width: 1.75;
}

.home-service-overview__icon svg > * {
  stroke: var(--blue-ink);
  vector-effect: non-scaling-stroke;
}

.home-service-overview__icon svg > *:nth-child(even) {
  stroke: var(--blue-ink);
}

.home-service-overview__grid strong {
  display: block;
  min-height: 2.7em;
  color: #123f46;
  font-size: 0.96rem;
  font-weight: 700;
  line-height: 1.28;
  transition: color 0.3s ease;
}

.home-service-overview__grid a:focus-visible {
  outline: 3px solid var(--cta);
  outline-offset: 3px;
}

@media (hover: hover) and (pointer: fine) {
  .home-service-overview__grid a:hover {
    transform: translateY(-5px);
    background: rgba(255, 255, 255, 0.5);
  }

  .home-service-overview__grid a:hover .home-service-overview__icon {
    transform: translateY(-3px) scale(1.06);
  }

  .home-service-overview__grid a:hover .home-service-overview__icon::before {
    background: rgba(164, 85, 42, 0.16);
    transform: translate(0.15rem, -0.1rem) scale(1.18);
  }

  .home-service-overview__grid a:hover strong {
    color: var(--sun-dark);
  }
}

@media (max-width: 900px) {
  .home-service-overview__grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

@media (max-width: 600px) {
  .home-service-overview {
    padding-top: 0.75rem;
  }

  .home-service-overview__heading {
    text-align: left;
  }

  .home-service-overview__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.85rem 0.5rem;
    margin-top: 2rem;
  }

  .home-service-overview__grid a {
    min-height: 8.75rem;
    padding-inline: 0.25rem;
  }

  .home-service-overview__icon {
    width: 3.8rem;
    margin-bottom: 0.85rem;
  }

  .home-service-overview__grid strong {
    font-size: 0.9rem;
  }

}

@media (prefers-reduced-motion: reduce) {
  .home-service-overview__grid a,
  .home-service-overview__icon,
  .home-service-overview__grid strong {
    transition: none;
  }
}

@media (forced-colors: active) {
  .home-service-overview__icon {
    border: 2px solid CanvasText;
    background: Canvas;
    box-shadow: none;
    color: CanvasText;
  }

  .home-service-overview__icon::before {
    display: none;
  }

  .home-service-overview__icon svg > * {
    stroke: CanvasText;
  }
}

/* ---------------------------------- About: neumorphic statistics ----------------------------------
   The official scheme figures sit in a deep inset tray with four raised cards.
   Every layer shares the same cool-grey surface so the depth comes entirely
   from opposing translucent shadows, following the supplied Soft UI system. */
.cascade {
  overflow: hidden;
  padding-block: 1.4rem 1.75rem;
  background: var(--soft-pill-surface);
}

.cascade-heading {
  margin-block: 0.9rem 0.8rem;
  color: var(--soft-pill-ink);
  font-size: var(--fs-h2);
}

.cascade-intro {
  max-width: 56ch;
  margin: 0 0 1.25rem;
  color: #6b7280;
}

.cascade-list {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(0.6rem, 1vw, 0.9rem);
  margin: 0;
  padding: clamp(0.7rem, 1.4vw, 1.05rem);
  border-radius: 20px;
  background: var(--soft-pill-surface);
  box-shadow:
    inset 10px 10px 20px rgba(163, 177, 198, 0.7),
    inset -10px -10px 20px rgba(255, 255, 255, 0.6);
  list-style: none;
}

.cascade-item {
  display: flex;
  min-width: 0;
  min-height: 0;
  overflow: visible;
}

.cascade-panel {
  display: flex;
  min-width: 0;
  min-height: 8rem;
  flex: 1;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding: 0.875rem 0.75rem;
  border-radius: 16px;
  background: var(--soft-pill-surface);
  box-shadow:
    9px 9px 16px rgba(163, 177, 198, 0.6),
    -9px -9px 16px rgba(255, 255, 255, 0.5);
  color: var(--soft-pill-ink);
  flex-direction: column;
  text-align: center;
  transition: transform 0.3s ease-out, box-shadow 0.3s ease-out;
}

.cascade-num {
  color: var(--soft-pill-accent);
  font-family: var(--font-display);
  font-size: clamp(2rem, 3vw, 2.8rem);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.045em;
  line-height: 0.95;
  white-space: nowrap;
}

.cascade-unit {
  margin-left: 0.32rem;
  font-size: 0.4em;
  font-weight: 700;
  letter-spacing: -0.01em;
}

.cascade-copy {
  margin: 0;
  color: #6b7280;
  font-size: 0.82rem;
  line-height: 1.45;
}

.cascade-copy strong {
  display: block;
  min-height: 2.7em;
  color: var(--soft-pill-ink);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  line-height: 1.35;
  text-transform: uppercase;
}

.cascade-copy span {
  display: block;
  margin-top: 0.45rem;
}

.cascade-source {
  max-width: 78ch;
  margin: 0.9rem 0 0;
  color: #6b7280;
  font-size: 0.76rem;
  line-height: 1.6;
}

.cascade-source + .cascade-source {
  margin-top: 0.25rem;
}

.cascade-source span {
  white-space: nowrap;
}

@media (hover: hover) and (pointer: fine) {
  .cascade-panel:hover {
    transform: translateY(-2px);
    box-shadow:
      12px 12px 20px rgba(163, 177, 198, 0.7),
      -12px -12px 20px rgba(255, 255, 255, 0.6);
  }
}

@media (max-width: 900px) {
  .cascade-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    padding: 1.5rem;
  }

  .cascade-source span {
    white-space: normal;
  }
}

@media (max-width: 560px) {
  .cascade-list {
    grid-template-columns: 1fr;
    gap: 0.85rem;
    padding: 0.75rem;
    border-radius: 20px;
    box-shadow:
      inset 7px 7px 14px rgba(163, 177, 198, 0.68),
      inset -7px -7px 14px rgba(255, 255, 255, 0.58);
  }

  .cascade-panel {
    min-height: 7rem;
    border-radius: 16px;
  }

  .cascade-copy strong {
    min-height: 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .cascade-panel {
    transition: none;
  }
}

@media (forced-colors: active) {
  .cascade-list,
  .cascade-panel {
    border: 1px solid CanvasText;
    box-shadow: none;
  }
}

/* ---------------------------------- Home: Queensland statistics strip ---------------------------------- */

.home-scheme-stats {
  position: relative;
  isolation: isolate;
  padding-block: clamp(2rem, 4vw, 2.75rem);
  overflow: hidden;
  color: #fffaf3;
  background:
    radial-gradient(circle at 13% 20%, rgba(240, 166, 105, 0.16), transparent 28%),
    radial-gradient(circle at 88% 85%, rgba(132, 196, 235, 0.2), transparent 34%),
    linear-gradient(118deg, #174f78 0%, #1f628f 52%, #2b6f9e 100%);
}

.home-scheme-stats::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  opacity: 0.22;
  pointer-events: none;
  background-image:
    linear-gradient(115deg, transparent 0 42%, rgba(255, 255, 255, 0.035) 42% 43%, transparent 43% 100%),
    repeating-linear-gradient(90deg, transparent 0 48px, rgba(255, 255, 255, 0.018) 48px 49px);
}

.home-scheme-stats__heading {
  margin: 0 0 1.15rem;
  color: rgba(255, 250, 243, 0.78);
  font-size: 0.875rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  line-height: 1.4;
  text-align: center;
  text-transform: uppercase;
}

.home-scheme-stats .cascade-list {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0;
  margin: 0;
  padding: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

.home-scheme-stats .cascade-item {
  min-height: 0;
  overflow: visible;
  border-left: 1px solid rgba(255, 250, 243, 0.24);
}

.home-scheme-stats .cascade-item:first-child {
  border-left: 0;
}

.home-scheme-stats .cascade-panel {
  min-width: 0;
  min-height: 10.75rem;
  justify-content: flex-start;
  gap: 0.4rem;
  padding: 0.1rem clamp(0.8rem, 2vw, 1.6rem) 0;
  border: 0;
  border-radius: 0;
  color: #fffaf3;
  background: transparent;
  box-shadow: none;
  text-align: center;
  transform: none;
}

.home-scheme-stats .cascade-panel:hover {
  transform: none;
  box-shadow: none;
}

.home-scheme-stats__icon {
  display: grid;
  width: 2.15rem;
  height: 2.15rem;
  margin-bottom: 0.15rem;
  place-items: center;
  color: #8fc9f0;
}

.home-scheme-stats__icon svg {
  width: 100%;
  height: 100%;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.home-scheme-stats .cascade-num {
  color: #fffaf3;
  font-size: clamp(1.75rem, 2.8vw, 2.55rem);
  font-weight: 600;
  letter-spacing: -0.04em;
  line-height: 1;
}

.home-scheme-stats .cascade-unit {
  color: inherit;
  font-size: 0.42em;
}

.home-scheme-stats .cascade-copy {
  max-width: 22ch;
  margin: 0.15rem auto 0;
  color: rgba(255, 250, 243, 0.68);
  font-size: 0.875rem;
  line-height: 1.42;
}

.home-scheme-stats .cascade-copy strong {
  display: block;
  min-height: 0;
  margin-bottom: 0.2rem;
  color: #fffaf3;
  font-size: 0.9rem;
  font-weight: 650;
  letter-spacing: 0;
  line-height: 1.3;
  text-transform: none;
}

.home-scheme-stats .cascade-copy span {
  display: block;
  margin-top: 0;
}

@media (max-width: 760px) {
  .home-scheme-stats .cascade-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .home-scheme-stats .cascade-item:nth-child(odd) {
    border-left: 0;
  }

  .home-scheme-stats .cascade-item:nth-child(n + 3) {
    border-top: 1px solid rgba(255, 250, 243, 0.24);
  }

  .home-scheme-stats .cascade-panel {
    min-height: 11.5rem;
    padding-block: 1.2rem;
  }
}

@media (max-width: 400px) {
  .home-scheme-stats .cascade-panel {
    min-height: 12rem;
    padding-inline: 0.55rem;
  }

  .home-scheme-stats .cascade-num {
    font-size: 1.65rem;
  }

  .home-scheme-stats .cascade-copy {
    font-size: 0.875rem;
  }
}

@media (forced-colors: active) {
  .home-scheme-stats {
    border-block: 1px solid CanvasText;
    background: Canvas;
    color: CanvasText;
  }

  .home-scheme-stats::before {
    display: none;
  }

  .home-scheme-stats .cascade-item {
    border-color: CanvasText;
  }
}

/* ---------------------------------- About: neumorphic commitments ----------------------------------
   Converts the former green middle band into the same Soft UI depth system as
   the statistics below it: inset tray, raised cards and deep inset icon wells. */
.dark-zone {
  color: var(--soft-pill-ink);
  background: var(--soft-pill-surface);
}

.dark-zone::before,
.dark-zone > .band-dots,
.dark-zone > .band-glow {
  display: none;
}

#commitments h2 {
  color: var(--soft-pill-ink);
}

#commitments .trust-intro {
  color: #6b7280;
}

#commitments .trust-grid--four {
  gap: clamp(1.25rem, 2.2vw, 2rem);
  padding: clamp(1.5rem, 3.5vw, 3rem);
  border-radius: 32px;
  background: var(--soft-pill-surface);
  box-shadow:
    inset 10px 10px 20px rgba(163, 177, 198, 0.7),
    inset -10px -10px 20px rgba(255, 255, 255, 0.6);
}

#commitments .trust-card {
  min-height: 17rem;
  align-items: center;
  justify-content: center;
  padding: clamp(1.4rem, 2.4vw, 2rem) clamp(1rem, 1.8vw, 1.5rem);
  border: 0;
  border-radius: 32px;
  background: var(--soft-pill-surface);
  box-shadow:
    9px 9px 16px rgba(163, 177, 198, 0.6),
    -9px -9px 16px rgba(255, 255, 255, 0.5);
  text-align: center;
  transition: transform 0.3s ease-out, box-shadow 0.3s ease-out;
}

#commitments .trust-card::before,
#commitments .trust-card::after {
  display: none;
}

#commitments .trust-card-head {
  align-items: center;
  gap: 1rem;
  margin-bottom: 1rem;
  flex-direction: column;
}

#commitments .trust-icon {
  display: grid;
  width: 3.75rem;
  height: 3.75rem;
  border-radius: 50%;
  background: var(--soft-pill-surface);
  box-shadow:
    inset 6px 6px 10px rgba(163, 177, 198, 0.64),
    inset -6px -6px 10px rgba(255, 255, 255, 0.56);
  color: var(--soft-pill-accent);
  place-items: center;
}

#commitments .trust-icon svg {
  width: 1.55rem;
  height: 1.55rem;
}

#commitments .trust-card h3 {
  color: var(--soft-pill-ink);
  font-family: var(--font-body);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.055em;
  line-height: 1.35;
}

#commitments .trust-card p {
  margin: 0;
  color: #6b7280;
  font-size: 0.82rem;
  line-height: 1.48;
}

@media (hover: hover) and (pointer: fine) {
  #commitments .trust-card:hover {
    transform: translateY(-2px);
    border: 0;
    background: var(--soft-pill-surface);
    box-shadow:
      12px 12px 20px rgba(163, 177, 198, 0.7),
      -12px -12px 20px rgba(255, 255, 255, 0.6);
  }

  #commitments .trust-card:hover .trust-icon {
    color: var(--soft-pill-accent);
  }
}

@media (max-width: 900px) {
  #commitments .trust-grid--four {
    padding: 1.5rem;
  }
}

@media (max-width: 560px) {
  #commitments .trust-grid--four {
    gap: 1.25rem;
    padding: 1rem;
    border-radius: 24px;
    box-shadow:
      inset 7px 7px 14px rgba(163, 177, 198, 0.68),
      inset -7px -7px 14px rgba(255, 255, 255, 0.58);
  }

  #commitments .trust-card {
    min-height: 14rem;
    border-radius: 24px;
  }
}

@media (prefers-reduced-motion: reduce) {
  #commitments .trust-card,
  #commitments .trust-icon {
    transition: none;
  }
}

@media (forced-colors: active) {
  #commitments .trust-grid--four,
  #commitments .trust-card,
  #commitments .trust-icon {
    border: 1px solid CanvasText;
    box-shadow: none;
  }
}

/* About commitments: open editorial grid inspired by Clarity's careers layout.
   The existing icon and card class names remain so the SVG build-on-hover
   motion and reduced-motion fallback continue to work. */
.about-page .dark-zone {
  color: var(--ink);
  background: transparent;
}

.about-page #commitments {
  padding-block: clamp(2rem, 5vw, 4.5rem);
}

.about-page #commitments > .wrap {
  padding: clamp(2.25rem, 5vw, 4.75rem);
  border: 1px solid rgba(36, 31, 28, 0.07);
  border-radius: clamp(1.25rem, 2vw, 2rem);
  background: var(--paper);
  box-shadow: 0 18px 50px -40px rgba(36, 31, 28, 0.34);
}

.about-page #commitments h2 {
  max-width: 18ch;
  margin-block: 0 0.85rem;
  color: var(--ink);
  font-size: clamp(2rem, 4vw, 3.25rem);
  font-weight: 600;
  letter-spacing: -0.045em;
  line-height: 1.02;
}

.about-page #commitments .trust-intro {
  max-width: 58ch;
  margin: 0 0 clamp(2.75rem, 6vw, 5rem);
  color: var(--ink-soft);
  font-size: clamp(1rem, 1.4vw, 1.15rem);
  line-height: 1.65;
}

.about-page #commitments .trust-grid--four {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(2.75rem, 6vw, 5rem) clamp(3rem, 8vw, 7.5rem);
  padding: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

.about-page #commitments .trust-card {
  min-height: 0;
  align-items: flex-start;
  justify-content: flex-start;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  text-align: left;
}

.about-page #commitments .trust-card-head {
  flex-direction: row;
  align-items: center;
  gap: 1rem;
  margin-bottom: 1.15rem;
}

.about-page #commitments .trust-icon {
  width: 3.15rem;
  height: 3.15rem;
  flex: 0 0 3.15rem;
  border: 0;
  border-radius: 0.45rem;
  background: #e8f4f4;
  box-shadow: none;
  color: #087f83;
  transition: color 0.28s ease, background-color 0.28s ease, transform 0.28s ease;
}

.about-page #commitments .trust-icon svg {
  width: 1.5rem;
  height: 1.5rem;
}

.about-page #commitments .trust-card h3 {
  max-width: 22ch;
  color: var(--ink);
  font-family: var(--font-body);
  font-size: clamp(1.15rem, 2vw, 1.45rem);
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.18;
  text-transform: none;
}

.about-page #commitments .trust-card p {
  max-width: 42ch;
  margin: 0;
  color: var(--ink-soft);
  font-size: clamp(0.96rem, 1.25vw, 1.08rem);
  line-height: 1.65;
}

@media (hover: hover) and (pointer: fine) {
  .about-page #commitments .trust-card:hover {
    transform: none;
    border: 0;
    background: transparent;
    box-shadow: none;
  }

  .about-page #commitments .trust-card:hover .trust-icon {
    transform: translateY(-2px);
    background: #fff0df;
    color: var(--sun-dark);
  }
}

@media (max-width: 760px) {
  .about-page #commitments > .wrap {
    padding: clamp(1.5rem, 7vw, 2.5rem);
  }

  .about-page #commitments .trust-grid--four {
    grid-template-columns: 1fr;
    gap: 2.5rem;
  }

  .about-page #commitments .trust-intro {
    margin-bottom: 2.75rem;
  }
}

/* About header: the directors' portrait overlaps the copy field so its left
   edge can dissolve softly into the warm page background rather than ending
   at a hard split. The faces and uniform logos remain sharp. */
.about-page .page-header .page-header-card {
  position: relative;
  display: block;
  isolation: isolate;
  background:
    radial-gradient(circle at 8% 10%, rgba(255, 183, 77, 0.2), transparent 40%),
    linear-gradient(135deg, #fffaf4 0%, #fff0df 100%);
}

.about-page .page-header-copy {
  position: relative;
  z-index: 2;
  width: min(54%, 48rem);
  height: 100%;
  padding-right: clamp(2.5rem, 6vw, 6rem);
  background: linear-gradient(
    90deg,
    rgba(255, 250, 244, 0.98) 0%,
    rgba(255, 245, 234, 0.92) 72%,
    rgba(255, 240, 223, 0) 100%
  );
}

.about-page .page-header-media {
  position: absolute;
  z-index: 1;
  inset: 0 0 0 42%;
}

.about-page .page-header-media::after {
  inset: 0 auto 0 0;
  width: clamp(4.5rem, 8vw, 7rem);
  height: auto;
  background: linear-gradient(
    90deg,
    rgba(255, 240, 223, 0.98) 0%,
    rgba(255, 240, 223, 0.64) 34%,
    rgba(255, 240, 223, 0.14) 74%,
    transparent 100%
  );
  -webkit-backdrop-filter: blur(5px);
  backdrop-filter: blur(5px);
}

.about-page .page-header-media img {
  object-position: center 3%;
}

@media (max-width: 820px) {
  .about-page .page-header .page-header-card {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
  }

  .about-page .page-header-copy {
    width: 100%;
    min-width: 0;
    max-width: 100%;
    height: auto;
    padding: clamp(1.5rem, 7vw, 2.5rem);
    background: none;
  }

  .about-page .page-header-copy p {
    width: 100%;
    max-width: 100%;
    overflow-wrap: break-word;
  }

  .about-page .page-header-media {
    position: relative;
    inset: auto;
  }

  .about-page .page-header-media::after {
    inset: 0 0 auto;
    width: auto;
    height: 3.5rem;
    background: linear-gradient(180deg, rgba(255, 240, 223, 0.76), transparent);
    -webkit-backdrop-filter: blur(3px);
    backdrop-filter: blur(3px);
  }

  .about-page .page-header-media img {
    object-position: center 3%;
  }
}

/* About closing CTA: the same clean white card surface used by photo banners. */
.about-page .home-cta .wrap {
  background: var(--paper);
  box-shadow: var(--shadow-card);
  color: var(--ink);
}

.about-page .home-cta p {
  color: var(--ink-soft);
}

.about-page .home-cta .lit-card::before {
  display: none;
}

/* ---------------------------------- non-footer light cards ----------------------------------
   The remaining green content cards use the same white surface as the site's
   photo banners. The footer and full-width location/stat bands remain dark. */
.home-cta .wrap,
.contact .wrap {
  background: var(--paper);
  box-shadow: var(--shadow-card);
  color: var(--ink);
}

.home-cta p,
.trust-band p,
.contact-copy p {
  color: var(--ink-soft);
}

.home-cta .lit-card::before,
.contact .lit-card::before {
  display: none;
}

/* Homepage: translate the nested dark glass UI onto the new light card. */
.trust-band .glass-badge {
  border-color: rgba(36, 31, 28, 0.12);
  background: var(--soft-pill-surface);
  color: var(--soft-pill-ink);
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.trust-band .grad-text {
  background: none;
  color: var(--sun-dark);
}

.trust-band .btn--glass {
  border-color: rgba(36, 31, 28, 0.28);
  background: transparent;
  color: var(--ink);
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.trust-band .btn--glass:hover,
.trust-band .btn--glass:focus-visible {
  border-color: var(--ink);
  background: var(--ink);
  color: var(--paper);
}

.trust-band .glass-card {
  border-color: rgba(36, 31, 28, 0.1);
  background: var(--soft-pill-surface);
  box-shadow:
    9px 9px 16px rgba(163, 177, 198, 0.5),
    -9px -9px 16px rgba(255, 255, 255, 0.8);
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.trust-band .glass-card::after {
  display: none;
}

.trust-band .glass-icon {
  background: var(--soft-pill-surface);
  box-shadow:
    inset 5px 5px 9px rgba(163, 177, 198, 0.58),
    inset -5px -5px 9px rgba(255, 255, 255, 0.68);
  color: var(--soft-pill-accent);
}

.trust-band .glass-stat-value,
.trust-band .glass-meter-row strong,
.trust-band .glass-mini-item .v {
  color: var(--soft-pill-ink);
}

.trust-band .glass-stat-value span,
.trust-band .glass-stat-label,
.trust-band .glass-meter-row,
.trust-band .glass-mini-item .l {
  color: #6b7280;
}

.trust-band .glass-track {
  background: rgba(163, 177, 198, 0.34);
  box-shadow: inset 2px 2px 4px rgba(163, 177, 198, 0.42);
}

.trust-band .glass-rule,
.trust-band .glass-divider {
  background: rgba(61, 72, 82, 0.15);
}

.trust-band .glass-pill {
  border-color: rgba(61, 72, 82, 0.14);
  background: rgba(255, 255, 255, 0.38);
  color: var(--soft-pill-ink);
}

/* Contact page: dark-surface link and label colours need light-card variants. */
.contact-details a {
  color: var(--ink);
}

.contact-details .label {
  color: var(--ink-soft);
}

.contact-icon {
  background: var(--soft-pill-surface);
  box-shadow:
    inset 3px 3px 6px rgba(163, 177, 198, 0.52),
    inset -3px -3px 6px rgba(255, 255, 255, 0.62);
  color: var(--soft-pill-accent);
}

@media (forced-colors: active) {
  .home-cta .wrap,
  .contact .wrap,
  .trust-band .glass-card,
  .contact-icon {
    border: 1px solid CanvasText;
    box-shadow: none;
  }
}

/* ---------------------------------- Homepage: Brisbane landscape footer ---------------------------------- */

.site-footer--home {
  padding-block: 0 1.8rem;
  background: #103f3d;
}

.site-footer--home .footer-glow {
  display: none;
}

.home-footer-scene {
  position: relative;
  isolation: isolate;
  display: flex;
  min-height: clamp(24rem, 38vw, 34rem);
  align-items: flex-end;
  overflow: hidden;
  color: #fffaf3;
  background: #174a47;
}

.home-footer-scene__media,
.home-footer-scene__media::after {
  position: absolute;
  inset: 0;
}

.home-footer-scene__media::after {
  content: "";
  z-index: 2;
  background:
    linear-gradient(90deg, rgba(9, 48, 47, 0.9) 0%, rgba(9, 48, 47, 0.68) 38%, rgba(9, 48, 47, 0.18) 74%, rgba(9, 48, 47, 0.28) 100%),
    linear-gradient(0deg, #103f3d 0%, rgba(16, 63, 61, 0.92) 12%, rgba(16, 63, 61, 0.08) 58%, rgba(16, 63, 61, 0.05) 100%);
  pointer-events: none;
}

.home-footer-scene__primary {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 54%;
  filter: saturate(0.82) contrast(0.96);
}

.home-footer-scene__accent {
  position: absolute;
  z-index: 1;
  top: clamp(2rem, 5vw, 4.25rem);
  right: clamp(1.5rem, 6vw, 6rem);
  width: min(30vw, 25rem);
  height: clamp(10rem, 17vw, 14rem);
  object-fit: cover;
  border: 1px solid rgba(255, 250, 243, 0.5);
  border-radius: 1.2rem;
  box-shadow: 0 22px 60px rgba(4, 28, 27, 0.35);
  filter: saturate(0.78) contrast(1.04);
}

.home-footer-scene::after {
  content: "";
  position: absolute;
  z-index: 3;
  right: 0;
  bottom: -1px;
  left: 0;
  height: clamp(2.5rem, 5vw, 4.5rem);
  background: #103f3d;
  clip-path: polygon(0 76%, 8% 61%, 17% 68%, 27% 45%, 39% 63%, 50% 40%, 61% 59%, 73% 37%, 84% 55%, 93% 34%, 100% 48%, 100% 100%, 0 100%);
}

.home-footer-scene__copy {
  position: relative;
  z-index: 4;
  padding-block: clamp(7rem, 14vw, 11rem) clamp(4.75rem, 7vw, 6.5rem);
}

.home-footer-scene__eyebrow {
  margin: 0 0 0.8rem;
  color: #f0a669;
  font-family: var(--font-utility);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.home-footer-scene h2 {
  max-width: 12ch;
  margin: 0 0 0.8rem;
  color: #fffaf3;
  font-size: clamp(2.5rem, 5vw, 4.8rem);
  letter-spacing: -0.05em;
  line-height: 0.94;
}

.home-footer-scene h2 span {
  color: #f5bd8b;
}

.home-footer-scene__copy > p:not(.home-footer-scene__eyebrow) {
  max-width: 38ch;
  margin: 0 0 1.4rem;
  color: rgba(255, 250, 243, 0.84);
  font-size: clamp(0.98rem, 1.5vw, 1.12rem);
}

.home-footer-scene .btn--on-dark {
  border-color: rgba(255, 250, 243, 0.85);
  background: rgba(255, 250, 243, 0.94);
  color: #103f3d;
}

.home-footer-scene .btn--on-dark:hover,
.home-footer-scene .btn--on-dark:focus-visible {
  border-color: #f0a669;
  background: #f0a669;
  color: #183c3b;
}

.site-footer--home .home-footer-content {
  padding-top: clamp(1.5rem, 3vw, 2.5rem);
}

.site-footer--home .footer-top {
  grid-template-columns: minmax(15rem, 1.3fr) repeat(3, minmax(9rem, 0.8fr));
  gap: clamp(2rem, 5vw, 4.5rem);
  padding-bottom: 2rem;
}

.site-footer--home .footer-col h3 {
  color: #f0a669;
}

.site-footer--home .footer-col a,
.site-footer--home .footer-contact {
  color: rgba(255, 250, 243, 0.88);
}

.site-footer--home .footer-col a:hover,
.site-footer--home .footer-col a:focus-visible,
.site-footer--home .footer-contact a:hover,
.site-footer--home .footer-contact a:focus-visible {
  color: #f5bd8b;
}

.site-footer--home .footer-social a {
  border: 1px solid rgba(255, 250, 243, 0.24);
  background: rgba(255, 255, 255, 0.06);
}

.site-footer--home .footer-social a:hover,
.site-footer--home .footer-social a:focus-visible {
  border-color: #f0a669;
  background: #f0a669;
  color: #103f3d;
}

.site-footer--home .footer-legal {
  border-top: 1px solid rgba(255, 250, 243, 0.14);
}

.home-page .acknowledgement {
  border-top-color: rgba(255, 250, 243, 0.12);
  background: #0b302f;
}

.home-page .ack-text {
  color: rgba(255, 250, 243, 0.72);
}

@media (max-width: 980px) {
  .site-footer--home .footer-top {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .site-footer--home .footer-brand {
    grid-column: 1 / -1;
  }
}

@media (max-width: 720px) {
  .home-footer-scene {
    min-height: 34rem;
  }

  .home-footer-scene__primary {
    object-position: 57% center;
  }

  .home-footer-scene__media::after {
    background:
      linear-gradient(90deg, rgba(9, 48, 47, 0.86), rgba(9, 48, 47, 0.32)),
      linear-gradient(0deg, #103f3d 0%, rgba(16, 63, 61, 0.88) 20%, rgba(16, 63, 61, 0.12) 68%);
  }

  .home-footer-scene__accent {
    top: 1.4rem;
    right: 1.25rem;
    width: min(48vw, 13rem);
    height: 7.5rem;
    border-radius: 0.85rem;
  }

  .home-footer-scene__copy {
    padding-block: 10.5rem 5rem;
  }

  .home-footer-scene h2 {
    max-width: 10ch;
    font-size: clamp(2.6rem, 12vw, 3.7rem);
  }
}

@media (max-width: 560px) {
  .site-footer--home .footer-top {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 2.25rem;
  }

  .site-footer--home .footer-brand {
    grid-column: 1 / -1;
  }

  .site-footer--home .footer-col:last-child {
    grid-column: 1 / -1;
  }

  .site-footer--home .footer-legal {
    gap: 0.45rem 1rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .home-footer-scene__primary,
  .home-footer-scene__accent {
    filter: saturate(0.82);
  }
}

@media (forced-colors: active) {
  .home-footer-scene,
  .site-footer--home,
  .home-page .acknowledgement {
    border-block: 1px solid CanvasText;
    background: Canvas;
    color: CanvasText;
  }

  .home-footer-scene__media {
    display: none;
  }

  .home-footer-scene::after {
    display: none;
  }
}

/* Homepage footer revision: one uninterrupted Brisbane landscape, followed by
   a compact information footer using only the site's existing content. */

.site-footer--home {
  padding-bottom: 1.6rem;
  background:
    radial-gradient(circle at 50% 0%, rgba(31, 104, 97, 0.3), transparent 36%),
    #0d4542;
}

.home-footer-scene {
  display: block;
  min-height: 0;
  height: clamp(15rem, 27vw, 23rem);
  background: #dfe6df;
}

.home-footer-scene::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  background:
    linear-gradient(180deg, rgba(242, 238, 225, 0.12), transparent 42%),
    linear-gradient(0deg, rgba(13, 69, 66, 0.95) 0%, rgba(13, 69, 66, 0.5) 15%, rgba(13, 69, 66, 0.06) 52%);
  pointer-events: none;
}

.home-footer-scene__primary {
  object-position: center 49%;
  filter: saturate(0.7) contrast(0.94) brightness(1.02);
}

.home-footer-scene::after {
  height: clamp(2.8rem, 5vw, 4.75rem);
  background: #0d4542;
  clip-path: polygon(0 72%, 7% 58%, 14% 65%, 22% 48%, 31% 62%, 40% 42%, 49% 60%, 58% 39%, 67% 57%, 77% 36%, 86% 54%, 94% 34%, 100% 46%, 100% 100%, 0 100%);
}

.site-footer--home .home-footer-content {
  padding-top: clamp(1.25rem, 2.8vw, 2.25rem);
}

.site-footer--home .footer-top {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(2rem, 5vw, 5rem);
}

.site-footer--home .footer-brand {
  display: grid;
  grid-column: 1 / -1;
  grid-template-columns: minmax(9rem, 12rem) minmax(16rem, 1fr) auto;
  gap: clamp(1.5rem, 4vw, 3.5rem);
  align-items: center;
  padding-bottom: 1.9rem;
  border-bottom: 1px solid rgba(255, 250, 243, 0.15);
}

.site-footer--home .footer-brand .brand,
.site-footer--home .footer-brand p {
  margin: 0;
}

.site-footer--home .footer-brand p {
  max-width: 56ch;
}

.site-footer--home .footer-social {
  justify-self: end;
}

.site-footer--home .footer-col {
  padding-right: clamp(0rem, 2vw, 1.5rem);
}

.site-footer--home .footer-col + .footer-col {
  border-left: 1px solid rgba(255, 250, 243, 0.12);
  padding-left: clamp(1.5rem, 4vw, 3.5rem);
}

@media (max-width: 760px) {
  .home-footer-scene {
    min-height: 0;
    height: clamp(12rem, 58vw, 16rem);
  }

  .home-footer-scene__primary {
    object-position: 57% center;
  }

  .site-footer--home .footer-top {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 2.5rem 1.5rem;
  }

  .site-footer--home .footer-brand {
    grid-template-columns: 1fr;
    gap: 1rem;
    align-items: start;
  }

  .site-footer--home .footer-social {
    justify-self: start;
  }

  .site-footer--home .footer-col {
    padding-right: 0;
  }

  .site-footer--home .footer-col + .footer-col {
    border-left: 0;
    padding-left: 0;
  }

  .site-footer--home .footer-col:last-child {
    grid-column: 1 / -1;
    padding-top: 1.75rem;
    border-top: 1px solid rgba(255, 250, 243, 0.12);
  }
}

@media (forced-colors: active) {
  .home-footer-scene::before {
    display: none;
  }

  .site-footer--home .footer-brand,
  .site-footer--home .footer-col:last-child {
    border-color: CanvasText;
  }
}

/* Homepage footer proof strip + blue palette. The credibility details are the
   same details formerly shown in the closing CTA card. */

.home-page .trust-band-inner {
  grid-template-columns: minmax(0, 1fr);
}

.home-page .trust-band-copy {
  max-width: 52rem;
  margin-inline: auto;
  text-align: center;
}

.home-page .trust-band-actions {
  justify-content: center;
}

.site-footer--home {
  background:
    radial-gradient(circle at 50% 0%, rgba(62, 130, 169, 0.28), transparent 36%),
    #153e59;
}

.home-footer-scene::before {
  background:
    linear-gradient(180deg, rgba(219, 233, 242, 0.08), transparent 45%),
    linear-gradient(0deg, rgba(218, 232, 241, 0.9) 0%, rgba(29, 78, 108, 0.38) 20%, rgba(21, 62, 89, 0.04) 58%);
}

.home-footer-scene__primary {
  filter: saturate(0.72) contrast(0.94) brightness(1.03) hue-rotate(-3deg);
}

.home-footer-scene::after {
  background: #dae8f1;
}

.home-footer-proof {
  position: relative;
  z-index: 4;
  color: #17384e;
  background: #dae8f1;
  box-shadow: inset 0 -1px rgba(22, 61, 86, 0.12);
}

.home-footer-proof > .wrap {
  padding-block: clamp(1.5rem, 3vw, 2.35rem) clamp(1.25rem, 2.5vw, 1.9rem);
}

.home-footer-proof__main {
  display: grid;
  grid-template-columns: minmax(16rem, 1.25fr) minmax(0, 2fr);
  gap: clamp(1.5rem, 4vw, 4rem);
  align-items: center;
}

.home-footer-proof__rating {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.home-footer-proof__star {
  display: grid;
  width: 3.4rem;
  height: 3.4rem;
  flex: 0 0 3.4rem;
  place-items: center;
  border-radius: 1rem;
  background: rgba(255, 255, 255, 0.58);
  box-shadow:
    6px 6px 14px rgba(76, 109, 132, 0.18),
    -6px -6px 14px rgba(255, 255, 255, 0.62);
  color: #ed933f;
}

.home-footer-proof__star svg {
  width: 1.65rem;
  height: 1.65rem;
}

.home-footer-proof__rating strong {
  display: block;
  color: #17384e;
  font-size: clamp(2rem, 3.5vw, 3rem);
  font-weight: 700;
  letter-spacing: -0.05em;
  line-height: 0.95;
}

.home-footer-proof__rating strong span {
  margin-left: 0.15rem;
  color: #557084;
  font-size: 0.55em;
}

.home-footer-proof__rating p {
  margin: 0.45rem 0 0;
  color: #557084;
  font-size: 0.9rem;
}

.home-footer-proof__metrics {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.home-footer-proof__metrics > div {
  display: grid;
  min-height: 4.75rem;
  align-content: center;
  justify-items: center;
  padding-inline: clamp(0.75rem, 2.5vw, 2rem);
  border-left: 1px solid rgba(22, 61, 86, 0.18);
  text-align: center;
}

.home-footer-proof__metrics strong {
  color: #17384e;
  font-size: clamp(1.3rem, 2.2vw, 1.8rem);
  line-height: 1;
}

.home-footer-proof__metrics span {
  margin-top: 0.5rem;
  color: #557084;
  font-family: var(--font-utility);
  font-size: 0.67rem;
  font-weight: 700;
  letter-spacing: 0.11em;
  text-transform: uppercase;
}

.home-footer-proof__status {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
  margin-top: 1.45rem;
  padding-top: 1.25rem;
  border-top: 1px solid rgba(22, 61, 86, 0.14);
}

.home-footer-proof__pills {
  display: flex;
  flex-wrap: wrap;
  gap: 0.65rem;
}

.home-footer-proof__pill {
  display: inline-flex;
  min-height: 2.35rem;
  align-items: center;
  gap: 0.6rem;
  padding: 0.5rem 0.9rem;
  border: 1px solid rgba(22, 61, 86, 0.15);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.5);
  color: #17384e;
  font-family: var(--font-utility);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.11em;
  text-transform: uppercase;
}

.home-footer-proof__status > img {
  width: 7.75rem;
  height: auto;
  padding: 0.45rem 0.6rem;
  border-radius: 0.75rem;
  background: rgba(255, 255, 255, 0.68);
}

.site-footer--home .footer-brand,
.site-footer--home .footer-col + .footer-col,
.site-footer--home .footer-col:last-child,
.site-footer--home .footer-legal,
.site-footer--home .footer-bottom {
  border-color: rgba(226, 239, 247, 0.15);
}

.site-footer--home .footer-col h3 {
  color: #f2a45f;
}

.home-page .acknowledgement {
  border-top-color: rgba(226, 239, 247, 0.12);
  background: #0e3048;
}

@media (max-width: 760px) {
  .home-footer-proof__main {
    grid-template-columns: 1fr;
    gap: 1.4rem;
  }

  .home-footer-proof__rating {
    justify-content: center;
    text-align: left;
  }

  .home-footer-proof__metrics > div:first-child {
    border-left: 0;
  }

  .home-footer-proof__status {
    align-items: flex-start;
  }
}

@media (max-width: 520px) {
  .home-footer-proof__metrics > div {
    min-height: 4.25rem;
    padding-inline: 0.45rem;
  }

  .home-footer-proof__metrics span {
    font-size: 0.6rem;
    letter-spacing: 0.08em;
  }

  .home-footer-proof__status {
    flex-direction: column;
  }

  .home-footer-proof__status > img {
    width: 7rem;
  }
}

@media (forced-colors: active) {
  .home-footer-proof,
  .home-footer-proof__star,
  .home-footer-proof__pill,
  .home-footer-proof__status > img {
    border: 1px solid CanvasText;
    background: Canvas;
    color: CanvasText;
    box-shadow: none;
  }
}

/* Homepage hero: light-blue reading field, aligned with the footer proof strip. */

.hero.hero--photo {
  background: #dae8f1;
  color: #17384e;
}

.hero--photo::before {
  background:
    radial-gradient(circle at 44% 74%, rgba(240, 164, 95, 0.2), transparent 30%),
    linear-gradient(90deg, #dae8f1 0%, rgba(218, 232, 241, 0.98) 28%, rgba(218, 232, 241, 0.76) 49%, rgba(218, 232, 241, 0.2) 72%, transparent 100%);
}

.hero--photo .hero-copy h1 {
  color: #17384e;
  text-shadow: 0 2px 22px rgba(255, 255, 255, 0.3);
}

.hero--photo .hero-sub {
  color: #405b6e;
  text-shadow: 0 1px 12px rgba(255, 255, 255, 0.34);
}

.hero--photo .hero-call {
  border-color: rgba(23, 56, 78, 0.24);
  box-shadow: 0 10px 28px rgba(100, 70, 36, 0.24);
}

.hero--photo .hero-call:focus-visible {
  outline-color: #17384e;
}

.hero--photo .hero-proof p {
  color: #557084;
}

.hero--photo .hero-proof strong {
  color: #17384e;
}

.hero--photo .hero-badge {
  box-shadow: 0 8px 24px rgba(35, 73, 98, 0.18);
}

@media (hover: hover) and (pointer: fine) {
  .hero--photo .hero-call:hover {
    border-color: rgba(23, 56, 78, 0.4);
  }
}

@media (max-width: 900px) {
  .hero--photo::before {
    background:
      radial-gradient(circle at 52% 82%, rgba(240, 164, 95, 0.18), transparent 34%),
      linear-gradient(180deg, rgba(218, 232, 241, 0.96) 0%, rgba(218, 232, 241, 0.9) 58%, rgba(218, 232, 241, 0.58) 100%),
      linear-gradient(90deg, rgba(218, 232, 241, 0.92), rgba(218, 232, 241, 0.28));
  }
}

/* Homepage footer: compact light-grey information layout. */

.site-footer--home {
  padding-bottom: 1.25rem;
  background: var(--cream);
  color: #17384e;
}

.home-footer-scene::after,
.home-footer-proof {
  background: var(--cream);
}

.home-footer-proof {
  color: #17384e;
  border-bottom: 1px solid rgba(23, 56, 78, 0.14);
  box-shadow: none;
}

.home-footer-proof > .wrap {
  padding-block: clamp(1.45rem, 2.6vw, 2rem);
}

.home-footer-proof__main {
  grid-template-columns: minmax(15rem, 1.15fr) minmax(0, 2fr);
  gap: clamp(1.5rem, 3vw, 3rem);
}

.home-footer-proof__star {
  background: #fff;
  box-shadow: 0 10px 25px rgba(30, 65, 89, 0.09);
}

.site-footer--home .home-footer-content {
  padding-top: clamp(2.2rem, 4vw, 3.5rem);
}

.site-footer--home .footer-top {
  grid-template-columns: minmax(13rem, 1.05fr) minmax(8rem, 0.75fr) minmax(11rem, 1fr) minmax(13rem, 1.15fr);
  gap: clamp(2.5rem, 5vw, 5.25rem);
  align-items: start;
  padding-bottom: clamp(2rem, 4vw, 3rem);
}

.site-footer--home .footer-brand {
  display: block;
  grid-column: auto;
  padding: 0;
  border: 0;
}

.site-footer--home .footer-brand .brand {
  display: inline-flex;
  margin: 0 0 0.9rem;
}

.site-footer--home .footer-brand p {
  max-width: 35ch;
  margin: 0 0 1.15rem;
  color: #5a6670;
  font-size: 0.86rem;
  line-height: 1.6;
}

.footer-brand__details {
  display: grid;
  gap: 1.1rem;
}

.site-footer--home .home-footer-proof__pills {
  gap: 0.45rem;
}

.site-footer--home .home-footer-proof__pill {
  min-height: 2rem;
  padding: 0.38rem 0.65rem;
  border-color: rgba(23, 56, 78, 0.13);
  background: rgba(255, 255, 255, 0.64);
  color: #17384e;
  font-size: 0.6rem;
  letter-spacing: 0.08em;
}

.footer-brand__marks {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  max-width: 16rem;
}

.footer-ndis {
  width: 6.65rem;
  height: auto;
  padding: 0.35rem 0.45rem;
  border: 1px solid rgba(23, 56, 78, 0.1);
  border-radius: 0.65rem;
  background: #fff;
}

.site-footer--home .footer-social {
  justify-self: auto;
  gap: 0.75rem;
}

.footer-social-block {
  margin-top: 0.25rem;
}

.site-footer--home .footer-social-block h3 {
  margin-bottom: 0.75rem;
  color: #1f6ba5;
  font-family: var(--font-utility);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.site-footer--home .footer-social a {
  width: 34px;
  height: 34px;
  border: 1px solid rgba(23, 56, 78, 0.16);
  background: transparent;
  color: #1f6ba5;
}

.site-footer--home .footer-social a:hover,
.site-footer--home .footer-social a:focus-visible {
  border-color: var(--cta);
  background: var(--cta);
  color: #17384e;
}

.site-footer--home .footer-col {
  padding: 0;
}

.site-footer--home .footer-col + .footer-col {
  padding-left: 0;
  border-left: 0;
}

.site-footer--home .footer-col h3 {
  margin-bottom: 0.85rem;
  color: #17384e;
  font-size: 0.66rem;
  letter-spacing: 0.12em;
}

.site-footer--home .footer-col ul {
  gap: 0.34rem;
}

.site-footer--home .footer-col a,
.site-footer--home .footer-contact {
  color: #4d5b65;
  font-size: 0.84rem;
  font-weight: 500;
  line-height: 1.5;
}

.site-footer--home .footer-col a:hover,
.site-footer--home .footer-col a:focus-visible,
.site-footer--home .footer-contact a:hover,
.site-footer--home .footer-contact a:focus-visible {
  color: #1f6ba5;
}

.site-footer--home .footer-legal {
  padding-block: 1.25rem 0.8rem;
  border-top: 1px solid rgba(23, 56, 78, 0.14);
}

.site-footer--home .footer-legal a {
  color: #586873;
}

.site-footer--home .footer-legal a:hover,
.site-footer--home .footer-legal a:focus-visible {
  color: #1f6ba5;
}

.site-footer--home .footer-bottom {
  padding-top: 1rem;
  border-top: 1px solid rgba(23, 56, 78, 0.1);
  color: #697781;
}

.site-footer--home .footer-bottom .needs-confirm {
  color: #83421f;
}

.home-page .acknowledgement {
  border-top-color: rgba(23, 56, 78, 0.12);
  background: #e5e8e9;
}

.home-page .ack-text {
  color: #59666e;
}

@media (max-width: 980px) {
  .site-footer--home .footer-top {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .site-footer--home .footer-brand {
    grid-column: 1 / -1;
    max-width: 38rem;
  }

  .site-footer--home .footer-col:last-child {
    grid-column: auto;
  }
}

@media (max-width: 620px) {
  .home-footer-proof__main {
    grid-template-columns: 1fr;
  }

  .site-footer--home .footer-top {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 2.25rem 1.25rem;
  }

  .site-footer--home .footer-brand,
  .site-footer--home .footer-col:last-child {
    grid-column: 1 / -1;
  }

  .site-footer--home .footer-col:last-child {
    padding-top: 1.5rem;
    border-top: 1px solid rgba(23, 56, 78, 0.12);
  }

  .site-footer--home .footer-bottom {
    display: grid;
  }
}

@media (forced-colors: active) {
  .site-footer--home,
  .home-footer-proof,
  .home-page .acknowledgement {
    border-color: CanvasText;
    background: Canvas;
    color: CanvasText;
  }
}

/* Homepage closing CTA: image-led, using the LCDS blue and orange palette. */

.home-cta--image {
  padding-block: clamp(2.5rem, 5vw, 5rem);
}

.home-cta--image .home-cta-panel {
  position: relative;
  isolation: isolate;
  display: flex;
  min-height: clamp(25rem, 36vw, 31rem);
  align-items: center;
  overflow: hidden;
  padding: clamp(2.5rem, 5vw, 4.75rem);
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: clamp(1.4rem, 3vw, 2.4rem);
  background: var(--lcds-balanced-blue-deep);
  box-shadow: 0 24px 64px rgba(20, 61, 91, 0.2);
  color: #fff;
  text-align: left;
}

.home-cta--image .home-cta-image,
.home-cta--image .home-cta-shade {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

.home-cta--image .home-cta-image {
  z-index: -2;
  object-fit: cover;
  object-position: 58% center;
}

.home-cta--image .home-cta-shade {
  z-index: -1;
  background:
    radial-gradient(circle at 4% 92%, rgba(242, 165, 26, 0.22), transparent 30%),
    linear-gradient(90deg, rgba(20, 79, 112, 0.99) 0%, rgba(26, 91, 132, 0.97) 34%, rgba(36, 79, 112, 0.76) 54%, rgba(36, 79, 112, 0.18) 74%, transparent 100%);
}

.home-cta--image .trust-band-inner {
  display: block;
  width: 100%;
}

.home-cta--image .trust-band-copy {
  max-width: min(35rem, 51%);
  margin-inline: 0;
  text-align: left;
}

.home-cta--image .glass-badge {
  padding: 0;
  border: 0;
  background: transparent;
  color: rgba(255, 255, 255, 0.82);
  box-shadow: none;
}

.home-cta--image .glass-badge svg {
  color: var(--cta);
}

.home-cta--image h2 {
  max-width: 12ch;
  margin-block: 1rem;
  color: #fff;
  font-size: clamp(2.5rem, 4.8vw, 4.7rem);
  line-height: 0.98;
  letter-spacing: -0.045em;
  text-wrap: balance;
}

.home-cta--image .grad-text {
  background: none;
  color: var(--cta);
  font-style: italic;
}

.home-cta--image p,
.home-cta--image.trust-band p {
  max-width: 46ch;
  margin: 0;
  color: rgba(255, 255, 255, 0.84);
}

.home-cta--image .trust-band-actions {
  justify-content: flex-start;
  margin-top: 1.8rem;
}

.home-cta--image .btn--glass {
  border-color: rgba(255, 255, 255, 0.5);
  background: rgba(255, 255, 255, 0.08);
  color: #fff;
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}

.home-cta--image .btn--glass:hover,
.home-cta--image .btn--glass:focus-visible {
  border-color: #fff;
  background: rgba(255, 255, 255, 0.18);
  color: #fff;
}

@media (max-width: 760px) {
  .home-cta--image {
    padding-block: 2.5rem;
  }

  .home-cta--image .home-cta-panel {
    display: grid;
    min-height: 0;
    padding: 0;
  }

  .home-cta--image .home-cta-image {
    position: relative;
    z-index: auto;
    height: clamp(15rem, 68vw, 19rem);
    object-position: 67% center;
  }

  .home-cta--image .home-cta-shade {
    display: none;
  }

  .home-cta--image .trust-band-inner {
    padding: 2rem 1.4rem 2.25rem;
    background:
      radial-gradient(circle at 0 100%, rgba(242, 165, 26, 0.18), transparent 38%),
      linear-gradient(145deg, var(--lcds-balanced-blue-dark), var(--lcds-balanced-blue-deep));
  }

  .home-cta--image .trust-band-copy {
    max-width: none;
    margin-inline: auto;
    text-align: center;
  }

  .home-cta--image h2 {
    max-width: 13ch;
    font-size: clamp(2.25rem, 12vw, 3.25rem);
  }

  .home-cta--image .trust-band-actions {
    display: grid;
    grid-template-columns: 1fr;
  }

  .home-cta--image .trust-band-actions .btn {
    width: 100%;
    justify-content: center;
  }
}

/* Balanced mid-blue: halfway between the pale-blue and logo-blue trials. */

.home-page {
  --lcds-balanced-blue: #83b7dd;
  --lcds-balanced-blue-dark: #2d668d;
  --lcds-balanced-blue-deep: #244f70;
}

.hero.hero--photo {
  background: var(--lcds-balanced-blue);
  color: #071a29;
}

.hero--photo::before {
  background:
    radial-gradient(circle at 44% 74%, rgba(245, 167, 77, 0.24), transparent 30%),
    linear-gradient(90deg, var(--lcds-balanced-blue) 0%, rgba(131, 183, 221, 0.97) 28%, rgba(131, 183, 221, 0.76) 49%, rgba(131, 183, 221, 0.2) 72%, transparent 100%);
}

.hero--photo .hero-copy h1 {
  color: #071a29;
  text-shadow: 0 2px 20px rgba(255, 255, 255, 0.18);
}

.hero--photo .hero-sub {
  color: #071a29;
  text-shadow: 0 1px 10px rgba(255, 255, 255, 0.16);
}

.hero--photo .hero-call {
  border-color: rgba(7, 26, 41, 0.32);
}

.hero--photo .hero-call:focus-visible {
  outline-color: #071a29;
}

.hero--photo .hero-proof p {
  color: rgba(7, 26, 41, 0.78);
}

.hero--photo .hero-proof strong {
  color: #071a29;
}

.home-footer-scene::before {
  background:
    linear-gradient(180deg, rgba(131, 183, 221, 0.08), transparent 45%),
    linear-gradient(0deg, rgba(231, 242, 248, 0.92) 0%, rgba(131, 183, 221, 0.4) 22%, rgba(45, 102, 141, 0.06) 60%);
}

.home-footer-scene::after,
.home-footer-proof {
  background: #e7f2f8;
}

.site-footer--home {
  background:
    radial-gradient(circle at 50% 0%, rgba(131, 183, 221, 0.46), transparent 38%),
    linear-gradient(155deg, var(--lcds-balanced-blue-dark) 0%, var(--lcds-balanced-blue-deep) 72%);
}

.home-page .acknowledgement {
  background: #1b4865;
}

@media (hover: hover) and (pointer: fine) {
  .hero--photo .hero-call:hover {
    border-color: rgba(7, 26, 41, 0.52);
  }
}

@media (max-width: 900px) {
  .hero--photo::before {
    background:
      radial-gradient(circle at 52% 82%, rgba(245, 167, 77, 0.2), transparent 34%),
      linear-gradient(180deg, rgba(131, 183, 221, 0.97) 0%, rgba(131, 183, 221, 0.9) 58%, rgba(131, 183, 221, 0.62) 100%),
      linear-gradient(90deg, rgba(131, 183, 221, 0.94), rgba(131, 183, 221, 0.28));
  }
}

/* Keep the footer neutral after the balanced-blue hero declarations above. */
.site-footer--home,
.home-footer-scene::after,
.home-footer-proof {
  background: var(--cream);
}

.home-page .acknowledgement {
  background: #e5e8e9;
}

/* --------------------------------------------------------------------------
   Internal-page palette alignment

   About, Services, Contact, Referral and the policy pages now share the same
   colour roles as Home: mist blue for welcoming fields, LCDS blue for type and
   icons, orange for action/accent, white for raised content and the neutral
   grey page ground. This layer is deliberately scoped away from .home-page so
   the established homepage composition remains untouched.
---------------------------------------------------------------------------- */

body:not(.home-page) {
  --lcds-balanced-blue: #83b7dd;
  --lcds-balanced-blue-dark: #2d668d;
  --lcds-balanced-blue-deep: #244f70;
  --accent-warm: #dae8f1;
  --ink: #17384e;
  --ink-soft: #405b6e;
  --line: #d5e0e7;
  --surface-alt: #f2f6f8;
  --sun: #f2a51a;
  --sun-dark: #995d12;
  --sky: #5fa3d9;
  --sky-deep: #244f70;
  --soft-pill-surface: #e7f2f8;
  --soft-pill-ink: #17384e;
  --soft-pill-accent: #1f6ba5;
  --soft-pill-shadow-dark: rgba(115, 146, 168, 0.36);
  --soft-pill-shadow-light: rgba(255, 255, 255, 0.82);
  --shadow-soft: 0 2px 4px -1px rgba(23, 56, 78, 0.05), 0 24px 48px -24px rgba(23, 56, 78, 0.18);
  --shadow-card: 0 1px 2px rgba(23, 56, 78, 0.05), 0 14px 32px -22px rgba(23, 56, 78, 0.22);
  --shadow-raised: 0 1px 2px rgba(23, 56, 78, 0.05), 0 8px 20px -14px rgba(23, 56, 78, 0.2);
}

body:not(.home-page) .site-header {
  border-bottom-color: rgba(23, 56, 78, 0.12);
  background: rgba(239, 240, 240, 0.94);
}

body:not(.home-page) .nav-item.is-active::after {
  background: var(--blue-ink);
}

body:not(.home-page) .nav-dropdown {
  border-color: rgba(23, 56, 78, 0.12);
  background: rgba(255, 255, 255, 0.97);
  box-shadow: 0 16px 35px -20px rgba(23, 56, 78, 0.32);
}

body:not(.home-page) .page-header .page-header-card,
.about-page .page-header .page-header-card {
  border-block-color: rgba(31, 107, 165, 0.14);
  background:
    radial-gradient(circle at 7% 12%, rgba(242, 165, 26, 0.16), transparent 34%),
    linear-gradient(135deg, #e7f2f8 0%, #dae8f1 100%);
  box-shadow: 0 16px 38px -30px rgba(23, 56, 78, 0.42);
}

body:not(.home-page) .page-header-copy::before {
  background: linear-gradient(90deg, var(--blue-ink), var(--cta));
}

body:not(.home-page) .page-header h1 {
  color: #17384e;
}

body:not(.home-page) .page-header p {
  color: #405b6e;
}

body:not(.home-page) .page-header-media {
  background: #cddfea;
}

body:not(.home-page) .page-header-media::after {
  background: linear-gradient(90deg, rgba(218, 232, 241, 0.94), rgba(218, 232, 241, 0));
}

.about-page .page-header-copy {
  background: linear-gradient(
    90deg,
    rgba(231, 242, 248, 0.99) 0%,
    rgba(218, 232, 241, 0.94) 72%,
    rgba(218, 232, 241, 0) 100%
  );
}

.about-page .page-header-media::after {
  background: linear-gradient(
    90deg,
    rgba(218, 232, 241, 0.98) 0%,
    rgba(218, 232, 241, 0.66) 34%,
    rgba(218, 232, 241, 0.14) 74%,
    transparent 100%
  );
}

body:not(.home-page) .page-header-media--logo {
  background:
    radial-gradient(circle at 68% 34%, rgba(242, 165, 26, 0.28), transparent 24%),
    radial-gradient(circle at 28% 68%, rgba(31, 107, 165, 0.28), transparent 28%),
    linear-gradient(135deg, #f7fbfd 0%, #dae8f1 52%, #e7f2f8 100%);
}

body:not(.home-page) .photo-banner,
body:not(.home-page) .enquiry-card,
body:not(.home-page) .policy-body,
body:not(.home-page) .faq-item,
body:not(.home-page) .arc-card,
.about-page #commitments > .wrap {
  border-color: rgba(23, 56, 78, 0.1);
  background-color: var(--paper);
  box-shadow: var(--shadow-card);
}

body:not(.home-page) .photo-banner-media,
body:not(.home-page) .feature-media {
  border-color: rgba(31, 107, 165, 0.14);
  box-shadow: 0 16px 35px -26px rgba(23, 56, 78, 0.42);
}

body:not(.home-page) .concept-media {
  background: #e7f2f8;
}

body:not(.home-page) .feature {
  border-top-color: rgba(23, 56, 78, 0.1);
}

body:not(.home-page) .feature:nth-of-type(even) {
  background: rgba(218, 232, 241, 0.23);
}

body:not(.home-page) .feature-copy h2,
body:not(.home-page) .page-header .eyebrow,
body:not(.home-page) .gradient-card-badge {
  color: #17384e;
}

body:not(.home-page) .services-page .eyebrow,
body:not(.home-page).services-page .eyebrow {
  background: #e7f2f8;
  box-shadow:
    5px 5px 10px rgba(115, 146, 168, 0.3),
    -5px -5px 10px rgba(255, 255, 255, 0.82);
}

body:not(.home-page) .feature-list svg,
body:not(.home-page) .values-compact-list svg {
  color: var(--cta-dark);
}

body:not(.home-page) .link-arrow {
  color: var(--blue-ink);
}

body:not(.home-page) .field input,
body:not(.home-page) .field select,
body:not(.home-page) .field textarea,
body:not(.home-page) .option {
  border-color: #cfdae1;
  background: #f4f8fa;
}

body:not(.home-page) .field input:focus,
body:not(.home-page) .field select:focus,
body:not(.home-page) .field textarea:focus {
  border-color: var(--blue-ink);
  outline-color: rgba(31, 107, 165, 0.18);
}

body:not(.home-page) .option input[type="radio"],
body:not(.home-page) .option input[type="checkbox"] {
  accent-color: var(--blue-ink);
}

body:not(.home-page) .option:has(input:checked) {
  border-color: rgba(31, 107, 165, 0.56);
  background: #e7f2f8;
}

body:not(.home-page) .faq-chevron,
body:not(.home-page) .contact-icon,
body:not(.home-page) .trust-icon {
  color: var(--blue-ink);
}

.about-page #commitments .trust-icon {
  background: #e7f2f8;
  color: var(--blue-ink);
}

@media (hover: hover) and (pointer: fine) {
  .about-page #commitments .trust-card:hover .trust-icon {
    background: #fff1dc;
    color: #a45f0d;
  }
}

body:not(.home-page) .cascade {
  background: #e7f2f8;
}

body:not(.home-page) .cascade-list,
body:not(.home-page) .cascade-panel {
  background: #e7f2f8;
}

body:not(.home-page) .cascade-num {
  color: var(--blue-ink);
}

body:not(.home-page) .cascade-copy,
body:not(.home-page) .cascade-copy span,
body:not(.home-page) .cascade-intro {
  color: #557084;
}

body:not(.home-page) .home-cta .wrap,
body:not(.home-page) .contact .wrap {
  border: 1px solid rgba(31, 107, 165, 0.12);
  background:
    radial-gradient(circle at 92% 12%, rgba(242, 165, 26, 0.14), transparent 24%),
    linear-gradient(135deg, #e7f2f8 0%, #dae8f1 100%);
  box-shadow: 0 18px 42px -30px rgba(23, 56, 78, 0.42);
  color: #17384e;
}

body:not(.home-page) .contact-copy p,
body:not(.home-page) .home-cta p {
  color: #405b6e;
}

body:not(.home-page) .contact-details a {
  color: #17384e;
}

body:not(.home-page) .contact-details .label {
  color: #557084;
}

body:not(.home-page) .contact-icon {
  background: rgba(255, 255, 255, 0.68);
  box-shadow: 0 8px 18px rgba(23, 56, 78, 0.1);
}

body:not(.home-page) .lit-card {
  box-shadow:
    inset 0 0 0 1px rgba(31, 107, 165, 0.13),
    0 18px 42px -30px rgba(23, 56, 78, 0.42);
}

body:not(.home-page) .site-footer {
  border-top: 1px solid rgba(23, 56, 78, 0.12);
  background: var(--cream);
  color: #17384e;
}

body:not(.home-page) .site-footer .footer-glow {
  display: none;
}

body:not(.home-page) .footer-brand p,
body:not(.home-page) .footer-col a,
body:not(.home-page) .footer-contact,
body:not(.home-page) .footer-contact a {
  color: #4d5b65;
}

body:not(.home-page) .footer-col h3 {
  color: #17384e;
}

body:not(.home-page) .footer-social a {
  border: 1px solid rgba(23, 56, 78, 0.16);
  background: transparent;
  color: var(--blue-ink);
}

body:not(.home-page) .footer-social a:hover,
body:not(.home-page) .footer-social a:focus-visible {
  border-color: var(--cta);
  background: var(--cta);
  color: #17384e;
}

body:not(.home-page) .footer-col a:hover,
body:not(.home-page) .footer-col a:focus-visible,
body:not(.home-page) .footer-contact a:hover,
body:not(.home-page) .footer-contact a:focus-visible {
  color: var(--blue-ink);
}

body:not(.home-page) .footer-bottom,
body:not(.home-page) .footer-legal {
  border-color: rgba(23, 56, 78, 0.12);
  color: #697781;
}

body:not(.home-page) .footer-legal a {
  color: #586873;
}

body:not(.home-page) .acknowledgement {
  border-top-color: rgba(23, 56, 78, 0.12);
  background: #e5e8e9;
}

body:not(.home-page) .ack-text {
  color: #59666e;
}

/* Shared footer details use the exact homepage hierarchy on every page. */
.site-footer--home .footer-follow-heading {
  margin: 1rem 0 0.75rem;
  color: var(--blue-ink);
  font-family: var(--font-utility);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

/* Contact's referral card keeps its white reading field, but its corner wash
   now belongs to the same blue family used by the page header and form fields. */
body:not(.home-page) .referral .arc-card {
  background: linear-gradient(180deg, var(--paper) 55%, var(--lcds-balanced-blue) 95%);
}

/* About reuses the homepage statistics component verbatim; keep its dark-blue
   strip from being softened by the general internal-page card rules above. */
body:not(.home-page) .home-scheme-stats {
  color: #fffaf3;
  background:
    radial-gradient(circle at 13% 20%, rgba(240, 166, 105, 0.16), transparent 28%),
    radial-gradient(circle at 88% 85%, rgba(132, 196, 235, 0.2), transparent 34%),
    linear-gradient(118deg, #174f78 0%, #1f628f 52%, #2b6f9e 100%);
}

body:not(.home-page) .home-scheme-stats .cascade-list,
body:not(.home-page) .home-scheme-stats .cascade-panel {
  background: transparent;
  box-shadow: none;
}

body:not(.home-page) .home-scheme-stats .cascade-panel,
body:not(.home-page) .home-scheme-stats .cascade-num,
body:not(.home-page) .home-scheme-stats .cascade-copy strong {
  color: #fffaf3;
}

body:not(.home-page) .home-scheme-stats .cascade-copy,
body:not(.home-page) .home-scheme-stats .cascade-copy span {
  color: rgba(255, 250, 243, 0.68);
}

@media (max-width: 820px) {
  body:not(.home-page) .page-header-media::after,
  .about-page .page-header-media::after {
    background: linear-gradient(180deg, rgba(218, 232, 241, 0.88), transparent);
  }
}

@media (forced-colors: active) {
  body:not(.home-page) .page-header .page-header-card,
  body:not(.home-page) .home-cta .wrap,
  body:not(.home-page) .contact .wrap,
  body:not(.home-page) .site-footer {
    border-color: CanvasText;
    background: Canvas;
    color: CanvasText;
  }
}

/* Services use the same warm outlined label as the Referrals page. */
.services-page .eyebrow,
body:not(.home-page).services-page .eyebrow {
  min-height: 0;
  padding: 0.55rem 1.05rem;
  border: 1px solid color-mix(in srgb, var(--sun) 38%, transparent);
  border-radius: var(--radius-pill);
  background: color-mix(in srgb, var(--sun) 20%, white);
  box-shadow: none;
  color: #17384e;
  font-family: var(--font-utility);
  font-size: 0.875rem;
  font-weight: 600;
  letter-spacing: 0.14em;
}

.services-page .eyebrow::before {
  display: none;
}

@media (hover: hover) and (pointer: fine) {
  .services-page .feature:hover .eyebrow,
  .services-page .home-cta:hover .eyebrow {
    box-shadow: none;
  }
}

@media (max-width: 620px) {
  /* Let the homepage photograph lead the mobile hero, then place the copy in
     its own calm blue reading field below it. */
  .home-page .hero.hero--photo,
  .home-page .hero--photo .hero-grid {
    min-height: 0;
  }

  .home-page .hero.hero--photo {
    background: var(--lcds-balanced-blue);
  }

  .home-page .hero--photo .hero-visual {
    position: relative;
    inset: auto;
    height: clamp(15.5rem, 68vw, 17.5rem);
  }

  .home-page .hero--photo .hero-photo-card,
  .home-page .hero--photo .hero-photo-card img {
    width: 100%;
    height: 100%;
  }

  .home-page .hero--photo .hero-photo-card img {
    object-fit: cover;
    object-position: center 44%;
  }

  .home-page .hero--photo::before {
    top: 0;
    right: 0;
    bottom: auto;
    left: 0;
    height: clamp(15.5rem, 68vw, 17.5rem);
    background: linear-gradient(
      180deg,
      rgba(23, 56, 78, 0.04) 0%,
      rgba(131, 183, 221, 0.08) 70%,
      var(--lcds-balanced-blue) 100%
    );
  }

  .home-page .hero--photo .hero-grid {
    padding-block: 2rem 6.5rem;
  }

  .home-page .hero--photo .hero-copy h1 {
    font-size: clamp(3.05rem, 13.5vw, 3.75rem);
  }

  /* Give the longer Services labels more room and keep corresponding rows in
     a balanced mobile grid without leaving an empty half-column. */
  .site-footer--home .footer-top {
    grid-template-columns: minmax(0, 1fr);
    row-gap: 2rem;
  }

  .site-footer--home .footer-brand,
  .site-footer--home .footer-col:nth-child(2),
  .site-footer--home .footer-col:nth-child(3),
  .site-footer--home .footer-col:last-child {
    grid-column: 1 / -1;
  }

  .site-footer--home .footer-col:nth-child(2) ul,
  .site-footer--home .footer-col:nth-child(3) ul {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.35rem 1.4rem;
  }

  .site-footer--home .footer-col:nth-child(2) li,
  .site-footer--home .footer-col:nth-child(3) li {
    display: flex;
    min-height: 2.5rem;
    align-items: flex-start;
  }

  .site-footer--home .footer-col:nth-child(2) a,
  .site-footer--home .footer-col:nth-child(3) a {
    line-height: 1.35;
  }
}

@media (forced-colors: active) {
  .services-page .eyebrow,
  body:not(.home-page).services-page .eyebrow {
    border-color: CanvasText;
    background: Canvas;
    color: CanvasText;
  }
}

/* =========================================================
   Site-wide accessibility preferences
   The control is injected by script.js so every page receives the same
   keyboard-friendly panel without duplicating page content.
========================================================= */
html.a11y-text-1 {
  font-size: 112.5%;
}

html.a11y-text-2 {
  font-size: 125%;
}

.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

.a11y-tools {
  position: fixed;
  left: max(1rem, env(safe-area-inset-left));
  bottom: max(1rem, env(safe-area-inset-bottom));
  z-index: 120;
  color: #17384e;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.4;
}

.a11y-launcher,
.a11y-close,
.a11y-text-buttons button,
.a11y-option,
.a11y-reset {
  font: inherit;
}

.a11y-launcher {
  min-height: 3rem;
  display: inline-flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.7rem 1rem;
  border: 2px solid rgba(255, 255, 255, 0.86);
  border-radius: var(--radius-pill);
  background: #276f9f;
  box-shadow: 0 0.65rem 1.6rem rgba(23, 56, 78, 0.24);
  color: #fff;
  cursor: pointer;
  font-weight: 700;
}

.a11y-launcher:hover {
  background: #1f5f8a;
}

.a11y-launcher:focus-visible,
.a11y-close:focus-visible,
.a11y-text-buttons button:focus-visible,
.a11y-option:focus-visible,
.a11y-reset:focus-visible,
.a11y-panel__footer a:focus-visible {
  outline: 3px solid #f2a51a;
  outline-offset: 3px;
}

.a11y-launcher svg {
  width: 1.4rem;
  height: 1.4rem;
  flex: 0 0 auto;
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 1.8;
}

.a11y-panel {
  position: absolute;
  left: 0;
  bottom: calc(100% + 0.75rem);
  width: min(22rem, calc(100vw - 2rem));
  max-height: min(38rem, calc(100vh - 6rem));
  overflow-y: auto;
  padding: 1rem;
  border: 1px solid rgba(23, 56, 78, 0.2);
  border-radius: 1.25rem;
  background: #fff;
  box-shadow: 0 1.15rem 3rem rgba(23, 56, 78, 0.26);
  color: #17384e;
}

.a11y-panel[hidden] {
  display: none !important;
}

.a11y-panel__header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
}

.a11y-panel__eyebrow {
  margin: 0 0 0.2rem;
  color: #1f6ba5;
  font-family: var(--font-utility);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.a11y-panel h2 {
  margin: 0;
  color: #17384e;
  font-family: var(--font-body);
  font-size: 1.4rem;
  line-height: 1.15;
}

.a11y-close {
  width: 2.75rem;
  height: 2.75rem;
  display: grid;
  flex: 0 0 auto;
  place-items: center;
  border: 1px solid rgba(23, 56, 78, 0.18);
  border-radius: 50%;
  background: #eff5f8;
  color: #17384e;
  cursor: pointer;
}

.a11y-close svg {
  width: 1.2rem;
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-width: 2;
}

.a11y-text-control {
  margin-top: 1rem;
  padding: 0.85rem;
  border-radius: 0.9rem;
  background: #eaf3f8;
  font-weight: 700;
}

.a11y-text-buttons {
  display: grid;
  grid-template-columns: 2.75rem 1fr 2.75rem;
  align-items: center;
  gap: 0.55rem;
  margin-top: 0.65rem;
}

.a11y-text-buttons button {
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid rgba(23, 56, 78, 0.24);
  border-radius: 0.65rem;
  background: #fff;
  color: #17384e;
  cursor: pointer;
  font-weight: 800;
}

.a11y-text-value {
  text-align: center;
  font-family: var(--font-utility);
  font-size: 0.85rem;
}

.a11y-toggle-list {
  display: grid;
  gap: 0.55rem;
  margin-top: 0.8rem;
}

.a11y-option {
  width: 100%;
  min-height: 3rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.65rem 0.75rem;
  border: 1px solid rgba(23, 56, 78, 0.18);
  border-radius: 0.8rem;
  background: #fff;
  color: #17384e;
  cursor: pointer;
  font-weight: 700;
  text-align: left;
}

.a11y-option:hover,
.a11y-option[aria-pressed="true"] {
  border-color: #1f6ba5;
  background: #eaf3f8;
}

.a11y-option__state {
  min-width: 2.85rem;
  padding: 0.28rem 0.5rem;
  border-radius: var(--radius-pill);
  background: #e2e8ec;
  color: #425a6b;
  font-family: var(--font-utility);
  font-size: 0.7rem;
  text-align: center;
  text-transform: uppercase;
}

.a11y-option[aria-pressed="true"] .a11y-option__state {
  background: #1f6ba5;
  color: #fff;
}

.a11y-panel__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.8rem;
  margin-top: 1rem;
  padding-top: 0.9rem;
  border-top: 1px solid rgba(23, 56, 78, 0.16);
}

.a11y-reset {
  min-height: 2.75rem;
  padding: 0.55rem 0.75rem;
  border: 1px solid rgba(23, 56, 78, 0.2);
  border-radius: 0.7rem;
  background: #fff;
  color: #17384e;
  cursor: pointer;
  font-weight: 700;
}

.a11y-panel__footer a {
  color: #1f6ba5;
  font-size: 0.82rem;
  font-weight: 700;
  text-align: right;
  text-underline-offset: 0.18em;
}

html.a11y-highlight-links a:not(.btn):not(.brand):not(.a11y-launcher) {
  text-decoration: underline !important;
  text-decoration-thickness: 0.12em !important;
  text-underline-offset: 0.2em !important;
}

html.a11y-contrast {
  --cream: #fff;
  --paper: #fff;
  --surface-alt: #fff;
  --accent-warm: #fff;
  --ink: #000;
  --ink-soft: #111;
  --line: #000;
  --blue-ink: #004f87;
  --cta: #ffb000;
  --cta-dark: #d99100;
}

html.a11y-contrast body {
  background: #fff;
  color: #000;
}

html.a11y-contrast :where(
  .site-header,
  .feature,
  .trust-card,
  .gradient-card,
  .page-header-card,
  .enquiry-card,
  .policy-body,
  .faq-item,
  .arc-card,
  .a11y-panel
) {
  border-color: #000 !important;
  box-shadow: none !important;
}

html.a11y-contrast :where(.btn, button, input, select, textarea):focus-visible {
  outline: 3px solid #000 !important;
  outline-offset: 3px !important;
}

html.a11y-contrast a:not(.btn) {
  color: #004f87;
}

html.a11y-contrast .btn {
  border: 2px solid #000 !important;
}

html.a11y-reduce-motion {
  scroll-behavior: auto !important;
}

html.a11y-reduce-motion *,
html.a11y-reduce-motion *::before,
html.a11y-reduce-motion *::after {
  animation-duration: 0.001ms !important;
  animation-iteration-count: 1 !important;
  scroll-behavior: auto !important;
  transition-delay: 0s !important;
  transition-duration: 0.001ms !important;
}

html.a11y-reduce-motion .reveal {
  opacity: 1 !important;
  transform: none !important;
}

@media (max-width: 480px) {
  .a11y-tools {
    right: max(0.75rem, env(safe-area-inset-right));
    left: auto;
    bottom: max(0.75rem, env(safe-area-inset-bottom));
  }

  .a11y-panel {
    width: calc(100vw - 1.5rem);
    max-height: calc(100vh - 5.5rem);
  }

  .a11y-panel__footer {
    align-items: flex-start;
    flex-direction: column;
  }

  .a11y-panel__footer a {
    text-align: left;
  }
}

@media (forced-colors: active) {
  .a11y-launcher,
  .a11y-panel,
  .a11y-close,
  .a11y-text-buttons button,
  .a11y-option,
  .a11y-reset {
    border: 1px solid ButtonText;
    background: Canvas;
    color: CanvasText;
  }
}

@media print {
  .a11y-tools {
    display: none !important;
  }
}

/* Keyboard-safe mobile navigation: invisible menu links must not become part
   of the tab sequence while the menu is closed. JavaScript also applies inert;
   visibility is the CSS fallback. */
@media (max-width: 720px) {
  .nav-links[aria-hidden="true"] {
    visibility: hidden;
  }

  .nav-links.is-open {
    visibility: visible;
  }

  body.nav-menu-open {
    overflow: hidden;
  }

  body.nav-menu-open .a11y-tools {
    visibility: hidden;
    pointer-events: none;
  }
}

/* Leave room for the fixed accessibility control when browsers scroll a
   keyboard-focused item into view. */
html {
  scroll-padding-bottom: 5.5rem;
}

@media (max-width: 480px) {
  .a11y-launcher {
    width: 3.25rem;
    min-width: 3.25rem;
    height: 3.25rem;
    justify-content: center;
    padding: 0;
  }

  .a11y-launcher > span {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
  }
}
/* Site-wide, local FAQ assistant. It shares no messages with a third party. */
.ask-us-widget {
  position: fixed;
  right: max(1rem, env(safe-area-inset-right));
  bottom: max(1rem, env(safe-area-inset-bottom));
  z-index: 121;
  color: #17384e;
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.4;
}

.ask-us-widget button,
.ask-us-widget input {
  font: inherit;
}

.ask-us-launcher {
  min-height: 3rem;
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.7rem 1rem;
  border: 2px solid rgba(255, 255, 255, 0.86);
  border-radius: var(--radius-pill);
  background: #17384e;
  box-shadow: 0 0.65rem 1.6rem rgba(23, 56, 78, 0.24);
  color: #fff;
  cursor: pointer;
  font-weight: 700;
}

.ask-us-launcher:hover {
  background: #24516c;
}

.ask-us-launcher svg {
  width: 1.35rem;
  height: 1.35rem;
  fill: none;
  stroke: currentColor;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 1.8;
}

.ask-us-panel {
  position: absolute;
  right: 0;
  bottom: calc(100% + 0.75rem);
  width: min(25rem, calc(100vw - 2rem));
  max-height: min(40rem, calc(100vh - 6rem));
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 1rem;
  border: 1px solid rgba(23, 56, 78, 0.2);
  border-radius: 1.25rem;
  background: #fff;
  box-shadow: 0 1.15rem 3rem rgba(23, 56, 78, 0.26);
  color: #17384e;
}

.ask-us-panel[hidden] {
  display: none !important;
}

.ask-us-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.75rem;
}

.ask-us-eyebrow {
  margin: 0 0 0.2rem;
  color: #1f6ba5;
  font-family: var(--font-utility);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.ask-us-header h2 {
  margin: 0;
  color: #17384e;
  font-family: var(--font-body);
  font-size: 1.4rem;
  line-height: 1.15;
}

.ask-us-close {
  width: 2.75rem;
  height: 2.75rem;
  display: grid;
  flex: 0 0 auto;
  place-items: center;
  border: 1px solid rgba(23, 56, 78, 0.18);
  border-radius: 50%;
  background: #eff5f8;
  color: #17384e;
  cursor: pointer;
  font-size: 1.8rem !important;
  line-height: 1;
}

.ask-us-intro,
.ask-us-privacy {
  margin: 0;
  color: #425a6b;
  font-size: 0.88rem;
}

.ask-us-messages {
  min-height: 7rem;
  max-height: 14rem;
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
  overflow-y: auto;
  padding: 0.75rem;
  border-radius: 0.85rem;
  background: #f1f5f7;
}

.ask-us-message {
  width: fit-content;
  max-width: 95%;
  margin: 0;
  padding: 0.65rem 0.75rem;
  border-radius: 0.8rem;
  background: #fff;
  color: #17384e;
  font-size: 0.88rem;
  overflow-wrap: anywhere;
}

.ask-us-message--question {
  align-self: flex-end;
  background: #1f6ba5;
  color: #fff;
}

.ask-us-message a,
.ask-us-contact a {
  color: #105989;
  font-weight: 700;
  text-decoration: underline;
  text-underline-offset: 0.15em;
}

.ask-us-message a {
  display: inline-block;
  margin-top: 0.35rem;
}

.ask-us-topics {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.ask-us-topics button {
  min-height: 2.5rem;
  padding: 0.45rem 0.7rem;
  border: 1px solid #a9c1d0;
  border-radius: var(--radius-pill);
  background: #fff;
  color: #17384e;
  cursor: pointer;
  font-size: 0.82rem;
  font-weight: 700;
}

.ask-us-topics button:hover {
  background: #eaf3f8;
}

.ask-us-form label {
  display: block;
  margin-bottom: 0.4rem;
  color: #17384e;
  font-size: 0.86rem;
  font-weight: 700;
}

.ask-us-input-row {
  display: flex;
  gap: 0.4rem;
}

.ask-us-input-row input {
  width: 100%;
  min-width: 0;
  min-height: 2.75rem;
  padding: 0.55rem 0.7rem;
  border: 1px solid #879fac;
  border-radius: 0.65rem;
  background: #fff;
  color: #17384e;
  font-size: 0.9rem;
}

.ask-us-input-row button {
  min-width: 3.5rem;
  min-height: 2.75rem;
  padding: 0.55rem 0.7rem;
  border: 0;
  border-radius: 0.65rem;
  background: #1f6ba5;
  color: #fff;
  cursor: pointer;
  font-size: 0.9rem;
  font-weight: 700;
}

.ask-us-input-row button:hover {
  background: #155881;
}

.ask-us-privacy {
  font-size: 0.78rem;
}

.ask-us-contact {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1rem;
  padding-top: 0.7rem;
  border-top: 1px solid #d8e3e9;
  font-size: 0.8rem;
}

.ask-us-widget :is(button, input, a):focus-visible {
  outline: 3px solid #f2a51a;
  outline-offset: 3px;
}

html.a11y-contrast .ask-us-panel,
html.a11y-contrast .ask-us-message,
html.a11y-contrast .ask-us-topics button,
html.a11y-contrast .ask-us-input-row input {
  border: 1px solid #000;
  box-shadow: none;
}

@media (max-width: 480px) {
  .ask-us-widget {
    right: max(0.75rem, env(safe-area-inset-right));
    bottom: max(0.75rem, env(safe-area-inset-bottom));
  }

  .ask-us-panel {
    width: calc(100vw - 1.5rem);
    max-height: calc(100vh - 5.5rem);
  }
}

@media (max-width: 720px) {
  body.nav-menu-open .ask-us-widget {
    visibility: hidden;
    pointer-events: none;
  }
}

@media (forced-colors: active) {
  .ask-us-launcher,
  .ask-us-panel,
  .ask-us-message,
  .ask-us-close,
  .ask-us-topics button,
  .ask-us-input-row input,
  .ask-us-input-row button {
    border: 1px solid ButtonText;
    background: Canvas;
    color: CanvasText;
  }
}

@media print {
  .ask-us-widget { display: none !important; }
}
