/* =========================================================
   Lagos Hotel Nairobi — Design System
   Mobile-first, ADA/WCAG 2.2 compliant
   ========================================================= */

/* --- Google Fonts Preconnect (in <head>) handles loading --- */

/* =========================================================
   1. DESIGN TOKENS
   ========================================================= */
:root {
  /* Primary — Header & Footer backgrounds */
  --color-slate:        #3e343d;
  --color-brown:        #493821;

  /* Accents — borders, secondary buttons, UI elements */
  --color-gold:         #c29952;
  --color-gold-muted:   #dfb55d;
  --color-bronze:       #7c6138;
  --color-tan:          #cbaf7d;

  /* Highlights — CTA buttons & hover states */
  --color-champagne:    #f1d780;
  --color-ochre:        #a3793b;

  /* Body — light, welcoming */
  --color-body-bg:      #faf8f5;
  --color-surface:      #ffffff;
  --color-surface-warm: #f5f0e8;
  --color-text:         #2a2228;
  --color-text-muted:   #5a4f58;
  --color-border:       #e0d4c0;
  --color-border-dark:  #cbaf7d;

  /* Status */
  --color-success:      #2e7d32;
  --color-error:        #c62828;

  /* Typography */
  --font-heading: 'Playfair Display', Georgia, 'Times New Roman', serif;
  --font-body:    'Inter', system-ui, -apple-system, sans-serif;

  /* Type scale (fluid) */
  --text-xs:   0.75rem;
  --text-sm:   0.875rem;
  --text-base: 1rem;
  --text-lg:   1.125rem;
  --text-xl:   1.25rem;
  --text-2xl:  1.5rem;
  --text-3xl:  clamp(1.75rem, 3vw, 2.25rem);
  --text-4xl:  clamp(2rem, 4vw, 3rem);
  --text-hero: clamp(2.25rem, 6vw, 4rem);

  /* Spacing */
  --space-1:  0.25rem;
  --space-2:  0.5rem;
  --space-3:  0.75rem;
  --space-4:  1rem;
  --space-5:  1.25rem;
  --space-6:  1.5rem;
  --space-8:  2rem;
  --space-10: 2.5rem;
  --space-12: 3rem;
  --space-16: 4rem;
  --space-20: 5rem;
  --space-24: 6rem;

  /* Radii */
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 20px;
  --radius-full: 9999px;

  /* Shadows */
  --shadow-sm:  0 1px 3px rgba(0,0,0,0.10), 0 1px 2px rgba(0,0,0,0.06);
  --shadow-md:  0 4px 12px rgba(0,0,0,0.10), 0 2px 4px rgba(0,0,0,0.06);
  --shadow-lg:  0 10px 30px rgba(0,0,0,0.12), 0 4px 8px rgba(0,0,0,0.06);
  --shadow-xl:  0 20px 50px rgba(0,0,0,0.15);

  /* Transitions */
  --ease-out:    cubic-bezier(0.16, 1, 0.3, 1);
  --transition:  250ms var(--ease-out);
  --transition-fast: 150ms var(--ease-out);

  /* Layout */
  --container-max: 1200px;
  --container-pad: var(--space-6);
  --header-height: 72px;
}

/* =========================================================
   2. CSS RESET & BASE
   ========================================================= */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  font-size: 16px;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

body {
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: 1.6;
  color: var(--color-text);
  background-color: var(--color-body-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

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

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

button {
  font-family: inherit;
  cursor: pointer;
  border: none;
  background: none;
}

ul, ol { list-style: none; }

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  line-height: 1.2;
  font-weight: 700;
  color: var(--color-text);
}

/* =========================================================
   3. ACCESSIBILITY UTILITIES
   ========================================================= */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: absolute;
  top: -100%;
  left: var(--space-4);
  z-index: 9999;
  padding: var(--space-3) var(--space-6);
  background: var(--color-champagne);
  color: var(--color-text);
  font-weight: 600;
  border-radius: var(--radius-md);
  transition: top var(--transition-fast);
}

.skip-link:focus {
  top: var(--space-4);
  outline: 3px solid var(--color-slate);
  outline-offset: 2px;
}

*:focus-visible {
  outline: 3px solid var(--color-gold);
  outline-offset: 3px;
  border-radius: var(--radius-sm);
}

/* =========================================================
   4. LAYOUT UTILITIES
   ========================================================= */
.container {
  width: 100%;
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--container-pad);
}

.section {
  padding-block: var(--space-20);
}

.section--alt {
  background-color: var(--color-surface-warm);
}

.section__header {
  text-align: center;
  max-width: 700px;
  margin-inline: auto;
  margin-bottom: var(--space-12);
}

.section__eyebrow {
  display: inline-block;
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-ochre);
  margin-bottom: var(--space-3);
}

.section__title {
  font-size: var(--text-3xl);
  margin-bottom: var(--space-4);
  color: var(--color-text);
}

.section__desc {
  font-size: var(--text-lg);
  color: var(--color-text-muted);
  line-height: 1.7;
}

/* =========================================================
   5. BUTTONS
   ========================================================= */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: 0.875rem 1.75rem;
  font-size: var(--text-base);
  font-weight: 600;
  border-radius: var(--radius-md);
  border: 2px solid transparent;
  transition: background-color var(--transition), color var(--transition),
              border-color var(--transition), transform var(--transition-fast),
              box-shadow var(--transition);
  min-height: 48px;
  min-width: 120px;
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  line-height: 1;
}

.btn:active { transform: translateY(1px); }

/* Primary CTA — Champagne background, Dark Slate text
   Default: #f1d780 bg + #3e343d text = ~10.5:1  ✓ WCAG AAA
   Hover:   #493821 bg + #f1d780 text =  ~7.9:1  ✓ WCAG AAA
   Previous hover (#a3793b bg + #fff text = 3.87:1) failed AA — fixed. */
.btn-primary {
  background-color: var(--color-champagne);
  color: var(--color-slate);
  border-color: var(--color-champagne);
}

.btn-primary:hover, .btn-primary:focus-visible {
  background-color: var(--color-brown);
  border-color: var(--color-brown);
  color: var(--color-champagne);
  box-shadow: var(--shadow-md);
}

/* Secondary — Gold border, transparent bg */
.btn-secondary {
  background-color: transparent;
  color: var(--color-gold);
  border-color: var(--color-gold);
}

.btn-secondary:hover, .btn-secondary:focus-visible {
  background-color: var(--color-gold);
  color: var(--color-text);
  box-shadow: var(--shadow-sm);
}

/* Ghost — on dark backgrounds */
.btn-ghost {
  background-color: transparent;
  color: #fff;
  border-color: rgba(255,255,255,0.5);
}

.btn-ghost:hover, .btn-ghost:focus-visible {
  background-color: rgba(255,255,255,0.15);
  border-color: #fff;
}

/* Full width */
.btn--full { width: 100%; }

/* Small */
.btn--sm {
  padding: 0.625rem 1.25rem;
  font-size: var(--text-sm);
  min-height: 40px;
}

/* =========================================================
   6. STICKY HEADER
   ========================================================= */
.header {
  position: sticky;
  top: 0;
  z-index: 500;
  background-color: var(--color-slate);
  height: var(--header-height);
  display: flex;
  align-items: center;
  box-shadow: 0 2px 8px rgba(0,0,0,0.25);
  transition: background-color var(--transition);
}

.header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-6);
  width: 100%;
}

.header__logo {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  text-decoration: none;
}

.header__logo img {
  height: 48px;
  width: auto;
}

.header__logo-text {
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  font-weight: 700;
  color: #fff;
  line-height: 1.1;
}

.header__logo-text span {
  display: block;
  font-size: var(--text-xs);
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-tan);
  font-family: var(--font-body);
}

/* Desktop nav handled by .nav-menu / .nav-link in Section 21c */

.header__actions {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-shrink: 0;
  /* order intentionally omitted — DOM order (logo → phone → hamburger) is correct on mobile */
}

.header__phone {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  color: rgba(255, 255, 255, 0.85);
  text-decoration: none;
  font-size: var(--text-sm);
  font-weight: 500;
  white-space: nowrap;
  transition: color var(--transition);
  min-height: 44px;
  padding: 0 var(--space-2);
  border-radius: var(--radius-sm);
}

.header__phone:hover,
.header__phone:focus-visible {
  color: var(--color-champagne);
  outline: 2px solid var(--color-champagne);
  outline-offset: 2px;
}

/* .header__phone svg — removed: icon stripped from header HTML */

.header__phone-text {
  display: none;
}

@media (max-width: 479px) {
  /* Prevent header overflow at 320px: tighten gap and reduce logo flex rigidity */
  .header__inner { gap: var(--space-3); }
  .header__logo { flex-shrink: 1; }
  .header__logo img { height: 40px; }
  /* Hide phone link below 480px — no text, no icon; nothing visible to show */
  .header__phone { display: none; }
}

@media (min-width: 480px) {
  .header__phone-text { display: inline; }
}

.header__book-btn {
  /* Visible at all widths — sole header CTA on mobile (nav-cta removed from drawer) */
  display: inline-flex;
  flex-shrink: 0;
  padding: 0.625rem 1.25rem;
  font-size: var(--text-sm);
  min-height: 40px;
  min-width: auto;
}

@media (max-width: 479px) {
  /* Tighter padding at 320px so logo + Book Now + hamburger fit comfortably */
  .header__book-btn { padding: 0.5rem 0.875rem; font-size: 0.75rem; }
}

/* Mobile nav handled by .nav-toggle / .nav-menu in Section 21 */

/* =========================================================
   7. HERO SECTION
   ========================================================= */
.hero {
  position: relative;
  min-height: calc(100svh - var(--header-height));
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  padding: var(--space-16) 0 var(--space-10);
}

.hero__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
}

.hero__bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

.hero__overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    160deg,
    rgba(62, 52, 61, 0.75) 0%,
    rgba(73, 56, 33, 0.65) 60%,
    rgba(0,0,0,0.55) 100%
  );
  z-index: 1;
}

.hero__content {
  position: relative;
  z-index: 2;
  text-align: center;
  max-width: 780px;
  padding-inline: var(--space-6);
}

.hero__eyebrow {
  display: inline-block;
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--color-champagne);
  margin-bottom: var(--space-4);
}

.hero__title {
  font-size: var(--text-hero);
  font-family: var(--font-heading);
  font-weight: 700;
  color: #fff;
  line-height: 1.15;
  text-shadow: 0 2px 20px rgba(0,0,0,0.3);
  margin-bottom: var(--space-5);
}

.hero__title em {
  font-style: italic;
  color: var(--color-champagne);
}

.hero__tagline {
  font-size: clamp(1rem, 2vw, 1.2rem);
  color: rgba(255,255,255,0.88);
  margin-bottom: var(--space-10);
  line-height: 1.6;
}

/* --- Booking Widget (Step 1) --- */
.booking-widget {
  background: rgba(255,255,255,0.97);
  backdrop-filter: blur(8px);
  border-radius: var(--radius-xl);
  padding: var(--space-6) var(--space-6);
  box-shadow: var(--shadow-xl);
  width: 100%;
  max-width: 720px;
  margin-inline: auto;
}

.booking-widget__title {
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  color: var(--color-text);
  margin-bottom: var(--space-5);
  font-weight: 700;
}

/* .booking-widget__fields layout is controlled by Section 21g alias rules below */

.field {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.field label {
  font-size: var(--text-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-text-muted);
}

.field input,
.field select {
  padding: 0.75rem 1rem;
  border: 1.5px solid var(--color-border);
  border-radius: var(--radius-md);
  font-size: var(--text-base);
  font-family: var(--font-body);
  color: var(--color-text);
  background: var(--color-surface);
  min-height: 48px;
  transition: border-color var(--transition), box-shadow var(--transition);
  width: 100%;
}

.field input:focus,
.field select:focus {
  outline: none;
  border-color: var(--color-gold);
  box-shadow: 0 0 0 3px rgba(194,153,82,0.15);
}

/* .booking-widget__submit / __btn controlled by Section 21g alias rules */

/* =========================================================
   8. ROOMS SECTION
   ========================================================= */
.rooms-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
}

.room-card {
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  border: 1px solid var(--color-border);
  transition: transform var(--transition), box-shadow var(--transition);
  display: flex;
  flex-direction: column;
}

.room-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lg);
}

/* .room-card__img removed — live rules use .room-card__media (below) */

.room-card__badge {
  position: absolute;
  top: var(--space-3);
  right: var(--space-3);
  background: var(--color-champagne);
  color: var(--color-text);
  font-size: var(--text-xs);
  font-weight: 700;
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-full);
  box-shadow: var(--shadow-sm);
}

.room-card__body {
  padding: var(--space-5);
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  flex: 1;
}

/* .room-card__name removed — live rule uses .room-card__title (below) */

.room-card__price {
  font-size: var(--text-lg);
  font-weight: 700;
  color: var(--color-gold);
}

.room-card__price span {
  font-size: var(--text-sm);
  font-weight: 400;
  color: var(--color-text-muted);
}

.room-card__desc {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: 1.6;
}

/* .amenity-tag / .room-card__cta removed — live rules below use .room-card__amenities li / .room-card__footer */

/* ── HTML uses these class names — aliases for original CSS names ── */
.room-card__media {
  position: relative;
  aspect-ratio: 16/10;
  overflow: hidden;
  flex-shrink: 0;
}

.room-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 400ms var(--ease-out);
}

.room-card:hover .room-card__media img {
  transform: scale(1.04);
}

.room-card__title {
  font-size: var(--text-xl);
  font-family: var(--font-heading);
  margin: 0;
}

.room-card__footer {
  margin-top: auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  flex-wrap: wrap;
}

.room-card__amenities {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  list-style: none;
  padding: 0;
  margin: 0;
}

.room-card__amenities li {
  display: inline-block;
  font-size: var(--text-xs);
  padding: var(--space-1) var(--space-3);
  background: var(--color-surface-warm);
  color: var(--color-bronze);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-full);
  font-weight: 500;
  margin: var(--space-1) var(--space-1) 0 0;
}

/* ── Badge variants ── */
.room-card__badge--suite {
  background: var(--color-slate);
  color: var(--color-champagne);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.room-card__badge--popular {
  background: var(--color-gold);
  color: var(--color-brown);
}

/* ── Featured card wrapper ── */
.rooms-wrapper {
  display: flex;
  flex-direction: column;
  gap: var(--space-8);
}

/* ── Safari Suite hero card helpers ── */
.suite-eyebrow {
  font-size: var(--text-xs);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--color-gold);
  margin: 0;
}

.room-card__title--lg {
  font-size: var(--text-3xl);
  line-height: 1.2;
}

/* =========================================================
   9. DINING SECTION
   ========================================================= */
.dining-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-10);
  align-items: center;
}

.dining-gallery {
  border-radius: var(--radius-lg);
  overflow: hidden;
}

.dining-gallery__main {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16/9;
  object-fit: cover;
  border-radius: var(--radius-lg);
}

.dining-gallery__thumb {
  border-radius: var(--radius-md);
  overflow: hidden;
  aspect-ratio: 4/3;
}

.dining-gallery__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.dining-content {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
}

.dining-content__eyebrow {
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-ochre);
}

.dining-content__title {
  font-size: var(--text-3xl);
}

.dining-content__desc {
  color: var(--color-text-muted);
  line-height: 1.75;
}

.dining-highlights {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.dining-highlight {
  display: flex;
  gap: var(--space-3);
  align-items: flex-start;
}

.dining-highlight__icon {
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  background: var(--color-surface-warm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.1rem;
}

.dining-highlight__text strong {
  display: block;
  font-size: var(--text-sm);
  font-weight: 600;
}

.dining-highlight__text span {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

/* =========================================================
   10. MEETINGS SECTION
   ========================================================= */
.meetings-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-10);
  align-items: center;
}

/* .meetings-content / .meetings-gallery / .meetings-gallery img
   — canonical rules live in Section 21j (below); these early drafts are superseded.
   Tombstoned to avoid cascade confusion. */
/* .meetings-content { display: flex; flex-direction: column; gap: var(--space-6); } */
/* .meetings-gallery { border-radius: var(--radius-lg); overflow: hidden; } */
/* .meetings-gallery img { … aspect-ratio: 16/9; object-fit: cover; … } */

/* .meetings-img — orphaned selector (HTML uses .meetings-gallery); kept as tombstone */
/* .meetings-img { … } */
/* .meetings-img img { … } */

/* Vertical bulleted amenity list — AEO-friendly plain <ul>/<li> */
.meetings-features {
  list-style: disc;
  padding-left: var(--space-5);   /* indent for bullet glyph */
}

.meetings-features li {
  font-size: var(--text-base);
  color: var(--color-text-muted);
  line-height: 1.65;
  margin-bottom: var(--space-3);
}

.meetings-features li:last-child {
  margin-bottom: 0;
}

/* ── Tombstoned card variants (HTML now uses plain <li> items) ──
.meetings-feature        { … }
.meetings-feature__icon  { … }
.meetings-feature__label { … }
.meetings-feature__desc  { … }
─────────────────────────────────────────────────────────────── */

/* =========================================================
   11. LOCAL GUIDE SECTION
   ========================================================= */
.local-guide-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
}

.guide-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-left: 4px solid var(--color-gold);
  border-radius: var(--radius-md);
  padding: var(--space-5);
  display: flex;
  gap: var(--space-4);
  align-items: flex-start;
  transition: border-left-color var(--transition), box-shadow var(--transition);
}

.guide-card:hover {
  border-left-color: var(--color-ochre);
  box-shadow: var(--shadow-md);
}

.guide-card__icon {
  flex-shrink: 0;
  font-size: 1.75rem;
  line-height: 1;
}

.guide-card__title {
  font-size: var(--text-lg);
  font-family: var(--font-heading);
  margin-bottom: var(--space-2);
}

.guide-card__dist {
  display: inline-block;
  font-size: var(--text-xs);
  font-weight: 600;
  background: var(--color-champagne);
  color: var(--color-text);
  padding: 2px 8px;
  border-radius: var(--radius-full);
  margin-bottom: var(--space-2);
}

.guide-card__desc {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: 1.6;
}

/* =========================================================
   12. BOOKING MODAL (Step 2)
   ========================================================= */
/* Primary .modal-overlay rules are in Section 21l (z-index 1200, body.modal-open trigger).
   This legacy block is kept for the .open class fallback trigger used by booking.js. */
.modal-overlay {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 1200;                  /* aligned with Section 21l */
  background: rgba(62, 52, 61, 0.7);
  backdrop-filter: blur(4px);
  align-items: flex-start;
  justify-content: center;
  padding: var(--space-6) var(--space-4);
  overflow-y: auto;
}

.modal-overlay.open {
  display: flex;
}

/* Section 12 legacy .modal — authoritative rules are in Section 21l.
   This block kept only for specificity fallback; Section 21l wins via cascade. */
.modal {
  background: var(--color-surface);
  border-radius: var(--radius-xl);
  width: 100%;
  max-width: 640px; /* harmonized with Section 21l (was 680px) */
  box-shadow: var(--shadow-xl);
  /* overflow-y: auto set in Section 21l; do not set overflow: hidden here */
}

.modal__header {
  background: var(--color-slate);
  padding: var(--space-5) var(--space-6);
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.modal__title {
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  color: #fff;
}

.modal__close {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-sm);
  background: rgba(255,255,255,0.1);
  color: #fff;
  font-size: var(--text-xl);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background-color var(--transition);
  border: none;
  cursor: pointer;
}

.modal__close:hover { background: rgba(255,255,255,0.2); }

.modal__body {
  padding: var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
}

/* Stay summary bar */
.stay-summary {
  background: var(--color-surface-warm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-4) var(--space-5);
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
}

.stay-summary__item {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.stay-summary__label {
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-text-muted);
  font-weight: 600;
}

.stay-summary__value {
  font-size: var(--text-sm);
  font-weight: 700;
  color: var(--color-text);
}

/* Room selection */
.room-select-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
}

.room-option {
  display: block;
  position: relative;
  cursor: pointer;
}

/* Hide native radio visually; keep it in DOM so :checked + JS both work */
.room-option input[type="radio"] {
  position: absolute;
  opacity: 0;
  width: 1px;
  height: 1px;
  pointer-events: none;
}
/* Tombstoned: .room-option-label / __img / __info / __name / __price
   (stale single-hyphen variants — replaced by .room-option__label* in section 21h) */

/* Tombstoned: .upsells / .upsell-item* — upsell add-ons removed from booking flow */

/* Form fields in modal */
.form-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}

.form-grid .field input,
.form-grid .field select,
.form-grid .field textarea {
  padding: 0.75rem 1rem;
  border: 1.5px solid var(--color-border);
  border-radius: var(--radius-md);
  font-size: var(--text-base);
  font-family: var(--font-body);
  color: var(--color-text);
  background: var(--color-surface);
  min-height: 48px;
  transition: border-color var(--transition), box-shadow var(--transition);
  width: 100%;
}

.form-grid .field textarea {
  min-height: 100px;
  resize: vertical;
}

.form-grid .field input:focus,
.form-grid .field select:focus,
.form-grid .field textarea:focus {
  outline: none;
  border-color: var(--color-gold);
  box-shadow: 0 0 0 3px rgba(194,153,82,0.15);
}

/* .field label defined in Section 7; duplicate removed from Section 12 */

.field--required label::after {
  content: ' *';
  color: var(--color-error);
}

/* Price summary */
.price-summary {
  background: var(--color-surface-warm);
  border: 1px solid var(--color-border-dark);
  border-radius: var(--radius-md);
  padding: var(--space-4) var(--space-5);
}

.price-summary__title {
  font-size: var(--text-sm);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-text-muted);
  margin-bottom: var(--space-3);
}

.price-line {
  display: flex;
  justify-content: space-between;
  font-size: var(--text-sm);
  padding-block: var(--space-1);
}

.price-line--total {
  border-top: 1px solid var(--color-border);
  margin-top: var(--space-2);
  padding-top: var(--space-3);
  font-weight: 700;
  font-size: var(--text-base);
  color: var(--color-ochre);
}

/* Disclaimer */
.disclaimer {
  background: rgba(194,153,82,0.08);
  border: 1px solid var(--color-tan);
  border-radius: var(--radius-md);
  padding: var(--space-4);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: 1.6;
}

.disclaimer strong {
  color: var(--color-text);
  display: block;
  margin-bottom: var(--space-1);
}

/* Form feedback */
.form-feedback {
  display: none;
  padding: var(--space-4);
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  font-weight: 500;
  line-height: 1.5;
}

/* Tombstoned: .form-feedback.success / .form-feedback.error
   (old single-class modifier syntax — JS now sets BEM .form-feedback--error
   and .form-feedback--success; see section 21r for the operative rules) */

/* Loading state */
.btn.loading {
  position: relative;
  color: transparent;
  pointer-events: none;
}

.btn.loading::after {
  content: '';
  position: absolute;
  width: 18px;
  height: 18px;
  border: 2px solid transparent;
  border-top-color: currentColor;
  border-radius: 50%;
  animation: spin 0.6s linear infinite;
  color: var(--color-text);
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* =========================================================
   13. FOOTER
   ========================================================= */
.footer {
  background-color: var(--color-brown);
  color: #fff;
  padding-block: var(--space-16) var(--space-8);
}

.footer__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-10);
  margin-bottom: var(--space-10);
}

.footer__brand img {
  height: 50px;
  width: auto;
  margin-bottom: var(--space-4);
}

.footer__brand-name {
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  color: #fff;
  margin-bottom: var(--space-2);
}

.footer__tagline {
  font-size: var(--text-sm);
  color: var(--color-tan);
  line-height: 1.6;
}

.footer__heading {
  font-size: var(--text-xs);
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-tan);
  margin-bottom: var(--space-4);
}

.footer__contact-item {
  display: flex;
  gap: var(--space-3);
  align-items: flex-start;
  margin-bottom: var(--space-3);
  font-size: var(--text-sm);
  color: rgba(255,255,255,0.85);
}

.footer__contact-item a {
  color: rgba(255,255,255,0.85);
  text-decoration: none;
  transition: color var(--transition);
}

.footer__contact-item a:hover { color: var(--color-champagne); }

.footer__social {
  display: flex;
  gap: var(--space-3);
  margin-top: var(--space-4);
}

.footer__social-link {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-md);
  border: 1px solid rgba(255,255,255,0.2);
  color: rgba(255,255,255,0.8);
  font-size: var(--text-sm);
  font-weight: 700;
  text-decoration: none;
  transition: background-color var(--transition), color var(--transition), border-color var(--transition);
}

.footer__social-link:hover {
  background-color: var(--color-gold);
  border-color: var(--color-gold);
  color: var(--color-text);
}

.footer__nav-link {
  display: block;
  font-size: var(--text-sm);
  color: rgba(255,255,255,0.8);
  margin-bottom: var(--space-2);
  text-decoration: none;
  transition: color var(--transition);
}

.footer__nav-link:hover { color: var(--color-champagne); }

.footer__payments {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin-top: var(--space-4);
}

.payment-badge {
  padding: var(--space-1) var(--space-3);
  border: 1px solid rgba(255,255,255,0.2);
  border-radius: var(--radius-sm);
  font-size: var(--text-xs);
  font-weight: 600;
  color: rgba(255,255,255,0.8);
}

.footer__bottom {
  border-top: 1px solid rgba(255,255,255,0.12);
  padding-top: var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  align-items: center;
  text-align: center;
}

.footer__copyright {
  font-size: var(--text-xs);
  color: rgba(255,255,255,0.5);
}

.footer__legal-links {
  display: flex;
  gap: var(--space-4);
  flex-wrap: wrap;
  justify-content: center;
}

.footer__legal-link {
  font-size: var(--text-xs);
  color: rgba(255,255,255,0.5);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color var(--transition);
  cursor: pointer;
  background: none;
  border: none;
  font-family: inherit;
}

.footer__legal-link:hover { color: var(--color-tan); }

/* =========================================================
   14. FLOATING WHATSAPP BUTTON
   ========================================================= */
.whatsapp-float {
  position: fixed;
  bottom: 20px;
  right: 20px;
  z-index: 600;
  width: 58px;
  height: 58px;
  background: #25D366;
  border-radius: var(--radius-full);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 16px rgba(37,211,102,0.4), var(--shadow-md);
  text-decoration: none;
  transition: transform var(--transition), box-shadow var(--transition);
}

.whatsapp-float:hover {
  transform: scale(1.08);
  box-shadow: 0 6px 20px rgba(37,211,102,0.5), var(--shadow-lg);
}

.whatsapp-float svg {
  width: 30px;
  height: 30px;
  fill: #fff;
}

/* Tooltip */
.whatsapp-float::before {
  content: 'Chat with us';
  position: absolute;
  right: calc(100% + 10px);
  background: var(--color-text);
  color: #fff;
  font-size: var(--text-xs);
  font-weight: 600;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-sm);
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--transition);
  font-family: var(--font-body);
}

.whatsapp-float:hover::before { opacity: 1; }

/* =========================================================
   15. COOKIE CONSENT BANNER
   ========================================================= */
/* Primary .cookie-banner rules are in Section 21v (z-index 1100, hidden attribute trigger).
   This legacy block is kept for the .visible class fallback trigger used by main.js. */
.cookie-banner {
  display: none;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 1100;                  /* aligned with Section 21v */
  background: var(--color-slate);
  color: #fff;
  padding: var(--space-4) var(--space-6);
  box-shadow: 0 -4px 20px rgba(0,0,0,0.2);
}

.cookie-banner.visible { display: block; }

.cookie-banner__inner {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  align-items: flex-start;
  max-width: var(--container-max);
  margin-inline: auto;
}

.cookie-banner__text {
  font-size: var(--text-sm);
  color: rgba(255,255,255,0.85);
  line-height: 1.6;
}

.cookie-banner__text a {
  color: var(--color-champagne);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.cookie-banner__actions {
  display: flex;
  gap: var(--space-3);
  flex-wrap: wrap;
}

/* =========================================================
   16. PRIVACY MODAL
   ========================================================= */
.privacy-modal {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 1400; /* above booking modal overlay (1200) and dialog (1300) */
  background: rgba(0,0,0,0.6);
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
}

.privacy-modal.open { display: flex; }

.privacy-modal__content {
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  padding: var(--space-8);
  max-width: 600px;
  width: 100%;
  max-height: 80vh;
  overflow-y: auto;
  position: relative;
}

.privacy-modal__close {
  position: sticky;
  top: 0;
  float: right;
  width: 36px;
  height: 36px;
  background: var(--color-surface-warm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-size: var(--text-lg);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background-color var(--transition);
}

.privacy-modal__close:hover { background: var(--color-border); }

.privacy-modal h2 {
  font-size: var(--text-2xl);
  margin-bottom: var(--space-4);
}

.privacy-modal p, .privacy-modal li {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: 1.7;
  margin-bottom: var(--space-3);
}

/* =========================================================
   17. CONTACT PAGE
   ========================================================= */
.page-hero {
  background: var(--color-slate);
  padding: var(--space-16) 0 var(--space-12);
  text-align: center;
}

/* WCAG AA contrast fix — page-hero headings and body copy on dark slate.
   The HTML uses bare h1/p tags (not .page-hero__title / .page-hero__desc),
   so these element-scoped rules are required for correct cascade resolution. */
.page-hero h1,
.page-hero h2,
.page-hero p {
  color: #ffffff; /* 12.6:1 contrast on --color-slate (#3e343d) — passes WCAG AA & AAA */
}

/* Eyebrow overline: gold accent overrides the global .section-eyebrow ochre (#a3793b)
   which only achieves ~3.2:1 on slate. Gold (#c29952) achieves ~4.7:1 — passes WCAG AA. */
.page-hero .section-eyebrow {
  color: var(--color-gold); /* #c29952 — 4.7:1 on #3e343d */
}

/* ── Legacy BEM helpers (unused in current HTML; retained for future use) ── */
.page-hero__title {
  font-size: var(--text-4xl);
  color: #fff;
  margin-bottom: var(--space-3);
}

.page-hero__desc {
  font-size: var(--text-lg);
  color: var(--color-tan);
  max-width: 500px;
  margin-inline: auto;
}

.contact-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-10);
  padding-block: var(--space-16) var(--space-8); /* bottom reduced — map follows immediately */
  align-items: start; /* form top-aligns with contact-info column */
}

.contact-info {
  display: flex;
  flex-direction: column;
  gap: var(--space-6);
}

.contact-info-item {
  display: flex;
  gap: var(--space-4);
  align-items: flex-start;
}

.contact-info-item__icon {
  flex-shrink: 0;
  width: 48px;
  height: 48px;
  background: var(--color-surface-warm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.25rem;
}

.contact-info-item__label {
  font-size: var(--text-xs);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-ochre);
  margin-bottom: var(--space-1);
}

.contact-info-item__value {
  font-size: var(--text-base);
  color: var(--color-text);
  line-height: 1.5;
}

.contact-info-item__value a {
  color: var(--color-bronze);
  text-decoration: none;
  transition: color var(--transition);
}

.contact-info-item__value a:hover { color: var(--color-ochre); }

.contact-form-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  padding: var(--space-8);
  box-shadow: var(--shadow-md);
}

.contact-form-card__title {
  font-size: var(--text-2xl);
  margin-bottom: var(--space-6);
}

.map-embed {
  margin-top: var(--space-8);
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid var(--color-border);
}

.map-embed iframe {
  width: 100%;
  height: 280px;
  border: none;
  display: block;
}

/* =========================================================
   18. FAQ PAGE
   ========================================================= */
.faq-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-12);
  padding-block: var(--space-16);
}

.faq-sidebar {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.faq-sidebar__title {
  font-size: var(--text-sm);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-text-muted);
  margin-bottom: var(--space-3);
}

.faq-sidebar__link {
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  border-radius: var(--radius-sm);
  text-decoration: none;
  transition: color var(--transition), background-color var(--transition);
  border-left: 3px solid transparent;
}

.faq-sidebar__link:hover,
.faq-sidebar__link.active {
  color: var(--color-ochre);
  background: var(--color-surface-warm);
  border-left-color: var(--color-gold);
}

.faq-category {
  margin-bottom: var(--space-10);
}

.faq-category__title {
  font-size: var(--text-2xl);
  margin-bottom: var(--space-6);
  padding-bottom: var(--space-3);
  border-bottom: 2px solid var(--color-border);
  color: var(--color-slate);
}

.faq-item {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  margin-bottom: var(--space-3);
  overflow: hidden;
  transition: box-shadow var(--transition);
}

.faq-item:hover { box-shadow: var(--shadow-sm); }

.faq-item summary {
  list-style: none;
  padding: var(--space-5) var(--space-5);
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-4);
  font-weight: 600;
  font-size: var(--text-base);
  color: var(--color-text);
  transition: background-color var(--transition);
}

.faq-item summary:hover { background: var(--color-surface-warm); }

.faq-item summary::-webkit-details-marker { display: none; }

.faq-item summary::after {
  content: '+';
  font-size: var(--text-xl);
  font-weight: 300;
  color: var(--color-gold);
  flex-shrink: 0;
  transition: transform var(--transition);
}

.faq-item[open] summary::after {
  transform: rotate(45deg);
}

.faq-item[open] summary {
  background: var(--color-surface-warm);
  color: var(--color-ochre);
}

.faq-answer {
  padding: var(--space-5);
  border-top: 1px solid var(--color-border);
  font-size: var(--text-base);
  color: var(--color-text-muted);
  line-height: 1.75;
}

.faq-answer p + p { margin-top: var(--space-3); }

/* =========================================================
   19. RESPONSIVE BREAKPOINTS
   ========================================================= */

/* Small mobile and up: 480px */
@media (min-width: 480px) {
  /* booking-widget handled by Section 21g alias — no override here */

  .rooms-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Tablet: 768px */
@media (min-width: 768px) {
  :root {
    --container-pad: var(--space-8);
  }

  /* .nav / .hamburger removed — desktop nav handled by .nav-menu / .nav-toggle in Section 21 */

  /* booking-widget handled by Section 21g alias */

  /* ── Featured Safari Suite: side-by-side on tablet+ ── */
  .room-card--featured {
    display: grid;
    grid-template-columns: 1.15fr 1fr;
  }

  .room-card--featured .room-card__media {
    aspect-ratio: auto;
    min-height: 420px;
    height: 100%;
    border-radius: 0; /* parent .room-card has overflow:hidden — corner clipping handled there */
  }

  .room-card--featured .room-card__body {
    padding: var(--space-10) var(--space-8);
    /* justify-content intentionally omitted — margin-top: auto on .room-card__footer
       anchors the price/CTA row to the bottom of the flex column */
  }

  .room-card--featured .room-card__title--lg {
    font-size: var(--text-4xl);
  }

  /* Z-pattern: Dining (image | text) ↔ Meetings (text | image) — both equal halves */
  .dining-layout,
  .meetings-layout {
    grid-template-columns: 1fr 1fr;
  }

  .local-guide-grid,
  .local-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .footer__grid {
    grid-template-columns: 1fr 1fr;
  }

  .contact-layout {
    grid-template-columns: 1fr 1fr;
  }

  .faq-layout {
    grid-template-columns: 220px 1fr;
  }

  .cookie-banner__inner {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
  }

  .room-select-grid {
    grid-template-columns: 1fr 1fr;
  }

  .form-grid {
    grid-template-columns: 1fr 1fr;
  }

  .form-grid .field--full {
    grid-column: 1 / -1;
  }
}

/* Desktop: 1024px */
@media (min-width: 1024px) {
  /* 4 rooms in 2×2 — perfectly balanced, no 3-col needed */
  .rooms-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .footer__grid {
    grid-template-columns: 2fr 1fr 1fr 1fr;
  }

  .local-guide-grid,
  .local-grid {
    grid-template-columns: repeat(4, 1fr);
  }

}

/* =========================================================
   20. UTILITY / DECORATIVE
   ========================================================= */
.gold-divider {
  width: 60px;
  height: 3px;
  background: linear-gradient(90deg, var(--color-gold), var(--color-champagne));
  border-radius: var(--radius-full);
  margin: var(--space-4) auto 0;
}

.gold-divider--left {
  margin-left: 0;
}

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

.mt-4  { margin-top: var(--space-4); }
.mt-6  { margin-top: var(--space-6); }
.mt-8  { margin-top: var(--space-8); }
.mb-4  { margin-bottom: var(--space-4); }
.mb-6  { margin-bottom: var(--space-6); }

/* Fade-in animation (triggered by JS IntersectionObserver) */
.fade-in {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 500ms var(--ease-out), transform 500ms var(--ease-out);
}

.fade-in.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Stagger children */
.fade-in:nth-child(2) { transition-delay: 80ms; }
.fade-in:nth-child(3) { transition-delay: 160ms; }
.fade-in:nth-child(4) { transition-delay: 240ms; }
.fade-in:nth-child(5) { transition-delay: 320ms; }

/* =========================================================
   21. SUPPLEMENTAL — HTML-to-CSS class alignment
   JS uses hidden attribute; aliases close naming-convention
   drift between original CSS and final HTML/JS authoring.
   ========================================================= */

/* ----- 21a. FADE-IN (JS uses --visible modifier) ---------- */
.fade-in--visible {
  opacity: 1;
  transform: translateY(0);
}

/* ----- 21b. HEADER SCROLL STATE --------------------------- */
.header--scrolled {
  box-shadow: var(--shadow-md);
  background: rgba(62, 52, 61, 0.97);
  backdrop-filter: blur(8px);
}

/* ----- 21c. NAVIGATION ------------------------------------ */
/* Single <nav class="nav-menu"> toggled with hidden attribute */
.nav-menu[hidden] { display: none !important; }

/* Mobile: full-screen overlay when visible */
.nav-menu {
  position: fixed;
  inset: 0;
  background: var(--color-slate);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-6);
  z-index: 999;
  padding: var(--space-8);
}

@media (min-width: 768px) {
  /* Always show nav on desktop regardless of hidden attribute (JS toggles it on mobile) */
  .nav-menu,
  .nav-menu[hidden] {
    display: flex !important;
    position: static;
    inset: auto;
    background: transparent;
    flex-direction: row;
    justify-content: center;
    gap: var(--space-6);
    padding: 0;
    z-index: auto;
    order: 2;
    flex: 1;
  }

  .header__actions {
    order: 3;
    flex-shrink: 0;
  }
}

.nav-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-6);
}

@media (min-width: 768px) {
  .nav-list {
    flex-direction: row;
    gap: var(--space-5);
  }
}

.nav-link {
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: 500;
  color: rgba(255, 255, 255, 0.9);  /* white on Dark Slate header */
  text-decoration: none;
  letter-spacing: 0.03em;
  transition: color 200ms;
}

.nav-link:hover,
.nav-link:focus-visible {
  color: #ffffff;
}

.nav-link--active {
  color: #ffffff;
  border-bottom: 2px solid var(--color-champagne);
  padding-bottom: 2px;
}

/* .nav-cta / .nav-cta:hover — removed: duplicate Book Now button stripped from nav HTML */

/* Hamburger button — HTML uses .nav-toggle */
.nav-toggle {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  width: 44px;
  height: 44px;
  background: transparent;
  border: none;
  cursor: pointer;
  padding: var(--space-2);
  border-radius: var(--radius-sm);
  color: var(--color-champagne);
}

.nav-toggle:focus-visible {
  outline: 2px solid var(--color-champagne);
  outline-offset: 2px;
}

@media (min-width: 768px) {
  .nav-toggle { display: none; }
}

/* ----- 21d. TRUST BAR ------------------------------------- */
.trust-bar {
  background: var(--color-surface-warm);
  border-bottom: 1px solid var(--color-border);
  padding: var(--space-3) 0;
}

.trust-bar__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-4) var(--space-8);
  max-width: var(--container-max, 1200px);
  margin: 0 auto;
  padding: 0 var(--space-4);
}

.trust-item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  font-weight: 500;
}

.trust-item__icon {
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  color: var(--color-gold);
}

/* ----- 21e. SECTION HEADER ALIASES ----------------------- */
.section-header  { text-align: center; margin-bottom: var(--space-10); }
.section-eyebrow { font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--color-ochre); margin-bottom: var(--space-3); }
.section-title   { font-family: var(--font-heading); font-size: var(--text-3xl); color: var(--color-text); margin-bottom: var(--space-4); }
.section-subtitle{ font-size: var(--text-lg); color: var(--color-text-muted); max-width: 56ch; margin: 0 auto; }

/* ----- 21f. INTRODUCTION SECTION (text-only, centered) --- */
.intro-section {
  background: var(--color-surface-warm);
  padding-block: var(--space-20);
}

.intro-section__content {
  max-width: 68ch;
  margin-inline: auto;
  text-align: center;
}

.intro-section__heading {
  font-family: var(--font-heading);
  font-size: var(--text-4xl);
  color: var(--color-text);
  line-height: 1.15;
}

/* Gold accent bar — auto-centered via margin: auto */
.intro-section__heading::after {
  content: '';
  display: block;
  width: 56px;
  height: 3px;
  background: var(--color-gold);
  border-radius: 2px;
  margin: var(--space-4) auto 0;
}

.intro-section__body {
  font-size: var(--text-lg);
  color: var(--color-text-muted);
  line-height: 1.75;
  margin-top: var(--space-5);
}

@media (max-width: 767px) {
  .intro-section {
    padding-block: var(--space-14);
  }

  .intro-section__heading {
    font-size: var(--text-3xl);
  }
}

/* ----- 21f-b. HERO ALIASES -------------------------------- */
.hero__subtitle { font-size: var(--text-xl); color: rgba(255,255,255,0.85); margin-bottom: var(--space-8); max-width: 50ch; }

/* ----- 21g. ROOMS SECTION ALIASES ------------------------- */
.room-card__media  { aspect-ratio: 16/10; overflow: hidden; border-radius: var(--radius-lg) var(--radius-lg) 0 0; }
.room-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 400ms var(--ease-out); }
.room-card:hover .room-card__media img { transform: scale(1.04); }

.room-card__title  { font-family: var(--font-heading); font-size: var(--text-xl); color: var(--color-text); margin-bottom: var(--space-2); }
.room-card__footer { display: flex; align-items: center; justify-content: space-between; margin-top: var(--space-5); padding-top: var(--space-4); border-top: 1px solid var(--color-border); }

.rooms-note { text-align: center; margin-top: var(--space-8); font-size: var(--text-sm); color: var(--color-text-muted); }

/* Booking widget form/button aliases */
/* Mobile: stack fields, full-width button */
.booking-widget__form {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.booking-widget__fields {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.booking-widget__btn {
  width: 100%;
  justify-content: center;
}

/* Desktop: single evenly-distributed 4-column row */
@media (min-width: 768px) {
  .booking-widget__form {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr auto;
    gap: var(--space-3);
    align-items: end;
  }
  /* Promote .booking-widget__fields' children directly into the form grid.
     Zero out margin-bottom so promoted form-group items align flush with the button. */
  .booking-widget__fields {
    display: contents;
  }
  .booking-widget__fields > .form-group {
    margin-bottom: 0;
  }
  .booking-widget__btn {
    width: auto;
    align-self: end;
    white-space: nowrap;
    padding-left: var(--space-6);
    padding-right: var(--space-6);
  }
}

/* ----- 21h. ROOM OPTIONS (booking modal step 1) ----------- */
.room-options {
  display: grid;
  gap: var(--space-3);
}

.room-option__label {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  padding: var(--space-4);
  border: 2px solid var(--color-border);
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: border-color 200ms, background 200ms;
}

.room-option__label:hover {
  border-color: var(--color-gold);
  background: var(--color-surface-warm);
}

input[type="radio"]:checked + .room-option__label,
.room-option__label:has(input:checked) {
  border-color: var(--color-gold);
  background: rgba(194,153,82,0.08);
}

.room-option__name  { font-weight: 600; color: var(--color-text); font-size: var(--text-base); }
.room-option__price { font-size: var(--text-sm); color: var(--color-ochre); font-weight: 600; margin-top: var(--space-1); }

/* ----- 21i. DINING ALIASES -------------------------------- */
.dining-desc      { font-size: var(--text-lg); color: var(--color-text-muted); line-height: 1.7; }
.dining-features  { display: flex; flex-wrap: wrap; gap: var(--space-3); margin-top: var(--space-5); }

.dining-gallery__thumbs {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  gap: var(--space-2);
  margin-top: var(--space-4);
}

/* ----- 21j. MEETINGS SECTION ----------------------------- */
.meetings-content { display: grid; gap: var(--space-10); }
.meetings-desc    { font-size: var(--text-lg); color: var(--color-text-muted); line-height: 1.7; }
.meetings-gallery {
  border-radius: var(--radius-lg);
  overflow: hidden;
  /* margin-top removed: grid align-items:center handles vertical positioning */
}
.meetings-gallery img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: var(--radius-lg);
}

/* ----- 21k. LOCAL GUIDE ALIASES -------------------------- */
.local-grid       { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--space-6); }
.local-card       { background: var(--color-surface); border-radius: var(--radius-lg); padding: var(--space-6); box-shadow: var(--shadow-sm); transition: box-shadow 250ms; }
.local-card:hover { box-shadow: var(--shadow-md); }
.local-card__icon { width: 44px; height: 44px; margin-bottom: var(--space-3); color: var(--color-gold); }

/* ----- 21l. MODAL SUPPLEMENTAL --------------------------- */
/* Overlay: shown when body.modal-open */
body.modal-open { overflow: hidden; }

.modal-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.55);
  z-index: 1200;
  align-items: center;
  justify-content: center;
  padding: var(--space-4);
}

body.modal-open .modal-overlay {
  display: flex;
}

/* Modal element itself uses hidden attribute */
.modal[hidden] { display: none !important; }

.modal {
  position: fixed;
  inset: 0;
  z-index: 1300;
  background: var(--color-surface);
  overflow-y: auto;
  padding: var(--space-8) var(--space-6);
  max-width: 640px;
  margin: auto;
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-xl);
  height: fit-content;
  max-height: 90vh;
  top: 50%;
  transform: translateY(-50%);
}

@media (max-width: 640px) {
  .modal {
    inset: auto 0 0;
    border-radius: var(--radius-xl) var(--radius-xl) 0 0;
    max-height: 92vh;
    top: auto;
    transform: none;
    padding: var(--space-6) var(--space-4);
  }
}

.modal-close {
  position: absolute;
  top: var(--space-4);
  right: var(--space-4);
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-surface-warm);
  border: none;
  border-radius: var(--radius-full);
  cursor: pointer;
  color: var(--color-text-muted);
  font-size: var(--text-xl);
  line-height: 1;
  transition: background 200ms, color 200ms;
}

.modal-close:hover,
.modal-close:focus-visible {
  background: var(--color-border);
  color: var(--color-text);
}

.modal__summary {
  background: var(--color-surface-warm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-5);
  margin-bottom: var(--space-6);
}

.modal__fieldset {
  border: none;
  margin: 0 0 var(--space-6);
  padding: 0;
}

.modal__legend {
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: 600;
  color: var(--color-text);
  margin-bottom: var(--space-4);
  width: 100%;
}

.modal__actions {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-top: var(--space-6);
}

@media (min-width: 480px) {
  .modal__actions { flex-direction: row; justify-content: flex-end; }
}

.modal__body--prose {
  font-size: var(--text-base);
  line-height: 1.8;
  color: var(--color-text);
}

.modal__body--prose h2 {
  font-family: var(--font-heading);
  font-size: var(--text-2xl);
  margin: var(--space-8) 0 var(--space-3);
  color: var(--color-text);
}

.modal__body--prose h3 {
  font-size: var(--text-lg);
  font-weight: 600;
  margin: var(--space-6) 0 var(--space-2);
}

.modal__body--prose p { margin-bottom: var(--space-4); }
.modal__body--prose ul { padding-left: var(--space-6); margin-bottom: var(--space-4); }

.modal__disclaimer {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin-top: var(--space-4);
  line-height: 1.6;
}

.modal--privacy .modal__body--prose { max-width: 56ch; }

/* ----- 21m. BOOKING SUMMARY ------------------------------ */
.summary-item  { display: flex; justify-content: space-between; align-items: baseline; padding: var(--space-2) 0; border-bottom: 1px solid var(--color-border); }
.summary-item:last-child { border-bottom: none; }
.summary-label { font-size: var(--text-sm); color: var(--color-text-muted); }
.summary-value { font-weight: 600; color: var(--color-text); font-size: var(--text-sm); }

/* ----- 21n. PRICE BREAKDOWN ------------------------------ */
.price-row { display: flex; justify-content: space-between; padding: var(--space-2) 0; font-size: var(--text-sm); color: var(--color-text-muted); border-bottom: 1px solid var(--color-border); }
.price-row:last-child { border-bottom: none; }

.price-row--total {
  font-weight: 700;
  font-size: var(--text-base);
  color: var(--color-text);
  border-top: 2px solid var(--color-border-dark);
  border-bottom: none;
  padding-top: var(--space-3);
  margin-top: var(--space-2);
}

.price-disclaimer { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: var(--space-3); line-height: 1.5; }

/* ----- 21o. UPSELL OPTIONS ------------------------------- */
.upsell-options { display: flex; flex-direction: column; gap: var(--space-3); margin-top: var(--space-4); }

.upsell-option {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  cursor: pointer;
  transition: border-color 200ms, background 200ms;
}

.upsell-option:hover {
  border-color: var(--color-gold);
  background: var(--color-surface-warm);
}

.upsell-option input[type="checkbox"]:checked ~ .upsell-option__label {
  color: var(--color-text);
}

.upsell-option__label { flex: 1; font-size: var(--text-sm); color: var(--color-text-muted); }
.upsell-option__price { font-size: var(--text-sm); font-weight: 700; color: var(--color-ochre); white-space: nowrap; }

/* ----- 21p. CONTACT PAGE --------------------------------- */
.contact-card {
  display: flex;
  align-items: flex-start;
  gap: var(--space-4);
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  padding: var(--space-6);
  box-shadow: var(--shadow-sm);
}

.contact-card__icon {
  width: 44px;
  height: 44px;
  flex-shrink: 0;
  background: rgba(194,153,82,0.12);
  border-radius: var(--radius-md);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-gold);
}

.contact-card__note { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: var(--space-1); }

.contact-form-wrap {
  background: var(--color-surface);
  border-radius: var(--radius-xl);
  padding: var(--space-8) var(--space-6);
  box-shadow: var(--shadow-md);
}

.contact-form__title   { font-family: var(--font-heading); font-size: var(--text-2xl); color: var(--color-text); margin-bottom: var(--space-2); }
.contact-form__subtitle{ font-size: var(--text-base); color: var(--color-text-muted); margin-bottom: var(--space-6); }
.contact-info__title   { font-family: var(--font-heading); font-size: var(--text-xl); color: var(--color-text); margin-bottom: var(--space-4); }

/* ── Full-width panoramic map below the two-column contact layout ── */
.contact-map-section {
  width: 100%;
  height: clamp(220px, 55vw, 400px); /* 220px floor on small phones, 400px cap on desktop */
  border-radius: var(--radius-lg);
  overflow: hidden;
  border: 1px solid var(--color-border);
  margin-bottom: var(--space-16);
}

.contact-map-section iframe {
  width: 100%;
  height: 100%;
  border: none;
  display: block;
}

/* Legacy — .contact-map no longer used in HTML; kept as tombstone */
/* .contact-map { aspect-ratio: 16/9; margin-top: var(--space-6); } */

/* ----- 21q. FORM FIELD ALIASES --------------------------- */
.form-group  { display: flex; flex-direction: column; gap: var(--space-1); margin-bottom: var(--space-4); }
.form-label  { font-size: var(--text-sm); font-weight: 600; color: var(--color-text); }
.form-row    { display: grid; gap: var(--space-4); }
@media (min-width: 480px) { .form-row { grid-template-columns: 1fr 1fr; } }

.form-input,
.form-textarea {
  width: 100%;
  padding: var(--space-3) var(--space-4);
  font-family: var(--font-body);
  font-size: var(--text-base);
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-border-dark);
  border-radius: var(--radius-md);
  transition: border-color 200ms, box-shadow 200ms;
  box-sizing: border-box;
}

.form-input:focus,
.form-textarea:focus {
  outline: none;
  border-color: var(--color-gold);
  box-shadow: 0 0 0 3px rgba(194,153,82,0.20);
}

.form-textarea { resize: vertical; min-height: 120px; }

.form-disclaimer { font-size: var(--text-xs); color: var(--color-text-muted); line-height: 1.6; margin-top: var(--space-2); }

/* reCAPTCHA widget spacing */
.recaptcha-widget { margin: var(--space-4) auto; display: table; }

/* ----- 21r. FORM FEEDBACK (BEM modifiers) ------------- */
/* Base rule hides the element; modifiers must override display */
.form-feedback--success,
.form-feedback--error {
  display: block; /* override base display:none */
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  font-size: var(--text-sm);
  font-weight: 500;
  margin-top: var(--space-3);
}

.form-feedback--success {
  color: var(--color-success);
  background: rgba(46,125,50,0.08);
  border: 1px solid rgba(46,125,50,0.3);
}

.form-feedback--error {
  color: var(--color-error);
  background: rgba(198,40,40,0.08);
  border: 1px solid rgba(198,40,40,0.3);
}

/* ----- 21s. BOOKING SUCCESS STATE ------------------------- */
.booking-success {
  text-align: center;
  padding: var(--space-10) var(--space-6);
}

.booking-success__check {
  font-size: 3.5rem;
  line-height: 1;
  margin: 0 0 var(--space-4);
}

.booking-success__heading {
  font-family: var(--font-heading);
  font-size: var(--text-2xl);
  color: var(--color-text);
  margin: 0 0 var(--space-3);
}

.booking-success__message {
  font-size: var(--text-base);
  color: var(--color-text-muted);
  line-height: 1.75;
  max-width: 44ch;
  margin-inline: auto;
}

.booking-success__close {
  margin-top: var(--space-6);
}

/* ----- 21s. FAQ PAGE ------------------------------------- */
.faq-content { max-width: 720px; }

.faq-sidebar__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.faq-sidebar__list a {
  display: block;
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  text-decoration: none;
  border-radius: var(--radius-sm);
  transition: background 150ms, color 150ms;
}

.faq-sidebar__list a:hover,
.faq-sidebar__list a:focus-visible {
  background: var(--color-surface-warm);
  color: var(--color-text);
}

.faq-item__question {
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: 600;
  color: var(--color-text);
  cursor: pointer;
  padding: var(--space-4) 0;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-3);
}

.faq-item__question::after {
  content: '+';
  font-size: var(--text-xl);
  color: var(--color-gold);
  transition: transform 200ms;
  flex-shrink: 0;
}

details[open] .faq-item__question::after { transform: rotate(45deg); }

.faq-item__answer {
  padding-bottom: var(--space-4);
  font-size: var(--text-base);
  color: var(--color-text-muted);
  line-height: 1.75;
}

.faq-cta {
  text-align: center;
  padding: var(--space-12) var(--space-4);
  background: var(--color-surface-warm);
  border-radius: var(--radius-xl);
  margin-top: var(--space-12);
}

.faq-cta__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  justify-content: center;
  margin-top: var(--space-6);
}

.faq-inline-btn {
  display: inline;
  background: none;
  border: none;
  color: var(--color-ochre);
  font: inherit;
  font-weight: 600;
  text-decoration: underline;
  cursor: pointer;
  padding: 0;
}

.faq-inline-btn:hover { color: var(--color-gold); }

/* ----- 21t. FOOTER --------------------------------------- */
.footer__inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-8);
  padding: var(--space-12) 0 var(--space-8);
}

@media (min-width: 768px) {
  .footer__inner { grid-template-columns: 2fr 1fr 1fr; }
}

.footer__col { display: flex; flex-direction: column; gap: var(--space-4); }
.footer__col--brand { gap: var(--space-5); }

.footer__logo {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  text-decoration: none;
}

.footer__links {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.footer__link-btn {
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  font-size: var(--text-sm);
  color: rgba(255,255,255,0.65);
  cursor: pointer;
  text-align: left;
  transition: color 150ms;
}

.footer__link-btn:hover { color: var(--color-champagne); }

.footer__bottom-inner {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: center;
  justify-content: space-between;
  padding: var(--space-4) 0;
  border-top: 1px solid rgba(255,255,255,0.12);
}

.footer__copy    { font-size: var(--text-xs); color: rgba(255,255,255,0.45); }
.footer__legal   { display: flex; gap: var(--space-4); flex-wrap: wrap; }
.footer__address { font-size: var(--text-sm); color: rgba(255,255,255,0.55); line-height: 1.6; font-style: normal; }
.footer-year     { /* populated by JS — inherits .footer__copy styles */ }

/* ----- 21u. BACK TO TOP ---------------------------------- */
.back-to-top {
  position: fixed;
  bottom: 90px;   /* 20px base + 58px height + 12px gap = 90px */
  right: 20px;    /* pixel-aligned with WhatsApp float */
  width: 48px;
  height: 48px;
  border-radius: var(--radius-full);
  background: var(--color-champagne);
  color: var(--color-brown);
  border: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--text-xl);
  box-shadow: var(--shadow-lg);
  opacity: 0;
  pointer-events: none;
  transform: translateY(12px);
  transition: opacity 250ms, transform 250ms;
  z-index: 800;
}

.back-to-top--visible {
  opacity: 1;
  pointer-events: auto;
  transform: translateY(0);
}

.back-to-top:hover {
  background: #ffffff;
  transform: translateY(-2px);
}

/* ----- 21v. COOKIE BANNER -------------------------------- */
/* Uses hidden attribute; when present, display:none is browser default */
.cookie-banner[hidden] { display: none !important; }

.cookie-banner {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: var(--color-slate);
  color: rgba(255,255,255,0.9);
  padding: var(--space-5) var(--space-6);
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4);
  align-items: center;
  justify-content: space-between;
  z-index: 1100;
  box-shadow: 0 -4px 20px rgba(0,0,0,0.2);
}

.cookie-banner p { font-size: var(--text-sm); line-height: 1.6; flex: 1; min-width: 220px; margin: 0; }
.cookie-banner__actions { display: flex; gap: var(--space-3); flex-shrink: 0; }

/* ----- 21w. PAGE HERO INNER ------------------------------ */
.page-hero__inner {
  position: relative;
  z-index: 1;
  max-width: var(--container-max, 1200px);
  margin: 0 auto;
  padding: 0 var(--space-4);
  text-align: center;
}

/* ----- 21x. REDUCED MOTION ------------------------------ */
@media (prefers-reduced-motion: reduce) {
  .fade-in { transition: none; opacity: 1; transform: none; }
  .fade-in--visible { opacity: 1; transform: none; }
  .back-to-top { transition: none; }
  .nav-link { transition: none; }
}
