
/* ============================================================
   GOOGLE FONT IMPORT
   ============================================================ */
@import url('https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,300;0,400;0,600;0,700;0,900;1,400&family=Caveat:wght@600;700&display=swap');
/* Font notes (BMCC Brand Guide, Sept 2024, p.24-25):
   - Primary corporate font is Myriad Pro (Adobe-licensed, not available as a free
     web font). Source Sans 3 is used here as the nearest free, open-license match
     — it's Adobe's own open-source humanist sans, built to a very similar brief.
   - Arial is the guide's own specified fallback when Myriad Pro is unavailable,
     so it remains the safety-net in --font-base below.
   - "Born Ready Regular" is the friendly/decorative font (taglines, poster titles)
     and is a separate licensed font we don't have web rights to. Caveat is used
     below as a free stand-in — see --font-accent, used sparingly, never for body
     text or long headings (per the guide's own "used sparingly" instruction). */

/* ============================================================
   DESIGN TOKENS
   ============================================================ */
:root {
  /* Primary brand color — CTAs, active states, feeds --color-brand* below */
  --color-primary:         #005490; /* BMCC "Mountains" — PMS 647 */
  --color-primary-dark:    #00436f;
  --color-primary-light:   #e7f0f6;

  /* Secondary accent — links, focus states, tabs, calendar/time selection */
  --color-secondary:       #6dbd33; /* BMCC "Fern" — PMS 368 */
  --color-secondary-dark:  #4f8f22;
  --color-secondary-light: #eff7e9;
  --color-secondary-glow:  #6dbd3326;

  /* Ink — headings, body emphasis, and dark surfaces (header, footer, table heads) */
  --color-ink:        #021d49; /* BMCC "Winter" — PMS 2768 */
  --color-ink-mid:    #005490; /* BMCC "Mountains" */
  --color-ink-pale:   #eff2f3;
  --color-ink-glow:   #021d4926;
  --color-white:      #ffffff;
  --color-off-white:  #f4f6f8;
  --color-surface:    #f8fafb;
  --color-border:     #e2e8ef;
  --color-border-mid: #cbd5e1;
  --color-text:       #404042;
  --color-text-muted: #64748b;
  --color-text-faint: #94a3b8;

  /* Typography — per BMCC Brand Guide p.24-25: Myriad Pro (primary corporate
     font) first, Arial (the guide's own specified fallback) last, with
     Source Sans 3 bridging the two as a free web-safe stand-in for Myriad Pro. */
  --font-base:        'Myriad Pro', 'Source Sans 3', Arial, Helvetica, sans-serif;
  /* Decorative/"friendly" font — BMCC's Born Ready Regular, stood in here by
     Caveat. Use only for short taglines/hero titles, never body copy or nav. */
  --font-accent:      'Born Ready Regular', 'Caveat', cursive;

  /* Spacing */
  --radius-sm:        6px;
  --radius:           10px;
  --radius-lg:        16px;

  /* Shadows */
  --shadow-xs:        0 1px 3px #021d490f;
  --shadow-sm:        0 2px 8px #021d4914;
  --shadow-md:        0 4px 16px #021d491a;
  --shadow-lg:        0 8px 32px #021d4924;
  --shadow-secondary: 0 4px 20px #6dbd3340;
  --shadow-primary:   0 4px 20px #00549059;

  /* Transitions */
  --transition:         all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  --transition-bounce:  all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);

  /* Override Envibe's own brand vars — these names are dictated by Envibe's base
     stylesheet, not by us, so they keep their original names rather than being
     renamed to --color-primary* like the tokens above */
  --color-brand:       var(--color-primary);
  --color-brand-light: var(--color-primary);
  --color-brand-dark:  var(--color-primary-dark);
}

/* ============================================================
   GLOBAL RESET & BASE
   ============================================================ */
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-behavior: smooth;
}
*, *:before, *:after {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
body,
input, button, select, textarea,
p, span, li, td, th, div, a, h1, h2, h3, h4, h5, label {
  font-family: var(--font-base) !important;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
body {
  background: var(--color-off-white) !important;
  background-color: var(--color-off-white) !important;
  color: var(--color-text) !important;
}
a {
  color: var(--color-secondary) !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
a:hover { color: var(--color-secondary-dark) !important; text-decoration: none !important; }

/* ============================================================
   HEADER BANNER
   Solid Mountains-blue banner (no background photo) behind the
   logo and strapline. Depends on this markup existing in HTML
   Body Content:
     <div id="clientheader">
       <a href="/" id="clientLogoLink" ...></a>
       <span class="header-strap">Swim - Gym - Courts - Community</span>
       <svg class="header-wave" ...>(wave path)</svg>
     </div>
   ============================================================ */
#clientheader {
  background: var(--color-primary) !important;
  background-color: var(--color-primary) !important;
  background-image: none !important;
  min-height: 120px !important;
  position: relative !important;
  overflow: hidden !important;
  border-bottom: none !important;
}

/* This is Envibe body-content markup (an inline <svg>), hidden here
   rather than removed from the page since we don't control the HTML */
#clientheader .header-wave {
  display: none !important;
}
/* Right-side strapline */
#clientheader .header-strap {
  position: absolute !important;
  right: 44px !important;
  top: 50% !important;
  -webkit-transform: translateY(-50%) !important;
  transform: translateY(-50%) !important;
  z-index: 2 !important;
  color: #ffffff !important;
  font-size: 0.95rem !important;
  font-weight: 600 !important;
  letter-spacing: 0.05em !important;
  white-space: nowrap !important;
}
/* Logo sits directly on the solid Mountains-blue banner — no
   separate plate needed now that the whole banner is the same
   corporate blue the white/reversed logo is designed to sit on
   (per Brand Guide p.19, reversed logos/graphics are sanctioned
   directly on corporate blue). */
#clientLogoLink {
  background-image: url('/File/Custom/C17E72AA9698076E30EE8B3C03F47EC84FC35D46/BMCC_logo.png') !important;
  -webkit-background-size: contain !important;
  background-size: contain !important;
  background-repeat: no-repeat !important;
  background-position: center center !important;
  background-color: transparent !important;
  border-radius: 0 !important;
  padding: 16px 24px !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  -webkit-box-sizing: border-box !important;
  box-sizing: border-box !important;
  width: 220px !important;
  height: 82px !important;
  display: inline-block !important;
  margin: 27px 0 0 36px !important;
  position: relative !important;
  z-index: 2 !important;
}

/* ============================================================
   PAGE STRUCTURE
   ============================================================ */
section.full-page {
  background: var(--color-off-white) !important;
  background-color: var(--color-off-white) !important;
}

/* ============================================================
   NAVIGATION BAR
   Sticky header bar containing ul.spread.main-navigation, with
   the Menu trigger on the left and the account/login trigger on
   the right. Depends on Envibe's header.page-header / nav.left-
   edge.top-edge.right-edge / ul.spread.main-navigation markup.
   ============================================================ */
header.page-header {
  display: block !important;
  visibility: visible !important;
  position: -webkit-sticky !important;
  position: sticky !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  z-index: 300 !important;
  background: #ffffff !important;
  background-color: #ffffff !important;
  border-bottom: 1px solid #e2e8ef !important;
  -webkit-box-shadow: 0 1px 6px #021d4914 !important;
  box-shadow: 0 1px 6px #021d4914 !important;
  padding: 0 !important;
  margin: 0 !important;
  height: auto !important;
  min-height: unset !important;
  max-height: unset !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}

/* Nav element fills the header bar */
nav.left-edge.top-edge.right-edge {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  width: 100% !important;
  padding: 10px 0 !important;
  margin: 0 !important;
  border-bottom: 1px solid var(--color-border) !important;
}

/* Full-width flex row inside nav that positions Menu/ticker/Log In */
nav.left-edge.top-edge.right-edge > div.full-width {
  width: 100% !important;
  max-width: 100% !important;
  padding: 0 28px !important;
  margin: 0 !important;
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  min-height: 52px !important;
}

/* Nav list — flex row; items pack to the start, and the account/
   login li is pushed right via margin-left:auto (below), not via
   justify-content */
ul.spread.main-navigation {
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-flex-direction: row !important;
  flex-direction: row !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  -webkit-justify-content: flex-start !important;
  justify-content: flex-start !important;
  gap: 10px !important;
  width: 100% !important;
  padding: 0 !important;
  margin: 0 !important;
  list-style: none !important;
  background: transparent !important;
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  min-height: 52px !important;
  height: auto !important;
  max-height: none !important;
  overflow: visible !important;
  gap: 0 !important;
  position: static !important;
  -webkit-flex-wrap: wrap !important;
  flex-wrap: wrap !important;
}

/* Each li sizes to its content and centers vertically */
ul.spread.main-navigation > li {
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
  height: auto !important;
  min-height: unset !important;
  max-height: unset !important;
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  outline: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  -webkit-flex-shrink: 0 !important;
  flex-shrink: 0 !important;
  -webkit-flex-grow: 0 !important;
  flex-grow: 0 !important;
  position: relative !important;
}

/* Account/login item always stays right - matched by position AND
   by contents, so a hidden extra li (ticker slot) can't centre it */
ul.spread.main-navigation > li:last-child,
ul.spread.main-navigation > li:has(.login-form),
ul.spread.main-navigation > li:has(input[name="Username"]),
ul.spread.main-navigation > li:has(a[href*="Login" i]),
ul.spread.main-navigation > li:has(a[href*="Account" i]) {
  margin-left: auto !important;
}
ul.spread.main-navigation > li:has(input[name="Username"]) ~ li,
ul.spread.main-navigation > li:has(a[href*="Login" i]) ~ li {
  margin-left: 0 !important;
}
ul.spread.main-navigation > li:empty { display: none !important; }

/* Removes background/border/box-shadow/padding from every wrapper
   div inside li, at any nesting depth, including phx-popup, so
   Envibe's default wrapper styling doesn't show behind the trigger
   chip. .h-100/.z-150/.ddmenu/[class*="login-form"] are excluded
   because those are the dropdown panel and must keep their own
   card styling (defined further down). */
ul.spread.main-navigation > li > div,
ul.spread.main-navigation > li > div.vue-root,
ul.spread.main-navigation > li > div.vue-root > div,
ul.spread.main-navigation phx-popup,
ul.spread.main-navigation > li div:not(.h-100):not(.z-150):not(.ddmenu):not([class*="login-form"]) {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
  height: auto !important;
  min-height: unset !important;
  max-height: unset !important;
  width: auto !important;
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  position: relative !important;
}

/* Menu / Log In trigger chip (a.w-100 or button.w-100) */
ul.spread.main-navigation div.h-100.z-150 > a.w-100,
ul.spread.main-navigation div.h-100.z-150 > button.w-100 {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  gap: 6px !important;
  height: 36px !important;
  padding: 0 14px !important;
  background: #f4f6f8 !important;
  background-color: #f4f6f8 !important;
  color: #404042 !important;
  -webkit-text-fill-color: #404042 !important;
  font-weight: 600 !important;
  font-size: 1rem !important;
  border-radius: 8px !important;
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  max-width: 180px !important;
  cursor: pointer !important;
  text-decoration: none !important;
  -webkit-transition: background 0.15s ease, color 0.15s ease !important;
  transition: background 0.15s ease, color 0.15s ease !important;
  -webkit-flex-shrink: 0 !important;
  flex-shrink: 0 !important;
  -webkit-tap-highlight-color: transparent !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}
ul.spread.main-navigation div.h-100.z-150 > a.w-100:hover,
ul.spread.main-navigation div.h-100.z-150 > button.w-100:hover {
  background: #edf8fc !important;
  background-color: #edf8fc !important;
  color: #6dbd33 !important;
  -webkit-text-fill-color: #6dbd33 !important;
}

/* ============================================================
   TICKER (Web Header Item)
   Envibe's Web Header Item CMS content renders as an <h4> inside
   its own <li> in ul.spread.main-navigation, between the Menu and
   Log In items. Given its own full-width row above them.
   ============================================================ */
/* The ticker li is targeted by position — the middle item of
   (Menu, ticker, Log In) — since :not(:first-child):not(:last-child)
   also correctly matches nothing when no ticker is configured and
   the list only has two items. :has(h4) is kept as a secondary,
   content-based match in case item order ever changes. */
ul.spread.main-navigation > li:not(:first-child):not(:last-child),
ul.spread.main-navigation > li:has(h4) {
  -webkit-flex: 1 1 100% !important;
  flex: 1 1 100% !important;
  width: 100% !important;
  max-width: 100% !important;
  -webkit-order: -1 !important;
  order: -1 !important;
  display: block !important;
  margin: 0 0 10px !important;
  overflow: visible !important;
}
ul.spread.main-navigation li h4 {
  display: block !important;
  width: 100% !important;
  background: var(--color-ink-mid) !important;
  background-color: var(--color-ink-mid) !important;
  color: #fffffff0 !important;
  font-size: 0.84rem !important;
  font-weight: 500 !important;
  letter-spacing: 0.01em !important;
  padding: 10px 18px !important;
  margin: 0 !important;
  border-left: 3px solid var(--color-primary) !important;
  border-radius: 8px !important;
  text-align: center !important;
}
ul.spread.main-navigation li h4 a,
ul.spread.main-navigation li h4 a b {
  color: #FFB71B !important; /* BMCC "Wattle" — visible against the navy ticker background */
  -webkit-text-fill-color: #FFB71B !important;
  font-weight: 700 !important;
  text-decoration: none !important;
}
ul.spread.main-navigation li h4 a:hover,
ul.spread.main-navigation li h4 a:hover b {
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}

/* ---- Alert-tier styling for the ticker ----
   Applies when the Web Header Item content contains a
   div.header-alert wrapper, e.g.:
   <div class="header-alert"><strong>Pool closure notice</strong>
   The pool will be closed on Sunday, 26 July 2026.</div>
   Web Header Items without this wrapper render as plain <h4> and
   keep the default navy ticker styling above. */
ul.spread.main-navigation .header-alert {
  display: block !important;
  width: 100% !important;
  background: #fef3c7 !important;
  background-color: #fef3c7 !important;
  color: #7a3d0e !important;
  font-size: 0.86rem !important;
  font-weight: 500 !important;
  letter-spacing: 0.01em !important;
  padding: 10px 18px !important;
  margin: 0 !important;
  border-left: 3px solid #f59e0b !important;
  border-radius: 8px !important;
  text-align: center !important;
}
ul.spread.main-navigation .header-alert strong,
ul.spread.main-navigation .header-alert b {
  color: #92400e !important;
  font-weight: 800 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.05em !important;
  font-size: 0.8rem !important;
  margin-right: 8px !important;
}
ul.spread.main-navigation .header-alert a {
  color: #92400e !important;
  font-weight: 700 !important;
  text-decoration: underline !important;
}

/* Envibe's no-JS fallback Log In link; redundant once the Vue nav hydrates */
a.if-no-js {
  display: none !important;
  visibility: hidden !important;
}

/* ============================================================
   NAV TRIGGERS & DROPDOWN PANELS
   Depends on this hydrated DOM chain:
     li > div.vue-root > div.h-100.z-150 > a.w-100        (the BUTTON)
                                         > .ddmenu         (menu panel, when open)
                                         > form.login-form (login panel, when open)
   div.h-100.z-150 WRAPS the trigger - it must stay neutral and
   in-flow. Panels float from it when Vue renders them.
   ============================================================ */
ul.spread.main-navigation > li div.vue-root {
  position: relative !important;
}
ul.spread.main-navigation > li div.vue-root > div.h-100.z-150 {
  position: relative !important;
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
  width: auto !important;
  height: auto !important;
  min-width: 0 !important;
  min-height: 0 !important;
  max-height: none !important;
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
}

/* ---- Floating panels (only exist while open) ---- */
ul.spread.main-navigation div.h-100.z-150 > .ddmenu,
ul.spread.main-navigation div.h-100.z-150 > form.login-form {
  position: absolute !important;
  top: calc(100% + 8px) !important;
  left: 6px; /* small inset so the panel doesn't hug the page edge */
  z-index: 9999 !important;
  background: #ffffff !important;
  background-color: #ffffff !important;
  border: 1px solid var(--color-border) !important;
  border-radius: 12px !important;
  -webkit-box-shadow: 0 8px 24px #021d492e !important;
  box-shadow: 0 8px 24px #021d492e !important;
  padding: 6px !important;
  min-width: 230px !important;
  width: -webkit-max-content !important;
  width: max-content !important;
  max-width: min(92vw, 360px) !important;
  height: auto !important;
  min-height: unset !important;
  -webkit-transform: none !important;
  transform: none !important;
}
/* Account/login panel opens right-aligned */
ul.spread.main-navigation > li:last-child div.h-100.z-150 > .ddmenu,
ul.spread.main-navigation > li:last-child div.h-100.z-150 > form.login-form {
  right: 0 !important;
  left: auto !important;
}

/* Menu items inside the dropdown */
ul.spread.main-navigation .ddmenu-items {
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
  display: block !important;
}
ul.spread.main-navigation .ddmenu-items > li {
  display: block !important;
  margin: 0 !important;
  padding: 0 !important;
}
ul.spread.main-navigation .ddmenu-items a {
  display: block !important;
  width: 100% !important;
  color: var(--color-text) !important;
  -webkit-text-fill-color: var(--color-text) !important;
  font-size: 0.88rem !important;
  font-weight: 500 !important;
  padding: 10px 14px !important;
  border-radius: 8px !important;
  background: transparent !important;
  background-color: transparent !important;
  white-space: nowrap !important;
  text-decoration: none !important;
  -webkit-transition: background 0.12s ease, color 0.12s ease !important;
  transition: background 0.12s ease, color 0.12s ease !important;
}
ul.spread.main-navigation .ddmenu-items a:hover {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  color: var(--color-secondary) !important;
  -webkit-text-fill-color: var(--color-secondary) !important;
}

/* Login panel internals - the inner .ddmenu fieldset must NOT
   render as a second card */
ul.spread.main-navigation form.login-form .ddmenu,
ul.spread.main-navigation form.login-form .login-form__fieldset {
  position: static !important;
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  padding: 10px !important;
  min-width: 0 !important;
  width: auto !important;
}
ul.spread.main-navigation .login-form__list {
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
  display: block !important;
}
ul.spread.main-navigation .login-form__list > li {
  display: block !important;
  margin: 0 0 12px !important;
  padding: 0 !important;
}
ul.spread.main-navigation .login-form__list label {
  font-size: 0.7rem !important;
  margin-bottom: 5px !important;
}
ul.spread.main-navigation .login-form input.text-box {
  width: 100% !important;
  min-width: 240px !important;
}
/* Remember Me: checkbox and label inline */
ul.spread.main-navigation .login-form__list input[type="checkbox"] {
  width: auto !important;
  display: inline-block !important;
  margin-right: 6px !important;
  vertical-align: middle !important;
}
ul.spread.main-navigation .login-form__list input[type="checkbox"] + label {
  display: inline-block !important;
  margin: 0 !important;
  vertical-align: middle !important;
}
ul.spread.main-navigation .login-form__list li.centre {
  text-align: center !important;
  font-size: 0.8rem !important;
  margin-bottom: 4px !important;
}

/* Affirmative CTA styling (login submit, wizard "Continue", etc.)
   Covers both <button> and <a>, since the booking wizard's Continue
   action renders as an anchor and must match the button's orange
   treatment rather than inheriting the global `a` link color. The
   full-width block layout is scoped to the login submit button only,
   so the Continue anchor keeps its natural inline, content-sized width. */
button.btn--affirmative,
a.btn--affirmative,
ul.spread.main-navigation form.login-form button.w-100 {
  background: var(--color-primary) !important;
  background-color: var(--color-primary) !important;
  border: none !important;
  border-radius: var(--radius) !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
  font-weight: 700 !important;
  font-size: 0.9rem !important;
  padding: 11px 18px !important;
  -webkit-box-shadow: var(--shadow-primary) !important;
  box-shadow: var(--shadow-primary) !important;
  cursor: pointer !important;
  text-align: center !important;
  text-decoration: none !important;
}
button.btn--affirmative,
ul.spread.main-navigation form.login-form button.w-100 {
  display: block !important;
  width: 100% !important;
}
button.btn--affirmative:hover,
a.btn--affirmative:hover,
ul.spread.main-navigation form.login-form button.w-100:hover {
  background: var(--color-primary-dark) !important;
  background-color: var(--color-primary-dark) !important;
  color: #ffffff !important;
  -webkit-text-fill-color: #ffffff !important;
}

/* Log Out / plain buttons inside dropdown panels (logged-in state) */
ul.spread.main-navigation div.h-100.z-150 > .ddmenu button:not(.btn--affirmative) {
  display: block !important;
  width: 100% !important;
  background: transparent !important;
  background-color: transparent !important;
  color: var(--color-text) !important;
  -webkit-text-fill-color: var(--color-text) !important;
  font-weight: 600 !important;
  font-size: 0.88rem !important;
  border: none !important;
  border-radius: 8px !important;
  padding: 10px 14px !important;
  text-align: left !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  cursor: pointer !important;
}
ul.spread.main-navigation div.h-100.z-150 > .ddmenu button:not(.btn--affirmative):hover {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  color: var(--color-secondary) !important;
  -webkit-text-fill-color: var(--color-secondary) !important;
}

/* ============================================================
   RESPONSIVE (NAV)
   ============================================================ */
@media screen and (max-width: 768px) {
  nav.left-edge.top-edge.right-edge > div.full-width {
    padding: 0 16px !important;
    min-height: 48px !important;
  }
  ul.spread.main-navigation div.h-100.z-150 > .ddmenu,
  ul.spread.main-navigation div.h-100.z-150 > form.login-form {
    max-width: calc(100vw - 32px) !important;
    min-width: 0 !important;
  }
  ul.spread.main-navigation > li:first-child div.h-100.z-150 > .ddmenu {
    left: 0 !important;
    right: auto !important;
  }
  ul.spread.main-navigation > li:last-child div.h-100.z-150 > .ddmenu,
  ul.spread.main-navigation > li:last-child div.h-100.z-150 > form.login-form {
    right: 0 !important;
    left: auto !important;
  }
  ul.spread.main-navigation { min-height: 48px !important; }
  ul.spread.main-navigation div.h-100.z-150 > a.w-100,
  ul.spread.main-navigation div.h-100.z-150 > button.w-100 {
    height: 34px !important;
    font-size: 0.84rem !important;
    padding: 0 12px !important;
    max-width: 150px !important;
  }
}
@media screen and (max-width: 480px) {
  nav.left-edge.top-edge.right-edge > div.full-width {
    padding: 0 14px !important;
    min-height: 44px !important;
  }
  ul.spread.main-navigation { min-height: 44px !important; }
  ul.spread.main-navigation div.h-100.z-150 > a.w-100,
  ul.spread.main-navigation div.h-100.z-150 > button.w-100 {
    height: 32px !important;
    font-size: 0.8rem !important;
    padding: 0 10px !important;
    max-width: 120px !important;
    gap: 4px !important;
  }
  ul.spread.main-navigation > li:last-child div.h-100.z-150 > form.login-form,
  ul.spread.main-navigation > li:last-child div.h-100.z-150 > .ddmenu {
    right: 0 !important;
    min-width: 0 !important;
    max-width: calc(100vw - 28px) !important;
  }
  ul.spread.main-navigation .login-form input.text-box {
    min-width: 0 !important;
  }
}


/* ============================================================
   TICKER / WEB HEADER ITEM
   The ticker is li:nth-child(2) in ul.spread.main-navigation
   ============================================================ */
div.page-heading-wrapper {
  background: transparent !important;
  background-color: transparent !important;
  border: none !important;
  padding: 14px 0 0 !important;
  margin: 0 !important;
  position: relative !important;
  z-index: 1 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
div.page-heading-wrapper > center {
  background: transparent !important;
  background-color: transparent !important;
  display: block !important;
}
div.page-heading-wrapper > center > h4,
div.page-heading-wrapper h4,
h4[style*="9BC3F2"] {
  background: var(--color-ink-mid) !important;
  background-color: var(--color-ink-mid) !important;
  color: #ffffffeb !important;
  font-size: 0.85rem !important;
  font-weight: 500 !important;
  padding: 11px 24px !important;
  border-radius: 0 !important;
  border-left: 3px solid var(--color-secondary) !important;
  display: block !important;
  width: 100% !important;
  letter-spacing: 0.01em !important;
}

/* ============================================================
   PAGE HEADING / BREADCRUMB AREA — transparent, no navy band
   ============================================================ */
section.left-edge.right-edge.page-heading,
section.right-edge.left-edge.page-heading,
section.page-heading.left-edge,
section.page-heading.right-edge,
section.page-heading,
.page-heading,
div.page-heading-wrapper > center > section,
div.page-heading-wrapper > center > section.left-edge.right-edge.page-heading {
  background: transparent !important;
  background-color: transparent !important;
  background-image: none !important;
  border: none !important;
  padding-top: 20px !important;
  padding-bottom: 4px !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
nav[aria-label="Breadcrumb"],
nav[aria-label="Breadcrumb"] ol,
nav[aria-label="Breadcrumb"] ul {
  background: transparent !important;
  background-color: transparent !important;
  padding: 0 !important;
  margin-bottom: 6px !important;
  font-size: 0.82rem !important;
  text-align: center !important;
}
nav[aria-label="Breadcrumb"] ol,
nav[aria-label="Breadcrumb"] ul {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-justify-content: center !important;
  justify-content: center !important;
  gap: 8px !important;
  list-style: none !important;
  width: 100% !important;
}
nav[aria-label="Breadcrumb"] a {
  color: var(--color-secondary) !important;
  font-weight: 600 !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
nav[aria-label="Breadcrumb"] a:hover { color: var(--color-secondary-dark) !important; }
nav[aria-label="Breadcrumb"] li,
nav[aria-label="Breadcrumb"] span { color: var(--color-text-muted) !important; }

/* ============================================================
   PAGE TITLES
   ============================================================ */
/* Page title is absolutely positioned into the nav bar, centered
   between the Menu button (left) and Log In (right), so its own
   row in the document flow collapses to zero height. Vertical
   position is controlled by the `top` value below (-48px). */
h1.full-width,
section.page-heading h1,
section.left-edge.right-edge.page-heading h1 {
  position: absolute !important;
  top: -48px !important;
  left: 50% !important;
  -webkit-transform: translateX(-50%) !important;
  transform: translateX(-50%) !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none !important;
  font-size: 1.6rem !important;
  font-weight: 800 !important;
  letter-spacing: -0.03em !important;
  line-height: 1.2 !important;
  color: var(--color-ink) !important;
  -webkit-text-fill-color: var(--color-ink) !important;
  text-align: center !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  max-width: 46vw !important;
  width: auto !important;
  z-index: 5 !important;
  pointer-events: none !important;
  opacity: 1 !important;
  visibility: visible !important;
  text-shadow: none !important;
}
/* No underline bar in toolbar mode */
h1.full-width:after,
section.page-heading h1:after {
  display: none !important;
}
/* The wrapper is the positioning anchor for the lifted title */
div.page-heading-wrapper { position: relative !important; }

h2 {
  font-size: 1.2rem !important;
  font-weight: 700 !important;
  letter-spacing: -0.02em !important;
  color: var(--color-ink) !important;
}
h3 { font-size: 1rem !important; font-weight: 700 !important; color: var(--color-ink) !important; }

/* ============================================================
   HOME MENU TILES
   Full-bleed photo cards with a navy gradient overlay.
   ============================================================ */
ul.main-menu {
  display: -webkit-box !important;
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-flex-wrap: wrap !important;
  flex-wrap: wrap !important;
  gap: 14px !important;
  padding: 0 !important;
  list-style: none !important;
}
ul.main-menu > li {
  list-style: none !important;
  -webkit-flex: 1 1 280px !important;
  flex: 1 1 280px !important;
  max-width: calc(33.333% - 10px) !important;
  min-width: 260px !important;
}
a.main-menu__link {
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-flex-direction: column !important;
  flex-direction: column !important;
  height: 240px !important;
  position: relative !important;
  overflow: hidden !important;
  background: var(--color-ink) !important;
  background-color: var(--color-ink) !important;
  border-radius: var(--radius-lg) !important;
  border: none !important;
  -webkit-box-shadow: var(--shadow-md) !important;
  box-shadow: var(--shadow-md) !important;
  cursor: pointer !important;
  text-decoration: none !important;
  -webkit-transition: var(--transition-bounce) !important;
  transition: var(--transition-bounce) !important;
}
a.main-menu__link:hover {
  -webkit-box-shadow: var(--shadow-lg) !important;
  box-shadow: var(--shadow-lg) !important;
  text-decoration: none !important;
}
/* Image — full bleed. The lift/zoom transform lives on this layer
   (not on a.main-menu__link) so the anchor's own hit-testing box
   never moves on hover: translateY(-6px) shifts the box's bottom
   edge up faster than scale(1.02) grows it back down, so hovering
   near that edge used to flicker the box in and out of :hover in
   a loop. Transforming only the inner full-bleed layers keeps the
   same visual lift without moving the hover boundary.
   NOTE: targets the <img> directly — the real markup has no wrapping
   element around it (confirmed from page source), unlike an earlier
   version of this file which incorrectly assumed a p.main-menu__icon
   wrapper existed. */
a.main-menu__link > img {
  position: absolute !important;
  top: 0 !important; right: 0 !important; bottom: 0 !important; left: 0 !important;
  margin: 0 !important; padding: 0 !important;
  width: 100% !important; height: 100% !important;
  display: block !important;
  z-index: 0 !important;
  -o-object-fit: cover !important; object-fit: cover !important;
  -o-object-position: center !important; object-position: center !important;
  -webkit-transition: -webkit-transform 0.6s cubic-bezier(0.4,0,0.2,1) !important;
  transition: transform 0.6s cubic-bezier(0.4,0,0.2,1) !important;
}
a.main-menu__link:hover > img {
  -webkit-transform: translateY(-4px) scale(1.08) !important;
  transform: translateY(-4px) scale(1.08) !important;
}
/* ---- Tile captions: pure CSS, no JavaScript ----
   The earlier alt-text-reading script isn't rendering, almost
   certainly because Envibe's Body Content editor strips <script>
   tags as an XSS precaution (same category of issue as the escarpment
   graphic's data:URI getting stripped earlier). This version needs no
   script at all: gradient + caption are generated content, keyed to
   each tile's own stable class (main-menu__link--bookings, etc.)
   that Envibe already outputs.
   TRADE-OFF: a single ::after can only hold one font-size/weight, so
   heading + description render as one same-styled block (separated
   by a line break) rather than a large bold title with a lighter
   line underneath. Workable two-tier version exists but is more
   fragile with text wrapping — ask if you want it.
   TO EDIT A CAPTION: change the "content" string in the per-tile
   rules below directly. This is no longer driven by Web Policy/alt
   text — if that matters, let me know and we can revisit. */
a.main-menu__link::before {
  content: '' !important;
  position: absolute !important;
  top: 0 !important; right: 0 !important; bottom: 0 !important; left: 0 !important;
  background: -webkit-linear-gradient(bottom,
    #021d49e6 0%,
    #021d49b3 18%,
    #021d4933 42%,
    transparent 65%) !important;
  background: linear-gradient(to top,
    #021d49e6 0%,
    #021d49b3 18%,
    #021d4933 42%,
    transparent 65%) !important;
  z-index: 1 !important;
  pointer-events: none !important;
}
a.main-menu__link::after {
  position: absolute !important;
  left: 20px !important; right: 20px !important; bottom: 22px !important;
  z-index: 2 !important;
  color: #ffffff !important;
  font-family: var(--font-base) !important;
  font-size: 0.92rem !important;
  font-weight: 700 !important;
  line-height: 1.4 !important;
  white-space: pre-line !important;
  text-shadow: 0 1px 3px #00000099 !important;
  pointer-events: none !important;
}
a.main-menu__link--bookings::after    { content: "Bookings\A Reserve or request your facility booking in seconds. Book online." !important; }
a.main-menu__link--courses::after     { content: "Courses" !important; }
a.main-menu__link--groups::after      { content: "Group Fitness\A Spin, HIIT, Yoga, Aqua, Pilates and more... with sessions to suit everyone." !important; }
a.main-menu__link--memberships::after { content: "Memberships\A Join today. Flexible direct debit with no lock-in contract." !important; }
a.main-menu__link--passes::after      { content: "Visit Passes\A Purchase or Top Up your Multi visit online." !important; }
a.main-menu__link--tickets::after     { content: "Tickets\A Grab tickets for events online and walk straight in. No waiting." !important; }
/* Staggered entrance animation */
@-webkit-keyframes ev-tile-in {
  from { opacity: 0; -webkit-transform: translateY(20px) scale(0.98); transform: translateY(20px) scale(0.98); }
  to   { opacity: 1; -webkit-transform: translateY(0) scale(1); transform: translateY(0) scale(1); }
}
@keyframes ev-tile-in {
  from { opacity: 0; transform: translateY(20px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
ul.main-menu > li:nth-child(1) a { -webkit-animation: ev-tile-in 0.5s 0.05s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.05s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(2) a { -webkit-animation: ev-tile-in 0.5s 0.12s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.12s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(3) a { -webkit-animation: ev-tile-in 0.5s 0.19s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.19s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(4) a { -webkit-animation: ev-tile-in 0.5s 0.26s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.26s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(5) a { -webkit-animation: ev-tile-in 0.5s 0.33s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.33s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(6) a { -webkit-animation: ev-tile-in 0.5s 0.40s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.40s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(7) a { -webkit-animation: ev-tile-in 0.5s 0.47s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.47s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(8) a { -webkit-animation: ev-tile-in 0.5s 0.54s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.54s cubic-bezier(0.4,0,0.2,1) both; }
ul.main-menu > li:nth-child(9) a { -webkit-animation: ev-tile-in 0.5s 0.61s cubic-bezier(0.4,0,0.2,1) both; animation: ev-tile-in 0.5s 0.61s cubic-bezier(0.4,0,0.2,1) both; }

/* ============================================================
   AM/PM TIMEPICKER
   ============================================================ */
label.timepicker__btn {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 2px solid var(--color-border-mid) !important;
  color: var(--color-text) !important;
  border-radius: var(--radius) !important;
  font-weight: 700 !important;
  font-size: 0.9rem !important;
  padding: 10px 28px !important;
  cursor: pointer !important;
  display: inline-block !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
  -webkit-tap-highlight-color: transparent !important;
  letter-spacing: 0.02em !important;
}
label.timepicker__btn:hover {
  background: var(--color-primary-light) !important;
  background-color: var(--color-primary-light) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-primary-dark) !important;
}
label.timepicker__btn--active,
label.timepicker__btn--active:hover {
  background: var(--color-primary) !important;
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-white) !important;
  -webkit-box-shadow: var(--shadow-primary) !important;
  box-shadow: var(--shadow-primary) !important;
}
ul.timepicker__list {
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-flex-wrap: wrap !important;
  flex-wrap: wrap !important;
  gap: 6px !important;
  padding: 0 !important;
  list-style: none !important;
  margin-top: 12px !important;
}
ul.timepicker__list > li { list-style: none !important; }

/* ============================================================
   BUTTONS
   ============================================================ */
button, .btn, input[type="submit"], input[type="button"] {
  font-family: var(--font-base) !important;
  font-weight: 600 !important;
  border-radius: var(--radius) !important;
  letter-spacing: 0.01em !important;
  cursor: pointer !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
  -webkit-appearance: none !important;
  appearance: none !important;
}
/* Primary CTA — orange with a matching glow shadow */
.btn-primary, button.btn-primary, a.btn-primary,
input[type="submit"], input[type="button"] {
  background: var(--color-primary) !important;
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-white) !important;
  font-weight: 700 !important;
  padding: 11px 24px !important;
  font-size: 0.9rem !important;
  -webkit-box-shadow: var(--shadow-primary) !important;
  box-shadow: var(--shadow-primary) !important;
  border-radius: var(--radius) !important;
}
.btn-primary:hover, button.btn-primary:hover, input[type="submit"]:hover {
  background: var(--color-primary-dark) !important;
  background-color: var(--color-primary-dark) !important;
  border-color: var(--color-primary-dark) !important;
  -webkit-transform: translateY(-2px) !important;
  transform: translateY(-2px) !important;
  -webkit-box-shadow: 0 6px 24px #00549073 !important;
  box-shadow: 0 6px 24px #00549073 !important;
}
.btn-default, button.btn-default {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1.5px solid var(--color-border-mid) !important;
  color: var(--color-text) !important;
  font-weight: 600 !important;
}
.btn-default:hover {
  border-color: var(--color-ink) !important;
  color: var(--color-ink) !important;
  -webkit-transform: translateY(-1px) !important;
  transform: translateY(-1px) !important;
}
.btn-danger, button.btn-danger {
  background: var(--color-ink) !important;
  background-color: var(--color-ink) !important;
  border-color: var(--color-ink) !important;
  color: var(--color-white) !important;
  font-weight: 700 !important;
}
button[class*="cancel"], a[class*="cancel"] {
  background: transparent !important;
  border: 1px solid var(--color-border) !important;
  color: var(--color-text-muted) !important;
}

/* Inside the logged-in dashboard, primary actions are blue instead of orange */
main#main .btn-primary,
main#main a.btn-primary,
main#main button.btn-primary {
  background: var(--color-secondary) !important;
  background-color: var(--color-secondary) !important;
  border-color: var(--color-secondary) !important;
  -webkit-box-shadow: var(--shadow-secondary) !important;
  box-shadow: var(--shadow-secondary) !important;
}
main#main .btn-primary:hover,
main#main a.btn-primary:hover {
  background: var(--color-secondary-dark) !important;
  background-color: var(--color-secondary-dark) !important;
  border-color: var(--color-secondary-dark) !important;
}

/* ============================================================
   FORMS
   ============================================================ */
label {
  font-weight: 600 !important;
  font-size: 0.73rem !important;
  color: var(--color-text-muted) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
  margin-bottom: 7px !important;
  display: block !important;
}
input[type="text"], input[type="email"], input[type="password"],
input[type="number"], input[type="date"], input[type="tel"], textarea {
  border: 1.5px solid var(--color-border-mid) !important;
  border-radius: var(--radius) !important;
  padding: 11px 14px !important;
  font-size: 0.9rem !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  color: var(--color-text) !important;
  -webkit-appearance: none !important;
  appearance: none !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
input:focus, select:focus, textarea:focus {
  border-color: var(--color-secondary) !important;
  -webkit-box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
  box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
  outline: none !important;
}
/* REPEAT BOOKING DIALOG — inline number input shield
   "End after [ ] bookings" is one line of running text with a
   number input embedded inline. Our generic input padding/font-size
   above widens that input enough that "bookings" no longer fits on
   the same line and wraps — but this dialog's dl/dd grid row is
   sized for a single line, so the wrapped text spills down into the
   checkbox row underneath it, causing an overlap. Reverting to
   Envibe's native compact sizing here (this dialog only) keeps
   everything on one line, same fix pattern as the Courses Timetable
   card shield elsewhere in this file. */
.stack--repeat input[type="number"] {
  padding: revert !important;
  font-size: revert !important;
  border: revert !important;
  border-radius: revert !important;
  background: revert !important;
  width: revert !important;
  height: revert !important;
  -webkit-appearance: revert !important;
  appearance: revert !important;
}
select {
  border: 1.5px solid var(--color-border-mid) !important;
  border-radius: var(--radius) !important;
  padding: 11px 14px !important;
  background: var(--color-white) !important;
  color: var(--color-text) !important;
  -webkit-appearance: auto !important;
  appearance: auto !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
.input-group-btn > .btn {
  background: var(--color-off-white) !important;
  border: 1.5px solid var(--color-border-mid) !important;
  color: var(--color-ink) !important;
  font-weight: 700 !important;
  font-size: 1.2rem !important;
  -webkit-appearance: none !important;
  appearance: none !important;
  border-radius: 0 !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
.input-group-btn > .btn:hover {
  background: var(--color-ink) !important;
  background-color: var(--color-ink) !important;
  color: var(--color-white) !important;
  border-color: var(--color-ink) !important;
}

/* ============================================================
   PANELS / CARDS
   ============================================================ */
.panel, .card, .well {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-lg) !important;
  -webkit-box-shadow: var(--shadow-xs) !important;
  box-shadow: var(--shadow-xs) !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
.panel:hover, .card:hover {
  -webkit-box-shadow: var(--shadow-sm) !important;
  box-shadow: var(--shadow-sm) !important;
}
.panel-heading, .card-header {
  background: var(--color-surface) !important;
  background-color: var(--color-surface) !important;
  border-bottom: 1px solid var(--color-border) !important;
  font-weight: 700 !important;
  font-size: 0.73rem !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
  color: var(--color-text-muted) !important;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0 !important;
  padding: 13px 18px !important;
}

/* ============================================================
   TABS
   ============================================================ */
.nav-tabs {
  border-bottom: 2px solid var(--color-border) !important;
  gap: 2px !important;
  display: -webkit-flex !important;
  display: flex !important;
}
.nav-tabs > li > a {
  font-weight: 600 !important;
  font-size: 0.82rem !important;
  color: var(--color-text-muted) !important;
  border-radius: var(--radius-sm) var(--radius-sm) 0 0 !important;
  border: 1px solid transparent !important;
  padding: 10px 16px !important;
  max-width: 150px !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  display: block !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover {
  background: var(--color-secondary) !important;
  background-color: var(--color-secondary) !important;
  color: var(--color-white) !important;
  border-color: var(--color-secondary) !important;
  -webkit-box-shadow: var(--shadow-secondary) !important;
  box-shadow: var(--shadow-secondary) !important;
}
.nav-tabs > li > a:hover {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  color: var(--color-secondary) !important;
}

/* ============================================================
   SELECTION CARDS (membership, courses, locations)
   ============================================================ */
label.list-button,
a.list-button {
  display: block !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1.5px solid var(--color-border) !important;
  border-radius: var(--radius-lg) !important;
  padding: 18px 22px !important;
  cursor: pointer !important;
  -webkit-transition: var(--transition-bounce) !important;
  transition: var(--transition-bounce) !important;
  margin-bottom: 10px !important;
  -webkit-box-shadow: var(--shadow-xs) !important;
  box-shadow: var(--shadow-xs) !important;
}
label.list-button:hover,
a.list-button:hover {
  border-color: var(--color-ink) !important;
  -webkit-box-shadow: var(--shadow-lg) !important;
  box-shadow: var(--shadow-lg) !important;
  -webkit-transform: translateY(-3px) !important;
  transform: translateY(-3px) !important;
}
span.list-button__heading {
  font-size: 0.95rem !important;
  font-weight: 700 !important;
  color: var(--color-ink) !important;
  display: block !important;
  margin-bottom: 5px !important;
  text-transform: none !important;
  letter-spacing: -0.01em !important;
}
span.list-button__description {
  font-size: 0.82rem !important;
  color: var(--color-text-muted) !important;
  line-height: 1.6 !important;
  text-transform: none !important;
  white-space: normal !important;
  display: block !important;
}

/* ---- Drilldown selectors (Course enrolment page) ----
   Depends on this DOM chain:
   fieldset.bt > legend + ol.h-stack > li > input.sr-only + label.list-button
   with .list-button__content / __icon / __heading inside      */
fieldset.bt {
  border: none !important;
  padding: 0 !important;
  margin: 0 0 18px !important;
  min-width: 0 !important;
}
fieldset.bt > legend {
  font-family: var(--font-base) !important;
  font-size: 0.78rem !important;
  font-weight: 700 !important;
  color: var(--color-text-muted) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
  border: none !important;
  padding: 0 !important;
  margin-bottom: 10px !important;
  width: auto !important;
}
ol.h-stack, ul.h-stack {
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-flex-wrap: wrap !important;
  flex-wrap: wrap !important;
  gap: 12px !important;
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
.h-stack > li {
  list-style: none !important;
  -webkit-flex: 1 1 280px !important;
  flex: 1 1 280px !important;
  max-width: 420px !important;
  margin: 0 !important;
}
.h-stack > li label.list-button,
.h-stack > li a.list-button {
  margin-bottom: 0 !important;
  height: 100% !important;
}
/* Anchor variant must not inherit global link colour */
a.list-button, a.list-button:hover { text-decoration: none !important; }
a.list-button .list-button__heading { color: var(--color-ink) !important; }
a.list-button:hover .list-button__heading { color: var(--color-ink-mid) !important; }
span.list-button__content {
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  gap: 14px !important;
  text-transform: none !important;
}
span.list-button__icon {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  -webkit-justify-content: center !important;
  justify-content: center !important;
  width: 42px !important;
  height: 42px !important;
  border-radius: 50% !important;
  background: var(--color-ink-pale) !important;
  background-color: var(--color-ink-pale) !important;
  color: var(--color-ink) !important;
  font-size: 1.05rem !important;
  -webkit-flex-shrink: 0 !important;
  flex-shrink: 0 !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
/* Selected state - the radio before the label is checked */
input:checked + label.list-button {
  border-color: var(--color-ink) !important;
  background: var(--color-ink-pale) !important;
  background-color: var(--color-ink-pale) !important;
  -webkit-box-shadow: 0 0 0 3px var(--color-ink-glow), var(--shadow-sm) !important;
  box-shadow: 0 0 0 3px var(--color-ink-glow), var(--shadow-sm) !important;
}
input:checked + label.list-button span.list-button__icon {
  background: var(--color-ink) !important;
  background-color: var(--color-ink) !important;
  color: #ffffff !important;
}
input:checked + label.list-button span.list-button__heading {
  color: var(--color-ink) !important;
}
/* Keyboard focus ring for accessibility */
input:focus-visible + label.list-button {
  outline: 3px solid var(--color-ink-glow) !important;
  outline-offset: 2px !important;
}

/* ============================================================
   MEMBERSHIP INFO BANNER
   ============================================================ */
div.page-heading-wrapper h4[style],
h4[style*="9BC3F2"] {
  background-color: var(--color-ink-mid) !important;
  color: #ffffffeb !important;
  font-size: 0.88rem !important;
  font-weight: 500 !important;
  padding: 14px 24px !important;
  border-left: 4px solid var(--color-secondary) !important;
  border-radius: 0 !important;
  text-align: left !important;
  width: 100% !important;
  display: block !important;
  letter-spacing: 0.01em !important;
}

/* ============================================================
   DASHBOARD SECTIONS
   ============================================================ */
main#main h2 {
  font-size: 0.95rem !important;
  font-weight: 700 !important;
  color: var(--color-ink) !important;
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  gap: 10px !important;
  padding: 15px 20px !important;
  margin: 0 !important;
  border-bottom: 1px solid var(--color-border) !important;
  letter-spacing: -0.01em !important;
}
main#main h2 > i,
main#main h2 svg {
  color: var(--color-primary) !important;
  font-size: 1.15rem !important;
  -webkit-flex-shrink: 0 !important;
  flex-shrink: 0 !important;
}
main#main [class*="rounded-full"],
main#main button[class*="rounded-full"],
main#main a[class*="rounded-full"] {
  background: var(--color-ink) !important;
  background-color: var(--color-ink) !important;
  border: none !important;
  color: var(--color-white) !important;
  width: 28px !important;
  height: 28px !important;
  border-radius: 50% !important;
  -webkit-border-radius: 50% !important;
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  -webkit-justify-content: center !important;
  justify-content: center !important;
  -webkit-flex-shrink: 0 !important;
  flex-shrink: 0 !important;
  margin-left: auto !important;
  cursor: pointer !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
main#main [class*="rounded-full"] i,
main#main [class*="rounded-full"] svg,
main#main [class*="rounded-full"] * {
  color: var(--color-white) !important;
  fill: var(--color-white) !important;
}
main#main [class*="rounded-full"]:hover {
  background: var(--color-secondary) !important;
  background-color: var(--color-secondary) !important;
  -webkit-transform: scale(1.1) !important;
  transform: scale(1.1) !important;
  -webkit-box-shadow: var(--shadow-secondary) !important;
  box-shadow: var(--shadow-secondary) !important;
}
main#main p:not(.main-menu__heading):not(.main-menu__body):not(.main-menu__icon):not([class*="timetable"]),
main#main li:not([class*="main-menu"]):not([class*="timetable"]),
main#main td:not([class*="timetable"]) {
  font-size: 0.88rem !important;
  line-height: 1.6 !important;
  color: var(--color-text) !important;
}
main#main strong, main#main b { font-weight: 700 !important; color: var(--color-ink) !important; }
main#main small, main#main .text-muted { color: var(--color-text-muted) !important; font-size: 0.78rem !important; }

/* ============================================================
   PROGRESS BAR
   ============================================================ */
.progress {
  background: var(--color-border) !important;
  background-color: var(--color-border) !important;
  border-radius: 20px !important;
  height: 8px !important;
  margin: 8px 0 28px !important;
  overflow: visible !important;
}
.progress-bar {
  background: -webkit-linear-gradient(left, var(--color-secondary), var(--color-primary)) !important;
  background: linear-gradient(to right, var(--color-secondary), var(--color-primary)) !important;
  border-radius: 20px !important;
  min-width: 24px !important;
  position: relative !important;
  -webkit-transition: width 0.8s cubic-bezier(0.4,0,0.2,1) !important;
  transition: width 0.8s cubic-bezier(0.4,0,0.2,1) !important;
}
.progress-bar:after {
  content: attr(aria-valuenow) '%';
  position: absolute;
  right: 0; top: -22px;
  font-size: 0.72rem;
  font-weight: 700;
  color: var(--color-secondary);
  font-family: var(--font-base);
}

/* ============================================================
   STATUS LABELS & BADGES
   ============================================================ */
.label {
  border-radius: 20px !important;
  padding: 4px 12px !important;
  font-size: 0.72rem !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.05em !important;
  display: inline-block !important;
}
.label-default { background: #f1f5f9 !important; color: var(--color-text-muted) !important; border: 1px solid var(--color-border) !important; }
.label-success  { background: var(--color-primary-light) !important; color: var(--color-primary-dark) !important; }
.label-warning  { background: #fef3c7 !important; color: #92400e !important; }
.label-danger   { background: #fee2e2 !important; color: #991b1b !important; }
.label-info     { background: var(--color-secondary-light) !important; color: var(--color-secondary-dark) !important; }

/* ============================================================
   CART / TABLE
   ============================================================ */
.table thead th {
  background: var(--color-ink) !important;
  background-color: var(--color-ink) !important;
  color: #ffffffd9 !important;
  font-size: 0.73rem !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
  border: none !important;
  padding: 13px 20px !important;
}
.table tbody td {
  padding: 13px 20px !important;
  border-color: var(--color-border) !important;
  font-size: 0.9rem !important;
  color: var(--color-text) !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
.table tbody tr:hover td {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
}
.table tfoot td {
  font-weight: 700 !important;
  background: var(--color-off-white) !important;
  background-color: var(--color-off-white) !important;
  border-top: 2px solid var(--color-border-mid) !important;
  color: var(--color-ink) !important;
  font-size: 1rem !important;
}

/* ============================================================
   FOOTER
   ============================================================ */

footer.page-footer,
footer.left-edge.bottom-edge.right-edge.page-footer {
  background: var(--color-ink) !important;
  background-color: var(--color-ink) !important;
  color: #ffffff99 !important;
  padding: 24px 40px !important;
  font-size: 0.82rem !important;
  border-top: none !important;
}
footer.page-footer a {
  color: #ffffffcc !important;
  font-weight: 600 !important;
  text-decoration: none !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
footer.page-footer a:hover { color: var(--color-white) !important; }

/* ------------------------------------------------------------
   ESCARPMENT GRAPHIC — sliced footer band
   Per BMCC Brand Guide p.18-19: "The sliced graphic is for use as
   a page footer on printed and electronic documents." Built as a
   plain CSS linear-gradient with hard colour stops (no embedded
   SVG/data-URI) using the guide's own extended-palette hex values
   (Winter, Mountains, Rosella, Escarpment, Gum, etc.) in the same
   left-to-right sequence as the guide's sliced graphic.
   NOTE: an earlier version of this used a background-image
   data-URI SVG. That's valid CSS but some CMS file-upload
   scanners (including Envibe's) strip data: URIs out of uploaded
   CSS as an XSS precaution, so it can silently vanish after
   upload even though it looks correct in the raw file. A plain
   gradient has no such risk.
   ------------------------------------------------------------ */
footer.page-footer,
footer.left-edge.bottom-edge.right-edge.page-footer {
  position: relative !important;
}
footer.page-footer:before,
footer.left-edge.bottom-edge.right-edge.page-footer:before {
  content: '' !important;
  display: block !important;
  position: absolute !important;
  top: 0 !important; left: 0 !important; right: 0 !important;
  height: 12px !important;
  background: linear-gradient(to right,
    #021D49 0.0%,   #021D49 3.66%,
    #5FA0CB 3.66%,  #5FA0CB 5.07%,
    #005490 5.07%,  #005490 17.18%,
    #FF0000 17.18%, #FF0000 18.31%,
    #FDE9C8 18.31%, #FDE9C8 30.99%,
    #FED95E 30.99%, #FED95E 35.77%,
    #FCA98A 35.77%, #FCA98A 44.23%,
    #FC5A3C 44.23%, #FC5A3C 52.11%,
    #005490 52.11%, #005490 58.31%,
    #021D49 58.31%, #021D49 63.94%,
    #6E9E8E 63.94%, #6E9E8E 72.39%,
    #BFD9CD 72.39%, #BFD9CD 78.87%,
    #FDE9C8 78.87%, #FDE9C8 91.55%,
    #FED95E 91.55%, #FED95E 97.18%,
    #5FA0CB 97.18%, #5FA0CB 100.0%
  ) !important;
  z-index: 1 !important;
}
footer.page-footer > *,
footer.left-edge.bottom-edge.right-edge.page-footer > * {
  position: relative !important;
  z-index: 2 !important;
}

/* ------------------------------------------------------------
   FOOTER CONTENT — Council offices / Contact / Quick links
   Styles the new footer-info / footer-subbar / footer-bottombar
   markup (see footer-content-snippet.html) pasted into Envibe's
   Footer Content area. Sits inside footer.page-footer, so it
   inherits the navy background and sits below the escarpment
   strip automatically.
   ------------------------------------------------------------ */
.footer-info {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 32px !important;
  padding: 12px 0 28px !important;
  color: #ffffffd9 !important;
  text-align: left !important;
}
.footer-info__col {
  flex: 1 1 220px !important;
  min-width: 200px !important;
  padding-right: 24px !important;
  border-right: 1px solid #ffffff26 !important;
  text-align: left !important;
}
.footer-info__col:last-child {
  border-right: none !important;
}
.footer-info__heading {
  color: #ffffff !important;
  font-size: 1.05rem !important;
  font-weight: 700 !important;
  margin: 0 0 10px !important;
  padding-bottom: 10px !important;
  border-bottom: 3px solid #FF671D !important; /* BMCC "Wild flower" accent */
  display: block !important;
  text-align: left !important;
}
.footer-info__heading--hidden {
  visibility: hidden !important;
}
.footer-info p {
  margin: 0 0 12px !important;
  font-size: 0.88rem !important;
  line-height: 1.5 !important;
  color: #ffffffd9 !important;
  text-align: left !important;
}
.footer-info p strong {
  color: #ffffff !important;
  font-weight: 700 !important;
}
.footer-info a {
  color: #ffffffd9 !important;
  font-weight: 400 !important;
}
.footer-info a:hover {
  color: #ffffff !important;
}
.footer-info__list {
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 8px !important;
  text-align: left !important;
}
.footer-info__list a {
  font-size: 0.88rem !important;
  font-weight: 400 !important;
  text-decoration: none !important;
}
.footer-info__list a:hover {
  text-decoration: underline !important;
}

/* Sub-bar — link row on a slightly darker navy band */
.footer-subbar {
  background: #001433 !important;
  margin: 0 -40px !important;
  padding: 16px 40px !important;
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 28px !important;
  font-size: 0.85rem !important;
  text-align: left !important;
}
.footer-subbar a {
  color: #ffffffd9 !important;
  font-weight: 400 !important;
  text-decoration: none !important;
}
.footer-subbar a:hover {
  color: #ffffff !important;
  text-decoration: underline !important;
}

/* Bottom bar — copyright + acknowledgement of country.
   The acknowledgement BLOCK sits on the right side of the row
   (via flex justify-content:space-between + max-width below),
   but the text inside it still reads left-aligned, same as any
   normal paragraph — that's what makes "Learn more" sit under
   the start of the paragraph instead of flush against the
   right edge on its own. */
.footer-bottombar {
  display: flex !important;
  flex-wrap: wrap !important;
  justify-content: space-between !important;
  gap: 16px !important;
  padding: 20px 0 4px !important;
  font-size: 0.82rem !important;
  color: #ffffff99 !important;
  text-align: left !important;
}
.footer-bottombar__copyright {
  text-align: left !important;
}
.footer-bottombar__acknowledgement {
  max-width: 460px !important;
  text-align: left !important;
}
.footer-bottombar a {
  color: #ffffffcc !important;
  font-weight: 400 !important;
}
@media (max-width: 700px) {
  .footer-info { flex-direction: column !important; gap: 24px !important; }
  .footer-info__col { border-right: none !important; padding-right: 0 !important; }
  .footer-subbar { flex-direction: column !important; gap: 12px !important; }
  .footer-bottombar { flex-direction: column !important; }
  .footer-bottombar__acknowledgement { text-align: left !important; max-width: none !important; }
}

/* ============================================================
   PAGE ENTRY ANIMATION
   ============================================================ */
@-webkit-keyframes ev-page-in {
  from { opacity: 0; -webkit-transform: translateY(10px); transform: translateY(10px); }
  to   { opacity: 1; -webkit-transform: translateY(0); transform: translateY(0); }
}
@keyframes ev-page-in {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}
main#main {
  -webkit-animation: ev-page-in 0.45s cubic-bezier(0.4,0,0.2,1) both !important;
  animation: ev-page-in 0.45s cubic-bezier(0.4,0,0.2,1) both !important;
}

/* ============================================================
   SCROLLBAR — thin custom style, WebKit browsers only
   ============================================================ */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--color-border-mid); border-radius: 10px; }
::-webkit-scrollbar-thumb:hover { background: var(--color-secondary); }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media screen and (max-width: 768px) {
  ul.main-menu > li { max-width: calc(50% - 8px) !important; min-width: 0 !important; -webkit-flex: 1 1 calc(50% - 8px) !important; flex: 1 1 calc(50% - 8px) !important; }
  a.main-menu__link { height: 210px !important; }
  #clientheader { min-height: 112px !important; }
  #clientheader .header-strap { display: none !important; }
  #clientLogoLink { width: 156px !important; height: 58px !important; padding: 0 !important; margin: 11px 0 0 16px !important; }
  h1.full-width, section.page-heading h1 { font-size: 1.05rem !important; top: -44px !important; max-width: 38vw !important; }
}
@media screen and (max-width: 480px) {
  ul.main-menu > li { max-width: 100% !important; -webkit-flex: 1 1 100% !important; flex: 1 1 100% !important; }
  a.main-menu__link { height: 200px !important; }
}


/* ============================================================
   BOOKINGS PAGE
   Filter grid, conditions card, steppers, datepicker, calendar,
   time-slot chips with availability badges, page-action chips.
   All scoped to main#main - nav rules are untouched. Depends on
   Envibe's booking-form DOM (ul.filter-container, .timepicker,
   .datepicker__*, .dp-calendar*, .number-picker__*).
   ============================================================ */

/* ---- Centred content column ----
   Overrides Envibe's page grid so main#main becomes a single,
   width-capped, centered column instead of a multi-column layout.
   Flex column + min-height:100vh keeps the page's background
   filling the viewport on short pages. */
section.full-page {
  display: flex !important;
  flex-direction: column !important;
  min-height: 100vh !important;
}
/* Generated content in a flex container becomes a real flex item
   (ordered after header.page-header/nav/main#main/footer.page-footer,
   since none of them set an explicit `order`). flex-grow:1 makes
   this item — not the footer — absorb the column's leftover height,
   so on short pages the space below the footer reads as navy
   instead of the page's off-white background, without adding any
   space on pages that already fill the viewport. */
section.full-page:after {
  content: '' !important;
  flex-grow: 1 !important;
  background: var(--color-ink) !important;
  pointer-events: none !important;
}
main#main.main-content--wide {
  max-width: none !important;
  padding-left: 32px !important;
  padding-right: 32px !important;
}
main#main {
  display: block !important;
  width: 100% !important;
  max-width: 1060px !important;
  margin: 0 auto !important;
  padding: 40px 24px 48px !important;
  float: none !important;
}
/* Form/content pages (.stack wrapper) get a tighter reading width,
   centered inside the main column; home tiles keep the full width. */
main#main > div.stack {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
/* The narrow reading cap applies to FORMS only (booking form etc.)
   so wide components like the Courses timetable keep full width */
main#main form {
  display: block !important;
  width: 100% !important;
  max-width: 680px !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
main#main > ul.main-menu {
  width: 100% !important;
  max-width: 100% !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
/* Prevent wide grids forcing the column open */
main#main .timepicker,
main#main ul.filter-container {
  min-width: 0 !important;
}

/* ---- Page actions (My Bookings / Timetable chips) ---- */
main#main ol.page-actions {
  display: -webkit-flex !important;
  display: flex !important;
  gap: 10px !important;
  list-style: none !important;
  padding: 0 !important;
  margin: 0 0 6px !important;
}
main#main a.page-actions__btn-nav {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  gap: 10px !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1.5px solid var(--color-border) !important;
  border-radius: 12px !important;
  padding: 11px 18px !important;
  font-size: 0.88rem !important;
  font-weight: 600 !important;
  color: var(--color-ink) !important;
  -webkit-text-fill-color: var(--color-ink) !important;
  text-decoration: none !important;
  -webkit-box-shadow: var(--shadow-xs) !important;
  box-shadow: var(--shadow-xs) !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
main#main a.page-actions__btn-nav:hover {
  border-color: var(--color-secondary) !important;
  color: var(--color-secondary) !important;
  -webkit-text-fill-color: var(--color-secondary) !important;
  -webkit-transform: translateY(-2px) !important;
  transform: translateY(-2px) !important;
}
main#main .page-actions__btn-nav-icon {
  color: var(--color-secondary) !important;
  font-size: 1.15rem !important;
}

/* ---- Spacing between stacked form sections ---- */
main#main div.stack > ul.stack { gap: 20px !important; }

/* ---- Filter grid ---- */
main#main ul.filter-container {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr)) !important;
  gap: 14px !important;
  list-style: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
main#main li.filter-container__item {
  list-style: none !important;
  margin: 0 !important;
  min-width: 0 !important;
}
main#main li.filter-container__item.filter-container__item--s {
  max-width: 220px !important;
}
/* An item that carries Conditions spans the full row */
main#main li.filter-container__item:has(h2) {
  grid-column: 1 / -1 !important;
}

/* ---- Select comboboxes ---- */
main#main .filter .select {
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1.5px solid var(--color-border-mid) !important;
  border-radius: 10px !important;
  padding-right: 10px !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
main#main .filter .select:focus-within {
  border-color: var(--color-secondary) !important;
  -webkit-box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
  box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
}
main#main .filter .select input {
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  background: transparent !important;
  background-color: transparent !important;
  padding: 11px 12px !important;
  width: 100% !important;
  min-width: 0 !important;
}
main#main .filter .select input:focus {
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  outline: none !important;
}
main#main .filter .select i {
  color: var(--color-text-muted) !important;
  -webkit-flex-shrink: 0 !important;
  flex-shrink: 0 !important;
}
/* Options list when a filter is open */
main#main .filter [role="listbox"],
main#main .filter .h-100.z-150 > ul {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: 10px !important;
  -webkit-box-shadow: var(--shadow-md) !important;
  box-shadow: var(--shadow-md) !important;
  padding: 4px !important;
  z-index: 500 !important;
}
main#main .filter [role="option"],
main#main .filter .h-100.z-150 > ul > li {
  border-radius: 7px !important;
  padding: 9px 12px !important;
  font-size: 0.88rem !important;
  cursor: pointer !important;
}
main#main .filter [role="option"]:hover,
main#main .filter .h-100.z-150 > ul > li:hover {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  color: var(--color-secondary) !important;
}

/* ---- Conditions card ---- */
main#main .filter-container__item > h2 {
  font-size: 0.73rem !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
  color: var(--color-ink) !important;
  border: none !important;
  padding: 0 !important;
  margin: 16px 0 8px !important;
  display: block !important;
}
main#main .filter-container__item > h2 ~ p {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  border-left: 3px solid var(--color-secondary) !important;
  border-radius: 10px !important;
  padding: 12px 16px !important;
  margin: 0 !important;
  color: var(--color-text) !important;
  font-size: 0.85rem !important;
  line-height: 1.65 !important;
}

/* ---- Group size stepper ---- */
main#main span.number-picker {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-align-items: stretch !important;
  align-items: stretch !important;
}
main#main .number-picker__button {
  width: 40px !important;
  min-height: 42px !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1.5px solid var(--color-border-mid) !important;
  color: var(--color-secondary) !important;
  font-size: 1.1rem !important;
  font-weight: 700 !important;
  padding: 0 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
main#main .number-picker__button--minus { border-radius: 10px 0 0 10px !important; border-right: none !important; }
main#main .number-picker__button--plus  { border-radius: 0 10px 10px 0 !important; border-left: none !important; }
main#main .number-picker__button:hover:not([disabled]) {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
}
main#main .number-picker__button[disabled] { color: var(--color-text-faint) !important; cursor: not-allowed !important; }
main#main input.number-picker__input {
  width: 64px !important;
  text-align: center !important;
  border-radius: 0 !important;
  border: 1.5px solid var(--color-border-mid) !important;
  padding: 9px 6px !important;
}

/* ---- Date field ---- */
main#main .datepicker__input-container {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1.5px solid var(--color-border-mid) !important;
  border-radius: 10px !important;
  padding: 2px 10px !important;
  color: var(--color-text-muted) !important;
}
main#main .datepicker__input-container:focus-within {
  border-color: var(--color-secondary) !important;
  -webkit-box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
  box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
}
main#main input.datepicker__input {
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  background: transparent !important;
  width: 3.4em !important;
  text-align: center !important;
  padding: 9px 2px !important;
}
main#main input.datepicker__input:focus { outline: none !important; border: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; }
main#main input.datepicker__input--s { width: 2.5em !important; }
main#main .datepicker__btn {
  width: 44px !important;
  height: 44px !important;
  border-radius: 10px !important;
  border: none !important;
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  color: var(--color-secondary) !important;
  font-size: 1rem !important;
  margin-left: 8px !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
main#main .datepicker__btn:hover {
  background: var(--color-secondary) !important;
  background-color: var(--color-secondary) !important;
  color: #ffffff !important;
}

/* ---- Calendar dialog ---- */
.dp-calendar {
  font-family: var(--font-base) !important;
  border-radius: 14px !important;
}
.dp-calendar__day { color: var(--color-text-muted) !important; font-weight: 700 !important; font-size: 0.72rem !important; }
button.dp-calendar__day-btn {
  border-radius: 9px !important;
  border: none !important;
  background: transparent !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  font-weight: 600 !important;
  color: var(--color-text) !important;
}
button.dp-calendar__day-btn:hover:not([disabled]) {
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  color: var(--color-secondary) !important;
}
button.dp-calendar__day-btn--selected,
button.dp-calendar__day-btn--selected:hover {
  background: var(--color-primary) !important;
  background-color: var(--color-primary) !important;
  color: #ffffff !important;
}
button.dp-calendar__day-btn--disabled {
  color: var(--color-text-faint) !important;
  opacity: 0.55 !important;
  cursor: not-allowed !important;
}
.dp-calendar__corner--selected { display: none !important; }
button.dp-calendar__header-btn {
  background: transparent !important;
  border: none !important;
  color: var(--color-ink) !important;
  font-weight: 800 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
button.dp-calendar-btn, button.dialog__close-button {
  background: var(--color-off-white) !important;
  background-color: var(--color-off-white) !important;
  border: none !important;
  border-radius: 8px !important;
  color: var(--color-ink) !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
}
button.dp-calendar-btn--disabled { color: var(--color-text-faint) !important; }
.dp-calendar__legend-key--unavailable { background: var(--color-border-mid) !important; border-radius: 3px !important; }

/* ---- Fine print under the date ---- */
main#main p.f-3xs {
  font-size: 0.74rem !important;
  color: var(--color-text-muted) !important;
  margin: 3px 0 0 !important;
  line-height: 1.5 !important;
}

/* ---- Selects fill the width of the content column ---- */
main#main .filter,
main#main .filter.filter--l {
  width: 100% !important;
  max-width: none !important;
}

/* ---- Timepicker container sizing ---- */
main#main .timepicker__outer,
main#main .timepicker__container {
  overflow: visible !important;
  height: auto !important;
  max-height: none !important;
}
main#main .timepicker__btn-container {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  gap: 8px !important;
  margin: 0 0 10px !important;
}
/* ---- Time slots ---- */
main#main .timepicker {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)) !important;
  gap: 18px !important;
}
main#main .timepicker__outer { min-width: 0 !important; }
main#main label.timepicker__time {
  display: inline-block !important;
  white-space: nowrap !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1.5px solid var(--color-border-mid) !important;
  border-radius: 10px !important;
  padding: 10px 16px !important;
  font-size: 0.88rem !important;
  font-weight: 600 !important;
  color: var(--color-ink) !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  margin: 0 !important;
  cursor: pointer !important;
  -webkit-transition: var(--transition) !important;
  transition: var(--transition) !important;
}
main#main label.timepicker__time:hover {
  border-color: var(--color-secondary) !important;
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
}
main#main label.timepicker__time:has(input:checked) {
  border-color: var(--color-secondary) !important;
  background: var(--color-secondary-light) !important;
  background-color: var(--color-secondary-light) !important;
  color: var(--color-secondary) !important;
  -webkit-box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
  box-shadow: 0 0 0 3px var(--color-secondary-glow) !important;
}
/* Availability badge on the chip corner — removed per request (too
   busy on screen). Hidden rather than deleted from the DOM/markup,
   since Envibe injects this element itself. */
main#main .timepicker__spaces {
  display: none !important;
}


/* ============================================================
   TIME SLOT CHIPS — sizing overrides
   Uses the full DOM chain (.timepicker .timepicker__container
   ul.timepicker__list > li.timepicker__list-item > ...) as the
   selector so these declarations outrank the width/height
   constraints Envibe's own stylesheet sets on the same elements.
   ============================================================ */
main#main .timepicker .timepicker__container ul.timepicker__list {
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-flex-wrap: wrap !important;
  flex-wrap: wrap !important;
  -webkit-flex-direction: row !important;
  flex-direction: row !important;
  gap: 12px !important;
  width: 100% !important;
  height: auto !important;
  max-height: none !important;
  min-height: 0 !important;
  overflow: visible !important;
  padding: 12px 0 4px !important;
  margin: 6px 0 0 !important;
  list-style: none !important;
}
main#main .timepicker .timepicker__container ul.timepicker__list > li.timepicker__list-item {
  display: block !important;
  width: auto !important;
  min-width: 0 !important;
  max-width: none !important;
  height: auto !important;
  -webkit-flex: 0 0 auto !important;
  flex: 0 0 auto !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: visible !important;
  position: relative !important;
  list-style: none !important;
}
main#main .timepicker .timepicker__container ul.timepicker__list > li.timepicker__list-item > label.timepicker__time {
  display: -webkit-inline-flex !important;
  display: inline-flex !important;
  -webkit-align-items: center !important;
  align-items: center !important;
  width: auto !important;
  min-width: -webkit-max-content !important;
  min-width: max-content !important;
  max-width: none !important;
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  white-space: nowrap !important;
  overflow: visible !important;
  line-height: 1.2 !important;
}
main#main .timepicker .timepicker__container ul.timepicker__list > li.timepicker__list-item > .timepicker__spaces {
  width: auto !important;
  height: auto !important;
  min-width: 0 !important;
  overflow: visible !important;
}


/* ============================================================
   BOOKING FORM CARD LAYOUT
   Each form row (ul.stack > li) becomes a white card on the
   page background. Filter fields stack vertically at full card
   width, so the Conditions block spans the same full width.
   ============================================================ */
main#main {
  background: transparent !important;
  background-color: transparent !important;
}
main#main form ul.stack {
  gap: 14px !important;
}
main#main form ul.stack > li {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: 14px !important;
  padding: 18px 20px !important;
  margin: 0 !important;
  list-style: none !important;
  -webkit-box-shadow: var(--shadow-xs) !important;
  box-shadow: var(--shadow-xs) !important;
}
/* Filters stack vertically; every field and the Conditions card
   render at full width instead of Envibe's default grid columns */
main#main ul.filter-container {
  display: block !important;
}
main#main li.filter-container__item {
  width: 100% !important;
  max-width: none !important;
}
main#main li.filter-container__item + li.filter-container__item {
  margin-top: 16px !important;
}
main#main li.filter-container__item.filter-container__item--s {
  max-width: none !important;
}
/* Intro text sits directly on the page background, aligned with the form */
main#main > div.stack > p,
main#main > div.stack > ol.page-actions {
  width: 100% !important;
  max-width: 680px !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
main#main > div.stack > p {
  color: var(--color-text) !important;
  padding: 0 4px !important;
}
/* Margin above the Check Price button, separating it from the form cards */
main#main form div.spread {
  margin-top: 16px !important;
}


/* ============================================================
   TIMETABLE SHIELD
   The Courses timetable positions session cards with measured
   pixel geometry. Restore Envibe-native metrics inside it so
   nothing we set globally can shift card placement.
   ============================================================ */
main#main [class*="timetable"] p:not([class*="filter"]):not([class*="dialog"]):not([class*="content-title"]),
main#main [class*="timetable"] li:not([class*="filter"]):not([class*="dialog"]):not([class*="content-title"]),
main#main [class*="timetable"] div:not([class*="filter"]):not([class*="dialog"]):not([class*="content-title"]),
main#main [class*="timetable"] span:not([class*="filter"]):not([class*="dialog"]):not([class*="content-title"]),
main#main [class*="timetable"] td:not([class*="filter"]):not([class*="dialog"]):not([class*="content-title"]) {
  font-size: revert !important;
  font-family: revert !important;
  line-height: revert !important;
  padding: revert !important;
  margin: revert !important;
}
main#main [class*="timetable"] ul:not([class*="filter"]):not([class*="dialog"]),
main#main [class*="timetable"] ol:not([class*="filter"]):not([class*="dialog"]) {
  gap: revert !important;
  padding: revert !important;
  margin: revert !important;
}
/* Safe, colour-only branding (no geometry) */
main#main .timetable__content-title {
  color: var(--color-ink) !important;
  font-family: var(--font-base) !important;
}


/* ============================================================
   MOBILE NAV LAYOUT
   1. Dropdown panels are clamped to stay fully on-screen instead
      of using the desktop max-content/absolute positioning
   2. The centered page title shrinks and its max-width leaves
      room for the Menu and Log In chips so nothing overlaps
   ============================================================ */
@media (max-width: 640px) {

  /* --- 1. Menu dropdown: pin inside the viewport --- */
  ul.spread.main-navigation .ddmenu {
    position: fixed !important;
    left: 8px !important;
    right: 8px !important;
    top: auto !important;
    margin: 6px 0 0 !important;
    transform: none !important;
    -webkit-transform: none !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    max-height: 70vh !important;
    overflow-y: auto !important;
    z-index: 400 !important;
  }

  /* --- Login panel: same treatment, anchored right --- */
  ul.spread.main-navigation form.login-form,
  ul.spread.main-navigation form.login-form .ddmenu {
    position: fixed !important;
    left: 8px !important;
    right: 8px !important;
    top: auto !important;
    margin: 6px 0 0 !important;
    transform: none !important;
    -webkit-transform: none !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    max-height: 80vh !important;
    overflow-y: auto !important;
    z-index: 400 !important;
  }

  /* --- 2. Nav row: chips hard against the edges --- */
  ul.spread.main-navigation > li:first-child {
    margin-right: auto !important;
  }
  ul.spread.main-navigation > li:last-child {
    margin-left: auto !important;
  }

  /* --- Title: smaller and centered; max-width is capped to
         100vw minus the combined width of the Menu and Log In
         chips (190px) so the title truncates before overlapping them --- */
  header.page-header .page-heading h1.full-width {
    font-size: 1.5rem !important;
    max-width: calc(100vw - 190px) !important;
    left: 50% !important;
    transform: translateX(-50%) !important;
    -webkit-transform: translateX(-50%) !important;
    right: auto !important;
    text-overflow: ellipsis !important;
    overflow: hidden !important;
    white-space: nowrap !important;
  }
}


/* ============================================================
   MOBILE TIMETABLE
   Envibe's timetable already has a native mobile mode (one day
   at a time, paged via arrow) so only page padding is adjusted
   here; no widths or scroll behavior are forced on the component.
   ============================================================ */
@media (max-width: 900px) {
  main#main.main-content--wide {
    padding-left: 12px !important;
    padding-right: 12px !important;
  }
}


/* ============================================================
   LOGIN PANEL ANCHORING
   The Log In trigger sits at the far right of the nav, so its
   panel is anchored to the right edge (right:0) and grows
   leftward. Anchoring it to the left edge instead would push
   the panel off the right side of the viewport.
   ============================================================ */
ul.spread.main-navigation > li:last-child div.vue-root,
ul.spread.main-navigation > li:last-child .h-100.z-150 {
  position: relative !important;
}
ul.spread.main-navigation > li:last-child form.login-form {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: 14px !important;
  padding: 16px 18px !important;
  -webkit-box-shadow: var(--shadow-md) !important;
  box-shadow: var(--shadow-md) !important;
  position: absolute !important;
  right: 0 !important;
  left: auto !important;
  top: 100% !important;
  margin-top: 6px !important;
  transform: none !important;
  -webkit-transform: none !important;
  width: -webkit-max-content !important;
  width: max-content !important;
  max-width: min(420px, calc(100vw - 16px)) !important;
  z-index: 300 !important;
}
/* box-sizing:border-box on the form and all its descendants keeps
   content inside the card's padding rather than overflowing it */
ul.spread.main-navigation > li:last-child form.login-form,
ul.spread.main-navigation > li:last-child form.login-form * {
  box-sizing: border-box !important;
}
ul.spread.main-navigation > li:last-child form.login-form ul.login-form__list,
ul.spread.main-navigation > li:last-child form.login-form ul.login-form__list > li {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  overflow: visible !important;
}
ul.spread.main-navigation > li:last-child form.login-form label {
  white-space: normal !important;
  overflow-wrap: break-word !important;
  max-width: 100% !important;
  margin-left: 0 !important;
  text-indent: 0 !important;
}
ul.spread.main-navigation > li:last-child form.login-form input.text-box {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
}
ul.spread.main-navigation > li:last-child form.login-form .ddmenu {
  position: static !important;
  right: auto !important;
  left: auto !important;
  transform: none !important;
  -webkit-transform: none !important;
  width: 100% !important;
  max-width: none !important;
  background: transparent !important;
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}


/* ============================================================
   MENU PANEL CORNERS
   Round the Menu dropdown card to the site-wide 14px radius;
   clip inner wrappers so no square white corners poke out.
   ============================================================ */
ul.spread.main-navigation li .ddmenu {
  border-radius: 14px !important;
  overflow: hidden !important;
}
ul.spread.main-navigation li .ddmenu > *,
ul.spread.main-navigation li .ddmenu ul.ddmenu-items {
  border-radius: inherit !important;
}
/* Logged-in account menu: same right-anchoring as the login
   panel so it never runs off-screen */
ul.spread.main-navigation > li:last-child .ddmenu {
  position: absolute !important;
  right: 0 !important;
  left: auto !important;
  transform: none !important;
  -webkit-transform: none !important;
  width: -webkit-max-content !important;
  width: max-content !important;
  max-width: min(340px, calc(100vw - 16px)) !important;
  z-index: 300 !important;
}
/* But not when it is the inner wrapper of the login form,
   which the form already positions */
ul.spread.main-navigation > li:last-child form.login-form .ddmenu {
  position: static !important;
  width: 100% !important;
  max-width: none !important;
}


/* ============================================================
   CHECKBOX LABELS
   Labels following a checkbox or radio sit inline beside the
   box, not stacked underneath it (Remember Me, consents, etc.)
   ============================================================ */
input[type="checkbox"] + label,
input[type="radio"]:not(.sr-only) + label {
  display: inline-block !important;
  margin: 0 0 0 8px !important;
  vertical-align: middle !important;
}
input[type="checkbox"],
input[type="radio"]:not(.sr-only) {
  vertical-align: middle !important;
  margin: 0 !important;
}


/* ============================================================
   TIMETABLE FILTER POPUP
   dialog.dialog is excluded from the [class*="timetable"] shield
   above (via :not([class*="dialog"])) and styled as a standard
   site card instead.
   ============================================================ */
dialog.dialog {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: 14px !important;
  padding: 0 !important;
  -webkit-box-shadow: var(--shadow-md) !important;
  box-shadow: var(--shadow-md) !important;
  overflow: visible !important;
  /* Fixed position anchors the dialog near the Filter button (top right) */
  position: fixed !important;
  top: 120px !important;
  right: 32px !important;
  left: auto !important;
  margin: 0 !important;
  max-width: min(340px, calc(100vw - 24px)) !important;
}
dialog.dialog::backdrop {
  background: #04142040 !important;
}
dialog.dialog > div,
dialog.dialog .dialog__box,
dialog.dialog .dialog_box {
  padding: 26px 28px 28px !important;
  display: -webkit-flex !important;
  display: flex !important;
  -webkit-flex-direction: column !important;
  flex-direction: column !important;
  gap: 18px !important;
  box-sizing: border-box !important;
}
dialog.dialog [class*="header"] {
  margin: 0 0 6px !important;
  padding: 0 !important;
  font-weight: 700 !important;
  color: var(--color-ink) !important;
}
dialog.dialog .filter,
dialog.dialog [role="combobox"] {
  margin: 0 !important;
  width: 100% !important;
}
main#main [class*="timetable"] [class*="filter"] select,
main#main [class*="timetable"] [class*="filter"] .select,
main#main [class*="timetable"] [class*="filter"] input {
  margin: 6px 0 !important;
}


/* ============================================================
   LOGIN CARD
   The hydrated DOM wraps the login form in an Envibe
   popup__container injected at runtime, so the form and its
   parts are targeted directly with no structural assumptions.
   ============================================================ */
form.login-form {
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: 14px !important;
  -webkit-box-shadow: var(--shadow-md) !important;
  box-shadow: var(--shadow-md) !important;
  padding: 22px 24px 24px !important;
  box-sizing: border-box !important;
}
form.login-form * {
  box-sizing: border-box !important;
}
form.login-form div.ddmenu.login-form__fieldset {
  background: transparent !important;
  border: none !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
}
form.login-form ul.login-form__list,
form.login-form ul.login-form__list > li {
  display: block !important;
  text-align: left !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  list-style: none !important;
}
form.login-form ul.login-form__list {
  gap: 14px !important;
}
form.login-form label {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  white-space: normal !important;
  overflow-wrap: break-word !important;
  text-align: left !important;
  margin: 0 0 6px !important;
  padding: 0 !important;
  text-indent: 0 !important;
  position: static !important;
  left: auto !important;
  transform: none !important;
  font-size: 0.68rem !important;
  letter-spacing: 0.05em !important;
}
form.login-form input[type="checkbox"] + label {
  display: inline-block !important;
  width: auto !important;
  max-width: none !important;
  margin: 0 0 0 8px !important;
  font-size: inherit !important;
  letter-spacing: inherit !important;
}
form.login-form input.text-box {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
}
/* ============================================================
   LOGIN LABEL TEXT SWAP
   Replaces the long "Membership Number or Email Address" label
   with shorter text that fits the card comfortably.
   ============================================================ */
form.login-form label[for="login-form-username"] {
  font-size: 0 !important;
  color: transparent !important;
  line-height: 0 !important;
  overflow: hidden !important;
  height: auto !important;
}
form.login-form label[for="login-form-username"]:before {
  content: "EMAIL OR MEMBER NUMBER" !important;
  font-size: 0.73rem !important;
  color: var(--color-text-muted) !important;
  font-weight: 600 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.08em !important;
  line-height: 1.4 !important;
  display: block !important;
  padding-left: 4px !important;
}