@charset "UTF-8";
/*!
    Main Stylesheet Manifest

    This file imports all SCSS partials in the correct order.
    DO NOT add styles here — use the appropriate partial instead.

    Compile: sass --watch css:css

    Import order:
        1. Fonts & Variables (design tokens)
        2. Helpers (mixins & utilities)
        3. Utility classes (colors, typography)
        4. Base element styles
        5. Components (reusable patterns)
        6. Sections (ACF flexible content)
        7. Page-specific overrides

    @author development@bronte.co.nz
*/
/*
    Design Tokens (Variables)

    Central source of truth for all design values.
    ALWAYS check here before adding new values elsewhere.

    How to use:
        1. Import in your partial: @use 'variables' as *;
        2. Use variables: color: $color-primary;

    Naming conventions:
        $color-{name}      -- colours
        $spacing-{size}    -- spacing (xs, sm, md, lg, xl, 2xl, 3xl, 4xl)
        $font-size-{size}  -- font sizes
        $font-weight-{name} -- font weights
        $screen-{size}     -- breakpoints
        $border-radius-{size} -- border radius
*/
/*
    Font Loading & FOUT Prevention

    Fonts are loaded via Typekit JS (kit wph3vhr).
    Typekit adds .wf-loading to <html> during font load,
    then switches to .wf-active when fonts are ready.

    This file controls the transition between fallback and loaded fonts
    to prevent FOUT flash and minimise CLS.
*/
.wf-loading body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  letter-spacing: 0.02em;
}
.wf-loading h1, .wf-loading h2, .wf-loading h3, .wf-loading h4, .wf-loading h5, .wf-loading h6 {
  font-family: Georgia, "Times New Roman", serif;
  letter-spacing: -0.01em;
}

.wf-active body,
body {
  font-family: neue-haas-grotesk-text, sans-serif;
}

.wf-active h1,
.wf-active h2,
.wf-active h3,
.wf-active h4,
.wf-active h5,
.wf-active h6,
h1, h2, h3, h4, h5, h6 {
  font-family: new-spirit, sans-serif;
}

/*
    Helper Utilities

    Layout, positioning, and display utilities.
    For typography utilities, see _typography.scss.
    For colour utilities, see _colors.scss.

    Usage:
        <div class="pos-relative">
            <img class="bg-image" src="..." alt="...">
            <div class="z-above">Content above image</div>
        </div>
*/
.w-100 {
  width: 100%;
}

.h-100 {
  height: 100%;
}

.pos-relative {
  position: relative;
}

.pos-absolute {
  position: absolute;
}

.z-below {
  z-index: 1;
}

.z-base {
  z-index: 10;
}

.z-above {
  z-index: 100;
}

.mb-0 {
  margin-bottom: 0;
}

.last-child-mb-0 > :last-child {
  margin-bottom: 0;
}

.bg-image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 1;
}

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

.overflow-hidden {
  overflow: hidden;
}

/*
    Webflow-Matched CSS Reset

    Mirrors Webflow's exact base defaults so computed design tokens
    from the Phase 0 audit render identically.
    Source: audit/design-tokens.json computed values.

    Applied BEFORE any section or component styles.
*/
*, *::before, *::after {
  box-sizing: border-box;
}

html {
  line-height: 1;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  padding: 0;
}

h1, h2, h3, h4, h5, h6 {
  margin-top: 0;
  margin-bottom: 0;
  font-weight: inherit;
}

p {
  margin-top: 0;
  margin-bottom: 0;
}

a {
  color: inherit;
  text-decoration: inherit;
}

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

button, input, select, textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
  color: inherit;
  margin: 0;
  padding: 0;
}

ul, ol {
  margin: 0;
  padding: 0;
  list-style: none;
}

figure {
  margin: 0;
}

fieldset {
  border: 0;
  margin: 0;
  padding: 0;
}

/*
    Per-Page Colour Themes

    Re-skins the ENTIRE page chrome (header pills, side nav, buttons, footer,
    section text) from one palette to another via a single body class.

    How it works:
        1. `:root` declares the theme contract — every custom property defaults
           to the CURRENT light-site value, so un-themed pages render exactly as
           before (the chrome partials read `var(--theme-*, $fallback)`).
        2. A `body.theme-{name}` block overrides only the values that change.
        3. PHP adds the body class — see bronte_get_page_theme() in custom.php
           (driven by the page's "Page Theme" ACF select, with a slug fallback).

    Adding a new themed page (e.g. /awards) is just a new `body.theme-awards`
    block here plus setting that page's Page Theme — no chrome edits needed.

    Section bodies inherit their colours through the existing --section-fg /
    --heading-fg custom properties, wired per page in css/_page_matariki.scss.
*/
:root {
  --theme-bg: #F3F8ED;
  --theme-text: #333333;
  --theme-accent: #E63946;
  --theme-pill-bg: #F3F8ED;
  --theme-pill-fg: #1E232D;
  --theme-pill-border: #1E232D;
  --theme-pill-hover-bg: #1E232D;
  --theme-pill-hover-fg: #F3F8ED;
  --theme-overlay-bg: #E63946;
  --theme-overlay-fg: #F3F8ED;
  --side-nav-fg: #E63946;
  --side-nav-bg: #F3F8ED;
  --side-nav-border: #E63946;
  --side-nav-hover-bg: #E63946;
  --side-nav-hover-fg: #FFFFFF;
  --theme-btn-bg: transparent;
  --theme-btn-fg: #E63946;
  --theme-btn-border: #E63946;
  --theme-btn-hover-bg: #E63946;
  --theme-btn-hover-fg: #FFFFFF;
  --theme-footer-bg: #F3F8ED;
  --theme-footer-fg: #333333;
  --theme-footer-heading: #1E232D;
  --theme-footer-accent: #E63946;
  --theme-footer-muted: #959a9e;
  --theme-footer-btn-bg: #F3F8ED;
  --theme-footer-btn-fg: #E63946;
}

/* ── Matariki (dark navy + gold) ───────────────────────────────────────── */
body.theme-matariki {
  --theme-bg: #1E232D;
  --theme-text: #F3F8ED;
  --theme-accent: #e2b354;
  --theme-pill-bg: transparent;
  --theme-pill-fg: #F3F8ED;
  --theme-pill-border: #F3F8ED;
  --theme-pill-hover-bg: #F3F8ED;
  --theme-pill-hover-fg: #1E232D;
  --theme-overlay-bg: #1E232D;
  --theme-overlay-fg: #F3F8ED;
  --side-nav-fg: #e2b354;
  --side-nav-bg: transparent;
  --side-nav-border: #e2b354;
  --side-nav-hover-bg: #e2b354;
  --side-nav-hover-fg: #1E232D;
  --theme-btn-fg: #e2b354;
  --theme-btn-border: #e2b354;
  --theme-btn-hover-bg: #e2b354;
  --theme-btn-hover-fg: #1E232D;
  --theme-footer-bg: #1E232D;
  --theme-footer-fg: #F3F8ED;
  --theme-footer-heading: #F3F8ED;
  --theme-footer-accent: #e2b354;
  --theme-footer-muted: #e2b354;
  --theme-footer-btn-bg: #1E232D;
  --theme-footer-btn-fg: #e2b354;
}

/* ── Awards (dark navy + gold) ─────────────────────────────────────────────
   The live /awards + /award-winners pages use the same dark navy + gold
   palette as Matariki, so this block mirrors body.theme-matariki. Section
   bodies are wired in _page_awards.scss; the chrome reads these tokens. */
body.theme-awards {
  --theme-bg: #1E232D;
  --theme-text: #F3F8ED;
  --theme-accent: #e2b354;
  --theme-pill-bg: transparent;
  --theme-pill-fg: #F3F8ED;
  --theme-pill-border: #F3F8ED;
  --theme-pill-hover-bg: #F3F8ED;
  --theme-pill-hover-fg: #1E232D;
  --theme-overlay-bg: #1E232D;
  --theme-overlay-fg: #F3F8ED;
  --side-nav-fg: #e2b354;
  --side-nav-bg: transparent;
  --side-nav-border: #e2b354;
  --side-nav-hover-bg: #e2b354;
  --side-nav-hover-fg: #1E232D;
  --theme-btn-fg: #e2b354;
  --theme-btn-border: #e2b354;
  --theme-btn-hover-bg: #e2b354;
  --theme-btn-hover-fg: #1E232D;
  --theme-footer-bg: #1E232D;
  --theme-footer-fg: #F3F8ED;
  --theme-footer-heading: #F3F8ED;
  --theme-footer-accent: #e2b354;
  --theme-footer-muted: #e2b354;
  --theme-footer-btn-bg: #1E232D;
  --theme-footer-btn-fg: #e2b354;
}

/*
    Colour Utility Classes

    Background and text colour utilities generated from $colors map.
    All colours are defined in _variables.scss.

    Usage:
        <div class="bg-primary text-white">Primary background</div>
        <p class="text-muted">Secondary text</p>

    Available classes:
        .bg-{color}   -- background colour
        .text-{color} -- text colour

    Where {color} is: primary, cream, dark, text, white, black, muted, error, success
*/
.bg-primary {
  background-color: #E63946;
}

.text-primary {
  color: #E63946;
}

.bg-cream {
  background-color: #F3F8ED;
}

.text-cream {
  color: #F3F8ED;
}

.bg-dark {
  background-color: #1E232D;
}

.text-dark {
  color: #1E232D;
}

.bg-text {
  background-color: #333333;
}

.text-text {
  color: #333333;
}

.bg-white {
  background-color: #FFFFFF;
}

.text-white {
  color: #FFFFFF;
}

.bg-black {
  background-color: #000000;
}

.text-black {
  color: #000000;
}

.bg-muted {
  background-color: #959a9e;
}

.text-muted {
  color: #959a9e;
}

.bg-gold {
  background-color: #e2b354;
}

.text-gold {
  color: #e2b354;
}

.bg-error {
  background-color: #DC3545;
}

.text-error {
  color: #DC3545;
}

.bg-success {
  background-color: #28a745;
}

.text-success {
  color: #28a745;
}

.bg-secondary {
  background-color: #F3F8ED;
}

.bg-light {
  background-color: #F3F8ED;
}

.text-secondary {
  color: #F3F8ED;
}

.text-light {
  color: #F3F8ED;
}

/*
    Typography Utility Classes

    Apply these classes directly in HTML to control text appearance.
    All values come from _variables.scss for consistency.

    Usage:
        <p class="text-lg font-bold">Large bold text</p>
        <span class="text-muted text-sm">Small muted caption</span>
        <h2 class="text--display">Display font heading</h2>
*/
.text-left {
  text-align: left;
}

.text-center {
  text-align: center;
}

.text-right {
  text-align: right;
}

.text--display {
  font-family: new-spirit, sans-serif;
}

.text--body {
  font-family: neue-haas-grotesk-text, sans-serif;
}

.text-xs {
  font-size: 12px;
}

.text-sm {
  font-size: 14px;
}

.text-base {
  font-size: 16px;
}

.text-lg {
  font-size: 18px;
}

.text-xl {
  font-size: 24px;
}

.text-2xl {
  font-size: 32px;
}

.text-3xl {
  font-size: 48px;
}

.font-normal {
  font-weight: 400;
}

.font-medium {
  font-weight: 500;
}

.font-semibold {
  font-weight: 600;
}

.font-bold {
  font-weight: 700;
}

.leading-tight {
  line-height: 1.2;
}

.leading-base {
  line-height: 1.5;
}

.leading-loose {
  line-height: 1.8;
}

.font-primary {
  font-family: new-spirit, sans-serif;
}

.font-secondary {
  font-family: neue-haas-grotesk-text, sans-serif;
}

/*
    Button Styles

    Base button styles and variants.
    Applied to .btn class, <button>, and submit inputs.

    Usage:
        <a href="#" class="btn btn-primary">Primary button</a>
        <button class="btn btn-secondary">Secondary button</button>
        <a href="#" class="btn btn-outline">Outline button</a>

    Webflow source uses pill-shaped buttons with no uppercase transform.
*/
.btn,
button,
input[type=submit] {
  -webkit-appearance: none;
  display: inline-block;
  font-size: 16px;
  font-weight: 700;
  font-family: neue-haas-grotesk-text, sans-serif;
  padding: 8px 24px;
  line-height: 1.5;
  cursor: pointer;
  transition: 0.25s ease-in-out;
  border: 0;
  border-radius: 999px;
  text-align: center;
}
.btn:focus-visible,
button:focus-visible,
input[type=submit]:focus-visible {
  outline: 2px solid #E63946;
  outline-offset: 2px;
}

.btn-primary {
  background-color: #E63946;
  color: #FFFFFF;
  border: none;
}
.btn-primary:hover {
  background-color: #bf2f3b;
  color: #FFFFFF;
}

.btn-secondary {
  background-color: #1E232D;
  color: #F3F8ED;
  border: none;
}
.btn-secondary:hover {
  opacity: 0.9;
}

.btn-outline {
  background-color: transparent;
  color: #1E232D;
  border: 1px solid #1E232D;
}
.btn-outline:hover {
  background-color: #1E232D;
  color: #FFFFFF;
}

.btn-outline-primary {
  background-color: var(--theme-btn-bg, transparent);
  color: var(--theme-btn-fg, #E63946);
  border: 1px solid var(--theme-btn-border, #E63946);
}
.btn-outline-primary:hover {
  background-color: var(--theme-btn-hover-bg, #E63946);
  color: var(--theme-btn-hover-fg, #FFFFFF);
}

/*
    Navigation Menu Styles

    Covers: header primary, header secondary, mobile, footer menus.
    Menu HTML generated by wp_nav_menu().
*/
.menu {
  display: flex;
  list-style: none;
  margin: 0;
  padding: 0;
}

.menu-header {
  gap: 24px;
}
.menu-header a {
  font-family: new-spirit, sans-serif;
  font-size: 16px;
  font-weight: 400;
  color: #F3F8ED;
  text-decoration: none;
  transition: 0.25s ease-in-out;
  white-space: nowrap;
}
@media (min-width: 1200px) {
  .menu-header a {
    font-size: 20px;
  }
}
.menu-header a:hover {
  opacity: 0.7;
}

.menu-secondary {
  gap: 16px;
}
.menu-secondary a {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  font-weight: 400;
  color: #F3F8ED;
  text-decoration: none;
  transition: 0.25s ease-in-out;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.menu-secondary a:hover {
  opacity: 0.7;
}

.menu-mobile {
  flex-direction: column;
  gap: 16px;
  padding-top: 64px;
}
.menu-mobile a {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  color: #F3F8ED;
  text-decoration: none;
  display: block;
  padding: 8px 0;
  transition: 0.25s ease-in-out;
}
.menu-mobile a:hover {
  color: #E63946;
}

.menu-footer {
  flex-direction: column;
  gap: 8px;
}
.menu-footer a {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  color: #F3F8ED;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.menu-footer a:hover {
  opacity: 0.7;
}

/*
    Base Element Styles

    Global styles for HTML elements (body, a, img, headings, etc.).
    These apply site-wide without needing classes.

    For utility classes, see:
        _helpers.scss    -- layout utilities
        _typography.scss -- text utilities
        _colors.scss     -- colour utilities
*/
html {
  scroll-padding-top: var(--wp-admin--admin-bar--height);
}
@media (prefers-reduced-motion: no-preference) {
  html {
    scroll-behavior: smooth;
  }
}

html,
body {
  min-height: 100vh;
}

body {
  font-family: neue-haas-grotesk-text, sans-serif;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  background-color: var(--theme-bg, #F3F8ED);
  color: var(--theme-text, #333333);
  display: flex;
  flex-direction: column;
  margin: 0;
}

h1 {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(54px, 3.54vw + 37px, 88px);
  line-height: 1.1;
  color: #E63946;
  margin: 0;
}

h2 {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(48px, 2.81vw + 34.5px, 75px);
  line-height: 1.2;
  color: #E63946;
  margin: 0;
}

h3 {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(24px, 5.83vw - 3.9px, 80px);
  line-height: 1.2;
  margin: 0;
}

h4 {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: 24px;
  line-height: 1.4;
  margin: 0;
}

h5 {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-weight: 500;
  font-size: 16px;
  line-height: 1.5;
  margin: 0;
}

p {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-weight: 400;
  font-size: clamp(13px, 0.33vw + 11.4px, 16px);
  line-height: 1.5;
  margin: 0;
}
p img {
  display: inline-block;
}

a {
  transition: all 0.2s ease-in-out;
  text-decoration: none;
  color: inherit;
}
a:hover {
  text-decoration: none;
}

main {
  flex: 1;
  margin-top: calc(120px - var(--announce-h, 0px));
}

main,
.site-footer {
  padding-left: 16px;
  padding-right: 16px;
}
@media (min-width: 768px) {
  main,
  .site-footer {
    padding-left: 32px;
    padding-right: 32px;
  }
}
@media (min-width: 992px) {
  main,
  .site-footer {
    margin-left: 176px;
    padding-left: 48px;
    padding-right: 48px;
  }
}
@media (min-width: 1200px) {
  main,
  .site-footer {
    padding-left: 64px;
    padding-right: 64px;
  }
}

@media (min-width: 992px) {
  main {
    padding-left: 16px;
    padding-right: 16px;
  }
}

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

.text > :first-child {
  margin-top: 0;
}
.text > :last-child {
  margin-bottom: 0;
}
.text ol,
.text ul {
  line-height: inherit;
  padding-left: 20px;
}
.text li:last-child {
  margin-bottom: 0;
}

@media (min-width: 768px) {
  .alignleft,
  img.alignleft {
    float: left;
    margin-right: 1em;
    margin-bottom: 1em;
  }
}

@media (min-width: 768px) {
  .alignright,
  img.alignright {
    float: right;
    margin-left: 1em;
    margin-bottom: 1em;
  }
}

.aligncenter,
img.aligncenter {
  margin: 1em auto;
}

/*
    Site Header

    Matches Webflow layout:
    - Heart icon stays fixed in the top-left column (above the side nav, which
      reserves space below it by starting at top: 112px)
    - Wordmark extends to the right of the heart at rest and fades into the
      heart area on scroll
    - Search + Menu button sit in normal flow and scroll away with the page
    - Header stays transparent at all times — no solid bar on scroll
*/
.site-header {
  position: fixed;
  top: var(--wp-admin--admin-bar--height, 0px);
  left: 0;
  width: 100%;
  z-index: 300;
  background-color: transparent;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 24px 32px 16px 24px;
  pointer-events: none;
}
.site-header > * {
  pointer-events: auto;
}
.site-header.is-scrolled .site-header__logo-wordmark {
  opacity: 0;
  transform: translateX(-16px);
  clip-path: inset(0 100% 0 0);
  filter: blur(3px);
}
.site-header__logo {
  display: flex;
  align-items: center;
  gap: 32px;
  flex-shrink: 0;
  text-decoration: none;
}
.site-header__logo-icon {
  height: 64px;
  width: auto;
}
.site-header__logo-icon--light {
  display: none;
}
.site-header__logo.is-on-dark .site-header__logo-icon--dark {
  display: none;
}
.site-header__logo.is-on-dark .site-header__logo-icon--light {
  display: block;
}
.site-header__logo-wordmark {
  height: 36px;
  width: auto;
  transform-origin: left center;
  clip-path: inset(0 0% 0 0);
  transition: opacity 0.25s ease-out, transform 0.5s cubic-bezier(0.22, 1, 0.36, 1), clip-path 0.5s cubic-bezier(0.22, 1, 0.36, 1), filter 0.35s ease-out;
}
@media (min-width: 1200px) {
  .site-header__logo-wordmark {
    height: 42px;
  }
}
.site-header__actions {
  display: flex;
  align-items: center;
  gap: 16px;
}
.site-header__search-form {
  display: none;
  align-items: center;
  gap: 4px;
}
@media (min-width: 992px) {
  .site-header__search-form {
    display: flex;
  }
}
.site-header__search-input {
  background-color: var(--theme-pill-bg, #F3F8ED);
  border: 1px solid var(--theme-pill-border, #1E232D);
  border-radius: 999px;
  padding: 8px 16px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: var(--theme-pill-fg, #333333);
  width: 200px;
  height: 38px;
  transition: 0.25s ease-in-out;
}
.site-header__search-input::placeholder {
  color: #959a9e;
}
.site-header__search-input:focus {
  outline: none;
  border-color: var(--theme-accent, #E63946);
}
.site-header__search-btn-wrap {
  display: flex;
}
.site-header__search-submit {
  width: 38px;
  height: 38px;
  border: 1px solid var(--theme-pill-border, #1E232D);
  border-radius: 999px;
  background-color: var(--theme-pill-bg, #F3F8ED);
  color: var(--theme-pill-fg, #1E232D);
  cursor: pointer;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: 0.25s ease-in-out;
}
.site-header__search-submit:hover {
  background-color: var(--theme-pill-hover-bg, #1E232D);
  color: var(--theme-pill-hover-fg, #F3F8ED);
}
.site-header__search-submit svg {
  width: 18px;
  height: 18px;
}
.site-header__search-trigger {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  padding: 0;
  background-color: var(--theme-pill-bg, #F3F8ED);
  border: 1px solid var(--theme-pill-border, #1E232D);
  border-radius: 999px;
  color: var(--theme-pill-fg, #1E232D);
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.site-header__search-trigger:hover, .site-header__search-trigger:focus-visible {
  background-color: var(--theme-pill-hover-bg, #1E232D);
  color: var(--theme-pill-hover-fg, #F3F8ED);
  outline: none;
}
.site-header__search-trigger svg {
  width: 18px;
  height: 18px;
}

.menu-opener {
  background-color: var(--theme-pill-bg, #F3F8ED);
  border: 1px solid var(--theme-pill-border, #1E232D);
  border-radius: 999px;
  color: var(--theme-pill-fg, #1E232D);
  cursor: pointer;
  height: 38px;
  padding: 0 16px;
  transition: 0.25s ease-in-out;
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  line-height: 1.5;
}
.menu-opener:hover {
  background-color: var(--theme-pill-hover-bg, #1E232D);
  color: var(--theme-pill-hover-fg, #F3F8ED);
}
.nav-menu {
  position: fixed;
  inset: 0;
  z-index: 500;
  background-color: var(--theme-overlay-bg, #E63946);
  color: var(--theme-overlay-fg, #F3F8ED);
  overflow-y: auto;
  transform: translateX(100%);
  transition: transform 0.3s ease-in-out;
  padding: 24px;
}
@media (min-width: 768px) {
  .nav-menu {
    padding: 48px 64px;
  }
}
.nav-menu.is-open {
  transform: translateX(0);
}
.nav-menu[aria-hidden=false] {
  transform: translateX(0);
}
.nav-menu__content {
  display: flex;
  flex-direction: column;
  min-height: calc(100vh - 96px);
  max-width: none;
  margin: 0;
}
.nav-menu__close {
  align-self: flex-end;
  background: none;
  border: 1px solid #F3F8ED;
  border-radius: 999px;
  color: #F3F8ED;
  cursor: pointer;
  padding: 8px 24px;
  font-family: new-spirit, sans-serif;
  font-size: 16px;
  margin-bottom: 48px;
  transition: 0.25s ease-in-out;
}
.nav-menu__close:hover {
  background-color: #F3F8ED;
  color: #E63946;
}
.nav-menu__heading {
  margin-bottom: 48px;
}
.nav-menu__heading h3 {
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 6vw, 80px);
  font-weight: 400;
  line-height: 1.2;
  color: #F3F8ED;
  margin: 0 0 16px 0;
}
.nav-menu__divider {
  height: 1px;
  background-color: rgba(243, 248, 237, 0.4);
}
.nav-menu__categories {
  margin-bottom: 48px;
}
.nav-menu__categories h3 {
  font-family: new-spirit, sans-serif;
  font-size: clamp(32px, 8vw, 48px);
  font-weight: 400;
  line-height: 1.2;
  color: #F3F8ED;
  margin: 0 0 24px 0;
}
.nav-menu__cat-link {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 8px 0;
  color: #F3F8ED;
  text-decoration: none;
  font-family: new-spirit, sans-serif;
  font-size: clamp(24px, 6vw, 32px);
  line-height: 1.2;
  transition: 0.25s ease-in-out;
}
.nav-menu__cat-link:hover {
  opacity: 0.7;
}
.nav-menu__cat-icon {
  width: 48px;
  height: 48px;
  flex-shrink: 0;
}
.nav-menu__links {
  flex: 1;
  margin-bottom: 48px;
}
.nav-menu__links .menu-nav-overlay {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.nav-menu__links .menu-nav-overlay a {
  position: relative;
  display: inline-block;
  align-self: flex-start;
  color: #F3F8ED;
  text-decoration: none;
  font-family: new-spirit, sans-serif;
  font-size: clamp(32px, 4vw, 56px);
  font-weight: 400;
  line-height: 1.2;
  transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}
.nav-menu__links .menu-nav-overlay a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -2px;
  height: 3px;
  background-color: #F3F8ED;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}
.nav-menu__links .menu-nav-overlay a:hover {
  transform: translateX(8px);
}
.nav-menu__links .menu-nav-overlay a:hover::after {
  transform: scaleX(1);
}
.nav-menu__footer {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
  padding-top: 24px;
  margin-top: auto;
}
@media (min-width: 768px) {
  .nav-menu__footer {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
  }
}
.nav-menu__copyright {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #F3F8ED;
  margin: 0;
  max-width: 100%;
  word-break: break-word;
  overflow-wrap: anywhere;
}
.nav-menu__socials {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.nav-menu__socials a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background-color: #F3F8ED;
  color: #E63946;
  transition: 0.25s ease-in-out;
  flex-shrink: 0;
}
.nav-menu__socials a:hover {
  opacity: 0.85;
}
.nav-menu__socials img {
  width: 20px;
  height: 20px;
}

body.menu-open,
body.search-open {
  overflow: hidden;
}

/*
    Site Footer

    Flexbox layout matching Webflow — edge-to-edge, no Bootstrap container.
    Mobile-first: stacked on small screens, side-by-side on desktop.

    Layout:
    1. Top row: Logo (left) + description (right)
    2. Newsletter bar (full-width red pill)
    3. Bottom: Social+copyright (left) | Contact | Contents | Discover (right)
*/
.site-footer {
  background-color: var(--theme-footer-bg, #F3F8ED);
  color: var(--theme-footer-fg, #333333);
  margin-top: 0;
}
.site-footer a {
  color: var(--theme-footer-accent, #E63946);
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.site-footer a:hover {
  opacity: 0.7;
}
.site-footer__top {
  display: flex;
  align-items: center;
  flex-direction: column;
  gap: 24px;
  padding: 32px 0;
  text-align: center;
}
@media (min-width: 992px) {
  .site-footer__top {
    flex-direction: row;
    gap: 128px;
    padding: 64px 0 32px;
    text-align: left;
  }
}
.site-footer__logo {
  flex-shrink: 0;
  width: 140px;
  height: auto;
}
@media (min-width: 992px) {
  .site-footer__logo {
    width: 200px;
  }
}
.site-footer__desc {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: var(--theme-footer-heading, #1E232D);
  margin: 0;
}
@media (min-width: 992px) {
  .site-footer__desc {
    font-size: 20px;
    line-height: 30px;
    max-width: 40%;
    align-self: center;
  }
}
.site-footer__newsletter {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 16px;
  background-color: var(--theme-footer-accent, #E63946);
  border-radius: 24px;
  padding: 16px 24px;
  margin-bottom: 24px;
  text-align: center;
}
@media (min-width: 768px) {
  .site-footer__newsletter {
    flex-direction: row;
    justify-content: space-between;
    text-align: left;
    border-radius: 999px;
    padding: 16px 32px;
    margin-bottom: 32px;
  }
}
.site-footer__newsletter-label {
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  font-weight: 500;
  color: #FFFFFF;
  margin: 0;
}
@media (min-width: 992px) {
  .site-footer__newsletter-label {
    font-size: 24px;
  }
}
.site-footer__signup-btn {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: var(--theme-footer-btn-bg, #F3F8ED);
  color: var(--theme-footer-btn-fg, #E63946);
  border: 1px solid var(--theme-footer-btn-bg, #F3F8ED);
  border-radius: 80px;
  padding: 2px 20px;
  font-family: new-spirit, sans-serif;
  font-size: 16px;
  font-weight: 400;
  line-height: 30px;
  cursor: pointer;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
@media (min-width: 992px) {
  .site-footer__signup-btn {
    font-size: 20px;
  }
}
.site-footer__signup-btn:hover {
  background-color: transparent;
  color: #FFFFFF;
  border-color: #FFFFFF;
  opacity: 1;
}
.site-footer__bottom {
  display: flex;
  flex-direction: column;
  gap: 32px;
  padding: 24px 0 32px;
}
@media (min-width: 1200px) {
  .site-footer__bottom {
    flex-direction: row;
    gap: 48px;
    padding: 32px 0 48px;
  }
}
.site-footer__left {
  flex-shrink: 0;
}
@media (min-width: 1200px) {
  .site-footer__left {
    min-width: 200px;
  }
}
.site-footer__social-icons {
  display: flex;
  gap: 16px;
  margin-bottom: 24px;
}
@media (min-width: 1200px) {
  .site-footer__social-icons {
    margin-bottom: 48px;
  }
}
.site-footer__social-icons a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  background-color: var(--theme-footer-accent, #E63946);
  border-radius: 50%;
  transition: 0.25s ease-in-out;
}
.site-footer__social-icons a:hover {
  background-color: #1E232D;
  opacity: 1;
}
.site-footer__social-icons img {
  width: 20px;
  height: 20px;
  filter: none;
}
.site-footer__copyright-bar {
  padding: 24px 0;
}
.site-footer__copyright {
  font-size: 12px;
  color: var(--theme-footer-muted, #959a9e);
  margin: 0;
}
.site-footer__columns {
  display: flex;
  flex-direction: column;
  gap: 32px;
}
@media (min-width: 768px) {
  .site-footer__columns {
    flex-direction: row;
    gap: 48px;
  }
}
@media (min-width: 1200px) {
  .site-footer__columns {
    gap: 96px;
    flex: 1;
    justify-content: flex-end;
  }
}
@media (min-width: 768px) {
  .site-footer__col {
    min-width: 140px;
  }
}
@media (min-width: 768px) {
  .site-footer__col--wide {
    min-width: 240px;
  }
}
.site-footer__heading {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  color: var(--theme-footer-heading, #1E232D);
  margin-bottom: 24px;
}
@media (min-width: 1200px) {
  .site-footer__heading {
    margin-bottom: 64px;
  }
}
.site-footer__contact p {
  font-size: 16px;
  margin-bottom: 4px;
  color: var(--theme-footer-accent, #E63946);
}
.site-footer__contact a {
  color: var(--theme-footer-accent, #E63946);
  text-decoration: underline;
}
.site-footer__contact a:hover {
  opacity: 0.7;
}
.site-footer__contact-block + .site-footer__contact-block {
  margin-top: 24px;
}
.site-footer .menu-footer {
  list-style: none;
  padding: 0;
  margin: 0;
}
.site-footer .menu-footer li {
  margin-bottom: 8px;
  line-height: 1;
}
.site-footer .menu-footer a {
  font-size: 16px;
  line-height: 1;
  color: var(--theme-footer-accent, #E63946);
  text-decoration: none;
  display: inline-block;
}
.site-footer ul.menu-footer--two-col {
  columns: 2;
  column-gap: 32px;
}
.site-footer .gform_wrapper input[type=email],
.site-footer .gform_wrapper input[type=text] {
  background-color: rgba(255, 255, 255, 0.2);
  border: 1px solid rgba(255, 255, 255, 0.4);
  border-radius: 999px;
  color: #FFFFFF;
  padding: 8px 24px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  width: 100%;
}
.site-footer .gform_wrapper input[type=email]::placeholder,
.site-footer .gform_wrapper input[type=text]::placeholder {
  color: rgba(255, 255, 255, 0.6);
}
.site-footer .gform_wrapper input[type=submit],
.site-footer .gform_wrapper .gform_button {
  background-color: #F3F8ED;
  color: #E63946;
  border: none;
  border-radius: 999px;
  padding: 8px 32px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.site-footer .gform_wrapper input[type=submit]:hover,
.site-footer .gform_wrapper .gform_button:hover {
  background-color: #FFFFFF;
}

/**
 * Gravity Forms - Orbital Theme Overrides
 *
 * Styles for GF 2.9+ Orbital theme.
 * Uses CSS custom properties to override Orbital defaults.
 *
 * Structure:
 *   1. CSS Custom Properties (theme-wide overrides)
 *   2. Direct Style Overrides (elements Orbital doesn't fully control)
 *   3. Validation & Error States
 *   4. Honeypot Field (spam protection)
 */
.gform_wrapper.gform-theme--orbital[data-form-index] {
  --gf-color-primary: #E63946;
  --gf-color-primary-rgb: 48, 181, 94;
  --gf-ctrl-label-font-family-primary: new-spirit, sans-serif;
  --gf-ctrl-label-font-size-primary: 14px;
  --gf-ctrl-label-font-weight-primary: 600;
  --gf-ctrl-label-color-primary: #1E232D;
  --gf-ctrl-font-family: new-spirit, sans-serif;
  --gf-ctrl-font-size: 16px;
  --gf-ctrl-line-height: 1.5;
  --gf-ctrl-color: #1E232D;
  --gf-ctrl-color-placeholder: #959a9e;
  --gf-ctrl-bg-color: #FFFFFF;
  --gf-ctrl-border-color: #e0e0e0;
  --gf-ctrl-border-width: 1px;
  --gf-ctrl-border-radius: 4px;
  --gf-ctrl-padding-x: 16px;
  --gf-ctrl-padding-y: 12px;
  --gf-ctrl-border-color-focus: #E63946;
  --gf-ctrl-focus-ring-color: rgba(48, 181, 94, 0.2);
  --gf-ctrl-select-color: #1E232D;
  --gf-ctrl-choice-label-color: #1E232D;
  --gf-ctrl-btn-font-family: new-spirit, sans-serif;
  --gf-ctrl-btn-font-size: 16px;
  --gf-ctrl-btn-font-weight: 600;
  --gf-ctrl-btn-color: #FFFFFF;
  --gf-ctrl-btn-color-hover: #FFFFFF;
  --gf-ctrl-btn-bg-color: #E63946;
  --gf-ctrl-btn-bg-color-hover: #bf2f3b;
  --gf-ctrl-btn-border-color: #E63946;
  --gf-ctrl-btn-border-color-hover: #bf2f3b;
  --gf-ctrl-btn-border-radius: 4px;
  --gf-ctrl-btn-padding-x: 24px;
  --gf-ctrl-btn-padding-y: 12px;
  --gf-field-pg-row-gap: 24px;
  --gf-form-gap-y: 24px;
}

.gform_wrapper.gform-theme--orbital {
  font-family: new-spirit, sans-serif;
}
.gform_wrapper.gform-theme--orbital .gform_required_legend {
  display: none;
}
.gform_wrapper.gform-theme--orbital .gfield_required {
  color: inherit;
}
.gform_wrapper.gform-theme--orbital textarea {
  min-height: 120px;
  resize: vertical;
}
.gform_wrapper.gform-theme--orbital select {
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none'%3E%3Cpath d='M1 1L5 5L9 1' stroke='%23959a9e' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 16px center;
  background-size: 10px;
  padding-right: 48px;
}
.gform_wrapper.gform-theme--orbital .gform_footer,
.gform_wrapper.gform-theme--orbital .gform_page_footer {
  margin-top: 24px;
  padding: 0;
}

.gform_wrapper.gform-theme--orbital .gfield_validation_message,
.gform_wrapper.gform-theme--orbital .validation_message {
  margin-top: 8px;
  font-size: 12px;
  line-height: 1.5;
  color: #DC3545;
}
.gform_wrapper.gform-theme--orbital .gfield_error input,
.gform_wrapper.gform-theme--orbital .gfield_error select,
.gform_wrapper.gform-theme--orbital .gfield_error textarea {
  border-color: #DC3545;
}
.gform_wrapper.gform-theme--orbital .gform_submission_error {
  margin: 0;
  padding: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 600;
  line-height: 1.5;
  color: #DC3545;
  background-color: transparent;
}
.gform_wrapper.gform-theme--orbital .gform_confirmation_message {
  padding: 24px;
  font-size: 16px;
  line-height: 1.5;
  color: #28a745;
  background-color: rgba(40, 167, 69, 0.1);
  border-radius: 4px;
}

.gform_wrapper .gform_validation_container {
  display: none !important;
  position: absolute !important;
  left: -9999px !important;
}

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

/*
    Components Manifest

    Import reusable UI components here (alphabetical order).
    Components are standalone patterns used across multiple sections.

    Examples: blog-card, team-card, testimonial-card, accordion

    Creating a new component:
        1. Create css/components/_my-component.scss
        2. Add @use 'my-component'; below
        3. Use .my-component class in templates

    Component structure:
        .my-component {
            .image { }
            .title { }
            .content { }
        }
*/
.announcement-bar {
  position: relative;
  z-index: 200;
  background-color: #1E232D;
  color: #F3F8ED;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  text-align: center;
  padding: 8px 32px;
}
.announcement-bar__inner {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
}
.announcement-bar p {
  margin: 0;
}
.announcement-bar a {
  color: #F3F8ED;
  text-decoration: underline;
}
.announcement-bar a:hover {
  opacity: 0.8;
}
.announcement-bar__dismiss {
  background: none;
  border: none;
  color: #F3F8ED;
  cursor: pointer;
  padding: 4px;
  flex-shrink: 0;
}
.announcement-bar__dismiss:hover {
  opacity: 0.7;
}

/*
    Component: Business Card (.business-card)

    Single source of truth for the shared directory card, rendered by
    template-parts/business-card.php across every context: the category landing
    grids (/retail, /dine, /health-and-beauty, /activities), the Explore grid,
    the FacetWP business listings, and the "More in {category}" related grid on
    single-business.php.

    Document order, top to bottom (image-top, matching the live directory cards):
        1. image    — rounded 16px, brand 2px frame, object-fit cover, 4:3
        2. category — primary business_category label, uppercase muted (optional)
        3. title    — display font, dark
        4. meta     — locality (suburb / city), muted (optional)

    Context-agnostic by design — grid/slide sizing is owned by the host section.
    Shares the brand image frame with .event-card (the other listing-style card)
    for visual consistency across the directory.

    BEM __ children are allowed for components (css/CLAUDE.md — Component Styles).
    Mobile-first.
*/
.business-card {
  display: block;
}
.business-card__link {
  display: flex;
  flex-direction: column;
  gap: 8px;
  height: 100%;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.business-card__link:hover .business-card__title {
  color: #E63946;
}
.business-card__link:hover .business-card__img {
  transform: scale(1.03);
}
.business-card__media {
  aspect-ratio: 4/3;
  overflow: hidden;
  border-radius: 16px;
  border: 2px solid #E63946;
  background: #F3F8ED;
  margin-bottom: 4px;
}
.business-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease-in-out;
}
.business-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.2;
  color: #1E232D;
  transition: 0.25s ease-in-out;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: calc(2 * 1.2 * 1em);
}
.business-card__footer {
  margin-top: auto;
  padding-top: 8px;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
}
.business-card__excerpt {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #333333;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.business-card__icon {
  flex: 0 0 auto;
  width: 36px;
  height: 36px;
  margin-left: auto;
  background-color: #E63946;
  -webkit-mask: var(--cat-icon) center/contain no-repeat;
  mask: var(--cat-icon) center/contain no-repeat;
}

/*
    Component: Event Card (.event-card)

    Single source of truth for the shared event card. Rendered by
    template-parts/event-card.php in THREE contexts: the event carousel
    (.section-event-carousel), the events archive grid (.section-event-archive
    .event-grid), and the single event "More events" grid (single-event.php).

    Layout matches the live Webflow card (verified against the markup at
    https://www.lovethecentre.co.nz/events). Document order, top to bottom:
        1. title   — H3, display font, dark, ABOVE the image
        2. image   — rounded 16px, object-fit cover
        3. status  — a SOLID pill BELOW the image (red for "On this week")
        4. date    — neue-haas, ~14px, not uppercased
    The live card has no category chips, so this component renders none.

    Context-agnostic by design — sizing and layout (slide width, grid columns)
    are owned by the host section; this component only styles the card's own
    visuals (link/hover, title, image, status badge, date).

    BEM __ children are allowed for components (css/CLAUDE.md — Component Styles).
    Mobile-first.
*/
.event-card {
  display: block;
}
.event-card__link {
  display: flex;
  flex-direction: column;
  gap: 16px;
  height: 100%;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.event-card__link:hover .event-card__title {
  color: #E63946;
}
.event-card__link:hover .event-card__img {
  transform: scale(1.03);
}
.event-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.2;
  color: #1E232D;
  transition: 0.25s ease-in-out;
}
.event-card__media {
  position: relative;
  aspect-ratio: 4/3;
  overflow: hidden;
  border-radius: 16px;
  border: 2px solid #E63946;
  background: #F3F8ED;
}
.event-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease-in-out;
}
.event-card__body {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.event-card__status {
  align-self: flex-start;
  padding: 4px 8px;
  border-radius: 999px;
  background: #E63946;
  color: #F3F8ED;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  white-space: nowrap;
}
.event-card--upcoming .event-card__status {
  background: transparent;
  color: #E63946;
  border: 1px solid #E63946;
}
.event-card--past .event-card__status {
  background: #959a9e;
  color: #F3F8ED;
}
.event-card__date {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 400;
  color: #000000;
  line-height: 1.5;
}
.event-card__excerpt {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 400;
  color: #959a9e;
  line-height: 1.5;
}

/*
    Newsletter Modal

    Desktop: centred popup with backdrop blur
    Mobile: bottom drawer that slides up (flat corners)

    GF 2.9+ uses the "orbital" theme with CSS custom properties.
    We override --gf-* variables on the wrapper to theme the form
    without fighting the GF markup.
*/
.newsletter-modal {
  position: fixed;
  inset: 0;
  z-index: 600;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.3s ease-in-out;
}
@media (min-width: 992px) {
  .newsletter-modal {
    align-items: center;
  }
}
.newsletter-modal[aria-hidden=false] {
  pointer-events: all;
  opacity: 1;
}
.newsletter-modal[aria-hidden=false] .newsletter-modal__panel {
  transform: translateY(0);
}
.newsletter-modal__backdrop {
  position: absolute;
  inset: 0;
  background-color: rgba(0, 0, 0, 0.4);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.newsletter-modal__panel {
  position: relative;
  z-index: 1;
  width: 100%;
  max-height: 90vh;
  overflow-y: auto;
  background-color: #FFFFFF;
  border-radius: 0;
  transform: translateY(100%);
  transition: transform 0.3s ease-in-out;
}
.newsletter-modal__panel::before {
  content: "";
  display: block;
  height: 8px;
  background: linear-gradient(90deg, #E63946, rgb(238.5762331839, 124.9237668161, 133.4641255605));
}
@media (min-width: 992px) {
  .newsletter-modal__panel {
    max-width: 540px;
    border-radius: 0;
    transform: translateY(40px);
  }
}
.newsletter-modal__close {
  position: absolute;
  top: 24px;
  right: 24px;
  background: none;
  border: none;
  color: #959a9e;
  cursor: pointer;
  padding: 4px;
  transition: 0.25s ease-in-out;
  z-index: 2;
}
.newsletter-modal__close:hover {
  color: #1E232D;
}
.newsletter-modal__body {
  padding: 64px 24px 48px;
}
@media (min-width: 992px) {
  .newsletter-modal__body {
    padding: 48px 64px 64px;
  }
}
.newsletter-modal__body .gform_wrapper {
  --gf-color-primary: #E63946;
  --gf-color-primary-rgb: 230, 57, 70;
  --gf-color-primary-contrast: #FFFFFF;
  --gf-color-primary-darker: #bf2f3b;
  --gf-color-primary-lighter: rgb(238.5762331839, 124.9237668161, 133.4641255605);
  --gf-color-in-ctrl-primary: #E63946;
  --gf-color-in-ctrl-primary-rgb: 230, 57, 70;
  --gf-color-in-ctrl-primary-contrast: #FFFFFF;
  --gf-color-in-ctrl-primary-darker: #bf2f3b;
  --gf-ctrl-label-color-primary: #1E232D;
  --gf-ctrl-label-color-secondary: #1E232D;
  --gf-radius: 4px;
  --gf-ctrl-border-color: #333333;
  --gf-color-out-ctrl-light: rgba(0, 0, 0, 0.2);
}
.newsletter-modal__body .gform_wrapper input[type=text],
.newsletter-modal__body .gform_wrapper input[type=email],
.newsletter-modal__body .gform_wrapper input[type=tel],
.newsletter-modal__body .gform_wrapper input[type=number],
.newsletter-modal__body .gform_wrapper select,
.newsletter-modal__body .gform_wrapper textarea {
  border: 1px solid #333333 !important;
  border-radius: 4px !important;
  background-color: #FFFFFF !important;
  color: #1E232D;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  padding: 8px 16px;
}
.newsletter-modal__body .gform_wrapper input[type=text]:focus,
.newsletter-modal__body .gform_wrapper input[type=email]:focus,
.newsletter-modal__body .gform_wrapper input[type=tel]:focus,
.newsletter-modal__body .gform_wrapper input[type=number]:focus,
.newsletter-modal__body .gform_wrapper select:focus,
.newsletter-modal__body .gform_wrapper textarea:focus {
  border-color: #E63946 !important;
  box-shadow: 0 0 0 2px rgba(230, 57, 70, 0.15) !important;
  outline: none;
}
.newsletter-modal__body .gform_title {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  color: #1E232D;
  text-align: center;
  margin-bottom: 24px;
}
.newsletter-modal__body .gfield_required_text {
  color: #E63946;
}
.newsletter-modal__body .gform-field-label--type-sub {
  font-size: 12px;
  color: #959a9e;
}
.newsletter-modal__body .gform_validation_errors,
.newsletter-modal__body .gform_validation_errors * {
  background: none !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  outline: none !important;
}
.newsletter-modal__body .gform_validation_errors {
  background-color: rgba(230, 57, 70, 0.06) !important;
  border: 1px solid rgba(230, 57, 70, 0.3) !important;
  border-radius: 4px !important;
  padding: 8px 16px !important;
  margin: 0 0 24px 0 !important;
}
.newsletter-modal__body .gform_validation_errors .gform_submission_error {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  flex-wrap: nowrap;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 400;
  color: #E63946;
  margin: 0 !important;
  padding: 0 !important;
  line-height: 1.5;
}
.newsletter-modal__body .gform_validation_errors .gform-icon {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: #E63946 !important;
}
.newsletter-modal__body .gfield_validation_message,
.newsletter-modal__body .validation_message {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  color: #E63946;
  margin-top: 4px;
}
.newsletter-modal__body .gfield_error input[type=text],
.newsletter-modal__body .gfield_error input[type=email],
.newsletter-modal__body .gfield_error input[type=tel] {
  border-color: #E63946 !important;
}
.newsletter-modal__body .gform_wrapper .gform_button,
.newsletter-modal__body .gform_wrapper input[type=submit] {
  width: 100%;
  background-color: #E63946 !important;
  color: #FFFFFF !important;
  border: none !important;
  border-radius: 999px !important;
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  font-weight: 400;
  padding: 16px 32px;
  margin-top: 16px;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.newsletter-modal__body .gform_wrapper .gform_button:hover,
.newsletter-modal__body .gform_wrapper input[type=submit]:hover {
  background-color: #bf2f3b !important;
}
.newsletter-modal__body .gform_confirmation_message {
  text-align: center;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  color: #1E232D;
  padding: 48px 0;
}

/*
    Award Nomination Modal

    Same shell as the newsletter modal (desktop centred popup / mobile bottom
    drawer, GF 2.9+ "orbital" CSS-variable overrides) plus paged-form styling:
    progress bar, Next/Previous buttons, the category checkbox grid and the
    character counter. GF orbital sets per-field styles so most overrides need
    !important. Only $-variables are used.
*/
.nomination-modal {
  position: fixed;
  inset: 0;
  z-index: 600;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.3s ease-in-out;
}
@media (min-width: 992px) {
  .nomination-modal {
    align-items: center;
  }
}
.nomination-modal[aria-hidden=false] {
  pointer-events: all;
  opacity: 1;
}
.nomination-modal[aria-hidden=false] .nomination-modal__panel {
  transform: translateY(0);
}
.nomination-modal__backdrop {
  position: absolute;
  inset: 0;
  background-color: rgba(0, 0, 0, 0.4);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.nomination-modal__panel {
  position: relative;
  z-index: 1;
  width: 100%;
  max-height: 90vh;
  overflow-y: auto;
  background-color: #FFFFFF;
  border-radius: 0;
  transform: translateY(100%);
  transition: transform 0.3s ease-in-out;
}
.nomination-modal__panel::before {
  content: "";
  display: block;
  height: 8px;
  background: linear-gradient(90deg, #E63946, rgb(238.5762331839, 124.9237668161, 133.4641255605));
}
@media (min-width: 992px) {
  .nomination-modal__panel {
    max-width: 600px;
    border-radius: 0;
    transform: translateY(40px);
  }
}
.nomination-modal__close {
  position: absolute;
  top: 24px;
  right: 24px;
  background: none;
  border: none;
  color: #959a9e;
  cursor: pointer;
  padding: 4px;
  transition: 0.25s ease-in-out;
  z-index: 2;
}
.nomination-modal__close:hover {
  color: #1E232D;
}
.nomination-modal__title {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  color: #1E232D;
  text-align: center;
  margin: 0 0 24px;
}
.nomination-modal__body {
  padding: 64px 24px 48px;
}
@media (min-width: 992px) {
  .nomination-modal__body {
    padding: 48px 64px 64px;
  }
}
.nomination-modal__body .gform_wrapper {
  --gf-color-primary: #E63946;
  --gf-color-primary-rgb: 230, 57, 70;
  --gf-color-primary-contrast: #FFFFFF;
  --gf-color-primary-darker: #bf2f3b;
  --gf-color-primary-lighter: rgb(238.5762331839, 124.9237668161, 133.4641255605);
  --gf-color-in-ctrl-primary: #E63946;
  --gf-color-in-ctrl-primary-rgb: 230, 57, 70;
  --gf-color-in-ctrl-primary-contrast: #FFFFFF;
  --gf-color-in-ctrl-primary-darker: #bf2f3b;
  --gf-ctrl-label-color-primary: #1E232D;
  --gf-ctrl-label-color-secondary: #1E232D;
  --gf-radius: 4px;
  --gf-ctrl-border-color: #333333;
  --gf-color-out-ctrl-light: rgba(0, 0, 0, 0.2);
}
.nomination-modal__body .gform_wrapper input[type=text],
.nomination-modal__body .gform_wrapper input[type=email],
.nomination-modal__body .gform_wrapper input[type=tel],
.nomination-modal__body .gform_wrapper input[type=number],
.nomination-modal__body .gform_wrapper select,
.nomination-modal__body .gform_wrapper textarea {
  width: 100% !important;
  border: 1px solid #333333 !important;
  border-radius: 4px !important;
  background-color: #FFFFFF !important;
  color: #1E232D;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  padding: 8px 16px;
}
.nomination-modal__body .gform_wrapper input[type=text]:focus,
.nomination-modal__body .gform_wrapper input[type=email]:focus,
.nomination-modal__body .gform_wrapper input[type=tel]:focus,
.nomination-modal__body .gform_wrapper input[type=number]:focus,
.nomination-modal__body .gform_wrapper select:focus,
.nomination-modal__body .gform_wrapper textarea:focus {
  border-color: #E63946 !important;
  box-shadow: 0 0 0 2px rgba(230, 57, 70, 0.15) !important;
  outline: none;
}
.nomination-modal__body .gform_wrapper textarea {
  min-height: 110px;
  height: 110px;
  resize: vertical;
}
.nomination-modal__body .gfield_label {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-weight: 600;
  color: #1E232D;
  margin-bottom: 4px;
}
.nomination-modal__body .gfield_required_text {
  color: #E63946;
}
.nomination-modal__body .gform-field-label--type-sub {
  font-size: 12px;
  color: #959a9e;
}
.nomination-modal__body .gfield--type-html {
  color: #333333;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  line-height: 1.5;
}
.nomination-modal__body .gfield--type-html * {
  color: #333333;
}
.nomination-modal__body .gfield_description {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  color: #959a9e;
  padding: 0;
  margin: 0 0 8px;
}
.nomination-modal__body .gform_validation_errors,
.nomination-modal__body .gform_validation_errors * {
  background: none !important;
  background-color: transparent !important;
  border: none !important;
  box-shadow: none !important;
  outline: none !important;
}
.nomination-modal__body .gform_validation_errors {
  background-color: rgba(230, 57, 70, 0.06) !important;
  border: 1px solid rgba(230, 57, 70, 0.3) !important;
  border-radius: 4px !important;
  padding: 8px 16px !important;
  margin: 0 0 24px 0 !important;
}
.nomination-modal__body .gform_validation_errors .gform_submission_error {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  flex-wrap: nowrap;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 400;
  color: #E63946;
  margin: 0 !important;
  padding: 0 !important;
  line-height: 1.5;
}
.nomination-modal__body .gform_validation_errors .gform-icon {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  color: #E63946 !important;
}
.nomination-modal__body .gfield_validation_message,
.nomination-modal__body .validation_message {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  color: #E63946;
  margin-top: 4px;
}
.nomination-modal__body .gfield_error input[type=text],
.nomination-modal__body .gfield_error input[type=email],
.nomination-modal__body .gfield_error input[type=tel],
.nomination-modal__body .gfield_error textarea {
  border-color: #E63946 !important;
}
.nomination-modal__body .gfield_checkbox,
.nomination-modal__body .gfield_radio {
  display: grid;
  grid-template-columns: 1fr;
  gap: 8px 16px;
  margin: 0;
  padding: 0;
  list-style: none;
}
@media (min-width: 768px) {
  .nomination-modal__body .gfield_checkbox,
  .nomination-modal__body .gfield_radio {
    grid-template-columns: 1fr 1fr;
  }
}
.nomination-modal__body .gfield_checkbox .gchoice,
.nomination-modal__body .gfield_radio .gchoice {
  display: flex;
  align-items: flex-start;
  gap: 8px;
}
.nomination-modal__body .gfield_checkbox label,
.nomination-modal__body .gfield_radio label {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #1E232D;
  line-height: 1.5;
}
.nomination-modal__body .gfield_checkbox input[type=checkbox],
.nomination-modal__body .gfield_checkbox input[type=radio],
.nomination-modal__body .gfield_radio input[type=checkbox],
.nomination-modal__body .gfield_radio input[type=radio] {
  accent-color: #E63946;
  width: 18px;
  height: 18px;
  flex: 0 0 auto;
  margin-top: 2px;
}
.nomination-modal__body .charleft {
  display: none;
}
.nomination-modal__body .ltc-charcount {
  display: block;
  text-align: right;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  color: #959a9e;
  margin-top: 4px;
}
.nomination-modal__body .ltc-charcount.is-limit {
  color: #E63946;
}
.nomination-modal__body .gf_progressbar_wrapper {
  margin-bottom: 24px;
}
.nomination-modal__body .gf_progressbar_wrapper .gf_progressbar_title {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  color: #959a9e;
  margin-bottom: 4px;
}
.nomination-modal__body .gf_progressbar {
  background-color: rgba(230, 57, 70, 0.12) !important;
  border-radius: 999px !important;
  overflow: hidden;
}
.nomination-modal__body .gf_progressbar_percentage {
  background-color: #E63946 !important;
  border-radius: 999px !important;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
}
.nomination-modal__body .gf_progressbar_percentage span {
  color: #FFFFFF !important;
}
.nomination-modal__body .gform_page_footer,
.nomination-modal__body .gform_footer {
  border-top: none !important;
  padding-top: 0 !important;
}
.nomination-modal__body .gform_page_footer {
  display: flex;
  gap: 16px;
  margin-top: 24px;
}
.nomination-modal__body .gform_next_button,
.nomination-modal__body .gform_previous_button,
.nomination-modal__body .gform_page_footer input[type=button],
.nomination-modal__body .gform_page_footer input[type=submit] {
  flex: 1 1 auto;
  border-radius: 999px !important;
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  font-weight: 400;
  padding: 16px 32px;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.nomination-modal__body .gform_next_button,
.nomination-modal__body .gform_page_footer input[type=submit] {
  background-color: #E63946 !important;
  color: #FFFFFF !important;
  border: none !important;
}
.nomination-modal__body .gform_next_button:hover,
.nomination-modal__body .gform_page_footer input[type=submit]:hover {
  background-color: #bf2f3b !important;
}
.nomination-modal__body .gform_previous_button {
  flex: 0 0 auto;
  background-color: transparent !important;
  color: #E63946 !important;
  border: 1px solid #E63946 !important;
}
.nomination-modal__body .gform_previous_button:hover {
  background-color: rgba(230, 57, 70, 0.08) !important;
}
.nomination-modal__body .gform_footer .gform_button,
.nomination-modal__body .gform_footer input[type=submit] {
  width: 100%;
  background-color: #E63946 !important;
  color: #FFFFFF !important;
  border: none !important;
  border-radius: 999px !important;
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  font-weight: 400;
  padding: 16px 32px;
  margin-top: 16px;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.nomination-modal__body .gform_footer .gform_button:hover,
.nomination-modal__body .gform_footer input[type=submit]:hover {
  background-color: #bf2f3b !important;
}
.nomination-modal__body .gform_confirmation_message {
  text-align: center;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  color: #1E232D;
  padding: 48px 0;
}

/*
    Search Drawer

    Mobile-only drawer that slides down from the top of the viewport when the
    circular search trigger in the header is tapped. Mirrors the newsletter
    modal pattern (backdrop + sliding panel) but enters from the top so it
    feels connected to the header control that opened it.

    Triggered by [data-search-open]; closed by [data-search-close] or Escape.
*/
.search-drawer {
  position: fixed;
  inset: 0;
  z-index: 600;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.3s ease-in-out;
}
.search-drawer[aria-hidden=false] {
  pointer-events: all;
  opacity: 1;
}
.search-drawer[aria-hidden=false] .search-drawer__panel {
  transform: translateY(0);
}
.search-drawer__backdrop {
  position: absolute;
  inset: 0;
  background-color: rgba(0, 0, 0, 0.4);
  backdrop-filter: blur(4px);
  cursor: pointer;
}
.search-drawer__panel {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  background-color: #F3F8ED;
  padding: 32px 24px 48px;
  transform: translateY(-100%);
  transition: transform 0.3s ease-in-out;
  border-bottom: 4px solid #E63946;
}
.search-drawer__close {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: none;
  border: none;
  color: #1E232D;
  cursor: pointer;
  border-radius: 50%;
  transition: 0.25s ease-in-out;
}
.search-drawer__close:hover, .search-drawer__close:focus-visible {
  background-color: rgba(30, 35, 45, 0.08);
  outline: none;
}
.search-drawer__close svg {
  width: 22px;
  height: 22px;
}
.search-drawer__form {
  margin-top: 48px;
}
.search-drawer__label {
  display: block;
  font-family: new-spirit, sans-serif;
  font-size: clamp(22px, 5vw, 28px);
  font-weight: 400;
  line-height: 1.2;
  color: #1E232D;
  margin-bottom: 16px;
}
.search-drawer__input-wrap {
  position: relative;
  display: flex;
  align-items: center;
}
.search-drawer__input {
  flex: 1;
  width: 100%;
  height: 56px;
  padding: 0 56px 0 16px;
  background-color: #FFFFFF;
  border: 1px solid #1E232D;
  border-radius: 999px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  color: #1E232D;
  transition: border-color 0.25s ease-in-out, box-shadow 0.25s ease-in-out;
}
.search-drawer__input::placeholder {
  color: #959a9e;
}
.search-drawer__input:focus {
  outline: none;
  border-color: #E63946;
  box-shadow: 0 0 0 3px rgba(230, 57, 70, 0.15);
}
.search-drawer__submit {
  position: absolute;
  right: 6px;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  padding: 0;
  box-sizing: border-box;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 50%;
  background-color: #E63946;
  color: #FFFFFF;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.search-drawer__submit:hover, .search-drawer__submit:focus-visible {
  background-color: #bf2f3b;
  outline: none;
}
.search-drawer__submit > svg {
  display: block;
  width: 20px !important;
  height: 20px !important;
  flex-shrink: 0;
  fill: currentColor;
}

/*
    Side Navigation

    Fixed left-side category pill buttons. Label sits left-aligned inside the pill.
    Icon is absolute-positioned on the right: on hover it slides in from off-screen
    and lands with 20% of its width bleeding past the pill's right edge (clipped by
    overflow: hidden on the pill). Full pill height keeps the icon feeling bold.

    Rendered by Bronte_Side_Nav_Walker → <a.side-nav__btn><img.side-nav__icon><span.side-nav__label>
    Icon is ACF-driven (menu_item_icon field); any uploaded image renders as-is.
*/
.side-nav {
  position: fixed;
  left: 0;
  top: calc(120px + var(--wp-admin--admin-bar--height, 0px));
  bottom: 16px;
  z-index: 100;
  flex-direction: column;
  gap: 16px;
  padding-left: 24px;
}
.side-nav__btn {
  position: relative;
  display: flex;
  align-items: center;
  flex: 1 1 0;
  min-height: 0;
  width: 160px;
  padding: 8px 16px;
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  font-weight: 400;
  line-height: 1.5;
  color: var(--side-nav-fg, #E63946);
  background-color: var(--side-nav-bg, #F3F8ED);
  border: 1px solid var(--side-nav-border, #E63946);
  border-radius: 24px;
  overflow: hidden;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.side-nav__btn:hover {
  background-color: var(--side-nav-hover-bg, #E63946);
  color: var(--side-nav-hover-fg, #FFFFFF);
}
.side-nav__btn:hover .side-nav__icon {
  opacity: 1;
  transform: translateX(20%);
}
.side-nav__btn.is-active {
  background-color: var(--side-nav-hover-bg, #E63946);
  color: var(--side-nav-hover-fg, #FFFFFF);
}
.side-nav__btn.is-active .side-nav__icon {
  opacity: 1;
  transform: translateX(20%);
}
.side-nav__btn.is-on-dark {
  color: #F3F8ED;
  border-color: #F3F8ED;
  background-color: transparent;
}
.side-nav__btn.is-on-dark:hover {
  background-color: #F3F8ED;
  color: #1E232D;
}
.side-nav__icon {
  position: absolute;
  top: 0;
  right: 0;
  height: 100%;
  width: auto;
  aspect-ratio: 1/1;
  opacity: 0;
  transform: translateX(100%);
  transition: 0.25s ease-in-out;
  pointer-events: none;
}
.side-nav__label {
  position: relative;
  z-index: 1;
}

/*
    Component: Story Card (.story-card)

    Single source of truth for the shared story card, rendered by
    template-parts/story-card.php in multiple contexts: the story carousel
    (.section-story-carousel), the /stories archive grid, the FacetWP stories
    listing, and the "More articles" related grid on single-story.php.

    Document order, top to bottom (matches the live story cards):
        1. image  — rounded 16px, object-fit cover, 3:2
        2. date   — uppercase, muted
        3. title  — display font
        4. author — "by …", muted (optional)

    Context-agnostic by design — slide/grid sizing is owned by the host section
    (e.g. .story-carousel__track > .story-card sets the slide width). This
    component only styles the card's own visuals.

    BEM __ children are allowed for components (css/CLAUDE.md — Component Styles).
    Mobile-first.
*/
.story-card {
  display: block;
}
.story-card__link {
  display: flex;
  flex-direction: column;
  gap: 8px;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.story-card__link:hover {
  transform: translateY(-4px);
}
.story-card__link:hover .story-card__title {
  color: #E63946;
}
.story-card__link:hover .story-card__img {
  transform: scale(1.03);
}
.story-card__media {
  aspect-ratio: 3/2;
  overflow: hidden;
  border-radius: 16px;
  margin-bottom: 8px;
}
.story-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease-in-out;
}
.story-card__date {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #959a9e;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.story-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(20px, 1.8vw + 0.5rem, 28px);
  font-weight: 500;
  line-height: 1.2;
  transition: 0.25s ease-in-out;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: calc(2 * 1.2 * 1em);
}
.story-card__author {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #959a9e;
}
.story-card__footer {
  margin-top: 4px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.story-card__icon {
  flex: 0 0 auto;
  width: 36px;
  height: 36px;
  margin-left: auto;
  background-color: #E63946;
  -webkit-mask: var(--cat-icon) center/contain no-repeat;
  mask: var(--cat-icon) center/contain no-repeat;
}

/*
    Component: Story Card — Archive grid (.story-card-archive)

    The grid-style story card used only on the /stories archive (archive-story.php),
    rendered by template-parts/story-card-archive.php. Mirrors the directory
    business-card so the stories archive matches the live site and the sibling
    category landing grids (/retail, /dine, …).

    Document order, top to bottom (image-top style, matching the live archive card):
        1. title   — display font, dark, ABOVE the image
        2. image   — rounded 16px, brand 2px frame, object-fit cover, 4:3
        3. footer  — short excerpt (left) + Stories category icon (right)

    Separate from .story-card (the image-top/date-led card kept for the home
    carousel and single-story related grid). Grid sizing — including the large
    featured first card — is owned by the host section (_story-archive.scss).

    BEM __ children are allowed for components (css/CLAUDE.md — Component Styles).
    Mobile-first.
*/
.story-card-archive {
  display: block;
}
.story-card-archive__link {
  display: flex;
  flex-direction: column;
  gap: 8px;
  height: 100%;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.story-card-archive__link:hover .story-card-archive__title {
  color: #E63946;
}
.story-card-archive__link:hover .story-card-archive__img {
  transform: scale(1.03);
}
.story-card-archive__media {
  aspect-ratio: 4/3;
  overflow: hidden;
  border-radius: 16px;
  border: 2px solid #E63946;
  background: #F3F8ED;
  margin-bottom: 4px;
}
.story-card-archive__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease-in-out;
}
.story-card-archive__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.2;
  color: #1E232D;
  transition: 0.25s ease-in-out;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: calc(2 * 1.2 * 1em);
}
.story-card-archive__footer {
  margin-top: auto;
  padding-top: 8px;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
}
.story-card-archive__excerpt {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #333333;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.story-card-archive__icon {
  flex: 0 0 auto;
  width: 36px;
  height: 36px;
  margin-left: auto;
  background-color: #E63946;
  -webkit-mask: var(--cat-icon) center/contain no-repeat;
  mask: var(--cat-icon) center/contain no-repeat;
}

/*
    Sections Manifest

    Import ACF Flexible Content section styles here (alphabetical order).
    Each section corresponds to a layout in the Sections field group.

    Creating a new section:
        1. Create css/sections/_my-section.scss
        2. Add @use 'my-section'; below
        3. PHP template: template-parts/sections/s-my-section.php

    Section structure:
        .section-my-section {
            padding: $section-spacing-y 0;

            .title { }
            .content { }
        }
*/
/*
    404 Page Not Found

    Two-column layout matching the Webflow live site:
    - Left: editable image with a thin primary border, rounded corners and a
      credit caption absolute-positioned in the bottom-left.
    - Right: large serif red heading stacked above WYSIWYG intro copy with
      underlined inline links.

    Stacks vertically on narrow viewports.
*/
[data-aos=blur-in] {
  filter: blur(12px);
  opacity: 0;
  transition-property: filter, opacity !important;
}
[data-aos=blur-in].aos-animate {
  filter: blur(0);
  opacity: 1;
}

.s-404 {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  align-items: center;
  padding-bottom: 48px;
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .s-404 {
    gap: 48px;
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
@media (min-width: 1200px) {
  .s-404 {
    grid-template-columns: 1fr 1fr;
    gap: 64px;
    padding-bottom: 64px;
  }
}
.s-404__media {
  position: relative;
  border: 1px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
  aspect-ratio: 4/3;
  background-color: #F3F8ED;
  max-width: 600px;
  width: 100%;
}
@media (min-width: 1200px) {
  .s-404__media {
    aspect-ratio: 1/1;
    max-width: none;
  }
}
.s-404__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.s-404__credit {
  position: absolute;
  bottom: 16px;
  left: 16px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  color: #F3F8ED;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  line-height: 1.2;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);
}
.s-404__credit-title {
  font-weight: 500;
}
.s-404__body {
  display: flex;
  flex-direction: column;
  gap: 32px;
}
.s-404__heading {
  margin: 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 5.5vw + 1rem, 88px);
  font-weight: 400;
  line-height: 1.2;
  overflow-wrap: break-word;
}
.s-404__intro {
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 1.2vw + 0.8rem, 24px);
  line-height: 1.5;
}
.s-404__intro p {
  margin: 0 0 16px 0;
}
.s-404__intro p:last-child {
  margin-bottom: 0;
}
.s-404__intro a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 4px;
  transition: 0.25s ease-in-out;
}
.s-404__intro a:hover {
  text-decoration-thickness: 2px;
}

/*
    Section: About — Association (s-about-association)

    Ports the live About page "Hamilton Central Business Association" block:
    a rotated red badge top (offset toward the image), a text column on the LEFT
    and an image column on the RIGHT (one large framed feature image + a 2-up row
    of square tiles). Desktop (>=$screen-lg) is two columns; below that it stacks
    and the tiles stay 2-up.
*/
.section-about-association {
  position: relative;
  overflow-x: clip;
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Rotated badge -- sits in the gap between the heading and image,
     near the top of the section (matches live placement). Hidden on mobile
     to match the live site, which sets `.about-badge-wrapper { display:none }`
     at <=767px so the stacked heading stays clean. ----------------------- */
  /* ---- Two-column layout (stacked -> side by side at $screen-lg) -------- */
  /* ---- Text column ----------------------------------------------------- */
  /* ---- Image column: large feature + 2-up square tiles ----------------- */
  /* ---- D-24 colour variants -------------------------------------------- */
  /* ---- D-22 spacing overrides ------------------------------------------ */
}
@media (min-width: 768px) {
  .section-about-association {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-about-association .badge {
  display: none;
}
@media (min-width: 768px) {
  .section-about-association .badge {
    display: block;
    position: absolute;
    top: clamp(8px, 2vw, 32px);
    left: 42%;
    width: clamp(116px, 14vw, 180px);
    height: auto;
    transform: rotate(-13deg);
    transform-origin: center;
    z-index: 10;
    pointer-events: none;
  }
}
.section-about-association .layout {
  display: flex;
  flex-direction: column;
  gap: 48px;
}
@media (min-width: 1200px) {
  .section-about-association .layout {
    flex-direction: row;
    align-items: flex-start;
    gap: clamp(48px, 5vw, 96px);
  }
}
.section-about-association .body {
  min-width: 0;
}
@media (min-width: 1200px) {
  .section-about-association .body {
    flex: 1 1 46%;
    max-width: 34rem;
  }
}
.section-about-association .heading {
  margin: 0 0 24px;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(40px, 2rem + 4.2vw, 92px);
  line-height: 1.05;
}
.section-about-association .copy {
  max-width: 26rem;
  line-height: 1.5;
}
.section-about-association .copy p {
  margin: 0 0 16px;
}
.section-about-association .copy p:last-child {
  margin-bottom: 0;
}
.section-about-association .copy a {
  color: #E63946;
  text-decoration: underline;
}
.section-about-association .media {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
@media (min-width: 1200px) {
  .section-about-association .media {
    flex: 1 1 0;
  }
}
.section-about-association .feature {
  position: relative;
  margin: 0;
  aspect-ratio: 16/11;
  border: 2px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
}
.section-about-association .feature__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-about-association .tiles {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}
.section-about-association .tile {
  position: relative;
  margin: 0;
  aspect-ratio: 1/1;
  border: 2px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
}
.section-about-association .tile__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-about-association .media__credit {
  position: absolute;
  bottom: 16px;
  left: 16px;
  margin: 0;
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  line-height: 1.2;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}
.section-about-association--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
}
.section-about-association--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-about-association--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-about-association--spacing-none {
  padding-block: 0;
}
.section-about-association--spacing-tight {
  padding-block: 32px;
}
.section-about-association--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: About — Intro (s-about-intro)

    Reusable mirror-able block from the live About page ("Our Story" / "Our
    Mission"): an optional circular badge row, a two-image column (staggered 1:1
    images, the live `image-45` offset), and a dark navy card (red border, large
    radius) holding an eyebrow + large display intro paragraph (+ optional CTA).

    Stacks below $screen-md (live `.about-home` goes column at the tablet
    breakpoint); the two images stay in a row at every width (live
    `.about-home-img-column` is `flex-direction:row` with `aspect-ratio:1/1`).
    `--media-left/right` flips images vs card at desktop.
*/
.section-about-intro {
  overflow-x: clip;
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Circular badge in its own row above ----------------------------- */
  /* ---- Layout: stacked -> side by side at $screen-md ------------------- */
  /* ---- Staggered two-image column (live `.about-home-img-column`) ------ */
  /* ---- Dark navy card (live `.background-color-tertiary`) --------------- */
  /* ---- media_position flip ---------------------------------------------
     Mobile: card is forced first (order:-1 above). Desktop: the card resets to
     order:0 and media_position decides the columns -- default (--media-left)
     keeps DOM order (images left, card right); --media-right swaps them. */
  /* ---- badge_position: over_card (live homepage band) ------------------
     The circular brand badge is centred on the card's top edge instead of
     sitting in a row above. The card needs extra top padding so the eyebrow
     clears the overlapping badge, and the columns top-align (the image stack
     runs taller than the card on the homepage's 3-4 image variant). */
  /* ---- D-24 colour variants (the card keeps its own dark surface) ------ */
  /* ---- D-22 spacing overrides ------------------------------------------ */
}
@media (min-width: 768px) {
  .section-about-intro {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-about-intro .badge-row {
  margin-bottom: 32px;
}
.section-about-intro .badge {
  display: block;
  width: clamp(96px, 12vw, 150px);
  height: auto;
}
.section-about-intro .layout {
  display: flex;
  flex-direction: column;
  gap: 48px;
}
@media (min-width: 992px) {
  .section-about-intro .layout {
    flex-direction: row;
    align-items: center;
    gap: clamp(48px, 5vw, 96px);
  }
}
.section-about-intro .media {
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  gap: 16px;
  min-width: 0;
}
@media (min-width: 992px) {
  .section-about-intro .media {
    flex: 0 0 34%;
    flex-direction: column;
    gap: 24px;
  }
}
.section-about-intro .shot {
  position: relative;
  margin: 0;
  flex: 1 1 48%;
  aspect-ratio: 1/1;
  border: 2px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
}
@media (min-width: 992px) {
  .section-about-intro .shot {
    flex: none;
    width: 100%;
    aspect-ratio: 3/2;
  }
}
.section-about-intro .shot__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-about-intro .media__credit {
  position: absolute;
  bottom: 8px;
  left: 8px;
  margin: 0;
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  line-height: 1.2;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}
.section-about-intro .card {
  min-width: 0;
  background: #1E232D;
  border: 1px solid #E63946;
  border-radius: 24px;
  color: #F3F8ED;
  padding: clamp(32px, 4vw, 64px);
  order: -1;
}
@media (min-width: 992px) {
  .section-about-intro .card {
    flex: 1 1 0;
    order: 0;
  }
}
.section-about-intro .eyebrow {
  margin: 0 0 32px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 400;
  color: #F3F8ED;
}
.section-about-intro .intro {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  line-height: 1.08;
  font-size: clamp(2rem, 1.2rem + 3vw, 4rem);
}
.section-about-intro .intro p {
  margin: 0 0 16px;
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
.section-about-intro .intro p:last-child {
  margin-bottom: 0;
}
.section-about-intro .cta {
  margin-top: 32px;
  align-self: flex-start;
  color: #F3F8ED;
  border-color: #F3F8ED;
}
.section-about-intro .cta:hover, .section-about-intro .cta:focus-visible {
  background: #F3F8ED;
  color: #1E232D;
  border-color: #F3F8ED;
}
@media (min-width: 992px) {
  .section-about-intro--media-right .media {
    order: 2;
  }
  .section-about-intro--media-right .card {
    order: 1;
  }
}
.section-about-intro--badge-over .badge-row {
  display: none;
}
.section-about-intro--badge-over .card {
  position: relative;
  padding-top: clamp(96px, 11vw, 130px);
}
.section-about-intro--badge-over .card__badge {
  position: absolute;
  top: 0;
  left: 50%;
  width: clamp(96px, 10vw, 120px);
  height: auto;
  transform: translate(-50%, -50%);
}
.section-about-intro--badge-over .media {
  flex-direction: column;
}
@media (min-width: 992px) {
  .section-about-intro--badge-over .layout {
    max-width: 1440px;
    margin-inline: auto;
  }
  .section-about-intro--badge-over .media {
    flex: 0 0 clamp(280px, 24vw, 360px);
  }
}
.section-about-intro--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
}
.section-about-intro--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
}
.section-about-intro--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
}
.section-about-intro--spacing-none {
  padding-block: 0;
}
.section-about-intro--spacing-tight {
  padding-block: 32px;
}
.section-about-intro--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Article Hero (s-article-hero)

    CMS single hero for article-collection + events-collections, also rendered
    by Phase 4 single-event.php / single-story.php via the shared get_template_part
    path per D-12. Visual parity target: audit/screenshots/s-article-hero-{1440,768,375}.png.

    Pattern references:
        - Section shell mirrors 03-02 s-hero but stacks media ABOVE body (single
          column at every viewport — no two-column variant).
        - Body metadata (category | status chip + title + date) centered by
          default; readable column caps the title width at $screen-lg.
        - D-24 colour variants consumed via --section-bg / --section-fg /
          --heading-fg custom properties.
*/
.section-article-hero {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  margin-block: clamp(32px, 4vw, 64px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-article-hero {
    gap: 48px;
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-article-hero .media {
  position: relative;
  overflow: hidden;
  border-radius: 24px;
  aspect-ratio: 16/9;
  background-color: #F3F8ED;
}
@media (min-width: 1200px) {
  .section-article-hero .media {
    aspect-ratio: 21/9;
  }
}
.section-article-hero .media__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-article-hero .body {
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-width: 900px;
  margin-inline: auto;
  text-align: center;
}
.section-article-hero .category {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #959a9e;
}
.section-article-hero .status {
  align-self: center;
  padding: 4px 16px;
  border-radius: 999px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.section-article-hero .status--on-this-week {
  background: #E63946;
  color: #F3F8ED;
}
.section-article-hero .status--upcoming {
  background: #F3F8ED;
  color: #E63946;
  border: 1px solid #E63946;
}
.section-article-hero .status--past {
  background: #959a9e;
  color: #F3F8ED;
}
.section-article-hero .title {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(32px, 5vw + 0.5rem, 72px);
  font-weight: 400;
  line-height: 1.2;
  overflow-wrap: break-word;
}
.section-article-hero .date {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  color: #959a9e;
}
.section-article-hero--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  margin-block: 0;
  padding-block: clamp(32px, 4vw, 64px);
}
.section-article-hero--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(32px, 4vw, 64px);
}
.section-article-hero--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(32px, 4vw, 64px);
}
.section-article-hero--spacing-none {
  margin-block: 0;
}
.section-article-hero--spacing-tight {
  margin-block: 32px;
}
.section-article-hero--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Audio Player (s-audio-player)

    Pill-shaped player: circular play/pause button + title + clickable progress
    track with time labels. Behaviour in initAudioPlayers() (js/custom.js).

    Colours come from the page theme: the track + text use --section-fg, the
    play button + progress fill use --heading-fg (gold on Matariki). Wired in
    css/_page_matariki.scss.
*/
.section-audio-player {
  color: var(--section-fg, #333333);
  margin-block: clamp(32px, 4vw, 64px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-audio-player {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}

.audio-player {
  display: flex;
  align-items: center;
  gap: 16px;
  max-width: 520px;
  padding: 8px 16px;
  border: 1px solid var(--section-fg, #e0e0e0);
  border-radius: 999px;
}
.audio-player__play {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 50%;
  cursor: pointer;
  background-color: var(--heading-fg, #E63946);
  color: var(--theme-bg, #FFFFFF);
  transition: 0.25s ease-in-out;
}
.audio-player__play:hover {
  opacity: 0.9;
}
.audio-player__icon {
  display: block;
}
.audio-player__icon--pause {
  display: none;
}
.audio-player.is-playing .audio-player__icon--play {
  display: none;
}
.audio-player.is-playing .audio-player__icon--pause {
  display: block;
}
.audio-player__body {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.audio-player__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: 16px;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.audio-player__bar {
  display: flex;
  align-items: center;
  gap: 8px;
}
.audio-player__current, .audio-player__duration {
  flex-shrink: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  color: var(--section-fg, #333333);
}
.audio-player__track {
  position: relative;
  flex: 1;
  height: 4px;
  border-radius: 999px;
  background-color: color-mix(in srgb, var(--section-fg, #959a9e) 30%, transparent);
  cursor: pointer;
}
.audio-player__fill {
  height: 100%;
  width: 0;
  border-radius: 999px;
  background-color: var(--heading-fg, #E63946);
}

/*
    Section: Award Categories (s-award-categories)

    Two-column band: a sticky intro (heading + text + optional image) on the
    left, the category list on the right. Each category row shows its name and —
    when nominations are open — a text-style "Who qualifies" expander plus an
    outline "Nominate" pill. Migrated from the old #awards-categories text_block
    styles in _page_awards.scss; colours come from the page theme custom props
    (--theme-accent) so it re-skins on the dark Awards theme.
*/
.section-award-categories {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-award-categories {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-award-categories--spacing-none {
  margin-block: 0;
}
.section-award-categories--spacing-tight {
  margin-block: clamp(32px, 4vw, 48px);
}
.section-award-categories--spacing-loose {
  margin-block: clamp(64px, 7vw, 96px);
}
@media (min-width: 992px) {
  .section-award-categories .inner {
    display: grid;
    grid-template-columns: 0.8fr 1.2fr;
    column-gap: clamp(48px, 6vw, 96px);
    align-items: start;
  }
}
@media (min-width: 992px) {
  .section-award-categories .awards-cat-intro {
    grid-column: 1;
    position: sticky;
    top: clamp(64px, 12vh, 120px);
    align-self: start;
  }
}
.section-award-categories .awards-cat-intro .heading {
  margin-top: 0;
  margin-bottom: 16px;
  color: var(--theme-accent, #E63946);
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(40px, 6vw + 0.5rem, 75px);
  line-height: 1.2;
}
.section-award-categories .awards-cat-intro .intro {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-award-categories .awards-cat-intro .intro p:last-child {
  margin-bottom: 0;
}
.section-award-categories .awards-cat-intro__prize-draw {
  margin-top: 24px;
  padding: 16px 24px;
  border: 1px solid var(--theme-accent, #e2b354);
  border-radius: 4px;
  color: var(--theme-text, #333333);
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-award-categories .awards-cat-intro__prize-draw p {
  margin: 0;
}
.section-award-categories .awards-cat-intro__prize-draw strong {
  color: var(--theme-accent, #e2b354);
  font-weight: 600;
}
.section-award-categories .awards-cat-intro__image {
  display: block;
  width: 100%;
  height: auto;
  margin-top: 24px;
  border-radius: 16px;
}
.section-award-categories .awards-cat-intro__nominate {
  margin-top: 24px;
}
.section-award-categories .awards-categories {
  grid-column: 2;
  list-style: none;
  margin: 0;
  padding: 0;
}
.section-award-categories .awards-categories__item {
  padding: clamp(16px, 2vw, 24px) 0;
  border-bottom: 1px solid rgba(243, 248, 237, 0.25);
}
.section-award-categories .awards-categories__item:first-child {
  border-top: 1px solid rgba(243, 248, 237, 0.25);
}
.section-award-categories .awards-categories__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}
.section-award-categories .awards-categories__name {
  flex: 1 1 auto;
  min-width: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(20px, 1.4vw + 0.5rem, 28px);
  line-height: 1.2;
}
.section-award-categories .awards-categories__actions {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: clamp(8px, 1.5vw, 24px);
}
.section-award-categories .awards-categories__buttons {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.section-award-categories .awards-categories__buttons .awards-categories__cta {
  width: 100%;
  text-align: center;
}
.section-award-categories .awards-categories__qualifies-toggle {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 0;
  background: none;
  border: none;
  cursor: pointer;
  color: var(--theme-accent, #E63946);
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  text-decoration: underline;
  text-underline-offset: 3px;
  white-space: nowrap;
  transition: 0.25s ease-in-out;
}
.section-award-categories .awards-categories__qualifies-toggle::after {
  content: "";
  width: 7px;
  height: 7px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: rotate(45deg);
  transition: transform 0.25s ease-in-out;
}
.section-award-categories .awards-categories__qualifies-toggle[aria-expanded=true]::after {
  transform: rotate(225deg);
}
.section-award-categories .awards-categories__qualifies-toggle:hover {
  opacity: 0.75;
}
.section-award-categories .awards-categories__cta {
  flex-shrink: 0;
  width: auto;
  padding: 4px 24px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  text-decoration: none;
  white-space: nowrap;
}
.section-award-categories .awards-categories__qualifies {
  margin-top: 16px;
  padding: 16px 24px;
  background: rgba(243, 248, 237, 0.08);
  border-left: 2px solid var(--theme-accent, #E63946);
  border-radius: 4px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  line-height: 1.5;
}
.section-award-categories .awards-categories__qualifies[hidden] {
  display: none;
}
.section-award-categories .awards-categories__qualifies p {
  margin: 0;
}
.section-award-categories .awards-categories__qualifies p + p {
  margin-top: 8px;
}
@media (max-width: 576px) {
  .section-award-categories .awards-categories__row {
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
  }
  .section-award-categories .awards-categories__actions {
    width: 100%;
    flex-direction: column;
    align-items: stretch;
    gap: 16px;
  }
  .section-award-categories .awards-categories__qualifies-toggle {
    align-self: flex-start;
  }
}

/*
    Section: BID Cards (s-bid-cards)

    Live About page "What is a Business Improvement District?" block
    (https://www.lovethecentre.co.nz/about). Verified against live computed styles:
    - Tiles: red (#E63946), 16px radius, 32px padding, aspect-ratio 1/1, flex column
      with justify-content:space-between (label row top, description bottom).
    - Number pill: 1px cream border, pill radius, 4px 16px padding.
    - Layout switches at 767px: >=768 three across, <768 single column. Tiles stay
      square at every width.
    - Heading: red display type; badge ("the centre") sits top-right, statically
      tilted (matches live; no animation).

    Nest-not-BEM section root; .card uses component-level BEM __ (same convention as
    s-card-grid's .card and s-stats' .stat).
*/
.section-bid-cards {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Header: heading (+ optional intro) left, badge top-right ---------- */
  /* ---- Cards: stacked (mobile) -> slider (tablet) -> 3-up grid (desktop) -

     The tiles are square. At narrow 3-up widths a square is too short to hold
     the body copy AND aspect-ratio couples each tile's min-width to that tall
     content -- which pushes three tiles past the viewport (they "bleed off").
     So we only go 3-up once the tiles are genuinely wide enough ($screen-lg);
     in the tablet band the tiles keep a comfortable size and scroll-snap
     horizontally (a native touch slider). Mobile stays single-column. */
  /* ---- D-24 colour variants (section surface only; cards stay red) ------- */
  /* ---- D-22 spacing overrides ------------------------------------------- */
}
@media (min-width: 768px) {
  .section-bid-cards {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-bid-cards .header {
  display: flex;
  flex-direction: column;
  gap: 24px;
  margin-bottom: 48px;
}
@media (min-width: 768px) {
  .section-bid-cards .header {
    flex-direction: row;
    justify-content: space-between;
    align-items: flex-end;
    gap: 32px;
  }
}
.section-bid-cards .header__text {
  min-width: 0;
}
.section-bid-cards .heading {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 2rem + 3.2vw, 96px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-bid-cards .intro {
  max-width: 512px;
  margin-top: 16px;
  color: var(--section-fg, #333333);
}
.section-bid-cards .intro p {
  margin: 0 0 8px 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  line-height: 1.5;
}
.section-bid-cards .intro p:last-child {
  margin-bottom: 0;
}
.section-bid-cards .badge {
  flex-shrink: 0;
  width: clamp(140px, 14vw, 188px);
  height: auto;
  align-self: flex-end;
  transform: rotate(-8deg);
  transform-origin: center;
}
.section-bid-cards .grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 768px) and (max-width: 1199px) {
  .section-bid-cards .grid {
    display: flex;
    flex-wrap: nowrap;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 24px;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  .section-bid-cards .grid::-webkit-scrollbar {
    display: none;
  }
}
@media (min-width: 1200px) {
  .section-bid-cards .grid {
    grid-template-columns: repeat(3, 1fr);
    grid-auto-rows: 1fr;
    gap: 32px;
  }
}
.section-bid-cards .card {
  background: #E63946;
  color: #F3F8ED;
  border-radius: 16px;
  padding: 32px;
  min-height: clamp(340px, 30vw, 460px);
  min-width: 0;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 16px;
}
@media (min-width: 768px) and (max-width: 1199px) {
  .section-bid-cards .card {
    flex: 0 0 clamp(300px, 55%, 360px);
    scroll-snap-align: start;
  }
}
.section-bid-cards .card__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}
.section-bid-cards .card__label {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 400;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: #F3F8ED;
}
.section-bid-cards .card__number {
  flex-shrink: 0;
  border: 1px solid #F3F8ED;
  border-radius: 999px;
  padding: 4px 16px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1;
  color: #F3F8ED;
}
.section-bid-cards .card__desc {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 0.9rem + 0.6vw, 24px);
  line-height: 1.5;
  color: #F3F8ED;
}
.section-bid-cards--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  margin-block: 0;
  padding-block: clamp(48px, 6vw, 96px);
}
.section-bid-cards--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 6vw, 96px);
}
.section-bid-cards--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 6vw, 96px);
}
.section-bid-cards--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-bid-cards--spacing-tight {
  margin-block: 32px;
}
.section-bid-cards--spacing-tight.section-bid-cards--light, .section-bid-cards--spacing-tight.section-bid-cards--dark, .section-bid-cards--spacing-tight.section-bid-cards--brand {
  margin-block: 0;
  padding-block: 32px;
}
.section-bid-cards--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}
.section-bid-cards--spacing-loose.section-bid-cards--light, .section-bid-cards--spacing-loose.section-bid-cards--dark, .section-bid-cards--spacing-loose.section-bid-cards--brand {
  margin-block: 0;
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: BID Map (s-bid-map)

    Spec-for-spec port of the live About page "BID area" block
    (https://www.lovethecentre.co.nz/about): body copy + button on the left,
    an interactive Mapbox iframe on the right.

    RESPONSIVE PARITY -- the live Webflow block is desktop-first with breakpoints
    at 991 / 767 / 479px. Reproduced here mobile-first (min-width) so every range
    matches the live rendering exactly:

      <= 479px  : stacked. Map is PORTRAIT (2/3), 90% wide, centred.
      480-767px : stacked. Map is LANDSCAPE (3/2), full width.
      768-991px : side-by-side. Text capped at 40%, map PORTRAIT (2/3) fills rest.
      >= 992px  : side-by-side. Text fixed 20rem, map LANDSCAPE (3/2) at 65%,
                  space-between pushes the columns apart (the live "gap" look) and
                  the text column stretches to the map height so the button sits
                  at its bottom.

    480px is the live Webflow mobile breakpoint -- it has no theme token, so it is
    written literally here (visual parity is the project's core acceptance test).
    768 / 992 map onto $screen-sm / $screen-md.

    The map's red border (2px) + 1rem radius live on the .map wrapper, which clips
    its overflow so the iframe's rounded corners are honoured.
*/
.section-bid-map {
  color: var(--section-fg, #1E232D);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Flex container (the live `.area-wrapper`) ----------------------- */
  /* ---- Text column (the live `.max-width-small`) ----------------------- */
  /* ---- Map column (the live `.area-wrapper.content-left`) -------------- */
  /* ---- D-24 colour variants (margin-block -> padding-block swap keeps
     coloured bands painting edge-to-edge, same pattern as s-map) ---------- */
  /* ---- D-22 spacing variants ------------------------------------------- */
}
@media (min-width: 768px) {
  .section-bid-map {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-bid-map .layout {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 64px;
}
@media (min-width: 768px) {
  .section-bid-map .layout {
    flex-direction: row;
    justify-content: space-between;
  }
}
.section-bid-map .body {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  align-items: flex-start;
  gap: 32px;
  min-width: 0;
}
@media (min-width: 768px) {
  .section-bid-map .body {
    flex: none;
    max-width: 40%;
  }
}
@media (min-width: 992px) {
  .section-bid-map .body {
    max-width: 20rem;
  }
}
.section-bid-map .heading {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-bid-map .copy {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: inherit;
}
.section-bid-map .copy p {
  margin: 0 0 16px 0;
}
.section-bid-map .copy p:last-child {
  margin-bottom: 0;
}
.section-bid-map .cta {
  align-self: flex-start;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  color: #E63946;
  border-color: #E63946;
}
.section-bid-map .cta:hover {
  background-color: #E63946;
  color: #FFFFFF;
  border-color: #E63946;
}
.section-bid-map .map {
  position: relative;
  overflow: hidden;
  border: 2px solid #E63946;
  border-radius: 16px;
  background: #F3F8ED;
  aspect-ratio: 2/3;
  width: 90%;
  align-self: center;
}
@media (min-width: 480px) {
  .section-bid-map .map {
    aspect-ratio: 3/2;
    width: 100%;
    align-self: stretch;
  }
}
@media (min-width: 768px) {
  .section-bid-map .map {
    aspect-ratio: 2/3;
    flex: 1;
    width: auto;
    align-self: stretch;
  }
}
@media (min-width: 992px) {
  .section-bid-map .map {
    aspect-ratio: 3/2;
    flex: none;
    width: 65%;
    align-self: flex-start;
  }
}
.section-bid-map .map iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}
.section-bid-map--light {
  --section-bg: #F3F8ED;
  --section-fg: #1E232D;
  --heading-fg: #E63946;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-bid-map--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-bid-map--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-bid-map--spacing-none {
  margin-block: 0;
}
.section-bid-map--spacing-none.section-bid-map--light, .section-bid-map--spacing-none.section-bid-map--dark, .section-bid-map--spacing-none.section-bid-map--brand {
  padding-block: 0;
}
.section-bid-map--spacing-tight {
  margin-block: 32px;
}
.section-bid-map--spacing-tight.section-bid-map--light, .section-bid-map--spacing-tight.section-bid-map--dark, .section-bid-map--spacing-tight.section-bid-map--brand {
  margin-block: 0;
  padding-block: 32px;
}
.section-bid-map--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}
.section-bid-map--spacing-loose.section-bid-map--light, .section-bid-map--spacing-loose.section-bid-map--dark, .section-bid-map--spacing-loose.section-bid-map--brand {
  margin-block: 0;
  padding-block: clamp(96px, 10vw, 160px);
}
.section-bid-map .admin-notice {
  padding: 16px;
  border: 1px dashed #E63946;
  border-radius: 16px;
  color: #E63946;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
}
.section-bid-map .admin-notice code {
  font-family: monospace;
  padding: 0 4px;
  background: rgba(230, 57, 70, 0.08);
  border-radius: 4px;
}

/*
    Section: Business Articles (s-business-articles)

    The "Business Articles" grid on the B2B /business page — visual parity with the
    live https://www.lovethecentre.co.nz/business block (verified against the live
    markup + computed styles), plus a centred "See all articles" button below.

    The card is bespoke to this block (it is NOT the /stories archive story-card):
        1. title — display font, dark, line-clamped, ABOVE the image
        2. image — 16px rounded, 2px dark border, 3:2
    The live block shows only the title and the image — no date, author or icon.

    Grid cadence:
        - mobile:   1 column
        - tablet:   2 columns, 32px gap
        - desktop:  4 columns

    Mobile-first.
*/
.section-business-articles {
  color: #333333;
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* "See all articles" CTA — centred below the grid, reusing the global
     .btn .btn-outline-primary (same as single-story's "See all articles"). */
  /* D-22 spacing overrides. */
}
@media (min-width: 768px) {
  .section-business-articles {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-business-articles .business-articles__head {
  margin-bottom: clamp(32px, 4vw, 64px);
}
.section-business-articles .business-articles__heading {
  margin: 0;
  color: #E63946;
}
.section-business-articles .business-articles__subheading {
  margin: 8px 0 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  line-height: 1.2;
  font-size: clamp(20px, 1.5vw + 12px, 32px);
}
.section-business-articles .business-articles__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-business-articles .business-articles__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 32px;
  }
}
@media (min-width: 992px) {
  .section-business-articles .business-articles__grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}
.section-business-articles .business-articles__cta {
  margin-top: clamp(32px, 4vw, 64px);
  text-align: center;
}
.section-business-articles--spacing-none {
  margin-block: 0;
}
.section-business-articles--spacing-tight {
  margin-block: 32px;
}
.section-business-articles--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/* --------------------------------------------------------------------------
   Card — bespoke to the Business Articles block (title above a bordered image).
   -------------------------------------------------------------------------- */
.business-article-card {
  display: block;
}
.business-article-card__link {
  display: flex;
  flex-direction: column;
  gap: 16px;
  height: 100%;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.business-article-card__link:hover .business-article-card__title {
  color: #E63946;
}
.business-article-card__link:hover .business-article-card__img {
  transform: scale(1.03);
}
.business-article-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.2;
  color: #1E232D;
  transition: 0.25s ease-in-out;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.business-article-card__media {
  aspect-ratio: 3/2;
  overflow: hidden;
  border-radius: 16px;
  border: 2px solid #1E232D;
  background: #F3F8ED;
}
.business-article-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease-in-out;
}

/*
    Section: Business Events (s-business-events)

    The "Business Events" grid on the B2B /business page — visual parity with the
    live https://www.lovethecentre.co.nz/business block (verified against the live
    markup + computed styles).

    The card is bespoke to this block (it is NOT the /events archive event-card):
        1. title       — display font, dark, line-clamped, ABOVE the image
        2. image       — 16px rounded, 2px dark border, 3:2
        3. excerpt     — muted body text, line-clamped (no date / status pill)

    Grid cadence matches the site's other card grids:
        - mobile:   1 column
        - tablet:   2 columns, 32px gap
        - desktop:  3 columns

    Mobile-first.
*/
.section-business-events {
  color: #333333;
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* D-22 spacing overrides. */
}
@media (min-width: 768px) {
  .section-business-events {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-business-events .business-events__head {
  margin-bottom: clamp(32px, 4vw, 64px);
}
.section-business-events .business-events__heading {
  margin: 0;
  color: #E63946;
}
.section-business-events .business-events__subheading {
  margin: 8px 0 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  line-height: 1.2;
  font-size: clamp(20px, 1.5vw + 12px, 32px);
}
.section-business-events .business-events__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-business-events .business-events__grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 32px;
  }
}
@media (min-width: 992px) {
  .section-business-events .business-events__grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
.section-business-events--spacing-none {
  margin-block: 0;
}
.section-business-events--spacing-tight {
  margin-block: 32px;
}
.section-business-events--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/* --------------------------------------------------------------------------
   Card — bespoke to the Business Events block.
   -------------------------------------------------------------------------- */
.business-event-card {
  display: block;
}
.business-event-card__link {
  display: flex;
  flex-direction: column;
  gap: 16px;
  height: 100%;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.business-event-card__link:hover .business-event-card__title {
  color: #E63946;
}
.business-event-card__link:hover .business-event-card__img {
  transform: scale(1.03);
}
.business-event-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.2;
  color: #1E232D;
  transition: 0.25s ease-in-out;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.business-event-card__media {
  aspect-ratio: 3/2;
  overflow: hidden;
  border-radius: 16px;
  border: 2px solid #1E232D;
  background: #F3F8ED;
}
.business-event-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease-in-out;
}
.business-event-card__excerpt {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 400;
  color: #959a9e;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/*
    Single Business template (single-business.php)

    Mirrors the single-event two-column layout (_event-single.scss) — title above
    a row of hero image (left) + info column (right) — but swaps the event
    Where/When for a LocalBusiness info block: category chip, address (+ map
    link), an opening-hours <details> accordion, phone / email / price, a website
    CTA, the description body, then sub-tag chips. Below it, a "More in {category}"
    related grid + back link.

    Reuses the .section-event-details / .detail row styles (re-declared here,
    scoped to .section-business-single) and the brand image frame for parity.
    Mobile-first; two columns from $screen-sm up.
*/
.section-business-single {
  max-width: 1169px;
  margin-inline: auto;
  padding-inline: 16px;
  padding-block: clamp(32px, 4vw, 64px);
}
@media (min-width: 768px) {
  .section-business-single {
    padding-inline: 32px;
  }
}
.section-business-single .business-single__header {
  margin-bottom: clamp(24px, 3vw, 48px);
}
.section-business-single .business-single__title {
  margin: 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(48px, 6vw + 0.5rem, 64px);
  font-weight: 400;
  line-height: 1.2;
  text-align: left;
  overflow-wrap: break-word;
}
@media (min-width: 992px) {
  .section-business-single .business-single__title {
    max-width: 36rem;
  }
}
.section-business-single .business-single__row {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(24px, 4vw, 48px);
  align-items: start;
  margin-bottom: clamp(48px, 6vw, 96px);
}
@media (min-width: 768px) {
  .section-business-single .business-single__row {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(32px, 5vw, 96px);
  }
}
@media (min-width: 992px) {
  .section-business-single .business-single__row {
    grid-template-columns: minmax(0, 1fr) 402px;
  }
}
.section-business-single .business-single__media {
  overflow: hidden;
  border-radius: 32px;
  border: 2px solid #E63946;
  background-color: #F3F8ED;
  aspect-ratio: 6/5;
}
@media (min-width: 1200px) {
  .section-business-single .business-single__media {
    position: sticky;
    top: 48px;
  }
}
.section-business-single .business-single__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-business-single .business-single__details {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
  min-width: 0;
}
.section-business-single .business-category-chip {
  align-self: flex-start;
  padding: 4px 16px;
  border-radius: 999px;
  background: #E63946;
  color: #F3F8ED;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-business-single .business-category-chip:hover {
  background: #bf2f3b;
}
.section-business-single .section-event-details {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
  background: none;
  border-radius: 0;
  gap: 8px;
}
.section-business-single .section-event-details .details {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.section-business-single .section-event-details .detail {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px;
  grid-template-columns: none;
}
@media (min-width: 768px) {
  .section-business-single .section-event-details .detail {
    grid-template-columns: none;
    gap: 8px;
  }
}
.section-business-single .section-event-details .detail__label {
  flex: 0 0 auto;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 400;
  line-height: 1.5;
  color: #000000;
}
.section-business-single .section-event-details .detail__value {
  flex: 1 1 0;
  min-width: 0;
  font-size: 16px;
  line-height: 1.5;
  color: #000000;
}
.section-business-single .section-event-details .detail__value a {
  color: #E63946;
  text-decoration: none;
}
.section-business-single .section-event-details .detail__value a:hover {
  text-decoration: underline;
}
.section-business-single .section-event-details .detail__address {
  display: block;
}
.section-business-single .section-event-details .detail__map {
  display: inline-block;
  margin-top: 4px;
  font-size: 14px;
}
.section-business-single .business-hours {
  width: 100%;
  border-top: 1px solid #e0e0e0;
  border-bottom: 1px solid #e0e0e0;
  padding-block: 8px;
}
.section-business-single .business-hours__summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  color: #000000;
}
.section-business-single .business-hours__summary::-webkit-details-marker {
  display: none;
}
.section-business-single .business-hours__summary::after {
  content: "";
  width: 10px;
  height: 10px;
  border-right: 2px solid #E63946;
  border-bottom: 2px solid #E63946;
  transform: rotate(45deg);
  transition: transform 0.25s ease-in-out;
}
.section-business-single .business-hours[open] .business-hours__summary::after {
  transform: rotate(-135deg);
}
.section-business-single .business-hours__table {
  width: 100%;
  margin-top: 8px;
  border-collapse: collapse;
}
.section-business-single .business-hours__row {
  border-top: 1px solid #e0e0e0;
}
.section-business-single .business-hours__day, .section-business-single .business-hours__time {
  padding: 4px 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  line-height: 1.5;
  text-align: left;
}
.section-business-single .business-hours__day {
  font-weight: 500;
  color: #000000;
}
.section-business-single .business-hours__time {
  color: #959a9e;
  text-align: right;
}
.section-business-single .business-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
  width: 100%;
}
.section-business-single .business-body {
  width: 100%;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: #333333;
}
.section-business-single .business-body p {
  margin-block: 0 16px;
}
.section-business-single .business-body a {
  color: #E63946;
}
.section-business-single .business-subtags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.section-business-single .business-subtags__chip {
  padding: 4px 16px;
  border-radius: 999px;
  border: 1px solid #e0e0e0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #333333;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-business-single .business-subtags__chip:hover {
  background: #E63946;
  border-color: #E63946;
  color: #FFFFFF;
}
.section-business-single .business-related {
  margin-bottom: clamp(48px, 6vw, 96px);
}
.section-business-single .business-related__heading {
  margin: 0 0 32px 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 2vw + 1rem, 32px);
  font-weight: 400;
  line-height: 1.2;
}
.section-business-single .business-related__grid {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-business-single .business-related__grid {
    gap: 32px;
  }
}
.section-business-single .business-related__grid > .business-card {
  flex: 1 1 100%;
}
@media (min-width: 768px) {
  .section-business-single .business-related__grid > .business-card {
    flex: 1 1 calc((100% - 32px) / 2);
    max-width: calc((100% - 32px) / 2);
  }
}
@media (min-width: 992px) {
  .section-business-single .business-related__grid > .business-card {
    flex: 1 1 calc((100% - 3 * 32px) / 4);
    max-width: calc((100% - 3 * 32px) / 4);
  }
}
.section-business-single .business-related__cta {
  display: flex;
  justify-content: flex-start;
  margin-top: clamp(32px, 4vw, 48px);
}
.section-business-single .business-related__cta .btn {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
}
.section-business-single .business-back__link {
  display: inline-block;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  color: #E63946;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-business-single .business-back__link:hover {
  color: #bf2f3b;
}

/*
    Section: Card Grid (s-card-grid)
    Visual parity: audit/screenshots/s-card-grid-{1440,768,375}.png

    Root selector is nest-not-BEM (per css/CLAUDE.md). The inner .card is a
    reusable component and uses double-underscore children -- that is explicitly
    allowed for components (css/CLAUDE.md -- Component Styles section).

    Column variants (D-23) swap grid-template-columns at desktop.
    card_style variants (D-23) restructure card internal layout:
        - image-top: default (image on top, text below)
        - icon-card: centred round icon + label
        - overlay-text: text floats over the image with gradient
    Colour variants (D-24) set --section-bg / --section-fg via modifier classes.
*/
.section-card-grid {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-card-grid {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-card-grid .heading {
  margin: 0 0 32px 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-card-grid .grid {
  display: grid;
  gap: 24px;
  grid-template-columns: 1fr;
}
@media (min-width: 768px) {
  .section-card-grid .grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 32px;
  }
}
@media (min-width: 1200px) {
  .section-card-grid--cols-2 .grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 1200px) {
  .section-card-grid--cols-3 .grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
@media (min-width: 1200px) {
  .section-card-grid--cols-4 .grid {
    grid-template-columns: repeat(4, 1fr);
  }
}
.section-card-grid .card {
  display: flex;
  flex-direction: column;
  gap: 16px;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-card-grid .card:hover {
  transform: translateY(-4px);
}
.section-card-grid .card__media {
  aspect-ratio: 1/1;
  overflow: hidden;
  border-radius: 16px;
}
.section-card-grid .card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-card-grid .card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 1.4vw + 0.5rem, 22px);
  font-weight: 500;
  line-height: 1.2;
}
.section-card-grid .card__desc {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: #959a9e;
}
.section-card-grid--style-icon-card .card {
  align-items: center;
  text-align: center;
}
.section-card-grid--style-icon-card .card__media {
  width: 80px;
  height: 80px;
  aspect-ratio: 1/1;
  border-radius: 999px;
}
.section-card-grid--style-overlay-text .card {
  position: relative;
}
.section-card-grid--style-overlay-text .card__media {
  aspect-ratio: 3/4;
}
.section-card-grid--style-overlay-text .card__body {
  position: absolute;
  inset: auto 0 0 0;
  padding: 16px;
  color: #F3F8ED;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0));
}
.section-card-grid--style-overlay-text .card__title {
  color: inherit;
}
.section-card-grid--style-overlay-text .card__desc {
  color: rgba(243, 248, 237, 0.85);
}
.section-card-grid--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-card-grid--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-card-grid--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-card-grid--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-card-grid--spacing-tight {
  margin-block: 32px;
}
.section-card-grid--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Carousel (s-carousel)
    Visual parity: audit/screenshots/s-carousel-{1440,768,375}.png
    Used on /dine (position 3) -- generic themed slide carousel driven by
    an ACF repeater (contrast: 03-06 events Relationship, 03-07 stories
    Relationship).

    Pattern-twin of _event-carousel.scss (03-06) and _story-carousel.scss
    (03-07). Root selector is nest-not-BEM (per css/CLAUDE.md). The inner
    .slide is treated as a reusable component and uses double-underscore
    children -- explicitly allowed for components (css/CLAUDE.md --
    Component Styles section).

    Pre-init state: .carousel__track uses display:flex + horizontal
    scroll-snap so the block still renders usefully before tiny-slider
    initialises (no-JS fallback and the brief window between Phase 3 ship
    and Phase 5 JS-06 enqueue).

    Post-init: tiny-slider 2.9.x wraps .js-slider in .tns-outer / .tns-inner
    and applies its own transforms. We avoid setting transforms on the
    track itself. Carousel controls (arrows, dots) will be styled in
    Phase 5 JS-06 alongside the tiny-slider vendor enqueue.

    Aspect ratio 3/2 on .slide__media matches the Webflow /dine carousel
    (landscape tiles, shorter than event-carousel's 4/3 and slightly less
    tall than story-carousel's 3/2 squashed via object-fit: cover).

    Colour variants (D-24) set --section-bg / --section-fg via modifier
    classes. Spacing modifiers (D-22) follow the same margin-block /
    padding-block swap used by _event-carousel.scss so transparent vs
    coloured variants render correctly.
*/
.section-carousel {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-carousel {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-carousel .heading {
  margin: 0 0 32px 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-carousel .carousel__track {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
}
.section-carousel .carousel__track > .slide {
  flex: 0 0 clamp(260px, 80vw, 340px);
  scroll-snap-align: start;
}
.section-carousel .slide {
  display: flex;
  flex-direction: column;
  gap: 8px;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-carousel .slide:hover {
  transform: translateY(-4px);
}
.section-carousel .slide__media {
  aspect-ratio: 3/2;
  overflow: hidden;
  border-radius: 16px;
}
.section-carousel .slide__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-carousel .slide__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 1.4vw + 0.5rem, 22px);
  font-weight: 500;
  line-height: 1.2;
}
.section-carousel--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-carousel--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-carousel--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-carousel--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-carousel--spacing-tight {
  margin-block: 32px;
}
.section-carousel--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Awards theme override: 2025 winners carousel.

    Scoped to body.theme-awards so it only re-skins the awards page and never
    touches the shared /dine carousel (which keeps the base .section-carousel
    rules above). Matches the live Webflow awards layout: large display heading,
    bigger portrait cards with a gold frame, the winner NAME above the image, a
    small uppercase caption below it, and round gold arrow controls.
*/
body.theme-awards .section-carousel .heading {
  font-size: clamp(36px, 5vw + 0.5rem, 75px);
  white-space: pre-line;
}
body.theme-awards .section-carousel .slide {
  display: flex !important;
  flex-direction: column !important;
  gap: 16px;
}
body.theme-awards .section-carousel .slide:hover {
  transform: none;
}
body.theme-awards .section-carousel .slide__title {
  order: -1;
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(22px, 0.6vw + 1rem, 28px);
  color: var(--theme-text);
}
body.theme-awards .section-carousel .slide__media {
  aspect-ratio: 1/1;
  border: 1px solid rgba(226, 179, 84, 0.6);
}
body.theme-awards .section-carousel .slide__caption {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin: 0;
  color: rgba(243, 248, 237, 0.6);
  font-size: 12px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
body.theme-awards .section-carousel .carousel__track {
  scrollbar-width: none;
  -ms-overflow-style: none;
}
body.theme-awards .section-carousel .carousel__track::-webkit-scrollbar {
  display: none;
}
body.theme-awards .section-carousel .carousel__track > .slide {
  flex-basis: 80vw;
}
@media (min-width: 768px) {
  body.theme-awards .section-carousel .carousel__track > .slide {
    flex-basis: 48vw;
  }
}
@media (min-width: 1200px) {
  body.theme-awards .section-carousel .carousel__track > .slide {
    flex-basis: clamp(400px, 49vw, 700px);
  }
}
body.theme-awards .section-carousel .tns-controls {
  display: flex;
  justify-content: flex-end;
  gap: 16px;
  margin-bottom: 32px;
}
body.theme-awards .section-carousel .tns-controls button {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  padding: 0;
  border: 1px solid #e2b354;
  border-radius: 999px;
  background: transparent;
  color: #e2b354;
  cursor: pointer;
  font-size: 0;
  transition: 0.25s ease-in-out;
}
body.theme-awards .section-carousel .tns-controls button::after {
  content: "";
  width: 24px;
  height: 24px;
  background-color: currentColor;
  -webkit-mask: center/contain no-repeat;
  mask: center/contain no-repeat;
}
body.theme-awards .section-carousel .tns-controls button[data-controls=prev]::after {
  -webkit-mask-image: url("../images/arrow-left.svg");
  mask-image: url("../images/arrow-left.svg");
}
body.theme-awards .section-carousel .tns-controls button[data-controls=next]::after {
  -webkit-mask-image: url("../images/arrow-right.svg");
  mask-image: url("../images/arrow-right.svg");
}
body.theme-awards .section-carousel .tns-controls button:hover {
  background: #e2b354;
  color: #1E232D;
}
body.theme-awards .section-carousel .tns-controls button[disabled] {
  opacity: 0.35;
  cursor: default;
}

/*
    Section: Contact Hero (s-contact-hero)

    The /contact page hero -- a DISTINCT layout from the full-bleed s-hero.
    Replicates the live Webflow contact hero
    (https://www.lovethecentre.co.nz/contact):

    LAYOUT
    - >= $screen-lg (1200px): two columns.
        LEFT  (.body)     -- 50% width: H1 -> te reo line + intro -> Visit/Email/
                             Phone block pinned to the BOTTOM (margin-top:auto).
        RIGHT (.form-col) -- shares remaining width: decorative badge top-right,
                             "Send us a message" + form pinned to the BOTTOM.
      Both columns bottom-align (contact details line up with the form base).
    - <  $screen-lg: single stacked column (text, then badge + form).

    The embedded Gravity Form is restyled here (Orbital custom-property overrides)
    to match the live red-outline pill inputs + red placeholders + outline-pill
    submit. These overrides are SCOPED to .section-contact-hero so the global
    _forms.scss (newsletter/other forms) is untouched.

    H1 hardcoded per D-14. Badge is a static theme asset (no animation, matches live).
*/
.section-contact-hero {
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  overflow-x: clip;
  display: flex;
  flex-direction: column;
  gap: 48px;
  /* ---- LEFT column: heading + intro + contact details ------------------ */
  /* ---- Contact details (from shared options) --------------------------- */
  /* ---- RIGHT column: badge + form -------------------------------------- */
  /* ---- Gravity Form -> live red-pill parity (scoped overrides) ----------

     GF 2.9 (Orbital) injects a per-form inline <style> that sets every
     --gf-* custom property at ID specificity (#gform_wrapper_N[...]). A
     class-based override can't out-specify an ID selector, so each property
     below uses !important to win the cascade (GF's inline vars are NOT
     !important). Scoped to .section-contact-hero so other forms are untouched.
  */
  /* ---- D-24 colour variants -------------------------------------------- */
  /* ---- D-22 spacing overrides ------------------------------------------ */
}
@media (min-width: 768px) {
  .section-contact-hero {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
@media (min-width: 1200px) {
  .section-contact-hero {
    flex-direction: row;
    align-items: stretch;
    gap: clamp(64px, 6vw, 96px);
  }
}
.section-contact-hero .body {
  display: flex;
  flex-direction: column;
  gap: 32px;
  min-width: 0;
}
@media (min-width: 1200px) {
  .section-contact-hero .body {
    flex: 0 1 50%;
    max-width: 50%;
  }
}
.section-contact-hero .heading {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(40px, 2.2rem + 3vw, 112px);
  line-height: 1.05;
  overflow-wrap: normal;
}
.section-contact-hero .intro {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.section-contact-hero .bilingual {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 0.6vw + 1rem, 24px);
  line-height: 1.2;
  color: #1E232D;
}
.section-contact-hero .lead {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(16px, 0.4vw + 0.9rem, 18px);
  line-height: 1.5;
  color: #1E232D;
  max-width: 38rem;
}
.section-contact-hero .contact-details {
  display: flex;
  flex-wrap: wrap;
  gap: 32px;
}
@media (min-width: 1200px) {
  .section-contact-hero .contact-details {
    margin-top: auto;
    gap: 48px;
  }
}
.section-contact-hero .detail {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.section-contact-hero .detail__label {
  margin: 0;
  color: #1E232D;
}
.section-contact-hero .detail__value {
  margin: 0;
  color: #E63946;
  line-height: 1.5;
}
.section-contact-hero .detail__link {
  color: #E63946;
  text-decoration: none;
}
.section-contact-hero .detail__link:hover {
  text-decoration: underline;
}
.section-contact-hero .form-col {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
@media (min-width: 1200px) {
  .section-contact-hero .form-col {
    flex: 1 1 0;
    align-self: stretch;
    justify-content: flex-end;
  }
}
.section-contact-hero .badge {
  align-self: flex-start;
  width: clamp(8rem, 18vw, 10rem);
  height: auto;
  margin-bottom: 24px;
  transform: rotate(15deg);
  transform-origin: center;
}
@media (min-width: 1200px) {
  .section-contact-hero .badge {
    align-self: flex-end;
  }
}
@media (min-width: 1200px) {
  .section-contact-hero .form-card {
    margin-top: auto;
  }
}
.section-contact-hero .form-heading {
  margin: 0 0 24px;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(24px, 1.2vw + 1rem, 32px);
  line-height: 1.2;
}
.section-contact-hero .gform_wrapper.gform-theme--orbital {
  --gf-color-primary: #E63946 !important;
  --gf-color-primary-rgb: 230, 57, 70 !important;
  --gf-ctrl-border-color: #E63946 !important;
  --gf-ctrl-border-color-focus: #E63946 !important;
  --gf-ctrl-border-width: 1px !important;
  --gf-ctrl-bg-color: #FFFFFF !important;
  --gf-ctrl-color: #1E232D !important;
  --gf-ctrl-color-placeholder: #E63946 !important;
  --gf-ctrl-focus-ring-color: rgba(230, 57, 70, 0.2) !important;
  --gf-ctrl-padding-x: 16px !important;
  --gf-ctrl-padding-y: 16px !important;
  --gf-field-pg-row-gap: 16px !important;
  --gf-form-gap-y: 16px !important;
}
.section-contact-hero .gform_wrapper.gform-theme--orbital .gform_button {
  background: transparent !important;
  color: #E63946 !important;
  border: 1px solid #E63946 !important;
  border-radius: 999px !important;
  padding: 8px 32px !important;
  width: auto !important;
  font-family: neue-haas-grotesk-text, sans-serif !important;
  font-weight: 600 !important;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-contact-hero .gform_wrapper.gform-theme--orbital .gform_button:hover, .section-contact-hero .gform_wrapper.gform-theme--orbital .gform_button:focus {
  background: #E63946 !important;
  color: #FFFFFF !important;
}
.section-contact-hero .gform_wrapper.gform-theme--orbital input[type=text],
.section-contact-hero .gform_wrapper.gform-theme--orbital input[type=email],
.section-contact-hero .gform_wrapper.gform-theme--orbital input[type=tel],
.section-contact-hero .gform_wrapper.gform-theme--orbital input[type=url],
.section-contact-hero .gform_wrapper.gform-theme--orbital input[type=number] {
  border-radius: 32px !important;
}
.section-contact-hero .gform_wrapper.gform-theme--orbital textarea {
  border-radius: 16px !important;
  min-height: 15rem;
  resize: vertical;
}
.section-contact-hero .gform_wrapper.gform-theme--orbital .gform_footer {
  justify-content: flex-start;
}
.section-contact-hero--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
}
.section-contact-hero--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-contact-hero--dark .bilingual,
.section-contact-hero--dark .lead,
.section-contact-hero--dark .detail__label {
  color: #F3F8ED;
}
.section-contact-hero--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-contact-hero--spacing-none {
  padding-block: 0;
}
.section-contact-hero--spacing-tight {
  padding-block: 32px;
}
.section-contact-hero--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: CTA Banner (s-cta-banner)

    Visual parity: audit/screenshots/s-cta-banner-{1440,768,375}.png
    Used on 15 pages per audit/blocks/s-cta-banner.md.

    D-24 pattern -- background_color modifier classes set CSS custom
    properties; inner elements consume var(--section-fg) / var(--section-bg).
    Phase 5 side-nav adaptive-colour JS reads data-section-bg at scroll.

    Nest-not-BEM per css/CLAUDE.md -- child selectors are .body / .heading /
    .subheading / .cta nested inside .section-cta-banner, NOT BEM child
    selectors.
*/
.section-cta-banner {
  color: var(--section-fg, #E63946);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-cta-banner {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-cta-banner .body {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  text-align: center;
  max-width: 800px;
  margin-inline: auto;
}
.section-cta-banner .heading {
  margin: 0;
  color: var(--heading-fg, inherit);
  font-family: new-spirit, sans-serif;
  font-size: clamp(32px, 4vw + 0.5rem, 64px);
  font-weight: 400;
  line-height: 1.2;
}
.section-cta-banner .subheading {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: clamp(16px, 1vw + 0.75rem, 20px);
  line-height: 1.5;
  max-width: 60ch;
}
.section-cta-banner .cta {
  margin-top: 8px;
}
.section-cta-banner--light {
  --section-bg: #F3F8ED;
  --section-fg: #E63946;
  --heading-fg: #E63946;
}
.section-cta-banner--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-cta-banner--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-cta-banner--spacing-none {
  padding-block: 0;
}
.section-cta-banner--spacing-tight {
  padding-block: 32px;
}
.section-cta-banner--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Discover (s-discover)

    Full-bleed dark band of large display phrases. Each phrase links to a
    category and reveals a featured business on hover (desktop >= $screen-md) /
    inline-on-scroll (mobile/tablet). Mirrors the live Webflow "Discover".

    Full-bleed: the section breaks out of <main>'s content column (which is
    inset 176px for the fixed side-nav in _general.scss) so the dark band reaches
    the viewport edges and sits *behind* the side-nav. That overlap is what
    drives the contrast-aware nav flip (initContrastNav keys off
    data-section-bg="dark" / data-nav-contrast="dark").

    Desktop reveal: phrases are centred; the active phrase's media is pinned right
    (overlapping the text) and its location block pinned left. pointer-events are
    disabled on the reveal so phrase links stay clickable beneath the image.
*/
.section-discover {
  position: relative;
  background: #1E232D;
  color: #F3F8ED;
  overflow: hidden;
  margin-inline: -16px;
  padding: 96px 16px;
  /* ----- Featured-business reveal ----- */
}
@media (min-width: 768px) {
  .section-discover {
    margin-inline: -32px;
    padding: 96px 32px;
  }
}
@media (min-width: 992px) {
  .section-discover {
    margin-left: -192px;
    margin-right: -16px;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 96px 96px 96px 192px;
  }
}
.section-discover .section-discover__eyebrow {
  margin: 0 0 48px 0;
  text-align: center;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(24px, 2.5vw, 32px);
  line-height: 1.2;
  color: #F3F8ED;
}
.section-discover .section-discover__list {
  position: relative;
  text-align: center;
}
.section-discover .section-discover__item {
  padding-block: 8px;
}
@media (min-width: 992px) {
  .section-discover .section-discover__item {
    padding-block: 16px;
  }
}
.section-discover .section-discover__phrase {
  position: relative;
  display: inline-block;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(2.75rem, 5.5vw, 5rem);
  line-height: 1.2;
  color: #F3F8ED;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-discover a.section-discover__phrase:hover {
  color: #E63946;
}
.section-discover .section-discover__reveal {
  display: none;
}
.section-discover .section-discover__location {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  margin-bottom: 16px;
}
.section-discover .section-discover__pin {
  width: 24px;
  height: auto;
  margin-bottom: 4px;
}
.section-discover .section-discover__biz {
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  color: #F3F8ED;
}
.section-discover .section-discover__addr {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #F3F8ED;
  opacity: 0.75;
}
.section-discover .section-discover__media {
  margin: 0 auto;
  max-width: 32rem;
  position: relative;
  border: 2px solid #E63946;
  border-radius: 16px;
  overflow: hidden;
}
.section-discover .section-discover__img {
  width: 100%;
  height: auto;
  display: block;
}
.section-discover .section-discover__credit {
  position: absolute;
  left: 16px;
  bottom: 16px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  line-height: 1.2;
  color: #F3F8ED;
  white-space: pre-line;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);
}
@media (min-width: 992px) {
  .section-discover .section-discover__reveal {
    display: block;
    position: absolute;
    inset: 0;
    opacity: 0;
    transition: opacity 0.4s ease;
    pointer-events: none;
  }
  .section-discover .section-discover__item:hover .section-discover__reveal {
    opacity: 1;
    z-index: 10;
  }
  .section-discover .section-discover__location {
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    margin-bottom: 0;
    max-width: 14rem;
  }
  .section-discover .section-discover__media {
    position: absolute;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
    margin: 0;
    width: clamp(24rem, 34vw, 38rem);
    max-width: none;
  }
}

/*
    Section: Event Archive (archive-event.php)

    The events listing — visual parity with https://www.lovethecentre.co.nz/events.
    A reused page hero, a single-select category tab strip (FacetWP `event_type`),
    and a responsive 3 / 2 / 1 column grid of event cards.

    The .event-card component is shared with the event carousel
    (template-parts/event-card.php). Its carousel-context styles live in
    _event-carousel.scss (scoped under .section-event-carousel); the archive owns
    its own copy here so the card renders correctly in the grid. BEM __ children
    are allowed for components (css/CLAUDE.md — Component Styles).

    FacetWP facet markup is targeted via the generic .facetwp-* classes so the
    styling survives plugin upgrades. The category strip mirrors the promotion
    grid's day-tab cues (_promotion-grid.scss) for a consistent filter look.

    Mobile-first.
*/
.section-event-archive {
  color: #333333;
  /* ----------------------------------------------------------------------
     Hero — reuses .section-page-hero classes; this is the no-image variant
     (text spans the row, left-constrained measure).
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Inner content wrapper (filter strip + grid). Matches the section
     horizontal padding used across the other listing sections.
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Filter bar — single-select category PILL strip (FacetWP radio facet).
     Matches the live Webflow chips: rounded-pill outline buttons in the brand
     red; the active one ("All" by default) is a SOLID red pill with cream
     text. They wrap across rows on desktop, scroll horizontally on mobile.
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Results grid — matches the live Webflow grid (measured with
     getComputedStyle against /events):
         - mobile (390): 2 cols, 24px gap
         - tablet (768): 3 cols, 32px gap
         - desktop (1440): 4 cols, 32px gap
     The FIRST card is FEATURED — it spans 2×2 cells (a ~double-size cell) at
     every breakpoint, exactly like the live page. :first-child (not a PHP
     class) keeps this robust across pagination and FacetWP AJAX re-renders.
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Pager — FacetWP numbered pager (or the native paginate_links fallback).
     Centred row of pill-ish number links; the current page is brand-filled.
     ---------------------------------------------------------------------- */
}
@media (min-width: 992px) {
  .section-event-archive .section-event-archive__hero.section-page-hero .body {
    flex: 1 1 0;
    max-width: 56rem;
  }
}
.section-event-archive .section-event-archive__hero.section-page-hero .cta {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
}
.section-event-archive .section-event-archive__inner {
  padding-inline: clamp(16px, 4vw, 32px);
  padding-block: clamp(48px, 5vw, 96px);
}
@media (min-width: 768px) {
  .section-event-archive .section-event-archive__inner {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-event-archive .filter-bar {
  margin-bottom: clamp(32px, 4vw, 48px);
}
.section-event-archive .facetwp-counter {
  display: none;
}
.section-event-archive .facetwp-facet {
  margin: 0;
}
.section-event-archive .filter-bar__types .facetwp-facet {
  display: flex;
  flex-wrap: nowrap;
  gap: 16px;
  overflow-x: auto;
  padding-bottom: 4px;
  -webkit-overflow-scrolling: touch;
}
@media (min-width: 768px) {
  .section-event-archive .filter-bar__types .facetwp-facet {
    flex-wrap: wrap;
    overflow-x: visible;
  }
}
.section-event-archive .filter-bar__types .facetwp-radio {
  flex: 0 0 auto;
  background-image: none;
  padding: 8px 24px;
  border: 1px solid #E63946;
  border-radius: 999px;
  background-color: transparent;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  line-height: 1.2;
  white-space: nowrap;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-event-archive .filter-bar__types .facetwp-radio:hover {
  background-color: #E63946;
  color: #F3F8ED;
}
.section-event-archive .filter-bar__types .facetwp-radio.checked {
  background-color: #E63946;
  color: #F3F8ED;
}
.section-event-archive .admin-notice {
  margin: 0 0 24px 0;
  padding: 16px;
  background: #F3F8ED;
  border: 1px dashed #E63946;
  border-radius: 16px;
  color: #E63946;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
}
.section-event-archive .event-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 24px;
}
@media (min-width: 768px) {
  .section-event-archive .event-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 32px;
  }
}
@media (min-width: 992px) {
  .section-event-archive .event-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}
.section-event-archive .event-grid > .event-card:first-child {
  grid-column: span 2;
  grid-row: span 2;
}
.section-event-archive .event-grid > .event-card:first-child .event-card__link {
  height: 100%;
}
.section-event-archive .event-grid > .event-card:first-child .event-card__media {
  aspect-ratio: 6/5;
}
.section-event-archive .event-grid__empty {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  color: #959a9e;
}
.section-event-archive .event-pager {
  margin-top: clamp(48px, 5vw, 96px);
  display: flex;
  justify-content: center;
}
.section-event-archive .event-pager .facetwp-pager, .section-event-archive .event-pager.event-pager--wp {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
}
.section-event-archive .event-pager .facetwp-page,
.section-event-archive .event-pager .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  height: 44px;
  padding: 0 8px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  color: #333333;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  text-decoration: none;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-event-archive .event-pager .facetwp-page:hover,
.section-event-archive .event-pager .page-numbers:hover {
  background: rgba(230, 57, 70, 0.08);
  color: #E63946;
}
.section-event-archive .event-pager .facetwp-page.active,
.section-event-archive .event-pager .page-numbers.current {
  background: #E63946;
  color: #F3F8ED;
  cursor: default;
}
.section-event-archive .event-pager .facetwp-page.active:hover,
.section-event-archive .event-pager .page-numbers.current:hover {
  background: #E63946;
  color: #F3F8ED;
}
.section-event-archive .event-pager .facetwp-page.first,
.section-event-archive .event-pager .facetwp-page.last,
.section-event-archive .event-pager .page-numbers.prev,
.section-event-archive .event-pager .page-numbers.next {
  color: #E63946;
  font-size: 18px;
}
.section-event-archive .event-pager .facetwp-page.dots,
.section-event-archive .event-pager .page-numbers.dots {
  min-width: auto;
  border-color: transparent;
  background: transparent;
  color: #959a9e;
  cursor: default;
}
.section-event-archive .event-pager .facetwp-page.dots:hover,
.section-event-archive .event-pager .page-numbers.dots:hover {
  background: transparent;
  color: #959a9e;
}

/*
    Section: Event Carousel (s-event-carousel)
    Visual parity: audit/screenshots/s-event-carousel-{1440,768,375}.png

    Root selector is nest-not-BEM (per css/CLAUDE.md). The inner .event-card is a
    reusable component and uses double-underscore children -- explicitly allowed
    for components (css/CLAUDE.md -- Component Styles section).

    Pre-init state: .event-carousel__track uses display:flex + horizontal scroll-snap
    so the block still renders usefully before tiny-slider initialises (no-JS fallback
    and the brief window before Phase 5 JS-06 enqueues tiny-slider).

    Post-init: tiny-slider 2.9.x wraps .js-slider in .tns-outer / .tns-inner and
    applies its own transforms. We avoid setting transforms on the track itself.
    Carousel controls (arrows, dots) will be styled in Phase 5 JS-06 alongside the
    tiny-slider vendor enqueue.

    Colour variants (D-24) set --section-bg / --section-fg via modifier classes.
    Spacing modifiers (D-22) follow the same margin-block / padding-block swap
    used by _card-grid.scss so transparent vs coloured variants render correctly.
*/
.section-event-carousel {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-event-carousel {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-event-carousel .heading {
  margin: 0 0 32px 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-event-carousel .event-carousel__track {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
}
.section-event-carousel .event-carousel__track > .event-card {
  flex: 0 0 clamp(260px, 80vw, 320px);
  scroll-snap-align: start;
}
.section-event-carousel--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-event-carousel--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-event-carousel--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-event-carousel--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-event-carousel--spacing-tight {
  margin-block: 32px;
}
.section-event-carousel--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Event Details (s-event-details)

    CMS single sidebar-style metadata block per audit/blocks/s-event-details.md
    (Where/When definition list + optional CTA). Shared with Phase 4
    single-event.php per D-12 so the same shell renders whether the section
    comes from the Flexible Content loop or a single post template.

    Layout:
      Desktop (>=$screen-sm): two-column detail row with fixed label column
        for a sidebar-style alignment (labels line up vertically).
      Mobile (<$screen-sm): single-column stacked labels above values.

    Visual parity: audit/screenshots/s-event-details-{1440,768,375}.png
*/
.section-event-details {
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  margin-block: clamp(32px, 4vw, 64px);
  padding-block: clamp(32px, 4vw, 64px);
  padding-inline: clamp(24px, 4vw, 48px);
  border-radius: 16px;
  display: flex;
  flex-direction: column;
  gap: 24px;
  max-width: 600px;
}
.section-event-details .subtitle {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(24px, 2vw + 0.5rem, 36px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-event-details .details {
  display: flex;
  flex-direction: column;
  gap: 16px;
  margin: 0;
}
.section-event-details .detail {
  display: grid;
  grid-template-columns: 1fr;
  gap: 4px;
}
@media (min-width: 768px) {
  .section-event-details .detail {
    grid-template-columns: 100px 1fr;
    gap: 16px;
    align-items: baseline;
  }
}
.section-event-details .detail__label {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #959a9e;
}
.section-event-details .detail__value {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: inherit;
}
.section-event-details .cta {
  align-self: flex-start;
}
.section-event-details--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
}
.section-event-details--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-event-details--dark .detail__label {
  color: rgba(243, 248, 237, 0.7);
}
.section-event-details--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-event-details--brand .detail__label {
  color: rgba(243, 248, 237, 0.7);
}
.section-event-details--spacing-none {
  margin-block: 0;
}
.section-event-details--spacing-tight {
  margin-block: 24px;
}
.section-event-details--spacing-loose {
  margin-block: clamp(64px, 8vw, 96px);
}

/*
    Single Event template (single-event.php)

    Matches the live Webflow event detail layout (verified against
    /events-collections/thursday-quiz-at-the-local-taphouse at 1440 / 768 / 390):

        - TITLE at the top, left-aligned, big red display font (above the image).
        - A TWO-COLUMN row below: hero IMAGE left (~55%, rounded 32px) and a
          DETAILS column right (~45%) stacking the status badge, Where/When,
          description body, price + CTA, then the category labels.
        - "More events" — heading + a row of 4 shared event cards + a
          "See all events" pill button, then a small back link.

    Below $screen-md the two columns stack (image, then details).

    The Where/When block reuses the .section-event-details / .details /
    .detail__label / .detail__value styles from _event-details.scss for visual
    parity — only the additions needed for the single page live here.

    Mobile-first; desktop refinements via @media (min-width: $screen-*).
*/
.section-event-single {
  max-width: 1169px;
  margin-inline: auto;
  padding-inline: 16px;
  padding-block: clamp(32px, 4vw, 64px);
}
@media (min-width: 768px) {
  .section-event-single {
    padding-inline: 32px;
  }
}
.section-event-single .event-single__header {
  margin-bottom: clamp(24px, 3vw, 48px);
}
.section-event-single .event-single__title {
  margin: 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(48px, 6vw + 0.5rem, 64px);
  font-weight: 400;
  line-height: 1.2;
  text-align: left;
  overflow-wrap: break-word;
}
@media (min-width: 992px) {
  .section-event-single .event-single__title {
    max-width: 36rem;
  }
}
.section-event-single .event-single__subtitle {
  margin: 8px 0 0;
  color: #333333;
  font-family: new-spirit, sans-serif;
  font-size: clamp(20px, 2vw + 0.5rem, 32px);
  font-weight: 400;
  line-height: 1.2;
}
.section-event-single .event-single__row {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(24px, 4vw, 48px);
  align-items: start;
  margin-bottom: clamp(48px, 6vw, 96px);
}
@media (min-width: 768px) {
  .section-event-single .event-single__row {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(32px, 5vw, 96px);
  }
}
@media (min-width: 992px) {
  .section-event-single .event-single__row {
    grid-template-columns: minmax(0, 1fr) 402px;
  }
}
.section-event-single .event-single__media {
  overflow: hidden;
  border-radius: 32px;
  border: 2px solid #E63946;
  background-color: #F3F8ED;
  aspect-ratio: 6/5;
}
@media (min-width: 1200px) {
  .section-event-single .event-single__media {
    position: sticky;
    top: 48px;
  }
}
.section-event-single .event-single__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-event-single .event-single__details {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
  min-width: 0;
}
.section-event-single .event-status {
  padding: 4px 8px;
  border-radius: 999px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
}
.section-event-single .event-status--on-this-week {
  background: #E63946;
  color: #F3F8ED;
}
.section-event-single .event-status--upcoming {
  background: transparent;
  color: #E63946;
  border: 1px solid #E63946;
}
.section-event-single .event-status--past {
  background: #959a9e;
  color: #F3F8ED;
}
.section-event-single .section-event-details {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
  background: none;
  border-radius: 0;
  gap: 8px;
}
.section-event-single .section-event-details .details {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.section-event-single .section-event-details .detail {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px;
  grid-template-columns: none;
}
@media (min-width: 768px) {
  .section-event-single .section-event-details .detail {
    grid-template-columns: none;
    gap: 8px;
  }
}
.section-event-single .section-event-details .detail__label {
  flex: 0 0 auto;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 400;
  line-height: 1.5;
  text-transform: none;
  letter-spacing: 0;
  color: #000000;
}
.section-event-single .section-event-details .detail__value {
  flex: 1 1 0;
  min-width: 0;
  font-size: 16px;
  line-height: 1.5;
  color: #000000;
}
.section-event-single .section-event-details .detail__venue,
.section-event-single .section-event-details .detail__address {
  display: block;
}
.section-event-single .event-body {
  width: 100%;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: #333333;
}
.section-event-single .event-body p {
  margin-block: 0 16px;
}
.section-event-single .event-body a {
  color: #E63946;
}
.section-event-single .event-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 16px;
  width: 100%;
}
.section-event-single .event-price {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  color: #333333;
}
.section-event-single .event-price__label {
  font-weight: 500;
  color: #959a9e;
}
.section-event-single .event-price__value {
  font-weight: 600;
}
.section-event-single .event-categories {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.section-event-single .event-categories__chip {
  padding: 4px 16px;
  border-radius: 999px;
  border: 1px solid #e0e0e0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #333333;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-event-single .event-categories a.event-categories__chip:hover {
  background: #E63946;
  border-color: #E63946;
  color: #FFFFFF;
}
.section-event-single .event-related {
  margin-bottom: clamp(48px, 6vw, 96px);
}
.section-event-single .event-related__heading {
  margin: 0 0 32px 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 2vw + 1rem, 32px);
  font-weight: 400;
  line-height: 1.2;
}
.section-event-single .event-related__grid {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-event-single .event-related__grid {
    gap: 32px;
  }
}
.section-event-single .event-related__grid > .event-card {
  flex: 1 1 100%;
}
@media (min-width: 768px) {
  .section-event-single .event-related__grid > .event-card {
    flex: 1 1 calc((100% - 32px) / 2);
    max-width: calc((100% - 32px) / 2);
  }
}
@media (min-width: 992px) {
  .section-event-single .event-related__grid > .event-card {
    flex: 1 1 calc((100% - 3 * 32px) / 4);
    max-width: calc((100% - 3 * 32px) / 4);
  }
}
.section-event-single .event-related__cta {
  display: flex;
  justify-content: flex-start;
  margin-top: clamp(32px, 4vw, 48px);
}
.section-event-single .event-related__cta .btn {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
}
.section-event-single .event-back__link {
  display: inline-block;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  color: #E63946;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-event-single .event-back__link:hover {
  color: #bf2f3b;
}

/*
    Section: Explore Categories (s-explore-categories)

    Matches the live Webflow "Explore the best of Hamilton's city centre"
    carousel: a red display heading and a slider of category cards. Each card is
    title-on-top, then image, then a description + category line-icon row, then an
    outlined "More …" pill button.

    Pre-init the .js-slider track is a flex + scroll-snap row (no-JS fallback);
    tiny-slider enhances it on load (adds .tns-slider + arrow controls). The flex
    fallback is scoped to :not(.tns-slider) so it doesn't fight tiny-slider.
*/
.section-explore {
  position: relative;
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-explore {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-explore .section-explore__heading {
  margin: 0 0 32px 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(48px, 6vw, 88px);
  line-height: 1.2;
}
.section-explore .section-explore__track:not(.tns-slider) {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
}
.section-explore .section-explore__track:not(.tns-slider) > .explore-card {
  flex: 0 0 clamp(260px, 80vw, 320px);
  scroll-snap-align: start;
}
.section-explore .tns-controls {
  display: flex;
  justify-content: flex-end;
  gap: 16px;
  margin-bottom: 32px;
}
.section-explore .tns-controls button {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  padding: 0;
  border: 1px solid #E63946;
  border-radius: 999px;
  background: transparent;
  color: #E63946;
  cursor: pointer;
  font-size: 0;
  transition: 0.25s ease-in-out;
}
.section-explore .tns-controls button::after {
  content: "";
  width: 24px;
  height: 24px;
  background-color: currentColor;
  -webkit-mask: center/contain no-repeat;
  mask: center/contain no-repeat;
}
.section-explore .tns-controls button[data-controls=prev]::after {
  -webkit-mask-image: url("../images/arrow-left.svg");
  mask-image: url("../images/arrow-left.svg");
}
.section-explore .tns-controls button[data-controls=next]::after {
  -webkit-mask-image: url("../images/arrow-right.svg");
  mask-image: url("../images/arrow-right.svg");
}
.section-explore .tns-controls button:hover {
  background: #E63946;
  color: #FFFFFF;
}
.section-explore .tns-controls button[disabled] {
  opacity: 0.35;
  cursor: default;
}
.section-explore--spacing-none {
  margin-block: 0;
}
.section-explore--spacing-tight {
  margin-block: 32px;
}
.section-explore--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Component: Explore Card

    Self-contained category card used inside .section-explore. Title on top, then
    rounded image, then a description + line-icon row, then the pill button.
    Hover lift + image zoom consistent with the story / business cards.
*/
.explore-card {
  display: flex;
  flex-direction: column;
  height: 100%;
}
.explore-card .explore-card__title {
  margin: 0 0 16px 0;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(24px, 2.4vw, 32px);
  line-height: 1.2;
  color: #1E232D;
  min-height: calc(1.2 * 2em);
}
.explore-card .explore-card__media {
  position: relative;
  aspect-ratio: 6/5;
  margin-bottom: 24px;
  border: 1px solid #1E232D;
  border-radius: 16px;
  overflow: hidden;
}
.explore-card .explore-card__img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.3s ease-in-out;
}
.explore-card:hover .explore-card__img {
  transform: scale(1.03);
}
.explore-card .explore-card__credit {
  position: absolute;
  left: 16px;
  bottom: 16px;
  max-width: 70%;
  color: #F3F8ED;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  line-height: 1.2;
  white-space: pre-line;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);
}
.explore-card .explore-card__foot {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 16px;
  flex: 1 1 auto;
}
.explore-card .explore-card__desc {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 1.25rem;
  line-height: 1.5;
  color: #1E232D;
}
.explore-card .explore-card__icon {
  flex-shrink: 0;
  width: 48px;
  height: 48px;
  background-color: #E63946;
  -webkit-mask: var(--icon) center/contain no-repeat;
  mask: var(--icon) center/contain no-repeat;
}
.explore-card .explore-card__btn {
  align-self: flex-start;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: 1.25rem;
}

/*
    Section: FAQ (s-faq)

    Mirrors the live Webflow contact FAQ (".contact-faq"): a photo on the LEFT
    (desktop only) and a heading + accordion on the RIGHT.

    Accordion uses native <details>/<summary>:
    - Red-outlined rounded items (matches live `.accordion-item`).
    - Question is the <summary>; the default disclosure triangle is removed and
      replaced with a chevron that rotates 180deg when the item is open.
    - Answer (<div class="answer">) is revealed by the browser -- no JS.
*/
.section-faq {
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Left image (desktop only -- matches live `hide-tablet`) ---------- */
  /* ---- Right column: heading + accordion ------------------------------- */
  /* ---- D-24 colour variants -------------------------------------------- */
  /* ---- D-22 spacing overrides ------------------------------------------ */
}
@media (min-width: 768px) {
  .section-faq {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-faq .inner {
  display: flex;
  flex-direction: column;
  gap: 48px;
}
@media (min-width: 1200px) {
  .section-faq .inner {
    flex-direction: row;
    align-items: flex-start;
    gap: clamp(64px, 6vw, 96px);
  }
}
.section-faq .media {
  display: none;
}
@media (min-width: 1200px) {
  .section-faq .media {
    display: block;
    position: relative;
    flex: 0 0 40%;
    max-width: 40%;
    aspect-ratio: 1/1;
    border: 2px solid #E63946;
    border-radius: 24px;
    overflow: hidden;
  }
}
.section-faq .media__img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-faq .media__credit {
  position: absolute;
  bottom: 16px;
  left: 16px;
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  line-height: 1.2;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}
.section-faq .faqs {
  flex: 1 1 0;
  min-width: 0;
}
.section-faq .heading {
  margin: 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(32px, 1vw + 1.6rem, 48px);
  line-height: 1.2;
}
.section-faq .accordion {
  display: flex;
  flex-direction: column;
  gap: 16px;
  margin-top: 32px;
}
.section-faq .item {
  border: 1px solid #E63946;
  border-radius: 16px;
  overflow: hidden;
}
.section-faq .question {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
  padding: 16px;
  cursor: pointer;
  list-style: none;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  line-height: 1.2;
}
.section-faq .question::-webkit-details-marker {
  display: none;
}
.section-faq .question__icon {
  flex: none;
  color: #E63946;
  transition: transform 0.25s ease-in-out;
}
.section-faq .item[open] .question__icon,
.section-faq .item.is-open .question__icon {
  transform: rotate(180deg);
}
.section-faq .answer {
  padding: 0 16px 16px;
  color: #333333;
  line-height: 1.5;
}
.section-faq .answer p {
  margin: 0 0 8px;
}
.section-faq .answer p:last-child {
  margin-bottom: 0;
}
.section-faq .answer a {
  color: #E63946;
  text-decoration: underline;
}
.section-faq--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
}
.section-faq--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
}
.section-faq--dark .answer {
  color: #F3F8ED;
}
.section-faq--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
}
.section-faq--brand .item {
  border-color: #F3F8ED;
}
.section-faq--brand .heading,
.section-faq--brand .question,
.section-faq--brand .question__icon {
  color: #F3F8ED;
}
.section-faq--brand .answer {
  color: #F3F8ED;
}
.section-faq--brand .answer a {
  color: #F3F8ED;
}
.section-faq--spacing-none {
  padding-block: 0;
}
.section-faq--spacing-tight {
  padding-block: 32px;
}
.section-faq--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Filterable Grid (s-filterable-grid)
    Visual parity: audit/screenshots/s-filterable-grid-{1440,768,375}.png

    7-page filter-driven grid (retail / dine / activities / health-and-beauty /
    stories / events / promotions). Root selector is nest-not-BEM (per css/CLAUDE.md).

    When FacetWP is active, the plugin renders its own markup inside .filter-bar
    (via [facetwp facet="..."] shortcode) and .results (via facetwp_display). We
    target .facetwp-* classes so styles survive FacetWP template-builder changes.

    When FacetWP is inactive, s-filterable-grid.php emits a fallback
    .result-card component (BEM __ children) inside .results--fallback.

    filter_type variants (D-23) -- chips vs day-tabs visual treatment.
    card_style variants (D-23) -- tune card media aspect-ratio per content type.
    Colour variants (D-24) -- modifier classes set --section-bg / --section-fg.
*/
.section-filterable-grid {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-filterable-grid {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-filterable-grid .heading {
  margin: 0 0 32px 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-filterable-grid .filter-bar {
  margin-bottom: clamp(24px, 3vw, 48px);
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 16px 24px;
}
.section-filterable-grid .filter-bar__filters {
  flex: 1 1 320px;
  min-width: 0;
}
.section-filterable-grid .filter-bar__sort {
  flex: 0 0 auto;
  margin-left: auto;
}
.section-filterable-grid .filter-bar__sort .facetwp-sort-select,
.section-filterable-grid .filter-bar__sort select {
  padding: 4px 32px 4px 16px;
  border: 1px solid rgba(230, 57, 70, 0.4);
  border-radius: 999px;
  background: transparent;
  color: #333333;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-filterable-grid .filter-bar__sort .facetwp-sort-select:hover,
.section-filterable-grid .filter-bar__sort select:hover {
  border-color: #E63946;
}
.section-filterable-grid .filter-bar .facetwp-facet {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0;
}
.section-filterable-grid .filter-bar .facetwp-checkbox,
.section-filterable-grid .filter-bar .facetwp-radio {
  display: inline-flex;
  align-items: center;
  padding: 4px 24px;
  border: 1px solid rgba(230, 57, 70, 0.4);
  border-radius: 999px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.4;
  color: #333333;
  white-space: nowrap;
  cursor: pointer;
  transition: 0.25s ease-in-out;
  background: transparent;
}
.section-filterable-grid .filter-bar .facetwp-checkbox:hover,
.section-filterable-grid .filter-bar .facetwp-radio:hover {
  border-color: #E63946;
  background: rgba(230, 57, 70, 0.06);
}
.section-filterable-grid .filter-bar .facetwp-checkbox.checked,
.section-filterable-grid .filter-bar .facetwp-radio.checked {
  background: #E63946;
  color: #F3F8ED;
  border-color: #E63946;
}
.section-filterable-grid .filter-bar .facetwp-counter {
  display: none;
}
.section-filterable-grid .filter-bar .facetwp-toggle {
  display: inline-flex;
  align-items: center;
  align-self: center;
  padding: 4px 8px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: #E63946;
  text-decoration: underline;
  cursor: pointer;
  white-space: nowrap;
}
.section-filterable-grid .filter-bar .facetwp-toggle:hover {
  color: #bf2f3b;
}
.section-filterable-grid .filter-bar .facetwp-toggle.facetwp-hidden {
  display: none;
}
.section-filterable-grid .filter-bar .facetwp-overflow {
  display: contents;
}
.section-filterable-grid .filter-bar .facetwp-overflow.facetwp-hidden {
  display: none;
}
.section-filterable-grid .results {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-filterable-grid .results {
    grid-template-columns: repeat(2, 1fr);
    gap: 32px;
  }
}
@media (min-width: 1200px) {
  .section-filterable-grid .results {
    grid-template-columns: repeat(3, 1fr);
  }
}
.section-filterable-grid .results .facetwp-template {
  display: contents;
}
.section-filterable-grid .results--business,
.section-filterable-grid .results--story {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
@media (min-width: 768px) {
  .section-filterable-grid .results--business,
  .section-filterable-grid .results--story {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
@media (min-width: 992px) {
  .section-filterable-grid .results--business,
  .section-filterable-grid .results--story {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}
@media (min-width: 768px) {
  .section-filterable-grid .results--business > .business-card:first-child,
  .section-filterable-grid .results--business > .story-card:first-child,
  .section-filterable-grid .results--story > .business-card:first-child,
  .section-filterable-grid .results--story > .story-card:first-child {
    grid-column: span 2;
    grid-row: span 2;
  }
  .section-filterable-grid .results--business > .business-card:first-child .business-card__link,
  .section-filterable-grid .results--business > .business-card:first-child .story-card__link,
  .section-filterable-grid .results--business > .story-card:first-child .business-card__link,
  .section-filterable-grid .results--business > .story-card:first-child .story-card__link,
  .section-filterable-grid .results--story > .business-card:first-child .business-card__link,
  .section-filterable-grid .results--story > .business-card:first-child .story-card__link,
  .section-filterable-grid .results--story > .story-card:first-child .business-card__link,
  .section-filterable-grid .results--story > .story-card:first-child .story-card__link {
    height: 100%;
  }
  .section-filterable-grid .results--business > .business-card:first-child .business-card__media,
  .section-filterable-grid .results--business > .business-card:first-child .story-card__media,
  .section-filterable-grid .results--business > .story-card:first-child .business-card__media,
  .section-filterable-grid .results--business > .story-card:first-child .story-card__media,
  .section-filterable-grid .results--story > .business-card:first-child .business-card__media,
  .section-filterable-grid .results--story > .business-card:first-child .story-card__media,
  .section-filterable-grid .results--story > .story-card:first-child .business-card__media,
  .section-filterable-grid .results--story > .story-card:first-child .story-card__media {
    aspect-ratio: auto;
    flex: 1 1 auto;
    min-height: 280px;
  }
  .section-filterable-grid .results--business > .business-card:first-child .business-card__title,
  .section-filterable-grid .results--business > .business-card:first-child .story-card__title,
  .section-filterable-grid .results--business > .story-card:first-child .business-card__title,
  .section-filterable-grid .results--business > .story-card:first-child .story-card__title,
  .section-filterable-grid .results--story > .business-card:first-child .business-card__title,
  .section-filterable-grid .results--story > .business-card:first-child .story-card__title,
  .section-filterable-grid .results--story > .story-card:first-child .business-card__title,
  .section-filterable-grid .results--story > .story-card:first-child .story-card__title {
    font-size: clamp(24px, 2vw + 0.5rem, 34px);
  }
}
.section-filterable-grid .admin-notice {
  margin: 0 0 24px 0;
  padding: 16px;
  background: #F3F8ED;
  border: 1px dashed #E63946;
  border-radius: 16px;
  color: #E63946;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
}
.section-filterable-grid .result-card {
  display: block;
}
.section-filterable-grid .result-card__link {
  display: flex;
  flex-direction: column;
  gap: 8px;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-filterable-grid .result-card__link:hover {
  transform: translateY(-4px);
}
.section-filterable-grid .result-card__media {
  aspect-ratio: 1/1;
  overflow: hidden;
  border-radius: 16px;
}
.section-filterable-grid .result-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-filterable-grid .result-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 1.4vw + 0.5rem, 22px);
  font-weight: 500;
  line-height: 1.2;
}
.section-filterable-grid--filter-day-tabs .filter-bar .facetwp-radio {
  border-radius: 0;
  border-bottom-width: 2px;
  border-top: 0;
  border-left: 0;
  border-right: 0;
}
.section-filterable-grid--cards-event .result-card__media {
  aspect-ratio: 4/3;
}
.section-filterable-grid--cards-article .result-card__media {
  aspect-ratio: 3/2;
}
.section-filterable-grid--cards-business .result-card__media {
  aspect-ratio: 1/1;
}
.section-filterable-grid--cards-promotion .result-card__media {
  aspect-ratio: 3/2;
}
.section-filterable-grid--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-filterable-grid--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-filterable-grid--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-filterable-grid--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-filterable-grid--spacing-tight {
  margin-block: 32px;
}
.section-filterable-grid--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Form (s-form)

    Visual parity: audit/screenshots/s-form-{1440,768,375}.png

    SCOPE: block-shell layout ONLY (heading, description, form-wrapper
    max-width, spacing/colour variants). Gravity Forms field styling
    (inputs, labels, buttons, validation, honeypot) lives in
    css/_forms.scss (Orbital theme overrides). DO NOT duplicate any
    .gform_* rules here - they belong in _forms.scss so every GF
    embed in the theme (newsletter modal, contact form, any future
    form) inherits the same appearance.

    Structure mirrors 03-11 s-rich-text / 03-14 s-text-block readable-
    column shells (single-column content, max-width cap, fluid heading,
    D-22 spacing + D-24 colour variant suites).
*/
.section-form {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-form {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-form .heading {
  margin: 0 0 16px 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-form .description {
  margin: 0 0 32px 0;
  max-width: 640px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-form .description a {
  color: inherit;
  text-underline-offset: 4px;
}
.section-form .form-wrapper {
  max-width: 720px;
  margin-inline: auto;
}
.section-form--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-form--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-form--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-form--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-form--spacing-tight {
  margin-block: 32px;
}
.section-form--spacing-tight.section-form--light, .section-form--spacing-tight.section-form--dark, .section-form--spacing-tight.section-form--brand {
  margin-block: 0;
  padding-block: 32px;
}
.section-form--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}
.section-form--spacing-loose.section-form--light, .section-form--spacing-loose.section-form--dark, .section-form--spacing-loose.section-form--brand {
  margin-block: 0;
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Hero (s-hero)

    One hero block with four styles (the "Hero style" ACF mode). Two layout
    systems, each scoped under its mode modifiers so both keep their exact
    structure, breakpoints and values:

      FULL-BLEED  (--mode-image, --mode-solid)
        Replicates the live homepage hero (flexbox, image left / text right,
        text BOTTOM-aligned, map-pin Te reo tagline). Switches to two columns at
        $screen-lg (1200px). Image carries the red border + radius; the badge is
        an un-clipped absolutely-positioned sibling. Solid = same layout, no media.

      INTERIOR  (--mode-interior, --mode-video)
        Replicates the live interior-page hero (text left, framed image OR video
        right, Te reo eyebrow above the heading, outlined CTA). Switches at
        $screen-md (992px). Fixed 64px gap to the next section.

    H1 hardcoded per the one-H1-per-page rule. Colour values verified against the
    live site at the breakpoints noted in each block.
*/
.section-hero {
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  /* ---- Colour variants (shared by all modes) --------------------------- */
}
.section-hero--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  --subheading-fg: #1E232D;
}
.section-hero--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  --subheading-fg: #F3F8ED;
}
.section-hero--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  --subheading-fg: #F3F8ED;
}

/* =========================================================================
   FULL-BLEED styles: image + solid  (was s-hero)
   ========================================================================= */
.section-hero--mode-image,
.section-hero--mode-solid {
  --hero-pin-w: clamp(28px, 3vw, 44px);
  --hero-pin-gap: 24px;
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  overflow-x: clip;
  display: flex;
  flex-direction: column;
  gap: 32px;
  /* ---- Image column ---------------------------------------------------- */
  /* ---- Text column ----------------------------------------------------- */
}
@media (min-width: 768px) {
  .section-hero--mode-image,
  .section-hero--mode-solid {
    padding-inline: clamp(32px, 6vw, 48px);
    gap: 48px;
  }
}
@media (min-width: 1200px) {
  .section-hero--mode-image,
  .section-hero--mode-solid {
    flex-direction: row;
    align-items: stretch;
    gap: 64px;
  }
}
.section-hero--mode-image .media,
.section-hero--mode-solid .media {
  position: relative;
  min-width: 0;
  aspect-ratio: 1/1;
}
@media (min-width: 1200px) {
  .section-hero--mode-image .media,
  .section-hero--mode-solid .media {
    flex: 1 1 0;
    align-self: stretch;
    max-height: calc(100svh - 21.5rem);
  }
}
.section-hero--mode-image .media img:not(.badge),
.section-hero--mode-solid .media img:not(.badge) {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 16px;
  border: 2px solid #E63946;
}
.section-hero--mode-image .media .badge,
.section-hero--mode-solid .media .badge {
  position: absolute;
  top: 0;
  right: 24px;
  width: clamp(120px, 36%, 188px);
  height: auto;
  transform: translateY(-40%) rotate(-15deg);
  transform-origin: center;
}
.section-hero--mode-image .media .media__credit,
.section-hero--mode-solid .media .media__credit {
  position: absolute;
  bottom: 16px;
  left: 16px;
  z-index: 10;
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  line-height: 1.2;
}
.section-hero--mode-image .body,
.section-hero--mode-solid .body {
  display: flex;
  flex-direction: column;
  gap: 24px;
  min-width: 0;
  order: -1;
}
@media (min-width: 1200px) {
  .section-hero--mode-image .body,
  .section-hero--mode-solid .body {
    order: 0;
    flex: 1 1 0;
    justify-content: flex-end;
  }
}
.section-hero--mode-image .heading,
.section-hero--mode-solid .heading {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 2.34rem + 3.54vw, 160px);
  font-weight: 400;
  line-height: 1.1;
  overflow-wrap: normal;
}
.section-hero--mode-image .tagline,
.section-hero--mode-solid .tagline {
  position: relative;
  margin: 0;
  padding-left: calc(var(--hero-pin-w) + var(--hero-pin-gap));
}
.section-hero--mode-image .pin,
.section-hero--mode-solid .pin {
  position: absolute;
  left: 0;
  top: 0.15em;
  width: var(--hero-pin-w);
  height: auto;
}
.section-hero--mode-image .bilingual,
.section-hero--mode-solid .bilingual {
  font-family: new-spirit, sans-serif;
  font-size: clamp(24px, 1.6vw + 1rem, 32px);
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-hero--mode-image .subheading,
.section-hero--mode-solid .subheading {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(16px, 0.6vw + 0.85rem, 18px);
  line-height: 1.5;
  color: #1E232D;
}
.section-hero--mode-image .cta,
.section-hero--mode-solid .cta {
  align-self: flex-start;
}

/* ---- Tagline indent (only when a Te reo tagline + pin is present) -------- */
@media (min-width: 1200px) {
  .section-hero--with-tagline .subheading {
    padding-left: calc(var(--hero-pin-w) + var(--hero-pin-gap));
  }
  .section-hero--with-tagline .cta {
    margin-left: calc(var(--hero-pin-w) + var(--hero-pin-gap));
  }
}

/* ---- Image-style aspect variant ----------------------------------------- */
.section-hero--bg-composition .media {
  aspect-ratio: 5/4;
}

/* ---- Full-bleed spacing overrides --------------------------------------- */
.section-hero--mode-image.section-hero--spacing-none,
.section-hero--mode-solid.section-hero--spacing-none {
  padding-block: 0;
}
.section-hero--mode-image.section-hero--spacing-tight,
.section-hero--mode-solid.section-hero--spacing-tight {
  padding-block: 32px;
}
.section-hero--mode-image.section-hero--spacing-loose,
.section-hero--mode-solid.section-hero--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/* =========================================================================
   INTERIOR styles: interior + video  (was s-page-hero)
   ========================================================================= */
.section-hero--mode-interior,
.section-hero--mode-video {
  padding-block: 16px 0;
  padding-inline: clamp(16px, 4vw, 32px);
  display: flex;
  flex-direction: column;
  gap: 16px;
  /* ---- Text column ----------------------------------------------------- */
  /* ---- Media column ---------------------------------------------------- */
  /* ---- Video media: responsive 16:9 embed in the framed style ---------- */
  /* ---- No-image variant: text spans the row, left-constrained measure --- */
  /* ---- Interior spacing overrides (top only) --------------------------- */
}
@media (min-width: 992px) {
  .section-hero--mode-interior,
  .section-hero--mode-video {
    padding-block: 96px 0;
    padding-inline: clamp(32px, 6vw, 48px);
    flex-direction: row;
    align-items: center;
    gap: 32px;
  }
}
.section-hero--mode-interior + [class*=section-],
.section-hero--mode-video + [class*=section-] {
  margin-top: 64px;
}
.section-hero--mode-interior .body,
.section-hero--mode-video .body {
  display: flex;
  flex-direction: column;
  min-width: 0;
  order: -1;
}
@media (min-width: 992px) {
  .section-hero--mode-interior .body,
  .section-hero--mode-video .body {
    order: 0;
    flex: 1 1 0;
  }
}
.section-hero--mode-interior .eyebrow,
.section-hero--mode-video .eyebrow {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(2rem, 1.7rem + 1.45vw, 3rem);
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-hero--mode-interior .heading,
.section-hero--mode-video .heading {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 2.34rem + 3.54vw, 160px);
  font-weight: 400;
  line-height: 1.1;
  overflow-wrap: normal;
}
.section-hero--mode-interior .bilingual-subheading,
.section-hero--mode-video .bilingual-subheading {
  margin: 32px 0 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(24px, 1rem + 1.1vw, 32px);
  line-height: 1.2;
  color: var(--subheading-fg, #1E232D);
}
@media (min-width: 992px) {
  .section-hero--mode-interior .bilingual-subheading,
  .section-hero--mode-video .bilingual-subheading {
    margin-top: 48px;
  }
}
.section-hero--mode-interior .lead,
.section-hero--mode-video .lead {
  margin: 16px 0 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(1.125rem, 1rem + 1vw, 1.25rem);
  line-height: 1.5;
  color: var(--subheading-fg, #1E232D);
}
.section-hero--mode-interior .cta,
.section-hero--mode-video .cta {
  align-self: flex-start;
  margin-top: 32px;
}
@media (min-width: 992px) {
  .section-hero--mode-interior .cta,
  .section-hero--mode-video .cta {
    margin-top: 48px;
  }
}
.section-hero--mode-interior .media,
.section-hero--mode-video .media {
  position: relative;
  min-width: 0;
  aspect-ratio: 1/1;
}
@media (min-width: 992px) {
  .section-hero--mode-interior .media,
  .section-hero--mode-video .media {
    flex: 1 1 0;
    aspect-ratio: 6/5;
  }
}
.section-hero--mode-interior .media img,
.section-hero--mode-video .media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 32px;
  border: 2px solid #E63946;
}
.section-hero--mode-interior .media .media__credit,
.section-hero--mode-video .media .media__credit {
  position: absolute;
  bottom: 16px;
  left: 16px;
  z-index: 10;
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  line-height: 1.2;
}
.section-hero--mode-interior .media--video,
.section-hero--mode-video .media--video {
  aspect-ratio: auto;
}
.section-hero--mode-interior .media__video,
.section-hero--mode-video .media__video {
  position: relative;
  width: 100%;
  aspect-ratio: 16/9;
  border-radius: 32px;
  overflow: hidden;
  border: 2px solid #E63946;
}
.section-hero--mode-interior .media__video iframe,
.section-hero--mode-video .media__video iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}
@media (min-width: 992px) {
  .section-hero--mode-interior.section-hero--no-image .body,
  .section-hero--mode-video.section-hero--no-image .body {
    max-width: 56rem;
  }
}
.section-hero--mode-interior.section-hero--spacing-none,
.section-hero--mode-video.section-hero--spacing-none {
  padding-block: 0;
}
.section-hero--mode-interior.section-hero--spacing-none + [class*=section-],
.section-hero--mode-video.section-hero--spacing-none + [class*=section-] {
  margin-top: 0;
}
.section-hero--mode-interior.section-hero--spacing-tight,
.section-hero--mode-video.section-hero--spacing-tight {
  padding-block: 32px 0;
}
.section-hero--mode-interior.section-hero--spacing-loose,
.section-hero--mode-video.section-hero--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px) 0;
}

/*
    Section: Link List (s-link-list)
    Visual parity: audit/screenshots/s-link-list-{1440,768,375}.png
    Used on /linkinbio only (position 1, single occurrence).

    Linkinbio-style: centered vertical stack of full-width-ish buttons
    with optional left-aligned thumbnails. No multi-column variants --
    every viewport shows the same stacked layout (mobile-originated
    pattern; desktop just constrains the max-width).

    .link-btn extends .btn .btn-primary from _buttons.scss. Only the
    block-specific overrides live here: full-width + left-aligned
    content + optional thumbnail slot. Do NOT redeclare button colours,
    typography, focus-visible, or base padding -- those belong in
    _buttons.scss and are inherited.

    Colour variants (D-24) and spacing variants (D-22) follow the same
    margin-block -> padding-block swap used across Wave 3 blocks, via
    compound selectors so spacing + colour compose correctly. When the
    section has a coloured background, the button colour shifts so the
    button doesn't disappear into the band (e.g. --brand uses $color-dark
    buttons instead of the default $color-primary buttons).
*/
.section-link-list {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-link-list {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-link-list .heading {
  margin: 0 auto 32px auto;
  max-width: 680px;
  text-align: center;
  font-family: new-spirit, sans-serif;
  font-size: clamp(32px, 4.5vw + 0.5rem, 64px);
  font-weight: 400;
  line-height: 1.2;
}
.section-link-list .links {
  list-style: none;
  padding: 0;
  margin: 0 auto;
  max-width: 520px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.section-link-list .link-item {
  display: block;
}
.section-link-list .link-btn {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 16px;
  width: 100%;
  min-height: 56px;
  padding: 8px 16px;
  text-align: left;
}
.section-link-list .link-btn__thumb {
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  object-fit: cover;
  border-radius: 4px;
}
.section-link-list .link-btn__text {
  flex: 1;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  line-height: 1.5;
}
.section-link-list--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-link-list--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-link-list--dark .heading {
  color: #F3F8ED;
}
.section-link-list--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-link-list--brand .heading {
  color: #F3F8ED;
}
.section-link-list--brand .link-btn {
  background-color: #1E232D;
  color: #F3F8ED;
}
.section-link-list--brand .link-btn:hover {
  background-color: #F3F8ED;
  color: #1E232D;
}
.section-link-list--spacing-none {
  margin-block: 0;
}
.section-link-list--spacing-none.section-link-list--light, .section-link-list--spacing-none.section-link-list--dark, .section-link-list--spacing-none.section-link-list--brand {
  padding-block: 0;
}
.section-link-list--spacing-tight {
  margin-block: 32px;
}
.section-link-list--spacing-tight.section-link-list--light, .section-link-list--spacing-tight.section-link-list--dark, .section-link-list--spacing-tight.section-link-list--brand {
  margin-block: 0;
  padding-block: 32px;
}
.section-link-list--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}
.section-link-list--spacing-loose.section-link-list--light, .section-link-list--spacing-loose.section-link-list--dark, .section-link-list--spacing-loose.section-link-list--brand {
  margin-block: 0;
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Logo Grid (s-logo-grid)
    Visual parity: audit/screenshots/s-logo-grid-{1440,768,375}.png
    Used on /award-nominations/{slug} (position 3) -- sponsor / partner logo
    band. Flat ACF repeater per D-27.

    Root selector is nest-not-BEM (per css/CLAUDE.md). The inner .logo is
    treated as a reusable component and uses double-underscore children
    (.logo__img) -- explicitly allowed for components.

    Layout variants (D-27, Design tab select):
      - single-row: flex row, centred, horizontal scroll-snap on mobile so
                    <=5 sponsors still fit on a 375px viewport without
                    shrinking below legibility.
      - multi-row:  wraps onto multiple rows at every viewport (flex-wrap:
                    wrap). Use for larger partner grids.

    Logos render at logo-240 (240x120, no crop). The .logo wrapper caps
    max-height so transparent PNGs centre cleanly regardless of source
    ratio. Opacity 0.75 at rest + 1.0 on hover gives the subtle grayscale-
    like wash Webflow uses for sponsor bands (matches live site).

    Colour variants (D-24) and spacing variants (D-22) follow the same
    margin-block -> padding-block swap used across Wave 3 blocks, via
    compound selectors so spacing + colour compose correctly.
*/
.section-logo-grid {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-logo-grid {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-logo-grid .heading {
  margin: 0 0 32px 0;
  text-align: center;
  font-family: new-spirit, sans-serif;
  font-size: clamp(20px, 2vw + 0.5rem, 28px);
  font-weight: 400;
  line-height: 1.2;
  color: #959a9e;
}
.section-logo-grid .logos {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 32px;
}
.section-logo-grid .logo {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: clamp(48px, 6vw, 80px);
  width: clamp(100px, 15vw, 200px);
  opacity: 0.75;
  transition: 0.25s ease-in-out;
}
.section-logo-grid .logo:hover, .section-logo-grid .logo:focus-visible {
  opacity: 1;
}
.section-logo-grid .logo__img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
}
.section-logo-grid--single-row .logos {
  flex-wrap: nowrap;
  overflow-x: auto;
  scroll-snap-type: x proximity;
  -webkit-overflow-scrolling: touch;
}
.section-logo-grid--single-row .logos .logo {
  flex-shrink: 0;
  scroll-snap-align: start;
}
@media (min-width: 1200px) {
  .section-logo-grid--single-row .logos {
    flex-wrap: wrap;
    overflow-x: visible;
    scroll-snap-type: none;
  }
}
.section-logo-grid--multi-row .logos {
  flex-wrap: wrap;
}
.section-logo-grid--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-logo-grid--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-logo-grid--dark .heading {
  color: rgba(243, 248, 237, 0.7);
}
.section-logo-grid--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-logo-grid--brand .heading {
  color: rgba(243, 248, 237, 0.8);
}
.section-logo-grid--spacing-none {
  margin-block: 0;
}
.section-logo-grid--spacing-none.section-logo-grid--light, .section-logo-grid--spacing-none.section-logo-grid--dark, .section-logo-grid--spacing-none.section-logo-grid--brand {
  padding-block: 0;
}
.section-logo-grid--spacing-tight {
  margin-block: 32px;
}
.section-logo-grid--spacing-tight.section-logo-grid--light, .section-logo-grid--spacing-tight.section-logo-grid--dark, .section-logo-grid--spacing-tight.section-logo-grid--brand {
  margin-block: 0;
  padding-block: 32px;
}
.section-logo-grid--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}
.section-logo-grid--spacing-loose.section-logo-grid--light, .section-logo-grid--spacing-loose.section-logo-grid--dark, .section-logo-grid--spacing-loose.section-logo-grid--brand {
  margin-block: 0;
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Map (s-map)

    Renders a static Google Maps iframe alongside optional contact details
    (address / phone / email). /contact-only block.

    Visual parity: audit/screenshots/s-map-{1440,768,375}.png.

    Layout:
    - Mobile / tablet: single column. Map on top, contact stacks below.
    - Desktop ($screen-lg+): 2fr/1fr split. Map on the left, contact column
      on the right.

    Defence-in-depth for the iframe: the PHP template already enforces a
    Google Maps URL whitelist + sandbox attribute; this partial only styles
    the shell.
*/
.section-map {
  color: var(--section-fg, #E63946);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-map {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-map .heading {
  margin: 0 0 32px 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-map .layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 1200px) {
  .section-map .layout {
    grid-template-columns: 2fr 1fr;
    gap: 32px;
    align-items: start;
  }
}
.section-map .map-frame {
  position: relative;
  aspect-ratio: 4/3;
  border-radius: 16px;
  overflow: hidden;
  border: 1px solid #e0e0e0;
  background: #F3F8ED;
}
@media (min-width: 1200px) {
  .section-map .map-frame {
    aspect-ratio: 16/10;
  }
}
.section-map .map-frame iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}
.section-map .contact {
  display: flex;
  flex-direction: column;
  gap: 8px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-map .contact p {
  margin: 0;
}
.section-map .contact a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 4px;
  transition: 0.25s ease-in-out;
}
.section-map .contact a:hover {
  text-decoration-thickness: 2px;
}
.section-map .admin-notice {
  padding: 16px;
  border: 1px dashed #E63946;
  border-radius: 16px;
  color: #E63946;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
}
.section-map .admin-notice code {
  font-family: monospace;
  padding: 0 4px;
  background: rgba(230, 57, 70, 0.08);
  border-radius: 4px;
}
.section-map--light {
  --section-bg: #F3F8ED;
  --section-fg: #E63946;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-map--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-map--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 5vw, 96px);
}
.section-map--spacing-none {
  margin-block: 0;
}
.section-map--spacing-none.section-map--light, .section-map--spacing-none.section-map--dark, .section-map--spacing-none.section-map--brand {
  padding-block: 0;
}
.section-map--spacing-tight {
  margin-block: 32px;
}
.section-map--spacing-tight.section-map--light, .section-map--spacing-tight.section-map--dark, .section-map--spacing-tight.section-map--brand {
  margin-block: 0;
  padding-block: 32px;
}
.section-map--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}
.section-map--spacing-loose.section-map--light, .section-map--spacing-loose.section-map--dark, .section-map--spacing-loose.section-map--brand {
  margin-block: 0;
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Shared page-hero band (.section-page-hero)

    The no-image intro band reused by the listing archives
    (archive-story.php, archive-event.php). It owns the horizontal gutter so the
    eyebrow, heading and lead share the same left edge as the filter pills and
    card grid that follow. The gutter clamps match each archive's __inner wrapper
    so the hero text and the content below line up exactly.

    Each archive partial owns its own content width and bottom spacing;
    typography comes from the global element styles.

    Mobile-first.
*/
.section-page-hero {
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-page-hero {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}

/*
    Section: Preset Sections (s-preset-sections)

    A transparent embed wrapper. The preset's own blocks carry their own
    spacing, colour bands and rhythm, so this block adds no visual chrome of
    its own — it only exists as an optional anchor target (#section_id) so a
    page can deep-link to an embedded preset group. Kept as a contents-box so
    it never introduces an extra layout box between the page and the preset's
    sections.
*/
.section-preset-sections {
  display: contents;
}

/*
    Section: Promotion Grid (s-promotion-grid)

    The promotions listing — a FacetWP-filtered card grid of the `promotion`
    CPT (https://www.lovethecentre.co.nz/promotions). Day-of-week tabs +
    promotion-type chips sit above a responsive grid of square promo tiles.

    Facets render FacetWP markup, so we target the generic .facetwp-* classes
    (styles survive FacetWP upgrades). The promo-card is a component-style block
    (BEM __ children allowed per css/CLAUDE.md). Colour + spacing modifiers
    mirror the other sections.
*/
.section-promotion-grid {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ----------------------------------------------------------------------
     Filter bar — day tabs (radio) + type chips (checkboxes)
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Results grid
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Promotion card
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Colour variants (set custom properties only)
     ---------------------------------------------------------------------- */
  /* Spacing overrides */
}
@media (min-width: 768px) {
  .section-promotion-grid {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-promotion-grid .promo-grid__head {
  margin-bottom: 32px;
}
.section-promotion-grid .heading {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-promotion-grid .intro {
  margin-top: 8px;
  max-width: 60ch;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  line-height: 1.5;
}
.section-promotion-grid .filter-bar {
  margin-bottom: 24px;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
@media (min-width: 992px) {
  .section-promotion-grid .filter-bar {
    flex-flow: row wrap;
    align-items: flex-end;
  }
}
@media (min-width: 992px) {
  .section-promotion-grid .filter-bar__days {
    flex: 1 0 100%;
  }
  .section-promotion-grid .filter-bar__sort {
    margin-left: auto;
  }
}
.section-promotion-grid .facetwp-counter {
  display: none;
}
.section-promotion-grid .facetwp-facet {
  margin: 0;
}
.section-promotion-grid .filter-bar__group {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.section-promotion-grid .filter-bar__label {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #959a9e;
}
.section-promotion-grid .filter-bar__days .facetwp-facet {
  display: flex;
  flex-wrap: nowrap;
  gap: 24px;
  overflow-x: auto;
  padding-bottom: 4px;
  border-bottom: 1px solid var(--promo-divider, #e0e0e0);
}
@media (min-width: 992px) {
  .section-promotion-grid .filter-bar__days .facetwp-facet {
    flex-wrap: wrap;
    overflow-x: visible;
  }
}
.section-promotion-grid .filter-bar__days .facetwp-radio {
  flex: 0 0 auto;
  background-image: none;
  padding: 4px 0 8px;
  margin-bottom: -1px;
  border-bottom: 2px solid transparent;
  color: inherit;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  white-space: nowrap;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-promotion-grid .filter-bar__days .facetwp-radio:hover {
  color: #E63946;
}
.section-promotion-grid .filter-bar__days .facetwp-radio.checked {
  color: #E63946;
  border-bottom-color: #E63946;
  font-weight: 500;
}
.section-promotion-grid .filter-bar__types .facetwp-facet {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.section-promotion-grid .filter-bar__types .facetwp-checkbox {
  display: inline-flex;
  align-items: center;
  background-image: none;
  padding: 4px 16px;
  margin-bottom: 0;
  border: 1px solid #e0e0e0;
  border-radius: 999px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-promotion-grid .filter-bar__types .facetwp-checkbox.checked {
  background: #E63946;
  color: #F3F8ED;
  border-color: #E63946;
}
.section-promotion-grid .filter-bar__types .facetwp-checkbox:hover {
  border-color: #E63946;
}
.section-promotion-grid .filter-bar__sort .facetwp-sort-select,
.section-promotion-grid .filter-bar__sort select {
  padding: 4px 32px 4px 16px;
  border: 1px solid #e0e0e0;
  border-radius: 999px;
  background: transparent;
  color: inherit;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  cursor: pointer;
}
.section-promotion-grid .filter-bar__sort .facetwp-sort-select:hover,
.section-promotion-grid .filter-bar__sort select:hover {
  border-color: #E63946;
}
.section-promotion-grid .promo-grid__count {
  margin: 0 0 24px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #959a9e;
}
.section-promotion-grid .admin-notice {
  margin: 0 0 24px 0;
  padding: 16px;
  background: #F3F8ED;
  border: 1px dashed #E63946;
  border-radius: 16px;
  color: #E63946;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
}
.section-promotion-grid .promo-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 576px) {
  .section-promotion-grid .promo-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 992px) {
  .section-promotion-grid .promo-grid {
    grid-template-columns: repeat(3, 1fr);
    gap: 32px;
  }
}
@media (min-width: 1200px) {
  .section-promotion-grid .promo-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}
.section-promotion-grid .promo-grid__empty {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  color: #959a9e;
}
.section-promotion-grid .promo-grid__pager {
  margin-top: 48px;
  display: flex;
  justify-content: center;
}
.section-promotion-grid .promo-card__inner {
  display: flex;
  flex-direction: column;
  height: 100%;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-promotion-grid .promo-card a.promo-card__inner:hover {
  transform: translateY(-4px);
}
.section-promotion-grid .promo-card a.promo-card__inner:hover .promo-card__cta {
  background-color: #E63946;
  color: #FFFFFF;
}
.section-promotion-grid .promo-card__media {
  position: relative;
  aspect-ratio: 1/1;
  overflow: hidden;
  border-radius: 16px;
  background: #F3F8ED;
}
.section-promotion-grid .promo-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-promotion-grid .promo-card__days {
  position: absolute;
  left: 8px;
  bottom: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}
.section-promotion-grid .promo-card__day {
  padding: 2px 8px;
  border-radius: 999px;
  background: rgba(30, 35, 45, 0.78);
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  line-height: 1.6;
}
.section-promotion-grid .promo-card__featured {
  position: absolute;
  top: 8px;
  right: 8px;
  padding: 2px 8px;
  border-radius: 999px;
  background: #E63946;
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  font-weight: 500;
}
.section-promotion-grid .promo-card__body {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding-top: 16px;
}
.section-promotion-grid .promo-card__business {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: #E63946;
}
.section-promotion-grid .promo-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 1.2vw + 0.5rem, 22px);
  font-weight: 400;
  line-height: 1.2;
}
.section-promotion-grid .promo-card__location {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #959a9e;
}
.section-promotion-grid .promo-card__ends {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
}
.section-promotion-grid .promo-card__cta {
  margin-top: 8px;
  align-self: flex-start;
}
.section-promotion-grid--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-promotion-grid--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-promotion-grid--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-promotion-grid--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-promotion-grid--spacing-tight {
  margin-block: 32px;
}
.section-promotion-grid--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Report List (s-report-list)

    Replicates the live Webflow Reports page listing
    (https://www.lovethecentre.co.nz/reports -- `.report-wrapper`).

    LAYOUT (verified against the live Webflow breakpoints)
    - Mobile  (< $screen-sm / 768): single column. Heading stacks ABOVE the list.
    - Tablet  (>= $screen-sm):       two columns, heading narrower (.5fr | 1fr).
    - Desktop (>= $screen-md / 992):  two equal columns (1fr | 1fr).

    The heading column is a full-height grid cell and the heading inside it is
    `position: sticky` -- so on the two-column layouts the "Latest insights"
    heading stays pinned and travels DOWN as the (taller) report list scrolls
    past, releasing at the section's end. Do NOT add overflow to the section or
    .inner -- it would break the sticky behaviour.

    Each report row is `title | Download button` (the button bottom-aligned), with
    a divider rule beneath. Download buttons reuse `.btn .btn-secondary`.
*/
.section-report-list {
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Two-column split (heading | reports) ---------------------------- */
  /* ---- Sticky heading -------------------------------------------------- */
  /* ---- Reports list ---------------------------------------------------- */
  /* ---- Show/hide past reports toggle ----------------------------------- */
  /* ---- D-24 colour variants -------------------------------------------- */
  /* ---- D-22 spacing overrides ------------------------------------------ */
}
@media (min-width: 768px) {
  .section-report-list {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-report-list .inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: 48px;
}
@media (min-width: 768px) {
  .section-report-list .inner {
    grid-template-columns: minmax(0, 0.5fr) minmax(0, 1fr);
    column-gap: 48px;
  }
}
@media (min-width: 992px) {
  .section-report-list .inner {
    grid-template-columns: 1fr 1fr;
    column-gap: 64px;
  }
}
.section-report-list .heading-col {
  position: relative;
}
.section-report-list .heading {
  margin: 0;
  position: sticky;
  top: 80px;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(48px, 5vw, 5rem);
  line-height: 1.05;
}
.section-report-list .report-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 32px;
}
.section-report-list .report-list--archived {
  margin-top: 32px;
}
.section-report-list .report-list[hidden] {
  display: none;
}
.section-report-list .report-item {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: end;
  column-gap: 24px;
  row-gap: 16px;
  padding-block-end: 16px;
  border-bottom: 1px solid var(--report-divider, rgba(30, 35, 45, 0.18));
}
.section-report-list .report-item__meta {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
}
.section-report-list .report-item__date {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  color: var(--section-fg, #333333);
  opacity: 0.75;
}
.section-report-list .report-item__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  line-height: 1.5;
  font-size: clamp(18px, 0.5vw + 1rem, 24px);
  color: var(--section-fg, #333333);
}
.section-report-list .report-item__download {
  align-self: end;
  white-space: nowrap;
}
.section-report-list .report-toggle {
  margin-top: 32px;
  align-self: flex-start;
}
.section-report-list--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  --report-divider: rgba(30, 35, 45, 0.18);
}
.section-report-list--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  --report-divider: rgba(243, 248, 237, 0.25);
}
.section-report-list--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  --report-divider: rgba(243, 248, 237, 0.35);
}
.section-report-list--spacing-none {
  padding-block: 0;
}
.section-report-list--spacing-tight {
  padding-block: 32px;
}
.section-report-list--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Resource Grid (s-resource-grid)

    "Explore our helpful resources" (Figma node 304:3460): a full-width red display
    heading with an optional decorative badge top-right, above a responsive card
    grid. Each card = optional date / title / outlined "Download report" button.

    RESPONSIVE (mobile-first — the Figma only ships a desktop artboard, so the
    breakpoints follow the theme convention used by sibling sections):
    - < $screen-xs (576):  1 column (full-width cards, full-width button).
    - >= $screen-xs:       2 columns.
    - >= $screen-md (992): 3 columns.
    - >= $screen-lg (1200): 4 columns (Figma desktop).
    The badge shrinks/hides below $screen-md so it never overlaps the cards.

    Card text + button reuse $color-dark / .btn.btn-outline-primary — no new
    button styles.
*/
.section-resource-grid {
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Heading row (heading + corner badge) ---------------------------- */
  /* ---- Card grid ------------------------------------------------------- */
  /* ---- Colour variants (match sibling sections) ------------------------ */
  /* ---- Spacing overrides ----------------------------------------------- */
}
@media (min-width: 768px) {
  .section-resource-grid {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-resource-grid .resource-grid__head {
  position: relative;
  margin-bottom: clamp(32px, 4vw, 64px);
}
.section-resource-grid .heading {
  margin: 0;
  max-width: 14em;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(32px, 1.5rem + 2.5vw, 45px);
  line-height: 1.1;
}
.section-resource-grid .resource-grid__badge {
  display: none;
}
@media (min-width: 992px) {
  .section-resource-grid .resource-grid__badge {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    width: clamp(120px, 12vw, 156px);
    height: auto;
    transform: rotate(12deg);
    pointer-events: none;
  }
}
.section-resource-grid .resource-grid__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 48px clamp(32px, 4vw, 64px);
}
@media (min-width: 576px) {
  .section-resource-grid .resource-grid__list {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 992px) {
  .section-resource-grid .resource-grid__list {
    grid-template-columns: repeat(3, 1fr);
  }
}
@media (min-width: 1200px) {
  .section-resource-grid .resource-grid__list {
    grid-template-columns: repeat(4, 1fr);
  }
}
.section-resource-grid .resource-card {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
  min-width: 0;
}
.section-resource-grid .resource-card__date {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  color: var(--section-fg, #1E232D);
  opacity: 0.85;
}
.section-resource-grid .resource-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(24px, 1rem + 1vw, 26px);
  line-height: 1.215;
  color: var(--section-fg, #1E232D);
}
.section-resource-grid .resource-card__download {
  margin-top: auto;
  padding-top: 8px;
}
@media (max-width: 575px) {
  .section-resource-grid .resource-card__download {
    align-self: stretch;
    text-align: center;
  }
}
.section-resource-grid--light {
  --section-bg: #F3F8ED;
  --section-fg: #1E232D;
  --heading-fg: #E63946;
}
.section-resource-grid--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-resource-grid--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-resource-grid--spacing-none {
  padding-block: 0;
}
.section-resource-grid--spacing-tight {
  padding-block: 32px;
}
.section-resource-grid--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Share Logos (s-share-logos)

    "Want to share the love?" (Figma node 304:3520). A framed image collage on the
    LEFT (one large feature image + a 2-up row of smaller images) and a text column
    on the RIGHT (heading + body + labelled "Download file" buttons). Sibling of
    _stay-informed.scss, with the media on the left and a downloads row in place of
    the single CTA.

    RESPONSIVE (mobile-first — Figma ships only a desktop artboard):
    - < $screen-md (992): single column, the collage stacks ABOVE the copy and the
      download buttons go full-width.
    - >= $screen-md: two columns (media left | copy right), downloads sit inline.
*/
.section-share-logos {
  position: relative;
  overflow-x: clip;
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Two-column layout: media LEFT | copy RIGHT ---------------------- */
  /* ---- Image collage --------------------------------------------------- */
  /* ---- Copy column ----------------------------------------------------- */
  /* ---- Download buttons ------------------------------------------------ */
  /* ---- Colour variants (match sibling sections) ------------------------ */
  /* ---- Spacing overrides ----------------------------------------------- */
}
@media (min-width: 768px) {
  .section-share-logos {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-share-logos .layout {
  display: flex;
  flex-direction: column;
  gap: 48px;
}
@media (min-width: 992px) {
  .section-share-logos .layout {
    flex-direction: row;
    align-items: center;
    gap: clamp(48px, 5vw, 96px);
  }
}
.section-share-logos .share-logos__media {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
@media (min-width: 992px) {
  .section-share-logos .share-logos__media {
    flex: 1 1 58%;
  }
}
.section-share-logos .share-logos__feature {
  position: relative;
  margin: 0;
  aspect-ratio: 4/3;
  border: 2px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
}
.section-share-logos .share-logos__feature-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-share-logos .share-logos__tiles {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}
.section-share-logos .share-logos__tile {
  position: relative;
  margin: 0;
  aspect-ratio: 5/4;
  border: 2px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
}
.section-share-logos .share-logos__tile-img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-share-logos .share-logos__body {
  min-width: 0;
}
@media (min-width: 992px) {
  .section-share-logos .share-logos__body {
    flex: 1 1 42%;
    max-width: 34rem;
  }
}
.section-share-logos .heading {
  margin: 0 0 24px;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(32px, 1.5rem + 2.5vw, 45px);
  line-height: 1.1;
}
.section-share-logos .copy {
  max-width: 30rem;
  line-height: 1.5;
}
.section-share-logos .copy p {
  margin: 0 0 16px;
}
.section-share-logos .copy p:last-child {
  margin-bottom: 0;
}
.section-share-logos .copy a {
  color: #E63946;
  text-decoration: underline;
}
.section-share-logos .share-logos__downloads {
  list-style: none;
  margin: 32px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-share-logos .share-logos__downloads {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 48px;
  }
}
.section-share-logos .share-logos__download {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
}
.section-share-logos .share-logos__download-label {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(24px, 1rem + 1vw, 26px);
  line-height: 1.215;
  color: var(--section-fg, #1E232D);
}
.section-share-logos .share-logos__download-btn {
  align-self: stretch;
  text-align: center;
}
@media (min-width: 768px) {
  .section-share-logos .share-logos__download-btn {
    align-self: flex-start;
  }
}
.section-share-logos--light {
  --section-bg: #F3F8ED;
  --section-fg: #1E232D;
  --heading-fg: #E63946;
}
.section-share-logos--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-share-logos--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-share-logos--spacing-none {
  padding-block: 0;
}
.section-share-logos--spacing-tight {
  padding-block: 32px;
}
.section-share-logos--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Social Feed (s-social-feed)
    Visual parity: audit/screenshots/s-social-feed-{1440,768,375}.png
    RESEARCH Investigation 1: placeholder block -- styles keep the band readable
    regardless of what embed code the editor later pastes.
*/
.section-social-feed {
  color: var(--section-fg, #E63946);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-social-feed {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-social-feed .heading {
  margin: 0 0 32px 0;
  text-align: center;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-social-feed .feed-wrapper {
  max-width: 1200px;
  margin-inline: auto;
}
.section-social-feed .feed-wrapper > * {
  max-width: 100%;
}
.section-social-feed .feed-wrapper iframe {
  display: block;
  width: 100%;
  border: 0;
}
.section-social-feed .placeholder {
  padding: 48px;
  border: 1px dashed #e0e0e0;
  border-radius: 16px;
  text-align: center;
  color: #959a9e;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
}
.section-social-feed--light {
  --section-bg: #F3F8ED;
  --section-fg: #E63946;
}
.section-social-feed--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
}
.section-social-feed--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
}
.section-social-feed--spacing-none {
  margin-block: 0;
}
.section-social-feed--spacing-tight {
  margin-block: 32px;
}
.section-social-feed--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Star Grid (s-star-grid)

    Matariki "seven stars" as a horizontal carousel: a scroll-snap track of
    cards with gold prev/next arrows top-right (heading on the left). ~1.2 cards
    on mobile, 2 on tablet, 4 on desktop, so the remaining stars overflow and
    scroll. Swipe/scroll works without JS; initStarSliders() wires the arrows.

    Colours come from the page theme via --section-fg / --heading-fg, wired in
    css/_page_matariki.scss. On Matariki text is cream, heading + arrows are
    gold, and the card image carries a cream frame (Figma).
*/
.section-star-grid {
  color: var(--section-fg, #333333);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-star-grid {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-star-grid .star-grid__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 32px;
}
.section-star-grid .heading {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 4vw + 0.5rem, 75px);
  font-weight: 400;
  line-height: 1.2;
}
.section-star-grid .star-grid__nav {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
}
.section-star-grid .star-grid__arrow {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  padding: 0;
  border-radius: 50%;
  background-color: transparent;
  border: 1px solid var(--theme-accent, #E63946);
  color: var(--theme-accent, #E63946);
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-star-grid .star-grid__arrow:hover:not(:disabled) {
  background-color: var(--theme-accent, #E63946);
  color: var(--theme-bg, #FFFFFF);
}
.section-star-grid .star-grid__arrow:disabled {
  opacity: 0.35;
  cursor: default;
}
.section-star-grid .star-grid__arrow svg {
  width: 20px;
  height: 20px;
}
.section-star-grid .intro {
  max-width: 680px;
  margin-bottom: 32px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-star-grid .intro p {
  margin: 0 0 16px;
}
.section-star-grid .intro p:last-child {
  margin-bottom: 0;
}
.section-star-grid .star-grid__track {
  display: flex;
  gap: 32px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  padding-bottom: 4px;
}
.section-star-grid .star-grid__track::-webkit-scrollbar {
  display: none;
}
.section-star-grid .card {
  scroll-snap-align: start;
  flex: 0 0 auto;
  width: 78%;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
@media (min-width: 768px) {
  .section-star-grid .card {
    width: calc((100% - 32px) / 2);
  }
}
@media (min-width: 992px) {
  .section-star-grid .card {
    width: calc((100% - 3 * 32px) / 4);
  }
}
.section-star-grid .card__name {
  margin: 0 0 8px;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 1.5vw + 1.25rem, 36px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--section-fg, #333333);
}
.section-star-grid .card__subtitle {
  margin: 8px 0 0;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.2;
  color: var(--section-fg, #333333);
}
.section-star-grid .card__media {
  aspect-ratio: 1/1;
  overflow: hidden;
  border-radius: 24px;
  border: 2px solid var(--theme-accent, #E63946);
}
.section-star-grid .card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-star-grid .card__desc {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-star-grid .card__desc p {
  margin: 0 0 8px;
}
.section-star-grid .card__desc p:last-child {
  margin-bottom: 0;
}
.section-star-grid .card__cta {
  align-self: flex-start;
  margin-top: 4px;
}
.section-star-grid--spacing-none {
  margin-block: 0;
}
.section-star-grid--spacing-tight {
  margin-block: 32px;
}
.section-star-grid--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Stay Informed (s-stay-informed)

    Ports the live /business "Stay informed, stay ahead" block: a text column on
    the LEFT (heading + body + outlined "View reports" button) and an image column
    on the RIGHT (one large framed feature image + a 2-up row of square tiles).
    Desktop (>=$screen-lg) is two columns; below that it stacks and the tiles stay
    2-up. Structurally a sibling of _about-association.scss, minus the badge/credits.
*/
.section-stay-informed {
  position: relative;
  overflow-x: clip;
  color: var(--section-fg, #333333);
  background: var(--section-bg, #F3F8ED);
  padding-block: clamp(48px, 6vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  /* ---- Two-column layout. Live /business stacks at <=991px and splits into
     two columns from 992px up (Webflow desktop breakpoint), so the trigger is
     $screen-md (992px) -- NOT $screen-lg. ----------------------------------- */
  /* ---- Text column ----------------------------------------------------- */
  /* ---- Image column: large feature + 2-up square tiles ----------------- */
  /* ---- D-24 colour variants -------------------------------------------- */
  /* ---- D-22 spacing overrides ------------------------------------------ */
}
@media (min-width: 768px) {
  .section-stay-informed {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.section-stay-informed .layout {
  display: flex;
  flex-direction: column;
  gap: 48px;
}
@media (min-width: 992px) {
  .section-stay-informed .layout {
    flex-direction: row;
    align-items: center;
    gap: clamp(48px, 5vw, 96px);
  }
}
.section-stay-informed .body {
  min-width: 0;
}
@media (min-width: 992px) {
  .section-stay-informed .body {
    flex: 1 1 46%;
    max-width: 34rem;
  }
}
.section-stay-informed .heading {
  margin: 0 0 24px;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  font-size: clamp(40px, 2rem + 4.2vw, 92px);
  line-height: 1.05;
}
.section-stay-informed .copy {
  max-width: 26rem;
  line-height: 1.5;
}
.section-stay-informed .copy p {
  margin: 0 0 16px;
}
.section-stay-informed .copy p:last-child {
  margin-bottom: 0;
}
.section-stay-informed .copy a {
  color: #E63946;
  text-decoration: underline;
}
.section-stay-informed .cta {
  margin-top: 32px;
}
.section-stay-informed .media {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
@media (min-width: 992px) {
  .section-stay-informed .media {
    flex: 1 1 0;
  }
}
.section-stay-informed .feature {
  position: relative;
  margin: 0;
  aspect-ratio: 5/3;
  border: 2px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
}
.section-stay-informed .feature__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-stay-informed .tiles {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}
.section-stay-informed .tile {
  position: relative;
  margin: 0;
  aspect-ratio: 1/1;
  border: 2px solid #E63946;
  border-radius: 24px;
  overflow: hidden;
}
.section-stay-informed .tile__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-stay-informed--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
}
.section-stay-informed--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-stay-informed--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
}
.section-stay-informed--spacing-none {
  padding-block: 0;
}
.section-stay-informed--spacing-tight {
  padding-block: 32px;
}
.section-stay-informed--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Stats (s-stats)

    Single-page block (/about only). Grid of large-number statistics with descriptive
    labels underneath. Desktop 3-4 columns, tablet 2, mobile 2 (single column stack
    only when a stat label wraps — handled by intrinsic min-content width).

    Visual parity: audit/screenshots/s-stats-{1440,768,375}.png

    Nest-not-BEM section root; .stat uses component-level BEM __ per css/CLAUDE.md
    (same convention as s-card-grid's .card and s-story-carousel's .story-card).
*/
.section-stats {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-stats {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-stats .heading {
  margin: 0 0 48px 0;
  text-align: center;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-stats .grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 32px;
}
@media (min-width: 768px) {
  .section-stats .grid {
    grid-template-columns: repeat(3, 1fr);
    gap: 48px;
  }
}
@media (min-width: 1200px) {
  .section-stats .grid {
    grid-template-columns: repeat(4, 1fr);
    gap: 48px;
  }
}
.section-stats .stat {
  display: flex;
  flex-direction: column;
  gap: 4px;
  text-align: center;
}
.section-stats .stat__number {
  font-family: new-spirit, sans-serif;
  font-size: clamp(48px, 6vw + 0.5rem, 96px);
  font-weight: 400;
  line-height: 1;
  color: var(--heading-fg, #E63946);
}
.section-stats .stat__label {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  color: #959a9e;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.section-stats--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  margin-block: 0;
  padding-block: clamp(48px, 6vw, 96px);
}
.section-stats--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 6vw, 96px);
}
.section-stats--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  margin-block: 0;
  padding-block: clamp(48px, 6vw, 96px);
}
.section-stats--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-stats--spacing-tight {
  margin-block: 32px;
}
.section-stats--spacing-tight.section-stats--light, .section-stats--spacing-tight.section-stats--dark, .section-stats--spacing-tight.section-stats--brand {
  margin-block: 0;
  padding-block: 32px;
}
.section-stats--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}
.section-stats--spacing-loose.section-stats--light, .section-stats--spacing-loose.section-stats--dark, .section-stats--spacing-loose.section-stats--brand {
  margin-block: 0;
  padding-block: clamp(96px, 10vw, 160px);
}

/*
    Stories archive (archive-story.php)

    Mirrors the events archive shell: a .section-page-hero band, a sub-tag filter
    pill row, then a responsive story-card grid (3 / 2 / 1 columns) and a pager.
    The .section-page-hero visuals come from _page-hero.scss; this file owns the
    archive wrapper, the grid, the sub-tag pill styling, and the pager.
*/
.section-story-archive__hero {
  max-width: 1280px;
  margin-inline: auto;
  margin-bottom: clamp(32px, 4vw, 64px);
}
.section-story-archive__inner {
  max-width: 1280px;
  margin-inline: auto;
  padding-inline: clamp(16px, 4vw, 32px);
  padding-bottom: clamp(48px, 6vw, 96px);
}
@media (min-width: 768px) {
  .section-story-archive__inner {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-story-archive .filter-bar {
  margin-bottom: clamp(24px, 3vw, 48px);
}
.section-story-archive .filter-bar .facetwp-facet {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0;
}
.section-story-archive .filter-bar .facetwp-checkbox {
  display: inline-flex;
  align-items: center;
  padding: 4px 24px;
  border: 1px solid rgba(230, 57, 70, 0.4);
  border-radius: 999px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.4;
  color: #333333;
  white-space: nowrap;
  cursor: pointer;
  background: transparent;
  background-image: none;
  transition: 0.25s ease-in-out;
}
.section-story-archive .filter-bar .facetwp-checkbox:hover {
  border-color: #E63946;
  background: rgba(230, 57, 70, 0.06);
}
.section-story-archive .filter-bar .facetwp-checkbox.checked {
  background: #E63946;
  color: #F3F8ED;
  border-color: #E63946;
}
.section-story-archive .filter-bar .facetwp-counter {
  display: none;
}
.section-story-archive .filter-bar .facetwp-toggle {
  display: inline-flex;
  align-items: center;
  align-self: center;
  padding: 4px 8px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: #E63946;
  text-decoration: underline;
  cursor: pointer;
  white-space: nowrap;
}
.section-story-archive .filter-bar .facetwp-toggle:hover {
  color: #bf2f3b;
}
.section-story-archive .filter-bar .facetwp-toggle.facetwp-hidden {
  display: none;
}
.section-story-archive .filter-bar .facetwp-overflow {
  display: contents;
}
.section-story-archive .filter-bar .facetwp-overflow.facetwp-hidden {
  display: none;
}
.section-story-archive .story-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 24px;
}
@media (min-width: 768px) {
  .section-story-archive .story-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 32px;
  }
}
@media (min-width: 992px) {
  .section-story-archive .story-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}
@media (min-width: 768px) {
  .section-story-archive .story-grid > .story-card-archive:first-child {
    grid-column: span 2;
    grid-row: span 2;
  }
  .section-story-archive .story-grid > .story-card-archive:first-child .story-card-archive__link {
    height: 100%;
  }
  .section-story-archive .story-grid > .story-card-archive:first-child .story-card-archive__media {
    aspect-ratio: auto;
    flex: 1 1 auto;
    min-height: 280px;
  }
  .section-story-archive .story-grid > .story-card-archive:first-child .story-card-archive__title {
    font-size: clamp(24px, 2vw + 0.5rem, 34px);
  }
}
.section-story-archive .story-grid__empty {
  grid-column: 1/-1;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  color: #959a9e;
}
.section-story-archive .story-grid__empty a {
  color: #E63946;
}
.section-story-archive .story-pager {
  margin-top: clamp(48px, 5vw, 96px);
  display: flex;
  justify-content: center;
}
.section-story-archive .story-pager .facetwp-pager, .section-story-archive .story-pager.story-pager--wp {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 4px;
}
.section-story-archive .story-pager .facetwp-page,
.section-story-archive .story-pager .page-numbers {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  height: 44px;
  padding: 0 8px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  color: #333333;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  text-decoration: none;
  cursor: pointer;
  transition: 0.25s ease-in-out;
}
.section-story-archive .story-pager .facetwp-page:hover,
.section-story-archive .story-pager .page-numbers:hover {
  background: rgba(230, 57, 70, 0.08);
  color: #E63946;
}
.section-story-archive .story-pager .facetwp-page.active,
.section-story-archive .story-pager .page-numbers.current {
  background: #E63946;
  color: #F3F8ED;
  cursor: default;
}
.section-story-archive .story-pager .facetwp-page.active:hover,
.section-story-archive .story-pager .page-numbers.current:hover {
  background: #E63946;
  color: #F3F8ED;
}
.section-story-archive .story-pager .facetwp-page.first,
.section-story-archive .story-pager .facetwp-page.last,
.section-story-archive .story-pager .page-numbers.prev,
.section-story-archive .story-pager .page-numbers.next {
  color: #E63946;
  font-size: 18px;
}
.section-story-archive .story-pager .facetwp-page.dots,
.section-story-archive .story-pager .page-numbers.dots {
  min-width: auto;
  background: transparent;
  color: #959a9e;
  cursor: default;
}
.section-story-archive .story-pager .facetwp-page.dots:hover,
.section-story-archive .story-pager .page-numbers.dots:hover {
  background: transparent;
  color: #959a9e;
}

/*
    Section: Story Carousel (s-story-carousel)
    Visual parity: audit/screenshots/s-story-carousel-{1440,768,375}.png

    Pattern-twin of _event-carousel.scss (03-06). Root selector is nest-not-BEM
    (per css/CLAUDE.md). The inner .story-card is a reusable component and uses
    double-underscore children -- explicitly allowed for components.

    Pre-init state: .story-carousel__track uses display: flex + horizontal
    scroll-snap so the block still renders usefully before tiny-slider
    initialises (no-JS fallback and the brief window before Phase 5 JS-06
    enqueues tiny-slider).

    Post-init: tiny-slider 2.9.x wraps .js-slider in .tns-outer / .tns-inner
    and applies its own transforms -- we avoid setting transforms on the track.
    Carousel controls (arrows, dots) will be styled in Phase 5 JS-06 alongside
    the tiny-slider vendor enqueue.

    Colour variants (D-24) set --section-bg / --section-fg via modifier
    classes. Spacing modifiers (D-22) follow the same margin-block /
    padding-block swap used by _event-carousel.scss so transparent vs
    coloured variants render correctly.
*/
.section-story-carousel {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-story-carousel {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-story-carousel .heading {
  margin: 0 0 32px 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-story-carousel .story-carousel__track {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
}
.section-story-carousel .story-carousel__track > .story-card {
  flex: 0 0 clamp(260px, 80vw, 340px);
  scroll-snap-align: start;
}
.section-story-carousel--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-story-carousel--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-story-carousel--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-story-carousel--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-story-carousel--spacing-tight {
  margin-block: 32px;
}
.section-story-carousel--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Single Story template (single-story.php)

    Editorial article layout (Figma "Article page"): title + byline, a full-width
    hero image, then the article body in a readable prose column, a source link,
    sub-tag chips, a "More Articles" 4-card row, and a back link.

    Unlike the business single (two columns), the story is a single centred column
    — the body measure is capped for readability while the hero spans the wider
    content width. Reuses the related-grid + back-link patterns from the event
    single for parity. Mobile-first.
*/
.section-story-single {
  max-width: 1169px;
  margin-inline: auto;
  padding-inline: 16px;
  padding-block: clamp(32px, 4vw, 64px);
}
@media (min-width: 768px) {
  .section-story-single {
    padding-inline: 32px;
  }
}
.section-story-single .story-single__header {
  margin-bottom: clamp(24px, 3vw, 48px);
  max-width: 46rem;
}
.section-story-single .story-single__title {
  margin: 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 5vw + 0.5rem, 64px);
  font-weight: 400;
  line-height: 1.2;
  text-align: left;
  overflow-wrap: break-word;
}
.section-story-single .story-single__byline {
  margin: 16px 0 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  color: #959a9e;
  line-height: 1.5;
}
.section-story-single .story-single__media {
  overflow: hidden;
  border-radius: 32px;
  border: 2px solid #E63946;
  background-color: #F3F8ED;
  aspect-ratio: 16/9;
  margin-bottom: clamp(32px, 4vw, 48px);
}
.section-story-single .story-single__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-story-single .story-single__body {
  max-width: 46rem;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  line-height: 1.8;
  color: #333333;
}
.section-story-single .story-single__body p {
  margin-block: 0 16px;
}
.section-story-single .story-single__body h2,
.section-story-single .story-single__body h3,
.section-story-single .story-single__body h4 {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  color: #1E232D;
  line-height: 1.2;
  margin-block: 32px 8px;
}
.section-story-single .story-single__body h2 {
  font-size: clamp(28px, 2vw + 1rem, 36px);
}
.section-story-single .story-single__body h3 {
  font-size: clamp(24px, 1.5vw + 1rem, 28px);
}
.section-story-single .story-single__body a {
  color: #E63946;
  text-decoration: underline;
}
.section-story-single .story-single__body ul,
.section-story-single .story-single__body ol {
  margin-block: 0 16px;
  padding-left: 24px;
}
.section-story-single .story-single__body li {
  margin-block: 4px;
}
.section-story-single .story-single__body blockquote {
  margin: 24px 0;
  padding-left: 24px;
  border-left: 3px solid #E63946;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  line-height: 1.5;
  color: #1E232D;
}
.section-story-single .story-single__body img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 16px;
  margin-block: 24px;
}
.section-story-single .story-single__body figure {
  margin: 24px 0;
}
.section-story-single .story-single__body figcaption {
  margin-top: 4px;
  font-size: 14px;
  color: #959a9e;
}
.section-story-single .story-single__source {
  max-width: 46rem;
  margin-block: clamp(24px, 3vw, 32px);
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  color: #333333;
}
.section-story-single .story-single__source a {
  color: #E63946;
  text-decoration: underline;
}
.section-story-single .story-subtags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: clamp(48px, 6vw, 96px);
}
.section-story-single .story-subtags__chip {
  padding: 4px 16px;
  border-radius: 999px;
  border: 1px solid #e0e0e0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #333333;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-story-single .story-subtags__chip:hover {
  background: #E63946;
  border-color: #E63946;
  color: #FFFFFF;
}
.section-story-single .story-related {
  margin-bottom: clamp(48px, 6vw, 96px);
}
.section-story-single .story-related__heading {
  margin: 0 0 32px 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 2vw + 1rem, 32px);
  font-weight: 400;
  line-height: 1.2;
}
.section-story-single .story-related__grid {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-story-single .story-related__grid {
    gap: 32px;
  }
}
.section-story-single .story-related__grid > .story-card {
  flex: 1 1 100%;
}
@media (min-width: 768px) {
  .section-story-single .story-related__grid > .story-card {
    flex: 1 1 calc((100% - 32px) / 2);
    max-width: calc((100% - 32px) / 2);
  }
}
@media (min-width: 992px) {
  .section-story-single .story-related__grid > .story-card {
    flex: 1 1 calc((100% - 3 * 32px) / 4);
    max-width: calc((100% - 3 * 32px) / 4);
  }
}
.section-story-single .story-related__cta {
  display: flex;
  justify-content: flex-start;
  margin-top: clamp(32px, 4vw, 48px);
}
.section-story-single .story-related__cta .btn {
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
}
.section-story-single .story-back__link {
  display: inline-block;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  font-weight: 500;
  color: #E63946;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-story-single .story-back__link:hover {
  color: #bf2f3b;
}

/*
    Section: Team Grid (s-team-grid) -- the executive-committee grid.

    Each card is a rectangular portrait photo with name / organisation / role
    stacked beneath, matching the live Webflow committee layout. (The earlier
    circular-avatar treatment was replaced -- it did not match the live site.)
    The large staff/leadership cards with bios live in _team-leadership.

    Root selector is nest-not-BEM (per css/CLAUDE.md). The inner .team-member is
    a reusable BEM component with __media / __img / __body / __name / __org /
    __role children -- BEM-__ on components is explicitly allowed.

    Colour variants set --section-bg / --section-fg / --heading-fg via modifier
    classes. Spacing modifiers swap margin-block for padding-block on coloured
    variants so the band reaches viewport edges.

    Responsive column progression:
        Mobile  (< 768px):  2 columns
        Tablet  (>= 768px): 3 columns
        Desktop (>= 1200px): 4 columns
*/
.section-team-grid {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-team-grid {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-team-grid .heading {
  margin: 0 0 32px 0;
  text-align: center;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-team-grid .heading:has(+ .intro) {
  margin-bottom: 16px;
}
.section-team-grid .intro {
  max-width: 70ch;
  margin: 0 auto 48px;
  text-align: center;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  line-height: 1.5;
  color: var(--section-fg, #333333);
}
.section-team-grid .intro p {
  margin: 0 0 8px;
}
.section-team-grid .intro p:last-child {
  margin-bottom: 0;
}
.section-team-grid .grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: clamp(24px, 3vw, 48px);
}
@media (min-width: 768px) {
  .section-team-grid .grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
.section-team-grid .team-member {
  display: flex;
  flex-direction: column;
  gap: 16px;
  text-align: left;
}
.section-team-grid .team-member__media {
  width: 100%;
  aspect-ratio: 1/1;
  overflow: hidden;
  border-radius: 16px;
  border: 1px solid #e0e0e0;
  background: #F3F8ED;
}
.section-team-grid .team-member__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-team-grid .team-member__body {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.section-team-grid .team-member__name {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 1.4vw + 0.5rem, 22px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #333333);
}
.section-team-grid .team-member__org {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: var(--section-fg, #333333);
}
.section-team-grid .team-member__role {
  margin: 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  color: #959a9e;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.section-team-grid--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-team-grid--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-team-grid--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-team-grid--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-team-grid--spacing-tight {
  margin-block: 32px;
}
.section-team-grid--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Team Leadership (s-team-leadership)

    Large staff/leadership cards with bios -- the "Meet our Love the Centre team"
    block on /team. Sibling to _team-grid (the compact committee grid); kept
    separate because the card here is a big portrait + full bio, two-up on
    desktop, rather than a dense avatar tile.

    Root selector is nest-not-BEM (per css/CLAUDE.md); the inner .team-lead is a
    BEM component with __media / __img / __body / __name / __role / __bio.

    Colour + spacing modifiers mirror _team-grid so the block can sit in a
    coloured band when an editor needs it.

    Responsive layout:
        Mobile  (< 768px):  1 column (image top, text below)
        Desktop (>= 768px): 2 columns
*/
.section-team-leadership {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-team-leadership {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-team-leadership .heading {
  margin: 0 0 16px 0;
  text-align: center;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-team-leadership .intro {
  max-width: 60ch;
  margin: 0 auto 48px;
  text-align: center;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 18px;
  line-height: 1.5;
  color: var(--section-fg, #333333);
}
.section-team-leadership .intro p {
  margin: 0 0 8px;
}
.section-team-leadership .intro p:last-child {
  margin-bottom: 0;
}
.section-team-leadership .grid {
  display: flex;
  flex-direction: column;
  gap: clamp(48px, 5vw, 96px);
}
.section-team-leadership .team-lead {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
@media (min-width: 768px) {
  .section-team-leadership .team-lead {
    flex-direction: row;
    align-items: center;
    gap: clamp(32px, 4vw, 96px);
  }
}
.section-team-leadership .team-lead__media {
  width: 100%;
  aspect-ratio: 4/3;
  overflow: hidden;
  border-radius: 16px;
  background: #F3F8ED;
}
@media (min-width: 768px) {
  .section-team-leadership .team-lead__media {
    flex: 0 0 42%;
    max-width: 42%;
  }
}
.section-team-leadership .team-lead__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
@media (min-width: 768px) {
  .section-team-leadership .team-lead__body {
    flex: 1 1 auto;
  }
}
.section-team-leadership .team-lead__name {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 2.5vw + 0.5rem, 44px);
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
}
.section-team-leadership .team-lead__role {
  margin: 8px 0 0 0;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 500;
  color: #959a9e;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.section-team-leadership .team-lead__bio {
  margin-top: 16px;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: var(--section-fg, #333333);
}
.section-team-leadership .team-lead__bio p {
  margin: 0 0 8px;
}
.section-team-leadership .team-lead__bio p:last-child {
  margin-bottom: 0;
}
.section-team-leadership--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-team-leadership--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-team-leadership--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-team-leadership--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-team-leadership--spacing-tight {
  margin-block: 32px;
}
.section-team-leadership--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Text and Image (s-text-and-image)

    Visual parity: audit/screenshots/s-text-and-image-{1440,768,375}.png
    Used on 8 pages per audit/blocks/s-text-and-image.md.

    Layout:
        - Mobile / tablet: single column stacked (image on top, text below).
        - Desktop ($screen-lg+): two equal columns side-by-side.

    D-23 image_position variant:
        - image-right (default): media column renders first in the DOM and appears
          on the LEFT at mobile (first in stack order). At desktop the default
          grid flow places media left and body right -- but "Image Right" means
          the image should sit on the right. So the DEFAULT modifier flips the
          grid order; the "image-left" modifier reverts to natural grid flow.
        - image-left: media on the left, body on the right at desktop.

    Nest-not-BEM (css/CLAUDE.md): children are .media / .body / .heading / .copy /
    .cta nested inside .section-text-and-image. The .media__img BEM child is
    allowed because .media acts as a small component (shared convention with
    .card__img in card-grid and .media__img in hero).
*/
.section-text-and-image {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  align-items: center;
}
@media (min-width: 768px) {
  .section-text-and-image {
    padding-inline: clamp(32px, 6vw, 64px);
    gap: 48px;
  }
}
@media (min-width: 1200px) {
  .section-text-and-image {
    grid-template-columns: 1fr 1fr;
    gap: 64px;
  }
}
.section-text-and-image .media {
  position: relative;
  aspect-ratio: 4/3;
  overflow: hidden;
  border-radius: 16px;
}
.section-text-and-image .media__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.section-text-and-image .media__credit {
  position: absolute;
  bottom: 8px;
  left: 8px;
  margin: 0;
  color: #FFFFFF;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 12px;
  line-height: 1.2;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}
.section-text-and-image .body {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.section-text-and-image .heading {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
  font-weight: 400;
  line-height: 1.2;
}
.section-text-and-image .copy {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-text-and-image .copy p {
  margin: 0 0 16px 0;
}
.section-text-and-image .copy p:last-child {
  margin-bottom: 0;
}
.section-text-and-image .copy a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 4px;
  transition: 0.25s ease-in-out;
}
.section-text-and-image .copy a:hover {
  text-decoration-thickness: 2px;
}
.section-text-and-image .cta {
  align-self: flex-start;
}
@media (min-width: 1200px) {
  .section-text-and-image--image-right .media {
    order: 2;
  }
  .section-text-and-image--image-right .body {
    order: 1;
  }
}
@media (min-width: 1200px) {
  .section-text-and-image--image-left .media {
    order: 1;
  }
  .section-text-and-image--image-left .body {
    order: 2;
  }
}
.section-text-and-image--image-bordered .media {
  border: 2px solid #E63946;
}
.section-text-and-image--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-text-and-image--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-text-and-image--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-text-and-image--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-text-and-image--spacing-tight {
  margin-block: 32px;
}
.section-text-and-image--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Text Block (s-text-block)

    Visual parity: audit/screenshots/s-text-block-{1440,768,375}.png
    Used on 3 pages per audit/blocks/s-text-block.md
    (/about, /awards, /matariki-stars/matariki).

    Layout:
        - Centred or left-aligned readable column (~680px / ~75ch at desktop),
          full-width on mobile. Alignment variant is an ACF select (D-23).
        - Optional heading + required WYSIWYG body. Sibling of s-rich-text
          (03-11) which is body-only and has no alignment variant.

    Nest-not-BEM (css/CLAUDE.md): .inner / .heading / .body are nested inside
    .section-text-block. The .body WYSIWYG child pattern mirrors the 03-11
    .copy shape (p margin reset + :last-child override + a underline-offset)
    because this block only needs paragraphs and links — richer WYSIWYG tag
    coverage lives in 03-11's .copy wrapper.

    No hex literals — colours via $color-* variables so the
    scripts/validate-phase-03.sh hex-literal check stays at zero.
*/
.section-text-block {
  color: var(--section-fg, #333333);
  background: var(--section-bg, transparent);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 768px) {
  .section-text-block {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-text-block .inner {
  max-width: 680px;
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.section-text-block .heading {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
  font-size: clamp(28px, 3.5vw + 0.5rem, 54px);
}
.section-text-block .body {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}
.section-text-block .body h2,
.section-text-block .body h3,
.section-text-block .body h4 {
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  line-height: 1.2;
  color: var(--heading-fg, #E63946);
  margin: 32px 0 16px 0;
}
.section-text-block .body h2:first-child,
.section-text-block .body h3:first-child,
.section-text-block .body h4:first-child {
  margin-top: 0;
}
.section-text-block .body h2 {
  font-size: clamp(24px, 2.5vw + 0.5rem, 36px);
}
.section-text-block .body h3 {
  font-size: clamp(20px, 2vw + 0.5rem, 28px);
}
.section-text-block .body h4 {
  font-size: clamp(18px, 1.5vw + 0.5rem, 22px);
}
.section-text-block .body p {
  margin: 0 0 16px 0;
}
.section-text-block .body p:last-child {
  margin-bottom: 0;
}
.section-text-block .body ul,
.section-text-block .body ol {
  margin: 0 0 16px 24px;
  padding: 0;
}
.section-text-block .body ul li,
.section-text-block .body ol li {
  margin-bottom: 4px;
}
.section-text-block .body a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 4px;
  transition: 0.25s ease-in-out;
}
.section-text-block .body a:hover {
  text-decoration-thickness: 2px;
}
.section-text-block .body img {
  max-width: 100%;
  height: auto;
  border-radius: 4px;
  margin: 16px 0;
}
.section-text-block .body blockquote {
  margin: 24px 0;
  padding-left: 16px;
  border-left: 3px solid #E63946;
  font-style: italic;
}
.section-text-block--centered .inner {
  text-align: center;
}
.section-text-block--left-aligned .inner {
  text-align: left;
}
.section-text-block--light {
  --section-bg: #F3F8ED;
  --section-fg: #333333;
  --heading-fg: #E63946;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-text-block--dark {
  --section-bg: #1E232D;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-text-block--brand {
  --section-bg: #E63946;
  --section-fg: #F3F8ED;
  --heading-fg: #F3F8ED;
  padding-block: clamp(48px, 6vw, 96px);
  margin-block: 0;
}
.section-text-block--spacing-none {
  margin-block: 0;
  padding-block: 0;
}
.section-text-block--spacing-tight {
  margin-block: 32px;
}
.section-text-block--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: Text + Media (s-text-media)

    Two equal columns at desktop (stacked on mobile, media first): a large
    display heading + body on one side, a video embed or a stack of gold-framed
    images on the other. --media-left / --media-right flip the desktop order.

    Colours come from the page theme via --section-fg / --heading-fg (wired in
    css/_page_matariki.scss). The media frame uses --theme-accent (gold on
    Matariki).
*/
.section-text-media {
  color: var(--section-fg, #333333);
  margin-block: clamp(48px, 5vw, 96px);
  padding-inline: clamp(16px, 4vw, 32px);
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  align-items: center;
}
@media (min-width: 768px) {
  .section-text-media {
    padding-inline: clamp(32px, 6vw, 64px);
    gap: 48px;
  }
}
@media (min-width: 1200px) {
  .section-text-media {
    grid-template-columns: 1fr 1fr;
    gap: clamp(48px, 5vw, 96px);
  }
}
.section-text-media .media {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.section-text-media .media__video {
  border: 1px solid var(--theme-accent, #E63946);
  border-radius: 24px;
  overflow: hidden;
  line-height: 0;
}
.section-text-media .media__video iframe,
.section-text-media .media__video video {
  display: block;
  width: 100%;
  aspect-ratio: 4/3;
  height: auto;
  border: 0;
}
.section-text-media .media__item {
  border: 2px solid var(--theme-accent, #E63946);
  border-radius: 24px;
  overflow: hidden;
}
.section-text-media .media__img {
  display: block;
  width: 100%;
  height: auto;
}
.section-text-media .body {
  display: flex;
  flex-direction: column;
  gap: 32px;
}
.section-text-media .heading {
  margin: 0;
  color: var(--heading-fg, #E63946);
  font-family: new-spirit, sans-serif;
  font-size: clamp(40px, 4vw + 0.5rem, 78px);
  font-weight: 400;
  line-height: 1.05;
}
.section-text-media h1.heading {
  font-size: clamp(54px, 3.54vw + 37px, 90px);
  line-height: 1;
}
.section-text-media .copy {
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  max-width: 36em;
}
@media (min-width: 992px) {
  .section-text-media .copy {
    font-size: 20px;
    line-height: 32px;
  }
}
.section-text-media .copy p {
  margin: 0 0 16px;
}
.section-text-media .copy p:last-child {
  margin-bottom: 0;
}
.section-text-media .copy a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 4px;
}
.section-text-media--media-right .media {
  order: 2;
}
.section-text-media--media-right .body {
  order: 1;
}
.section-text-media--media-left .media {
  order: 1;
}
.section-text-media--media-left .body {
  order: 2;
}
.section-text-media--spacing-none {
  margin-block: 0;
}
.section-text-media--spacing-tight {
  margin-block: 32px;
}
.section-text-media--spacing-loose {
  margin-block: clamp(96px, 10vw, 160px);
}

/*
    Section: What's On (s-whats-on)

    The home page's featured-events showcase — visual parity with the live
    "What's on in the city centre." block at https://www.lovethecentre.co.nz/.
    One large featured card (first child, spanning 2x2 cells) with the rest in a
    2x2 grid beside it.

    The grid is the SAME featured layout as the events archive
    (_event-archive.scss .event-grid — measured against the live page); the card
    visuals mirror _event-card.scss (16px rounded media, 2px red frame, hover
    lift). This block's card differs from the shared event-card: it leads with the
    description and shows no date/status pill, so it has its own partial
    (template-parts/whats-on-card.php) and its own card styles below.

    Mobile-first.
*/
.section-whats-on {
  color: #333333;
  padding-inline: clamp(16px, 4vw, 32px);
  padding-block: clamp(48px, 5vw, 96px);
  /* ----------------------------------------------------------------------
     Heading block — display font in brand red, with the te reo line beneath.
     The heading tag inherits its fluid size from _general.scss (h2/h3); we
     only re-colour it here.
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Grid — identical featured layout to the events archive (_event-archive
     .event-grid, measured against the live page):
         - mobile (390): 2 cols, 24px gap
         - tablet (768): 3 cols, 32px gap
         - desktop (992+): 4 cols, 32px gap
     The FIRST card is FEATURED — spans 2x2 cells at every breakpoint.
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Card — title above image, City Guide badge on the featured card, image,
     then description + events icon. No date/status (parity with the live home
     card). Visual tokens shared with _event-card.scss.
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Spacing modifiers (D-22) — same scale as the other event sections.
     ---------------------------------------------------------------------- */
  /* ----------------------------------------------------------------------
     Background colour variants (D-24) — drive --section-bg; flip text/heading
     to cream on the dark/brand surfaces.
     ---------------------------------------------------------------------- */
}
@media (min-width: 768px) {
  .section-whats-on {
    padding-inline: clamp(32px, 6vw, 64px);
  }
}
.section-whats-on .whats-on__head {
  margin-bottom: clamp(32px, 4vw, 64px);
}
.section-whats-on .whats-on__heading {
  margin: 0;
  color: #E63946;
}
.section-whats-on .whats-on__subheading {
  margin: 8px 0 0;
  color: #E63946;
  font-family: new-spirit, sans-serif;
  font-weight: 400;
  line-height: 1.2;
  font-size: clamp(20px, 1.5vw + 12px, 32px);
}
.section-whats-on .whats-on__grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 24px;
}
@media (min-width: 768px) {
  .section-whats-on .whats-on__grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 32px;
  }
}
@media (min-width: 992px) {
  .section-whats-on .whats-on__grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}
.section-whats-on .whats-on__grid > .whats-on-card:first-child {
  grid-column: span 2;
  grid-row: span 2;
}
.section-whats-on .whats-on__grid > .whats-on-card:first-child .whats-on-card__link {
  height: 100%;
}
.section-whats-on .whats-on__grid > .whats-on-card:first-child .whats-on-card__media {
  aspect-ratio: 6/5;
}
.section-whats-on .whats-on-card {
  display: block;
}
.section-whats-on .whats-on-card__link {
  display: flex;
  flex-direction: column;
  gap: 16px;
  height: 100%;
  color: inherit;
  text-decoration: none;
  transition: 0.25s ease-in-out;
}
.section-whats-on .whats-on-card__link:hover .whats-on-card__title {
  color: #E63946;
}
.section-whats-on .whats-on-card__title {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  font-weight: 400;
  line-height: 1.2;
  color: #1E232D;
  transition: 0.25s ease-in-out;
}
.section-whats-on .whats-on-card__media {
  position: relative;
  aspect-ratio: 4/3;
  overflow: visible;
  border-radius: 16px;
  background: #F3F8ED;
}
.section-whats-on .whats-on-card__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 16px;
  border: 2px solid #E63946;
}
.section-whats-on .whats-on-card__badge {
  position: absolute;
  top: -16px;
  right: -8px;
  z-index: 10;
  width: clamp(88px, 11vw, 150px);
  height: auto;
  pointer-events: none;
}
.section-whats-on .whats-on-card__body {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
}
.section-whats-on .whats-on-card__excerpt {
  margin: 0;
  flex: 1 1 auto;
  font-family: neue-haas-grotesk-text, sans-serif;
  font-size: 14px;
  font-weight: 400;
  color: #333333;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}
.section-whats-on .whats-on-card__icon {
  flex: 0 0 auto;
  width: 36px;
  height: 36px;
}
.section-whats-on .whats-on-card--featured .whats-on-card__title {
  font-size: clamp(24px, 2vw + 12px, 48px);
}
.section-whats-on .whats-on-card--featured .whats-on-card__excerpt {
  font-size: 16px;
  -webkit-line-clamp: 5;
}
.section-whats-on--spacing-none {
  padding-block: 0;
}
.section-whats-on--spacing-tight {
  padding-block: clamp(32px, 4vw, 48px);
}
.section-whats-on--spacing-loose {
  padding-block: clamp(96px, 10vw, 160px);
}
.section-whats-on--light {
  background: #F3F8ED;
}
.section-whats-on--dark {
  background: #1E232D;
  color: #F3F8ED;
}
.section-whats-on--dark .whats-on__heading,
.section-whats-on--dark .whats-on__subheading {
  color: #F3F8ED;
}
.section-whats-on--dark .whats-on-card__title,
.section-whats-on--dark .whats-on-card__excerpt {
  color: #F3F8ED;
}
.section-whats-on--brand {
  background: #E63946;
  color: #F3F8ED;
}
.section-whats-on--brand .whats-on__heading,
.section-whats-on--brand .whats-on__subheading {
  color: #F3F8ED;
}
.section-whats-on--brand .whats-on-card__title,
.section-whats-on--brand .whats-on-card__excerpt {
  color: #F3F8ED;
}

/*
    Homepage-Specific Styles

    Styles that ONLY apply to the homepage.
    Use sparingly — prefer reusable section styles instead.

    Target with body.home class from WordPress.
*/
/*
    Legal pages (/terms-of-use, /privacy-policy)

    These pages reuse the shared page_hero + rich_text sections. By default
    s-rich-text renders a CENTRED readable column (margin-inline:auto) which is
    correct on /explore and the article/event singles — but the live Webflow
    legal pages LEFT-align the body directly under the heading.

    Scope the left-align here via the .page-legal body class (added in
    functions/custom.php) so the shared section is untouched elsewhere. Both rules
    are two-class selectors, so they out-specify the section defaults without
    !important.

    The hero caps its inline padding at $spacing-2xl while rich_text caps at
    $spacing-3xl, so un-centring alone would leave the body 16px inboard of the
    title. Mirror the hero's responsive inline padding here so the title and body
    share the same left edge at every breakpoint.
*/
.page-legal .section-rich-text {
  padding-inline: clamp(16px, 4vw, 32px);
}
@media (min-width: 992px) {
  .page-legal .section-rich-text {
    padding-inline: clamp(32px, 6vw, 48px);
  }
}
.page-legal .section-rich-text .copy {
  margin-inline: 0;
}

/*
    Page: Matariki (body.theme-matariki)

    The dark/gold palette lives in _themes.scss; the chrome (header, side nav,
    buttons, footer) reads it automatically. This file only wires the FLEXIBLE
    CONTENT SECTIONS on the Matariki page to the theme — they already consume
    --section-fg / --heading-fg, so we point those at the theme tokens instead
    of editing each section partial — plus a couple of Matariki-only tweaks.
*/
body.theme-matariki .section-text-media,
body.theme-matariki .section-text-and-image,
body.theme-matariki .section-text-block,
body.theme-matariki .section-star-grid,
body.theme-matariki .section-logo-grid,
body.theme-matariki .section-social-feed,
body.theme-matariki .section-audio-player {
  --section-fg: var(--theme-text);
  --heading-fg: var(--theme-accent);
}
body.theme-matariki #matariki-hero {
  margin-top: clamp(48px, 7vw, 110px);
  margin-bottom: clamp(96px, 16vw, 224px);
}
body.theme-matariki .section-logo-grid .logos {
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: clamp(24px, 4vw, 64px);
  overflow: visible;
}
@media (min-width: 992px) {
  body.theme-matariki .section-logo-grid .logos {
    flex-wrap: nowrap;
  }
}
body.theme-matariki .section-logo-grid .logo {
  opacity: 1;
  height: clamp(90px, 12vw, 170px);
  width: auto;
  max-width: 45%;
}
@media (min-width: 992px) {
  body.theme-matariki .section-logo-grid .logo {
    flex: 1 1 0;
    max-width: none;
  }
}

/*
    Page: Awards (body.theme-awards) — /awards + /award-winners

    The dark navy + gold palette lives in _themes.scss (body.theme-awards,
    mirroring Matariki); the chrome (header, side nav, buttons, footer) reads it
    automatically. This file wires the reused FLEXIBLE CONTENT SECTIONS to the
    theme and adds the Awards-only flourishes:
      - cream "statement" cards on two text-media bands
      - gold eligibility cards (reused s-stats)
      - two-column category + 2024-winner lists (reused s-rich-text)
      - winner-card tier/category captions (reused s-carousel)
      - the decorative spinning + parallax gold stars (footer.php markup)

    Sections already consume --section-fg / --heading-fg, so most of the recolour
    is just pointing those at the theme tokens — same approach as _page_matariki.
*/
body.theme-awards .section-text-media,
body.theme-awards .section-stats,
body.theme-awards .section-carousel,
body.theme-awards .section-text-block,
body.theme-awards .section-award-categories,
body.theme-awards .section-logo-grid,
body.theme-awards .section-stay-informed {
  --section-fg: var(--theme-text);
  --heading-fg: var(--theme-accent);
}
body.theme-awards .section-text-media .btn {
  font-family: new-spirit, sans-serif;
  font-size: 18px;
  padding: 8px 32px;
  text-transform: none;
  letter-spacing: 0;
  text-decoration: none;
  width: auto;
  color: var(--theme-btn-fg, #E63946);
}
body.theme-awards .section-text-media .btn:hover {
  color: var(--theme-btn-hover-fg, #FFFFFF);
}
body.theme-awards .btn-primary {
  background-color: var(--theme-accent);
  color: #1E232D;
}
body.theme-awards .btn-primary:hover {
  background-color: var(--theme-accent);
  color: #1E232D;
  opacity: 0.9;
}
body.theme-awards .section-text-media .media__item {
  overflow: hidden;
  border-radius: 16px;
}
body.theme-awards .section-text-media .media__img {
  aspect-ratio: 3/2;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
body.theme-awards #awards-hero,
body.theme-awards #winners-hero {
  margin-top: clamp(32px, 5vw, 80px);
  margin-bottom: clamp(64px, 10vw, 140px);
}
body.theme-awards #awards-hero .media,
body.theme-awards #winners-hero .media {
  position: relative;
}
body.theme-awards #awards-hero .media::after,
body.theme-awards #winners-hero .media::after {
  content: "";
  position: absolute;
  top: clamp(-44px, -3vw, -28px);
  right: clamp(16px, 3vw, 32px);
  width: clamp(64px, 8vw, 96px);
  height: clamp(64px, 8vw, 96px);
  background: url("../images/badge-hc-circle-gold.svg") center/contain no-repeat;
  transform: rotate(-12deg);
  pointer-events: none;
  z-index: 10;
}
body.theme-awards #awards-hero .media__img,
body.theme-awards #winners-hero .media__img {
  aspect-ratio: 1/1;
}
body.theme-awards #awards-hero .awards-te-reo,
body.theme-awards #winners-hero .awards-te-reo {
  position: relative;
  padding-left: 34px;
  font-family: new-spirit, sans-serif;
  font-size: clamp(20px, 1.4vw + 0.8rem, 28px);
  line-height: 1.2;
  color: var(--theme-accent);
}
body.theme-awards #awards-hero .awards-te-reo::before,
body.theme-awards #winners-hero .awards-te-reo::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.15em;
  width: 22px;
  height: 28px;
  background: var(--theme-accent);
  -webkit-mask: url("../images/pin.svg") center/contain no-repeat;
  mask: url("../images/pin.svg") center/contain no-repeat;
}
body.theme-awards #awards-hero .btn,
body.theme-awards #winners-hero .btn {
  margin-top: 24px;
}
body.theme-awards #awards-intro,
body.theme-awards #awards-winners-cta {
  max-width: clamp(1280px, 84vw, 1546px);
  margin-inline: auto;
  align-items: center;
}
@media (min-width: 1200px) {
  body.theme-awards #awards-intro,
  body.theme-awards #awards-winners-cta {
    grid-template-columns: minmax(0, 1fr) clamp(390px, 25.5vw, 507px);
  }
}
body.theme-awards #awards-intro .body,
body.theme-awards #awards-winners-cta .body {
  background: #F3F8ED;
  color: #333333;
  border-radius: 24px;
  padding: clamp(32px, 4vw, 64px);
  align-self: center;
  justify-content: center;
  max-width: 1430px;
}
@media (min-width: 768px) {
  body.theme-awards #awards-intro .body,
  body.theme-awards #awards-winners-cta .body {
    aspect-ratio: 1/1;
  }
}
body.theme-awards #awards-intro .media,
body.theme-awards #awards-winners-cta .media {
  max-width: clamp(390px, 25.5vw, 507px);
  width: 100%;
}
body.theme-awards #awards-intro .card-eyebrow,
body.theme-awards #awards-winners-cta .card-eyebrow {
  margin: 0 0 24px 0;
  font-size: 12px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #959a9e;
}
body.theme-awards #awards-intro .card-statement,
body.theme-awards #awards-winners-cta .card-statement {
  margin: 0;
  font-family: new-spirit, sans-serif;
  font-size: clamp(26px, 2.2vw + 1rem, 42px);
  font-weight: 400;
  line-height: 1.2;
  color: #333333;
}
body.theme-awards #awards-intro .btn,
body.theme-awards #awards-winners-cta .btn {
  margin-top: 32px;
  --theme-btn-fg: #333333;
  --theme-btn-border: #333333;
  --theme-btn-hover-bg: #333333;
  --theme-btn-hover-fg: #F3F8ED;
}
body.theme-awards #awards-community .media {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
@media (max-width: 767px) {
  body.theme-awards #awards-community .media {
    grid-template-columns: 1fr;
  }
}
body.theme-awards #awards-community .media__item:nth-child(1) .media__img,
body.theme-awards #awards-community .media__item:nth-child(2) .media__img {
  aspect-ratio: 1/1;
}
body.theme-awards #awards-community .media__item:nth-child(3) {
  grid-column: 1/-1;
}
body.theme-awards #awards-community .media__item:nth-child(3) .media__img {
  aspect-ratio: 16/9;
}
body.theme-awards #awards-eligibility .heading {
  text-align: left;
  font-size: clamp(40px, 6vw + 0.5rem, 75px);
}
body.theme-awards #awards-eligibility .grid {
  grid-template-columns: 1fr;
  gap: 24px;
  align-items: start;
}
@media (min-width: 768px) {
  body.theme-awards #awards-eligibility .grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
body.theme-awards #awards-eligibility .stat {
  position: relative;
  text-align: left;
  background: var(--theme-accent);
  color: #1E232D;
  border-radius: 16px;
  padding: clamp(24px, 2.5vw, 48px);
  aspect-ratio: 1/1;
  justify-content: flex-end;
}
body.theme-awards #awards-eligibility .stat__number {
  position: absolute;
  top: clamp(16px, 2vw, 24px);
  right: clamp(16px, 2vw, 24px);
  font-family: new-spirit, sans-serif;
  font-size: 24px;
  color: rgba(30, 35, 45, 0.65);
  border: none;
}
body.theme-awards #awards-eligibility .stat__label {
  position: absolute;
  top: clamp(16px, 2vw, 24px);
  left: clamp(24px, 2.5vw, 48px);
  color: #1E232D;
}
body.theme-awards #awards-eligibility .stat__description {
  font-family: new-spirit, sans-serif;
  font-size: clamp(18px, 1.2vw + 0.6rem, 24px);
  line-height: 1.2;
  color: #1E232D;
}
body.theme-awards #winners-2024 .inner {
  max-width: none;
}
body.theme-awards #winners-2024 .body {
  max-width: none;
}
body.theme-awards #winners-2024 .body > h2 {
  color: var(--theme-accent);
  font-size: clamp(40px, 6vw + 0.5rem, 75px);
  margin-bottom: clamp(32px, 4vw, 64px);
}
body.theme-awards #winners-2024 .body .winners-2024-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(32px, 3vw, 48px);
}
@media (min-width: 768px) {
  body.theme-awards #winners-2024 .body .winners-2024-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (min-width: 992px) {
  body.theme-awards #winners-2024 .body .winners-2024-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}
body.theme-awards #winners-2024 .body .winners-2024-cat {
  break-inside: avoid;
}
body.theme-awards #winners-2024 .body .winners-2024-cat h3 {
  color: var(--theme-accent);
  font-size: 24px;
  margin: 0 0 8px 0;
}
body.theme-awards #winners-2024 .body .winners-2024-cat p {
  margin: 0 0 16px 0;
  font-size: 16px;
}
body.theme-awards #winners-2024 .body .winners-2024-cat .winner-tier {
  display: block;
  font-size: 12px;
  color: rgba(243, 248, 237, 0.6);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
body.theme-awards .section-logo-grid .logo img,
body.theme-awards .section-logo-grid .logo svg {
  filter: brightness(0) invert(1);
  opacity: 0.9;
}

/*
    Decorative gold pinwheel stars (footer.php, Awards pages only).

    Layer sits behind the content (z-index:-1) over the dark body background;
    section bands are transparent so the stars show through (cream cards are
    opaque and the stars simply pass behind them). Each star:
      - outer .award-star  → absolutely positioned; JS sets translateY (parallax)
      - inner .__spin      → CSS rotates it forever (the two transforms never clash)
      - shape via mask-image so it inherits --theme-accent (gold)
*/
body.theme-awards {
  position: relative;
}

.award-stars {
  position: absolute;
  inset: 0;
  z-index: -1;
  overflow: hidden;
  pointer-events: none;
}

.award-star {
  position: absolute;
  width: var(--size, 100px);
  height: var(--size, 100px);
  will-change: transform;
  transform: translate3d(0, var(--py, 0px), 0);
}
@media (max-width: 767px) {
  .award-star {
    transform: translate3d(0, var(--py, 0px), 0) scale(0.6);
  }
}
.award-star__spin {
  display: block;
  width: 100%;
  height: 100%;
  background: var(--theme-accent, #e2b354);
  opacity: 0.85;
  animation: award-star-spin var(--dur, 40s) linear infinite;
}
.award-star--reverse .award-star__spin {
  animation-direction: reverse;
}
.award-star__spin--lg {
  -webkit-mask: url("../images/star-burst-lg.svg") center/contain no-repeat;
  mask: url("../images/star-burst-lg.svg") center/contain no-repeat;
}
.award-star__spin--sm {
  -webkit-mask: url("../images/star-burst-sm.svg") center/contain no-repeat;
  mask: url("../images/star-burst-sm.svg") center/contain no-repeat;
}
.award-star__spin--sun {
  -webkit-mask: url("../images/star-sunburst.svg") center/contain no-repeat;
  mask: url("../images/star-sunburst.svg") center/contain no-repeat;
}

@keyframes award-star-spin {
  to {
    transform: rotate(360deg);
  }
}
@media (prefers-reduced-motion: reduce) {
  .award-star__spin {
    animation: none;
  }
}

/*# sourceMappingURL=style.css.map */
