
/* ============================================================
   GOOGLE FONT IMPORT
   ============================================================ */
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@600;700;800&family=Inter:wght@400;500;600;700&display=swap');
/* Font notes â€” Ashburton District Council (ADC):
   ADC's brand guide/typeface was not supplied, so this pairing is a
   close visual match taken from the ADC/EA Networks Centre website
   (adc.govt.nz): a bold geometric-rounded sans for headings and a
   clean humanist sans for body copy. Montserrat and Inter are used
   here as free, open-license stand-ins for whatever proprietary/
   licensed fonts the real site is using â€” confirm against ADC's
   brand guide if/when it becomes available and swap in this block. */

/* ============================================================
   DESIGN TOKENS
   ============================================================ */
:root {
  /* Primary brand color â€” CTAs, active states, feeds --color-brand* below */
  --color-primary:         #0F4F79; /* ADC "Teal" â€” PMS 7700 */
  --color-primary-dark:    #003858; /* ADC "Dark Teal" â€” PMS 302 */
  --color-primary-light:   #e6eef3;

  /* Secondary accent â€” links, focus states, tabs, calendar/time selection */
  --color-secondary:       #0090A6; /* ADC "Turquoise" â€” PMS 7467 */
  --color-secondary-dark:  #00707F;
  --color-secondary-light: #e3f3f5;
  --color-secondary-glow:  #0090A626;

  /* Ink â€” headings, body emphasis, and dark surfaces (header, footer, table heads) */
  --color-ink:        #003858; /* ADC "Dark Teal" â€” PMS 302 */
  --color-ink-mid:    #0F4F79; /* ADC "Teal" */
  --color-ink-pale:   #eff2f3;
  --color-ink-glow:   #00385826;
  --color-white:      #ffffff;
  --color-off-white:  #f4f6f8;
  --color-surface:    #f8fafb;
  --color-border:     #e2e8ef;
  --color-border-mid: #cbd5e1;
  --color-text:       #464749; /* ADC "Dark Gray" â€” PMS Cool Gray 10 */
  --color-text-muted: #64748b;
  --color-text-faint: #94a3b8;

  /* Accent â€” used for CTAs/highlights that need to pop against teal (ADC's
     equivalent role to BMCC's Fern green accent) */
  --color-accent:      #F07F0A; /* ADC "Orange" â€” PMS 144 */
  --color-accent-dark: #c3660a;

  /* Typography â€” ADC brand font not confirmed (see note above the @import).
     Montserrat carries headings/nav weight, Inter carries body copy, with
     system sans-serif as the safety-net fallback. */
  --font-base:        'Inter', -apple-system, 'Segoe UI', Arial, Helvetica, sans-serif;
  --font-heading:     'Montserrat', -apple-system, 'Segoe UI', Arial, Helvetica, sans-serif;

  /* 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;
  overflow-anchor: auto;
}
/* Explicit overflow-anchor: auto (long shot, low risk)
   Scroll anchoring is on by default in Chrome/Firefox and nothing
   here was disabling it, so this doesn't change anything that
   wasn't already true â€” it's here in case some inherited context
   was suppressing it. It does NOT work in Safari/iOS at all, and
   even where supported it may not help if a content swap is too
   large for the browser's anchoring heuristic to find a stable
   point to lock onto. The real fix for that kind of issue is scroll
   handling in Envibe's own JS on the relevant interaction, which
   this stylesheet has no way to reach. */
body {
  overflow-anchor: auto;
}
*, *: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;
}
/* Headings carry Montserrat instead of the base Inter â€” matches the
   heading/body split seen on the ADC/EA Networks Centre website. */
h1, h2, h3, h4, h5, h6,
section.page-heading h1,
.footer-info__heading {
  font-family: var(--font-heading) !important;
  font-weight: 700 !important;
}
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 Teal 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>
   ============================================================ */
/* ============================================================
   HEADER BANNER
   White-to-teal fade banner (Option B, approved by client):
   solid white on the left where the logo sits, dissolving into
   the banner photo, with a dark teal wash over the photo's right
   half so the whole band reads as one connected piece rather than
   "white box + separate photo." 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-image:
    linear-gradient(to right, #ffffff 0%, #ffffff 22%, transparent 58%),
    linear-gradient(to right, transparent 0%, #003858b3 40%, #0F4F7940 70%, transparent 100%),
    url('/File/Custom/0a6c318ba4e96e5a62993e7745ff7b8a1865b2f0/Banner.jpg') !important;
  background-size: cover, cover, cover !important;
  background-position: center center, center center, center center !important;
  background-repeat: no-repeat, no-repeat, no-repeat !important;
  background-color: var(--color-primary) !important; /* fallback while the photo loads */
  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;
  background: var(--color-primary-dark) !important;
  padding: 8px 18px !important;
  border-radius: 999px !important;
}
/* Logo now sits on the solid-white left portion of the header fade
   (see #clientheader above), so it just needs to render plainly â€”
   no plate, glow, or background colour trick required. */
#clientLogoLink {
  background-image: url('/File/Custom/5349B1945EA737F38029777871144EDF8D3E3578/EAC_LongLogo_PMS.png') !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: 84px !important;
  display: inline-block !important;
  margin: 18px 0 0 30px !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: var(--color-accent) !important; /* ADC "Orange" â€” visible against the dark teal ticker background */
  -webkit-text-fill-color: var(--color-accent) !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.
   CAPTION TEXT CORRECTED (confirmed against real live markup): six of
   the seven captions below previously didn't match what Ashburton
   actually configured per module (e.g. their --tickets slot is used
   for Mini Golf bookings, --courses for Swim School enrolment â€” not
   the generic assumed copy this started with). Now copied verbatim
   from each tile's real <img alt="..."> text.
   NOT FULLY AUTOMATIC â€” genuine CSS limitation, not an oversight:
   these captions can't read the real alt text live via attr(), the
   way the icon+heading fallback below does. attr() can only pull an
   attribute from the SAME element the pseudo-element is attached to,
   and the alt lives on the <img> child, not on the a.main-menu__link
   the ::after belongs to â€” and <img> itself doesn't support ::before/
   ::after generated content in any current browser, so there's no
   element to attach a reading rule to either. That's specifically why
   the original approach needed a script in the first place.
   TO EDIT/ADD A CAPTION: copy the real alt text from Envibe (browser
   inspect on the tile, same as before) rather than writing new copy â€”
   the mismatch above happened because generic copy was written
   without checking the real alt text this client had configured. Add
   a new a.main-menu__link--MODULENAME::after rule below, split the
   alt text into "Heading\A Description" at the first period. */
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,
    #021d49f7 0%,
    #021d49bf 35%,
    #021d4933 65%,
    transparent 100%) !important;
  background: linear-gradient(to top,
    #021d49f7 0%,
    #021d49bf 35%,
    #021d4933 65%,
    transparent 100%) !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 Book one of our awesome facilities today" !important; }
a.main-menu__link--courses::after     { content: "Swim School\A Check out your enrollment and progress in the Swim School" !important; }
a.main-menu__link--groups::after      { content: "Group Fitness\A Lock in your spot in one of our awesome Group Fitness Classes" !important; }
a.main-menu__link--memberships::after { content: "Memberships\A Sign up a new or renew an existing membership" !important; }
a.main-menu__link--passes::after      { content: "Passes\A Grab a concession card to the pool or gym!" !important; }
a.main-menu__link--tickets::after     { content: "Mini Golf\A Book your mini golf game today!" !important; }
a.main-menu__link--facilities::after  { content: "Facility Availability\A Check out the spaces available in our facilities." !important; }

/* ---- Text-only tile fallback (no photo configured) ----
   When a tile has no image set in Web Policy, Envibe renders a plain
   <p class="main-menu__icon"><i .../></p> and
   <div><p class="main-menu__heading">Label</p></div> inside the same
   a.main-menu__link tile instead of the photo+caption markup above.
   Both were previously excluded from the generic paragraph colour
   rule (see main#main p:not(.main-menu__heading):not(.main-menu__icon)
   elsewhere in this file) but never given their own styling, so they
   fell through to Envibe's native default colour â€” dark on the
   tile's own dark navy background, which is why a newly-enabled tile
   with no photo (e.g. "Admissions") rendered almost invisibly.
   FUTURE-PROOF BY DESIGN: these target .main-menu__icon and
   .main-menu__heading directly, not a specific tile name/modifier
   class â€” so any future tile Envibe renders without a photo gets
   this same legible, centred styling automatically, with no CSS
   update needed when a new one appears.
   :has() (not a direct-child selector) is used deliberately so this
   still matches regardless of exactly how deep Envibe nests the
   heading/icon inside the tile. */
main#main a.main-menu__link:has(.main-menu__heading) {
  -webkit-align-items: center !important;
  align-items: center !important;
  -webkit-justify-content: center !important;
  justify-content: center !important;
  padding: 20px !important;
  text-align: center !important;
  gap: 10px !important;
}
main#main .main-menu__icon {
  color: #ffffff !important;
  font-size: 1.8rem !important;
  line-height: 1 !important;
  margin: 0 !important;
  text-shadow: 0 1px 3px #00000099 !important;
}
main#main .main-menu__heading {
  color: #ffffff !important;
  font-family: var(--font-base) !important;
  font-size: 1.15rem !important;
  font-weight: 700 !important;
  line-height: 1.4 !important;
  text-shadow: 0 1px 3px #00000099 !important;
  margin: 0 !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;
}
/* REGISTRATION DATE-OF-BIRTH FIELD â€” inline day/month/year shield
   Date of Birth uses Envibe's own .date-entry__input component:
   three narrow inline text inputs (day/month/year) meant to fit just
   "DD"/"MM"/"YYYY". This component isn't related to the booking
   form's .datepicker__input (different markup entirely), so it was
   never covered by the date-field fixes above â€” it was falling back
   to the generic input[type="text"] rule above, whose 14px
   horizontal padding is sized for full-width fields and was too wide
   for these narrow boxes, squeezing the placeholder text into the
   rounded corner.
   NOTE: this rule didn't exist in this file at all before â€” copied
   over from the Blue Mountains implementation of this same platform
   component. Worth confirming this site's registration page uses the
   identical .date-entry__input / .date-entry__input--year markup
   before relying on it. */
.date-entry__input {
  border: 1.5px solid var(--color-border-mid) !important;
  border-radius: var(--radius) !important;
  padding: 9px 8px !important;
  font-size: 0.9rem !important;
  background: var(--color-white) !important;
  background-color: var(--color-white) !important;
  color: var(--color-text) !important;
  text-align: center !important;
  width: 4.2em !important;
  height: auto !important;
  -webkit-appearance: none !important;
  appearance: none !important;
}
.date-entry__input--year {
  width: 5.4em !important;
}
/* REPEAT BOOKING DIALOG â€” inline number input shield
   "End after [ ] bookings" and "Every [ ] day" are each one line of
   running text with a number input embedded inline. Our generic
   input padding/font-size above widens those inputs enough that the
   trailing word 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 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.
   NOTE: originally targeted .stack--repeat, which doesn't exist in
   Envibe's markup â€” the dialog's actual classes are "stack
   dialog--repeat" (two separate classes on one div), so that selector
   never matched. Corrected to .dialog--repeat, confirmed against the
   live markup on the Blue Mountains implementation of this same
   component. */
.dialog--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; }

/* ------------------------------------------------------------
   ACCENT BAND â€” footer top strip
   BMCC's source file used a multi-colour "escarpment" graphic
   specific to the Blue Mountains brand guide (native flora/
   landscape palette), which has no equivalent for ADC. Replaced
   here with a simple two-tone gradient using ADC's own palette
   (Turquoise â†’ Teal â†’ Dark Teal, with an Orange accent stop) â€”
   easy to adjust or remove if ADC's brand guide specifies its
   own footer treatment once confirmed.
   ------------------------------------------------------------ */
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: 6px !important;
  background: linear-gradient(to right,
    #0090A6 0%,
    #0F4F79 45%,
    #003858 75%,
    #F07F0A 100%
  ) !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 var(--color-accent) !important; /* ADC "Orange" 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 + a secondary acknowledgement block.
   Carried over from the BMCC layout, which used this slot for an
   Acknowledgement of Country. Ashburton is a NZ council, so confirm
   with the client what (if anything) belongs here â€” e.g. a mana
   whenua/iwi acknowledgement in their own wording â€” before reusing
   this text; don't reuse BMCC's Australian wording as-is.
   The 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. */
.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.
   NOTE: previously this used a flex column + min-height:100vh
   (plus a flex-grow:1 :after spacer) to pad short pages out to a
   full viewport with navy fill below the footer. Removed: it was
   forcing every page's document height to at least 100vh regardless
   of actual content, which broke scroll-to-top on navigation between
   a long page and a short page (landed users scrolled down at/near
   the footer instead of at the top of the new page's content). Page
   height now tracks actual content again, same as before the reskin. */
section.full-page {
  display: flex !important;
  flex-direction: column !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;
  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;
  padding: 0 !important;
  line-height: 1 !important;
}
main#main .datepicker__btn svg,
main#main .datepicker__btn img,
main#main .datepicker__btn i {
  margin: 0 !important;
  display: block !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;
}

/* ============================================================
   BOOKING TYPE LABEL TEXT SWAP
   Renames the "Booking Type" label to "Booking Option" on the
   Add to Your Booking form, same approach as the login label fix
   above.
   ============================================================ */
label[for="BookingTypeKey"] {
  font-size: 0 !important;
  color: transparent !important;
  line-height: 0 !important;
  overflow: hidden !important;
  height: auto !important;
}
label[for="BookingTypeKey"]:before {
  content: "BOOKING OPTION" !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;
}

/* ============================================================
   HOME TILES THAT ADAPT TO THE NUMBER OF MODULES ENABLED
   Paste at the very END of the stylesheet, after every other rule.

   Envibe only outputs a tile for each module that is switched on, so the
   number of tiles changes whenever a module is enabled or disabled. This
   block sets the layout from the tile count, so the grid never leaves an
   empty gap and the last row is stretched to fill the width (instead of a
   ragged row of narrow tiles).

     tiles:  1 = one centred tile        2 = two side by side
             3 = three across            4 = 2 x 2
             5 = 3 + 2 (wide)            6 = 3 x 2
             7 = 4 + 3                   8 = 4 + 4
             9 = 3 x 3                   10+ = three across (last row may be short)

   Desktop widths only. Tablets and phones keep the existing 2-column and
   1-column layouts further up the file.
   ============================================================ */
@media screen and (min-width: 769px) {
  ul.main-menu {
    display: grid !important;
    grid-template-columns: repeat(12, minmax(0, 1fr)) !important;
    gap: 14px !important;
  }
  ul.main-menu > li {
    grid-column: span 4 !important;   /* three across by default */
    -webkit-flex: none !important;
    flex: none !important;
    max-width: none !important;
    min-width: 0 !important;
  }
  /* 1 tile: centred, half width */
  ul.main-menu:has(> li:nth-child(1):last-child) > li { grid-column: 4 / span 6 !important; }
  /* 2 or 4 tiles: two per row */
  ul.main-menu:has(> li:nth-child(2):last-child) > li,
  ul.main-menu:has(> li:nth-child(4):last-child) > li { grid-column: span 6 !important; }
  /* 5 tiles: three on top, two wide underneath */
  ul.main-menu:has(> li:nth-child(5):last-child) > li:nth-child(n+4) { grid-column: span 6 !important; }
}
/* 7 or 8 tiles: four across (only where there is room for four) */
@media screen and (min-width: 1000px) {
  ul.main-menu:has(> li:nth-child(8):last-child) > li { grid-column: span 3 !important; }
  ul.main-menu:has(> li:nth-child(7):last-child) > li:nth-child(-n+4) { grid-column: span 3 !important; }
}
/* 7 or 8 tiles on narrower desktops: three across, last row stretched */
@media screen and (min-width: 769px) and (max-width: 999px) {
  ul.main-menu:has(> li:nth-child(7):last-child) > li:nth-child(7) { grid-column: 1 / -1 !important; }
  ul.main-menu:has(> li:nth-child(8):last-child) > li:nth-child(n+7) { grid-column: span 6 !important; }
}
