/* =====================================================================
   Tumi Hair — Homepage Prototype
   Shared stylesheet for V1 (Editorial) and V2 (Studio)
   Maps 1:1 to wordpress/design/design_system.md v1.0 tokens
   Variant differences live in `.variant-editorial` and `.variant-studio`
   body class scopes near the end of this file.
   ===================================================================== */

/* -----------------------------------------------------------------
   1. Design tokens (from design_system.md §2–§9)
   ----------------------------------------------------------------- */
:root {
  /* Colour — surfaces */
  --color-ink: #0E0E0E;
  --color-paper: #FAF7F2;
  --color-surface-clean: #FFFFFF;
  --color-surface-card: #E8E3DB;
  --color-surface-dark: #2A2A28;

  /* Colour — text & borders */
  --color-text-primary: #0E0E0E;
  --color-text-secondary: #5A5A58;
  --color-text-disabled: #A8A39B;
  --color-text-inverse: #FAF7F2;
  --color-border-subtle: #A8A39B;
  --color-border-emphasis: #0E0E0E;

  /* Colour — state */
  --color-state-error: #B0392A;
  --color-state-success: #3D6A5C;
  --color-focus-ring: #0E0E0E;
  --color-focus-ring-outer: #FFFFFF;
  --color-overlay-video: rgba(42, 42, 40, 0.35);

  /* Typography — families (overridable per page for V1 Avenir / V2 Tenor Sans variants) */
  --font-display: "Avenir Light", "Avenir Next LT Pro", "Nunito Sans", "HelveticaNeue-Light", -apple-system, BlinkMacSystemFont, sans-serif;
  --font-body: "Karla", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --font-wordmark: var(--font-display);

  /* Typography — weights */
  --font-weight-light: 300;
  --font-weight-regular: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-display: 300;       /* Avenir Light = 300. V2 Tenor Sans overrides to 400. */
  --font-weight-headline: 300;      /* Per-page override for headline weight */
  --tracking-wordmark: 0.32em;      /* Wide tracking for TUMI HAIR wordmark, art-deco feel */

  /* Typography — fluid scale (clamp 360px → 1440px viewport) */
  --font-size-display: clamp(2.5rem, 1.692rem + 3.59vw, 4.5rem);
  --font-size-h1: clamp(2rem, 1.596rem + 1.79vw, 3rem);
  --font-size-h2: clamp(1.625rem, 1.373rem + 1.12vw, 2.25rem);
  --font-size-h3: clamp(1.25rem, 1.149rem + 0.45vw, 1.5rem);
  --font-size-h4: clamp(1.0625rem, 1.037rem + 0.11vw, 1.125rem);
  --font-size-pullquote: clamp(1.375rem, 1.173rem + 0.9vw, 1.875rem);
  --font-size-body-lg: clamp(1.0625rem, 1.012rem + 0.22vw, 1.1875rem);
  --font-size-body: clamp(1rem, 0.975rem + 0.11vw, 1.0625rem);
  --font-size-body-sm: clamp(0.875rem, 0.85rem + 0.11vw, 0.9375rem);
  --font-size-caption: 0.8125rem;
  --font-size-eyebrow: 0.75rem;

  /* Typography — line-heights */
  --line-height-display: 1.05;
  --line-height-heading: 1.15;
  --line-height-tight: 1.25;
  --line-height-body: 1.65;
  --line-height-body-lg: 1.6;
  --line-height-ui: 1.3;
  --line-height-pullquote: 1.35;

  /* Typography — tracking */
  --tracking-display: -0.02em;
  --tracking-h1: -0.015em;
  --tracking-h2: -0.01em;
  --tracking-h3: -0.005em;
  --tracking-body: 0;
  --tracking-meta: 0.02em;
  --tracking-eyebrow: 0.12em;

  /* Spacing — fluid clamp */
  --space-3xs: 0.25rem;
  --space-2xs: 0.5rem;
  --space-xs: 0.75rem;
  --space-sm: clamp(1rem, 0.899rem + 0.45vw, 1.25rem);
  --space-md: clamp(1.25rem, 1.048rem + 0.9vw, 1.75rem);
  --space-lg: clamp(1.75rem, 1.447rem + 1.35vw, 2.5rem);
  --space-xl: clamp(2.5rem, 1.894rem + 2.69vw, 4rem);
  --space-2xl: clamp(4rem, 3.192rem + 3.59vw, 6rem);
  --space-3xl: clamp(6rem, 4.385rem + 7.18vw, 10rem);

  /* Layout */
  --container-max: 1152px;
  --content-narrow: 720px;
  --content-medium: 920px;

  /* Border radius */
  --radius-none: 0;
  --radius-xs: 2px;
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-pill: 999px;

  /* Shadow tokens (used sparingly per brand_guidelines §5) */
  --shadow-overlay-sm: 0 4px 12px rgba(14, 14, 14, 0.06);
  --shadow-overlay-md: 0 12px 32px rgba(14, 14, 14, 0.12);
  --shadow-focus: 0 0 0 2px var(--color-focus-ring-outer), 0 0 0 4px var(--color-focus-ring);

  /* Motion */
  --duration-fast: 120ms;
  --duration-base: 150ms;
  --duration-slow: 400ms;
  --duration-slower: 600ms;
  --ease-standard: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-sharp: cubic-bezier(0.83, 0, 0.17, 1);
  --translate-reveal: 12px;

  /* Z-index */
  --z-sticky: 100;
  --z-overlay: 1000;
  --z-modal: 1100;
}

/* -----------------------------------------------------------------
   1b. Approved variant — V3 (Tenor Sans). Ported from the v3.html
   inline :root override so the WordPress build matches the approved
   prototype. Overrides the V1 Avenir/Nunito defaults above.
   ----------------------------------------------------------------- */
:root {
  --font-display: "Tenor Sans", "Marcellus", "Cormorant Garamond", Georgia, serif;
  --font-body: "Karla", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --font-wordmark: var(--font-display);
  --font-weight-headline: 400;   /* Tenor Sans is single-weight 400 */
  --font-weight-display: 400;
  --font-weight-light: 400;      /* prevent Tenor Sans from synth-thinning */
  --tracking-wordmark: 0.42em;   /* wider tracking — Tenor Sans is broader than Avenir Light */
}

/* -----------------------------------------------------------------
   2. Reset + base
   ----------------------------------------------------------------- */
*,
*::before,
*::after { box-sizing: border-box; }

html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--color-paper);
  color: var(--color-text-primary);
  font-family: var(--font-body);
  font-size: var(--font-size-body);
  line-height: var(--line-height-body);
  font-weight: var(--font-weight-regular);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

img, svg, video { display: block; max-width: 100%; height: auto; }

img { font-style: italic; }

a { color: inherit; text-decoration-thickness: 1px; text-underline-offset: 3px; }

button {
  font-family: inherit;
  font-size: inherit;
  cursor: pointer;
  border: 0;
  background: transparent;
  color: inherit;
}

/* Focus state — visible across all surfaces */
:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
  border-radius: var(--radius-xs);
}

/* Tabular figures for prices, hours, phone */
.has-tabular-nums,
table,
.location-card__phone {
  font-variant-numeric: tabular-nums lining-nums;
}

/* -----------------------------------------------------------------
   3. Typography
   ----------------------------------------------------------------- */
h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: var(--font-weight-headline);
  line-height: var(--line-height-heading);
  margin: 0 0 var(--space-md);
  color: var(--color-text-primary);
}

h1 {
  font-size: var(--font-size-h1);
  letter-spacing: var(--tracking-h1);
}

h2 {
  font-size: var(--font-size-h2);
  letter-spacing: var(--tracking-h2);
}

h3 {
  font-size: var(--font-size-h3);
  letter-spacing: var(--tracking-h3);
  line-height: var(--line-height-tight);
}

.entry-content .pricing-subheading.wp-block-heading {
  margin-top: var(--space-2xl);
  margin-block-start: var(--space-2xl);
}

h4 {
  font-size: var(--font-size-h4);
  font-family: var(--font-body);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-tight);
}

p { margin: 0 0 var(--space-md); }
p:last-child { margin-bottom: 0; }

/* WordPress layout-reset override.
   FSE layout support emits `:root :where(.is-layout-flow|constrained) > *
   { margin-block: 0 }` at (0,1,0) specificity, which out-specifies bare
   element selectors like `p`/`h1` (0,0,1) and zeroes their margins. With
   blockGap also at 0, no spacing survives. Re-assert the prototype's rhythm
   at (0,1,1) via a :root prefix so the element margins win on the frontend
   and in the editor canvas. (WP's own > :last-child rule is (0,2,0) and still
   correctly removes the trailing margin.) */
:root h1,
:root h2,
:root h3,
:root h4,
:root p {
  margin-block-end: var(--space-md);
}

.lead {
  font-size: var(--font-size-body-lg);
  line-height: var(--line-height-body-lg);
}

/* Eyebrow */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
  font-family: var(--font-body);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
  text-transform: uppercase;
  letter-spacing: var(--tracking-eyebrow);
  color: var(--color-text-primary);
  opacity: 0.7;
  margin-bottom: var(--space-md);
}
.eyebrow::before {
  content: "";
  display: inline-block;
  width: 24px;
  height: 1px;
  background: currentColor;
  opacity: 0.8;
}
.eyebrow--on-dark { color: var(--color-text-inverse); opacity: 0.85; }

/* Pull quote */
.pullquote {
  font-family: var(--font-display);
  font-style: italic;
  font-size: var(--font-size-pullquote);
  line-height: var(--line-height-pullquote);
  font-weight: var(--font-weight-medium);
  letter-spacing: -0.005em;
  position: relative;
  padding-left: var(--space-xl);
  max-width: 38ch;
  margin: 0;
}
.pullquote::before {
  content: "\201C";
  position: absolute;
  left: 0;
  top: -0.2em;
  font-size: 4rem;
  line-height: 1;
  color: var(--color-text-disabled);
  font-family: var(--font-display);
}
.pullquote__cite {
  display: block;
  margin-top: var(--space-sm);
  font-family: var(--font-body);
  font-style: normal;
  font-size: var(--font-size-caption);
  letter-spacing: var(--tracking-meta);
  color: var(--color-text-secondary);
  font-weight: var(--font-weight-regular);
}

/* -----------------------------------------------------------------
   4. Layout primitives
   ----------------------------------------------------------------- */
.container {
  max-width: var(--container-max);
  margin: 0 auto;
  padding-inline: var(--space-md);
}

@media (min-width: 1024px) {
  .container { padding-inline: var(--space-xl); }
}

.section {
  padding-block: var(--space-2xl);
}

.entry-content > .alignfull.section {
  border-bottom: 1px solid rgba(168, 163, 155, 0.5);
}

.entry-content > .alignfull.section:has(.editorial-2col) {
  border-bottom: 0;
}

.entry-content > .alignfull.section.primary-cta-band {
  border-bottom: 0;
}

.page-id-26 .entry-content > .alignfull.section:nth-of-type(2),
.page-id-26 .entry-content > .alignfull.section:nth-of-type(3) {
  padding-top: var(--space-3xl);
}

.page-id-26 .entry-content > .alignfull.section:nth-of-type(2) .hairline {
  margin-top: var(--space-2xl);
}

.page-id-26 .entry-content > .alignfull.section:nth-of-type(3) {
  border-bottom: 0;
}

.section--tight { padding-block: var(--space-xl); }

.section--paper { background: var(--color-paper); }
.section--mist { background: var(--color-surface-card); }
.section--ash { background: var(--color-surface-dark); color: var(--color-text-inverse); }
.section--ash h1, .section--ash h2, .section--ash h3 { color: var(--color-text-inverse); }

.entry-content > .alignfull.section:has(+ .alignfull.section.primary-cta-band) {
  background: var(--color-surface-clean);
}

.hairline {
  height: 1px;
  background: var(--color-border-subtle);
  opacity: 0.5;
  margin: var(--space-xl) 0 0;
  border: 0;
}

.narrow { max-width: var(--content-narrow); }
.medium { max-width: var(--content-medium); }

/* -----------------------------------------------------------------
   5. Buttons (design_system.md §10.1)
   ----------------------------------------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2xs);
  padding: var(--space-sm) var(--space-lg);
  font-family: var(--font-body);
  font-size: var(--font-size-body);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-ui);
  letter-spacing: 0.005em;
  border-radius: var(--radius-sm);
  text-decoration: none;
  min-height: 44px;
  transition: background-color var(--duration-base) var(--ease-standard),
              color var(--duration-base) var(--ease-standard),
              border-color var(--duration-base) var(--ease-standard);
  cursor: pointer;
  border: 1px solid transparent;
  white-space: nowrap;
}

.btn--primary {
  background: var(--color-ink);
  color: var(--color-paper);
}
.btn--primary:hover { background: #1A1A1A; }

.btn--secondary {
  background: transparent;
  color: var(--color-ink);
  border-color: var(--color-ink);
}
.btn--secondary:hover { background: var(--color-ink); color: var(--color-paper); }

.btn--inverse {
  background: var(--color-paper);
  color: var(--color-ink);
}
.btn--inverse:hover { background: var(--color-surface-clean); }

.btn--ghost-inverse {
  background: transparent;
  color: var(--color-paper);
  border-color: var(--color-paper);
}
.btn--ghost-inverse:hover { background: var(--color-paper); color: var(--color-ink); }

/* Paired CTA + cancellation strip (design_system.md §10.12) */
.cta-paired {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-2xs);
}
.cta-paired__row { display: flex; flex-wrap: wrap; gap: var(--space-sm); align-items: center; }
.cta-paired__policy {
  font-size: var(--font-size-caption);
  color: var(--color-text-secondary);
  letter-spacing: var(--tracking-meta);
  margin: 0;
}
.cta-paired__policy a { color: inherit; }
.cta-paired--on-dark .cta-paired__policy { color: var(--color-text-inverse); opacity: 0.8; }

.pricing-link {
  margin-top: var(--space-lg);
}

/* Inline link */
.inline-link {
  color: var(--color-ink);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  transition: text-decoration-thickness var(--duration-fast) var(--ease-standard);
}
.inline-link:hover { text-decoration-thickness: 2px; }
.section--ash .inline-link { color: var(--color-paper); }

/* -----------------------------------------------------------------
   6. Header
   ----------------------------------------------------------------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
  background: var(--color-ink);
  color: var(--color-text-inverse);
  border-bottom: 1px solid transparent;
  transition: border-color var(--duration-base) var(--ease-standard),
              box-shadow var(--duration-base) var(--ease-standard),
              transform var(--duration-base) var(--ease-standard);
  will-change: transform;
}
.site-header.is-stuck {
  border-bottom-color: rgba(255, 255, 255, 0.08);
  box-shadow: var(--shadow-overlay-sm);
}
/* Headroom: slide the bar out of view on scroll-down, back in on scroll-up. */
.site-header.is-hidden {
  transform: translateY(-100%);
}
@media (prefers-reduced-motion: reduce) {
  .site-header.is-hidden { transform: none; }
}

.site-header__inner {
  display: flex;
  align-items: center;
  padding-block: var(--space-sm);
  gap: var(--space-md);
}

.site-logo {
  display: inline-flex;
  align-items: center;
  gap: var(--space-sm);
  text-decoration: none;
  color: var(--color-text-inverse);
  line-height: 1;
}
.site-logo__star {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  color: currentColor;
  flex-shrink: 0;
}
.site-logo__star svg { width: 100%; height: 100%; }
.site-logo__wordmark {
  font-family: var(--font-wordmark);
  font-weight: var(--font-weight-light);
  font-size: 1.0625rem;
  letter-spacing: var(--tracking-wordmark);
  text-transform: uppercase;
  white-space: nowrap;
}
@media (min-width: 600px) {
  .site-logo__star { width: 40px; height: 40px; }
  .site-logo__wordmark { font-size: 1.1875rem; }
}

/* Primary navigation — core/navigation block (.wp-block-navigation.site-nav)
   restyled to match the bespoke header nav. The block's mobile-overlay
   breakpoint is pushed from its 600px default up to 1024px to match the
   design (inline links on desktop, hamburger + overlay below 1024). */
.site-nav { margin-left: auto; }

.site-nav .wp-block-navigation-item__content {
  font-size: var(--font-size-body-sm);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-inverse);
  text-decoration: none;
  letter-spacing: 0.01em;
  padding-block: var(--space-sm);
  transition: opacity var(--duration-base) var(--ease-standard);
}
.site-nav .wp-block-navigation-item__content:hover { opacity: 0.7; }
.site-nav .wp-block-navigation__submenu-icon { padding: 0 0 0 2px; opacity: 0.7; }
.site-nav .wp-block-navigation__submenu-icon svg { width: 10px; height: 10px; }

/* Desktop-only inline nav layout + dropdown. Scoped to >=1024 so these
   styles never leak into the mobile overlay panel (which core lays out as
   a stacked column). */
@media (min-width: 1024px) {
  .site-nav .wp-block-navigation__container { gap: var(--space-lg); }
  .site-nav .wp-block-navigation__submenu-container {
    min-width: 240px;
    background: var(--color-ink);
    border: 1px solid rgba(255, 255, 255, 0.08);
    padding: var(--space-2xs) 0;
    left: -12px;
  }
  .site-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
    width: 100%;
    padding: var(--space-2xs) var(--space-md);
    opacity: 0.85;
  }
  .site-nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover { opacity: 1; }
}

/* CTA button (native wp:button) — desktop only, ghost-on-dark variant */
.site-header .wp-block-buttons.site-header__cta-wrap { display: none; margin: 0; }
@media (min-width: 1024px) {
  .site-header .wp-block-buttons.site-header__cta-wrap { display: flex; }
}
/* NOTE: prefixed with .site-header to raise specificity to (0,4,0) so this
   ghost-on-dark treatment beats the generic .wp-block-button.btn--primary
   link rules further down the file (the "WP button compatibility" block,
   ~L1693), which are (0,3,0) and would otherwise win on source order and
   repaint this button solid ink-on-dark with a transparent (invisible) border. */
.site-header .site-header__cta.wp-block-button .wp-block-button__link {
  background: transparent;
  color: var(--color-text-inverse);
  border: 1px solid var(--color-text-inverse);
}
.site-header .site-header__cta.wp-block-button .wp-block-button__link:hover {
  background: var(--color-text-inverse);
  color: var(--color-ink);
}

/* Mobile: collapse the nav into the block overlay below 1024px */
@media (max-width: 1023.98px) {
  .site-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
    display: flex;
    color: var(--color-text-inverse);
  }
  .site-header .wp-block-navigation__responsive-container-open svg { fill: currentColor; }
  .site-header .wp-block-navigation__responsive-container:not(.is-menu-open):not(.always-shown) {
    display: none;
  }
}
@media (min-width: 1024px) {
  .site-header .wp-block-navigation__responsive-container-open { display: none; }
}
/* Open overlay panel. The .site-header prefix lifts specificity above core's
   `.wp-block-navigation:not(.has-background) ...is-menu-open` white-background
   rule (0,5,0) so the panel renders on the brand ink, not white. */
.site-header .wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open {
  background-color: var(--color-ink);
  color: var(--color-text-inverse);
  padding: var(--space-2xl) var(--space-lg);
  align-items: flex-start;
  height: 100vh;
  height: 100dvh;
}
.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
  width: 100%;
}
.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
  flex-direction: column;
  align-items: flex-start;
  width: 100%;
  gap: var(--space-sm);
}
.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
  color: var(--color-text-inverse);
  font-size: var(--font-size-body);
}
.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-close {
  color: var(--color-text-inverse);
}
/* Submenus expand inline within the overlay — strip the desktop dropdown box. */
.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
  background: transparent;
  border: 0;
  min-width: 0;
  left: 0;
  padding-left: var(--space-md);
}
/* Consistent left alignment for every level of the stacked overlay menu. */
.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container,
.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item {
  align-items: flex-start;
  justify-content: flex-start;
  text-align: left;
}

/* -----------------------------------------------------------------
   7. Hero (design_system.md §10.6)
   ----------------------------------------------------------------- */
.hero {
  position: relative;
  isolation: isolate;
  min-height: 70vh;
  display: flex;
  align-items: flex-end;
  background: var(--color-surface-dark);
  overflow: hidden;
}
.wp-block-cover.hero {
  padding-inline: 0;
}
@media (min-width: 1024px) {
  .hero { min-height: 80vh; }
}

.hero__media,
.hero__media::after {
  position: absolute;
  inset: 0;
}
.hero__media {
  z-index: -2;
}
.hero__media::after {
  content: "";
  z-index: 1;
  background: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0.35) 0%,
    rgba(0, 0, 0, 0.60) 50%,
    rgba(0, 0, 0, 0.80) 100%
  );
}

.hero__media img,
.hero__media video {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hero__content {
  width: 100%;
  padding-block: var(--space-2xl);
  color: var(--color-text-inverse);
}

/* Core Cover content can opt out of the theme's normal block centering on
   extra-wide screens. Keep the homepage hero copy on the same grid as the
   header logo and site containers. */
.wp-block-cover.hero .wp-block-cover__inner-container {
  width: 100%;
}

.wp-block-cover.hero .wp-block-cover__inner-container > .container.hero__content {
  max-width: var(--container-max);
  margin-left: auto;
  margin-right: auto;
  padding-inline: var(--space-md);
}

@media (min-width: 1024px) {
  .wp-block-cover.hero .wp-block-cover__inner-container > .container.hero__content {
    width: min(var(--container-max), 100vw);
    margin-left: max(0px, calc((100vw - var(--container-max)) / 2));
    margin-right: 0;
    padding-inline: var(--space-xl);
  }
}

.hero__eyebrow {
  color: var(--color-text-inverse);
  opacity: 0.85;
}

.hero__h1 {
  font-family: var(--font-display);
  font-size: var(--font-size-display);
  line-height: var(--line-height-display);
  letter-spacing: var(--tracking-display);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-inverse);
  margin: 0 0 var(--space-md);
  max-width: 18ch;
}

.hero__subhead {
  font-size: var(--font-size-body-lg);
  line-height: var(--line-height-body-lg);
  color: var(--color-text-inverse);
  opacity: 0.92;
  max-width: 36ch;
  margin: 0 0 var(--space-lg);
}

/* -----------------------------------------------------------------
   8. Value Prop (homepage 4.2)
   ----------------------------------------------------------------- */
.value-prop {
  text-align: center;
}
.value-prop h2 {
  margin-bottom: var(--space-lg);
}
.value-prop__body {
  max-width: var(--content-narrow);
  margin-inline: auto;
  padding-top: var(--space-sm);
  font-size: var(--font-size-body-lg);
  line-height: var(--line-height-body-lg);
}
.value-prop__image {
  margin-block-end: var(--space-xl);
  aspect-ratio: 16 / 9;
  overflow: hidden;
}
.value-prop__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* -----------------------------------------------------------------
   9. Services Overview (homepage 4.3, design_system.md §10.7)
   ----------------------------------------------------------------- */
.service-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg);
  margin-top: var(--space-xl);
}
@media (min-width: 600px) {
  .service-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .service-grid { grid-template-columns: repeat(3, 1fr); }
}

.service-tile {
  display: block;
  min-height: clamp(360px, 38vw, 520px);
  background: var(--color-ink);
  border: 1px solid var(--color-border-subtle);
  border-color: rgba(168, 163, 155, 0.4);
  text-decoration: none;
  color: var(--color-text-inverse);
  overflow: hidden;
  transition: border-color var(--duration-base) var(--ease-standard);
  position: relative;
}
.service-tile::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(
    to bottom,
    rgba(14, 14, 14, 0.08) 0%,
    rgba(14, 14, 14, 0.26) 42%,
    rgba(14, 14, 14, 0.82) 100%
  );
  transition: background var(--duration-base) var(--ease-standard);
}
.service-tile:hover {
  border-color: rgba(168, 163, 155, 0.7);
}
.service-tile:hover::after,
.service-tile:focus-within::after {
  background: linear-gradient(
    to bottom,
    rgba(14, 14, 14, 0.18) 0%,
    rgba(14, 14, 14, 0.46) 38%,
    rgba(14, 14, 14, 0.90) 100%
  );
}

.service-tile__image {
  position: absolute;
  inset: 0;
  z-index: 0;
  background: var(--color-surface-dark);
}
.service-tile__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--duration-slower) var(--ease-standard);
}
.service-tile:hover .service-tile__image img,
.service-tile:focus-within .service-tile__image img {
  transform: scale(1.04);
}

.service-tile__body {
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  z-index: 2;
  padding: var(--space-lg);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  transform: translateY(calc(100% - 5.75rem));
  transition: transform var(--duration-slower) var(--ease-standard);
}
.service-tile:hover .service-tile__body,
.service-tile:focus-within .service-tile__body {
  transform: translateY(0);
}
.service-tile__body .eyebrow {
  color: var(--color-text-inverse);
  opacity: 0.78;
}
.service-tile__title {
  font-size: var(--font-size-h3);
  margin: 0 0 var(--space-xs);
  color: var(--color-text-inverse);
}
.service-tile__title a {
  color: inherit;
  text-decoration-color: currentColor;
}
.service-tile__desc {
  font-size: var(--font-size-body-sm);
  color: rgba(255, 255, 255, 0.86);
  margin: 0;
  max-width: 34ch;
}
.service-tile__chevron {
  position: absolute;
  bottom: var(--space-md);
  right: var(--space-md);
  opacity: 0;
  transition: opacity var(--duration-base) var(--ease-standard),
              transform var(--duration-base) var(--ease-standard);
  transform: translateX(-4px);
}
.service-tile:hover .service-tile__chevron { opacity: 1; transform: translateX(0); }

.services-overview__footer {
  grid-column: 1 / -1;
  justify-content: center;
  gap: var(--space-sm);
  margin-top: calc(var(--space-3xl) + var(--space-md));
  text-align: center;
  border: 0;
  box-shadow: none;
}

.entry-content > .services-overview__footer {
  border: 0 !important;
}

.entry-content > .alignfull.section:has(+ .services-overview__footer),
.entry-content > .alignfull.section:has(.service-grid) {
  border-bottom: 0;
}

/* -----------------------------------------------------------------
   10. Hair Spa Anchor (homepage 4.4, design_system.md §10.15)
   ----------------------------------------------------------------- */
.hair-spa {
  background: var(--color-surface-card);
}

.hair-spa__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
  align-items: stretch;
}
@media (min-width: 1024px) {
  .hair-spa__inner {
    grid-template-columns: minmax(0, 1.08fr) minmax(0, 1fr);
    gap: var(--space-2xl);
  }
}

.hair-spa__image {
  aspect-ratio: 4 / 5;
  min-height: 420px;
  background: var(--color-paper);
  overflow: hidden;
}
@media (min-width: 1024px) {
  .hair-spa__image {
    aspect-ratio: auto;
    min-height: 100%;
  }
}
.hair-spa__image img { width: 100%; height: 100%; object-fit: cover; }

.hair-spa__content {
  max-width: 56ch;
  align-self: center;
}

.hair-spa__body {
  font-size: var(--font-size-body);
  line-height: var(--line-height-body);
}

/* -----------------------------------------------------------------
   11. Trust Strip (homepage 4.5, design_system.md §10.8)
   ----------------------------------------------------------------- */
.trust-strip { background: var(--color-surface-card); }

.trust-strip > .container > .eyebrow {
  display: flex;
  justify-content: center;
  width: fit-content;
  margin-inline: auto;
}

.trust-strip__heading {
  text-align: center;
  max-width: 24ch;
  margin: 0 auto var(--space-xl);
}

.trust-stats {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-lg);
  margin-bottom: var(--space-xl);
}
@media (min-width: 1024px) {
  .trust-stats { grid-template-columns: repeat(4, 1fr); }
}

.stat {
  text-align: center;
  padding: var(--space-md) var(--space-sm);
}
.stat__number {
  font-family: var(--font-display);
  font-size: var(--font-size-h1);
  font-weight: var(--font-weight-light);
  line-height: 1.05;
  letter-spacing: 0.02em;
  display: block;
  margin-bottom: var(--space-xs);
}
.stat__label {
  font-family: var(--font-body);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--color-text-secondary);
  display: block;
}

.trust-strip__pullquote {
  max-width: 64ch;
  margin: 0 auto var(--space-xl);
  text-align: center;
  padding: 0;
}
.trust-strip__pullquote .pullquote {
  max-width: none;
  padding-left: 0;
  margin-inline: auto;
  font-family: var(--font-body);
  font-size: clamp(1.125rem, 1.025rem + 0.45vw, 1.375rem);
  line-height: 1.55;
  font-weight: var(--font-weight-regular);
  letter-spacing: 0;
  color: var(--color-text-primary);
}
.trust-strip__pullquote .pullquote::before {
  position: static;
  display: block;
  margin: 0 auto var(--space-xs);
  font-size: 2.25rem;
  line-height: 0.8;
}
.trust-strip__pullquote .pullquote__cite {
  max-width: 48ch;
  margin-inline: auto;
}

.supplier-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: var(--space-lg);
  margin-top: var(--space-2xl);
  padding-top: var(--space-xl);
  border-top: 1px solid rgba(168, 163, 155, 0.5);
}
.supplier-row__logo {
  display: inline-flex;
  align-items: center;
  margin: 0;
  font-family: var(--font-display);
  font-size: 0.9375rem;
  font-weight: var(--font-weight-light);
  line-height: 1.1;
  letter-spacing: 0.18em;
  color: var(--color-text-primary);
  opacity: 0.55;
  text-transform: uppercase;
  white-space: nowrap;
}
.supplier-row > .supplier-row__logo,
.supplier-row > p.supplier-row__logo {
  margin: 0 !important;
  margin-block: 0 !important;
}

/* -----------------------------------------------------------------
   12. Team Teaser (homepage 4.6, design_system.md §10.9)
   ----------------------------------------------------------------- */
.team-teaser__intro {
  max-width: 56ch;
  margin-bottom: var(--space-xl);
}

.team-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg);
  margin-bottom: var(--space-xl);
}
.team-teaser .wp-block-buttons {
  margin-top: var(--space-lg);
}
@media (min-width: 600px) {
  .team-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .team-grid { grid-template-columns: repeat(4, 1fr); }
}

.team-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
}
.team-card__image {
  aspect-ratio: 4 / 5;
  background: var(--color-surface-card);
  overflow: hidden;
  margin-bottom: var(--space-md);
}
.team-card__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--duration-slower) var(--ease-standard);
}
.team-card:hover .team-card__image img { transform: scale(1.03); }

.team-card__name {
  font-family: var(--font-display);
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-semibold);
  margin: 0 0 var(--space-3xs);
}
.team-card__name a {
  color: inherit;
  text-decoration: none;
}
.team-card__role {
  font-family: var(--font-body);
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-secondary);
  letter-spacing: var(--tracking-meta);
  margin: 0;
}
.team-card__bio {
  margin-top: var(--space-sm);
  color: var(--color-text-secondary);
}
.team-card__bio p {
  margin: 0 0 var(--space-sm);
}
.team-card__bio p:last-child {
  margin-bottom: 0;
}

/* -----------------------------------------------------------------
   Staff single
   ----------------------------------------------------------------- */
.staff-profile {
  padding-block: var(--space-3xl);
}
.staff-profile__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
}
.staff-profile__media {
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--color-surface-card);
}
.staff-profile__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.staff-profile__content {
  align-self: center;
  max-width: 46rem;
}
.staff-profile__name {
  margin: 0 0 var(--space-xs);
  font-family: var(--font-display);
  font-size: var(--font-size-display);
  line-height: var(--line-height-display);
  font-weight: var(--font-weight-medium);
}
.staff-profile__role {
  margin: 0 0 var(--space-md);
  color: var(--color-text-secondary);
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-medium);
  letter-spacing: var(--tracking-meta);
  text-transform: uppercase;
}
.staff-profile__contact {
  display: flex;
  flex-direction: column;
  gap: var(--space-3xs);
  margin: 0 0 var(--space-lg);
  padding: 0;
  list-style: none;
}
.staff-profile__contact a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 0.18em;
}
.staff-profile__bio {
  color: var(--color-text-secondary);
}
.staff-profile__bio p {
  margin: 0 0 var(--space-md);
}
.staff-profile__bio p:last-child {
  margin-bottom: 0;
}
@media (min-width: 900px) {
  .staff-profile__inner {
    grid-template-columns: minmax(320px, 0.85fr) minmax(0, 1.15fr);
    gap: var(--space-2xl);
    align-items: center;
  }
}

/* -----------------------------------------------------------------
   13. Community Block (homepage 4.7)
   ----------------------------------------------------------------- */
.community__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
}
@media (min-width: 1024px) {
  .community__inner {
    grid-template-columns: 1fr 1.2fr;
    gap: var(--space-2xl);
    align-items: center;
  }
}

/* -----------------------------------------------------------------
   14. Blog Card (design_system.md §10.10)
   ----------------------------------------------------------------- */
.blog-card {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
}
.blog-card__image {
  aspect-ratio: 16 / 9;
  background: var(--color-surface-card);
  overflow: hidden;
  margin-bottom: var(--space-md);
}
.blog-card__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--duration-slower) var(--ease-standard);
}
.blog-card:hover .blog-card__image img { transform: scale(1.03); }

.blog-card__title {
  font-family: var(--font-display);
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-tight);
  margin: 0 0 var(--space-xs);
}
.blog-card__excerpt {
  font-size: var(--font-size-body-sm);
  color: var(--color-text-secondary);
  margin: 0 0 var(--space-sm);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.blog-card__meta {
  font-size: var(--font-size-caption);
  color: var(--color-text-secondary);
  letter-spacing: var(--tracking-meta);
}

.blog-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
  margin-bottom: var(--space-xl);
}
@media (min-width: 600px) {
  .blog-grid { grid-template-columns: repeat(2, 1fr); gap: var(--space-lg); }
}
@media (min-width: 1024px) {
  .blog-grid { grid-template-columns: repeat(3, 1fr); }
}

/* -----------------------------------------------------------------
   Blog archive
   ----------------------------------------------------------------- */
.blog-archive {
  width: min(100%, 1080px);
}
.blog-archive > .wp-block-heading {
  margin-bottom: var(--space-xl);
}
.blog-archive__list {
  display: grid;
  gap: var(--space-xl);
}
.blog-archive__item {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg);
  padding: var(--space-md);
  border: 1px solid rgba(35, 31, 32, 0.12);
  background: rgba(255, 255, 255, 0.16);
}
.blog-archive__image {
  aspect-ratio: 16 / 9;
  margin: 0;
  overflow: hidden;
  background: var(--color-surface-card);
}
.blog-archive__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.blog-archive__content {
  max-width: 46rem;
  padding: 0 var(--space-xs) var(--space-xs);
}
.blog-archive__date {
  margin: 0 0 var(--space-xs);
  color: var(--color-text-secondary);
  font-size: var(--font-size-caption);
  letter-spacing: var(--tracking-meta);
}
.blog-archive__title {
  margin: 0 0 var(--space-sm);
  max-width: 24ch;
  font-family: var(--font-display);
  line-height: var(--line-height-tight);
  text-transform: uppercase;
}
.blog-archive__title a {
  color: inherit;
  text-decoration: none;
}
.blog-archive__title a:hover,
.blog-archive__title a:focus-visible {
  text-decoration: underline;
  text-underline-offset: 0.18em;
}
.blog-archive__excerpt {
  max-width: 38rem;
  margin: 0;
  color: var(--color-text-secondary);
}
.blog-archive__excerpt .wp-block-post-excerpt__excerpt {
  margin: 0;
}
.blog-archive__excerpt .wp-block-post-excerpt__more-text {
  margin-top: var(--space-sm);
}
.blog-archive__pagination {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-2xs);
  margin-top: var(--space-xl);
  padding-top: var(--space-lg);
  border-top: 1px solid rgba(35, 31, 32, 0.16);
}
.blog-archive__pagination .wp-block-query-pagination-numbers {
  display: inline-flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-3xs);
  margin: 0;
}
.blog-archive__pagination .page-numbers,
.blog-archive__pagination .wp-block-query-pagination-previous,
.blog-archive__pagination .wp-block-query-pagination-next {
  display: inline-flex;
  min-width: 2.35rem;
  min-height: 2.35rem;
  align-items: center;
  justify-content: center;
  padding: 0 var(--space-xs);
  border: 1px solid rgba(35, 31, 32, 0.18);
  color: var(--color-text-primary);
  font-size: var(--font-size-caption);
  letter-spacing: var(--tracking-meta);
  line-height: 1;
  text-decoration: none;
  text-transform: uppercase;
}
.blog-archive__pagination .page-numbers.current {
  background: var(--color-surface-dark);
  border-color: var(--color-surface-dark);
  color: var(--color-text-inverse);
}
.blog-archive__pagination .dots {
  border-color: transparent;
  min-width: 1.5rem;
  padding-inline: 0;
}
.blog-archive__pagination .wp-block-query-pagination-previous,
.blog-archive__pagination .wp-block-query-pagination-next {
  min-width: auto;
  padding-inline: var(--space-sm);
}
.blog-archive__pagination .page-numbers:hover,
.blog-archive__pagination .page-numbers:focus-visible,
.blog-archive__pagination .wp-block-query-pagination-previous:hover,
.blog-archive__pagination .wp-block-query-pagination-previous:focus-visible,
.blog-archive__pagination .wp-block-query-pagination-next:hover,
.blog-archive__pagination .wp-block-query-pagination-next:focus-visible {
  border-color: var(--color-surface-dark);
  outline: 0;
}
@media (min-width: 780px) {
  .blog-archive__item {
    gap: var(--space-lg);
    padding: var(--space-lg);
  }
  .blog-archive__content {
    padding: 0 var(--space-md) var(--space-md);
  }
}

/* -----------------------------------------------------------------
   15. Instagram Feed (homepage 4.9, design_system.md §10.11)
   ----------------------------------------------------------------- */
.ig-feed__intro { max-width: 56ch; margin-bottom: var(--space-xl); }

.ig-feed__embed {
  min-height: 280px; /* CLS protection while the Smash Balloon feed loads */
}

.ig-feed__embed #sb_instagram {
  width: 100% !important;
  padding-bottom: 0 !important;
}

.ig-feed__embed #sb_instagram #sbi_images {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-xs) !important;
  float: none;
  padding: 0 !important;
}

.ig-feed__embed #sb_instagram .sbi_item {
  width: auto !important;
  float: none !important;
  padding: 0 !important;
  aspect-ratio: 1 / 1;
  background: var(--color-surface-card);
  overflow: hidden;
}

.ig-feed__embed #sb_instagram .sbi_photo {
  height: 100% !important;
  min-height: 0 !important;
}

@media (min-width: 1024px) {
  .ig-feed__embed { min-height: 320px; }
  .ig-feed__embed #sb_instagram #sbi_images { grid-template-columns: repeat(6, 1fr); }
}

.ig-feed__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-xs);
  min-height: 280px; /* CLS protection */
}
@media (min-width: 1024px) {
  .ig-feed__grid { grid-template-columns: repeat(6, 1fr); min-height: 320px; }
}

.ig-tile {
  aspect-ratio: 1 / 1;
  background: var(--color-surface-card);
  overflow: hidden;
  position: relative;
}
.ig-tile::after {
  content: "@tumihair";
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-body);
  font-size: var(--font-size-caption);
  font-weight: var(--font-weight-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-text-disabled);
}
.ig-tile img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  position: relative;
  z-index: 1;
}

/* -----------------------------------------------------------------
   16. Reviews widget container (homepage 4.10, §10.14)
   ----------------------------------------------------------------- */
.reviews-widget {
  background: var(--color-paper);
}
.reviews-widget > .container > .eyebrow {
  display: flex;
  justify-content: center;
  width: fit-content;
  margin-inline: auto;
}
.reviews-widget__heading { text-align: center; margin-bottom: var(--space-md); }
.reviews-widget__intro {
  text-align: center;
  max-width: 50ch;
  margin: 0 auto var(--space-xl);
  color: var(--color-text-secondary);
}
.reviews-widget__container {
  background: var(--color-surface-card);
  min-height: 320px; /* CLS protection — pre-reserve Elfsight widget height */
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-2xl) var(--space-lg);
  border: 1px dashed rgba(168, 163, 155, 0.6);
}
.reviews-widget__placeholder {
  text-align: center;
  max-width: 32ch;
  color: var(--color-text-secondary);
  font-size: var(--font-size-body-sm);
}
.reviews-widget__placeholder strong {
  display: block;
  font-family: var(--font-display);
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-semibold);
  color: var(--color-text-primary);
  margin-bottom: var(--space-xs);
}
.reviews-carousel {
  position: relative;
  margin-top: var(--space-xl);
}
.reviews-carousel__viewport {
  overflow: hidden;
}
.reviews-carousel__track {
  display: flex;
  gap: var(--space-md);
  scroll-behavior: smooth;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
}
.reviews-carousel__track::-webkit-scrollbar {
  display: none;
}
.review-card {
  flex: 0 0 calc((100% - (var(--space-md) * 2)) / 3);
  min-height: 320px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  background: var(--color-surface-clean);
  border: 1px solid rgba(168, 163, 155, 0.45);
  padding: var(--space-lg);
  scroll-snap-align: start;
}
.review-card__stars,
.review-modal__stars {
  font-size: var(--font-size-body-lg);
  letter-spacing: 0.08em;
  line-height: 1;
  margin-bottom: var(--space-md);
}
.review-card__copy {
  color: var(--color-text-secondary);
  line-height: var(--line-height-body-lg);
}
.review-card__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  margin-top: var(--space-lg);
}
.review-card__name {
  margin: 0;
  font-weight: var(--font-weight-semibold);
}
.review-card__more {
  border-bottom: 1px solid currentColor;
  color: var(--color-text-primary);
  font-size: var(--font-size-body-sm);
  padding: 0;
}
.reviews-carousel__controls {
  display: flex;
  justify-content: center;
  gap: var(--space-xs);
  margin-top: var(--space-lg);
}
.reviews-carousel__control {
  width: 44px;
  height: 44px;
  border: 1px solid var(--color-border-emphasis);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 1.5rem;
  line-height: 1;
}
.reviews-carousel__control:hover {
  background: var(--color-ink);
  color: var(--color-text-inverse);
}
.reviews-carousel__cta {
  display: flex;
  justify-content: center;
  margin-top: var(--space-lg);
}
.reviews-carousel__cta .btn-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: var(--space-xs) var(--space-lg);
  border: 1px solid var(--color-ink);
  text-decoration: none;
  font-weight: var(--font-weight-semibold);
}
.reviews-carousel__cta .btn-link:hover {
  background: var(--color-ink);
  color: var(--color-text-inverse);
}
.review-modal[hidden] {
  display: none;
}
html.review-modal-open {
  overflow: hidden;
}
.review-modal {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-md);
}
.review-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(14, 14, 14, 0.64);
}
.review-modal__dialog {
  position: relative;
  z-index: 1;
  width: min(720px, 100%);
  max-height: min(760px, 86vh);
  overflow: auto;
  background: var(--color-paper);
  padding: var(--space-xl);
  border: 1px solid rgba(168, 163, 155, 0.5);
}
.review-modal__close {
  position: absolute;
  top: var(--space-sm);
  right: var(--space-sm);
  width: 40px;
  height: 40px;
  border: 1px solid rgba(168, 163, 155, 0.5);
  font-size: 1.5rem;
  line-height: 1;
}
.review-modal__eyebrow {
  margin: 0 0 var(--space-xs);
  font-size: var(--font-size-eyebrow);
  text-transform: uppercase;
  letter-spacing: var(--tracking-eyebrow);
  color: var(--color-text-secondary);
}
.review-modal__title {
  margin-bottom: var(--space-sm);
}
.review-modal__body {
  color: var(--color-text-secondary);
}
.review-modal__image {
  margin: 0 0 var(--space-lg);
}
.review-modal__image img {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
}
@media (max-width: 899px) {
  .review-card {
    flex-basis: calc((100% - var(--space-md)) / 2);
  }
}
@media (max-width: 639px) {
  .review-card {
    flex-basis: 100%;
    min-height: 280px;
  }
  .review-modal__dialog {
    padding: var(--space-lg);
  }
}

/* -----------------------------------------------------------------
   17. Location / Hours / Map (homepage 4.11, §10.13)
   ----------------------------------------------------------------- */
.location-card__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
}
@media (min-width: 1024px) {
  .location-card__inner {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-2xl);
  }
}

.location-card__address {
  font-size: var(--font-size-body-lg);
  font-weight: var(--font-weight-medium);
  margin-bottom: var(--space-sm);
}
.location-card__directions {
  font-size: var(--font-size-body-sm);
  display: inline-block;
  margin-bottom: var(--space-lg);
}
.location-card__phone {
  font-family: var(--font-display);
  font-size: var(--font-size-h3);
  font-weight: var(--font-weight-semibold);
  text-decoration: none;
  color: var(--color-ink);
  display: inline-block;
  margin-bottom: var(--space-3xs);
}
.location-card__email {
  font-size: var(--font-size-body);
  display: block;
  margin-bottom: var(--space-lg);
}
.location-card__suburbs {
  font-size: var(--font-size-body);
  color: var(--color-text-secondary);
  margin-bottom: var(--space-lg);
  max-width: 50ch;
}
.location-card__hours {
  width: 100%;
  border-collapse: collapse;
  margin-bottom: var(--space-lg);
}
.location-card__hours caption {
  font-family: var(--font-body);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  text-align: left;
  margin-bottom: var(--space-sm);
  color: var(--color-text-primary);
  opacity: 0.7;
}
.location-card__hours tr { border-bottom: 1px solid rgba(168, 163, 155, 0.5); }
.location-card__hours tr:last-child { border-bottom: 0; }
.location-card__hours td {
  padding: var(--space-2xs) 0;
  font-size: var(--font-size-body);
  vertical-align: baseline;
}
.location-card__hours td:first-child { width: 50%; font-weight: var(--font-weight-medium); }
.location-card__hours td:last-child { text-align: right; font-variant-numeric: tabular-nums lining-nums; }
.location-card__hours .is-closed { color: var(--color-text-secondary); }

.location-card__map {
  background: var(--color-surface-card);
  aspect-ratio: 4 / 3;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px dashed rgba(168, 163, 155, 0.6);
  position: relative;
  overflow: hidden;
}
.location-card__map iframe {
  width: 100%;
  height: 100%;
  border: 0;
  filter: grayscale(100%);
}
.location-card__map-placeholder {
  text-align: center;
  color: var(--color-text-secondary);
  font-size: var(--font-size-body-sm);
  padding: var(--space-md);
}
.location-card__map-placeholder strong {
  display: block;
  font-family: var(--font-display);
  font-size: var(--font-size-h3);
  color: var(--color-text-primary);
  margin-bottom: var(--space-xs);
}

/* -----------------------------------------------------------------
   18. Primary Booking CTA Band (homepage 4.12)
   ----------------------------------------------------------------- */
.primary-cta-band {
  background: var(--color-surface-dark);
  color: var(--color-text-inverse);
}
.primary-cta-band__inner {
  max-width: var(--content-medium);
  margin-inline: auto;
  text-align: center;
}
.primary-cta-band__heading {
  color: var(--color-text-inverse);
  margin-bottom: var(--space-md);
}
.primary-cta-band__lead {
  font-size: var(--font-size-body-lg);
  line-height: var(--line-height-body-lg);
  color: var(--color-text-inverse);
  opacity: 0.92;
  max-width: 56ch;
  margin: 0 auto var(--space-xl);
}
.primary-cta-band .cta-paired {
  align-items: center;
  margin-inline: auto;
}
.primary-cta-band .cta-paired__row { justify-content: center; }
.primary-cta-band .cta-paired__policy {
  color: var(--color-text-inverse);
  opacity: 0.75;
  text-align: center;
}

/* -----------------------------------------------------------------
   19. Footer
   ----------------------------------------------------------------- */
.site-footer {
  background: var(--color-surface-dark);
  color: var(--color-text-inverse);
  padding-block: var(--space-2xl) var(--space-xl);
}
.site-footer a { color: var(--color-paper); text-decoration: none; }
.site-footer a:hover { opacity: 0.7; }

.footer-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-xl);
}
@media (min-width: 1024px) {
  .footer-columns { grid-template-columns: repeat(4, 1fr); gap: var(--space-lg); }
}

.footer-col__heading {
  font-family: var(--font-body);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
  text-transform: uppercase;
  letter-spacing: var(--tracking-eyebrow);
  color: var(--color-paper);
  opacity: 0.7;
  margin-bottom: var(--space-md);
}
.footer-col ul { list-style: none; padding: 0; margin: 0; }
.footer-col li { margin-bottom: var(--space-xs); font-size: var(--font-size-body-sm); }

.footer-logo {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-xs);
  margin-bottom: var(--space-md);
  color: var(--color-paper);
}
.footer-logo__star {
  width: 48px;
  height: 48px;
  display: inline-flex;
  color: currentColor;
}
.footer-logo__star svg { width: 100%; height: 100%; }
.footer-logo__wordmark {
  font-family: var(--font-wordmark);
  font-weight: var(--font-weight-light);
  font-size: 1.375rem;
  letter-spacing: var(--tracking-wordmark);
  text-transform: uppercase;
  display: block;
  line-height: 1;
}
.footer-logo__submark {
  font-family: var(--font-body);
  font-weight: var(--font-weight-regular);
  font-size: 0.6875rem;
  letter-spacing: 0.35em;
  text-transform: uppercase;
  opacity: 0.6;
  display: block;
  margin-top: var(--space-3xs);
}

.footer-supplier-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-md);
  padding: var(--space-lg) 0;
  border-top: 1px solid rgba(250, 247, 242, 0.15);
  border-bottom: 1px solid rgba(250, 247, 242, 0.15);
  margin: var(--space-xl) 0;
  justify-content: center;
}
.footer-supplier-row__logo {
  font-family: var(--font-display);
  font-size: 0.8125rem;
  font-weight: var(--font-weight-light);
  letter-spacing: 0.18em;
  color: var(--color-paper);
  opacity: 0.45;
  text-transform: uppercase;
  white-space: nowrap;
}

.footer-legal {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-md);
  justify-content: space-between;
  align-items: center;
  font-size: var(--font-size-caption);
  color: var(--color-paper);
  opacity: 0.6;
}

.footer-social { display: flex; gap: var(--space-md); }
.footer-social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  opacity: 0.7;
}
.footer-social a:hover { opacity: 1; }
.footer-social svg { width: 20px; height: 20px; }

/* Supplier row + social-links are now native blocks — align to bespoke look */
.footer-supplier-row .footer-supplier-row__logo { margin: 0; }
.footer-social.wp-block-social-links { gap: var(--space-md); margin: 0; padding: 0; }
.footer-social.wp-block-social-links .wp-block-social-link { margin: 0; padding: 0; }
.footer-social.wp-block-social-links .wp-block-social-link-anchor { opacity: 0.7; padding: 6px; }
.footer-social.wp-block-social-links .wp-block-social-link:hover .wp-block-social-link-anchor { opacity: 1; }
.footer-social.wp-block-social-links .wp-block-social-link svg { width: 20px; height: 20px; }

/* -----------------------------------------------------------------
   20. Scroll reveal (gated behind prefers-reduced-motion)
   ----------------------------------------------------------------- */
@media (prefers-reduced-motion: no-preference) {
  .reveal {
    opacity: 0;
    transform: translateY(var(--translate-reveal));
    transition: opacity var(--duration-slow) var(--ease-standard),
                transform var(--duration-slow) var(--ease-standard);
  }
  .reveal.is-visible {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    transition-duration: 0.001ms !important;
  }
  .hero__media video { display: none; }
}

/* ===================================================================
   VARIANT — STUDIO (used by V1 Avenir + V2 Tenor Sans)
   Sans-led, strict 12-col grid, tighter spacing, fewer photos,
   typography + space carry the weight, gallery-minimal mood.
   Both V1 (Avenir Light) and V2 (Tenor Sans Google alt) use this
   layout; difference lives in the per-page :root font overrides.
   =================================================================== */
/* Headings use the display font (Avenir Light / Tenor Sans) — set in inline :root override per page */
.variant-studio h2,
.variant-studio h3 {
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.variant-studio h2 {
  font-weight: var(--font-weight-headline);
  font-size: clamp(1.5rem, 1.25rem + 1.1vw, 2rem);
  line-height: 1.2;
}

.variant-studio h3 {
  font-weight: var(--font-weight-headline);
  font-size: clamp(1.125rem, 1.05rem + 0.4vw, 1.375rem);
  letter-spacing: 0.06em;
}

/* Hero — dominant video, minimal overlay copy (H1 only) */
.variant-studio .hero { min-height: 92vh; }
.variant-studio .hero__media::after {
  background: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0.30) 0%,
    rgba(0, 0, 0, 0.55) 50%,
    rgba(0, 0, 0, 0.78) 100%
  );
}
.variant-studio .hero__eyebrow,
.variant-studio .hero__subhead { display: block; }
.variant-studio .hero__h1 {
  font-family: var(--font-display);
  font-size: clamp(2.25rem, 1.5rem + 3.2vw, 4rem);
  font-weight: var(--font-weight-headline);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  max-width: 16ch;
}
.variant-studio .hero__content { padding-block: var(--space-xl); }

/* Tighter section padding everywhere */
.variant-studio .section { padding-block: var(--space-xl); }
.variant-studio .section--tight { padding-block: var(--space-lg); }

/* Value prop stays centred but tighter */
.variant-studio .value-prop { text-align: left; }
.variant-studio .value-prop__body {
  max-width: 62ch;
  margin-inline: 0;
  font-size: var(--font-size-body);
}

/* Services: image-led equal tiles with reveal copy. */
.variant-studio .service-tile { border: 1px solid rgba(168, 163, 155, 0.3); }
@media (min-width: 1024px) {
  .variant-studio .service-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    grid-auto-rows: 1fr;
    gap: var(--space-md);
    height: auto;
  }
  .variant-studio .service-tile {
    min-height: 470px;
  }
}
.variant-studio .service-tile__title {
  font-family: var(--font-body);
  font-weight: var(--font-weight-semibold);
  font-size: 1.0625rem;
  letter-spacing: -0.005em;
}

/* Hair Spa: typography-led, not image-heavy */
.variant-studio .hair-spa {
  background: var(--color-paper);
  border-top: 1px solid rgba(168, 163, 155, 0.4);
  border-bottom: 1px solid rgba(168, 163, 155, 0.4);
}
.variant-studio .hair-spa__image {
  aspect-ratio: 4 / 5;
  background: var(--color-surface-card);
}
@media (min-width: 1024px) {
  .variant-studio .hair-spa__inner {
    grid-template-columns: minmax(0, 1.08fr) minmax(0, 1fr);
    align-items: stretch;
  }
  .variant-studio .hair-spa__image {
    aspect-ratio: auto;
    min-height: 100%;
  }
}

/* Trust stats: bigger, gallery-grid */
.variant-studio .stat__number {
  font-family: var(--font-display);
  font-weight: var(--font-weight-light);
  font-size: clamp(2.5rem, 2rem + 2vw, 3.5rem);
  letter-spacing: 0.02em;
  text-transform: none;
}
.variant-studio .trust-strip__heading {
  font-family: var(--font-display);
  font-weight: var(--font-weight-headline);
  font-size: clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem);
  max-width: 36ch;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* Team grid: stricter, even spacing */
@media (min-width: 1024px) {
  .variant-studio .team-grid { grid-template-columns: repeat(4, 1fr); gap: var(--space-md); }
}
.variant-studio .team-card__name {
  font-family: var(--font-display);
  font-size: 1rem;
  font-weight: var(--font-weight-headline);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

/* Blog grid: tighter, monochrome */
.variant-studio .blog-card__title {
  font-family: var(--font-display);
  font-size: 1.125rem;
  font-weight: var(--font-weight-headline);
  line-height: 1.4;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

/* Primary CTA band: gallery-minimal */
.variant-studio .primary-cta-band__heading {
  font-family: var(--font-display);
  font-weight: var(--font-weight-headline);
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

/* Service tile titles in studio variant */
.variant-studio .service-tile__title {
  font-family: var(--font-display);
  font-weight: var(--font-weight-headline);
  font-size: 1.0625rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

/* ===================================================================
   SUBTLE STAR WATERMARK — the identity mark, used throughout
   the site at very low opacity per the brand identity request.
   =================================================================== */
.has-watermark {
  position: relative;
  isolation: isolate;
  overflow: hidden;
}
.has-watermark::after {
  content: "";
  position: absolute;
  top: 50%;
  right: -8%;
  width: clamp(280px, 38vw, 520px);
  height: clamp(280px, 38vw, 520px);
  transform: translateY(-50%);
  background-image: url("../images/tumi-ring-watermark.svg");
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  opacity: 0.06;
  pointer-events: none;
  z-index: 0;
}
.has-watermark--dark::after { filter: invert(1); opacity: 0.10; }
.has-watermark--left::after { right: auto; left: -10%; }
.has-watermark--centre::after { left: 50%; transform: translate(-50%, -50%); }
.has-watermark > * { position: relative; z-index: 1; }

/* Hero gets a centred subtle watermark behind the headline.
   Override .has-watermark > * { position: relative } for .hero__media so the
   video keeps its full-bleed absolute positioning behind the content. */
.hero.has-watermark::after {
  width: clamp(360px, 50vw, 700px);
  height: clamp(360px, 50vw, 700px);
  opacity: 0.08;
  filter: invert(1);
  top: 38%;
  right: auto;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 1;            /* sits above video media, below content */
}
.hero.has-watermark .hero__content { position: relative; z-index: 2; }
.hero.has-watermark .hero__media,
.hero.has-watermark .hero__media::after {
  position: absolute;
  inset: 0;
  z-index: auto;
}
.hero.has-watermark .hero__media { z-index: 0; }
.hero.has-watermark .hero__media::after { z-index: 1; }

/* Primary CTA band gets a watermark behind the heading */
.primary-cta-band.has-watermark::after {
  filter: invert(1);
  opacity: 0.07;
}

/* Decorative separator using the star — replaces hr.hairline where used */
.star-divider {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  margin: var(--space-xl) auto;
  max-width: 320px;
  color: var(--color-text-secondary);
  opacity: 0.55;
}
.star-divider::before,
.star-divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: currentColor;
}
.star-divider__mark {
  width: 24px;
  height: 24px;
  display: inline-flex;
  flex-shrink: 0;
}
.star-divider__mark svg { width: 100%; height: 100%; }

/* ============================================================
   Sub-page hero overlay — stronger than the home video overlay
   because the intro-image background is lighter / busier and the
   white hero copy needs more contrast against it.
   ============================================================ */
.hero--subpage .hero__media::after {
  background: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0.55) 0%,
    rgba(0, 0, 0, 0.70) 50%,
    rgba(0, 0, 0, 0.85) 100%
  );
}

/* ============================================================
   Prototype helper — greyed-out links for pages without copy yet.
   Applied to nav/footer/content links that point to "#" because
   the destination page hasn't been built. Click is blocked,
   visual is dimmed, cursor signals "unavailable".
   ============================================================ */
.nav-disabled,
.nav-disabled:hover,
.nav-disabled:focus {
  opacity: 0.4;
  cursor: not-allowed;
  pointer-events: none;
  text-decoration: none;
}

/* =====================================================================
   WordPress foundation — added during theme scaffold (Phase 5).
   Reset/box-sizing/body-margin/img already defined in section 2 above,
   so they are not duplicated here.
   ===================================================================== */

/* WP layout resets — prevent default block gaps stacking on top of the
   section padding the prototype already provides. */
.wp-site-blocks > * + *,
.wp-site-blocks .entry-content > * + *,
.is-layout-flow > * + * {
  margin-block-start: 0;
}

/* WP alignment classes */
.alignwide { max-width: var(--container-max); margin-left: auto; margin-right: auto; }
.alignfull { width: 100vw; max-width: 100vw; margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw); }

/* WP image block reset */
.wp-block-image { margin: 0; }
.wp-block-image img { max-width: 100%; height: auto; display: block; }
.service-tile__image.wp-block-image img,
.service-tile__image .wp-block-image img,
.service-tile__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* ---------------------------------------------------------------------
   WP button compatibility.
   wp-page-builder creates: div.wp-block-button.btn.btn--primary >
   a.wp-block-button__link.wp-element-button. The variant class lands on
   the wrapper, so reset the wrapper and apply .btn styling to the link.
   --------------------------------------------------------------------- */
.wp-block-button.btn {
  padding: 0;
  border: none;
  background: transparent;
  border-radius: 0;
  min-height: 0;
}
.wp-block-button.btn .wp-block-button__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2xs);
  padding: var(--space-sm) var(--space-lg);
  font-family: var(--font-body);
  font-size: var(--font-size-body);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-ui);
  letter-spacing: 0.005em;
  border-radius: var(--radius-sm);
  min-height: 44px;
  border: 1px solid transparent;
  text-decoration: none;
  white-space: nowrap;
  transition: background-color var(--duration-base) var(--ease-standard),
              color var(--duration-base) var(--ease-standard),
              border-color var(--duration-base) var(--ease-standard);
}
.wp-block-button.btn--primary .wp-block-button__link { background: var(--color-ink); color: var(--color-paper); }
.wp-block-button.btn--primary .wp-block-button__link:hover { background: #1A1A1A; }
.wp-block-button.btn--secondary .wp-block-button__link { background: transparent; color: var(--color-ink); border-color: var(--color-ink); }
.wp-block-button.btn--secondary .wp-block-button__link:hover { background: var(--color-ink); color: var(--color-paper); }
.wp-block-button.btn--inverse .wp-block-button__link { background: var(--color-paper); color: var(--color-ink); }
.wp-block-button.btn--inverse .wp-block-button__link:hover { background: var(--color-surface-clean); }
.wp-block-button.btn--ghost-inverse .wp-block-button__link { background: transparent; color: var(--color-paper); border-color: var(--color-paper); }
.wp-block-button.btn--ghost-inverse .wp-block-button__link:hover { background: var(--color-paper); color: var(--color-ink); }

.not-found__actions {
  gap: var(--space-sm);
}

/* Dark-section link safety — links inside dark groups inherit the global
   ink colour and would be invisible. Force light. */
.has-ash-background-color a:where(:not(.wp-element-button)):where(:not(.btn)),
.section--ash a:where(:not(.wp-element-button)):where(:not(.btn)),
.section--dark a:where(:not(.wp-element-button)):where(:not(.btn)) {
  color: var(--color-paper);
}

/* -----------------------------------------------------------------
   Native-block compatibility (Gutenberg page build)
   When the subpage hero background is a native core/image inside the
   absolutely-positioned .hero__media wrapper, the wp-block-image figure
   must fill the frame (the prototype used a bare <img>).
   ----------------------------------------------------------------- */
.hero__media .wp-block-image,
.hero__media figure.wp-block-image {
  position: absolute;
  inset: 0;
  margin: 0;
  width: 100%;
  height: 100%;
}
.hero__media .wp-block-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* =====================================================================
   Sub-page section layouts — ported from the approved sub-page
   prototypes' inline <style> blocks (haircuts, women's cuts, colour,
   about, contact). These were never captured during theme scaffold,
   which is why the matching block markup rendered as stacked/full-width.
   ===================================================================== */

/* --- Sub-page hero: centre the copy (base .hero is flex-end) --- */
.hero--subpage { min-height: 56vh; align-items: center; }
@media (min-width: 1024px) { .hero--subpage { min-height: 62vh; } }
.hero--subpage .hero__media {
  background:
    radial-gradient(circle at 30% 30%, rgba(120,110,100,0.55), rgba(35,30,28,0.95) 70%),
    var(--color-surface-dark);
}
.hero--subpage .hero__h1 { max-width: 22ch; }

/* --- Editorial two-column (image + text) --- */
.editorial-2col {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
  align-items: center;
}
@media (min-width: 900px) {
  .editorial-2col {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-2xl);
    align-items: stretch;
  }
  .editorial-2col--reverse > :first-child { order: 2; }
}
.editorial-2col__image { aspect-ratio: 4 / 5; overflow: hidden; }
.editorial-2col__image img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (min-width: 900px) {
  .editorial-2col__image {
    aspect-ratio: auto;
    min-height: 100%;
  }
}

/* --- Subservice stack: full-width rows, image one side / text the other --- */
.subservice-stack {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
  margin-top: var(--space-xl);
}
.subservice-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg);
  align-items: stretch;
  background: var(--color-paper);
  border: 1px solid rgba(168, 163, 155, 0.4);
  padding: var(--space-md);
}
@media (min-width: 760px) {
  .subservice-row {
    grid-template-columns: minmax(0, 1.18fr) minmax(0, 1fr);
    gap: var(--space-xl);
    min-height: 420px;
    padding: var(--space-lg);
  }
  .subservice-row--reverse > :first-child { order: 2; }
}
.subservice-row__image { aspect-ratio: 4 / 3; overflow: hidden; }
.subservice-row__image img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (min-width: 760px) {
  .subservice-row__image {
    aspect-ratio: auto;
    min-height: 100%;
  }
  .subservice-row > .wp-block-group:not(.subservice-row__image) {
    align-self: center;
    padding-block: var(--space-md);
  }
}
.subservice-row__title {
  font-family: var(--font-display);
  font-size: clamp(1.6rem, 1.3rem + 0.8vw, 2rem);
  letter-spacing: 0.04em;
  margin: 0 0 var(--space-sm);
  line-height: 1.2;
}
.subservice-row p { margin: 0 0 var(--space-sm); font-size: var(--font-size-body); }
.subservice-row__link {
  display: inline-block;
  margin-top: var(--space-sm);
  font-family: var(--font-body);
  font-size: var(--font-size-body-sm);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-ink);
  border-bottom: 1px solid currentColor;
  padding-bottom: 2px;
  text-decoration: none;
}

/* --- Subservice grid (service/category cards) --- */
.subservice-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-lg);
  margin-top: var(--space-xl);
}
@media (min-width: 720px) { .subservice-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1100px) { .subservice-grid { grid-template-columns: repeat(3, 1fr); } }
.subservice {
  display: flex;
  flex-direction: column;
  background: var(--color-paper);
  border: 1px solid rgba(168, 163, 155, 0.4);
  padding: var(--space-lg);
  text-decoration: none;
  color: inherit;
  transition: border-color var(--duration-base) var(--ease-standard),
              background-color var(--duration-base) var(--ease-standard);
}
.subservice:hover { border-color: var(--color-ink); background: #FBF8F3; }
.subservice__title {
  font-family: var(--font-display);
  font-size: 1.5rem;
  letter-spacing: 0.04em;
  margin: 0 0 var(--space-sm);
  line-height: 1.25;
}
.subservice__title a {
  color: inherit;
  text-decoration-color: currentColor;
}
.subservice p {
  margin: 0;
  font-size: var(--font-size-body);
}
.subservice .subservice__chevron {
  margin-top: var(--space-lg);
  font-family: var(--font-body);
  font-size: var(--font-size-body-sm);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-text-secondary);
}
.subservice__chevron a {
  color: inherit;
  text-decoration-line: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.28em;
}
.subservice:hover .subservice__chevron { color: var(--color-ink); }

/* Services hub: image-led cards with a homepage-style hover reveal. */
.subservice-grid--image .subservice {
  position: relative;
  justify-content: flex-end;
  min-height: clamp(360px, 38vw, 500px);
  background: var(--color-ink);
  color: var(--color-text-inverse);
  overflow: hidden;
  transition: border-color var(--duration-base) var(--ease-standard);
}
.subservice-grid--image .subservice::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background: linear-gradient(
    to bottom,
    rgba(14, 14, 14, 0.08) 0%,
    rgba(14, 14, 14, 0.26) 42%,
    rgba(14, 14, 14, 0.82) 100%
  );
  transition: background var(--duration-base) var(--ease-standard);
}
.subservice-grid--image .subservice:hover,
.subservice-grid--image .subservice:focus-within {
  border-color: rgba(168, 163, 155, 0.7);
  background: var(--color-ink);
}
.subservice-grid--image .subservice:hover::after,
.subservice-grid--image .subservice:focus-within::after {
  background: linear-gradient(
    to bottom,
    rgba(14, 14, 14, 0.18) 0%,
    rgba(14, 14, 14, 0.46) 38%,
    rgba(14, 14, 14, 0.9) 100%
  );
}
.subservice-grid--image .subservice > .wp-block-image {
  position: absolute;
  inset: 0;
  z-index: 0;
  margin: 0;
  width: 100%;
  height: 100%;
}
.subservice-grid--image .subservice > .wp-block-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--duration-slower) var(--ease-standard);
}
.subservice-grid--image .subservice:hover > .wp-block-image img,
.subservice-grid--image .subservice:focus-within > .wp-block-image img {
  transform: scale(1.04);
}
.subservice-grid--image .subservice > :not(.wp-block-image) {
  position: relative;
  z-index: 2;
  transition: opacity var(--duration-base) var(--ease-standard),
              transform var(--duration-slower) var(--ease-standard),
              max-height var(--duration-slower) var(--ease-standard),
              margin-top var(--duration-base) var(--ease-standard);
}
.subservice-grid--image .subservice__title {
  margin-bottom: 0;
  color: var(--color-text-inverse);
}
.subservice-grid--image .subservice > p:not(.subservice__chevron),
.subservice-grid--image .subservice > .subservice__chevron {
  max-height: 0;
  margin-top: 0;
  opacity: 0;
  overflow: hidden;
  transform: translateY(0.75rem);
}
.subservice-grid--image .subservice:hover > p:not(.subservice__chevron),
.subservice-grid--image .subservice:hover > .subservice__chevron,
.subservice-grid--image .subservice:focus-within > p:not(.subservice__chevron),
.subservice-grid--image .subservice:focus-within > .subservice__chevron {
  max-height: 16rem;
  opacity: 1;
  transform: translateY(0);
}
.subservice-grid--image .subservice:hover > p:not(.subservice__chevron),
.subservice-grid--image .subservice:focus-within > p:not(.subservice__chevron) {
  margin-top: var(--space-md);
}
.subservice-grid--image .subservice:hover > .subservice__chevron,
.subservice-grid--image .subservice:focus-within > .subservice__chevron {
  margin-top: var(--space-lg);
}
.subservice-grid--image .subservice p {
  color: rgba(255, 255, 255, 0.86);
}
.subservice-grid--image .subservice .subservice__chevron {
  color: rgba(255, 255, 255, 0.84);
}
.subservice-grid--image .subservice:hover .subservice__chevron,
.subservice-grid--image .subservice:focus-within .subservice__chevron {
  color: var(--color-text-inverse);
}

/* --- "Who the cut suits" chip grid (women's cuts) --- */
.suits-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-md);
  margin-top: var(--space-lg);
}
@media (min-width: 720px) { .suits-grid { grid-template-columns: repeat(2, 1fr); } }
.suits-grid__item {
  background: var(--color-paper);
  border: 1px solid rgba(168, 163, 155, 0.4);
  padding: var(--space-md) var(--space-lg);
  font-size: var(--font-size-body);
  line-height: 1.5;
}
.suits-grid__item strong {
  display: block;
  font-family: var(--font-display);
  font-size: 1.1rem;
  letter-spacing: 0.04em;
  margin-bottom: var(--space-2xs);
}

/* --- FAQ accordion (women's cuts) --- */
.faq-list {
  max-width: var(--content-narrow);
  margin: var(--space-xl) auto 0;
}
.faq-item {
  border-top: 1px solid rgba(168, 163, 155, 0.4);
  padding: var(--space-xs) 0;
}
.faq-item:last-child { border-bottom: 1px solid rgba(168, 163, 155, 0.4); }
.faq-item__question {
  font-family: var(--font-display);
  font-size: 1.25rem;
  letter-spacing: 0.04em;
  cursor: pointer;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--space-2xs) 0;
  line-height: 1.3;
}
.faq-item__question::-webkit-details-marker { display: none; }
.faq-item__icon {
  flex-shrink: 0;
  margin-left: var(--space-md);
  transition: transform var(--duration-base) var(--ease-standard);
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 1.5rem;
  color: var(--color-text-secondary);
}
.faq-item[open] .faq-item__icon { transform: rotate(45deg); }
.faq-item__answer {
  padding: var(--space-2xs) 0 var(--space-sm);
  font-size: var(--font-size-body);
  line-height: var(--line-height-body);
}
.faq-item__answer p { margin: 0 0 var(--space-sm); }
.faq-item__answer p:last-child { margin-bottom: 0; }

/* --- Approach pillars, stacked editorial (about) --- */
.pillar-grid {
  display: flex;
  flex-direction: column;
  gap: 0;
  margin-top: var(--space-xl);
  max-width: var(--content-narrow);
  margin-inline: auto;
}
.pillar { padding: var(--space-xl) 0; }
.pillar + .pillar { border-top: 1px solid rgba(168, 163, 155, 0.35); }
.pillar__num {
  font-family: var(--font-display);
  font-size: 0.8rem;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--color-text-secondary);
  display: block;
  margin-bottom: var(--space-sm);
}
.pillar__title {
  font-family: var(--font-display);
  font-size: clamp(1.5rem, 1.2rem + 0.6vw, 1.85rem);
  letter-spacing: 0.04em;
  margin: 0 0 var(--space-md);
  line-height: 1.25;
}
.pillar p { margin: 0 0 var(--space-sm); font-size: var(--font-size-body); }
.pillar p:last-child { margin-bottom: 0; }

/* --- Contact: card grid, hours table, enquiry form, map (contact) --- */
.contact-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-xl);
  margin-top: var(--space-xl);
}
@media (min-width: 900px) { .contact-grid { grid-template-columns: 1fr 1fr; gap: var(--space-2xl); } }
.contact-card {
  background: var(--color-paper);
  border: 1px solid rgba(168, 163, 155, 0.4);
  padding: var(--space-lg);
}
.contact-card h3 {
  font-family: var(--font-display);
  font-size: 1.5rem;
  letter-spacing: 0.04em;
  margin: 0 0 var(--space-sm);
}
.contact-card__address {
  font-family: var(--font-display);
  font-size: 1.15rem;
  letter-spacing: 0.02em;
  line-height: 1.4;
  margin: var(--space-sm) 0;
}
.contact-card__phone {
  font-family: var(--font-display);
  font-size: 1.5rem;
  letter-spacing: 0.04em;
  text-decoration: none;
  color: var(--color-ink);
  display: inline-block;
  margin: var(--space-xs) 0;
}
.contact-card__phone:hover { border-bottom: 1px solid currentColor; }
.contact-card__email {
  font-size: var(--font-size-body);
  color: var(--color-ink);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
}
.hours-table {
  width: 100%;
  border-collapse: collapse;
  margin-top: var(--space-md);
  font-size: var(--font-size-body);
}
.hours-table td {
  padding: var(--space-xs) 0;
  border-bottom: 1px solid rgba(168, 163, 155, 0.25);
}
.hours-table td:last-child { text-align: right; }
.hours-table .is-closed { color: var(--color-text-secondary); font-style: italic; }
.enquiry-form {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-md);
  margin-top: var(--space-xl);
}
@media (max-width: 720px) { .enquiry-form { grid-template-columns: 1fr; } }
.enquiry-form__field { display: flex; flex-direction: column; }
.enquiry-form__field--full { grid-column: 1 / -1; }
.enquiry-form__label {
  font-family: var(--font-body);
  font-size: var(--font-size-eyebrow);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--color-text-secondary);
  margin-bottom: var(--space-2xs);
}
.enquiry-form input,
.enquiry-form select,
.enquiry-form textarea {
  font-family: var(--font-body);
  font-size: var(--font-size-body);
  padding: var(--space-sm);
  border: 1px solid rgba(168, 163, 155, 0.6);
  background: var(--color-paper);
  color: var(--color-ink);
}
.enquiry-form textarea { min-height: 140px; resize: vertical; }

.tumi-gf-form {
  margin-top: var(--space-xl);
}

.tumi-gf-form .gform_wrapper.gravity-theme form,
.tumi-gf-form .gform_wrapper form {
  margin: 0;
}

.tumi-gf-form .gform_wrapper.gravity-theme .gform_fields,
.tumi-gf-form .gform_wrapper .gform_fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-md);
}

.tumi-gf-form .gform_wrapper.gravity-theme .gfield,
.tumi-gf-form .gform_wrapper .gfield {
  margin: 0;
}

.tumi-gf-form .gform_wrapper.gravity-theme .gfield.tumi-gf-full,
.tumi-gf-form .gform_wrapper .gfield.tumi-gf-full {
  grid-column: 1 / -1;
}

.tumi-gf-form .gform_wrapper.gravity-theme .gfield_label,
.tumi-gf-form .gform_wrapper .gfield_label {
  display: block;
  margin: 0 0 var(--space-2xs);
  font-family: var(--font-body);
  font-size: var(--font-size-eyebrow);
  font-weight: var(--font-weight-semibold);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--color-text-secondary);
}

.tumi-gf-form .gform_wrapper.gravity-theme .gfield_required,
.tumi-gf-form .gform_wrapper .gfield_required {
  color: var(--color-text-secondary);
  font-style: normal;
}

.tumi-gf-form .gform_wrapper.gravity-theme input[type="text"],
.tumi-gf-form .gform_wrapper.gravity-theme input[type="email"],
.tumi-gf-form .gform_wrapper.gravity-theme input[type="tel"],
.tumi-gf-form .gform_wrapper.gravity-theme select,
.tumi-gf-form .gform_wrapper.gravity-theme textarea,
.tumi-gf-form .gform_wrapper input[type="text"],
.tumi-gf-form .gform_wrapper input[type="email"],
.tumi-gf-form .gform_wrapper input[type="tel"],
.tumi-gf-form .gform_wrapper select,
.tumi-gf-form .gform_wrapper textarea {
  width: 100%;
  border: 1px solid rgba(168, 163, 155, 0.6);
  border-radius: 0;
  background: var(--color-paper);
  color: var(--color-ink);
  padding: var(--space-sm);
  font-family: var(--font-body);
  font-size: var(--font-size-body);
  line-height: var(--line-height-body);
}

.tumi-gf-form .gform_wrapper.gravity-theme textarea,
.tumi-gf-form .gform_wrapper textarea {
  min-height: 140px;
  resize: vertical;
}

.tumi-gf-form .gform_wrapper.gravity-theme .gform_footer,
.tumi-gf-form .gform_wrapper .gform_footer {
  margin: var(--space-md) 0 0;
  padding: 0;
}

.tumi-gf-form .gform_wrapper.gravity-theme .gform_footer input[type="submit"],
.tumi-gf-form .gform_wrapper .gform_footer input[type="submit"] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: var(--space-sm) var(--space-lg);
  border: 1px solid var(--color-border-emphasis);
  border-radius: var(--radius-sm);
  background: var(--color-ink);
  color: var(--color-text-inverse);
  font-family: var(--font-body);
  font-size: var(--font-size-body);
  font-weight: var(--font-weight-semibold);
  line-height: var(--line-height-ui);
  text-decoration: none;
  transition: background-color var(--duration-base) var(--ease-standard),
              color var(--duration-base) var(--ease-standard);
}

.tumi-gf-form .gform_wrapper.gravity-theme .gform_footer input[type="submit"]:hover,
.tumi-gf-form .gform_wrapper .gform_footer input[type="submit"]:hover {
  background: var(--color-surface-dark);
}

.tumi-gf-form .gform_wrapper.gravity-theme .gform_validation_errors,
.tumi-gf-form .gform_wrapper .gform_validation_errors {
  margin: 0 0 var(--space-md);
  padding: var(--space-sm);
  border: 1px solid var(--color-state-error);
  border-radius: var(--radius-sm);
  background: var(--color-paper);
  color: var(--color-state-error);
  box-shadow: none;
}

.tumi-gf-form .gform_wrapper.gravity-theme .validation_message,
.tumi-gf-form .gform_wrapper .validation_message {
  margin-top: var(--space-2xs);
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--color-state-error);
  font-size: var(--font-size-caption);
}

.tumi-gf-form .gform_confirmation_message {
  padding: var(--space-sm);
  border: 1px solid var(--color-state-success);
  border-radius: var(--radius-sm);
  background: var(--color-paper);
  color: var(--color-state-success);
}

.tumi-gf-admin-note {
  margin-top: var(--space-md);
}

@media (max-width: 720px) {
  .tumi-gf-form .gform_wrapper.gravity-theme .gform_fields,
  .tumi-gf-form .gform_wrapper .gform_fields {
    grid-template-columns: 1fr;
  }
}
.map-placeholder {
  aspect-ratio: 16 / 9;
  background: linear-gradient(135deg, #ECE7DE 0%, #DDD6CA 100%);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-text-secondary);
  font-size: var(--font-size-body-sm);
  text-align: center;
  padding: var(--space-md);
  margin-top: var(--space-md);
}
.map-placeholder p { margin: 0; }

/* =====================================================================
   Native-block conversion compatibility (subpage Gutenberg pass)
   The subpages were rebuilt from wp:html into native blocks. These rules
   bridge the gap where core block wrappers (figure, details, table) sit
   between the prototype class and the element the prototype CSS targeted,
   and replace prototype inline styles that the block validator rejects.
   ===================================================================== */

/* --- core/image figures must fill the fixed-ratio image frames --- */
.editorial-2col__image .wp-block-image,
.editorial-2col__image figure.wp-block-image,
.hair-spa__image .wp-block-image,
.hair-spa__image figure.wp-block-image {
  margin: 0;
  width: 100%;
  height: 100%;
}
.editorial-2col__image .wp-block-image img,
.hair-spa__image .wp-block-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* --- centred section headers (replaces prototype inline text-align) --- */
.trust-strip__eyebrow,
.faq__eyebrow,
.shelf__eyebrow { display: flex; justify-content: center; }
.trust-strip__lead,
.shelf__lead { text-align: center; margin-inline: auto; }
.faq__heading,
.shelf__heading { text-align: center; }

/* --- generic fine-print note (replaces repeated inline styles) --- */
.fine-note {
  margin-top: var(--space-md);
  color: var(--color-text-secondary);
  font-size: var(--font-size-body-sm);
}

/* --- "who the cut suits" wide chip + trailing note --- */
.suits-grid__item--wide { grid-column: 1 / -1; }
.suits-grid__note {
  margin-top: var(--space-lg);
  max-width: var(--content-narrow);
}

/* --- contact: hours wrapper + form width (replaces inline max-width) --- */
.hours-wrap { max-width: 640px; margin-inline: auto; width: 100%; }
.form-wrap { max-width: 760px; margin-inline: auto; }

/* --- opening hours as core/table (table is now wrapped in a figure) --- */
.hours-table table { width: 100%; border-collapse: collapse; margin: 0; }
.hours-table td:last-child em { color: var(--color-text-secondary); font-style: italic; }

/* --- FAQ as core/details (summary replaces .faq-item__question) --- */
.faq-item > summary {
  font-family: var(--font-display);
  font-size: 1.25rem;
  letter-spacing: 0.04em;
  cursor: pointer;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-md);
  padding: var(--space-2xs) 0;
  line-height: 1.3;
}
.faq-item > summary::-webkit-details-marker { display: none; }
.faq-item > summary::after {
  content: "+";
  flex-shrink: 0;
  margin-left: var(--space-md);
  transition: transform var(--duration-base) var(--ease-standard);
  font-family: var(--font-body);
  font-weight: 300;
  font-size: 1.5rem;
  line-height: 1;
  color: var(--color-text-secondary);
}
.faq-item[open] > summary::after { transform: rotate(45deg); }
.faq-item > p {
  margin: 0 0 var(--space-sm);
  font-size: var(--font-size-body);
  line-height: var(--line-height-body);
}
.faq-item > p:first-of-type { padding-top: var(--space-2xs); }
.faq-item > p:last-child { margin-bottom: var(--space-sm); }

/* ---------------------------------------------------------------------
   Primary navigation — classic wp_nav_menu via Tumi_Nav_Walker.
   Desktop (>=1024px): inline bar with hover dropdowns.
   Mobile (<1024px): hamburger toggles a slide-in panel; submenus
   expand via an injected accordion button (see custom.js §5).
   --------------------------------------------------------------------- */
.site-nav { margin-left: auto; }

/* Hamburger toggle + close button: hidden on desktop. */
.site-nav__toggle,
.site-nav__close { display: none; }
.site-nav__toggle { background: none; border: 0; cursor: pointer; padding: var(--space-2xs); }
.site-nav__toggle-bar { display: block; width: 24px; height: 2px; margin: 5px 0; background: var(--color-text-inverse); transition: transform var(--duration-base) var(--ease-standard); }

/* Menu list */
.site-nav__menu { list-style: none; margin: 0; padding: 0; }
.site-nav__item { position: relative; }
.site-nav__link {
  display: inline-flex; align-items: center; gap: var(--space-3xs);
  font-family: var(--font-body); font-size: var(--font-size-body);
  color: var(--color-text-inverse); text-decoration: none;
  padding: var(--space-2xs) 0; line-height: var(--line-height-ui);
  transition: opacity var(--duration-base) var(--ease-standard);
}
.site-nav__link:hover { opacity: 0.7; }
.site-nav__item.is-current > .site-nav__link { opacity: 1; text-decoration: underline; text-underline-offset: 4px; }
.site-nav__caret { width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid currentColor; }

/* Submenu */
.site-nav__submenu { list-style: none; margin: 0; padding: 0; }
.site-nav__subtoggle { display: none; }

/* ---- Desktop ---- */
@media (min-width: 1024px) {
  .site-nav__menu { display: flex; align-items: center; gap: var(--space-lg); }
  .site-nav__submenu {
    position: absolute; top: 100%; left: 0; min-width: 220px;
    background: var(--color-surface-dark); padding: var(--space-2xs) 0;
    box-shadow: var(--shadow-overlay-sm);
    opacity: 0; visibility: hidden; transform: translateY(6px);
    transition: opacity var(--duration-base) var(--ease-standard),
                transform var(--duration-base) var(--ease-standard),
                visibility 0s linear var(--duration-base);
    z-index: var(--z-sticky);
  }
  .site-nav__item--parent:hover > .site-nav__submenu,
  .site-nav__item--parent:focus-within > .site-nav__submenu {
    opacity: 1; visibility: visible; transform: translateY(0); transition-delay: 0s;
  }
  .site-nav__submenu .site-nav__link { display: block; padding: var(--space-2xs) var(--space-md); white-space: nowrap; }
}

/* ---- Mobile ---- */
@media (max-width: 1023.98px) {
  .site-nav__toggle { display: inline-block; }
  .site-nav__panel {
    /* top/right:0 + viewport-unit height so the panel fills the screen even
       though .site-header (will-change: transform) is its containing block. */
    position: fixed; top: 0; right: 0; bottom: auto; left: auto;
    width: min(86vw, 340px); height: 100vh; height: 100dvh;
    background: var(--color-ink); color: var(--color-text-inverse);
    padding: var(--space-2xl) var(--space-lg);
    transform: translateX(100%); transition: transform var(--duration-base) var(--ease-standard);
    z-index: var(--z-overlay); overflow-y: auto;
  }
  .site-nav.is-open .site-nav__panel { transform: translateX(0); box-shadow: var(--shadow-overlay-lg, 0 0 40px rgba(0,0,0,0.5)); }
  .site-nav__close { display: block; position: absolute; top: var(--space-md); right: var(--space-md); background: none; border: 0; color: var(--color-text-inverse); font-size: 2rem; line-height: 1; cursor: pointer; }
  .site-nav__menu { display: flex; flex-direction: column; gap: var(--space-xs); margin-top: var(--space-lg); }
  .site-nav__link { font-size: var(--font-size-h6, 1.125rem); padding: var(--space-2xs) 0; }
  .site-nav__item--parent { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; }
  .site-nav__item--parent > .site-nav__link { flex: 1; }
  .site-nav__caret { display: none; }
  .site-nav__subtoggle { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: none; border: 0; color: var(--color-text-inverse); cursor: pointer; }
  .site-nav__subtoggle::before { content: "+"; font-size: 1.5rem; line-height: 1; }
  .site-nav__item--parent.is-expanded > .site-nav__subtoggle::before { content: "\2013"; }
  .site-nav__submenu { flex-basis: 100%; max-height: 0; overflow: hidden; transition: max-height var(--duration-base) var(--ease-standard); padding-left: var(--space-md); }
  .site-nav__item--parent.is-expanded > .site-nav__submenu { max-height: 60vh; }
  .site-nav__submenu .site-nav__link { padding: var(--space-3xs) 0; opacity: 0.85; }
  .nav-locked { overflow: hidden; }
}

/* Colour hub: chevron links inherit chevron styling (added when colour spokes went live) */
.subservice__chevron a {
  color: inherit;
  text-decoration-line: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.28em;
}
.subservice:hover .subservice__chevron a,
.subservice:focus-within .subservice__chevron a {
  color: inherit;
}
