
/*
 * <html> is the document scroll container - it must stay a normal block.
 * Applying display:flex / height:100% to the root element previously broke
 * viewport scrolling (window.scrollTo, native #anchor jumps, scroll-padding).
 * The sticky-footer flex column belongs on <body> only, sized with
 * min-height so the body grows with its content instead of being capped.
 */
html {
  height: 100%;
  overflow-x: hidden;
  scroll-behavior: smooth;
  scroll-padding-top: 80px;
}

body {
  min-height: 100%;
  margin: 0;
  font-family: 'Inter', 'Segoe UI', sans-serif;
  line-height: 1.6;
  display: flex;
  flex-direction: column;
}

a {
    color: var(--site-accent, #198754);
    text-decoration: none;
}

a:hover, a:focus {
    color: var(--site-accent-hover, #146c43);
    text-decoration: none;
}


/* Navbar */
.navbar-brand img {
  height: 55px;
}

/* Navbar tagline */
.navbar-brand {
  min-width: 0; /* Allow flex children (tagline) to shrink for ellipsis */
}
.navbar-tagline {
  display: block;
  font-size: 0.65rem;
  line-height: 1.2;
  margin-top: 2px;
  letter-spacing: 0.02em;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.navbar-brand .navbar-tagline--muted {
  color: rgba(var(--site-nav-text-rgb, 255,255,255), 0.65);
}
.navbar-brand .navbar-tagline--primary {
  color: rgba(var(--site-nav-text-rgb, 255,255,255), 1);
}
.navbar-brand .navbar-tagline--accent {
  color: var(--site-accent, #198754);
}
@media (max-width: 575.98px) {
  .navbar-tagline {
    font-size: 0.75rem;
    letter-spacing: 0;
  }
}
@media (max-width: 400px) {
  .navbar-brand img {
    max-height: 40px !important;
  }
}

@media (max-width: 330px) {
  .navbar-brand img {
    max-height: 30px !important;
  }
}

@media (max-width: 275px) {
  .navbar-brand img {
    max-height: 20px !important;
  }
}

.navbar {
  position: relative; 
  z-index: 1050;   
}

.booking-modal-offset {
  padding-top: clamp(90px, 12vh, 7rem);
}

.booking-modal-offset .modal-dialog {
  margin-top: 0;
}

.nav-link {
  transition: color 0.3s ease-in-out, text-decoration 0.3s ease-in-out;
}

.navbar-nav {
  align-items: center;
  gap: 0.5rem;
}

.nav-language-flag {
  width: 1rem;
  height: 1rem;
  min-width: 1rem;
  max-width: 1rem;
  min-height: 1rem;
  max-height: 1rem;
  object-fit: cover;
  display: inline-block;
  flex: 0 0 1rem;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.18);
  vertical-align: -0.125em;
}

.navbar .nav-link .nav-language-flag,
.navbar .dropdown-item .nav-language-flag {
  width: 1rem !important;
  height: 1rem !important;
  min-width: 1rem !important;
  max-width: 1rem !important;
  min-height: 1rem !important;
  max-height: 1rem !important;
}

@media (min-width: 992px) {
  .dropdown-hover {
    position: relative;
  }

  /* Hover bridge: the submenu sits ~0.15rem below the parent (see `top` on
     .dropdown-hover > .dropdown-menu). Without a bridge, moving the cursor
     across that gap leaves the parent's :hover region before reaching the
     menu, so the menu closes. This invisible pseudo-element extends the
     parent's hover area down over the gap. It only captures the pointer while
     the parent is hovered, so it never blocks clicks on items below it. */
  .dropdown-hover::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    top: 100%;
    height: 0.6rem;
    pointer-events: none;
  }

  .dropdown-hover:hover::after {
    pointer-events: auto;
  }

  .dropdown-hover:hover > .dropdown-menu {
    opacity: 1;
    visibility: visible;
    clip-path: inset(0 0 0 0 round 0.5rem);
    transform: translateY(0);
    pointer-events: auto;
    transition:
      opacity 0.38s ease,
      transform 0.42s cubic-bezier(0.22, 1, 0.36, 1),
      clip-path 0.42s cubic-bezier(0.22, 1, 0.36, 1);
  }

  .dropdown-hover > .dropdown-menu {
    display: block;
    position: absolute;
    right: 0;
	left: auto;
    top: calc(100% + 0.15rem);
    transform: translateY(-10px);
    width: auto;
    min-width: fit-content;
    max-width: 90vw;
    white-space: nowrap;
    padding: 1.5rem;
    background-color: var(--site-nav-dropdown-bg, #1e1e1e);
    border-radius: 0.5rem;
    box-shadow: 0 0.75rem 1.5rem rgba(0, 0, 0, 0.35);
    opacity: 0;
    visibility: hidden;
    clip-path: inset(0 0 100% 0 round 0.5rem);
    transform-origin: top center;
    will-change: opacity, transform;
    pointer-events: none;
    transition:
      opacity 0.38s ease,
      transform 0.42s cubic-bezier(0.22, 1, 0.36, 1),
      clip-path 0.42s cubic-bezier(0.22, 1, 0.36, 1);
    z-index: 9999;
  }
  
  .dropdown-column {
    width: auto;
    min-width: 13rem;
  }

  .dropdown-menu .dropdown-column {
    padding: 0 1.25rem;
  }

  .dropdown-hover > .dropdown-menu:not(.mega-menu-2col):not(.mega-menu-3col) .mega-dropdown {
    display: inline-flex;
    flex-direction: column;
  }

  .dropdown-hover > .dropdown-menu:not(.mega-menu-2col):not(.mega-menu-3col) .dropdown-column {
    min-width: 0;
  }

  .dropdown-hover .dropdown-header {
    color: var(--site-accent, #198754);
    font-weight: 600;
    margin-bottom: 0.75rem;
    text-align: left;
  }

  .dropdown-hover .dropdown-item {
    color: var(--site-nav-dropdown-text, #e0e0e0);
    font-size: 0.95rem;
    padding: 0.25rem 0;
    transition: color 0.3s ease-in-out;
  }

  .dropdown-hover .dropdown-item:hover {
    color: var(--site-nav-dropdown-accent, var(--site-accent, #198754));
    text-decoration: underline;
    background-color: transparent;
  }

  /* Ensure Bootstrap click-toggled dropdowns are visible on desktop */
  .navbar-nav .dropdown-menu.show {
    opacity: 1;
    visibility: visible;
    clip-path: inset(0 0 0 0 round 0.5rem);
    transform: translateY(0);
    pointer-events: auto;
  }

  /* Bootstrap adds a `[data-bs-popper]` attribute when a dropdown is
     click-toggled, which pulls in its built-in
     `margin-top: var(--bs-dropdown-spacer)` (~2px). Our hover dropdowns are
     positioned purely by `top:`, so on hover there is no such margin - meaning a
     click shifted the open menu down ~2px versus its hover position (the "jump").
     Zero the popper margin so click and hover resolve to the same spot. */
  .dropdown-hover > .dropdown-menu,
  .dropdown-hover > .dropdown-menu[data-bs-popper] {
    margin-top: 0;
  }

  /* 2-column mega-menu: used when a dropdown has 4+ sections.
     Two auto-sized grid columns so the menu shrink-wraps to its content and the
     container's symmetric padding shows on BOTH edges. (A fixed max-width with
     50%-wide nowrap columns made the wider right column overflow its box and eat
     the right-edge padding.) */
  .dropdown-hover > .dropdown-menu.mega-menu-2col {
    min-width: 420px;
    max-width: 90vw;
  }
  .mega-menu-2col .mega-dropdown {
    display: grid !important;
    grid-template-columns: repeat(2, max-content);
  }
  .mega-menu-2col .dropdown-column {
    width: auto;
    min-width: 0;
    box-sizing: border-box;
  }

  /* Two-column layout for simple dropdowns with many items */
  .dropdown-menu.dropdown-menu-columns {
    -webkit-columns: 2;
       -moz-columns: 2;
            columns: 2;
    -webkit-column-gap: 0;
       -moz-column-gap: 0;
            column-gap: 0;
    min-width: 400px;
    white-space: nowrap;
  }
  .dropdown-menu.dropdown-menu-columns > li {
    -webkit-column-break-inside: avoid;
            page-break-inside: avoid;
                 break-inside: avoid;
  }

  /* Three-column layout for dropdowns */
  .dropdown-menu.dropdown-menu-columns-3 {
    -webkit-columns: 3;
       -moz-columns: 3;
            columns: 3;
    -webkit-column-gap: 0;
       -moz-column-gap: 0;
            column-gap: 0;
    min-width: 600px;
    white-space: nowrap;
  }
  .dropdown-menu.dropdown-menu-columns-3 > li {
    -webkit-column-break-inside: avoid;
            page-break-inside: avoid;
                 break-inside: avoid;
  }

  /* Three-column mega-menu layout: same auto-sized grid approach as 2col so the
     menu shrink-wraps and padding stays symmetric on both edges. */
  .dropdown-hover > .dropdown-menu.mega-menu-3col {
    min-width: 630px;
    max-width: 90vw;
  }
  .mega-menu-3col .mega-dropdown {
    display: grid !important;
    grid-template-columns: repeat(3, max-content);
  }
  .mega-menu-3col .dropdown-column {
    width: auto;
    min-width: 0;
    box-sizing: border-box;
  }
}

@media (max-width: 991.98px) {
  .navbar-collapse {
    text-align: center;
  }

  .site-navbar .navbar-collapse {
    /* vh is the fallback; dvh tracks the live viewport so the menu stays
       clear of the mobile browser's bottom toolbar (otherwise the last
       items, e.g. login, get hidden behind it). */
    max-height: calc(100vh - 5rem);
    max-height: calc(100dvh - 5rem);
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 1rem;
  }

  /* During Bootstrap's expand/collapse height animation the inner content is
     momentarily taller than the animating box. With overflow-y:auto active the
     browser paints a scrollbar for that instant, which flickers in and out.
     Keep overflow hidden while the menu is animating and only allow scrolling
     once it is fully open (Bootstrap swaps .collapsing → .collapse.show on
     transition end). */
  .site-navbar .navbar-collapse.collapsing {
    overflow: hidden;
  }

  .site-navbar .navbar-collapse.show {
    overflow-y: auto;
  }

  .site-navbar .nav-item.dropdown > .dropdown-menu,
  .site-navbar .site-theme-switcher > .dropdown-menu,
  .site-navbar .site-user-menu > .dropdown-menu {
    position: fixed;
    left: 1rem;
    right: 1rem;
    top: 50%;
    width: auto;
    max-width: min(26rem, calc(100vw - 2rem));
    margin: 0 auto;
    max-height: min(80vh, 34rem);
    max-height: min(80dvh, 34rem);
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    padding: 0.75rem;
    background-color: var(--site-nav-dropdown-bg);
    border: 1px solid rgba(var(--site-border-rgb), 0.65);
    border-radius: 0.75rem;
    box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.35);
    z-index: 1200;
    inset-block-start: 50%;
    inset-block-end: auto;
    transform: translateY(calc(-50% - 0.75rem));
    clip-path: inset(0 0 100% 0 round 0.75rem);
  }
  
  .site-navbar .dropdown-menu {
    display: block;
    background-color: transparent;
    box-shadow: none;
    border: none;
    padding: 0;
    max-width: 100%;
    white-space: normal;
    overflow: hidden;
    max-height: 0;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px);
    clip-path: inset(0 0 100% 0);
    transform-origin: top center;
    will-change: max-height, opacity, transform, clip-path;
    transition:
      max-height 0.65s cubic-bezier(0.22, 1, 0.36, 1),
      opacity 0.4s ease,
      transform 0.45s cubic-bezier(0.22, 1, 0.36, 1),
      clip-path 0.45s cubic-bezier(0.22, 1, 0.36, 1),
      visibility 0s linear 0.65s;
  }
  
  .dropdown-menu.dropdown-menu-columns,
  .dropdown-menu.dropdown-menu-columns-3 {
    -webkit-columns: 1;
       -moz-columns: 1;
            columns: 1;
  }

  .site-theme-menu {
    min-width: 0;
  }

  .site-navbar .nav-item.dropdown > .dropdown-menu.show,
  .site-navbar .site-theme-switcher > .dropdown-menu.show,
  .site-navbar .site-user-menu > .dropdown-menu.show {
    max-height: min(80vh, 34rem);
    max-height: min(80dvh, 34rem);
    transform: translateY(-50%);
    clip-path: inset(0 0 0 0 round 0.75rem);
  }

  .site-theme-switcher .dropdown-toggle {
    justify-content: center;
    text-align: center;
  }
  
  .site-navbar .dropdown-menu.show,
  .site-navbar .dropdown.show .dropdown-menu {
    max-height: min(80vh, 34rem);
    max-height: min(80dvh, 34rem);
    opacity: 1;
    visibility: visible;
    transform: translateY(-50%);
    clip-path: inset(0 0 0 0 round 0.75rem);
    transition:
      max-height 0.65s cubic-bezier(0.22, 1, 0.36, 1),
      opacity 0.4s ease,
      transform 0.45s cubic-bezier(0.22, 1, 0.36, 1),
      clip-path 0.45s cubic-bezier(0.22, 1, 0.36, 1);
  }
  
  .dropdown-menu .mega-dropdown {
    display: flex;
    flex-wrap: wrap;
    padding: 0 1rem;
    gap: 1.5rem;
    justify-content: center;
  }
  
  .dropdown-menu .dropdown-column {
    flex: 1 1 45%;
    min-width: 200px;
    text-align: center; 
  }
  
  .site-navbar .dropdown-header {
    padding-left: 0;
    padding-right: 0;
    color: var(--site-accent, #198754);
    text-align: center;
    margin-bottom: 0.75rem;
  }

  .site-navbar .dropdown-item {
    color: white;
    padding-left: 0;
    padding-right: 0;
    text-align: center;
    transition: color 0.3s ease-in-out;
  }

  .site-navbar .dropdown-item:hover {
    color: var(--site-nav-dropdown-accent, var(--site-accent, #198754));
    text-decoration: underline;
    background-color: transparent;
  }
}

/* Jumbotron */
.jumbotron {
  background: linear-gradient(rgba(33, 37, 41, 0.85), rgba(2, 31, 16, 0.85)), url('../images/background6.jpg') no-repeat center center;
  background-size: cover;
  padding: 4rem 1rem;
  color: white;
  text-align: center;
  margin-bottom: 2rem;
}

.jumbotron .container {
  position: relative;
  z-index: 1;
  padding: 2rem;
  background: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0.45) 0%,
    rgba(0, 0, 0, 0.25) 60%,
    rgba(0, 0, 0, 0) 100%
  );
  border-radius: 8px;
}

.jumbotron .container::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 300px;
  height: 300px;
  background: radial-gradient(circle, rgba(0,0,0,0.4) 0%, rgba(0,0,0,0) 70%);
  z-index: 0;
}

@media (max-width: 768px) {
  .jumbotron {
    background-attachment: scroll;
  }
}

/* Cards */
.card {
  border: none;
  transition: box-shadow 0.2s ease;
  background-color: #f8f9fa;
  box-shadow: 0 0.125rem 0.4rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.10);
}


/* Override Bootstrap shadow utilities to use theme colour */
.shadow-sm {
  box-shadow: 0 0.125rem 0.4rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.10) !important;
}
.shadow {
  box-shadow: 0 0.5rem 1rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.18) !important;
}
.shadow-lg {
  box-shadow: 0 1rem 2rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.22) !important;
}

/* Hover must use !important to override the shadow utility classes above */

.card-body {
  background-color: #f8f9fa;
}

.card-title {
  color: var(--site-heading, #004d00);
}

h5.fw-semibold {
  font-weight: 600;
}

section i {
  display: block;
  margin-bottom: 0.5rem;
}

.btn-primary {
  background-color: var(--site-accent, #198754);
  border: none;
}

.btn-primary:hover {
  background-color: var(--site-accent-hover, #146c43);
}


/* Footer */
main#main-content {
  margin-bottom: 2.5rem;
}

footer {
  background-color: var(--site-footer-bg, #333333);
}

footer a:hover {
  color: var(--site-accent, #198754);
  text-decoration: underline;
}

footer a, footer p {
  color: var(--site-footer-text, #e0e0e0);
}

footer h6 {
  color: var(--site-footer-text, #ffffff);
}

/* Footer presets - distinct visual treatments for the dynamic footer layout.
   `padding`/`py-*` Bootstrap utilities carry !important, so the preset padding
   overrides must too, or the preset appears to "do nothing". */
/* Minimal: centred, compact, understated headings. */
.footer-preset-minimal .row { justify-content: center; text-align: center; }
.footer-preset-minimal { padding-top: 1.25rem !important; padding-bottom: 1.25rem !important; }
.footer-preset-minimal .footer-widget h6 { font-size: .75rem; letter-spacing: .08em; opacity: .85; }
.footer-preset-minimal .footer-widget { margin-bottom: .5rem; }
/* Mega: roomy, large headings, dividers between stacked widgets. */
.footer-preset-mega { padding-top: 3rem !important; padding-bottom: 1.5rem !important; }
.footer-preset-mega .footer-widget h6 { font-size: 1.2rem; margin-bottom: 1rem; letter-spacing: .02em; }
.footer-preset-mega .footer-widget { margin-bottom: 1.5rem; }
.footer-preset-mega .footer-widget + .footer-widget { border-top: 1px solid rgba(255, 255, 255, .12); padding-top: 1rem; }

/* Theme-integrated footer. Colours come from the active theme palette
   (--site-footer-bg/--site-footer-text), so the footer follows the site's
   light/dark mode automatically. A "custom" footer background sets local
   --ftr-bg/--ftr-text inline (with a readable light/dark text tone); the widget
   markup keeps its .text-white classes and we recolour them to --ftr-text so a
   light footer stays legible. */
.footer-themed {
    --ftr-bg: var(--site-footer-bg, #212529);
    --ftr-text: var(--site-footer-text, #ffffff);
    background-color: var(--ftr-bg) !important;
    color: var(--ftr-text);
}
.footer-themed h6,
.footer-themed .text-white,
.footer-themed a.text-white { color: var(--ftr-text) !important; }
.footer-themed .text-white-50 { color: var(--ftr-text) !important; opacity: .6; }
.footer-themed .btn-outline-light { color: var(--ftr-text); border-color: var(--ftr-text); }
.footer-themed .btn-outline-light:hover { background-color: var(--ftr-text); color: var(--ftr-bg); }

/* Footer bottom bar */
.footer-bottom-bar {
  border-top: 1px solid rgba(var(--site-footer-text-rgb, 224, 224, 224), 0.2);
  padding-top: 1rem;
  margin-top: 1.5rem;
  font-size: 0.85rem;
}

/* Footer divider */
hr.footer-divider {
  border-top: 1px solid var(--site-border, #dee2e6);
}

/* Back to top button */
.footer-back-to-top {
  position: fixed;
  bottom: 2rem;
  right: 2rem;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: var(--site-accent, #198754);
  color: #fff;
  border: none;
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 1040;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0,0,0,0.2);
  transition: opacity 0.2s;
}
.footer-back-to-top:hover { opacity: 0.85; }

/* Widget spacing within columns */
.footer-widget + .footer-widget { margin-top: 1.25rem; }

/* Business hours widget */
.footer-widget-hours dt { font-weight: 600; }
.footer-widget-hours dd { margin-bottom: 0.25rem; }

/* Footer logo */
.footer-logo { max-width: 180px; max-height: 60px; width: auto; height: auto; }

/* Newsletter signup widget */
.footer-newsletter-form .input-group { max-width: 320px; }

/* Utility */
.container.flex-grow-1 {
  flex: 1;
}

hr.section-divider {
  border-top: 2px solid #999;
  width: 60px;
  margin: 3rem auto;
}

.toast {
  z-index: 1100;
}

/* Notification centre toast styles live in utilities.css so BOTH the public
   site and the admin panel (which does not load style.css) render them. */

@keyframes fade-in {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

a, button, .nav-link, .dropdown-item {
  outline: none;
}

a:focus-visible, button:focus-visible, .nav-link:focus-visible, .dropdown-item:focus-visible {
  outline: 2px solid var(--site-focus, #198754);
  outline-offset: 2px;
  border-radius: 4px;
}

@media (max-width: 576px) {
  .card-body p {
    font-size: 0.95rem;
  }

  .jumbotron h1 {
    font-size: 1.75rem;
  }

  .jumbotron p.lead {
    font-size: 1rem;
  }

  footer .row {
    flex-direction: column;
    text-align: center;
  }
}

.cert-badge {
  height: 100px;
  object-fit: contain;
  border-radius: 8px;
  transition: transform 0.3s ease;
}

.cert-badge:hover {
  transform: scale(1.05);
}

.cert-item {
  width: 150px;
  min-width: 150px;
  flex-shrink: 0;
}

.wolfhound-walk {
  position: fixed;
  bottom: 100px;
  right: -200px;
  z-index: 9999;
  height: 120px;
  animation: walkReverse 10s linear forwards;
  display: none;
}
.wolfhound-walk.showing { display: block; }
.cursor-pointer { cursor: pointer; }

@keyframes walkReverse {
  from { right: -200px; }
  to { right: 100vw; }
}

#contact .form-control:focus {
  border-color: var(--site-focus, #198754);
  box-shadow: 0 0 0 0.25rem rgba(var(--site-focus-rgb, 25, 135, 84), 0.25);
}

#contact .btn-success {
  transition: background-color 0.3s ease;
}

#contact-faq .accordion-button:focus {
  box-shadow: 0 0 0 0.2rem rgba(var(--site-focus-rgb, 25, 135, 84), 0.25);
}

#contact-faq .accordion-button:not(.collapsed) {
  background-color: rgba(var(--site-accent-rgb, 25, 135, 84), 0.1);
  color: var(--site-heading, #004d00);
}

@keyframes fadeIn {
  0% { opacity: 0; transform: translateY(10px); }
  100% { opacity: 1; transform: translateY(0); }
}

.emailDisplay a,
.phoneDisplay a {
    text-decoration: none;
}

.emailDisplay a:hover,
.phoneDisplay a:hover {
    text-decoration: underline; 
}

.cms-text-justify {
  text-align: justify;
}

.cms-gallery-img {
  width: 100%;
  height: 250px;
  object-fit: cover;
}

/* Uploaded-video gallery items: play badge centred over the muted preview frame. */
.cms-gallery-video {
  display: block;
}
/* Embed (YouTube/Vimeo) gallery items: provider icon placeholder in the grid;
   the real sandboxed iframe is built only in the lightbox on demand. */
.cms-gallery-embed__icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #1a1a1a;
  color: #fff;
  font-size: 2.5rem;
  border-radius: 0.375rem;
}
.cms-gallery-playbadge {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 3rem;
  height: 3rem;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1rem;
  pointer-events: none;
}

.cms-card-link-wrap {
  display: block;
  height: 100%;
  border-radius: inherit;
}

.cms-card-link-wrap:hover,
.cms-card-link-wrap:focus {
  text-decoration: none;
}

.cms-card-link-wrap > .card {
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
  border: 1px solid rgba(var(--site-border-rgb, 222, 226, 230), 0.85);
}

.cms-card-link-wrap:hover > .card,
.cms-card-link-wrap:focus > .card {
  transform: translateY(-4px);
  box-shadow: 0 0.75rem 1.5rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.18);
  border-color: rgba(var(--site-accent-rgb, 25, 135, 84), 0.45);
}

.cms-card-link-wrap > .card::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  box-shadow: inset 0 0 0 1px rgba(var(--site-accent-rgb, 25, 135, 84), 0);
  transition: box-shadow 0.25s ease;
}

.cms-card-link-wrap:hover > .card::after,
.cms-card-link-wrap:focus > .card::after {
  box-shadow: inset 0 0 0 1px rgba(var(--site-accent-rgb, 25, 135, 84), 0.22);
}

.cms-card-hover-lift {
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.cms-card-hover-lift:hover,
.cms-card-hover-lift:focus-within {
  transform: translateY(-4px);
  box-shadow: 0 1rem 2rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.16);
}


.py-6-cms {
  padding-top: 5rem !important;
  padding-bottom: 5rem !important;
}

.cms-surface-soft {
  background: linear-gradient(180deg, rgba(var(--site-accent-rgb), 0.08), rgba(var(--site-surface-bg-rgb), 0.95));
}

.cms-surface-dark {
  background: linear-gradient(180deg, var(--site-nav-bg), var(--site-footer-bg));
  color: var(--site-nav-text);
}

.cms-surface-tint {
  background: linear-gradient(180deg, rgba(var(--site-accent-rgb), 0.12), rgba(var(--site-surface-bg-rgb), 0.92));
}

.cms-content-card {
  background: linear-gradient(180deg, rgba(var(--site-surface-hover-bg-rgb), 0.96), rgba(var(--site-surface-bg-rgb), 0.98));
  border: 1px solid rgba(var(--site-border-rgb), 0.65);
  box-shadow: 0 1rem 2rem rgba(17, 24, 39, 0.08);
}

.cms-legal-copy {
  max-width: 72ch;
  margin-inline: auto;
}

.cms-legal-copy p,
.cms-legal-copy li {
  line-height: 1.8;
}

.cms-eyebrow {
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--site-accent, #198754);
}

@media (max-width: 991.98px) {
  .site-navbar .navbar-collapse {
    text-align: center;
  }

  .site-navbar .navbar-nav {
    align-items: stretch;
    gap: 0;
    width: 100%;
  }

  .site-navbar .nav-item.dropdown {
    width: 100%;
  }

  .site-navbar .dropdown-menu {
    position: static !important;
    transform: none !important;
    width: min(100%, 38rem);
    max-width: 100%;
    margin: 0.25rem auto 0.75rem;
    padding: 0.5rem 0;
    background-color: rgba(var(--site-nav-bg-rgb), 0.38);
    border-color: rgba(var(--site-nav-text-rgb), 0.18);
    box-shadow: none;
  }

  .site-navbar .dropdown-menu .dropdown-item,
  .site-navbar .dropdown-menu .dropdown-header {
    text-align: center;
    white-space: normal;
  }

  .site-navbar .mega-dropdown {
    display: block !important;
  }

  .site-navbar .dropdown-column {
    width: 100%;
    min-width: 0;
    padding: 0.25rem 0.75rem !important;
  }

  /* Authoritative closed-state collapse for mobile dropdowns.
     A closed dropdown menu must add ZERO height under its parent. Several
     earlier rules style `.dropdown-menu` regardless of `.show` - the stale
     overlay base rule (`.nav-item.dropdown > .dropdown-menu`, padding 0.75rem
     + 1px border, specificity 0,4,0) and this block's own `padding: 0.5rem 0`
     - so `max-height: 0` alone is not enough: with box-sizing:border-box the
     vertical padding + border still render (~25px), leaving the "big gap" under
     Adopt / Support Us. This `:not(.show)` selector (specificity 0,5,0) beats
     them all and zeroes max-height, vertical padding, vertical border and
     overflow for the closed state only. The `.show` rules restore the open box. */
  .site-navbar .nav-item.dropdown > .dropdown-menu:not(.show),
  .site-navbar .site-theme-switcher > .dropdown-menu:not(.show),
  .site-navbar .site-user-menu > .dropdown-menu:not(.show) {
    max-height: 0;
    padding-top: 0;
    padding-bottom: 0;
    border-top-width: 0;
    border-bottom-width: 0;
    overflow: hidden;
  }
}

.cms-hero-section .cms-eyebrow {
  color: #fff;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
}

.cms-hero-panel {
  background: rgba(var(--site-nav-bg-rgb), 0.45);
  backdrop-filter: blur(3px);
  border: 1px solid rgba(var(--site-border-rgb), 0.25);
  border-radius: 1.5rem;
  padding: 1.75rem;
}

.cms-price-card-featured {
  position: relative;
  transform: translateY(-6px);
}

.cms-price-card-featured::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 2px solid rgba(var(--site-accent-rgb), 0.32);
  pointer-events: none;
}

.cms-pricing-features ul {
  padding-left: 1.1rem;
  margin-bottom: 0;
}

.cms-pricing-features li + li {
  margin-top: 0.45rem;
}

.cms-step-card .card-body,
.cms-price-card .card-body {
  display: flex;
  flex-direction: column;
}

.cms-step-number {
  font-weight: 800;
  font-size: 1.1rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.cms-steps-timeline {
  position: relative;
  padding-left: 1rem;
}

.cms-steps-timeline::before {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  left: 1.05rem;
  width: 2px;
  background: rgba(var(--site-accent-rgb), 0.18);
}

.cms-step-timeline-item {
  position: relative;
}

.cms-step-marker {
  position: absolute;
  left: 0;
  top: 0;
  width: 2.2rem;
  height: 2.2rem;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-weight: 700;
  box-shadow: 0 0.75rem 1.5rem rgba(var(--site-accent-rgb), 0.18);
}

.cms-divider-wrap hr {
  opacity: 1;
}

.cms-divider-label {
  white-space: nowrap;
}

.cms-accordion-cards .accordion-button:not(.collapsed) {
  background-color: rgba(var(--site-accent-rgb), 0.12);
  color: var(--site-heading);
  box-shadow: none;
}

.theme-accent,
.theme-accent-text,
.theme-accent-icon {
  color: var(--site-accent) !important;
}

.theme-muted {
  color: rgba(var(--site-body-text-rgb), 0.78) !important;
}

.theme-surface {
  background-color: var(--site-surface-bg) !important;
  color: var(--site-body-text) !important;
  border-color: rgba(var(--site-border-rgb), 0.65) !important;
}

.theme-surface-soft {
  background: linear-gradient(180deg, rgba(var(--site-accent-rgb), 0.08), rgba(var(--site-surface-bg-rgb), 0.98)) !important;
  color: var(--site-body-text) !important;
  border-color: rgba(var(--site-border-rgb), 0.65) !important;
}

.theme-surface-section {
  background-color: var(--site-surface-bg) !important;
  color: var(--site-body-text) !important;
  border: 1px solid rgba(var(--site-border-rgb), 0.65);
}

.theme-card {
  background-color: var(--site-surface-bg) !important;
  color: var(--site-body-text) !important;
  border: 1px solid rgba(var(--site-border-rgb), 0.65) !important;
}

a .theme-card {
  transition: box-shadow 0.2s ease;
}

a:hover .theme-card {
  box-shadow: 0 .5rem 1rem rgba(var(--site-accent-rgb), 0.25) !important;
}

.theme-card-footer {
  background-color: rgba(var(--site-body-bg-rgb), 0.48) !important;
  color: var(--site-body-text) !important;
  border-color: rgba(var(--site-border-rgb), 0.65) !important;
}

.theme-border-accent {
  border-color: var(--site-accent) !important;
}

.theme-overlay-surface {
  background: rgba(var(--site-body-bg-rgb), 0.76) !important;
  color: var(--site-body-text) !important;
}

.theme-event-dot {
  width: 0.8rem;
  height: 0.8rem;
  border-radius: 999px;
  display: inline-block;
  background: var(--event-dot-color, var(--site-accent));
  border: 1px solid rgba(var(--site-border-rgb), 0.55);
  flex: 0 0 0.8rem;
}

.cms-builder-heading {
  padding-top: 0.25rem;
  border-top: 1px solid rgba(0, 0, 0, 0.06);
  margin-top: 1rem;
}

.cms-builder-heading:first-child {
  border-top: 0;
  margin-top: 0;
  padding-top: 0;
}

/* Collapsible field-group members (Section Design / Advanced). A dedicated
   class - kept separate from Bootstrap's .d-none, which applyDependsOn() owns -
   so group-collapse and conditional-field visibility never clobber each other.
   A member is visible only when it has neither class. */
.cms-group-hidden { display: none !important; }

.social-icons a {
    text-decoration: none;     
    display: inline-flex;         
    align-items: center;         
    justify-content: center;      
}

.social-icons a:hover {
    text-decoration: none;       
}

.social-icons a:hover {
    transform: scale(1.1);
    transition: transform 0.2s ease-in-out;
}

.fade-in-section {
    opacity: 0;
    transform: translateY(20px);
    animation: fadeIn 0.8s ease-out forwards;
}

@keyframes fadeIn {
    100% {
        opacity: 1;
        transform: translateY(0);
    }
}

.badge.bg-secondary.text-decoration-none:hover {
    color: inherit;
    
    text-decoration: none;
}

a.badge:hover {
    text-decoration: none;
    color: inherit;
}

/* Keep Font Awesome glyphs inline and centered inside badges.
   Overrides the broad `section i { display:block; margin-bottom }` rule,
   whose bottom margin otherwise pushes the icon off-centre in flex badges. */
.badge > .fas,
.badge > .far,
.badge > .fab,
.badge > .fa-solid,
.badge > .fa-regular,
.badge > .fa-brands {
    display: inline-block;
    line-height: 1;
    margin-bottom: 0;
}

#searchTerms {
    max-width: 100%;
}

@media (max-width: 576px) {
    #searchTerms {
        width: 90%;
    }

    .list-group {
        font-size: 0.9rem;
    }
}

#backToTop {
    display: none;
}

mark {
    background-color: #ffc107;
    color: black;
    padding: 0 2px;
    border-radius: 3px;
}

.letter-link {
    text-decoration: none;
}

.letter-link:hover {
    text-decoration: underline;
}

#sidebarLetters {
    max-height: 80vh;
    overflow-y: auto;
}

@media (max-width: 768px) {
    #sidebarLetters {
        max-height: none;
        overflow: visible;
    }
}

h2.highlight {
    background-color: rgba(var(--site-accent-rgb, 25, 135, 84), 0.12);
    transition: background-color 0.6s ease;
    padding: 5px 10px;
    border-radius: 5px;
}

#quiz-container, #result-container {
    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}

#progress-bar-inner {
    transition: width 0.4s;
}

#quiz-container .card {
    box-shadow: none !important;
    transition: none !important;
    transform: none !important;
    border: 1px solid #ddd;
}

#quiz-container .card:hover,
#quiz-container .card:focus,
#quiz-container .card:active {
    box-shadow: none !important;
    transition: none !important;
    transform: none !important;
}

.logo-animate {
  position: relative;
  display: inline-block;
  line-height: 0;
  overflow: hidden;
}

.logo-animate::after {
  content: '';
  position: absolute;
  top: 25%;
  left: 0;
  width: 40%;
  height: 50%;
  background: radial-gradient(
    ellipse at center,
    rgba(0, 255, 135, 0.55) 0%,      
    rgba(0, 120, 60, 0.25) 60%,      
    rgba(0, 150, 75, 0) 100%       
  );
  transform: translateX(0%) skewX(-20deg);
  animation: logoSweepX 2.2s ease-out 1 forwards;
  pointer-events: none;
  z-index: 1;
  filter: blur(2px);
  border-radius: 50%;
}

.logo-animate::after {
  will-change: transform, opacity;
}

@keyframes logoSweepX {
  0% {
    transform: translateX(0%) skewX(-20deg);
    opacity: 0.3;
  }
  50% {
    opacity: 0.9;
  }
  100% {
    transform: translateX(100%) skewX(-20deg);
    opacity: 0;
    display: none;
  }
}

.navbar {
  position: relative;
  z-index: 1050;
  border-bottom: 1px solid rgba(255, 255, 255, 0.3);

}

.profile-photo-absolute {
  position: static; 
  margin-bottom: 2rem;
  text-align: center;
}

@media (min-width: 768px) {
  .profile-photo-absolute {
    position: absolute;
    top: 50%;
    left: 20px;
    transform: translateY(-50%);
    margin-bottom: 0;
    text-align: left;
  }
}

.profile-photo-wrapper {
  max-width: clamp(180px, 30vw, 250px);
  margin: 0 auto;
}

.profile-photo {
  width: 100%;
  height: auto;
  border-radius: 50% / 40%;
  object-fit: cover;
  box-shadow: 0 8px 20px rgba(0,0,0,0.2);
  border: 5px solid #fff;
  background-color: #fff;
}

@media (max-width: 767.98px) {
  .profile-photo-wrapper {
    max-width: 180px;
  }
}

.bio-text-container {
  margin-left: 0; 
  position: relative;
}

@media (min-width: 768px) {
  .bio-text-container {
    margin-left: 300px; 
  }
}

.bio-logo-background {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 80%;
  opacity: 0.07;
  transform: translate(-50%, -50%);
  pointer-events: none;
  z-index: 0; 
}

.bio-text-overlay {
  position: relative;
  z-index: 1; 
  text-align: justify; 
}

.list-group-item:hover {
  background-color: #e6f4ea;
  transition: background-color 0.3s ease;
}

.list-group-item:hover .fa-check-circle {
  transform: scale(1.2) rotate(10deg);
  transition: transform 0.3s ease;
}

#quiz-container, #result-container {
    box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}

#progress-bar-inner {
    transition: width 0.5s ease;
}
#quiz-container .card,
#result-container .card {
    box-shadow: none !important;
    transition: none !important;
    transform: none !important;
    border: 1px solid #ddd;
    background-color: #fff;
}

#continue-extended-container {
    margin-top: 30px;
    animation: fadeIn 1s ease forwards;
    opacity: 0;
}

@keyframes fadeIn {
    to { opacity: 1; }
}

#progress-bar {
    height: 20px;
}

#progress-bar-inner {
    height: 100%;
}

.card {
    border: 1px solid #e1e5eb;
    border-radius: 0.5rem;
    transition: none; 
    box-shadow: none; 
}

#quiz-container .btn, #result-container .btn {
    min-width: 120px;
}

#email-form input[type="email"] {
    max-width: 400px;
    margin: 0 auto;
}

.list-group-item input[type="radio"],
.list-group-item input[type="checkbox"] {
    display: none;
}

.list-group-item {
    cursor: pointer;
    transition: background-color 0.3s, color 0.3s;
}

.list-group-item.active {
    background-color: var(--site-accent, #198754) !important;
    color: var(--site-on-accent, #fff) !important;
    border-color: var(--site-accent, #198754) !important;
}

.list-group-item:hover {
    background-color: rgba(var(--site-accent-rgb, 25, 135, 84), 0.12);
    color: var(--site-body-text, #000);
}

#progress-bar-inner {
    background-color: var(--site-accent, #198754) !important;
}

.form-check-input:checked {
	background-color: var(--site-accent, #198754) !important;
	border-color: var(--site-accent, #198754) !important;
}

.form-check-input:checked:focus {
	box-shadow: 0 0 0 0.2rem rgba(var(--site-focus-rgb, 25, 135, 84), 0.25);
}

.form-check-label {
	color: var(--site-body-text, #212529);
}

/* Auth Pages (Login, Forgot Password, Reset Password)
   Modern refresh (PR9): roomier card, segmented-control method picker,
   generous spacing. The previous look had crowded nav-pills and dense
   input groups; now the sign-in surface reads more like a focused dialog. */
.auth-section {
	min-height: 70vh;
	margin: 0 calc(-0.5 * var(--bs-gutter-x, 0px));
	padding-left: calc(0.5 * var(--bs-gutter-x, 0px));
	padding-right: calc(0.5 * var(--bs-gutter-x, 0px));
	background:
		radial-gradient(ellipse at top, rgba(25, 135, 84, 0.06), transparent 60%),
		radial-gradient(ellipse at bottom, rgba(13, 110, 253, 0.04), transparent 60%);
}
.auth-card {
	max-width: 460px;
	border-radius: 16px;
}
.auth-card .card-body {
	padding: 2.25rem 2rem;
}
@media (min-width: 768px) {
	.auth-card .card-body {
		padding: 2.5rem 2.5rem;
	}
}
.auth-card h1 {
	letter-spacing: -0.01em;
}
.auth-card .nav-pills {
	background: rgba(0, 0, 0, 0.035);
	border-radius: 10px;
	padding: 0.25rem;
	gap: 0.25rem;
	display: grid;
	grid-template-columns: 1fr;
}
.auth-card .nav-pills.methods-2 { grid-template-columns: 1fr 1fr; }
.auth-card .nav-pills.methods-3 { grid-template-columns: 1fr 1fr 1fr; }
.auth-card .nav-pills.methods-4 { grid-template-columns: 1fr 1fr; }
.auth-card .nav-pills .nav-link {
	border-radius: 7px;
	padding: 0.55rem 0.75rem;
	color: var(--site-body-text, #212529);
	font-weight: 500;
	font-size: 0.9rem;
	text-align: center;
	transition: background-color 120ms ease, color 120ms ease;
}
.auth-card .nav-pills .nav-link.active {
	background-color: var(--bs-body-bg, #fff);
	color: var(--bs-success, #198754);
	box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
}
.auth-card .form-label {
	font-weight: 500;
	font-size: 0.9rem;
	margin-bottom: 0.4rem;
}
.auth-card .input-group-text {
	background-color: var(--bs-body-bg, #fff);
	color: var(--bs-secondary, #6c757d);
}
.auth-card .form-control {
	padding-top: 0.6rem;
	padding-bottom: 0.6rem;
}
.auth-card .btn {
	border-radius: 8px;
}
.auth-card .btn-success {
	font-weight: 600;
	padding-top: 0.7rem !important;
	padding-bottom: 0.7rem !important;
}
.auth-card .btn-outline-dark {
	border-color: rgba(0, 0, 0, 0.15);
}
.auth-card-narrow {
	max-width: 420px;
	border-radius: 16px;
}
[data-bs-theme="dark"] .auth-section {
	background:
		radial-gradient(ellipse at top, rgba(25, 135, 84, 0.10), transparent 60%),
		radial-gradient(ellipse at bottom, rgba(13, 110, 253, 0.07), transparent 60%);
}
[data-bs-theme="dark"] .auth-card .nav-pills {
	background: rgba(255, 255, 255, 0.05);
}
[data-bs-theme="dark"] .auth-card .nav-pills .nav-link.active {
	background-color: rgba(255, 255, 255, 0.08);
}
.js-custom-form-wrapper {
	border-radius: 12px;
	overflow: hidden;
}
.auth-code-input {
	letter-spacing: 0.3em;
	font-family: monospace;
	font-size: 1.5rem;
}
.auth-code-input-sm {
	letter-spacing: 0.5em;
	font-family: monospace;
}
.auth-code-display {
	letter-spacing: 0.15em;
}
.auth-strength-bar {
	height: 4px;
	border-radius: 2px;
	transition: all 0.3s;
	width: var(--strength-width, 0%);
}
.auth-icon-lg {
	font-size: 2.5rem;
}
.auth-icon-xl {
	font-size: 4rem;
}


/* 1. Kill the internal FullCalendar font-face mapping */
.fc-icon {
    font-family: 'Font Awesome 7 Pro' !important; /* Force a CSP-compliant font */
    font-weight: 900 !important;
    font-style: normal !important;
}

/* 2. Manually map the internal icon codes to FontAwesome glyphs */
.fc-icon-chevron-left:before { content: "\f053" !important; }
.fc-icon-chevron-right:before { content: "\f054" !important; }
.fc-icon-chevrons-left:before { content: "\f100" !important; }
.fc-icon-chevrons-right:before { content: "\f101" !important; }

/* 3. Hide the hidden font-face trigger if the browser is still being stubborn */
@font-face {
    font-family: 'fcicons';
    src: url(data:application/x-font-ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f);
    font-weight: normal;
    font-style: normal;
    font-display: block;
}

/* Public theme overrides */
:root {
    --site-accent: #198754;
    --site-accent-hover: #146c43;
    --site-accent-rgb: 25, 135, 84;
    --site-accent-hover-rgb: 20, 108, 67;
    --site-body-bg: #ffffff;
    --site-body-text: #212529;
    --site-body-text-rgb: 33, 37, 41;
    --site-surface-bg: #f8f9fa;
    --site-surface-bg-rgb: 248, 249, 250;
    --site-surface-hover-bg: #ffffff;
    --site-surface-hover-bg-rgb: 255, 255, 255;
    --site-heading: #004d00;
    --site-heading-rgb: 0, 77, 0;
    --site-nav-bg: #212529;
    --site-nav-bg-rgb: 33, 37, 41;
    --site-nav-text: #ffffff;
    --site-nav-text-rgb: 255, 255, 255;
    --site-nav-dropdown-bg: #1e1e1e;
    --site-nav-dropdown-bg-rgb: 30, 30, 30;
    --site-nav-dropdown-text: #e0e0e0;
    --site-nav-dropdown-text-rgb: 224, 224, 224;
    --site-footer-bg: #333333;
    --site-footer-bg-rgb: 51, 51, 51;
    --site-footer-text: #e0e0e0;
    --site-footer-text-rgb: 224, 224, 224;
    --site-border: #dee2e6;
    --site-border-rgb: 222, 226, 230;
    --site-focus: #198754;
    --site-focus-rgb: 25, 135, 84;
    --site-navbar-toggler-filter: none;
    --site-hero-overlay-start: rgba(33, 37, 41, 0.88);
    --site-hero-overlay-end: rgba(25, 135, 84, 0.58);
    --site-theme-transition: 180ms ease;
}

html,
body {
    background-color: var(--site-body-bg);
    color: var(--site-body-text);
}

.text-muted,
.text-body-secondary {
    color: rgba(var(--site-body-text-rgb), 0.78) !important;
}

.text-secondary {
    color: rgba(var(--site-body-text-rgb), 0.82) !important;
}

.bg-light {
    background-color: var(--site-surface-bg) !important;
    color: var(--site-body-text);
}

.card {
    background-color: var(--site-surface-bg);
    color: var(--site-body-text);
    border-color: rgba(var(--site-border-rgb), 0.65);
}

.card-header,
.card-footer {
    background-color: rgba(var(--site-body-bg-rgb), 0.48);
    border-color: rgba(var(--site-border-rgb), 0.65);
    color: inherit;
}

.card-header.bg-white,
.card-footer.bg-white {
    color: #212529;
}

/* Dark mode: hardcoded `bg-white` card headers/footers (e.g. the MyAccount
   dashboard cards) must follow the theme, not stay white. Bootstrap's .bg-white
   utility is `!important`, so the override has to be too. */
[data-bs-theme="dark"] .card-header.bg-white,
[data-bs-theme="dark"] .card-footer.bg-white {
    background-color: rgba(var(--site-body-bg-rgb), 0.48) !important;
    color: var(--site-body-text);
}

body,
.card,
.accordion-item,
.dropdown-menu,
.list-group-item,
.cookie-consent-banner {
    transition:
        background-color var(--site-theme-transition),
        border-color var(--site-theme-transition),
        color var(--site-theme-transition),
        box-shadow var(--site-theme-transition);
}

main,
section,
.container,
.card-body,
.accordion-body {
    color: inherit;
}

h1,
h2,
h3,
h4,
h5,
h6,
.card-title {
    color: var(--site-heading);
}

.modal-header .modal-title,
.offcanvas-header .offcanvas-title {
    color: inherit;
}

a {
    color: var(--site-accent);
}

a:hover,
a:focus {
    color: var(--site-accent-hover);
}

.text-success,
.text-success-emphasis,
.text-primary,
.text-primary-emphasis {
    color: var(--site-accent) !important;
}

i.text-success,
i.text-success-emphasis,
i.text-primary,
i.text-primary-emphasis,
.fas.text-success,
.far.text-success,
.fab.text-success,
.fas.text-primary,
.far.text-primary,
.fab.text-primary {
    color: var(--site-accent) !important;
}

.site-navbar,
.site-navbar.navbar-dark.bg-dark {
    background-color: var(--site-nav-bg) !important;
    position: sticky;
    top: 0;
    z-index: 1080;
}

/* Bootstrap modals must render above the sticky site navbar (z-index 1080).
   Defaults are 1055/1050 which leaves the modal header hidden behind the navbar. */
.modal {
    z-index: 1090;
}
.modal-backdrop {
    z-index: 1085;
}

/* Policy PDF embed in the View modal - give the <embed> a usable height
   that fits inside a scrollable modal-lg dialog. */
.policy-view-embed {
    height: 70vh;
    min-height: 400px;
    border: 1px solid var(--bs-border-color, #dee2e6);
    border-radius: 0.25rem;
}
/* iOS Safari doesn't render <embed> PDFs inline - collapse to avoid a blank box.
   The download fallback link below the embed remains usable. */
@supports (-webkit-touch-callout: none) {
    .policy-view-embed {
        height: auto;
        min-height: 0;
        display: none;
    }
}

html {
    scroll-padding-top: var(--resource-anchor-offset, 96px);
}

[id] {
    scroll-margin-top: var(--resource-anchor-offset, 96px);
}
.site-navbar.navbar-static,
.site-navbar.navbar-static.navbar-dark.bg-dark {
    position: relative;
}

/* Logo-center layout: logo above, nav below, centered */
.site-navbar.navbar-logo-center .container {
    align-items: center;
}
.site-navbar.navbar-logo-center .navbar-brand {
    text-align: center;
    margin-right: 0;
}
.site-navbar.navbar-logo-center .navbar-collapse {
    justify-content: center !important;
}
.site-navbar.navbar-logo-center .navbar-nav {
    justify-content: center;
    width: 100%;
}

/* Logo-right layout: reverse order */
@media (min-width: 992px) {
    .site-navbar.navbar-logo-right .container,
    .site-navbar.navbar-logo-right .container-fluid {
        flex-direction: row-reverse;
    }
    .site-navbar.navbar-logo-right .navbar-collapse {
        justify-content: flex-start !important;
    }
    .site-navbar.navbar-logo-right .navbar-brand {
        margin-left: 0;
        margin-right: 0;
    }
}

/* Centre layout also applies when the navbar uses a full-width container */
.site-navbar.navbar-logo-center .container-fluid {
    align-items: center;
}

/* Logo-top layout: logo on its own row with the menu stacked underneath. The
   inner wrapper already gets flex-column from Navbar.php; the nav row then
   honours the admin's chosen link alignment via justify-content-*. */
.site-navbar.navbar-logo-top .navbar-brand {
    margin-right: 0;
}
.site-navbar.navbar-logo-top .navbar-collapse,
.site-navbar.navbar-logo-top .navbar-nav {
    width: 100%;
}

/* Header divider / drop shadow under the navbar (branding_navbar_border) */
.site-navbar.navbar-border {
    border-bottom: 1px solid rgba(var(--site-nav-text-rgb, 255, 255, 255), 0.18);
}
.site-navbar.navbar-shadow {
    box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.18);
}

/* Custom navbar height keeps content vertically centred (branding_navbar_height) */
.site-navbar.navbar-custom-height {
    align-items: center;
}

/* Site-wide announcement bar (branding_announcement_*) shown above the navbar. */
.site-announcement-bar {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.75rem;
    padding: 0.4rem 2.25rem 0.4rem 1rem;
    position: relative;
    font-size: 0.9rem;
    line-height: 1.3;
    text-align: center;
}
.site-announcement-bar__inner { display: inline-flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; justify-content: center; }
.site-announcement-bar__link { font-weight: 600; text-decoration: underline; color: inherit; }
.site-announcement-bar__close {
    position: absolute; right: 0.5rem; top: 50%; transform: translateY(-50%);
    background: transparent; border: 0; color: inherit; font-size: 1.25rem; line-height: 1;
    opacity: 0.75; cursor: pointer; padding: 0 0.4rem;
}
.site-announcement-bar__close:hover { opacity: 1; }
.site-announcement-bar--info    { background: #0d6efd; color: #fff; }
.site-announcement-bar--warning { background: #ffc107; color: #1a1a1a; }
.site-announcement-bar--accent  { background: var(--site-accent, #198754); color: var(--site-on-accent, #fff); }
.site-announcement-bar--dark    { background: #212529; color: #f8f9fa; }

/* Dark-mode logo swap (branding_logo_dark_media_id). The default logo carries
   .logo-light and the optional dark variant .logo-dark; the active theme is on
   the root as data-site-theme. With no dark logo set, neither class is emitted
   so the markup/output is unchanged. */
.site-navbar .navbar-brand img.logo-dark { display: none; }
[data-site-theme="dark"] .site-navbar .navbar-brand img.logo-light { display: none; }
[data-site-theme="dark"] .site-navbar .navbar-brand img.logo-dark { display: inline-block; }

/* Nav-link spacing presets (branding_navbar_link_gap; 'md' = unchanged default) */
.site-navbar .navbar-nav.navbar-links-gap-sm {
    gap: 0.1rem;
}
.site-navbar .navbar-nav.navbar-links-gap-lg {
    column-gap: 1.25rem;
}

.site-navbar .navbar-brand,
.site-navbar .nav-link {
    color: var(--site-nav-text);
}

.site-navbar .container,
.site-navbar .navbar-nav {
    overflow: visible;
}

/* Let nav items wrap to a second row instead of overlapping the logo */
@media (min-width: 992px) {
    .site-navbar .navbar-nav {
        flex-wrap: wrap;
        row-gap: 0.25rem;
    }
    /* Keep the brand from shrinking narrower than its logo image */
    .site-navbar .navbar-brand {
        flex-shrink: 0;
    }
    /* "More" overflow mode: keep the nav on a single row - navbarOverflow.js
       moves the items that don't fit into the .nav-more-item dropdown. */
    .site-navbar.navbar-overflow-more .navbar-nav {
        flex-wrap: nowrap;
    }
}

/* Collapsed items keep their <li class="nav-item"><a class="nav-link"> markup
   but now sit inside a light dropdown menu, so restyle them to read as rows. */
.nav-more-menu {
    min-width: 13rem;
    max-height: 80vh;
    overflow-y: auto;
}
.nav-more-menu > .nav-item {
    width: 100%;
}
.nav-more-menu .nav-link {
    padding: 0.35rem 1rem;
    white-space: nowrap;
    color: inherit;
}
.nav-more-menu .nav-link:hover,
.nav-more-menu .nav-link:focus {
    color: inherit;
    background-color: var(--bs-dropdown-link-hover-bg, rgba(127, 127, 127, 0.18));
}
.nav-more-menu .nav-link.active {
    font-weight: 600;
}
/* A collapsed dropdown shows its children inline as an indented sub-list. */
.nav-more-menu .dropdown-menu {
    position: static;
    display: block;
    float: none;
    border: 0;
    box-shadow: none;
    background: transparent;
    padding: 0 0 0 1rem;
    margin: 0;
}
.nav-more-menu .dropdown-toggle::after {
    display: none;
}

/* ── Condensed navbar for medium desktops (992px–1199px) ── */
@media (min-width: 992px) and (max-width: 1199.98px) {
    .site-navbar .navbar-nav {
        gap: 0.15rem;
    }
    .site-navbar .nav-link {
        font-size: 0.9rem;
        padding-left: 0.35rem;
        padding-right: 0.35rem;
    }
    .site-navbar .navbar-brand img {
        max-height: 45px !important;
        height: auto !important;
    }
}

.site-navbar .nav-item.dropdown,
.site-navbar .site-theme-switcher,
.site-navbar .site-user-menu {
    position: relative;
}

.navbar .nav-link:hover,
.navbar .nav-link:focus,
.navbar .nav-link.active,
.navbar .nav-link.dropdown-toggle.show {
    /* Use the navbar-safe accent so the active/hover link stays readable on
       navbars whose background is close to the global accent (e.g. a blue
       accent on a blue navbar). Falls back to --site-accent for older cached
       theme CSS that predates --site-nav-accent. */
    color: var(--site-nav-accent, var(--site-accent));
}

.navbar .navbar-toggler {
    border-color: rgba(var(--site-nav-text-rgb), 0.32);
}

.navbar .navbar-toggler-icon {
    filter: var(--site-navbar-toggler-filter, none);
}

.navbar .dropdown-menu,
.dropdown-hover > .dropdown-menu {
    background-color: var(--site-nav-dropdown-bg);
    border: 1px solid rgba(var(--site-border-rgb), 0.65);
    color: var(--site-nav-dropdown-text);
}

.dropdown-hover .dropdown-header,
.navbar .dropdown-header {
    color: var(--site-accent);
}

.dropdown-hover .dropdown-item,
.navbar .dropdown-item {
    color: var(--site-nav-dropdown-text);
}

.dropdown-hover .dropdown-item:hover,
.dropdown-hover .dropdown-item:focus,
.navbar .dropdown-item:hover,
.navbar .dropdown-item:focus,
.navbar .dropdown-item.active {
    background-color: rgba(var(--site-accent-rgb), 0.12);
    color: var(--site-accent);
    text-decoration: none;
}

.site-navbar .dropdown-header,
.site-navbar .dropdown-header.text-success {
    color: var(--site-accent) !important;
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.09em;
}

.site-navbar .dropdown-item {
    border-radius: 0.375rem;
    margin: 0.0625rem 0;
    padding: 0.35rem 0.75rem;
    transition: background-color var(--site-theme-transition), color var(--site-theme-transition);
}

.site-navbar .dropdown-item:hover,
.site-navbar .dropdown-item:focus {
    background-color: rgba(var(--site-nav-dropdown-text-rgb), 0.08);
    color: var(--site-nav-dropdown-text);
}

.site-navbar .dropdown-item.active,
.site-navbar .dropdown-item.active:hover,
.site-navbar .dropdown-item.active:focus {
    background-color: transparent !important;
    color: var(--site-accent);
    font-weight: 600;
}

.navbar .dropdown-divider {
    border-color: rgba(var(--site-border-rgb), 0.45);
}

/* Nav CTA button items */
.site-navbar .nav-cta .btn {
    white-space: nowrap;
    padding: 0.35rem 1rem;
    font-weight: 600;
    font-size: 0.85rem;
    border-radius: 0.375rem;
}
@media (max-width: 991.98px) {
    .site-navbar .nav-cta .btn {
        margin: 0.25rem 0;
        text-align: center;
    }
}

.site-search-input {
    background-color: rgba(var(--site-nav-bg-rgb), 0.28);
    border-color: rgba(var(--site-border-rgb), 0.80);
    color: var(--site-nav-text);
}

.site-search-input::placeholder {
    color: rgba(var(--site-nav-text-rgb), 0.72);
}

.site-search-input:focus {
    background-color: rgba(var(--site-nav-bg-rgb), 0.44);
    border-color: var(--site-focus);
    color: var(--site-nav-text);
    box-shadow: 0 0 0 0.2rem rgba(var(--site-focus-rgb), 0.22);
}

.site-search-results {
    background-color: var(--site-nav-dropdown-bg);
    border: 1px solid rgba(var(--site-border-rgb), 0.65);
}

.site-search-submit {
    color: var(--site-accent);
    border-color: rgba(var(--site-accent-rgb), 0.7);
}

.site-search-submit:hover,
.site-search-submit:focus {
    background-color: var(--site-accent);
    border-color: var(--site-accent);
    color: #ffffff;
}

.site-theme-menu {
    min-width: 16rem;
    padding: 0.5rem;
    z-index: 1105;
}

/* Mode buttons and theme type items - consistent left alignment */
.site-theme-menu .site-theme-menu__item {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    width: 100%;
    text-align: left;
    justify-content: flex-start;
    padding: 0.625rem 0.875rem;
    border-radius: 0.5rem;
}

.site-theme-menu .dropdown-header {
    padding-left: 0.875rem;
    padding-right: 0.875rem;
}

.site-theme-option-icon,
.site-theme-swatch {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1rem;
    min-width: 1rem;
}

.site-theme-swatch {
    height: 0.8rem;
    border-radius: 999px;
    background: var(--site-theme-swatch);
    border: 1px solid rgba(var(--site-border-rgb), 0.55);
    flex: 0 0 1rem;
}

.custom-signature-field {
    border: 1px dashed rgba(var(--site-border-rgb), 0.7);
    border-radius: 1rem;
    background: rgba(var(--site-surface-bg-rgb), 0.88);
    padding: 0.9rem;
}

.custom-signature-pad {
    display: block;
    min-height: 180px;
    cursor: crosshair;
    background: var(--site-surface-bg);
}

.site-theme-cycle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.5rem;
    min-height: 2.5rem;
    border-radius: 999px;
    border: 1px solid rgba(var(--site-nav-text-rgb), 0.2);
    background-color: rgba(var(--site-nav-bg-rgb), 0.2);
    color: var(--site-nav-text);
    transition: background-color var(--site-theme-transition), border-color var(--site-theme-transition), color var(--site-theme-transition), transform var(--site-theme-transition);
}

.site-theme-cycle:hover,
.site-theme-cycle:focus-visible {
    background-color: rgba(var(--site-accent-rgb, 25, 135, 84), 0.16);
    border-color: rgba(var(--site-accent-rgb), 0.45);
    color: var(--site-nav-text);
    transform: translateY(-1px);
}

.site-theme-cycle:focus-visible {
    box-shadow: 0 0 0 0.2rem rgba(var(--site-focus-rgb), 0.22);
}

.site-theme-switcher .dropdown-toggle::after {
    margin-left: 0.5rem;
}

.js-site-theme-current-label {
    white-space: nowrap;
}

.site-theme-switcher .dropdown-item.active {
    font-weight: 600;
}

.site-theme-switcher .dropdown-item.active::after {
    content: "\f00c";
    font-family: 'Font Awesome 7 Pro';
    font-weight: 900;
    margin-left: auto;
    float: none;
}

@media (max-width: 991.98px) {
    .site-theme-menu {
        padding-top: 0.35rem;
        padding-bottom: 0.35rem;
    }

    .site-theme-menu .site-theme-menu__item,
    .site-theme-menu .dropdown-header {
        padding-left: 0.75rem;
        padding-right: 0.75rem;
    }
}

@media (min-width: 992px) {
    .site-navbar .nav-item.dropdown:not(.dropdown-hover) > .dropdown-menu,
    .site-navbar .site-theme-switcher > .dropdown-menu,
    .site-navbar .site-user-menu > .dropdown-menu {
        display: block;
        position: absolute;
        top: calc(100% + 0.35rem);
        left: auto;
        right: 0;
        min-width: 14rem;
        max-height: none;
        overflow: visible;
        opacity: 0;
        visibility: hidden;
        clip-path: inset(0 0 100% 0 round 0.5rem);
        transform: translateY(-10px);
        transform-origin: top center;
        pointer-events: none;
        margin-top: 0;
        z-index: 1105;
        transition:
            opacity 0.38s ease,
            transform 0.42s cubic-bezier(0.22, 1, 0.36, 1),
            clip-path 0.42s cubic-bezier(0.22, 1, 0.36, 1);
    }

    .site-navbar .nav-item.dropdown:not(.dropdown-hover) > .dropdown-menu.show,
    .site-navbar .site-theme-switcher > .dropdown-menu.show,
    .site-navbar .site-user-menu > .dropdown-menu.show {
        opacity: 1;
        visibility: visible;
        clip-path: inset(0 0 0 0 round 0.5rem);
        transform: translateY(0);
        pointer-events: auto;
    }

    .site-navbar .dropdown-menu.site-user-dropdown-menu {
        min-width: 16rem;
    }

    .site-navbar .navbar-collapse {
        min-height: 0;
    }
}

.jumbotron {
    color: var(--site-nav-text);
    background: linear-gradient(var(--site-hero-overlay-start), var(--site-hero-overlay-end)), url('../images/background6.jpg') no-repeat center center;
    background-size: cover;
}

.jumbotron .container {
    background: linear-gradient(
        to bottom,
        rgba(var(--site-nav-bg-rgb), 0.65) 0%,
        rgba(var(--site-nav-bg-rgb), 0.40) 60%,
        rgba(var(--site-nav-bg-rgb), 0.10) 100%
    );
}

.card,
#quiz-container .card,
#result-container .card,
.accordion-item,
.list-group-item {
    background-color: var(--site-surface-bg);
    border-color: var(--site-border) !important;
    color: var(--site-body-text);
}

.card-body {
    background-color: var(--site-surface-bg);
    color: var(--site-body-text);
}


.cms-card-hover-lift:hover,
.cms-card-hover-lift:focus-within {
    box-shadow: 0 1rem 2rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.16);
}


.btn-primary,
.btn-success {
    background-color: var(--site-accent);
    border-color: var(--site-accent);
    /* Use contrast-aware text colour so labels are legible on any accent */
    color: var(--site-on-accent, #ffffff);
    --bs-btn-color: var(--site-on-accent, #ffffff);
}

.btn-primary:hover,
.btn-primary:focus,
.btn-success:hover,
.btn-success:focus {
    background-color: var(--site-accent-hover);
    border-color: var(--site-accent-hover);
    color: var(--site-on-accent, #ffffff);
    --bs-btn-color: var(--site-on-accent, #ffffff);
}

.btn-primary:disabled,
.btn-success:disabled {
    color: var(--site-on-accent, #ffffff);
}

.btn-outline-success {
    color: var(--site-accent);
    border-color: rgba(var(--site-accent-rgb), 0.7);
}

.btn-outline-success:hover,
.btn-outline-success:focus {
    background-color: var(--site-accent);
    border-color: var(--site-accent);
    color: var(--site-on-accent, #ffffff);
}

footer,
footer.bg-dark,
.cookie-consent-banner {
    background-color: var(--site-footer-bg) !important;
    color: var(--site-footer-text);
}

footer a,
footer p,
footer h6,
footer li,
footer .small,
footer .text-white,
.cookie-consent-banner,
.cookie-consent-banner .text-white {
    color: var(--site-footer-text) !important;
}

footer a:hover,
.cookie-consent-banner a:hover {
    color: var(--site-accent) !important;
}

footer hr,
footer .border-secondary {
    border-color: rgba(var(--site-border-rgb), 0.45) !important;
}

.social-icons a {
    color: var(--site-footer-text) !important;
}

.cookie-consent-banner .btn-outline-light {
    color: var(--site-footer-text);
    border-color: rgba(var(--site-footer-text-rgb), 0.55);
}

.cookie-consent-banner .btn-outline-light:hover,
.cookie-consent-banner .btn-outline-light:focus {
    background-color: var(--site-accent);
    border-color: var(--site-accent);
    color: #ffffff;
}

.cookie-banner-actions {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 0.5rem;
    width: 100%;
}

.cookie-banner-actions .cookie-banner-settings-btn {
    grid-column: 1 / -1;
}

.cookie-banner-actions .btn {
    min-width: 0;
    overflow-wrap: anywhere;
}

@media (min-width: 768px) {
    .cookie-banner-actions {
        align-items: center;
        display: flex;
        flex: 0 0 auto;
        flex-wrap: nowrap;
        width: auto;
    }

    .cookie-banner-actions .cookie-banner-settings-btn {
        grid-column: auto;
    }

    .cookie-banner-actions .btn {
        white-space: nowrap;
    }
}

/* "Cookie settings" affordance rendered as <button> so the action is
 * semantically correct (it opens a dialog, not navigates) and works in
 * no-JS environments without scrolling the page to top. Styled to read as
 * a link; hover/focus surfaces an underline so the interactive state is
 * discoverable.
 */
[data-cookie-settings-open] {
    background: transparent;
    border: 0;
}
/* Suppress Bootstrap's default coloured box-shadow ring (it clashes with the
 * dark footer), but restore a clear focus indicator for keyboard users via
 * :focus-visible so accessibility isn't sacrificed for cosmetics. */
[data-cookie-settings-open]:focus {
    box-shadow: none;
}
[data-cookie-settings-open]:focus-visible {
    outline: 2px solid currentColor;
    outline-offset: 2px;
}
[data-cookie-settings-open]:hover,
[data-cookie-settings-open]:focus {
    text-decoration: underline !important;
    opacity: 1 !important;
}

.form-control:focus,
.form-select:focus,
#contact .form-control:focus {
    border-color: var(--site-focus);
    box-shadow: 0 0 0 0.25rem rgba(var(--site-focus-rgb), 0.22);
}

.input-group:focus-within {
    border-radius: var(--bs-border-radius);
    box-shadow: 0 0 0 0.25rem rgba(var(--site-focus-rgb), 0.22);
}

.input-group:focus-within > .form-control,
.input-group:focus-within > .input-group-text,
.input-group:focus-within > .btn {
    border-color: var(--site-focus);
}

.input-group > .form-control:focus,
.input-group > .btn:focus {
    box-shadow: none;
}

.input-group:has(> .form-control.is-invalid),
.was-validated .input-group:has(> .form-control:invalid) {
    border-radius: var(--bs-border-radius);
}

.input-group:has(> .form-control.is-invalid) > .form-control,
.input-group:has(> .form-control.is-invalid) > .input-group-text,
.input-group:has(> .form-control.is-invalid) > .btn,
.was-validated .input-group:has(> .form-control:invalid) > .form-control,
.was-validated .input-group:has(> .form-control:invalid) > .input-group-text,
.was-validated .input-group:has(> .form-control:invalid) > .btn {
    border-color: var(--bs-form-invalid-border-color);
}

.accordion-button:focus,
#contact-faq .accordion-button:focus {
    box-shadow: 0 0 0 0.2rem rgba(var(--site-focus-rgb), 0.22);
}

.accordion-button:not(.collapsed),
#contact-faq .accordion-button:not(.collapsed) {
    background-color: rgba(var(--site-accent-rgb), 0.12);
    color: var(--site-heading);
}

.list-group-item.active {
    background-color: var(--site-accent) !important;
    border-color: var(--site-accent) !important;
    color: #ffffff !important;
}

.list-group-item:hover {
    background-color: rgba(var(--site-accent-rgb), 0.14);
    color: var(--site-body-text);
}

#progress-bar-inner {
    background-color: var(--site-accent) !important;
}

.form-check-input:checked {
    background-color: var(--site-accent) !important;
    border-color: var(--site-accent) !important;
}

/* Default SVG fallback for themes where the per-theme block hasn't applied.
   Prefers dark text on light accents, white on dark accents. The admin layout
   outputs a more specific per-theme override that wins via selector specificity. */
.form-check-input:checked[type="checkbox"] {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type="radio"] {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23ffffff'/%3e%3c/svg%3e");
}
.form-switch .form-check-input:checked {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e");
}

.form-check-input:checked:focus {
    box-shadow: 0 0 0 0.2rem rgba(var(--site-focus-rgb), 0.25);
}

.form-check-label {
    color: var(--site-body-text, #212529);
}

mark {
    background-color: rgba(var(--site-accent-rgb), 0.18);
    color: var(--site-heading);
}

h2.highlight {
    background-color: rgba(var(--site-accent-rgb), 0.14);
}

.emailDisplay a,
.phoneDisplay a {
    color: inherit;
}

.review-card {
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.review-card:hover {
    box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.08) !important;
}

.review-stars {
    display: inline-flex;
    flex-wrap: nowrap;
    flex-shrink: 0;
    align-items: center;
    gap: 0.08rem;
    white-space: nowrap;
}

.review-stars i {
    flex: 0 0 auto;
    letter-spacing: 0.08rem;
}

.review-summary-card {
    padding: 1rem 1.25rem;
    border: 1px solid rgba(var(--site-border-rgb), 0.7);
    border-radius: 1rem;
    background: linear-gradient(180deg, rgba(var(--site-accent-rgb), 0.08), rgba(255, 255, 255, 0.98));
}

.gallery-page-hero {
    padding: clamp(1.5rem, 3vw, 2.5rem);
    border-radius: 1.5rem;
    background:
        radial-gradient(circle at top right, rgba(var(--site-accent-rgb, 25, 135, 84), 0.16), transparent 42%),
        linear-gradient(135deg, rgba(var(--site-nav-bg-rgb), 0.05), rgba(var(--site-surface-bg-rgb), 0.98));
    border: 1px solid rgba(var(--site-border-rgb), 0.72);
}

.gallery-page-hero__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    padding: 0.35rem 0.75rem;
    border-radius: 999px;
    background: rgba(var(--site-accent-rgb), 0.12);
    color: var(--site-heading);
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    margin-bottom: 1rem;
}

.gallery-page-stat {
    border-radius: 1.25rem;
}

.gallery-card {
    border-radius: 1.25rem;
    overflow: hidden;
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.gallery-card:hover,
.gallery-card:focus-within {
    transform: translateY(-4px);
    box-shadow: 0 1.2rem 2rem rgba(var(--site-body-text-rgb), 0.12) !important;
}

.gallery-card__media {
    display: block;
    aspect-ratio: 4 / 3;
    background: linear-gradient(180deg, rgba(var(--site-accent-rgb), 0.08), rgba(var(--site-surface-bg-rgb), 1));
    overflow: hidden;
    position: relative;
}

@media (min-width: 992px) {
    .gallery-card__media {
        aspect-ratio: 16 / 10;
    }
}

.gallery-card__media img,
.gallery-card__media video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.24s ease;
}

.gallery-card:hover .gallery-card__media img,
.gallery-card:focus-within .gallery-card__media img,
.gallery-card:hover .gallery-card__media video,
.gallery-card:focus-within .gallery-card__media video {
    transform: scale(1.03);
}

/* Play badge over a video first-frame cover (galleries archive + detail header). */
.gallery-card__playbadge {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1rem;
    pointer-events: none;
    z-index: 2;
}

.gallery-card__placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: rgba(var(--site-body-text-rgb), 0.45);
    font-size: 2rem;
}

.gallery-detail-card {
    border-radius: 1.5rem;
    overflow: hidden;
}

.gallery-detail-card__image {
    width: 100%;
    max-height: 360px;
    object-fit: cover;
    border-radius: 1rem;
    margin-bottom: 1rem;
}

.gallery-detail-copy {
    line-height: 1.8;
}

.gallery-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1rem;
}

.gallery-grid__item {
    appearance: none;
    border: 1px solid rgba(var(--site-border-rgb), 0.72);
    border-radius: 1.15rem;
    background: var(--site-surface-bg);
    padding: 0;
    overflow: hidden;
    text-align: left;
    transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}

.gallery-grid__item:hover,
.gallery-grid__item:focus-visible {
    transform: translateY(-3px);
    box-shadow: 0 1rem 1.75rem rgba(var(--site-body-text-rgb), 0.1);
    border-color: rgba(var(--site-accent-rgb), 0.55);
}

.gallery-grid__item:focus-visible {
    outline: 3px solid rgba(var(--site-focus-rgb), 0.28);
    outline-offset: 2px;
}

.gallery-grid__frame {
    display: block;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    position: relative;
    background: linear-gradient(180deg, rgba(var(--site-accent-rgb), 0.08), rgba(var(--site-surface-bg-rgb), 0.96));
}

.gallery-grid__frame img,
.gallery-grid__frame video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* Embed (YouTube/Vimeo) placeholder + play badge for gallery grids rendered
   outside the standalone Gallery page (e.g. the CMS specific-gallery block). */
.gallery-grid__embed {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #1a1a1a;
    color: #fff;
    font-size: 2.5rem;
}

.gallery-grid__playbadge {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1rem;
    pointer-events: none;
}

.gallery-grid__meta {
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
    padding: 0.9rem 1rem 1rem;
}

.gallery-grid__caption {
    font-weight: 600;
    color: var(--site-heading);
}

.gallery-grid__credit {
    font-size: 0.85rem;
    color: rgba(var(--site-body-text-rgb), 0.7);
}

.gallery-lightbox .modal-content {
    border-radius: 1.4rem;
    background: var(--site-surface-bg);
}

.gallery-lightbox__layout {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    gap: 1rem;
    align-items: center;
}

.gallery-lightbox__media {
    min-width: 0;
    height: min(70vh, 760px);
    border-radius: 1rem;
    overflow: hidden;
    background: rgba(var(--site-nav-bg-rgb), 0.04);
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
}

.gallery-lightbox__media img {
    width: auto;
    height: auto;
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    background: rgba(var(--site-nav-bg-rgb), 0.02);
}

.gallery-lightbox__nav {
    width: 3rem;
    height: 3rem;
    border: 0;
    border-radius: 999px;
    background: rgba(var(--site-nav-bg-rgb), 0.08);
    color: var(--site-heading);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.18s ease, background-color 0.18s ease;
}

.gallery-lightbox__nav:hover,
.gallery-lightbox__nav:focus-visible {
    background: rgba(var(--site-accent-rgb), 0.18);
    transform: scale(1.04);
}

@media (max-width: 991.98px) {
    .gallery-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

@media (max-width: 767.98px) {
    .gallery-grid {
        grid-template-columns: 1fr;
    }

    .gallery-lightbox__layout {
        grid-template-columns: 1fr;
    }

    .gallery-lightbox__nav {
        width: 100%;
        border-radius: 0.9rem;
    }
}

/* ============================================
   Dark mode enhancements
   ============================================ */

/* Title bar / heading text - ensure high contrast in dark mode */
[data-bs-theme="dark"] h1,
[data-bs-theme="dark"] h2,
[data-bs-theme="dark"] h3,
[data-bs-theme="dark"] h4,
[data-bs-theme="dark"] h5,
[data-bs-theme="dark"] h6,
[data-bs-theme="dark"] .card-title {
    color: #f1f3f5;
}

/* Ensure jumbotron/hero headings are always white regardless of theme */
.jumbotron h1,
.jumbotron h2,
.jumbotron .display-4,
.jumbotron .display-5 {
    color: #ffffff !important;
}

/* Block-builder Hero (and Hero Carousel) headings: inherit the hero's own text
   colour (--site-nav-text / the block's text_color) rather than the global
   --site-heading colour. Without this a default hero - dark band, no background
   image - renders a dark-green heading on near-black (unreadable). Mirrors the
   .jumbotron rule above; !important keeps it ahead of the many themed
   `… h2 { color: var(--site-heading) }` rules regardless of source order. */
.cms-hero-section :is(h1, h2, h3, h4, h5, h6, .display-3, .display-4, .display-5, .display-6),
.hero-carousel-section :is(h1, h2, h3, h4, h5, h6, .display-3, .display-4, .display-5, .display-6) {
    color: inherit !important;
}

/* Optional per-section subtitle (cms_partials.subtitle). A light, muted lead
   line above the section's content. Themes may override .cms-section-subtitle. */
.cms-section-subtitle {
    margin: 0 0 .75rem;
    font-size: 1.125rem;
    font-weight: 400;
    line-height: 1.4;
    opacity: .8;
}

/* Form inputs - readable text in dark mode */
[data-bs-theme="dark"] .form-control,
[data-bs-theme="dark"] .form-select {
    background-color: #2b3035;
    color: #dee2e6;
    border-color: #495057;
}

[data-bs-theme="dark"] .form-control::placeholder {
    color: #8c959d;
}

/* Checkboxes and radio buttons - visible unchecked state in dark mode */
[data-bs-theme="dark"] .form-check-input {
    border-color: #6c757d;
    background-color: #2b3035;
}

/* Checkboxes and radio buttons - clearly visible checked state in dark mode */
[data-bs-theme="dark"] .form-check-input:checked {
    background-color: var(--site-accent, var(--bs-primary, #198754)) !important;
    border-color: var(--site-accent, var(--bs-primary, #198754)) !important;
}

[data-bs-theme="dark"] .form-check-input:focus {
    border-color: var(--site-accent, var(--bs-primary, #198754));
    box-shadow: 0 0 0 0.25rem rgba(var(--site-accent-rgb, 25, 135, 84), 0.35);
}

/* Text readability in dark mode */
[data-bs-theme="dark"] .text-dark {
    color: #dee2e6 !important;
}

[data-bs-theme="dark"] .text-muted,
[data-bs-theme="dark"] .text-body-secondary {
    color: rgba(222, 226, 230, 0.78) !important;
}

/* Card and surface backgrounds for dark mode */
[data-bs-theme="dark"] .bg-light {
    background-color: #2b3035 !important;
    color: #dee2e6;
}

/* Admin topbar title text - strong contrast */
[data-bs-theme="dark"] .navbar-text,
[data-bs-theme="dark"] .admin-topbar .navbar-text {
    color: #f8f9fa !important;
}

/* Table text readability */
[data-bs-theme="dark"] .table {
    color: #dee2e6;
}

/* Badge text readability in dark mode */
[data-bs-theme="dark"] .badge.bg-info {
    color: #1a1a2e !important;
}

/* Review summary card dark mode background */
[data-bs-theme="dark"] .review-summary-card {
    background: linear-gradient(180deg, rgba(var(--site-accent-rgb), 0.08), rgba(43, 48, 53, 0.98));
}

/* Form switches - visible track and thumb in dark mode */
[data-bs-theme="dark"] .form-switch .form-check-input {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23adb5bd'/%3e%3c/svg%3e");
}

[data-bs-theme="dark"] .form-switch .form-check-input:checked {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ffffff'/%3e%3c/svg%3e");
}

/* Form labels - readable in dark mode */
[data-bs-theme="dark"] .form-label,
[data-bs-theme="dark"] .form-check-label {
    color: #dee2e6;
}

/* Input group addons - match dark input styling */
[data-bs-theme="dark"] .input-group-text {
    background-color: #343a40;
    color: #dee2e6;
    border-color: #495057;
}

/* Accordion - dark mode readability */
[data-bs-theme="dark"] .accordion-button {
    background-color: #2b3035;
    color: #dee2e6;
}

[data-bs-theme="dark"] .accordion-button:not(.collapsed) {
    background-color: rgba(var(--site-accent-rgb, 25, 135, 84), 0.15);
    color: #f1f3f5;
}

/* Modal dark mode */
[data-bs-theme="dark"] .modal-content {
    background-color: #2b3035;
    color: #dee2e6;
}

[data-bs-theme="dark"] .modal-header,
[data-bs-theme="dark"] .modal-footer {
    border-color: #495057;
}

/* CMS Video Block */
.cms-video-section .ratio { border-radius: 0.5rem; overflow: hidden; }

/* CMS Gallery Block */
.cms-gallery-item { overflow: hidden; border-radius: 0.5rem; }
.cms-gallery-item img { transition: transform 0.3s ease; }
.cms-gallery-item:hover img { transform: scale(1.05); }
.cms-gallery-item figcaption { font-size: 0.85rem; color: #6c757d; margin-top: 0.5rem; }
[data-cms-lightbox] { cursor: zoom-in; }

/* CMS Testimonial Block */
.cms-testimonial-avatar { width: 48px; height: 48px; object-fit: cover; }
.cms-testimonial-quote { position: relative; }
.cms-testimonial-featured { font-size: 1.15rem; }

/* CMS Alert Block */
.cms-alert-block .alert { margin-bottom: 0; }
.cms-alert-block .alert-heading { font-weight: 600; }

/* CMS image size utilities (safeHTML strips style on img, so use classes) */
.cms-img-160 { width: 160px; height: 160px; }
.cms-img-max-240 { max-height: 240px; width: auto; }
.cms-img-max-300 { max-height: 300px; width: auto; }

/* ── Accessibility: Skip-to-content link ─────────────────────────────── */
.skip-to-content {
    position: absolute;
    left: -9999px;
    top: auto;
    width: 1px;
    height: 1px;
    overflow: hidden;
    z-index: 10000;
}
.skip-to-content:focus {
    position: fixed;
    top: 10px;
    left: 10px;
    width: auto;
    height: auto;
    padding: 0.75rem 1.5rem;
    background: var(--site-accent, #198754);
    color: var(--site-on-accent, #fff);
    font-weight: 600;
    border-radius: 4px;
    outline: 2px solid var(--site-focus, #198754);
    outline-offset: 2px;
    text-decoration: none;
    font-size: 1rem;
}

/* ── Accessibility: Badge contrast overrides (light mode only) ────────── */
:root:not([data-bs-theme="dark"]) .badge.bg-warning {
    color: #000 !important;
}
:root:not([data-bs-theme="dark"]) .badge.bg-info {
    color: #000 !important;
}

/* ── Accessibility: Required field indicator ──────────────────────────── */
.required-label .visually-hidden-required {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* ── Accessibility: Reduced motion ───────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ── CSP-safe public utility classes ──────────────────────────────────── */
.icon-circle-lg    { width: 80px; height: 80px; }
.card-rounded      { border-radius: 12px; }
.sticky-card       { top: 80px; border-radius: 12px; }
.text-xxs          { font-size: 10px; }
.hero-icon-circle  { height: 160px; width: 160px; }
.newsletter-wrap   { max-width: 780px; }
.newsletter-card   { max-width: 420px; width: 100%; border-radius: 12px; }
.auth-page-section { min-height: 60vh; }
.auth-card-wide    { max-width: 520px; border-radius: 12px; }
.img-max-240       { max-height: 240px; }
.img-max-300       { max-height: 300px; }
.text-xs           { font-size: 0.75rem; }
.quiz-progress-bar { width: var(--progress-width, 0%); }
.pagination-jump-input { width: 5rem; text-align: center; }

/* Dynamic colour utilities - values set via JS setProperty() */
.gallery-cover                { object-position: var(--obj-pos, center); }
.event-colour-dot             { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background: var(--dot-bg, #6c757d); }
.event-cat-badge              { background-color: var(--badge-bg, #6c757d); }
.featured-badge               { color: var(--featured-color, #ffc107); }
.nav-badge-text               { font-size: 0.65em; vertical-align: middle; }

/* MCVC / CMS hero logo images - keep logo-style media proportionate */
#top > section img.mb-4 {
    display: block;
    max-width: min(100%, 420px);
    max-height: 180px;
    width: auto;
    height: auto;
    object-fit: contain;
}

/* ─── PWA install banner ───────────────────────────────────────────────
   Theme-aware via site CSS variables. Dark/light mode and theme-key
   swaps flow through automatically - no JS branching required.
   Rendered by www/assets/js/pwa-install.js when the browser fires
   beforeinstallprompt and feature_pwa_install_banner_enabled is on. */
.pwa-install-banner {
    position: fixed;
    right: 20px;
    bottom: 20px;
    left: auto;
    z-index: 9999;
    width: min(360px, calc(100vw - 32px));
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 18px 20px;
    background-color: var(--site-accent);
    color: var(--site-on-accent);
    border-radius: 14px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
    font-size: 14px;
    line-height: 1.45;
    /* Respect iOS safe area so the card clears the home indicator. */
    margin-bottom: env(safe-area-inset-bottom, 0px);
    animation: pwa-banner-in 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
}

@keyframes pwa-banner-in {
    from { opacity: 0; transform: translateY(16px); }
    to   { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
    .pwa-install-banner {
        animation: none;
    }
}

.pwa-install-banner__label {
    /* Leave room for the dismiss button pinned to the card's top-right. */
    padding-right: 26px;
    font-weight: 500;
}

.pwa-install-banner__actions {
    display: flex;
    align-items: center;
}

.pwa-install-banner__btn {
    flex: 1 1 auto;
    background-color: var(--site-on-accent);
    color: var(--site-accent);
    border: 1px solid transparent;
    padding: 9px 16px;
    border-radius: 8px;
    font-weight: 600;
    font-size: 14px;
    cursor: pointer;
    transition: filter 120ms ease, box-shadow 120ms ease, transform 120ms ease;
}

.pwa-install-banner__btn:hover,
.pwa-install-banner__btn:focus-visible {
    filter: brightness(0.94);
    outline: none;
    box-shadow: 0 0 0 3px rgba(var(--site-focus-rgb, 255, 255, 255), 0.35);
}

.pwa-install-banner__btn:active {
    transform: translateY(1px);
}

.pwa-install-banner__dismiss {
    position: absolute;
    top: 8px;
    right: 8px;
    width: 28px;
    height: 28px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: none;
    color: var(--site-on-accent);
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    border-radius: 50%;
    transition: background-color 120ms ease;
}

.pwa-install-banner__dismiss:hover,
.pwa-install-banner__dismiss:focus-visible {
    background-color: rgba(var(--site-on-accent-rgb, 255, 255, 255), 0.18);
    outline: none;
}

/* Narrow screens: stretch the card to a comfortable full-width float. */
@media (max-width: 480px) {
    .pwa-install-banner {
        right: 12px;
        left: 12px;
        bottom: 12px;
        width: auto;
    }
}

/* ── CMS Gallery block: masonry layout ─────────────────────────────────────
   Used by BlockRenderer::renderGallery when layout=masonry. Pure CSS
   multi-column approach - no JS, no extra dependencies. The --cms-gallery-gap
   custom property is set per-block by an inline (nonced) style block. */
.cms-gallery-masonry {
    column-gap: var(--cms-gallery-gap, 1rem);
}
.cms-gallery-masonry__item {
    break-inside: avoid;
    -webkit-column-break-inside: avoid;
    page-break-inside: avoid;
    margin-bottom: var(--cms-gallery-gap, 1rem);
    display: block;
}
.cms-gallery-masonry__item img {
    width: 100%;
    height: auto;
    display: block;
}
.cms-gallery-masonry__item .cms-gallery-trigger {
    display: block;
    width: 100%;
    padding: 0;
    border: 0;
    background: transparent;
    cursor: zoom-in;
}
.cms-gallery-masonry__item .cms-gallery-trigger:focus-visible {
    outline: 2px solid var(--site-accent, #0d6efd);
    outline-offset: 2px;
}
.cms-gallery-masonry-cols-2,
.cms-gallery-masonry-cols-3,
.cms-gallery-masonry-cols-4 {
    column-count: 1;
}
@media (min-width: 576px) {
    .cms-gallery-masonry-cols-2,
    .cms-gallery-masonry-cols-3,
    .cms-gallery-masonry-cols-4 {
        column-count: 2;
    }
}
@media (min-width: 992px) {
    .cms-gallery-masonry-cols-3 {
        column-count: 3;
    }
    .cms-gallery-masonry-cols-4 {
        column-count: 4;
    }
}

/* Forum karma rank pill colors. Inline style="background-color: ..." would
   fall through to default-src 'self' under our strict CSP (no style-src-attr
   or unsafe-inline), so the per-tier colors live as classes instead. The
   tier list is closed (defined in ForumKarma::RANKS); a new rank requires a
   matching class here. */
.forum-rank-pill {
    color: #ffffff;
}
.forum-rank-pill.forum-rank--master      { background-color: #7c3aed; }
.forum-rank-pill.forum-rank--veteran     { background-color: #0d6efd; }
.forum-rank-pill.forum-rank--regular     { background-color: #198754; }
.forum-rank-pill.forum-rank--contributor { background-color: #20c997; }
.forum-rank-pill.forum-rank--member      { background-color: #6c757d; }
.forum-rank-pill.forum-rank--newcomer    { background-color: #adb5bd; }
.forum-rank-pill.forum-rank--probation   { background-color: #dc3545; }

/* Karma summary accent (used on the profile-page Karma card heading + total)
   - same palette as the pill, but applied to colored text/icons rather than
   a filled badge background. */
.forum-rank-accent.forum-rank--master      { color: #7c3aed; }
.forum-rank-accent.forum-rank--veteran     { color: #0d6efd; }
.forum-rank-accent.forum-rank--regular     { color: #198754; }
.forum-rank-accent.forum-rank--contributor { color: #20c997; }
.forum-rank-accent.forum-rank--member      { color: #6c757d; }
.forum-rank-accent.forum-rank--newcomer    { color: #adb5bd; }
.forum-rank-accent.forum-rank--probation   { color: #dc3545; }

/* Small variant for the rank pill rendered inline with the profile name
   in the page heading - the default badge size dominates the h1. */
.forum-rank-pill--sm {
    font-size: 0.7em;
}
/* Karma total number on the profile page - display-6 weight with no
   extra line-height (the avatar/card has its own vertical rhythm). */
.forum-karma-total {
    line-height: 1;
}
/* Rank-tier legend on the profile page uses pointer cursor so the
   <details> caret is recognisably interactive. */
.forum-rank-tier-toggle {
    cursor: pointer;
}

/* ── Storefront product gallery, tabs & lightbox ──────────────────────────
   Behaviour in js/storefrontGallery.js. Selectors are scoped to the product
   detail page markup, so these rules are inert elsewhere on the site. */
.product-gallery-thumbs { width: 72px; flex-shrink: 0; }
.product-gallery-thumb,
.product-lightbox-thumb { width: 72px; height: 72px; padding: 0; background: #fff; }
.product-gallery-thumb img,
.product-lightbox-thumb img,
.product-gallery-thumb video,
.product-lightbox-thumb video { width: 100%; height: 100%; object-fit: cover; }
.product-gallery-thumb.active,
.product-lightbox-thumb.active {
    border-color: var(--site-accent, #0d6efd) !important;
    box-shadow: 0 0 0 2px var(--site-accent, #0d6efd);
}
.product-gallery-open { cursor: zoom-in; }

/* Video / embed gallery items (uploaded MP4/WebM + YouTube/Vimeo links). */
.product-thumb-embed,
.product-main-embed {
    width: 100%; height: 100%;
    background: #1a1a1a; color: #fff;
}
.product-thumb-embed { font-size: 1.5rem; }
.product-main-embed { font-size: 3rem; }
.product-thumb-playbadge {
    position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
    width: 1.75rem; height: 1.75rem; border-radius: 50%;
    background: rgba(0, 0, 0, 0.55); color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-size: 0.7rem; pointer-events: none;
}
.product-thumb-playbadge--lg { width: 3.5rem; height: 3.5rem; font-size: 1.25rem; }
.product-lightbox-frame video { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
.product-lightbox-embed { width: 100%; height: 100%; border: 0; aspect-ratio: 16 / 9; }
.product-tabs .nav-tabs .nav-link {
    color: var(--bs-body-color);
    border: 0;
    border-bottom: 2px solid transparent;
    background: transparent;
}
.product-tabs .nav-tabs .nav-link.active {
    color: var(--site-accent, #0d6efd);
    border-bottom-color: var(--site-accent, #0d6efd);
    background: transparent;
}
.product-tabs .tab-content { border-top: 0; }
.product-tab-panel,
.product-lightbox-panel {
    background: var(--site-surface-bg, var(--bs-body-bg));
    color: var(--site-body-text, var(--bs-body-color));
}
.product-lightbox-frame { min-height: 0; height: min(72vh, 760px); overflow: hidden; }
.product-lightbox-frame img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
.product-gallery-lightbox .carousel-control-prev,
.product-gallery-lightbox .carousel-control-next { width: 4rem; }
.product-gallery-lightbox .carousel-control-prev-icon,
.product-gallery-lightbox .carousel-control-next-icon {
    filter: invert(1) grayscale(100%);
    background-color: rgba(0, 0, 0, 0.4);
    border-radius: 50%;
    padding: 1rem;
}

/* Hero Carousel pause/play toggle (shown by cmsHeroCarousel.js when the
   carousel auto-advances). Sits in the bottom-right corner above the slides. */
.hero-carousel-section .hero-carousel-toggle {
    position: absolute;
    right: 1rem;
    bottom: 1rem;
    z-index: 3;
    width: 2.25rem;
    height: 2.25rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 0;
    border-radius: 50%;
    color: #fff;
    background-color: rgba(0, 0, 0, 0.45);
    transition: background-color 0.15s ease;
}
.hero-carousel-section .hero-carousel-toggle:hover,
.hero-carousel-section .hero-carousel-toggle:focus-visible {
    background-color: rgba(0, 0, 0, 0.7);
    outline: 2px solid #fff;
    outline-offset: 2px;
}

/* Whole-slide link: a slide with `slide_link_url` renders a .stretched-link
   that covers the pane. Bootstrap requires positioned content to ALSO carry a
   z-index to stay above it, so lift the per-slide buttons/links above the
   stretched-link's ::after (z-index 1) - otherwise clicks on a CTA would fall
   through to the slide link. (The pause toggle is excluded: it is already
   position:absolute with z-index:3 and lives outside the slide pane.) */
.hero-carousel-section .carousel-item .btn,
.hero-carousel-section .carousel-item a:not(.stretched-link) {
    position: relative;
    z-index: 2;
}

/* Hero background video layers (single hero + carousel slides). The <video>
   sits behind a tinted overlay, and the slide content is lifted above both. */
.hero-bg-video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 0;
    pointer-events: none;
}
.hero-bg-overlay {
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
}
.hero-bg-content {
    position: relative;
    z-index: 2;
}

/* Horizontal-scroll layout for card-grid list embeds (columns/scroll option). */
.cms-embed-scroll {
    overflow-x: auto;
    flex-wrap: nowrap;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
}
.cms-embed-scroll-item {
    flex: 0 0 clamp(240px, 80%, 340px);
    scroll-snap-align: start;
}

/* ── CMS block upgrades (2026-06 block-functionality batch) ───────────────── */

/* logo_cloud auto-scroll marquee. The track holds the item set twice, so the
   -50% translate loops seamlessly. Pauses on hover; static when the visitor
   prefers reduced motion. */
.cms-marquee { overflow: hidden; }
.cms-marquee-track { display: flex; width: max-content; align-items: center; }
.cms-marquee-item { flex: 0 0 auto; }
@media (prefers-reduced-motion: no-preference) {
    .cms-marquee-track { animation: cms-marquee-scroll 30s linear infinite; }
    .cms-marquee:hover .cms-marquee-track { animation-play-state: paused; }
}
@keyframes cms-marquee-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* video privacy facade - click-to-load poster + play button. */
.cms-video-facade { position: relative; cursor: pointer; padding: 0; background-color: #111; }
.cms-video-facade .cms-video-play {
    display: inline-flex; align-items: center; justify-content: center;
    width: 72px; height: 72px; border-radius: 50%;
    background: rgba(0, 0, 0, .6); color: #fff; font-size: 1.5rem;
}
@media (prefers-reduced-motion: no-preference) {
    .cms-video-facade .cms-video-play { transition: transform .15s ease, background-color .15s ease; }
    .cms-video-facade:hover .cms-video-play, .cms-video-facade:focus-visible .cms-video-play { transform: scale(1.08); background: rgba(0, 0, 0, .8); }
}

/* comparison sticky header row. */
.cms-compare-sticky thead th {
    position: sticky; top: 0; z-index: 2;
    background: var(--bs-body-bg, #fff);
}

/* vertical tabs nav - give the side nav a sensible minimum width on md+. */
@media (min-width: 768px) { .cms-tabs-vnav { min-width: 12rem; } }

/* testimonial carousel - dark indicators + room for the FA chevron controls so
   they read on a light section (Bootstrap's defaults are white-on-white here). */
.cms-testimonial-carousel .carousel-indicators [data-bs-target] { background-color: var(--bs-secondary, #6c757d); }
.cms-testimonial-carousel .carousel-control-prev,
.cms-testimonial-carousel .carousel-control-next { width: 8%; opacity: 1; }

/* ── Checkout payment-method selection ────────────────────────────────────
   The storefront cart payment step lists methods as radio rows. The native
   radio dot alone is too subtle, so the whole selected row gets a clear
   accent border, tint, and a check mark. Uses :has() (progressive - falls
   back gracefully to the radio dot where unsupported). */
.payment-method-option {
    cursor: pointer;
    border-width: 2px;
    transition: border-color .12s ease, background-color .12s ease, box-shadow .12s ease;
}
.payment-method-list:has(input:checked) .payment-method-option {
    /* dim the non-selected rows once a choice is made */
    opacity: .72;
}
.payment-method-option:has(input:checked) {
    opacity: 1;
    border-color: var(--site-accent, #198754);
    background-color: color-mix(in srgb, var(--site-accent, #198754) 8%, #fff);
    box-shadow: inset 3px 0 0 0 var(--site-accent, #198754);
}
.payment-method-option:has(input:checked)::after {
    content: "\f058"; /* fa-check-circle */
    font-family: "Font Awesome 7 Pro";
    font-weight: 900;
    margin-left: auto;
    align-self: center;
    color: var(--site-accent, #198754);
    font-size: 1.15rem;
}

/* ── CMS multi-column row layout ─────────────────────────────────────────────
   Keep each section's content inside its own column. Sections can carry their
   own wide/fixed-width containers, flex layouts or media; without these guards a
   section placed in a narrow column overflows and bleeds into the next column.
   .row/.col-* base styling comes from Bootstrap; these only add containment. */
.cms-layout-row { align-items: stretch; }
.cms-layout-col {
    min-width: 0;          /* let flex columns shrink instead of overflowing */
    overflow: hidden;      /* clip any remaining horizontal bleed into siblings */
    overflow-wrap: anywhere;
}
.cms-layout-col > * { max-width: 100%; }
.cms-layout-col img,
.cms-layout-col video,
.cms-layout-col iframe,
.cms-layout-col svg { max-width: 100%; height: auto; }
.cms-layout-col .container,
.cms-layout-col .container-sm,
.cms-layout-col .container-md,
.cms-layout-col .container-lg,
.cms-layout-col .container-xl,
.cms-layout-col .container-xxl { max-width: 100%; }
/* A section dropped into a multi-column row may carry its OWN Bootstrap grid
   (e.g. a photo+text `.row > .col-*`). Inside a narrow page column those inner
   columns squeeze to unreadable slivers, so force a section's nested grid to
   stack full-width. Only `.row`s NESTED INSIDE a column are affected - the outer
   `.cms-layout-row` is an ancestor (not a descendant) of `.cms-layout-col`, and
   single-column rows render unwrapped (no `.cms-layout-col`), so both are safe. */
.cms-layout-col .row > * { flex: 0 0 100% !important; max-width: 100% !important; }

/* SharePoint-parity blocks (2026-06-03): structural classes for the org-chart
   and chart blocks. Kept here (not inline) because the public-page CSP has no
   style-src-attr and blocks inline style="" attributes. */
.cms-orgchart-photo { object-fit: cover; }
.cms-orgchart-card { min-width: 150px; max-width: 220px; }
.cms-chart-svg { max-height: 360px; }
