:root {
  /* Carbon palette */
  --blue-60: #0f62fe;
  --blue-60-hover: #0353e9;
  --blue-80: #002d9c;
  --blue-10: #edf5ff;
  --white: #ffffff;
  --gray-10: #f4f4f4;
  --gray-10-hover: #f0f0f0;
  --gray-20: #e0e0e0;
  --gray-30: #c6c6c6;
  --gray-50: #8d8d8d;
  --gray-60: #6f6f6f;
  --gray-70: #525252;
  --gray-80: #393939;
  --gray-90: #262626;
  --gray-100: #161616;
  --red-60: #da1e28;

  /* Editorial-card exception only (see DESIGN.md). Never used outside
     .resource-art surfaces. */
  --copper-60: #c66a3a;
  --copper-30: #e5a274;
  --copper-tint: #f4ead6;

  --font: 'IBM Plex Sans', 'Helvetica Neue', Arial, sans-serif;
  --font-mono: 'IBM Plex Mono', 'SFMono-Regular', Menlo, monospace;
  --font-serif: 'IBM Plex Serif', Georgia, serif;
}

* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }

body {
  font-family: var(--font);
  font-weight: 400;
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-100);
  background: var(--white);
  -webkit-font-smoothing: antialiased;
}

a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }

/* Focus ring — Carbon style */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
  outline: 2px solid var(--blue-60);
  outline-offset: -2px;
}

/* ---------- NAV ---------- */
nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
  height: 48px;
  background: var(--gray-100);
  display: flex;
  align-items: center;
  padding: 0 16px;
}

.logo {
  color: var(--white);
  /* font-size sized so cap-height (~0.71x) matches the visible mark in mark.svg
     (mark fills ~61% of its 100-unit viewBox; at img 28px that's ~17px visible). */
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: 0.16px;
  line-height: 1;
  padding: 0 16px;
  height: 48px;
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.logo img {
  height: 28px;
  width: 28px;
  display: block;
}

.logo .accent { color: var(--blue-60); }

/* IBM Plex Sans with line-height:1 places the baseline near the bottom of
   the line box, so the cap-height visual center sits ~1.6px below the box
   center (verified via Canvas TextMetrics, not the font's typo metrics).
   Nudge up 1px so the wordmark caps align with the icon glyph center. */
.logo .wordmark { transform: translateY(-1px); }

.nav-links {
  list-style: none;
  display: flex;
  align-items: center;
  margin-left: 16px;
  height: 48px;
}

.nav-links a {
  color: var(--gray-30);
  font-size: 0.875rem;
  font-weight: 400;
  letter-spacing: 0.16px;
  padding: 0 16px;
  height: 48px;
  display: inline-flex;
  align-items: center;
  transition: color 0.1s, background-color 0.1s;
}

.nav-links a:hover {
  color: var(--white);
  background: var(--gray-80);
}

/* Active nav indicator — DESIGN.md says active items use weight 600 white.
   Each page sets data-active-nav="<key>" on <body>; we match on the link's
   href to highlight the right item. body-short-02 register from the spec. */
body[data-active-nav="home"]      .nav-links a[href="/"],
body[data-active-nav="about-3cx"] .nav-links a[href="/3cx-explained.html"],
body[data-active-nav="pricing"]   .nav-links a[href="/honest-pricing.html"],
body[data-active-nav="switch"]    .nav-links a[href="/pstn-switch-off.html"],
body[data-active-nav="about-us"]  .nav-links a[href="/about.html"],
body[data-active-nav="support"]   .nav-support {
  color: var(--white);
  font-weight: 600;
}

body[data-active-nav="support"] .nav-support-icon { opacity: 1; }

.nav-cta {
  background: var(--blue-60);
  color: var(--white) !important;
  padding: 0 64px 0 16px !important;
  height: 48px;
  display: inline-flex;
  align-items: center;
  position: relative;
  font-weight: 400;
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  transition: background-color 0.1s;
}

/* Customer-support link in the nav. Sits to the left of the Free-audit CTA
   on desktop; both cluster on the right (margin-left:auto on .nav-support
   pushes the pair). Hidden on mobile — the hamburger keeps the bar tight,
   and the support page is still reachable from the footer + the menu. */
.nav-support {
  margin-left: auto;
  color: var(--gray-30);
  font-size: 0.8125rem;
  font-weight: 400;
  letter-spacing: 0.16px;
  padding: 0 16px;
  height: 48px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: color 0.1s, background-color 0.1s;
  white-space: nowrap;
}
.nav-support:hover {
  color: var(--white);
  background: var(--gray-80);
}
.nav-support-icon {
  flex-shrink: 0;
  opacity: 0.7;
}
.nav-support:hover .nav-support-icon { opacity: 1; }

.nav-toggle {
  display: none;
  margin-left: auto;
  width: 48px;
  height: 48px;
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: var(--white);
  align-items: center;
  justify-content: center;
}

.nav-toggle:hover { background: var(--gray-80); }
.nav-toggle svg { display: block; }
.nav-toggle .icon-close { display: none; }
.nav-toggle[aria-expanded="true"] .icon-open { display: none; }
.nav-toggle[aria-expanded="true"] .icon-close { display: block; }

.nav-cta::after {
  content: '';
  position: absolute;
  right: 16px;
  top: 50%;
  transform: translateY(-50%);
  width: 16px;
  height: 16px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'><path d='M11.59 7.293L6.293 2 5 3.293 9.586 8 5 12.707 6.293 14l5.297-5.293a1 1 0 0 0 0-1.414z'/></svg>");
  background-repeat: no-repeat;
  background-position: center;
}

.nav-cta:hover { background: var(--blue-60-hover); }

/* ---------- HERO (legacy: text-on-white for un-migrated pages) ---------- */
.hero {
  background: var(--white);
  padding: 144px 32px 96px;
  border-bottom: 1px solid var(--gray-20);
}

.hero-inner {
  max-width: 1056px;
  margin: 0 auto;
}

.hero-eyebrow {
  display: inline-block;
  background: var(--blue-10);
  color: var(--blue-60);
  padding: 4px 8px;
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  border-radius: 24px;
  margin-bottom: 32px;
}

.hero h1 {
  font-size: clamp(2.5rem, 5vw, 3.75rem);
  font-weight: 300;
  line-height: 1.17;
  color: var(--gray-100);
  text-wrap: balance;
  margin-bottom: 24px;
}

.hero h1 em {
  color: var(--blue-60);
  font-style: normal;
  font-weight: 300;
}

.hero p {
  font-size: 1.125rem;
  line-height: 1.5;
  color: var(--gray-70);
  max-width: 60ch;
  margin-bottom: 48px;
}

.hero-cta {
  display: flex;
  gap: 1px;
  flex-wrap: wrap;
}

/* ---------- HERO (full-bleed cinema-poster: only on migrated pages with data-hero) ---------- */
.hero[data-hero] {
  position: relative;
  min-height: 640px;
  display: flex;
  align-items: center;
  background: var(--gray-100);
  overflow: hidden;
  padding: 96px 0 0;            /* clear the 48px fixed nav + breathing room */
  /* override legacy white background + border */
  border-bottom: none;
}

/* Picture wraps the image and starts below the 48px fixed nav so what
   gets rendered is what's visible — no wasted top 48px hidden behind the
   nav. Both nav and hero bg are Gray 100 so there's no visible seam. */
.hero[data-hero] picture {
  position: absolute;
  inset: 48px 0 0 0;
  z-index: 0;
}
.hero[data-hero] picture img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.hero[data-hero]::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    105deg,
    rgba(22, 22, 22, 0.85) 0%,
    rgba(22, 22, 22, 0.55) 35%,
    rgba(22, 22, 22, 0)    55%
  );
  z-index: 1;
  pointer-events: none;
}

.hero[data-hero] .hero-inner {
  position: relative;
  z-index: 2;
  max-width: 1056px;
  margin: 0 auto;
  width: 100%;
  padding: 0 32px;
}

/* Phone is composited in the upper-right of every dark hero image. On
   tablet+ viewports the headline can run wide enough to crash into the
   phone, losing contrast where text crosses phone chrome. Reserve a
   right-side clearance zone scaled to viewport width.
   Mobile is unaffected — the phone is more cropped and the scrim is
   stronger top-to-bottom so overlap there isn't a problem. */
@media (min-width: 769px) {
  .hero[data-hero] .hero-inner {
    padding-right: clamp(160px, 28vw, 480px);
  }
}

.hero[data-hero] .hero-eyebrow {
  display: inline-block;
  background: rgba(15, 98, 254, 0.15);
  color: var(--white);
  padding: 4px 8px;
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  border-radius: 24px;
  margin-bottom: 32px;
  border: 1px solid rgba(255, 255, 255, 0.2);
}

.hero[data-hero] h1 {
  font-size: clamp(2.5rem, 5vw, 3.75rem);
  font-weight: 300;
  line-height: 1.17;
  color: var(--white);
  text-wrap: balance;
  margin-bottom: 24px;
  max-width: 60ch;
}

.hero[data-hero] h1 em {
  color: var(--white);
  font-style: normal;
  font-weight: 600;             /* on dark we use weight, not blue, for emphasis */
}

.hero[data-hero] .hero-sub {
  font-size: clamp(1.125rem, 1.6vw, 1.375rem);
  font-weight: 300;
  line-height: 1.4;
  color: rgba(255, 255, 255, 0.85);
  max-width: 56ch;
  margin: 0 0 40px;
}

/* Secondary CTA on dark heroes: keep the Gray 80 (#393939) fill but add
   a translucent white outline so the button silhouette doesn't melt
   into the Gray 100 hero background. */
.hero[data-hero] .btn-secondary {
  border: 1px solid rgba(255, 255, 255, 0.4);
}
.hero[data-hero] .btn-secondary:hover {
  border-color: rgba(255, 255, 255, 0.6);
}

.hero[data-hero] .hero-cta {
  display: flex;
  gap: 1px;
  flex-wrap: wrap;
  margin-top: 8px;
}

@media (max-width: 768px) {
  .hero[data-hero] { min-height: 520px; padding-top: 80px; }
  .hero[data-hero]::after {
    background: linear-gradient(
      180deg,
      rgba(22, 22, 22, 0.75) 0%,
      rgba(22, 22, 22, 0.45) 100%
    );
  }
  .hero[data-hero] .hero-inner { padding: 0 16px; }
}


/* ---------- BUTTONS ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  height: 48px;
  padding: 0 64px 0 16px;
  font-family: var(--font);
  font-size: 0.875rem;
  font-weight: 400;
  letter-spacing: 0.16px;
  border: 1px solid transparent;
  border-radius: 0;
  position: relative;
  transition: background-color 0.1s, border-color 0.1s, color 0.1s;
  min-width: 200px;
}

.btn::after {
  content: '';
  position: absolute;
  right: 16px;
  top: 50%;
  transform: translateY(-50%);
  width: 16px;
  height: 16px;
  background-repeat: no-repeat;
  background-position: center;
}

.btn-primary {
  background: var(--blue-60);
  color: var(--white);
}
.btn-primary::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'><path d='M11.59 7.293L6.293 2 5 3.293 9.586 8 5 12.707 6.293 14l5.297-5.293a1 1 0 0 0 0-1.414z'/></svg>");
}
.btn-primary:hover { background: var(--blue-60-hover); }
.btn-primary:active { background: var(--blue-80); }

.btn-secondary {
  background: var(--gray-80);
  color: var(--white);
}
.btn-secondary::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'><path d='M11.59 7.293L6.293 2 5 3.293 9.586 8 5 12.707 6.293 14l5.297-5.293a1 1 0 0 0 0-1.414z'/></svg>");
}
.btn-secondary:hover { background: var(--gray-70); }

.btn-tertiary {
  background: transparent;
  color: var(--blue-60);
  border-color: var(--blue-60);
}
.btn-tertiary::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230f62fe'><path d='M11.59 7.293L6.293 2 5 3.293 9.586 8 5 12.707 6.293 14l5.297-5.293a1 1 0 0 0 0-1.414z'/></svg>");
}
.btn-tertiary:hover {
  background: var(--blue-60);
  color: var(--white);
}
.btn-tertiary:hover::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'><path d='M11.59 7.293L6.293 2 5 3.293 9.586 8 5 12.707 6.293 14l5.297-5.293a1 1 0 0 0 0-1.414z'/></svg>");
}

.btn-no-chevron {
  padding: 0 16px;
  justify-content: flex-start;
}
.btn-no-chevron::after { content: none; }

/* ---------- SECTIONS ---------- */
section {
  padding: 96px 32px;
}

.container {
  max-width: 1056px;
  margin: 0 auto;
}

.layer-01 { background: var(--gray-10); }

/* Universal hairline divider between sections. See DESIGN.md → Section
   Rules. Adjacent same-colour sections rely on this for separation. */
section + section { border-top: 1px solid var(--gray-20); }

/* Section header — h2 + optional lead paragraph + a 1px Gray 20
   underline that extends only as wide as the longest text line in
   the block (h2 or subtitle, whichever is wider). The underline is
   the structural transition between "what this section is" and "the
   content"; tying it to the text rather than the container makes it
   feel typographic rather than arbitrary. Universal across every
   section on the site. */
.section-header {
  width: fit-content;
  max-width: 100%;
  margin-bottom: 56px;
  padding-bottom: 24px;
  border-bottom: 1px solid var(--gray-20);
}

.section-header h2 {
  font-size: 2rem;
  font-weight: 400;
  line-height: 1.25;
  color: var(--gray-100);
  margin-bottom: 16px;
  max-width: 720px;
}

.section-header p {
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-70);
  max-width: 720px;
}

/* ---------- URGENCY ---------- */
.urgency-grid {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  gap: 64px;
  align-items: start;
}

.urgency-grid h2 {
  font-size: 2.625rem;
  font-weight: 300;
  line-height: 1.19;
  color: var(--gray-100);
  margin-bottom: 24px;
}

.urgency-grid p {
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-70);
  margin-bottom: 16px;
}

.deadline-tile {
  background: var(--white);
  border-left: 2px solid var(--blue-60);
  padding: 32px;
}

.deadline-tile .label {
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  color: var(--gray-70);
  text-transform: uppercase;
  margin-bottom: 16px;
}

.deadline-tile .date {
  font-size: 3rem;
  font-weight: 300;
  line-height: 1.17;
  color: var(--gray-100);
  margin-bottom: 16px;
}

.deadline-tile .sub {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
  line-height: 1.4;
}

/* ---------- HOW IT WORKS ---------- */
.steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
}

.step {
  background: var(--white);
  padding: 32px;
}

.step-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  background: var(--blue-60);
  color: var(--white);
  font-size: 1.5rem;
  font-weight: 300;
  margin-bottom: 24px;
}

.step h3 {
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--gray-100);
  margin-bottom: 12px;
  letter-spacing: 0;
}

.step p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.4;
  color: var(--gray-70);
}

/* ---------- FIT CHECK (user-count self-select) ---------- */
.fit-check {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
}

.fit-card {
  background: var(--white);
  padding: 32px;
  display: flex;
  flex-direction: column;
}

.fit-card-in {
  background: var(--gray-100);
}

.fit-band {
  font-size: 0.8125rem;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--gray-60);
  margin-bottom: 12px;
}

.fit-card-in .fit-band { color: var(--gray-30); }

.fit-verdict {
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: 0;
  margin-bottom: 16px;
  color: var(--gray-70);
}

.fit-card-in .fit-verdict { color: var(--white); }
.fit-card-in .fit-verdict::after {
  content: "";
  display: block;
  width: 32px;
  height: 3px;
  background: var(--blue-60);
  margin-top: 12px;
}

.fit-card p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.5;
  color: var(--gray-70);
  margin-bottom: 0;
}

.fit-card-in p { color: var(--gray-30); }

.fit-cta {
  display: inline-block;
  margin-top: 20px;
  color: var(--blue-60);
  font-size: 0.875rem;
  font-weight: 500;
  letter-spacing: 0.16px;
  border-bottom: 1px solid var(--blue-60);
  padding-bottom: 2px;
  align-self: flex-start;
}

.fit-cta:hover { color: var(--blue-60-hover); border-bottom-color: var(--blue-60-hover); }

/* Dark card needs a hover that goes brighter, not darker, against gray-100 */
.fit-card-in .fit-cta:hover { color: var(--white); border-bottom-color: var(--white); }

@media (max-width: 768px) {
  .fit-check { grid-template-columns: 1fr; }
}

/* ---------- BLOG & POSTS ---------- */
.hero-compact { padding: 144px 32px 64px; }
.hero-compact h1 { font-size: clamp(2rem, 4vw, 3rem); }
.hero-compact p { margin-bottom: 0; }

/* ─────────────────────────────────────────────────────────────
   Blog-post heroes — full-bleed editorial artwork behind title.
   Uses the same data-hero structure as the homepage hero, but the
   "image" is a procedurally generated SVG artwork (hero-art) tied
   to the post's topic. Title overlays on a dark gradient scrim.

   Each artwork's focal element sits to the right of centre so
   the title overlay (max ~640px wide, left-aligned) doesn't fight it.
   ───────────────────────────────────────────────────────────── */
.hero[data-hero^="post-"] {
  /* shorter than homepage cinema-poster; tall enough to be a hero */
  min-height: 560px;
  padding: 96px 0 0;
}
.hero[data-hero^="post-"] .hero-art {
  position: absolute;
  inset: 48px 0 0 0;
  z-index: 0;
  overflow: hidden;
  background: radial-gradient(120% 100% at 80% 50%, #1f3050 0%, #0c1424 60%, #06090f 100%);
}
.hero[data-hero^="post-"] .hero-art-grid {
  position: absolute; inset: 0;
  background-image:
    linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px);
  background-size: 32px 32px;
  pointer-events: none;
}
.hero[data-hero^="post-"] .hero-art-corner {
  position: absolute;
  top: 32px; right: 32px;
  font-family: var(--font-mono);
  font-size: 11px;
  color: rgba(255,255,255,0.55);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.hero[data-hero^="post-"] .hero-art-corner .blink {
  display: inline-block; width: 6px; height: 6px;
  background: var(--copper-30); border-radius: 50%;
  box-shadow: 0 0 8px var(--copper-60);
  margin-right: 8px; vertical-align: middle;
  animation: pstn-blink 1.6s steps(2, end) infinite;
}
.hero[data-hero^="post-"] .hero-art-badge {
  position: absolute;
  bottom: 32px; right: 32px;
  font-family: var(--font-mono);
  font-size: 11px;
  color: #fff;
  background: rgba(15, 98, 254, 0.85);
  padding: 4px 8px;
  border-radius: 24px;
  letter-spacing: 0.08em;
}

/* ── Waveform hero — mirrored trace across full width ── */
.hero-art-waveform .hero-art-wave {
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  filter: drop-shadow(0 0 14px rgba(15, 98, 254, 0.55));
}
.hero-art-waveform .hero-art-wave .axis {
  stroke: rgba(255, 255, 255, 0.08);
  stroke-width: 0.7; stroke-dasharray: 3 6;
}
.hero-art-waveform .hero-art-wave polyline {
  fill: none; stroke: #5a9bff; stroke-width: 1.8;
  stroke-linecap: round; stroke-linejoin: round;
}

/* ── PSTN hero — huge Jan 2027 display on the right ── */
.hero-art-pstn::after {
  content: ""; position: absolute;
  width: 50%; height: 70%;
  right: 0; bottom: -10%;
  background: radial-gradient(circle, rgba(198,106,58,0.32), transparent 60%);
  filter: blur(36px);
  pointer-events: none;
}
.hero-art-pstn .hero-art-pstn-display {
  position: absolute;
  top: 50%; right: clamp(48px, 8vw, 128px);
  transform: translateY(-50%);
  text-align: right;
  z-index: 2;
}
.hero-art-pstn .hero-art-pstn-date {
  font-family: var(--font-serif);
  font-style: italic; font-weight: 400;
  font-size: clamp(80px, 12vw, 180px);
  line-height: 0.95;
  letter-spacing: -0.01em;
  color: #fff;
}
.hero-art-pstn .hero-art-pstn-sub {
  display: block;
  font-family: var(--font-mono);
  font-size: 13px;
  color: var(--copper-30);
  margin-top: 16px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.hero-art-pstn .hero-art-pstn-rule {
  height: 1px; width: 200px;
  margin: 16px 0 0 auto;
  background: linear-gradient(to left, var(--copper-60) 0%, transparent 100%);
}

/* ── Pricing hero — copper-cream ground, £ + line items right side ── */
.hero[data-hero="post-pricing"] .hero-art {
  background: radial-gradient(120% 100% at 75% 50%,
    var(--copper-60) 0%,
    var(--copper-30) 35%,
    var(--copper-tint) 75%,
    #f9f3e2 100%);
}
.hero[data-hero="post-pricing"] .hero-art-grid { display: none; }
.hero[data-hero="post-pricing"] .hero-art-corner { color: rgba(22,22,22,0.55); }
.hero[data-hero="post-pricing"] .hero-art-badge {
  background: var(--gray-100); color: #fff;
}
.hero-art-pricing-dotgrid {
  position: absolute; inset: 0;
  background-image: radial-gradient(rgba(22,22,22,0.07) 1px, transparent 1px);
  background-size: 14px 14px;
  mask-image: linear-gradient(to right, transparent 0%, black 40%, black 100%);
  pointer-events: none;
}
.hero-art-pricing .hero-art-pricing-display {
  position: absolute;
  top: 50%; right: clamp(48px, 8vw, 128px);
  transform: translateY(-50%);
  display: flex;
  align-items: center;
  gap: clamp(24px, 4vw, 56px);
  z-index: 2;
}
.hero-art-pricing .hero-art-pound {
  font-family: var(--font-serif);
  font-style: italic; font-weight: 400;
  font-size: clamp(120px, 16vw, 240px);
  line-height: 0.9;
  color: var(--gray-100);
}
.hero-art-pricing .hero-art-lines {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 8px;
  font-family: var(--font-mono);
  font-size: 13px;
  color: var(--gray-80);
  letter-spacing: 0.05em;
  min-width: 240px;
}
.hero-art-pricing .hero-art-lines li {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 14px;
  padding: 6px 0;
  border-top: 1px solid rgba(22,22,22,0.2);
  text-transform: uppercase;
}
.hero-art-pricing .hero-art-lines li:first-child { border-top: 0; }
.hero-art-pricing .hero-art-lines .val { color: var(--gray-100); font-weight: 500; }

/* Title-overlay scrim. Stronger from the left to keep text legible. */
.hero[data-hero^="post-"]::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    105deg,
    rgba(22, 22, 22, 0.92) 0%,
    rgba(22, 22, 22, 0.7)  30%,
    rgba(22, 22, 22, 0.25) 55%,
    rgba(22, 22, 22, 0)    75%
  );
  z-index: 1;
  pointer-events: none;
}
/* Light-ground hero (pricing) needs a different scrim direction — keep
   the left dark for white text, fade copper ground in on the right. */
.hero[data-hero="post-pricing"]::after {
  background: linear-gradient(
    105deg,
    rgba(22, 22, 22, 0.92) 0%,
    rgba(22, 22, 22, 0.72) 30%,
    rgba(22, 22, 22, 0.3)  55%,
    rgba(22, 22, 22, 0)    75%
  );
}

.hero[data-hero^="post-"] .hero-inner {
  position: relative;
  z-index: 2;
  max-width: 1056px;
  margin: 0 auto;
  width: 100%;
  padding: 0 32px;
}
@media (min-width: 769px) {
  .hero[data-hero^="post-"] .hero-inner {
    padding-right: clamp(280px, 40vw, 560px);
  }
}
.hero[data-hero^="post-"] .hero-eyebrow a {
  color: rgba(255, 255, 255, 0.7);
  border-bottom: 1px solid rgba(255, 255, 255, 0.3);
}
.hero[data-hero^="post-"] h1 {
  color: var(--white);
  font-size: clamp(2rem, 4.5vw, 3.5rem);
  font-weight: 300;
  line-height: 1.15;
  text-wrap: balance;
  margin-bottom: 24px;
}
.hero[data-hero^="post-"] h1 em {
  color: var(--white);
  font-style: normal;
  font-weight: 600;
}
.hero[data-hero^="post-"] .post-meta {
  color: rgba(255, 255, 255, 0.65);
}

/* ── Mobile: stack vertically. Artwork occupies upper half, title
   locks to the bottom of the hero in the dark scrim band. ── */
@media (max-width: 768px) {
  .hero[data-hero^="post-"] {
    min-height: 640px;
    align-items: flex-end;
    padding: 96px 0 56px;
  }
  .hero[data-hero^="post-"] .hero-inner { padding: 0 24px; }

  /* PSTN — date moves to upper-centre, smaller scale */
  .hero-art-pstn .hero-art-pstn-display {
    top: 96px; bottom: auto;
    left: 24px; right: 24px;
    transform: none;
    text-align: center;
  }
  .hero-art-pstn .hero-art-pstn-date { font-size: clamp(56px, 16vw, 88px); }
  .hero-art-pstn .hero-art-pstn-sub { font-size: 11px; margin-top: 12px; }
  .hero-art-pstn .hero-art-pstn-rule {
    width: 140px; margin: 12px auto 0;
    background: linear-gradient(to right, transparent 0%, var(--copper-60) 50%, transparent 100%);
  }

  /* Pricing — £ on its own in upper-centre, drop the line-items table */
  .hero-art-pricing .hero-art-pricing-display {
    top: 96px; bottom: auto;
    left: 24px; right: 24px;
    transform: none;
    justify-content: center;
  }
  .hero-art-pricing .hero-art-lines { display: none; }
  .hero-art-pricing .hero-art-pound { font-size: clamp(120px, 32vw, 180px); }

  /* Waveform stays centred — it already fills the width gracefully */

  /* Scrim flips to top-to-bottom: clear at the top (artwork visible),
     dark at the bottom (where the title locks). */
  .hero[data-hero^="post-"]::after {
    background: linear-gradient(
      to top,
      rgba(22, 22, 22, 0.95) 0%,
      rgba(22, 22, 22, 0.85) 25%,
      rgba(22, 22, 22, 0.4)  55%,
      rgba(22, 22, 22, 0)    85%
    );
  }
  .hero[data-hero="post-pricing"]::after {
    background: linear-gradient(
      to top,
      rgba(22, 22, 22, 0.95) 0%,
      rgba(22, 22, 22, 0.85) 25%,
      rgba(22, 22, 22, 0.45) 55%,
      rgba(22, 22, 22, 0)    85%
    );
  }
}

.post-meta {
  font-size: 0.875rem;
  color: var(--gray-60);
  letter-spacing: 0.16px;
  margin-top: 8px;
}

.post-meta-sep {
  margin: 0 8px;
  color: var(--gray-30);
}

/* Blog index — white-card rows with hairline divides. Each post is a
   compact white box: ~220px square artwork on the left, content stack
   on the right. The gray-20 background under `gap: 1px` paints the
   hairlines between cards; the outer border frames the stack. */
.blog-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
}

/* The whole card is one link. Hover shifts ground to gray-10-hover,
   title to Blue 60, and the trailing arrow slides in by ~4px. */
.blog-card {
  background: var(--white);
  padding: 32px 40px;
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 40px;
  align-items: center;
  color: inherit;
  text-decoration: none;
  transition: background-color 150ms cubic-bezier(0.2, 0, 0.38, 0.9);
}
.blog-card:hover { background: var(--gray-10-hover); }
.blog-card:focus-visible {
  outline: 2px solid var(--blue-60);
  outline-offset: -2px;
}

.blog-card-art { display: block; width: 100%; }
.blog-card-art .resource-art { width: 100%; aspect-ratio: 1 / 1; }

.blog-card-meta {
  font-size: 0.8125rem;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--gray-60);
  margin-bottom: 12px;
}
.blog-card-sep { margin: 0 8px; color: var(--gray-30); }

.blog-card h2 {
  font-size: 1.5rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--gray-100);
  margin: 0 0 12px;
  letter-spacing: 0;
  transition: color 150ms cubic-bezier(0.2, 0, 0.38, 0.9);
}
.blog-card:hover h2 { color: var(--blue-60); }

.blog-card p {
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-70);
  margin: 0 0 16px;
  max-width: 60ch;
}

.blog-card-more {
  display: inline-block;
  color: var(--blue-60);
  font-size: 0.875rem;
  font-weight: 500;
  letter-spacing: 0.16px;
}
.blog-card-more .arrow {
  display: inline-block;
  transition: transform 240ms cubic-bezier(0, 0, 0.3, 1);
}
.blog-card:hover .blog-card-more .arrow { transform: translateX(4px); }

@media (max-width: 720px) {
  .blog-card {
    grid-template-columns: 1fr;
    padding: 28px 24px;
    gap: 20px;
  }
  .blog-card-art { max-width: 280px; }
}

.post-body {
  max-width: 720px;
  margin: 0 auto;
  font-size: 1.0625rem;
  line-height: 1.65;
  color: var(--gray-90);
}

.post-body .post-lede {
  font-size: 1.25rem;
  line-height: 1.55;
  color: var(--gray-100);
  margin-bottom: 28px;
}

.post-body p {
  margin: 0 0 20px;
}

.post-body h2 {
  font-size: 1.625rem;
  font-weight: 600;
  color: var(--gray-100);
  margin: 48px 0 16px;
  letter-spacing: 0;
}

.post-body h3 {
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--gray-100);
  margin: 32px 0 12px;
}

.post-body ol,
.post-body ul {
  margin: 0 0 24px;
  padding-left: 28px;
}

.post-body li {
  margin-bottom: 10px;
}

.post-body a {
  color: var(--blue-60);
  border-bottom: 1px solid var(--blue-60);
}

.post-body a:hover { color: var(--blue-70); border-bottom-color: var(--blue-70); }

.post-body strong { font-weight: 600; color: var(--gray-100); }

.post-blockquote {
  margin: 32px 0;
  padding: 24px 28px;
  background: var(--gray-10);
  border-left: 4px solid var(--blue-60);
  font-size: 1.0625rem;
  font-style: italic;
  color: var(--gray-90);
}

.post-table {
  width: 100%;
  border-collapse: collapse;
  margin: 24px 0 32px;
  font-size: 0.9375rem;
}

.post-table th,
.post-table td {
  border-bottom: 1px solid var(--gray-20);
  padding: 12px 16px;
  text-align: left;
  vertical-align: top;
}

.post-table th {
  background: var(--gray-10);
  font-weight: 600;
  color: var(--gray-100);
  letter-spacing: 0.16px;
}

.post-table tbody tr:hover { background: var(--gray-10); }

@media (max-width: 768px) {
  .blog-card { padding: 32px 24px; }
  .post-body { font-size: 1rem; }
  .post-body .post-lede { font-size: 1.125rem; }
  .post-body h2 { font-size: 1.375rem; }
}

/* ---------- FEATURES ---------- */
.features-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
}

.feature {
  background: var(--white);
  padding: 24px;
  transition: background-color 0.1s;
  position: relative;
}

.feature::before {
  content: '';
  display: block;
  width: 24px;
  height: 2px;
  background: var(--blue-60);
  margin-bottom: 16px;
}

.feature:hover { background: var(--gray-10-hover); }

.feature h3 {
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--gray-100);
  margin-bottom: 8px;
}

.feature p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.4;
  color: var(--gray-70);
}

/* ---------- WHY US ---------- */
/* Founder block: quote + attribution as a single card. White surface on
   section ground, 2px Blue 60 left border, Gray 20 frame on the other
   sides. Attribution lives inside the card as a <footer>, separated from
   the quote text by a thin Gray 20 hairline. */
.founder-quote {
  background: var(--white);
  border: 1px solid var(--gray-20);
  border-left: 2px solid var(--blue-60);
  padding: 40px 48px;
  margin: 0 0 48px;
  max-width: 720px;
}
.founder-quote-text {
  font-size: 1.125rem;
  line-height: 1.5;
  color: var(--gray-70);
  margin: 0;
}
@media (max-width: 720px) {
  .founder-quote { padding: 28px 24px; }
}

.founder-attribution {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
  line-height: 1.5;
  margin-top: 24px;
}

.founder-attribution a {
  color: var(--blue-60);
  border-bottom: 1px solid var(--blue-60);
}

.founder-attribution a:hover {
  color: var(--blue-60-hover);
  border-bottom-color: var(--blue-60-hover);
}

.differentiators {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
  margin-top: 64px;
}

.diff {
  background: var(--white);
  padding: 24px;
}

.diff-label {
  display: inline-block;
  background: var(--blue-10);
  color: var(--blue-60);
  padding: 4px 8px;
  font-size: 0.75rem;
  letter-spacing: 0.32px;
  border-radius: 24px;
  margin-bottom: 16px;
}

.diff h3 {
  font-size: 1rem;
  font-weight: 600;
  color: var(--gray-100);
  margin-bottom: 8px;
}

.diff p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.4;
  color: var(--gray-70);
}

/* ---------- PRICING ---------- */
.trust-tags {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 48px;
}

.trust-tag {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--blue-10);
  color: var(--blue-60);
  padding: 4px 12px;
  font-size: 0.75rem;
  letter-spacing: 0.32px;
  border-radius: 24px;
}

.pricing-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  max-width: 760px;
}

.price-card {
  background: var(--white);
  border: 1px solid var(--gray-30);
  padding: 32px;
  position: relative;
  display: flex;
  flex-direction: column;
}

.price-card.featured {
  border: 2px solid var(--blue-60);
}

.price-card.featured::before {
  content: 'Most popular';
  position: absolute;
  top: -12px;
  left: 24px;
  background: var(--blue-60);
  color: var(--white);
  padding: 4px 12px;
  font-size: 0.75rem;
  letter-spacing: 0.32px;
  border-radius: 24px;
}

.price-card h3 {
  font-size: 1.5rem;
  font-weight: 400;
  color: var(--gray-100);
  margin-bottom: 8px;
}

.price-card .price {
  font-size: 3rem;
  font-weight: 300;
  line-height: 1.17;
  color: var(--gray-100);
  font-variant-numeric: tabular-nums;
  margin-bottom: 4px;
}

.price-card .price span {
  font-size: 0.875rem;
  font-weight: 400;
  letter-spacing: 0.16px;
  color: var(--gray-70);
}

.price-card .price-note {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
  margin-bottom: 24px;
  padding-bottom: 24px;
  border-bottom: 1px solid var(--gray-20);
}

.price-card ul {
  list-style: none;
  margin-bottom: 32px;
  flex: 1;
}

.price-card li {
  padding: 8px 0;
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-100);
  display: flex;
  align-items: flex-start;
  gap: 8px;
  line-height: 1.4;
}

.price-card li::before {
  content: '';
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  margin-top: 2px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230f62fe'><path d='M6.5 11.586L3.207 8.293 1.793 9.707 6.5 14.414l8.207-8.207-1.414-1.414z'/></svg>");
  background-repeat: no-repeat;
  background-position: center;
}

.price-card .btn {
  width: 100%;
  min-width: 0;
}

/* ---------- FAQ ----------
   The list IS a single white card on the section ground, items
   hairline-divided inside. Consistent with .reasons-list and the
   pricing-table-wide card pattern. */
.faq-list {
  max-width: 720px;
  background: var(--white);
  border: 1px solid var(--gray-20);
}

.faq-item {
  border-bottom: 1px solid var(--gray-20);
}
.faq-item:last-child { border-bottom: 0; }

.faq-item:first-child {
  border-top: 0;
}

.faq-question {
  width: 100%;
  background: none;
  border: none;
  padding: 24px 32px;
  font-family: var(--font);
  font-size: 1rem;
  font-weight: 600;
  color: var(--gray-100);
  text-align: left;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  transition: color 0.1s;
}

.faq-question:hover { color: var(--blue-60); }

.faq-question::after {
  content: '+';
  font-size: 1.25rem;
  font-weight: 300;
  color: var(--gray-70);
  transition: transform 0.2s;
  flex-shrink: 0;
  width: 24px;
  text-align: center;
}

.faq-item.open .faq-question::after {
  transform: rotate(45deg);
}

.faq-answer {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}

.faq-answer-inner {
  padding: 0 32px 24px;
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
  line-height: 1.5;
  max-width: 64ch;
}

/* ---------- RESOURCES (latest from blog) ----------
   Implements the Editorial Card Exception in DESIGN.md: gradient
   backgrounds, Copper accent, and Plex Serif/Mono are permitted
   inside .resource-art only. Chrome stays in Plex Sans + Blue 60. */

/* Resources header — same as .section-header (underline + spacing) but
   adds a flex layout so the "All posts" ghost-button sits flush right
   of the title/subtitle. Border + padding come from .section-header,
   added below via the resources-grid wrapper, but since this is its
   own class we duplicate just the layout here. */
.resources-header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 32px;
  margin-bottom: 56px;
  padding-bottom: 24px;
  border-bottom: 1px solid var(--gray-20);
}
.resources-header h2 {
  font-size: 2rem;
  font-weight: 400;
  line-height: 1.25;
  color: var(--gray-100);
  max-width: 640px;
}
.resources-header p {
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-70);
  margin-top: 8px;
}
/* "All posts" — ghost button: transparent, Blue 60 ink, 0 radius */
.all-posts-link {
  font-family: var(--font);
  font-size: 14px;
  font-weight: 400;
  letter-spacing: 0.16px;
  color: var(--blue-60);
  background: transparent;
  padding: 14px 16px;
  height: 48px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 0;
  border-radius: 0;
  white-space: nowrap;
  text-decoration: none;
  transition: background 110ms cubic-bezier(0.2, 0, 0.38, 0.9);
}
.all-posts-link:hover { background: var(--blue-10); }
.all-posts-link::after { content: "→"; }

/* Editorial cards take the individual-border pattern (like
   .accred-grid -> .accred-item) rather than the connected-matrix
   pattern: each card has its own 1px gray-20 border with breathing
   room between them. Lets each post read as its own object. */
.resource-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

/* Homepage editorial card. White surface, 1px gray-20 border, artwork
   bleeds to top/sides via negative margins, text sits in padded white
   below. Follows the universal clickable-card hover pattern
   (DESIGN.md → Clickable cards). */
.resource-card {
  display: block;
  color: inherit;
  text-decoration: none;
  border: 1px solid var(--gray-20);
  background: var(--white);
  padding: 20px;
  transition: background-color 150ms cubic-bezier(0.2, 0, 0.38, 0.9);
}
.resource-card:hover { background: var(--gray-10-hover); }

.resource-art {
  aspect-ratio: 1 / 1;
  border-radius: 0;
  overflow: hidden;
  position: relative;
  isolation: isolate;
  /* Container query context: artwork content scales proportionally to
     the card it lands in. The same partial ships to the 336px homepage
     row and the 220px blog-index row without separate variants. */
  container-type: inline-size;
}
.resource-card > .resource-art {
  /* Bleed artwork to the card's top + side edges, keep bottom padding */
  margin: -20px -20px 20px;
}

/* Meta row: caption-01 — Plex Sans 12px / 0.32px tracking. Chrome. */
.resource-meta {
  display: flex;
  align-items: center;
  gap: 12px;
  font-family: var(--font);
  font-size: 12px;
  font-weight: 400;
  line-height: 1.33;
  letter-spacing: 0.32px;
  color: var(--gray-70);
}
.resource-meta .dot { width: 2px; height: 2px; background: var(--gray-50); }

/* Title: heading-04 — Plex Sans 20px / 600 */
.resource-card h3 {
  margin-top: 8px;
  font-family: var(--font);
  font-size: 20px;
  font-weight: 600;
  line-height: 1.4;
  color: var(--gray-100);
  max-width: 30ch;
  transition: color 150ms cubic-bezier(0.2, 0, 0.38, 0.9);
}

/* Hover: title -> Blue 60. Arrow always in DOM (constant width) so
   layout is identical in both states. Carbon moderate-02 (240ms) +
   entrance-expressive easing. */
.resource-card:hover h3 { color: var(--blue-60); }
.resource-card:focus-visible {
  outline: 2px solid var(--blue-60);
  outline-offset: 2px;
}

/* ---- Card 1: PSTN deadline (dark, risk) ---- */
.art-pstn {
  background:
    radial-gradient(120% 80% at 10% 0%, #1d2740 0%, #0b1120 55%, #050810 100%);
  color: var(--copper-tint);
  /* Padding scales with container so the 220px blog row gets ~21px while
     the 336px homepage row keeps ~32px. */
  padding: clamp(18px, 9.5cqi, 32px);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.art-pstn::before {
  content: "";
  position: absolute; inset: 0;
  background-image: repeating-linear-gradient(
    to bottom,
    rgba(255,255,255,0.025) 0 1px,
    transparent 1px 3px
  );
  pointer-events: none;
  z-index: 1;
}
.art-pstn::after {
  content: "";
  position: absolute;
  width: 70%; height: 70%;
  left: 10%; bottom: -20%;
  background: radial-gradient(circle, rgba(198,106,58,0.35), transparent 60%);
  filter: blur(20px);
  z-index: 0;
}
.art-pstn .label-row {
  position: relative; z-index: 2;
  display: flex; justify-content: space-between; align-items: center;
  font-family: var(--font-mono);
  font-size: clamp(9px, 3.3cqi, 11px);
  color: rgba(244,234,214,0.55);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.art-pstn .label-row .blink {
  display: inline-block; width: 6px; height: 6px;
  background: var(--copper-30); border-radius: 50%;
  box-shadow: 0 0 8px var(--copper-60);
  animation: pstn-blink 1.6s steps(2, end) infinite;
  margin-right: 8px;
  vertical-align: middle;
}
@keyframes pstn-blink { 50% { opacity: 0.2; } }
.art-pstn .countdown {
  position: relative; z-index: 2;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  /* 21cqi at 336px → ~70px; at 220px → ~46px. "Jan 2027" fits on one line
     at both widths. */
  font-size: clamp(38px, 21cqi, 72px);
  line-height: 0.95;
  letter-spacing: -0.01em;
  color: #fff;
}
.art-pstn .countdown small {
  display: block;
  font-family: var(--font-mono);
  font-style: normal;
  font-size: clamp(9px, 3.3cqi, 11px);
  color: var(--copper-30);
  margin-top: clamp(8px, 4.8cqi, 16px);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.art-pstn .underline {
  height: 1px;
  background: linear-gradient(to right, var(--copper-60) 0%, transparent 70%);
  margin-top: clamp(8px, 4.8cqi, 16px);
  position: relative; z-index: 2;
}

/* ---- Card 2: Voice / latency (mid, capability) ----
   Oscilloscope-style waveform on a dark gradient background. The waveform
   shape is a stylised single utterance — attack, formant peaks, decay —
   that reads as "voice" rather than a generic sine wave. */
.art-coverage {
  background:
    radial-gradient(120% 100% at 80% 20%, #1f3050 0%, #0c1424 60%, #06090f 100%);
  display: flex;
  align-items: center;
  justify-content: center;
}
.art-coverage .grid-bg {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px);
  background-size: 24px 24px;
  pointer-events: none;
}
.art-coverage svg.wave {
  width: 90%;
  height: auto;
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 0 10px rgba(15, 98, 254, 0.55));
}
.art-coverage svg.wave polyline {
  fill: none;
  stroke: #5a9bff;
  stroke-width: 1.4;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.art-coverage svg.wave .axis {
  stroke: rgba(255, 255, 255, 0.08);
  stroke-width: 0.5;
  stroke-dasharray: 2 4;
}
.art-coverage .corner-label {
  position: absolute;
  top: clamp(14px, 7cqi, 24px); left: clamp(14px, 7cqi, 24px);
  font-family: var(--font-mono);
  font-size: clamp(9px, 3.3cqi, 11px);
  color: rgba(255,255,255,0.55);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.art-coverage .badge {
  position: absolute;
  bottom: clamp(14px, 7cqi, 24px); right: clamp(14px, 7cqi, 24px);
  font-family: var(--font-mono);
  font-size: clamp(9px, 3.3cqi, 11px);
  color: #fff;
  background: rgba(15, 98, 254, 0.85);
  padding: 4px 8px;
  border-radius: 24px;  /* pill — the one rounded element allowed */
  letter-spacing: 0.08em;
}

/* ---- Card 3: Honest pricing (warm, clarity) ---- */
.art-pricing {
  background:
    radial-gradient(120% 90% at 80% 100%,
      var(--copper-60) 0%,
      var(--copper-30) 40%,
      var(--copper-tint) 80%,
      #f9f3e2 100%);
  padding: clamp(18px, 9.5cqi, 32px);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  color: var(--gray-100);
}
.art-pricing::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(22,22,22,0.06) 1px, transparent 1px);
  background-size: 8px 8px;
  mask-image: linear-gradient(to top, black 40%, transparent 100%);
  pointer-events: none;
}
.art-pricing .pound {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  /* 32cqi at 336px → ~107px; at 220px → ~70px. £ sits comfortably above
     the line-items table at both card sizes. */
  font-size: clamp(56px, 32cqi, 112px);
  line-height: 0.9;
  color: var(--gray-100);
  align-self: flex-start;
  margin-bottom: clamp(-12px, -2.4cqi, -8px);
}
.art-pricing .lines {
  position: relative; z-index: 2;
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: clamp(2px, 1.8cqi, 6px);
  font-family: var(--font-mono);
  /* clamp keeps a 9px floor so labels stay legible at thumbnail size */
  font-size: clamp(9px, 3.3cqi, 11px);
  color: var(--gray-80);
  letter-spacing: 0.04em;
}
.art-pricing .lines li {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: baseline;
  gap: clamp(4px, 2.4cqi, 8px);
  padding: clamp(2px, 1.2cqi, 4px) 0;
  border-top: 1px solid rgba(22,22,22,0.18);
}
.art-pricing .lines li:first-child { border-top: 0; }
.art-pricing .lines .label { text-transform: uppercase; }
.art-pricing .lines .val {
  color: var(--gray-100);
  font-weight: 500;
  white-space: nowrap;
}

/* Respect prefers-reduced-motion across the editorial card system */
@media (prefers-reduced-motion: reduce) {
  .art-pstn .label-row .blink { animation: none; }
  .resource-card h3::after {
    transition: opacity 70ms linear;
    transform: none;
  }
}

/* Tablet & mobile: collapse to single column. Card width is capped so the
   square art surface doesn't blow up to viewport-width on tablet
   (was producing ~700px squares at 768px). Cap + auto margins centre
   the cards in their column. */
@media (max-width: 880px) {
  .resource-grid {
    grid-template-columns: 1fr;
    gap: 48px;
    justify-items: center;
  }
  .resource-card {
    width: 100%;
    max-width: 460px;
  }
  .resources-header { flex-direction: column; align-items: flex-start; gap: 24px; }
  .resources-header h2 { font-size: 28px; }
}

/* ---------- CONTACT ---------- */
.contact {
  background: var(--gray-100);
  color: var(--white);
}

.contact-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 64px;
  align-items: start;
}

.contact h2 {
  font-size: 2.625rem;
  font-weight: 300;
  line-height: 1.19;
  color: var(--white);
  margin-bottom: 24px;
}

.contact p.lead {
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-30);
  margin-bottom: 32px;
  max-width: 50ch;
}

.audit-notice {
  background: var(--gray-90);
  border-left: 2px solid var(--blue-60);
  padding: 24px;
}

.audit-notice h3 {
  font-size: 1rem;
  font-weight: 600;
  color: var(--white);
  margin-bottom: 8px;
}

.audit-notice p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.4;
  color: var(--gray-30);
}

.contact-form {
  background: var(--gray-90);
  padding: 32px;
}

.form-group {
  margin-bottom: 24px;
}

.form-group label {
  display: block;
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  color: var(--gray-30);
  margin-bottom: 8px;
}

.form-group input,
.form-group select,
.form-group textarea {
  width: 100%;
  padding: 0 16px;
  height: 40px;
  background: var(--gray-80);
  border: none;
  border-bottom: 2px solid var(--gray-60);
  color: var(--white);
  font-family: var(--font);
  font-size: 1rem;
  letter-spacing: 0;
  border-radius: 0;
  transition: border-color 0.1s, background-color 0.1s;
}

.form-group textarea {
  padding: 12px 16px;
  height: auto;
  min-height: 80px;
  resize: vertical;
}

.form-group input:hover,
.form-group select:hover,
.form-group textarea:hover {
  background: var(--gray-70);
}

.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
  outline: none;
  border-bottom-color: var(--blue-60);
}

.form-group input::placeholder,
.form-group textarea::placeholder {
  color: var(--gray-50);
}

.form-group select { cursor: pointer; appearance: none; background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23c6c6c6'><path d='M8 11L3 6h10z'/></svg>"); background-repeat: no-repeat; background-position: right 12px center; padding-right: 36px; }
.form-group select option { background: var(--gray-90); color: var(--white); }

.contact-form .btn { width: 100%; min-width: 0; }

/* ---------- FOOTER ---------- */
footer {
  background: var(--gray-100);
  border-top: 4px solid var(--blue-60);
  padding: 48px 32px 24px;
}

.footer-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 24px;
  max-width: 1280px;
  margin: 0 auto 32px;
  text-align: left;
}

.footer-group h4 {
  color: var(--gray-30);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  margin: 0 0 16px;
}

.footer-group ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.footer-group li {
  margin: 0;
}

.footer-group a {
  display: block;
  padding: 6px 0;
  font-size: 0.8125rem;
  letter-spacing: 0.16px;
  color: var(--gray-30);
  text-decoration: none;
  border: none;
}

.footer-group a:hover {
  color: var(--white);
  text-decoration: underline;
}

.footer-bottom {
  border-top: 1px solid var(--gray-80);
  padding-top: 24px;
  margin-top: 24px;
  text-align: center;
}

footer p {
  font-size: 0.75rem;
  letter-spacing: 0.32px;
  color: var(--gray-50);
  margin: 4px 0;
}

.footer-bottom a {
  display: inline-block;
  padding: 4px 8px;
  font-size: 0.8125rem;
  letter-spacing: 0.16px;
  color: var(--gray-30);
  text-decoration: underline;
}

.footer-bottom a:hover { color: var(--white); }

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

@media (max-width: 700px) {
  .footer-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 24px;
  }
}

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

/* ---------- SCROLL REVEAL ---------- */
.fade-up {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 0.4s ease, transform 0.4s ease;
}

.fade-up.visible {
  opacity: 1;
  transform: translateY(0);
}

/* ---------- RESPONSIVE ---------- */
@media (max-width: 768px) {
  nav { padding: 0 8px; }

  .logo { padding: 0 8px; }

  .nav-toggle {
    display: inline-flex;
    width: 44px;
  }

  .nav-links {
    display: none;
    position: fixed;
    top: 48px;
    left: 0;
    right: 0;
    flex-direction: column;
    height: auto;
    margin-left: 0;
    background: var(--gray-100);
    border-top: 1px solid var(--gray-80);
  }

  .nav-links.open { display: flex; }

  .nav-links li { width: 100%; }

  .nav-links a {
    width: 100%;
    height: 56px;
    padding: 0 16px;
    border-bottom: 1px solid var(--gray-80);
  }

  .nav-cta {
    margin-left: 0;
    padding: 0 36px 0 12px !important;
  }

  .nav-cta::after { right: 12px; }

  /* Mobile: hide the inline support number. Reachable via the footer
     support link and the tel: links on the homepage contact section. */
  .nav-support { display: none; }

  section { padding: 64px 16px; }
  .hero { padding: 96px 16px 64px; }
  .hero h1 { font-size: 2.25rem; }
  .hero p { font-size: 1rem; }

  .urgency-grid,
  .why-inner,
  .contact-grid { grid-template-columns: 1fr; gap: 32px; }

  .urgency-grid h2,
  .why-inner h2,
  .contact h2 { font-size: 2rem; }

  .steps,
  .features-grid,
  .differentiators,
  .pricing-grid { grid-template-columns: 1fr; }

  .pricing-grid { gap: 32px; }

  .section-header h2 { font-size: 1.75rem; }

  .btn { width: 100%; min-width: 0; }
}

@media (max-width: 1056px) and (min-width: 769px) {
  .features-grid { grid-template-columns: repeat(2, 1fr); }
  .what-we-do { grid-template-columns: repeat(2, 1fr); }
}

/* ---------- COMPARATIVE PRICING ANCHOR ---------- */

/* Primary CTA below the comparison — gateway to the full pricing page.
   Left-aligned to match the convention of every other body-section CTA on
   the homepage (Book a free audit on #fit, #payoff, etc.). */
.pricing-cta {
  margin-top: 32px;
}

.compare-anchor {
  display: grid;
  grid-template-columns: 1.4fr auto 1fr;
  gap: 32px;
  align-items: start;
}

.compare-anchor .compare-vs {
  align-self: center;
  font-size: 1.5rem;
  font-weight: 300;
  color: var(--gray-50);
  letter-spacing: 0.32px;
  text-transform: uppercase;
}

@media (max-width: 768px) {
  .compare-anchor { grid-template-columns: 1fr; }
  .compare-anchor .compare-vs { display: none; }
}

.compare-anchor .label {
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  margin-bottom: 12px;
}

.compare-anchor .us .label { color: var(--blue-60); }
.compare-anchor .competitors .label { color: var(--gray-50); }

.compare-anchor .price {
  font-weight: 300;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
  margin-bottom: 8px;
}

.compare-anchor .us .price {
  font-size: 3.75rem;
  color: var(--gray-100);
}

.compare-anchor .us .price .accent { color: var(--blue-60); white-space: nowrap; }

.compare-anchor .competitors .price {
  font-size: 2rem;
  color: var(--gray-70);
}

.compare-anchor .unit {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
}

.compare-anchor .competitors {
  /* No padding-top: align eyebrow label baseline with .us eyebrow.
     The price-size difference (3.75rem vs 2rem) cascades below — eye
     reads label→price as a pair, so labels lining up is what matters. */
}

.compare-anchor-note {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
  margin-top: 12px;
  line-height: 1.5;
}

.compare-anchor-note a {
  color: var(--blue-60);
  border-bottom: 1px solid var(--blue-60);
}

/* Mobile stacking (D10): below 600px, stack with "us" first and larger */
@media (max-width: 600px) {
  .compare-anchor {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  .compare-anchor .us .price { font-size: 3rem; }
  .compare-anchor .competitors .price { font-size: 1.5rem; }
  .compare-anchor .competitors { padding-top: 0; }
}

/* ---------- PSTN SLIM TILE (homepage CTA into /pstn-switch-off) ---------- */
.pstn-tile {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  background: var(--gray-10);
  padding: 24px 32px;
  margin-top: 48px;
}

.pstn-tile-text {
  font-size: 1rem;
  color: var(--gray-100);
  line-height: 1.5;
}

.pstn-tile-text strong { font-weight: 600; }

.pstn-tile a {
  flex-shrink: 0;
  color: var(--blue-60);
  font-size: 0.875rem;
  font-weight: 400;
  letter-spacing: 0.16px;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.pstn-tile a:hover { text-decoration: underline; }

@media (max-width: 600px) {
  .pstn-tile {
    flex-direction: column;
    align-items: flex-start;
    padding: 20px;
  }
}

/* ---------- WHAT WE DO (6 service deliverables) ---------- */
.what-we-do {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
}

.deliverable {
  background: var(--white);
  padding: 24px;
  display: flex;
  flex-direction: column;
}

.deliverable .num {
  font-family: var(--font);
  font-size: 3rem;              /* display-02: 48px */
  font-weight: 300;
  line-height: 1;
  letter-spacing: -0.01em;
  color: var(--gray-30);
  margin-bottom: 24px;
}

.deliverable h3 {
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--gray-100);
  margin-bottom: 8px;
  line-height: 1.3;
}

.deliverable p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.5;
  color: var(--gray-70);
}

@media (max-width: 480px) {
  .what-we-do { grid-template-columns: 1fr; }
}

/* 2x2 modifier for tile grids containing exactly 4 items, so the 4th
   doesn't wrap to a row of its own. Pair with .what-we-do. */
.what-we-do.cols-2 { grid-template-columns: repeat(2, 1fr); }
@media (max-width: 768px) {
  .what-we-do.cols-2 { grid-template-columns: 1fr; }
}

/* "NOT" eyebrow label — alternative to .deliverable .num. Used on
   "What X is not" sections to negate a misconception. */
.deliverable .not-label {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--red-60);
  margin-bottom: 12px;
  display: block;
}

/* Section footnote — small note after a tile grid, italics-free,
   takes the place of an inline "see also" paragraph at section foot. */
.section-footnote {
  margin-top: 32px;
  font-size: 0.875rem;
  color: var(--gray-70);
  max-width: 720px;
}

/* Numbered reasons list — used when a section has more items than fit
   a tile grid (~6+). The list IS a single white card on the section
   ground: Gray 20 border + Gray 20 hairlines between items.
   Numbers are oversized Plex Sans 300 in Gray 30 for editorial weight. */
.reasons-list {
  list-style: none;
  counter-reset: reason;
  padding: 0;
  margin: 32px 0 0;
  background: var(--white);
  border: 1px solid var(--gray-20);
}
.reasons-list > li {
  counter-increment: reason;
  display: grid;
  grid-template-columns: 120px 1fr;
  grid-template-areas:
    "num title"
    "num body";
  column-gap: 40px;
  padding: 40px 48px;
  border-top: 1px solid var(--gray-20);
}
.reasons-list > li:first-child { border-top: 0; }
.reasons-list > li::before {
  content: counter(reason, decimal-leading-zero);
  grid-area: num;
  font-family: var(--font);
  font-size: clamp(2.5rem, 4vw, 3.5rem);
  font-weight: 300;
  color: var(--gray-30);
  line-height: 1;
  letter-spacing: -0.02em;
}
.reasons-list > li h3 {
  grid-area: title;
  font-size: 1.25rem;
  font-weight: 600;
  line-height: 1.35;
  color: var(--gray-100);
  margin: 0 0 8px;
  padding-top: 8px;     /* visual baseline alignment with the big number */
}
.reasons-list > li p {
  grid-area: body;
  font-size: 1rem;
  line-height: 1.55;
  color: var(--gray-70);
  margin: 0;
  max-width: 64ch;
}
@media (max-width: 720px) {
  .reasons-list > li {
    grid-template-columns: 1fr;
    grid-template-areas: "num" "title" "body";
    gap: 8px;
    padding: 28px 24px;
  }
  .reasons-list > li::before { font-size: 2rem; margin-bottom: 8px; }
  .reasons-list > li h3 { padding-top: 0; }
}

/* ---------- EXPLAINER CALLOUT (key insight + body) ----------
   Two-column block under a section-header: bold key insight on the
   left, supporting prose on the right. Used to break long-form prose
   into structured signal-plus-explanation. */
.explainer-callout {
  display: grid;
  grid-template-columns: 1fr 1.6fr;
  gap: 56px;
  align-items: start;
  background: var(--white);
  padding: 40px 48px;
  border-left: 2px solid var(--blue-60);
}
.explainer-callout-key .eyebrow {
  display: block;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--blue-60);
  margin-bottom: 12px;
}
.explainer-callout-key p {
  font-size: 1.5rem;
  font-weight: 400;
  line-height: 1.3;
  color: var(--gray-100);
  margin: 0;
}
.explainer-callout-key p em {
  font-style: italic;
  color: var(--gray-100);
}
.explainer-callout-body p {
  font-size: 1rem;
  line-height: 1.55;
  color: var(--gray-70);
  margin: 0 0 12px;
}
.explainer-callout-body p:last-child { margin-bottom: 0; }
@media (max-width: 768px) {
  .explainer-callout {
    grid-template-columns: 1fr;
    gap: 24px;
    padding: 28px 24px;
  }
  .explainer-callout-key p { font-size: 1.25rem; }
}

/* ---------- SC SPECIMEN (oversized number + caption + body) ----------
   Two-column billboard pattern: huge typographic number on the left,
   supporting prose on the right. Used where a single number IS the
   argument (e.g. "8 SC, not 24"). */
.sc-specimen {
  display: grid;
  grid-template-columns: 1fr 1.4fr;
  gap: 64px;
  align-items: center;
}
.sc-specimen-figure {
  background: var(--white);
  padding: 56px 48px;
  border-top: 2px solid var(--blue-60);
}
.sc-specimen-number {
  font-family: var(--font);
  font-size: clamp(72px, 9vw, 128px);
  font-weight: 300;
  line-height: 1;
  color: var(--gray-100);
  margin: 0;
  letter-spacing: -0.02em;
}
.sc-specimen-number .sc-unit {
  font-size: 0.5em;
  font-weight: 400;
  letter-spacing: 0.04em;
  color: var(--blue-60);
  margin-left: 8px;
  vertical-align: 0.15em;
}
.sc-specimen-caption {
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--gray-70);
  margin: 16px 0 0;
}
.sc-specimen-body p {
  font-size: 1rem;
  line-height: 1.55;
  color: var(--gray-70);
  margin: 0 0 16px;
}
.sc-specimen-body p:last-child { margin-bottom: 0; }
@media (max-width: 768px) {
  .sc-specimen { grid-template-columns: 1fr; gap: 24px; }
  .sc-specimen-figure { padding: 32px 24px; }
}

/* ---------- METRIC GRID (reusable proof-point card pattern) ---------- */
.metric-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
}

.metric-card {
  background: var(--white);
  padding: 32px 24px;
  display: flex;
  flex-direction: column;
}

.metric-label {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--blue-60);
  margin-bottom: 12px;
}

.metric-number {
  font-size: 1.375rem;
  font-weight: 600;
  line-height: 1.3;
  color: var(--gray-100);
  margin-bottom: 16px;
  letter-spacing: -0.16px;
}

.metric-card p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.5;
  color: var(--gray-70);
  margin: 0;
}

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

/* ---------- ABOUT PAGE (D11 magazine-side layout) ---------- */
.about-grid {
  display: grid;
  grid-template-columns: 480px 1fr;
  gap: 48px;
  align-items: start;
}

.about-photo {
  width: 480px;
  max-width: 100%;
  /* Square photo above, caption flows below in normal flow.
     Carbon-style 0px radii, no shadow (per design D11). */
}

.about-photo img {
  width: 100%;
  height: auto;
  display: block;
  background: var(--gray-10);
}

.about-photo-caption {
  font-size: 0.8125rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
  margin: 12px 0 0;
}

.about-content h1 {
  font-size: 2.625rem;
  font-weight: 300;
  line-height: 1.19;
  color: var(--gray-100);
  margin-bottom: 24px;
}

.about-content p {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--gray-70);
  margin-bottom: 16px;
  max-width: 60ch;
}

.about-content p.lead {
  font-size: 1.125rem;
  color: var(--gray-100);
  margin-bottom: 24px;
}

.about-facts {
  background: var(--gray-10);
  padding: 24px;
  margin: 32px 0;
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
}

.about-facts dt {
  font-weight: 600;
  color: var(--gray-100);
  margin-bottom: 4px;
}

.about-facts dd {
  margin-bottom: 12px;
}

.about-facts dd:last-child { margin-bottom: 0; }

@media (max-width: 768px) {
  .about-grid {
    grid-template-columns: 1fr;
    gap: 32px;
  }
  .about-photo {
    width: 100%;
    max-width: 480px;
  }
  .about-content h1 { font-size: 2rem; }
}

/* ---------- REFER PAGE (Phase 1: register-interest, no form) ---------- */
.refer-section {
  max-width: 720px;
}

.refer-section h2 {
  font-size: 2rem;
  font-weight: 400;
  line-height: 1.25;
  color: var(--gray-100);
  margin: 48px 0 16px;
}

.refer-section h2:first-child { margin-top: 0; }

.refer-section p {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--gray-70);
  margin-bottom: 16px;
}

.refer-section ul {
  list-style: none;
  margin: 16px 0 24px;
}

.refer-section ul li {
  padding: 8px 0 8px 24px;
  position: relative;
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-100);
}

.refer-section ul li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 14px;
  width: 12px;
  height: 2px;
  background: var(--blue-60);
}

.register-interest {
  background: var(--gray-10);
  border-left: 2px solid var(--blue-60);
  padding: 32px;
  margin-top: 48px;
}

.register-interest h3 {
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--gray-100);
  margin-bottom: 12px;
}

.register-interest p {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--gray-70);
  margin-bottom: 16px;
}

.register-interest a.email-cta {
  display: inline-block;
  padding: 12px 16px;
  background: var(--blue-60);
  color: var(--white);
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  border: none;
}

.register-interest a.email-cta:hover { background: var(--blue-60-hover); }

/* ---------- 404 PAGE ---------- */
.not-found {
  max-width: 720px;
  padding: 80px 0;
}

.not-found h1 {
  font-size: 2.625rem;
  font-weight: 300;
  line-height: 1.19;
  color: var(--gray-100);
  margin-bottom: 24px;
}

.not-found p {
  font-size: 1rem;
  line-height: 1.5;
  color: var(--gray-70);
  margin-bottom: 32px;
}

.not-found-links {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  margin-bottom: 32px;
}

.not-found-links a {
  display: inline-block;
  padding: 12px 16px;
  border: 1px solid var(--gray-30);
  color: var(--gray-100);
  font-size: 0.875rem;
  letter-spacing: 0.16px;
}

.not-found-links a:hover {
  border-color: var(--blue-60);
  color: var(--blue-60);
}

/* ---------- HONEST PRICING WIDE TABLE ---------- */
/* Comparison / pricing table on a section ground (Gray 10 or white).
   Always carries its own white surface + Gray 20 border so the table
   reads as a self-contained card. The thead is allowed to stay Gray 10
   because the border isolates it from the surrounding section. */
.pricing-table-wide {
  width: 100%;
  border-collapse: collapse;
  margin: 32px 0;
  font-variant-numeric: tabular-nums;
  background: var(--white);
  border: 1px solid var(--gray-20);
}

.pricing-table-wide thead th {
  text-align: left;
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--gray-70);
  padding: 16px;
  background: var(--gray-10);
  border-bottom: 2px solid var(--gray-30);
  vertical-align: top;
  width: 25%;
}

.pricing-table-wide thead th:first-child {
  color: var(--gray-100);
}

.pricing-table-wide thead th.ours {
  color: var(--blue-60);
  background: var(--blue-10);
}

.pricing-table-wide thead th .col-sub {
  display: block;
  font-size: 0.6875rem;
  font-weight: 400;
  letter-spacing: 0.16px;
  text-transform: none;
  color: var(--gray-70);
  margin-top: 4px;
}

.pricing-table-wide thead th.ours .col-sub {
  color: var(--blue-60);
}

.pricing-table-wide tbody td {
  padding: 16px;
  vertical-align: top;
  border-bottom: 1px solid var(--gray-20);
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.5;
}

.pricing-table-wide tbody td:first-child {
  font-weight: 600;
  color: var(--gray-100);
}

.pricing-table-wide tbody td.ours {
  background: rgba(15, 98, 254, 0.04);
}

.pricing-table-wide .price-line {
  font-size: 1.125rem;
  font-weight: 400;
  color: var(--gray-100);
  display: block;
}

.pricing-table-wide td.ours .price-line {
  color: var(--blue-60);
  font-weight: 600;
}

.pricing-table-wide .note {
  display: block;
  font-size: 0.75rem;
  letter-spacing: 0.16px;
  color: var(--gray-70);
  margin-top: 4px;
  line-height: 1.4;
}

.pricing-table-wide tbody tr:last-child td {
  border-bottom: none;
}

.pricing-totals {
  background: var(--gray-100);
  color: var(--white);
  padding: 32px;
  margin-top: 32px;
}

.pricing-totals h3 {
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--gray-30);
  margin-bottom: 16px;
}

.pricing-totals-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

.pricing-totals-cell .label {
  font-size: 0.75rem;
  letter-spacing: 0.32px;
  color: var(--gray-30);
  text-transform: uppercase;
  margin-bottom: 8px;
}

.pricing-totals-cell .amount {
  font-size: 1.5rem;
  font-weight: 300;
  color: var(--white);
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
  margin-bottom: 4px;
}

.pricing-totals-cell.ours .amount {
  color: var(--blue-60);
}

.pricing-totals-cell .small {
  font-size: 0.75rem;
  letter-spacing: 0.16px;
  color: var(--gray-30);
  line-height: 1.4;
}

/* Mobile: stack the wide table into cards per row (D5-design). Hide the
   <thead>; reveal a `.col-tag` inside each <td> that's normally hidden on
   desktop. Each row becomes a labelled card with three stacked prices. */
@media (max-width: 768px) {
  .pricing-table-wide thead { display: none; }
  .pricing-table-wide,
  .pricing-table-wide tbody,
  .pricing-table-wide tr,
  .pricing-table-wide td { display: block; width: 100%; }
  .pricing-table-wide tr {
    margin-bottom: 24px;
    background: var(--white);
    border: 1px solid var(--gray-20);
  }
  .pricing-table-wide tbody td {
    border-bottom: 1px solid var(--gray-20);
    padding: 16px 20px;
  }
  .pricing-table-wide tbody td:first-child {
    background: var(--gray-10);
    font-size: 1rem;
    border-bottom: 1px solid var(--gray-30);
  }
  .pricing-table-wide tbody td.ours { background: var(--blue-10); }
  .pricing-table-wide .col-tag {
    display: block;
    font-size: 0.6875rem;
    font-weight: 400;
    letter-spacing: 0.32px;
    text-transform: uppercase;
    color: var(--gray-70);
    margin-bottom: 4px;
  }
  .pricing-table-wide td.ours .col-tag { color: var(--blue-60); }
  .pricing-totals-grid {
    grid-template-columns: 1fr;
    gap: 16px;
  }
}

.col-tag { display: none; }

/* ---------- ARTICLE PROSE (long-form pages: /why-managed-3cx, /switch-from-*) ---------- */
.article {
  max-width: 720px;
}

.article h2 {
  font-size: 2rem;
  font-weight: 400;
  line-height: 1.25;
  color: var(--gray-100);
  margin: 48px 0 16px;
}

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

.article h3 {
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--gray-100);
  margin: 32px 0 8px;
}

.article p {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--gray-70);
  margin-bottom: 16px;
}

.article p.lead {
  font-size: 1.125rem;
  color: var(--gray-100);
  margin-bottom: 24px;
}

.article ol,
.article ul {
  margin: 16px 0 24px;
  padding-left: 0;
  list-style: none;
}

.article ol li,
.article ul li {
  padding: 8px 0 8px 32px;
  position: relative;
  font-size: 1rem;
  line-height: 1.6;
  color: var(--gray-100);
  counter-increment: article-item;
}

.article ol {
  counter-reset: article-item;
}

.article ol li::before {
  content: counter(article-item, decimal-leading-zero);
  position: absolute;
  left: 0;
  top: 8px;
  font-size: 0.75rem;
  letter-spacing: 0.32px;
  color: var(--blue-60);
  font-variant-numeric: tabular-nums;
}

.article ul li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 18px;
  width: 16px;
  height: 2px;
  background: var(--blue-60);
}

.article blockquote {
  font-size: 1.125rem;
  line-height: 1.5;
  color: var(--gray-100);
  border-left: 2px solid var(--blue-60);
  padding: 8px 0 8px 24px;
  margin: 24px 0;
  font-weight: 300;
}

.article a:not(.btn) {
  color: var(--blue-60);
  border-bottom: 1px solid var(--blue-60);
}

.article a:not(.btn):hover { color: var(--blue-60-hover); }

/* ---------- LEVERS / SWITCH PAGE — labelled red-flag cards ---------- */
.lever-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1px;
  background: var(--gray-20);
  border: 1px solid var(--gray-20);
  margin: 32px 0;
}

.lever {
  background: var(--white);
  padding: 24px;
}

.lever .lever-tag {
  display: inline-block;
  background: rgba(218, 30, 40, 0.08);
  color: var(--red-60);
  padding: 4px 8px;
  font-size: 0.6875rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  margin-bottom: 12px;
}

.lever h3 {
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--gray-100);
  margin-bottom: 8px;
}

.lever p {
  font-size: 0.9375rem;
  letter-spacing: 0.16px;
  line-height: 1.5;
  color: var(--gray-70);
  margin-bottom: 8px;
}

.lever p.our-take {
  color: var(--gray-100);
  font-weight: 400;
  border-top: 1px solid var(--gray-20);
  padding-top: 12px;
  margin-top: 12px;
}

.lever p.our-take strong { color: var(--blue-60); }

/* ---------- FORM SUCCESS / ERROR (homepage contact form) ---------- */
.form-success {
  background: var(--gray-90);
  padding: 32px;
  color: var(--white);
}

.form-success h3 {
  font-size: 1.5rem;
  font-weight: 400;
  color: var(--blue-60);
  margin-bottom: 12px;
}

.form-success p {
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-30);
  line-height: 1.5;
  margin-bottom: 12px;
}

.form-success ul {
  list-style: none;
  margin-top: 16px;
}

.form-success ul li {
  padding: 6px 0 6px 20px;
  position: relative;
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  color: var(--gray-30);
}

.form-success ul li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 11px;
  width: 12px;
  height: 2px;
  background: var(--blue-60);
}

.form-error {
  background: rgba(218, 30, 40, 0.1);
  border-left: 2px solid var(--red-60);
  padding: 16px;
  margin: 16px 0;
  color: var(--white);
  font-size: 0.875rem;
  letter-spacing: 0.16px;
  line-height: 1.5;
}

.form-error a {
  color: var(--white);
  text-decoration: underline;
}

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

  .fade-up { opacity: 1; transform: none; }
}

/* ---------- TRUST STRIPS (Trusted Partners + Accreditations) ---------- */
.trust-strip {
  padding: 56px 32px 64px;
  background: var(--white);
}
/* Footer top row: Port Phones brand left, contact details right */
.footer-top {
  max-width: 1280px;
  margin: 0 auto 32px;
  padding: 0 0 28px;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 48px;
  border-bottom: 1px solid var(--gray-80);
}
.footer-brand {
  flex-shrink: 0;
}
.footer-logo {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  color: var(--white);
  font-size: 1.75rem;
  font-weight: 600;
  letter-spacing: 0.16px;
  line-height: 1;
  text-decoration: none;
  border: none;
}
.footer-logo img {
  height: 36px;
  width: 36px;
  display: block;
}
.footer-logo .accent { color: var(--blue-60); }
.footer-logo .wordmark { transform: translateY(-1px); }
.footer-tagline {
  margin: 12px 0 0;
  font-size: 0.8125rem;
  letter-spacing: 0.16px;
  color: var(--gray-50);
}
.footer-contact {
  text-align: right;
}
.footer-contact p {
  margin: 0 0 4px;
  font-size: 0.8125rem;
  letter-spacing: 0.16px;
  line-height: 1.5;
  color: var(--gray-30);
}
.footer-contact a {
  color: var(--gray-30);
  text-decoration: none;
  border: none;
}
.footer-contact a:hover {
  color: var(--white);
  text-decoration: underline;
}
@media (max-width: 700px) {
  .footer-top {
    flex-direction: column;
    gap: 24px;
    align-items: flex-start;
  }
  .footer-contact { text-align: left; }
}

/* Footer trust strip: 5 logos on dark, monochrome white treatment */
.footer-trust {
  max-width: 1280px;
  margin: 24px auto 0;
  padding: 28px 0 4px;
  border-top: 1px solid var(--gray-80);
}
.footer-trust-logos {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 48px;
  row-gap: 20px;
}
.footer-trust-logo {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 28px;
}
.footer-trust-logo img {
  max-height: 24px;
  max-width: 130px;
  width: auto;
  height: auto;
  object-fit: contain;
  filter: brightness(0) invert(1);
  opacity: 0.5;
  transition: opacity 0.2s ease;
  display: block;
}
.footer-trust-logo:hover img { opacity: 1; }
@media (max-width: 700px) {
  .footer-brand { padding: 4px 0 20px; }
  .footer-logo { font-size: 1.5rem; }
  .footer-logo img { height: 32px; width: 32px; }
  .footer-trust-logos { gap: 32px; row-gap: 16px; }
}
.trust-strip-inner {
  max-width: 1056px;
  margin: 0 auto;
  text-align: center;
}
.trust-strip-label {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--gray-70);
  margin-bottom: 32px;
}
.trust-strip-label-secondary {
  margin-top: 56px;
}
.trust-logos {
  /* Flex with justify-content: space-evenly distributes the free space
     in equal portions between every pair of logos AND on the outsides.
     Unlike "logo centres equidistant", this guarantees the visible
     EDGE-to-edge gap between adjacent logos is identical, regardless
     of how wide each logo glyph happens to be. Max-width keeps the
     gaps tight rather than ocean-wide on a 1056-wide container. */
  display: flex;
  flex-wrap: wrap;
  justify-content: space-evenly;
  align-items: center;
  max-width: 720px;
  margin: 0 auto;
  row-gap: 32px;
}
.trust-logo {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 40px;
}
.trust-logo img {
  /* Explicit height (not max-height) so the 3CX SVG — which has viewBox
     but no width/height attributes — gets a defined size to scale from.
     Otherwise inside a flex container with width:auto it collapses to
     0x0. max-width caps the wider PNG logos. */
  height: 36px;
  width: auto;
  max-width: 180px;
  object-fit: contain;
  filter: grayscale(100%);
  opacity: 0.65;
  transition: filter 0.2s ease, opacity 0.2s ease;
  display: block;
}
.trust-logo:hover img {
  filter: grayscale(0%);
  opacity: 1;
}
.accred-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 16px;
  max-width: 1056px;
  margin: 0 auto;
}
.accred-item {
  padding: 28px 20px;
  border: 1px solid var(--gray-20);
  background: var(--white);
  text-align: center;
}
.accred-logo {
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 20px;
}
.accred-logo img {
  max-height: 56px;
  max-width: 160px;
  width: auto;
  height: auto;
  object-fit: contain;
  display: block;
}
.accred-title {
  font-size: 0.9375rem;
  font-weight: 600;
  color: var(--gray-100);
  letter-spacing: 0;
  margin-bottom: 6px;
  line-height: 1.3;
}
.accred-detail {
  font-size: 0.8125rem;
  color: var(--gray-70);
  line-height: 1.45;
}
@media (max-width: 700px) {
  .trust-strip { padding: 40px 24px 48px; }
  .trust-logos { row-gap: 24px; }
  .trust-strip-label-secondary { margin-top: 48px; }
}

/* ---------- PROBLEM RECOGNITION (homepage section 2) ---------- */

/* Two-column layout: list on the left, typographic kicker aside on the right.
   Restores visual weight to the right side without inventing new copy.
   The aside is decorative-only (aria-hidden) — the list itself carries meaning. */
.fit-grid {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 64px;
  align-items: start;
}
.fit-aside {
  padding-top: 8px;
  border-left: 1px solid var(--gray-20);
  padding-left: 32px;
}
.fit-aside .aside-num {
  font-family: var(--font);
  font-size: clamp(96px, 12vw, 160px);
  font-weight: 300;
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--gray-30);
  margin-bottom: 16px;
}
.fit-aside .aside-label {
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  text-transform: uppercase;
  color: var(--gray-70);
}
@media (max-width: 768px) {
  .fit-grid { grid-template-columns: 1fr; gap: 24px; }
  .fit-aside {
    border-left: none;
    border-top: 1px solid var(--gray-20);
    padding-left: 0;
    padding-top: 24px;
  }
  .fit-aside .aside-num { font-size: 96px; }
}

.problem-list {
  list-style: none;
  max-width: 720px;
  margin: 0 0 48px;
  padding: 0;
}

.problem-list li {
  padding: 16px 0;
  display: flex;
  align-items: flex-start;
  gap: 16px;
  font-size: 1.125rem;
  line-height: 1.5;
  color: var(--gray-100);
  border-bottom: 1px solid var(--gray-20);
}

.problem-list li:first-child {
  border-top: 1px solid var(--gray-20);
}

.problem-list li > svg.problem-icon {
  flex-shrink: 0;
  width: 20px;
  height: 20px;
  margin-top: 4px;
  color: var(--gray-70);
  fill: currentColor;
}

.problem-list a {
  color: var(--blue-60);
  border-bottom: 1px solid var(--blue-60);
  position: relative;
}

.problem-list a:hover {
  color: var(--blue-60-hover);
  border-bottom-color: var(--blue-60-hover);
}

/* Expand inline body-link tap targets to ~44px without changing layout.
   The ::before is invisible but extends the clickable area top/bottom so
   mobile taps don't have to land on the ~19-24px text glyphs precisely.
   Applied to inline links that sit in body prose where padding would
   disrupt line-height and break paragraph rhythm. */
.problem-list a::before,
.compare-anchor-note a::before,
.faq-answer-inner a::before,
.audit-notice a::before,
.founder-attribution a::before,
.outcomes a::before {
  content: '';
  position: absolute;
  inset: -12px -4px;
}
.compare-anchor-note a,
.faq-answer-inner a,
.audit-notice a,
.founder-attribution a,
.outcomes a {
  position: relative;
}

/* Inline body-prose links carry Blue 60 ink + 1px Blue 60 underline.
   Any <a> inside <p> or <li> within a <section> qualifies, unless it
   already carries a class (.btn, .email-cta, etc.) or an inline style
   (tel:/mailto: contact details that render as plain text). The
   .faq-answer-inner clause covers FAQ answers — the link sits directly
   in the div, with no <p> wrapper to match. */
section p a:not([class]):not([style]),
section li a:not([class]):not([style]),
.faq-answer-inner a {
  color: var(--blue-60);
  border-bottom: 1px solid var(--blue-60);
}
section p a:not([class]):not([style]):hover,
section li a:not([class]):not([style]):hover,
.faq-answer-inner a:hover {
  color: var(--blue-60-hover);
  border-bottom-color: var(--blue-60-hover);
}

/* ---------- NEED-PAYOFF OUTCOMES (homepage section 4) ---------- */
.outcomes {
  list-style: none;
  max-width: 720px;
  margin: 0 0 48px;
  padding: 0;
}

.outcomes li {
  padding: 20px 0 20px 32px;
  position: relative;
  font-size: 1.125rem;
  line-height: 1.5;
  color: var(--gray-100);
  border-bottom: 1px solid var(--gray-20);
}

.outcomes li:first-child {
  border-top: 1px solid var(--gray-20);
}

.outcomes li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 30px;
  width: 16px;
  height: 2px;
  background: var(--blue-60);
}

/* ---------- SPECIMEN BAND (oversized typographic ornament) ---------- */
.specimen-band {
  position: relative;
  overflow: hidden;
  background: var(--gray-100);
  color: var(--white);
  padding: 96px 32px;
  text-align: center;
}

/* Optional background <picture> — covers the band; scrim overlays for text legibility. */
.specimen-band > picture {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.specimen-band > picture img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.specimen-band::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(22, 22, 22, 0.65);
  z-index: 1;
  pointer-events: none;
}
/* Lift content above the scrim. */
.specimen-band > p,
.specimen-band > div {
  position: relative;
  z-index: 2;
}

.specimen-band .specimen {
  font-family: var(--font);
  font-weight: 300;
  font-size: clamp(96px, 18vw, 200px);
  line-height: 1;
  letter-spacing: -0.02em;
  margin: 0;
  color: var(--white);
}

/* Inline secondary unit on a specimen — e.g. "/ mo" after a price.
   Smaller and lighter than the main number so the price doesn't wrap. */
.specimen-band .specimen .unit {
  font-size: 0.3em;
  font-weight: 400;
  letter-spacing: 0.16px;
  vertical-align: middle;
  margin-left: 0.4em;
  color: var(--gray-30);
  white-space: nowrap;
}

.specimen-band .specimen-caption {
  margin-top: 24px;
  font-size: 0.875rem;
  font-weight: 400;
  letter-spacing: 0.16px;
  color: var(--gray-30);
  max-width: 540px;
  margin-left: auto;
  margin-right: auto;
  line-height: 1.5;
}

@media (max-width: 480px) {
  .specimen-band { padding: 64px 16px; }
}

/* Telephone-number variant: phone numbers are wider than prices,
   so shrink the specimen to fit on one line across all viewports.
   The min has to clear small mobile (320-375px) — "+44 7909 338388"
   is ~8em wide, so 32px min keeps it on one line at 375px after
   accounting for 16px side padding. */
.specimen-band[data-tone="tel"] .specimen {
  font-size: clamp(32px, 7vw, 88px);
  letter-spacing: -0.01em;
  max-width: 100%;
}
.specimen-band[data-tone="tel"] .specimen a {
  color: var(--white);
  text-decoration: none;
  border-bottom: none;
}
.specimen-band[data-tone="tel"] .specimen a:hover {
  color: var(--blue-10);
}

.specimen-band .specimen-eyebrow {
  display: inline-block;
  background: rgba(15, 98, 254, 0.15);
  color: var(--white);
  padding: 4px 8px;
  font-size: 0.75rem;
  font-weight: 400;
  letter-spacing: 0.32px;
  border-radius: 24px;
  margin: 0 0 32px;
  border: 1px solid rgba(255, 255, 255, 0.2);
}

/* ---------- QUALITY BAND (homepage three-cell service-standards band) ---------- */
.quality-band {
  position: relative;
  background: var(--gray-100);
  color: var(--white);
  padding: 96px 0 32px;
}

/* Reuse the site-wide .section-header pattern inside the dark band; only
   the text colours need overriding so the header stays readable. */
.quality-band .section-header h2 { color: var(--white); }
.quality-band .section-header p  { color: var(--gray-30); }
/* Hairline under the header on a dark ground: Gray 20 against
   Gray 100 reads twice as heavy as Gray 20 against Gray 10. Use
   Gray 80 instead so the perceptual weight matches the rest of
   the site's section-header underlines. */
.quality-band .section-header { border-bottom-color: var(--gray-80); }

/* .quality-band's section padding is 96px 0 (no horizontal inset) so
   the dark cell grid can extend edge-to-edge. The header container,
   though, needs the same horizontal inset as every other section's
   header — restore it here without touching the second .container
   that wraps .quality-grid-band. */
.quality-band > .container:first-of-type {
  padding-left: 32px;
  padding-right: 32px;
}
@media (max-width: 768px) {
  .quality-band > .container:first-of-type {
    padding-left: 16px;
    padding-right: 16px;
  }
}

.quality-grid-band {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1px;
  background: var(--gray-80);
}

.quality-cell {
  background: var(--gray-100);
  padding: 64px 32px 80px;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  /* container-type makes the cell a container so the .number font-size
     can scale to cell width with cqi units. Prevents the "SUB-15ms"
     overflow at narrow viewports. */
  container-type: inline-size;
}

.quality-cell .eyebrow {
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gray-50);
  margin: 0 0 40px;
}

.quality-cell .number {
  font-family: var(--font);
  font-weight: 300;
  /* 16cqi = 16% of cell inline-size. Caps at 110px on very wide cells. */
  font-size: clamp(40px, 16cqi, 110px);
  line-height: 1;
  letter-spacing: -0.02em;
  margin: 0 0 32px;
  color: var(--white);
  white-space: nowrap;
}

.quality-cell .caption {
  font-size: 14px;
  line-height: 1.6;
  color: var(--gray-30);
  letter-spacing: 0.16px;
  margin: 0;
  max-width: 32ch;
}

@media (max-width: 720px) {
  .quality-band { padding: 56px 0 16px; }
  .quality-grid-band { grid-template-columns: 1fr; }
  .quality-cell { padding: 40px 24px 48px; }
  .quality-cell .eyebrow { margin-bottom: 24px; }
  .quality-cell .number { font-size: clamp(48px, 18cqi, 96px); margin-bottom: 20px; }
}
