/* ==========================================================================
   MAHAVENUES — Modern Navy & White Theme
   Custom overrides layered on top of the base template (style.green.min.css).
   This file is intentionally the single source of truth for the visual
   refresh — colors, type, buttons, cards, nav, footer, hero, forms, and the
   new venue search / filter UI. Loaded last in Site.Master, so plain
   selectors here win by source order; a handful of rules use !important
   only where individual pages still carry legacy inline styles
   (e.g. style="background-color:antiquewhite") that inline CSS cannot
   otherwise be beaten by.
   ========================================================================== */

:root {
  --mv-navy-900: #0b1e35;
  --mv-navy-800: #102a4a;
  --mv-navy-700: #16345c;
  --mv-navy-600: #1d4372;
  --mv-navy-500: #24528a;
  --mv-navy-100: #eaf0f8;
  --mv-navy-50:  #f5f8fc;
  --mv-ink:      #1c2733;
  --mv-muted:    #667082;
  --mv-line:     #e3e8f0;
  --mv-white:    #ffffff;
  --mv-gold:     #b8924a;
  --mv-radius-lg: 16px;
  --mv-radius-md: 10px;
  --mv-radius-sm: 6px;
  --mv-shadow-sm: 0 2px 10px rgba(16, 42, 74, 0.06);
  --mv-shadow-md: 0 10px 30px rgba(16, 42, 74, 0.10);
  --mv-shadow-lg: 0 20px 50px rgba(16, 42, 74, 0.16);
}

/* ==========================================================================
   DARK THEME — admin-controlled, site-wide (see SiteSettingsRepository.cs,
   Admin/ThemeSettings.aspx). Not a per-visitor preference: Site.Master and
   Admin/AdminShell.Master both render data-theme="<%: CurrentTheme %>" on
   <html> from the one server-side setting, on every request, so this block
   is either fully active or fully inactive for everyone at once.

   Redefines the SAME --mv-* tokens above rather than introducing new
   "semantic" names, so every existing var(--mv-*) rule in this file - and
   every var(--mv-navy-*, #fallback) used inline across PropertyDetail.aspx/
   VenueDetail.aspx/Home.aspx/AdminLogin.aspx - repaints automatically with
   zero further edits. --mv-white deliberately becomes "the current theme's
   surface color" (not literally white) since the large majority of
   card/toolbar/panel backgrounds already read var(--mv-white).

   IMPORTANT - only 6 of the 12 color tokens are redefined below, not all
   of them. --mv-navy-500 through --mv-navy-900 are this site's fixed brand
   accent scale (verified by grep: buttons, badges, hover/active states,
   the hero gradient, the lightbox backdrop, the admin sidebar/toolbar-head
   gradient, the "antiquewhite" modal-header override just below all set
   background-color to one of these with white text on top) - inverting
   them would turn e.g. .btn-primary into a pale button with illegible
   white text, and the .mfp-bg lightbox backdrop into a light overlay
   instead of a darkened one. A brand accent color staying consistent
   across light/dark is normal (most products keep their primary CTA color
   fixed and only invert page chrome/surfaces), so --mv-navy-500..900 and
   --mv-gold are intentionally left out of THIS block, unchanged between
   Light and Dark specifically (--mv-navy-500..900 - but not --mv-gold -
   DO change with the selected accent color; see the ACCENT COLOR block
   right below this one). Only the "page chrome" tokens flip here: --mv-navy-50/--mv-navy-100
   (light section-tint backgrounds), --mv-white (card/toolbar surfaces),
   --mv-ink (body text), --mv-muted (secondary text), --mv-line (borders),
   and the 3 shadow tokens (need darker, higher-opacity shadows to read on
   a dark surface). --mv-radius-* is layout, not color, left alone too.

   Also deliberately NOT touched: color:#fff hardcoded elsewhere in this
   file where it sits on one of the fixed-navy elements above (buttons,
   hero, footer, admin sidebar, badges) - those stay white-on-navy in both
   themes for the same reason navy-500..900 stay fixed. See the vendor-
   stylesheet and legacy-inline-color override blocks near the end of this
   file for style.green.min.css and antiquewhite-pattern handling. */
html[data-theme="dark"] {
  --mv-navy-50:  #0e1826;   /* page background - the deepest surface */
  --mv-navy-100: #17233a;   /* subtle section-tint background - one step up */
  --mv-white:    #1e2c45;   /* card/toolbar/panel surface - one step up again, for depth */
  --mv-ink:      #e8ecf2;
  --mv-muted:    #9aa6b8;
  --mv-line:     #33415c;
  --mv-shadow-sm: 0 2px 10px rgba(0, 0, 0, 0.35);
  --mv-shadow-md: 0 10px 30px rgba(0, 0, 0, 0.45);
  --mv-shadow-lg: 0 20px 50px rgba(0, 0, 0, 0.55);
}

/* ==========================================================================
   ACCENT COLOR — admin-controlled, site-wide (2026-08-23 addition, see
   SiteSettingsRepository.cs, Admin/ThemeSettings.aspx). Independent of the
   Light/Dark block above: that one flips page chrome (surfaces/text/
   borders); this one flips --mv-navy-500 through --mv-navy-900, the SAME
   fixed brand-accent scale the comment above deliberately left untouched
   by Light/Dark, because it's what buttons/badges/hover-active states/the
   hero gradient/the lightbox backdrop/the admin sidebar-toolbar-head
   gradient all read. Both blocks can be active at once (e.g.
   data-theme="dark" + data-accent="Maroon") since they redefine disjoint
   sets of tokens - no conflict.

   The token names stay "--mv-navy-*" even when the accent isn't navy -
   same reasoning as --mv-white staying "white" in dark mode above: every
   existing var(--mv-navy-*) rule in this file, and every inline
   var(--mv-navy-*, #fallback) call across PropertyDetail.aspx/
   VenueDetail.aspx/Home.aspx, repaints for free with zero further edits
   only if the token names don't change.

   "Navy" itself needs no block - it's the :root default above. Maroon/
   Grey/Pink/Gold each redefine all 5 shades with the same lightness
   curve as the original navy scale (roughly 12%/18%/22%/28%/34% L for
   900/800/700/600/500), so contrast against the white text these
   backgrounds carry stays as good or better than navy's own (verified:
   all 20 of those shades are >=5.5:1 against white, navy's own range is
   7.9:1-16.8:1). --mv-gold (a separate, always-on token used for star
   ratings/testimonial quotes/subtitle text - see the plain
   var(--mv-gold) rules elsewhere in this file) is deliberately NOT
   touched by any of these blocks, including the "Gold" accent itself -
   a 5-star rating staying gold regardless of the chosen accent is the
   universally-expected convention, so it's left as the one truly fixed
   color in the whole system.

   "Brown" (added same day as a follow-up) breaks from that shared
   lightness curve on purpose: the user supplied a specific reference
   button color (a warm coffee-brown) to match, sampled at #8c6d33 -
   pinned exactly to --mv-navy-700 below since that's the shade
   .btn-primary/.mv-mobile-bar-cta/the hero CTA/etc. actually render
   (see the var(--mv-navy-700) rules elsewhere in this file), so the
   700 shade is what needs to visually match the reference, not 900 or
   500. The other 4 shades are then built outward from that fixed
   anchor at the SAME hue or an adjustment in saturation (not sharing
   the 12%/18%/22%/28%/34% curve above), individually contrast-checked
   against white (7.47:1 / 5.98:1 / 4.83:1(anchor) / 4.01:1 / 3.41:1 for
   900/800/700/600/500) rather than assumed - this hue sits at a much
   higher relative luminance than navy/maroon/grey/pink at the same L,
   so reusing their L values here would have made --mv-navy-500 (used
   as the lightest stop of the hero gradient, under large white heading
   text) fail contrast; 3.41:1 is the deliberate floor, still >=3:1 for
   large/bold text per WCAG AA. */
html[data-accent="Maroon"] {
  --mv-navy-900: #360a10;
  --mv-navy-800: #4b0f17;
  --mv-navy-700: #5d151f;
  --mv-navy-600: #731c27;
  --mv-navy-500: #8b2331;
}

html[data-accent="Grey"] {
  --mv-navy-900: #1b1f24;
  --mv-navy-800: #272c32;
  --mv-navy-700: #33383f;
  --mv-navy-600: #40464f;
  --mv-navy-500: #4f565f;
}

html[data-accent="Pink"] {
  --mv-navy-900: #340c1e;
  --mv-navy-800: #48122a;
  --mv-navy-700: #5a1836;
  --mv-navy-600: #6f1f43;
  --mv-navy-500: #872752;
}

html[data-accent="Gold"] {
  --mv-navy-900: #372409;
  --mv-navy-800: #4b330e;
  --mv-navy-700: #5d4015;
  --mv-navy-600: #72501d;
  --mv-navy-500: #876127;
}

html[data-accent="Brown"] {
  --mv-navy-900: #6a5121;
  --mv-navy-800: #7b5f29;
  --mv-navy-700: #8c6d33; /* the reference "Book Now" button color, exactly */
  --mv-navy-600: #9b7a3c;
  --mv-navy-500: #a88645;
}

/* --------------------------------------------------------------------
   Base / typography
   -------------------------------------------------------------------- */
body {
  color: var(--mv-ink);
  font-family: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6,
.hero-heading {
  font-family: 'Playfair Display', Georgia, serif;
  color: var(--mv-navy-800);
  font-weight: 700;
  letter-spacing: 0;
}

h4.text-black-50 {
  color: var(--mv-navy-800) !important;
  font-family: 'Playfair Display', Georgia, serif;
  font-weight: 700;
  font-size: 1.15rem;
}

.subtitle {
  color: var(--mv-gold);
  letter-spacing: 0.18em;
  font-weight: 600;
  font-size: 0.78rem;
}

.text-primary { color: var(--mv-navy-700) !important; }
.text-secondary { color: var(--mv-gold) !important; }
.text-muted { color: var(--mv-muted) !important; }

/* Form labels - the base theme's .form-label (style.default.css /
   style.green.min.css) is a fairly low-contrast gray (#6c757d), which is
   what made "NAME *", "MOBILE NO *" etc. hard to read on the enquiry/
   booking/listing forms. This is a single global override, so it applies
   everywhere a label is used - the public site's enquiry forms and the
   Admin panel's forms alike, both of which load this stylesheet - rather
   than needing a separate fix on every page. The heavier weight is a small
   extra readability boost for the small uppercase text.

   inline-flex + gap is the same icon-then-text layout .mv-admin-nav-link
   already uses for its sidebar icons (see custom.css's admin-shell rules) -
   reused here so a label's icon (.form-label-icon, added right after the
   opening <label> tag next to its text - see Site.Master/Contact.aspx/
   Admin/AddLead.aspx etc.) lines up the same way everywhere, instead of
   inventing a second spacing convention. A label with no icon in its
   markup still renders exactly as before - inline-flex with one text
   child looks identical to the theme's default inline-block. */
.form-label {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: var(--mv-ink);
  font-weight: 600;
}

.form-label-icon {
  width: 0.95rem;
  height: 0.95rem;
  flex: 0 0 auto;
  color: var(--mv-gold);
  opacity: 0.9;
}

a { color: var(--mv-navy-700); }
a:hover { color: var(--mv-navy-900); }
a.acstm { color: var(--mv-navy-700); font-weight: 600; text-decoration: none; }
a.acstm:hover { text-decoration: underline; }

/* --------------------------------------------------------------------
   Buttons
   -------------------------------------------------------------------- */
.btn {
  border-radius: var(--mv-radius-sm);
  font-weight: 600;
  letter-spacing: 0.03em;
  transition: all 0.2s ease;
}

.btn-primary,
.btn.btn-primary {
  background-color: var(--mv-navy-700) !important;
  border-color: var(--mv-navy-700) !important;
  color: #fff !important;
  box-shadow: none;
}

.btn-primary:hover, .btn-primary:focus,
.btn.btn-primary:hover, .btn.btn-primary:focus {
  background-color: var(--mv-navy-900) !important;
  border-color: var(--mv-navy-900) !important;
  color: #fff !important;
  transform: translateY(-1px);
  box-shadow: var(--mv-shadow-sm);
}

.btn-secondary,
.btn.btn-secondary {
  background-color: transparent !important;
  border-color: var(--mv-line) !important;
  color: var(--mv-navy-700) !important;
}

.btn-secondary:hover,
.btn.btn-secondary:hover {
  background-color: var(--mv-navy-50) !important;
  border-color: var(--mv-navy-700) !important;
  color: var(--mv-navy-800) !important;
}

.btn-outline-primary {
  color: var(--mv-navy-700);
  border-color: var(--mv-navy-700);
}
.btn-outline-primary:hover {
  background-color: var(--mv-navy-700);
  border-color: var(--mv-navy-700);
  color: #fff;
}

/* --------------------------------------------------------------------
   Navbar
   -------------------------------------------------------------------- */
.navbar {
  background-color: var(--mv-white) !important;
  box-shadow: 0 1px 0 var(--mv-line);
}

.navbar .container-fluid {
  background-color: var(--mv-white) !important;
}

.navbar-brand img {
  /* max-height + max-width with both height/width left auto scales the
     logo down to fit without distorting it, regardless of its aspect
     ratio - a fixed height paired with max-width can silently squash a
     wide wordmark image if it hits the width cap. */
  height: auto !important;
  width: auto !important;
  max-height: 56px;
  max-width: 220px;
}

.navbar .nav-link {
  color: var(--mv-navy-800) !important;
  font-weight: 600;
  font-size: 0.92rem;
  letter-spacing: 0.02em;
  padding: 0.6rem 0.9rem !important;
}

.navbar .nav-link:hover {
  color: var(--mv-gold) !important;
}

.navbar .nav-link strong {
  color: var(--mv-navy-800) !important;
}

.navbar .nav-item .btn-primary {
  padding: 0.55rem 1.25rem;
  border-radius: 30px;
}

.navbar-toggler {
  color: var(--mv-navy-800) !important;
  border-color: var(--mv-line) !important;
}

/* --------------------------------------------------------------------
   Hero sections (home / interior page banners)
   -------------------------------------------------------------------- */
.hero-home,
.hero {
  background-color: var(--mv-navy-900);
}

/* Interior-page hero banner (Contact, Online Venue Listing, and any future
   utility page that isn't showcasing a specific property) - a brand-color
   gradient instead of a photo, so these generic pages don't need to borrow
   one specific venue's photo as their banner. Use alongside .hero, e.g.
   class="hero hero-gradient py-6 py-lg-7 text-white" - no .bg-image <img>
   or .dark-overlay needed underneath it. */
.hero-gradient {
  background: linear-gradient(135deg, var(--mv-navy-900) 0%, var(--mv-navy-700) 55%, var(--mv-navy-500) 100%);
  position: relative;
  overflow: hidden;
}

.hero-gradient::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 12% 20%, rgba(184, 146, 74, 0.20) 0%, transparent 45%),
    radial-gradient(circle at 88% 85%, rgba(184, 146, 74, 0.14) 0%, transparent 50%);
  pointer-events: none;
}

.hero-gradient .overlay-content {
  position: relative;
  z-index: 1;
}

/* Lighter than the original 0.55/0.78 pair - that was darkening venue-card
   photos, city-card photos, and the home hero banner more than intended
   (all three share this one .dark-overlay class). Kept as a gradient
   rather than dropping the overlay entirely, since white hero/card text
   still needs some contrast against bright photos. */
.dark-overlay::after {
  background: linear-gradient(180deg, rgba(11, 30, 53, 0.28) 0%, rgba(11, 30, 53, 0.48) 100%) !important;
  opacity: 1 !important;
}

.hero-home .subtitle,
.hero .subtitle {
  color: #d8c186;
}

.hero-home h1,
.hero h1,
.hero-heading {
  color: #fff;
  font-weight: 700;
}

.hero-home h1 { font-size: 2.75rem; }

@media (max-width: 767.98px) {
  .hero-home h1 { font-size: 1.75rem; }
}

/* --------------------------------------------------------------------
   Venue search bar (hero, Home + Venues pages)
   -------------------------------------------------------------------- */
.mv-search-bar {
  background: var(--mv-white);
  border-radius: var(--mv-radius-lg);
  box-shadow: var(--mv-shadow-lg);
  padding: 1.25rem;
  margin-top: 2rem;
}

.mv-search-bar .form-label {
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--mv-ink);
  font-weight: 700;
  margin-bottom: 0.25rem;
}

.mv-search-bar select.form-select,
.mv-search-bar .form-control {
  border-radius: var(--mv-radius-sm);
  border: 1px solid var(--mv-line);
  padding: 0.6rem 0.75rem;
  color: var(--mv-ink);
  font-weight: 500;
}

.mv-search-bar select.form-select:focus,
.mv-search-bar .form-control:focus {
  border-color: var(--mv-navy-600);
  box-shadow: 0 0 0 0.2rem rgba(22, 52, 92, 0.12);
}

.mv-search-bar .mv-search-btn {
  width: 100%;
  height: 100%;
  min-height: 44px;
  border-radius: var(--mv-radius-sm);
  background-color: var(--mv-navy-700);
  border-color: var(--mv-navy-700);
  color: #fff;
  font-weight: 700;
  letter-spacing: 0.04em;
}

.mv-search-bar .mv-search-btn:hover {
  background-color: var(--mv-navy-900);
  border-color: var(--mv-navy-900);
}

/* --------------------------------------------------------------------
   Homepage "Browse Venues by City" cards. Each card carries a
   city-specific background photo (landmark/heritage image) via inline
   background-image, layered with the site's existing .dark-overlay +
   .overlay-content pattern (see style.default.css) for text contrast.
   background-color here is the fallback shown if a city's photo hasn't
   been added yet under img/CityBackgrounds/ - it never leaves a card
   blank.
   -------------------------------------------------------------------- */
.mv-city-card {
  min-height: 170px;
  border-radius: var(--mv-radius-md);
  background-color: var(--mv-navy-800);
  display: flex;
  align-items: center;
  justify-content: center;
}

.mv-city-card .overlay-content h3,
.mv-city-card .overlay-content p {
  color: var(--mv-white);
  margin-bottom: 0.25rem;
}

.mv-city-card .overlay-content p {
  opacity: 0.85;
}

/* --------------------------------------------------------------------
   Contact-info style cards (Contact.aspx, Online-Venue-Listing.aspx) -
   the 3-column "Phone / Email / Office Timings" style blocks on both
   pages, given an actual card treatment instead of floating icon+text
   columns with no visual separation.
   -------------------------------------------------------------------- */
.mv-info-card {
  background: var(--mv-white);
  border-radius: var(--mv-radius-lg);
  box-shadow: var(--mv-shadow-md);
  padding: 2rem 1.75rem;
  height: 100%;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.mv-info-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--mv-shadow-lg);
}

.mv-info-card .icon-rounded {
  width: 3.25rem;
  height: 3.25rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
}

/* --------------------------------------------------------------------
   Venues listing filter bar
   -------------------------------------------------------------------- */
.mv-filter-bar {
  background: var(--mv-navy-50);
  border: 1px solid var(--mv-line);
  border-radius: var(--mv-radius-md);
  padding: 1.1rem 1.25rem;
}

.mv-filter-bar select.form-select {
  border-radius: var(--mv-radius-sm);
  border: 1px solid var(--mv-line);
  background-color: var(--mv-white);
  font-weight: 500;
  padding: 0.55rem 0.75rem;
}

.mv-filter-bar select.form-select:focus {
  border-color: var(--mv-navy-600);
  box-shadow: 0 0 0 0.2rem rgba(22, 52, 92, 0.12);
}

.mv-filter-clear {
  color: var(--mv-navy-700);
  font-weight: 600;
  font-size: 0.85rem;
  text-decoration: underline;
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
}

.mv-results-count {
  color: var(--mv-muted);
  font-size: 0.9rem;
  font-weight: 500;
}

.mv-no-results {
  display: none;
  text-align: center;
  padding: 3rem 1rem;
  color: var(--mv-muted);
}

.mv-no-results.mv-show { display: block; }

/* --------------------------------------------------------------------
   Cards — venue tiles
   -------------------------------------------------------------------- */
.card {
  border-radius: var(--mv-radius-lg) !important;
  border: 1px solid var(--mv-line) !important;
  overflow: hidden;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.card.shadow {
  box-shadow: var(--mv-shadow-sm) !important;
}

.hover-animate:hover .card,
.card:hover {
  transform: translateY(-4px);
  box-shadow: var(--mv-shadow-md) !important;
}

.card-img-top {
  border-radius: 0 !important;
}

.card-body {
  padding: 1.35rem;
}

.card-body .btn-primary {
  background-color: var(--mv-navy-700) !important;
  border-color: var(--mv-navy-700) !important;
  color: #fff !important;
  border-radius: 30px;
  padding: 0.5rem 1.35rem;
  font-size: 0.8rem;
}

.card-body .btn-primary:hover {
  background-color: var(--mv-navy-900) !important;
  border-color: var(--mv-navy-900) !important;
}

/* Badges on card imagery */
.badge-transparent {
  background: rgba(11, 30, 53, 0.72) !important;
  color: #fff !important;
  font-size: 0.65rem;
  letter-spacing: 0.08em;
  font-weight: 700;
}

.card-fav-icon svg { opacity: 0.9; }

/* Feature / amenity cards on venue detail pages (antiquewhite legacy tiles) */
.card[style*="antiquewhite"],
.card[style*="blanchedalmond"] {
  background-color: var(--mv-navy-50) !important;
  border: 1px solid var(--mv-line) !important;
}

/* Testimonial cards */
.testimonial.card[style*="background-color"] {
  background-color: var(--mv-navy-50) !important;
  border: 1px solid var(--mv-line) !important;
}

.testimonial-quote {
  color: var(--mv-gold) !important;
}

/* --------------------------------------------------------------------
   Icon rounds / info blocks (contact, list-with-us, venue detail strips)
   -------------------------------------------------------------------- */
.bg-primary-light {
  background-color: var(--mv-navy-100) !important;
}

.icon-rounded svg,
.icon-rounded .svg-icon {
  color: var(--mv-navy-700) !important;
}

/* --------------------------------------------------------------------
   Modal (enquiry form)
   -------------------------------------------------------------------- */
.modal-content {
  border-radius: var(--mv-radius-md);
  border: none;
  box-shadow: var(--mv-shadow-lg);
}

.modal-header[style*="antiquewhite"] {
  background-color: var(--mv-navy-800) !important;
  color: #fff;
}

.modal-header[style*="antiquewhite"] .modal-title {
  color: #fff;
}

/* Bug fix (2026-08-25): this used to target every ".modal-header .btn-close"
   unconditionally, inverting the close icon to white on the assumption every
   modal-header has a dark background. That's only true for the public venue
   enquiry-form modals, which have style="background-color: antiquewhite"
   and get overridden to navy above. Every plain, white-header modal
   (Admin/Customers.aspx's Add/Edit/Import Customer modals, Admin/Templates.aspx,
   Admin/Feedback.aspx) inherited the same white-on-white invert, making their
   close button invisible - reported by the user against Add Customer. Scoped
   to match the same [style*="antiquewhite"] selector as the two rules above,
   so only the dark-header modals get the inverted icon. */
.modal-header[style*="antiquewhite"] .btn-close {
  filter: invert(1) grayscale(100%) brightness(200%);
}

.modal-body .form-control {
  border-radius: var(--mv-radius-sm);
  border: 1px solid var(--mv-line);
}

.modal-body .form-control:focus {
  border-color: var(--mv-navy-600);
  box-shadow: 0 0 0 0.2rem rgba(22, 52, 92, 0.12);
}

/* --------------------------------------------------------------------
   Footer
   -------------------------------------------------------------------- */
footer .py-6.bg-gray-200 {
  background-color: var(--mv-navy-800) !important;
  color: #cdd7e5 !important;
}

footer .py-6.bg-gray-200 .fw-bold.text-dark,
footer .py-6.bg-gray-200 h6.text-dark {
  color: #fff !important;
}

footer .py-6.bg-gray-200 a,
footer .py-6.bg-gray-200 p,
footer .py-6.bg-gray-200 li a {
  color: #cdd7e5 !important;
}

footer .py-6.bg-gray-200 a:hover {
  color: #fff !important;
}

footer .py-4.bg-gray-800 {
  background-color: var(--mv-navy-900) !important;
  color: #9fb0c6 !important;
}

footer .py-4.bg-gray-800 a {
  color: #9fb0c6 !important;
}

footer .py-4.bg-gray-800 a:hover {
  color: #fff !important;
}

footer .btn-primary {
  border-radius: 30px;
}

/* Footer modernization (2026-08-22) - thin gold accent line across the top
   of the footer (mirrors the gold glow already used in .hero-gradient::before
   elsewhere on the site), brand tagline, icon-chip contact rows, circular
   social buttons, chevron-hover quick-link lists, and a two-column compact
   list for the Popular Venue Types links. All scoped under .mv-footer-* so
   nothing here can leak onto unrelated page content. */
.mv-footer::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--mv-gold, #b8924a), var(--mv-navy-500, #24528a) 50%, var(--mv-gold, #b8924a));
}

.mv-footer-tagline {
  color: #9fb0c6 !important;
  font-size: 0.85rem;
  max-width: 380px;
  line-height: 1.5;
}

.mv-footer-contact-item {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  font-weight: 600;
  color: #cdd7e5 !important;
}

.mv-footer-contact-item svg,
.mv-footer-contact-item .svg-icon {
  flex-shrink: 0;
  color: var(--mv-gold, #b8924a);
}

.mv-footer-contact-item:hover {
  color: #fff !important;
}

.mv-footer-social {
  display: flex;
  gap: 0.6rem;
  margin-top: 0.5rem;
}

.mv-footer-social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.08);
  color: #cdd7e5 !important;
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.mv-footer-social a:hover {
  background: var(--mv-gold, #b8924a);
  color: #fff !important;
  transform: translateY(-2px);
}

.mv-footer-links li {
  margin-bottom: 0.6rem;
}

.mv-footer-links a {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

.mv-footer-links a i {
  font-size: 0.6rem;
  color: var(--mv-gold, #b8924a);
  transition: transform 0.15s ease;
}

.mv-footer-links a:hover i {
  transform: translateX(3px);
}

.mv-footer-links-grid {
  column-count: 2;
  column-gap: 1.25rem;
}

.mv-footer-links-grid li {
  break-inside: avoid;
}

.mv-footer-cta {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-weight: 700;
  margin-top: 0.5rem;
  box-shadow: var(--mv-shadow-sm);
}

.mv-footer-cta .svg-icon {
  width: 1em;
  height: 1em;
}

@media (max-width: 767.98px) {
  .mv-footer-links-grid {
    column-count: 1;
  }
}

/* --------------------------------------------------------------------
   Breadcrumbs
   -------------------------------------------------------------------- */
.breadcrumb .breadcrumb-item a { color: #d8e0ee; }
.breadcrumb .breadcrumb-item.active { color: #fff; }

/* --------------------------------------------------------------------
   Misc section backgrounds
   -------------------------------------------------------------------- */
section[style*="#F2F2F2"],
section[style*="whitesmoke"] {
  background-color: var(--mv-navy-50) !important;
}

section.bg-gray-100 {
  background-color: var(--mv-navy-50) !important;
}

/* Star ratings stay warm/gold against the new palette */
.fa-star.text-warning { color: var(--mv-gold) !important; }

/* --------------------------------------------------------------------
   Floating WhatsApp button (sitewide, via Site.Master)
   -------------------------------------------------------------------- */
.mv-float-whatsapp {
  position: fixed;
  right: 22px;
  bottom: 22px;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background-color: #25D366;
  color: #fff !important;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--mv-shadow-lg);
  z-index: 1040;
  transition: transform 0.2s ease;
}

.mv-float-whatsapp:hover {
  transform: scale(1.08);
  color: #fff !important;
}

@media (max-width: 991.98px) {
  .mv-float-whatsapp {
    bottom: 78px;
    right: 16px;
    width: 50px;
    height: 50px;
  }
}

/* --------------------------------------------------------------------
   Sticky mobile enquiry bar (small screens only, via Site.Master)
   -------------------------------------------------------------------- */
.mv-mobile-bar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1035;
  display: flex;
  background: var(--mv-navy-900);
  box-shadow: 0 -4px 16px rgba(11, 30, 53, 0.25);
  padding-bottom: env(safe-area-inset-bottom, 0);
  transition: transform 0.2s ease;
}

.mv-mobile-bar.mv-hidden {
  transform: translateY(100%);
}

.mv-mobile-bar-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
  padding: 0.55rem 0.25rem;
  color: #cdd7e5 !important;
  font-size: 0.68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  text-decoration: none !important;
  border-right: 1px solid rgba(255, 255, 255, 0.08);
}

.mv-mobile-bar-item:last-child { border-right: none; }

.mv-mobile-bar-item svg {
  width: 1.1rem;
  height: 1.1rem;
}

.mv-mobile-bar-cta {
  background-color: var(--mv-gold);
  color: var(--mv-navy-900) !important;
}

body {
  padding-bottom: 0;
}

@media (max-width: 991.98px) {
  body {
    padding-bottom: 54px; /* clears the sticky mobile CTA bar */
  }
}

/* --------------------------------------------------------------------
   Lightbox (Magnific Popup) tweaks to match the navy/white theme
   -------------------------------------------------------------------- */
.mfp-bg { background: var(--mv-navy-900); opacity: 0.92; }
.mfp-close { color: #fff; opacity: 0.85; }
.mfp-close:hover { opacity: 1; }

/* --------------------------------------------------------------------
   Mobile & responsive polish
   -------------------------------------------------------------------- */
@media (max-width: 767.98px) {
  .hero-home { min-height: 460px; }
  .hero-home .swiper-container.hero-slider { min-height: 460px; }
  .mv-search-bar { padding: 1rem; margin-top: 1.25rem; }
  .mv-filter-bar { padding: 0.9rem; }
  .navbar-brand img { height: auto !important; max-height: 44px; }
  section.py-6 { padding-top: 2.5rem !important; padding-bottom: 2.5rem !important; }
  section.py-7 { padding-top: 3rem !important; padding-bottom: 3rem !important; }
}

@media (max-width: 575.98px) {
  .card-body { padding: 1.1rem; }
  .mv-filter-bar select.form-select,
  .mv-search-bar select.form-select,
  .mv-search-bar .form-control {
    font-size: 0.9rem;
  }
}

/* Prevent horizontal scroll from the fixed elements/utilities above */
html, body { overflow-x: hidden; }

/* --------------------------------------------------------------------
   Admin dashboard shell (Admin/AdminShell.Master) - a sidebar-based
   layout for the Admin section, separate from the public site's navbar
   (Site.Master). Reuses the same --mv-navy-*/--mv-gold palette so the
   admin area still looks like part of the same product, just laid out
   for someone working through a list of tasks rather than browsing.
   -------------------------------------------------------------------- */
.mv-admin-shell {
  min-height: 100vh;
}

.mv-admin-sidebar {
  /* Fixed rather than sticky: the site-wide "html, body { overflow-x:
     hidden; }" rule (see the very top of this file's base rules) makes
     html/body an implicit scrolling ancestor, which breaks position:sticky
     on a descendant in Chrome - the sidebar would just scroll away with the
     page instead of staying pinned. Fixed positioning sidesteps that
     entirely; .mv-admin-main below is offset with margin-left to make room
     for it instead of relying on flex layout. */
  position: fixed;
  top: 0;
  left: 0;
  width: 260px;
  height: 100vh;
  background: var(--mv-navy-900);
  color: rgba(255, 255, 255, 0.85);
  display: flex;
  flex-direction: column;
  overflow-y: auto;
  /* Without this, anything wider than the collapsed 76px rail (the logo
     wordmark image, most obviously) doesn't get clipped - it just spills
     out past the sidebar's right edge and visually sits on top of the main
     content next to it, since the sidebar is position: fixed and stacked
     above everything else via z-index. */
  overflow-x: hidden;
  z-index: 10;
  transition: width 0.15s ease;
}

.mv-admin-sidebar-brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.6rem;
  /* Left inset matched to the nav links below (2026-08-25): a nav link's
     icon sits at .mv-admin-nav-group's own 0.75rem left padding PLUS
     .mv-admin-nav-link's own 0.75rem left padding = 1.5rem total from the
     sidebar edge. This block used 1.25rem, so the logo badge and "Admin
     Panel" caption sat 4px left of every menu icon/label below them -
     small, but enough to read as unaligned once you look for it. */
  padding: 1.5rem 1.25rem 1.25rem 1.5rem;
  border-bottom: 1px solid rgba(255, 255, 255, 0.10);
}

/* White pill "badge" behind the logo (2026-08-25) - the wordmark PNG sits
   on a transparent background, so on the navy sidebar it read as loose
   text floating in the corner. A rounded white card behind it (like the
   badge already used for the logo in the top public nav) gives it a
   defined edge and a bit of depth, and matches the corner-card look asked
   for by the user. */
.mv-admin-sidebar-logo-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: #fff;
  border-radius: 999px;
  padding: 0.6rem 1.1rem;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
  max-width: 100%;
}

/* Sized up (2026-08-26) - a property's own uploaded logo photo often has
   a lot of built-in whitespace/transparent margin around the actual mark
   (it's a photo, not a tightly-cropped icon), so at the original 32px cap
   the visible logo read as tiny inside a comparatively large white pill.
   64px gives real property logos enough room to actually read as a logo
   rather than a speck, while max-width:100% (plus the badge's own
   max-width:100% and the sidebar's overflow-x:hidden) still keeps a wide
   wordmark-style logo from overflowing the rail. */
.mv-admin-sidebar-brand img { display: block; height: auto; width: auto; max-height: 64px; max-width: 100%; }

/* --------------------------------------------------------------------
   Admin Dashboard (Admin/Dashboard.aspx) - KPI cards
   -------------------------------------------------------------------- */
.mv-kpi-card {
  display: flex;
  flex-direction: column;
  border-top: 4px solid var(--mv-kpi-accent, var(--mv-navy-600));
  border-radius: var(--mv-radius-md, 10px);
  overflow: hidden;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

/* Modernization pass (2026-08-25): a small lift-on-hover, matching the
   same transform/shadow idiom already proven on .mv-adm-card below, so the
   Dashboard's KPI tiles and the Properties/Venues/Customers grid cards
   feel like one consistent system rather than two different eras of UI. */
.mv-kpi-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--mv-shadow-md, 0 10px 30px rgba(16, 42, 74, 0.10)) !important;
}

.mv-kpi-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  color: var(--mv-kpi-accent, var(--mv-navy-600));
  background: var(--mv-kpi-accent-soft, rgba(29, 67, 114, 0.12));
  margin-bottom: 0.5rem;
}

.mv-kpi-icon .svg-icon {
  width: 20px;
  height: 20px;
}

.mv-kpi-value {
  font-size: 1.9rem;
  font-weight: 700;
  line-height: 1.1;
  color: var(--mv-kpi-accent, var(--mv-ink));
}

/* One accent color per KPI card, set via a modifier class on the card
   itself (.mv-kpi-card--venues etc. in Admin/Dashboard.aspx) - explicit
   per-metric classes rather than nth-child, so the color follows the
   metric even if cards get reordered later. Both the CSS variables above
   (value text, icon, icon background, top border) and this list stay in
   one place, so adding a 6th KPI later just means adding one more block
   here plus the matching class on the card. */
.mv-kpi-card--venues    { --mv-kpi-accent: #2563eb; --mv-kpi-accent-soft: rgba(37, 99, 235, 0.12); }
.mv-kpi-card--properties{ --mv-kpi-accent: #0d9488; --mv-kpi-accent-soft: rgba(13, 148, 136, 0.12); }
.mv-kpi-card--leads     { --mv-kpi-accent: #d97706; --mv-kpi-accent-soft: rgba(217, 119, 6, 0.12); }
.mv-kpi-card--requests  { --mv-kpi-accent: #7c3aed; --mv-kpi-accent-soft: rgba(124, 58, 237, 0.12); }
.mv-kpi-card--customers { --mv-kpi-accent: #e11d48; --mv-kpi-accent-soft: rgba(225, 29, 72, 0.12); }

/* Event Booking row (2026-08-25 follow-up) - the 5 cards below the main
   catalog KPIs were left on the default accent when the modifier system
   above was introduced, so they rendered as a flat, muted row next to the
   colorful catalog cards above. Same one-modifier-per-card treatment. */
.mv-kpi-card--bookings  { --mv-kpi-accent: #4f46e5; --mv-kpi-accent-soft: rgba(79, 70, 229, 0.12); }
.mv-kpi-card--events    { --mv-kpi-accent: #0284c7; --mv-kpi-accent-soft: rgba(2, 132, 199, 0.12); }
.mv-kpi-card--billed    { --mv-kpi-accent: #16a34a; --mv-kpi-accent-soft: rgba(22, 163, 74, 0.12); }
.mv-kpi-card--collected { --mv-kpi-accent: #ca8a04; --mv-kpi-accent-soft: rgba(202, 138, 4, 0.12); }
.mv-kpi-card--conversion{ --mv-kpi-accent: #c026d3; --mv-kpi-accent-soft: rgba(192, 38, 211, 0.12); }

.mv-kpi-label {
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--mv-muted, #6b7789);
  margin-top: 0.15rem;
}

.mv-kpi-sub {
  font-size: 0.75rem;
  color: var(--mv-muted, #6b7789);
  margin-top: 0.25rem;
}

.mv-kpi-link {
  display: block;
  text-align: center;
  font-size: 0.78rem;
  font-weight: 600;
  padding: 0.5rem;
  border-top: 1px solid var(--mv-line, #e6e9ee);
  color: var(--mv-navy-700, #1a365d);
  text-decoration: none;
}

.mv-kpi-link:hover {
  background-color: var(--mv-navy-50, #f4f7fb);
}

/* --------------------------------------------------------------------
   Admin Dashboard - "Insights" chart widgets (2026-08-25 addition).
   The chart-rendering primitives themselves (.mv-chart-host/-svg/etc.)
   stay page-scoped in Admin/Dashboard.aspx's own <style> block, matching
   Admin/Analytics.aspx's precedent - but the card chrome around them
   (header icon chip, revenue readout tiles) is shared here since it's
   pure visual idiom, not chart mechanics, and other Admin pages may want
   the same look later.
   -------------------------------------------------------------------- */
.mv-dash-chart-card { border-radius: var(--mv-radius-md, 10px); overflow: hidden; }
.mv-dash-chart-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  color: var(--mv-navy-600, #1d4372);
  background: rgba(29, 67, 114, 0.10);
  flex: 0 0 auto;
}
.mv-dash-chart-icon .svg-icon { width: 15px; height: 15px; }

.mv-revenue-readouts {
  display: flex;
  gap: 1.5rem;
  flex-wrap: wrap;
  margin-bottom: 0.9rem;
}
.mv-revenue-readout-value {
  font-size: 1.35rem;
  font-weight: 700;
  color: var(--mv-ink, #1c2733);
  line-height: 1.15;
}
.mv-revenue-readout-label {
  font-size: 0.75rem;
  color: var(--mv-muted, #667082);
  margin-top: 0.1rem;
}
.mv-revenue-readout--dot .mv-revenue-readout-label {
  position: relative;
  padding-left: 0.9rem;
}
.mv-revenue-readout--dot .mv-revenue-readout-label::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.32rem;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--mv-revenue-dot, var(--mv-navy-600));
}

/* --------------------------------------------------------------------
   Admin listing pages (Admin/ManageVenues.aspx, Admin/Properties.aspx,
   Admin/Customers.aspx) - modernized toolbar, shared List/Grid toggle,
   and cover-photo/avatar card treatment (2026-08-22). One shared block
   here rather than duplicated page-scoped <style> blocks, since all
   three pages want identical treatment - unlike the public site's
   one-off page-scoped overrides (e.g. Venues.aspx's own .mv-filter-bar).
   New mv-adm- namespace so this never collides with (or depends on) any
   public-page class of a similar name.
   -------------------------------------------------------------------- */
.mv-adm-toolbar {
  background-color: var(--mv-white);
  border: 1px solid var(--mv-line, #e6e9ee);
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 1px 6px rgba(16, 42, 74, 0.06);
}
.mv-adm-toolbar-head {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.85rem 1.25rem;
  background: linear-gradient(135deg, var(--mv-navy-800, #102a4a), var(--mv-navy-900, #0b1e35));
  color: #fff;
  font-weight: 600;
  font-size: 0.9rem;
}
.mv-adm-toolbar-head .svg-icon { width: 18px; height: 18px; }
.mv-adm-toolbar-body { padding: 1rem 1.25rem; }
.mv-adm-toolbar-body .form-control,
.mv-adm-toolbar-body .form-select {
  border-radius: 999px;
  background-color: var(--mv-navy-50, #f5f8fc);
  border: 1px solid var(--mv-line, #e6e9ee);
}
.mv-adm-toolbar-body .input-group .form-control {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
.mv-adm-toolbar-body .input-group .btn {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}
.mv-adm-toolbar-body .form-control:focus,
.mv-adm-toolbar-body .form-select:focus {
  border-color: var(--mv-navy-400, #4a6fa5);
  box-shadow: 0 0 0 0.2rem rgba(16, 42, 74, 0.12);
}
.mv-adm-toolbar-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.75rem;
  padding: 0.75rem 1.25rem;
  border-top: 1px solid var(--mv-line, #e6e9ee);
  background-color: var(--mv-navy-50, #f9fafc);
}
.mv-adm-results-count {
  font-size: 0.85rem;
  color: var(--mv-muted, #6b7789);
}
.mv-adm-results-count strong { color: var(--mv-ink, #17233d); }

/* List/Grid toggle - visual match of the pill control already proven on
   the public Venues.aspx (.mv-view-toggle), reimplemented under the
   mv-adm- namespace rather than reused literally, per this engagement's
   habit of keeping admin and public CSS clearly separate. */
.mv-adm-view-toggle {
  display: inline-flex;
  background-color: var(--mv-white);
  border: 1px solid var(--mv-line, #e6e9ee);
  border-radius: 999px;
  padding: 3px;
}
.mv-adm-view-toggle button {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  border: none;
  background: transparent;
  color: var(--mv-navy-800, #102a4a);
  font-size: 0.8rem;
  font-weight: 600;
  padding: 5px 14px;
  border-radius: 999px;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.mv-adm-view-toggle button.active {
  background-color: var(--mv-navy-700, #1a365d);
  color: #fff;
}

/* Grid card - shared shape for Venue/Property/Customer grid views. */
.mv-adm-card {
  background: var(--mv-white);
  border: 1px solid var(--mv-line, #e6e9ee);
  border-radius: 16px;
  overflow: hidden;
  height: 100%;
  display: flex;
  flex-direction: column;
  transition: box-shadow 0.15s ease, transform 0.15s ease;
}
.mv-adm-card:hover {
  box-shadow: 0 8px 24px rgba(16, 42, 74, 0.12);
  transform: translateY(-2px);
}
.mv-adm-card-photo {
  height: 150px;
  background-size: cover;
  background-position: center;
  background-color: var(--mv-navy-800, #102a4a);
  background-image: linear-gradient(135deg, var(--mv-navy-700, #1a365d), var(--mv-navy-900, #0b1e35));
  position: relative;
}
.mv-adm-card-photo .badge { position: absolute; top: 0.6rem; right: 0.6rem; }
.mv-adm-card-body { padding: 1rem; flex: 1 1 auto; display: flex; flex-direction: column; }

/* Small thumbnail in the List-view tables (Admin/Properties.aspx,
   Admin/ManageVenues.aspx) - same navy-gradient placeholder fallback as
   .mv-adm-card-photo above, just sized for a table row instead of a
   grid card, so an item is identifiable at a glance in List view too
   without switching to Grid. */
.mv-adm-list-thumb-col { width: 64px; }
.mv-adm-list-thumb {
  width: 56px;
  height: 42px;
  border-radius: 6px;
  background-size: cover;
  background-position: center;
  background-color: var(--mv-navy-800, #102a4a);
  background-image: linear-gradient(135deg, var(--mv-navy-700, #1a365d), var(--mv-navy-900, #0b1e35));
}
.mv-adm-card-title { font-weight: 700; font-size: 0.98rem; color: var(--mv-ink, #17233d); margin-bottom: 0.15rem; }
.mv-adm-card-meta { font-size: 0.8rem; color: var(--mv-muted, #6b7789); margin-bottom: 0.6rem; }
.mv-adm-card-actions { margin-top: auto; display: flex; flex-wrap: wrap; gap: 0.4rem; padding-top: 0.6rem; }

/* Admin/Customers.aspx List view (2026-08-29, Review Request Campaigns
   design pass, revised same day). The row action cell used to hold 3-4
   full-width buttons (Send Review / Opt Out / Edit / Delete) inline,
   which alone was wide enough to push the whole table past the
   viewport and force a horizontal scrollbar on ordinary desktop
   widths. First attempt collapsed the actions into a single
   kebab-menu dropdown - reported back as not user-friendly, since it
   hides the actions behind an extra click instead of leaving them
   visible. Reworked: actions are visible icon-only buttons again
   (Send Review / Opt Out-In / Edit / Delete, each a fixed 30px square
   with a title tooltip, wrapping onto a second line if the row is
   ever too narrow rather than forcing the table wider), and the
   scrollbar itself is fixed at the table level instead of by
   shrinking the action cell - table-layout: fixed pins every column
   to the exact width given on its <th> in Customers.aspx's markup, so
   the browser can no longer let one column's content (a long email, a
   long venue badge) silently stretch the whole table past the
   viewport the way the default auto layout does. Every column whose
   content can run long (Name, Contact, City, each Venues/Properties
   badge) is wrapped in its own text-truncate box with a title tooltip
   carrying the full value, so nothing is lost - just visually
   shortened, same "cap the runaway column" convention already used on
   ListingRequests.aspx's Capacity/Notes column. */
.mv-cust-table { table-layout: fixed; }
.mv-cust-table td { overflow: hidden; }
.mv-row-actions-btn {
  width: 30px;
  height: 30px;
  padding: 0;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.mv-row-actions-btn .svg-icon { width: 15px; height: 15px; }

/* Initials avatar for Customer grid cards - customers have no photo
   concept, so a deterministic-color initials circle stands in, using
   the same validated 8-hue palette already shipped for Analytics.aspx's
   charts and the homepage browse-icon colors (2026-08-22) - one system
   identity palette, not a new ad hoc color set. */
.mv-adm-avatar {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-weight: 700;
  font-size: 1.1rem;
  flex: 0 0 auto;
}
.mv-adm-avatar--0 { background-color: #2a78d6; }
.mv-adm-avatar--1 { background-color: #eb6834; }
.mv-adm-avatar--2 { background-color: #1baf7a; }
.mv-adm-avatar--3 { background-color: #eda100; }
.mv-adm-avatar--4 { background-color: #e87ba4; }
.mv-adm-avatar--5 { background-color: #008300; }
.mv-adm-avatar--6 { background-color: #4a3aa7; }
.mv-adm-avatar--7 { background-color: #e34948; }

/* "Back to list" link on Edit pages (EditVenue.aspx/EditProperty.aspx) -
   same pill+chevron shape as the public .mv-detail-back, recolored for
   a plain white admin background instead of a dark hero gradient. */
.mv-adm-back-link {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: var(--mv-navy-700, #1a365d);
  font-size: 0.85rem;
  font-weight: 600;
  text-decoration: none;
  padding: 0.35rem 0.9rem;
  border: 1px solid var(--mv-line, #e6e9ee);
  border-radius: 999px;
  background-color: var(--mv-white);
}
.mv-adm-back-link i { font-size: 0.7rem; transition: transform 0.15s ease; }
.mv-adm-back-link:hover { background-color: var(--mv-navy-50, #f5f8fc); color: var(--mv-navy-900, #0b1e35); }
.mv-adm-back-link:hover i { transform: translateX(-3px); }

/* Modernization pass (2026-08-25): the logo image already reads as
   "mahavenues.com" - repeating the full brand name in bold text right
   under it read as redundant and crowded the divider below. Recast the
   label as a small muted caption ("Admin Panel") so the logo stays the
   one visual anchor and the text becomes a quiet secondary tag, matching
   the understated label treatment already used for .mv-admin-nav-label. */
.mv-admin-sidebar-brand span {
  color: rgba(255, 255, 255, 0.55);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-size: 0.68rem;
}

.mv-admin-nav-group {
  padding: 1rem 0.75rem 0.25rem;
}

.mv-admin-nav-label {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.4);
  padding: 0 0.75rem;
  margin-bottom: 0.4rem;
}

.mv-admin-nav-link {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.55rem 0.75rem;
  border-radius: var(--mv-radius-sm);
  color: rgba(255, 255, 255, 0.75);
  text-decoration: none;
  font-size: 0.92rem;
  margin-bottom: 0.15rem;
  transition: background-color 0.15s ease, color 0.15s ease;
}

.mv-admin-nav-link .svg-icon,
.mv-admin-nav-link svg {
  width: 1.1rem;
  height: 1.1rem;
  flex: 0 0 auto;
  opacity: 0.85;
}

.mv-admin-nav-link:hover {
  background-color: rgba(255, 255, 255, 0.06);
  color: #fff;
  text-decoration: none;
}

.mv-admin-nav-link.active {
  background-color: var(--mv-gold);
  color: var(--mv-navy-900);
  font-weight: 600;
}

.mv-admin-nav-link.active .svg-icon,
.mv-admin-nav-link.active svg { opacity: 1; }

/* Masters Management submenu - a toggleable nested list under one
   .mv-admin-nav-submenu-toggle button (see AdminShell.Master), instead of a
   separate flat nav entry per master type. Collapsed by default; expand
   state is remembered the same way the sidebar-collapse feature is (see
   the toggle script at the bottom of AdminShell.Master). */
.mv-admin-nav-submenu-toggle {
  width: 100%;
  background: none;
  border: none;
  cursor: pointer;
  text-align: left;
}

.mv-admin-nav-submenu-chevron {
  transition: transform 0.15s ease;
}

.mv-admin-nav-submenu-toggle.expanded .mv-admin-nav-submenu-chevron {
  transform: rotate(90deg);
}

.mv-admin-nav-submenu {
  display: none;
  padding-left: 0.5rem;
  margin-top: 0.15rem;
}

.mv-admin-nav-submenu.expanded {
  display: block;
}

.mv-admin-nav-submenu-label {
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.35);
  padding: 0.5rem 0.75rem 0.25rem;
}

.mv-admin-nav-sublink {
  font-size: 0.85rem;
  padding-top: 0.4rem;
  padding-bottom: 0.4rem;
}

.mv-admin-nav-sublink .svg-icon,
.mv-admin-nav-sublink svg {
  width: 1rem;
  height: 1rem;
}

/* At the 76px collapsed rail there's no room to show a nested list of 17
   links legibly - hide the submenu (and its chevron) entirely rather than
   let it overflow or force the rail wider; the sidebar-overflow bug fixed
   earlier (overflow-x: hidden on .mv-admin-sidebar) would otherwise just
   clip it anyway. */
body.mv-admin-collapsed .mv-admin-nav-submenu,
body.mv-admin-collapsed .mv-admin-nav-submenu-chevron {
  display: none !important;
}

.mv-admin-sidebar-footer {
  margin-top: auto;
  padding: 1rem 1.25rem 1.25rem;
  border-top: 1px solid rgba(255, 255, 255, 0.08);
}

.mv-admin-main {
  margin-left: 260px;
  min-height: 100vh;
  background-color: var(--mv-navy-50);
  display: flex;
  flex-direction: column;
  transition: margin-left 0.15s ease;
}

.mv-admin-topbar {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 0.9rem 1.75rem;
  background: var(--mv-white);
  border-bottom: 1px solid var(--mv-line);
}

.mv-admin-sidebar-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.25rem;
  height: 2.25rem;
  flex: 0 0 auto;
  border: 1px solid var(--mv-line);
  border-radius: var(--mv-radius-sm);
  background: var(--mv-white);
  color: var(--mv-ink);
  cursor: pointer;
}

.mv-admin-sidebar-toggle:hover {
  background-color: var(--mv-navy-50);
}

.mv-admin-sidebar-toggle svg {
  width: 1.1rem;
  height: 1.1rem;
}

.mv-admin-topbar-crumb {
  font-size: 0.95rem;
  color: var(--mv-muted);
}

.mv-admin-topbar-crumb strong { color: var(--mv-ink); }

.mv-admin-content {
  padding: 1.75rem;
  flex: 1 1 auto;
}

/* Leads Inbox table (Admin/LeadsInbox.aspx) - each cell stacks a few short
   lines instead of one wide column per fact, so the table needs about half
   as many columns as it used to and rows stay a fairly uniform height
   (previously "Event details" alone could run to 4 stacked lines while
   "Priority" sat next to it showing nothing but "—", which is what made
   rows look taller than they needed to be). Top-aligned cells so a row
   with more lines in one column doesn't vertically center-shift the
   shorter columns next to it. */
.mv-leads-table th,
.mv-leads-table td {
  vertical-align: top;
}

.mv-leads-table td:last-child,
.mv-leads-table th:last-child {
  width: 190px;
}

/* Collapsible sidebar - toggled by #mvAdminSidebarToggle in the topbar
   (see the click handler + the FOUC-prevention script at the top of
   <body>, both in Admin/AdminShell.Master). Icon-only width, with each
   link's label text (wrapped in .mv-admin-nav-link-text) and the group
   labels/footer username hidden rather than removed, so nothing needs
   re-rendering when the sidebar expands again. Desktop-only (min-width
   matches the breakpoint the mobile horizontal-bar layout below takes
   over at) - collapsing to icons doesn't make sense once the sidebar is
   already a wrapping top bar instead of a fixed-width side column. */
@media (min-width: 992px) {
  body.mv-admin-collapsed .mv-admin-sidebar {
    width: 76px;
  }

  body.mv-admin-collapsed .mv-admin-main {
    margin-left: 76px;
  }

  body.mv-admin-collapsed .mv-admin-sidebar-brand {
    align-items: center;
    padding-left: 0;
    padding-right: 0;
    justify-content: center;
  }

  /* The logo is a wide wordmark image, not a square icon - at the full
     260px width it fits fine at a fixed height, but the same image would
     either overflow or look badly cropped in the 76px collapsed rail.
     Capping max-width (with height left auto) scales it down to fit
     instead. */
  body.mv-admin-collapsed .mv-admin-sidebar-logo-badge {
    padding: 0.4rem 0.55rem;
  }

  body.mv-admin-collapsed .mv-admin-sidebar-brand img {
    height: auto;
    max-width: 36px;
  }

  body.mv-admin-collapsed .mv-admin-sidebar-brand span,
  body.mv-admin-collapsed .mv-admin-nav-label,
  body.mv-admin-collapsed .mv-admin-nav-link-text,
  body.mv-admin-collapsed .mv-admin-sidebar-username {
    display: none;
  }

  body.mv-admin-collapsed .mv-admin-nav-link {
    justify-content: center;
    gap: 0;
  }

  body.mv-admin-collapsed .mv-admin-sidebar-footer {
    padding-left: 0.5rem;
    padding-right: 0.5rem;
  }

  body.mv-admin-collapsed .mv-admin-sidebar-footer .btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0;
  }
}

/* Mobile off-canvas nav drawer (2026-08-29). Below 992px the sidebar used
   to render as a permanently-expanded, wrapped horizontal bar pushing page
   content down - no collapse affordance existed at all (the toggle button
   was display:none). Replaced with a real off-canvas drawer: the sidebar
   is fixed off-screen (translateX(-100%)) until #mvAdminSidebarToggle
   (unhidden below, same button the desktop icon-collapse already uses)
   or its state class is toggled by the click handler in AdminShell.Master,
   which slides it in and shows a click-to-close backdrop
   (#mvAdminSidebarBackdrop, inserted right after </aside>). Not persisted
   to localStorage on purpose - every fresh page load in this multi-page
   app should start with the drawer closed, unlike the desktop collapsed
   state which intentionally does persist. */
.mv-admin-sidebar-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.45);
  z-index: 1040;
}

@media (max-width: 991.98px) {
  .mv-admin-sidebar-toggle { display: inline-flex; }
  .mv-admin-sidebar {
    position: fixed;
    top: 0;
    left: 0;
    width: min(280px, 82vw);
    height: 100vh;
    flex-direction: column;
    flex-wrap: nowrap;
    align-items: stretch;
    overflow-y: auto;
    transform: translateX(-100%);
    transition: transform 0.2s ease;
    z-index: 1050;
  }
  body.mv-admin-mobile-nav-open .mv-admin-sidebar {
    transform: translateX(0);
    box-shadow: 0.5rem 0 1.5rem rgba(0, 0, 0, 0.25);
  }
  body.mv-admin-mobile-nav-open .mv-admin-sidebar-backdrop {
    display: block;
  }
  body.mv-admin-mobile-nav-open {
    overflow: hidden;
  }
  .mv-admin-main { margin-left: 0; }
  .mv-admin-sidebar-brand { border-bottom: 1px solid rgba(255, 255, 255, 0.12); flex-direction: row; align-items: center; }
  .mv-admin-content { padding: 1.25rem; }
}

/* ==========================================================================
   DARK THEME — vendor stylesheet (style.green.min.css) overrides.
   style.green.min.css is a 258KB third-party Bootstrap vendor file with no
   usable semantic CSS variables (only base Bootstrap color-swatch vars) and
   946 hardcoded hex colors baked directly into ~3638 rule blocks - it is
   never edited directly (unmaintainable, no readable source in this repo).
   Instead this counteracts it with higher-specificity rules here, same
   "loaded last, wins by source order/!important" technique this file's own
   header already documents for the antiquewhite/inline-style overrides
   below. Scoped to the visible surfaces actually in play on this site -
   start-here-and-extend, not an exhaustive audit of every vendor rule. */
html[data-theme="dark"] body {
  background-color: var(--mv-navy-50);
  color: var(--mv-ink);
}
html[data-theme="dark"] .card,
html[data-theme="dark"] .modal-content,
html[data-theme="dark"] .dropdown-menu {
  background-color: var(--mv-white) !important;
  color: var(--mv-ink) !important;
  border-color: var(--mv-line) !important;
}
html[data-theme="dark"] .form-control,
html[data-theme="dark"] .form-select {
  background-color: var(--mv-navy-50) !important;
  color: var(--mv-ink) !important;
  border-color: var(--mv-line) !important;
}
html[data-theme="dark"] .form-control::placeholder {
  color: var(--mv-muted) !important;
}
html[data-theme="dark"] .table {
  color: var(--mv-ink) !important;
  border-color: var(--mv-line) !important;
}
html[data-theme="dark"] .dropdown-item {
  color: var(--mv-ink) !important;
}
html[data-theme="dark"] .dropdown-item:hover,
html[data-theme="dark"] .dropdown-item:focus {
  background-color: var(--mv-navy-100) !important;
  color: var(--mv-ink) !important;
}
html[data-theme="dark"] .btn-outline-secondary {
  color: var(--mv-ink) !important;
  border-color: var(--mv-line) !important;
}
html[data-theme="dark"] .text-muted {
  color: var(--mv-muted) !important;
}

/* --------------------------------------------------------------------
   DARK THEME — legacy inline-style overrides (antiquewhite pattern and
   other one-off hardcoded colors, ~58 near-identical per-venue-hall pages
   plus a handful of individual pages). All scoped under the dark selector
   so light mode's existing look is completely untouched.
   -------------------------------------------------------------------- */

/* The .card[style*="antiquewhite"]/.modal-header[style*="antiquewhite"]
   overrides earlier in this file already apply under dark mode for free,
   once --mv-navy-50/--mv-navy-800 are the tokens redefined above - no
   extra rule needed for those two. What they don't catch: the "Enquire
   Now" button itself (an asp:Button, renders as <input> with the inline
   Style= carried over as style=) and the plain Maroon-text status div
   inside the enquiry modal - both confirmed on Pearl-Hall-Sayaji-Pune.aspx
   and ~57 sibling per-venue-hall pages sharing the same template. */
html[data-theme="dark"] .btn[style*="antiquewhite"],
html[data-theme="dark"] input[style*="antiquewhite"] {
  background-color: var(--mv-navy-700) !important;
  color: #fff !important;
}
html[data-theme="dark"] [style*="antiquewhite"][style*="Maroon"] {
  background-color: var(--mv-navy-50) !important;
  color: #ff8a8a !important; /* legible warning-red-on-dark stand-in for Maroon */
}

/* Scattered light section/card backgrounds hardcoded per-page (testimonial
   sections, "whitesmoke" info bands, Venues.aspx's two #F2F2F2 sections). */
html[data-theme="dark"] [style*="background-color:whitesmoke"],
html[data-theme="dark"] [style*="background-color: whitesmoke"],
html[data-theme="dark"] [style*="background-color: #F2F2F2"],
html[data-theme="dark"] [style*="background-color:#F2F2F2"] {
  background-color: var(--mv-navy-50) !important;
}
html[data-theme="dark"] [style*="background-color: #f3d8d8"] {
  background-color: var(--mv-navy-100) !important;
}
html[data-theme="dark"] [style*="background-color: blanchedalmond"] {
  background-color: var(--mv-navy-50) !important;
}

/* =====================================================================
   Multilingual (EN/Hindi) language switcher + Accessibility toolbar
   (2026-08-25, public site only). Markup/JS lives in Site.Master, right
   before </body>; this is purely the visual layer. ===================== */

/* --- Language switcher (navbar) ------------------------------------- */
/* Fix (2026-08-25 bug report): these were originally styled white-on-navy,
   assuming the navbar's legacy inline background-color:#4c498c/color:#fff
   markup actually renders - but .navbar/.navbar .nav-link further up this
   file force a white background + navy text (!important), so the inactive
   हिंदी button (white text, transparent background) was invisible against
   that white bar, and only EN (which gets a solid white pill) showed up.
   Restyled to match the same navy-on-white the rest of the navbar uses. */
.mv-lang-switch {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--mv-line, #d8dce3);
  border-radius: 999px;
  overflow: hidden;
}
.mv-lang-btn {
  border: 0;
  background: transparent;
  color: var(--mv-navy-800, #2c2a5e);
  font-size: 0.8rem;
  font-weight: 700;
  padding: 0.32rem 0.75rem;
  cursor: pointer;
  line-height: 1;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.mv-lang-btn.active {
  background-color: #4c498c;
  color: #fff;
}
.mv-lang-btn:not(.active):hover {
  background-color: rgba(76, 73, 140, 0.1);
}
.mv-lang-btn:focus-visible {
  outline: 2px solid #4c498c;
  outline-offset: 1px;
}

/* Google Translate's own widget must exist in the DOM, WITH real (non-zero)
   dimensions, for it to actually initialize the <select class="goog-te-combo">
   our EN/हिंदी buttons drive - a zero-size/clipped container (the original
   width:1px/clip:rect(0) approach) causes Google's script to silently never
   build the combo box at all, which is why the toggle appeared to do
   nothing (2026-08-25 bug report). Positioning it off-screen (negative
   top/left) keeps it out of view and out of the document's scrollable area
   without shrinking it, so Google's script sees a normal, "visible" element. */
.mv-goog-hidden-widget {
  position: absolute;
  top: -3000px;
  left: -3000px;
}
body {
  top: 0px !important;
  position: static !important;
}
/* Fix (2026-08-25 bug report): the banner was still showing, and because
   it's an iframe Google injects at position:fixed;top:0 with a z-index far
   above everything else on the page, it was sitting directly on top of -
   and completely hiding - our own fixed-top navbar underneath it, which
   is why the navbar appeared to "disappear" after switching to Hindi.
   Root cause: the selector below required BOTH .goog-te-banner-frame AND
   .skiptranslate on the same element, but Google's actual banner iframe
   only carries the first class, so the compound selector never matched.
   Widened to catch every shape Google's markup has used for this. */
.goog-te-banner-frame,
.goog-te-banner-frame.skiptranslate,
body > .skiptranslate,
iframe.goog-te-banner-frame,
#goog-gt-tt,
.goog-te-balloon-frame,
.goog-tooltip,
.goog-tooltip:hover {
  display: none !important;
  visibility: hidden !important;
  height: 0 !important;
}
.goog-text-highlight {
  background: none !important;
  box-shadow: none !important;
}

/* Fix: two scrollbars on every page (2026-08-25 bug report). The Google
   Translate script sets an explicit height on <html>/<body> to reserve
   space for its banner iframe - combined with this site's pre-existing
   "html, body { overflow-x: hidden; }" rule further up this file (which,
   per the CSS overflow spec, implicitly forces overflow-y to compute as
   "auto" on BOTH elements whenever overflow-x isn't "visible"), that gave
   body its own independent scroll container nested inside html's, i.e.
   two scrollbars. Forcing both back to natural auto height removes body's
   separate scroll box; :not(.modal-open) leaves Bootstrap's own
   scroll-lock (used while a modal is open) untouched. */
html {
  height: auto !important;
}
body {
  height: auto !important;
  min-height: 0 !important;
}
body:not(.modal-open) {
  overflow-y: visible !important;
}

/* --- Accessibility toolbar ------------------------------------------- */
/* Moved into the navbar as a plain icon button (2026-08-25 follow-up - was
   a floating bottom-left circle; the user asked for it fixed in the navbar
   instead, next to the language switcher, rather than floating). No longer
   position:fixed - it's a normal inline nav item now, and the panel opens
   as a dropdown below it instead of a bubble above a floating button. */
.mv-a11y-widget {
  position: relative;
  display: inline-flex;
  align-items: center;
}
.mv-a11y-toggle {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: none;
  background-color: #4c498c;
  color: #fff;
  font-size: 0.92rem;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.15s ease, background-color 0.15s ease;
}
.mv-a11y-toggle:hover {
  background-color: #3a3870;
  transform: scale(1.05);
}
.mv-a11y-toggle:focus-visible {
  outline: 3px solid #ffd166;
  outline-offset: 2px;
}
.mv-a11y-panel {
  position: absolute;
  right: 0;
  left: auto;
  top: calc(100% + 10px);
  width: 260px;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 10px 32px rgba(0, 0, 0, 0.22);
  padding: 0.9rem;
  font-family: "Poppins", Arial, sans-serif;
}
.mv-a11y-panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-weight: 700;
  color: #333;
  margin-bottom: 0.6rem;
  font-size: 0.95rem;
}
.mv-a11y-close {
  border: none;
  background: transparent;
  font-size: 1.3rem;
  line-height: 1;
  color: #666;
  cursor: pointer;
  padding: 0 0.2rem;
}
.mv-a11y-close:hover {
  color: #000;
}
.mv-a11y-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 0.6rem;
}
.mv-a11y-label {
  font-size: 0.85rem;
  color: #444;
}
.mv-a11y-btns {
  display: flex;
  gap: 0.3rem;
}
.mv-a11y-btns button {
  min-width: 34px;
  height: 34px;
  border-radius: 8px;
  border: 1px solid #ddd;
  background: #f7f7f9;
  color: #333;
  font-weight: 600;
  font-size: 0.8rem;
  cursor: pointer;
}
.mv-a11y-btns button:hover {
  background: #ececf2;
}
.mv-a11y-toggle-row {
  width: 100%;
  text-align: left;
  display: flex;
  align-items: center;
  gap: 0.55rem;
  border: 1px solid #e2e2e8;
  background: #fafafc;
  color: #333;
  border-radius: 8px;
  padding: 0.5rem 0.65rem;
  margin-bottom: 0.45rem;
  font-size: 0.85rem;
  cursor: pointer;
  transition: background-color 0.15s ease, border-color 0.15s ease;
}
.mv-a11y-toggle-row i {
  width: 16px;
  text-align: center;
  color: #4c498c;
}
.mv-a11y-toggle-row:hover {
  background: #f0f0f6;
}
.mv-a11y-toggle-row.active {
  background: #e9e8fa;
  border-color: #4c498c;
}
.mv-a11y-reset {
  width: 100%;
  border: none;
  background: #4c498c;
  color: #fff;
  border-radius: 8px;
  padding: 0.5rem 0.65rem;
  font-size: 0.85rem;
  font-weight: 600;
  cursor: pointer;
  margin-top: 0.15rem;
}
.mv-a11y-reset:hover {
  background: #3a3870;
}
.mv-a11y-widget button:focus-visible {
  outline: 2px solid #4c498c;
  outline-offset: 2px;
}

@media (max-width: 480px) {
  .mv-a11y-panel {
    width: calc(100vw - 36px);
    right: -6px;
  }
}

/* --- Accessibility toolbar effects (applied via classes on <html>) --- */
html.mv-a11y-contrast,
html.mv-a11y-contrast body {
  background-color: #000 !important;
  color: #fff !important;
}
html.mv-a11y-contrast a {
  color: #ffd166 !important;
}
html.mv-a11y-contrast img,
html.mv-a11y-contrast svg {
  filter: grayscale(40%) contrast(1.1);
}
html.mv-a11y-contrast .navbar,
html.mv-a11y-contrast .card,
html.mv-a11y-contrast .mv-footer,
html.mv-a11y-contrast section,
html.mv-a11y-contrast div {
  background-color: #000 !important;
  color: #fff !important;
  border-color: #444 !important;
}
html.mv-a11y-contrast .btn,
html.mv-a11y-contrast button {
  background-color: #ffd166 !important;
  color: #000 !important;
  border-color: #ffd166 !important;
}

html.mv-a11y-readable-font,
html.mv-a11y-readable-font body,
html.mv-a11y-readable-font p,
html.mv-a11y-readable-font span,
html.mv-a11y-readable-font li,
html.mv-a11y-readable-font a,
html.mv-a11y-readable-font h1,
html.mv-a11y-readable-font h2,
html.mv-a11y-readable-font h3,
html.mv-a11y-readable-font h4,
html.mv-a11y-readable-font h5,
html.mv-a11y-readable-font h6 {
  font-family: Arial, "Segoe UI", Verdana, sans-serif !important;
  letter-spacing: 0.01em;
  line-height: 1.6 !important;
}

html.mv-a11y-underline-links a {
  text-decoration: underline !important;
}

/* --- Banquet Menu Selection checklist (Admin/CreateBooking.aspx) -----
   Rebuilt 2026-08-26 ("not looks modern, user friendly and effective"),
   reworked the same day to a "classic" checkbox list ("is there any
   simple and classic way to select the menu items"), then restyled again
   the same day ("can we make it more stylish and modern") - the markup
   (MenuChecklistRenderer.cs / MenuChecklistFragment.ashx) and JS
   (CreateBooking.aspx's own script) were left exactly as they were for
   this pass; only these rules changed, so no class names below are new.
   Built entirely from this file's existing --mv-* design tokens (see
   :root above) rather than new hardcoded colors, so it repaints
   automatically for the site's admin-controlled Dark theme and Accent
   color - zero extra dark-mode rules needed here. */
.mv-menu-toolbar {
  background: var(--mv-navy-50);
  border: 1px solid var(--mv-line);
  border-radius: var(--mv-radius-lg);
  padding: 0.85rem 1rem;
  margin-bottom: 1rem;
}
.mv-menu-toolbar-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.75rem;
}
.mv-menu-search-wrap {
  position: relative;
  flex: 1 1 240px;
  min-width: 200px;
}
.mv-menu-search-icon {
  position: absolute;
  left: 0.85rem;
  top: 50%;
  transform: translateY(-50%);
  width: 14px;
  height: 14px;
  fill: var(--mv-muted);
  pointer-events: none;
}
.mv-menu-search {
  padding-left: 2.15rem;
  border-radius: 999px;
  border-color: var(--mv-line);
  background: var(--mv-white);
  box-shadow: none;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.mv-menu-search:focus {
  border-color: var(--mv-navy-500);
  box-shadow: 0 0 0 0.2rem var(--mv-navy-100);
}
.mv-menu-diet-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}
.mv-menu-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  border: 1px solid var(--mv-line);
  background: var(--mv-white);
  color: var(--mv-muted);
  border-radius: 999px;
  padding: 0.32rem 0.9rem;
  font-size: 0.72rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  line-height: 1.2;
  cursor: pointer;
  box-shadow: var(--mv-shadow-sm);
  transition: border-color 0.15s ease, background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease;
}
.mv-menu-pill::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.55;
}
.mv-menu-pill:hover {
  border-color: var(--mv-navy-500);
  color: var(--mv-navy-700);
  transform: translateY(-1px);
}
.mv-menu-pill.active {
  background: var(--mv-navy-700);
  border-color: var(--mv-navy-700);
  color: #fff;
  box-shadow: var(--mv-shadow-md);
}
.mv-menu-pill.active::before {
  opacity: 1;
}
.mv-menu-pill[data-diet="Veg"].active {
  background: var(--bs-success);
  border-color: var(--bs-success);
}
.mv-menu-pill[data-diet="NonVeg"].active {
  background: var(--bs-danger);
  border-color: var(--bs-danger);
}
.mv-menu-pill[data-diet="Jain"].active {
  background: #0dcaf0;
  border-color: #0dcaf0;
  color: #063038;
}
.mv-menu-summary {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-left: auto;
}
.mv-menu-selected-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  background: linear-gradient(135deg, var(--mv-navy-700), var(--mv-navy-500));
  color: #fff;
  font-weight: 600;
  font-size: 0.72rem;
  padding: 0.42rem 0.8rem;
  border-radius: 999px;
  box-shadow: var(--mv-shadow-sm);
}
.mv-menu-selected-badge::before {
  content: "\2713";
  font-size: 0.7rem;
  line-height: 1;
}

.mv-menu-category-group {
  border: 1px solid var(--mv-line);
  border-radius: var(--mv-radius-lg);
  margin-bottom: 0.75rem;
  overflow: hidden;
  background: var(--mv-white);
  box-shadow: var(--mv-shadow-sm);
  transition: box-shadow 0.15s ease, border-color 0.15s ease;
}
.mv-menu-category-group:hover {
  box-shadow: var(--mv-shadow-md);
  border-color: var(--mv-navy-500);
}
.mv-menu-category-summary {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.75rem 1rem;
  cursor: pointer;
  font-weight: 600;
  font-size: 0.85rem;
  color: var(--mv-ink);
  background: linear-gradient(180deg, var(--mv-navy-50), var(--mv-white));
  list-style: none;
  user-select: none;
  transition: background 0.15s ease;
}
.mv-menu-category-summary:hover {
  background: var(--mv-navy-100);
}
.mv-menu-category-summary::-webkit-details-marker {
  display: none;
}
.mv-menu-category-icon {
  flex: 0 0 auto;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--mv-navy-100), var(--mv-navy-50));
  box-shadow: inset 0 0 0 1px var(--mv-line);
  display: flex;
  align-items: center;
  justify-content: center;
}
.mv-menu-category-icon svg {
  width: 14px;
  height: 14px;
  fill: var(--mv-navy-700);
}
.mv-menu-category-title {
  text-transform: uppercase;
  letter-spacing: 0.02em;
}
.mv-menu-category-count {
  font-weight: 700;
  font-size: 0.68rem;
  border-radius: 999px !important;
  /* Bootstrap's .badge default padding (0.35em/0.65em) plus line-height:1
     centers the PADDING BOX correctly, but a single digit has no
     descender, so the reserved descender space in the font's line-height
     sits entirely below the glyph - the number visibly floats above true
     center once the badge is forced into a tight circle (confirmed by
     measuring text-vs-box gaps in a throwaway headless-browser check:
     ~3.4px above the glyph vs ~5.3px below it before this fix). Shifting
     padding from bottom to top (equal left/right kept) re-centers the
     glyph instead of the abstract box - verified back to ~2.7px/2.7px,
     i.e. visually centered, after this change. */
  padding-top: 0.44em;
  padding-bottom: 0.26em;
  padding-left: 0.65em;
  padding-right: 0.65em;
}
.mv-menu-category-actions {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 0.72rem;
}
.mv-menu-mini-link {
  background: none;
  border: none;
  padding: 0.15rem 0.5rem;
  margin: 0;
  border-radius: 999px;
  color: var(--mv-navy-600);
  text-decoration: none;
  cursor: pointer;
  font-size: 0.72rem;
  font-weight: 600;
  text-transform: none;
  letter-spacing: normal;
  transition: background 0.15s ease, color 0.15s ease;
}
.mv-menu-mini-link:hover {
  background: var(--mv-white);
  color: var(--mv-navy-800);
  text-decoration: underline;
}
.mv-menu-mini-sep {
  color: var(--mv-muted);
}
.mv-menu-category-chevron {
  flex: 0 0 auto;
  width: 12px;
  height: 12px;
  fill: var(--mv-muted);
  transition: transform 0.2s ease;
}
.mv-menu-category-group[open] > .mv-menu-category-summary .mv-menu-category-chevron {
  transform: rotate(90deg);
}

/* Classic checkbox list (2026-08-26, "is there any simple and classic way
   to select the menu items", then restyled the same day for a more
   "stylish and modern" finish) - plain native checkboxes using this
   codebase's existing .form-check/.form-check-input/.form-check-label
   Bootstrap convention (see e.g. Admin/EditVenue.aspx's own checkbox
   lists), styled up with accent-color, a hover row highlight, and a
   tinted "selected" state via a pure-CSS :checked ~ label sibling
   selector - no card border, no custom checkmark overlay, no extra JS.
   Each row's label lays out name / diet badge / price left-to-right with
   the price pushed to the far right via margin-left:auto. */
.mv-menu-classic-list {
  /* Left padding bumped from 0.9rem to 1.6rem (2026-08-26) - user asked to
     "shift them to little right": the checkbox/name column sat almost
     flush with the card's left border, directly under the category
     header's icon circle, and read as cramped/misaligned against the
     header row above it. This is a real layout/indentation request, not
     the earlier checkbox-vs-text sub-pixel centering issue. */
  padding: 0.35rem 0.9rem 0.8rem 1.6rem;
}
.mv-menu-item {
  border-bottom: 1px solid var(--mv-line);
  border-radius: var(--mv-radius-sm);
  transition: background 0.12s ease;
}
.mv-menu-item:last-child {
  border-bottom: none;
}
.mv-menu-item:hover {
  background: var(--mv-navy-50);
}
.mv-menu-item .form-check {
  padding: 0.55rem 0.5rem;
  margin-bottom: 0;
  display: flex;
  /* flex-start, not center: a long dish name (or one with a diet badge +
     price that don't fit on one line) wraps inside .mv-menu-classic-label,
     and centering the checkbox against the WHOLE multi-line label's height
     pulls it down toward the middle of the wrapped text instead of next
     to the dish name - looking like it belongs to the wrong line. Pinning
     to flex-start plus a small top nudge on the checkbox itself (below)
     keeps it next to line 1 regardless of how many lines the label wraps
     to, while still looking centered for the common single-line row. */
  align-items: flex-start;
}
.mv-menu-classic-input {
  cursor: pointer;
  /* Sized up from 1.05em (2026-08-26, third pass on this same complaint) -
     re-measuring against the user's own follow-up screenshot showed the
     checkbox-vs-name-ink gap had shrunk to under 1px (pixel-analyzed the
     screenshot itself, not just re-tested locally), i.e. essentially at
     the limit of what CSS centering can guarantee - a small checkbox next
     to bold text is also just more sensitive to any residual sub-pixel
     rounding or cross-browser font-hinting difference than a slightly
     bigger one is. Sizing up reads better next to the bold dish name
     anyway and makes whatever tiny gap remains proportionally smaller. */
  width: 1.15em;
  height: 1.15em;
  /* Re-tuned for the new size the same measured way as before
     (Range.getBoundingClientRect() on the name vs getBoundingClientRect()
     on the checkbox) - 0.24rem measures ~0.13px off center, sub-pixel. */
  margin-top: 0.24rem;
  accent-color: var(--mv-navy-700);
  flex: 0 0 auto;
}
.mv-menu-classic-label {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  column-gap: 0.6rem;
  row-gap: 0.2rem;
  width: 100%;
  cursor: pointer;
  padding: 0.15rem 0.5rem;
  border-radius: var(--mv-radius-sm);
  transition: background 0.15s ease;
}
.mv-menu-classic-name {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--mv-ink);
  transition: color 0.15s ease;
}
.mv-menu-classic-label .badge {
  border-radius: 999px;
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  padding: 0.3rem 0.55rem;
}
.mv-menu-classic-price {
  font-size: 0.74rem;
  font-weight: 600;
  color: var(--mv-navy-700);
  background: var(--mv-navy-50);
  border-radius: 999px;
  padding: 0.2rem 0.6rem;
  margin-left: auto;
}
.mv-menu-classic-input:checked ~ .mv-menu-classic-label {
  background: rgba(28, 179, 110, 0.1);
}
.mv-menu-classic-input:checked ~ .mv-menu-classic-label .mv-menu-classic-name {
  color: var(--bs-success);
}
.mv-menu-classic-input:focus-visible ~ .mv-menu-classic-label {
  outline: 2px solid var(--mv-navy-600);
  outline-offset: 1px;
}

@media (max-width: 576px) {
  .mv-menu-toolbar {
    padding: 0.75rem;
  }
  .mv-menu-summary {
    margin-left: 0;
    width: 100%;
    justify-content: space-between;
  }
  .mv-menu-classic-price {
    margin-left: 0;
  }
}

/* Manage Users redesign (2026-08-26) - replaces the old plain <table>
   Accounts grid (which crushed columns unreadably narrow once Name/
   Designation and the growing Properties list needed real room - see
   claude/sql-migration-notes.md's dated entries) with a row-card list in
   the same visual language as the Banquet Menu Selection classic list
   above: soft card shell, hover highlight, badges instead of dense table
   cells. CSS Grid drives the desktop column layout (so it lines up like a
   table without table layout's column-crushing behavior) and collapses to
   a stacked card at narrow widths instead of forcing horizontal scroll. */
.mv-users-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  align-items: center;
  background: var(--mv-navy-50);
  border: 1px solid var(--mv-line);
  border-radius: var(--mv-radius-md);
  padding: 0.6rem 0.75rem;
  margin-bottom: 0.75rem;
}
.mv-users-search {
  flex: 1 1 220px;
  border-radius: 999px;
  border: 1px solid var(--mv-line);
  padding: 0.4rem 0.9rem;
  font-size: 0.85rem;
}
.mv-users-search:focus {
  outline: none;
  border-color: var(--mv-navy-500);
  box-shadow: 0 0 0 0.2rem var(--mv-navy-100);
}
.mv-users-filter {
  border-radius: 999px;
  border: 1px solid var(--mv-line);
  padding: 0.4rem 0.75rem;
  font-size: 0.85rem;
  background: var(--mv-white);
}
.mv-users-count {
  font-size: 0.78rem;
  color: var(--mv-muted);
  margin-left: auto;
}
.mv-users-list {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--mv-line);
  border-radius: var(--mv-radius-lg);
  background: var(--mv-white);
  box-shadow: var(--mv-shadow-sm);
  /* container-type makes the stacked-layout breakpoint below respond to
     this element's own rendered width, not the browser viewport - this
     list normally sits in a col-lg-7 column sharing the row with the
     Add/Edit Account panels, so its actual width is nowhere near the full
     viewport. A plain @media breakpoint checks viewport width and so
     never fires at typical desktop widths even though the column itself
     is well under 900px - that mismatch is what let a long, unbreakable
     "Last Login" timestamp (see .mv-users-lastlogin/FormatLastLogin
     below) starve the email column down to a handful of pixels and force
     it into one-character-per-line vertical text. overflow-x below is a
     belt-and-braces fallback for browsers without container query
     support (pre-2023 Chrome/Edge/Firefox, pre-2022 Safari) - the row
     simply scrolls horizontally instead of any column collapsing. */
  overflow-x: auto;
  overflow-y: hidden;
  container-type: inline-size;
  container-name: mv-users;
}
.mv-users-row {
  display: grid;
  /* Every track has an explicit floor via minmax() - this is the actual
     fix for the collapse bug, not just the container query above: even
     if the container query fails to apply, or another column's content
     (like the timestamp) is wider than expected, no column can be
     squeezed thinner than its floor. The row can overflow .mv-users-list
     horizontally instead (see overflow-x above), which is a far softer
     failure than any single column collapsing to sub-character width.
     Status/Last-Login/Actions (the last 3 tracks, 2026-08-26 uniformity
     fix) are FIXED px, not minmax(floor, auto) - each .mv-users-row is
     its own independent grid (one per account row, not one shared grid
     for the whole list), and "auto" is content-based sizing: a row with
     a longer last-login timestamp or an extra action button (e.g. the
     Delete button that only Super Admin sees, or 0 buttons on the
     signed-in user's own row) computed a DIFFERENT pixel width for that
     track than other rows. Since the two fr-based tracks (identity, role
     badge) absorb whatever width is left over after the fixed/auto
     tracks are sized, that per-row difference in the auto tracks was
     silently shifting the fr columns too - producing the misaligned
     columns between rows the user reported, even though every row shares
     the exact same grid-template-columns string. Fixed px tracks can't
     vary by content, so every row now computes identical column widths. */
  grid-template-columns: 44px minmax(150px, 1.6fr) minmax(130px, 0.8fr) minmax(120px, 1.1fr) 90px 150px 240px;
  gap: 0.75rem;
  align-items: center;
  padding: 0.65rem 0.9rem;
  border-bottom: 1px solid var(--mv-line);
  transition: background 0.12s ease;
}
.mv-users-row:last-child { border-bottom: none; }
.mv-users-row:hover { background: var(--mv-navy-50); }
.mv-users-row.d-none { display: none; }
.mv-users-identity { min-width: 0; }
/* Role/Properties/Status/Last-Login are wrapped in one .mv-users-meta div
   in the markup (2026-08-26 fix - see the container-query rules below for
   why). At this default/desktop width it's display:contents, which
   removes the wrapper's own box entirely but lets its 4 children keep
   participating directly as grid items of .mv-users-row - so the desktop
   7-track grid-template-columns above still lines them up as 4 separate
   aligned columns, unaffected by the wrapper's existence. */
.mv-users-meta { display: contents; }
.mv-users-email {
  font-weight: 700;
  font-size: 0.88rem;
  color: var(--mv-ink);
  /* Truncate with an ellipsis rather than wrap/break at all - an email
     address has no good place to break, and this is what actually
     guarantees the column can never be forced into vertical single-
     character text again, independent of how narrow it ends up. The
     full address is still readable via the native title tooltip. */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.mv-users-you {
  font-weight: 400;
  color: var(--mv-muted);
  font-size: 0.78rem;
}
.mv-users-name {
  font-size: 0.8rem;
  color: var(--mv-muted);
  overflow-wrap: break-word;
}
/* Address line (2026-08-26) - the account's Address field (set via
   MyProfile.aspx/EditUser.aspx, persisted by UserRepository.UpdateProfile)
   was never actually rendered anywhere on this list, which read to the
   user as the field "not reflecting" after they saved it - it was really
   just never wired up to display here. Shown only when present, truncated
   with an ellipsis (a full address has no good in-line break point) and
   the untruncated value kept in a title tooltip, same convention already
   used for long free-text fields elsewhere in this admin (see
   Admin/ListingRequests.aspx's Address/Message columns). */
.mv-users-address {
  font-size: 0.75rem;
  color: var(--mv-muted);
  margin-top: 0.1rem;
  max-width: 260px;
}
.mv-users-role-badge {
  display: inline-block;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  padding: 0.28em 0.65em;
  border-radius: 999px;
}
.mv-users-role-badge--elevated {
  background: var(--mv-navy-700);
  color: var(--mv-white);
}
.mv-users-role-badge--scoped {
  background: var(--mv-navy-100);
  color: var(--mv-navy-700);
}
.mv-users-properties {
  font-size: 0.78rem;
  color: var(--mv-muted);
}
.mv-users-lastlogin {
  font-size: 0.75rem;
  color: var(--mv-muted);
  white-space: nowrap;
}
.mv-users-actions {
  display: flex;
  gap: 0.35rem;
  justify-content: flex-end;
  flex-wrap: wrap;
}
.mv-users-empty {
  padding: 1.5rem;
  text-align: center;
  color: var(--mv-muted);
  font-size: 0.85rem;
}

/* @container, not @media - see .mv-users-list's container-type comment
   above. 1040px roughly matches the grid's own worst-case minimum total
   width (column floors/fixed widths + gaps + padding, ~1025px with the
   2026-08-26 fixed-px Status/Last-Login/Actions tracks above), so the
   stacked layout takes over slightly before the row would ever need to
   fall back to horizontal scrolling. */
@container mv-users (max-width: 1040px) {
  .mv-users-row {
    grid-template-columns: 40px 1fr auto;
    grid-template-areas:
      "avatar identity actions"
      "avatar meta meta";
    row-gap: 0.35rem;
  }
  .mv-users-row > .mv-adm-avatar { grid-area: avatar; }
  .mv-users-row > .mv-users-identity { grid-area: identity; }
  .mv-users-row > .mv-users-actions { grid-area: actions; }
  /* .mv-users-meta was display:contents (invisible wrapper) at desktop
     width, above - here it becomes a real, single flex box occupying the
     "meta" area, and its 4 children (role badge/properties/status/last
     login) wrap inside IT. Earlier version of this rule assigned
     grid-area:meta to those 4 children individually instead of to one
     shared wrapper - CSS Grid places every item sharing one grid-area in
     the exact same cell rather than flowing them, so they rendered
     stacked directly on top of each other (role badge under the status
     badge, etc. - the bug the user's screenshot showed). A single wrapper
     with its own internal flex-wrap is the correct fix, not a tweak of
     the broken version. */
  .mv-users-meta {
    grid-area: meta;
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
  }
  .mv-users-email {
    /* The stacked layout has room to wrap onto a second line instead of
       needing to protect a single grid track's width - ellipsis-only
       would hide part of the address for no reason once space isn't the
       constraint anymore. */
    white-space: normal;
    overflow-wrap: break-word;
  }
}

/* Fallback for browsers without container query support (see
   .mv-users-list's comment) - same stacked layout, gated on viewport
   width instead. A container-query-capable browser matches the rule
   above and this one both; since they set the same properties, the
   later one in source order (this @media block) would simply win with
   no conflict, so this is a genuine "older browser only" fallback in
   practice, not a competing breakpoint. */
@media (max-width: 1040px) {
  .mv-users-row {
    grid-template-columns: 40px 1fr auto;
    grid-template-areas:
      "avatar identity actions"
      "avatar meta meta";
    row-gap: 0.35rem;
  }
  .mv-users-row > .mv-adm-avatar { grid-area: avatar; }
  .mv-users-row > .mv-users-identity { grid-area: identity; }
  .mv-users-row > .mv-users-actions { grid-area: actions; }
  .mv-users-meta {
    grid-area: meta;
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
  }
  .mv-users-email {
    white-space: normal;
    overflow-wrap: break-word;
  }
}

/* Designation select-to-fill picker (2026-08-26) - a native <select> next
   to the actual free-text field it fills in, rather than the input+
   datalist pattern used elsewhere in this codebase (Employees.aspx,
   CreateVenue.aspx, etc.). Kept scoped to Admin/ManageUsers.aspx only:
   the user reported the datalist's suggestion popup wasn't visibly
   dropping down for them, and a real <select> is guaranteed to open
   consistently in every browser with no native-control ambiguity, at the
   cost of one extra control per field. The text input stays the single
   source of truth that actually submits (unchanged Request.Form field
   name), so free-text entry and already-saved values outside the master
   list both keep working exactly as before. */
.mv-designation-picker {
  margin-bottom: 0.4rem;
}

/* Public site mobile nav: real Offcanvas slide-in panel below the lg
   breakpoint (2026-08-29). Previously this was Bootstrap's default
   ".navbar-collapse" behaviour, which just expanded the menu list inline
   and pushed the whole page's content down - no backdrop, no way to close
   except re-tapping the hamburger. Site.Master's #navbarCollapse container
   is now a real ".offcanvas" (data-bs-toggle="offcanvas" on the toggler
   button) - Bootstrap's own component gives it the slide-in panel, dark
   backdrop, Esc-to-close and click-outside-to-close for free.
   This Bootstrap build is 5.0.1, which predates the built-in
   ".offcanvas-lg" responsive class (added in 5.2) that would otherwise
   auto-revert an offcanvas to a normal inline element at a chosen
   breakpoint - so the min-width block below hand-rolls that same
   behaviour for ".mv-mobile-nav" specifically, restoring the exact
   desktop nav layout that existed before this change. */
.mv-mobile-nav .offcanvas-body {
  padding-top: 0.5rem;
}
.mv-mobile-nav .navbar-nav .nav-link {
  padding-top: 0.6rem;
  padding-bottom: 0.6rem;
}

@media (max-width: 991.98px) {
  .mv-mobile-nav.offcanvas {
    background-color: #4c498c;
  }
  .mv-mobile-nav .offcanvas-header {
    border-bottom: 1px solid rgba(255, 255, 255, 0.15);
  }
  .mv-mobile-nav .offcanvas-title {
    color: #fff;
    font-weight: 600;
  }
  /* ".navbar .nav-link" (this file's own "Navbar" section, above) forces
     a dark navy !important color everywhere - correct for the real
     desktop navbar (a white background per ".navbar"/".navbar
     .container-fluid", also !important) but unreadable against this
     panel's dark background. Re-overridden here with !important, scoped
     to this breakpoint only, so the desktop navy-on-white nav (same
     markup, same classes, just laid out differently above 992px) is
     completely untouched. */
  .mv-mobile-nav .navbar-nav .nav-link,
  .mv-mobile-nav .navbar-nav .nav-link strong {
    color: #fff !important;
  }
  .mv-mobile-nav .navbar-nav .nav-link:hover,
  .mv-mobile-nav .navbar-nav .nav-link:focus {
    color: #f0d9a0 !important;
  }
  /* The language-switch and accessibility-toolbar <li>s both carry
     "align-self-center" for an unrelated reason (see Site.Master's own
     comments on them) - vertically centering them next to "Enquire Now"
     in the desktop horizontal row. In this panel's stacked column layout
     that same align-self centers them horizontally instead, pulling them
     off the left edge every other item uses. Reset to flex-start here so
     they line up with the rest, without touching the desktop behavior
     align-self-center was actually written for. */
  .mv-mobile-nav .navbar-nav .nav-item.align-self-center {
    align-self: flex-start !important;
  }
}

@media (min-width: 992px) {
  .mv-mobile-nav.offcanvas {
    position: static;
    z-index: auto;
    display: flex;
    flex-grow: 1;
    width: auto !important;
    height: auto !important;
    visibility: visible !important;
    background-color: transparent;
    border: 0;
    transform: none;
    transition: none;
  }
  .mv-mobile-nav .offcanvas-header {
    display: none;
  }
  .mv-mobile-nav .offcanvas-body {
    display: flex;
    flex-grow: 1;
    padding: 0;
    overflow-y: visible;
  }
}
