/* ==========================================================================
   WELGEDAAN ESTATE — SHARED STYLES
   Brand: D2SA Welgedaan Estate
   Palette: Navy #224187 · Aqua #0fbed1 · White #ffffff
   Typography: Montserrat (per brand guide) — varied weights for editorial feel
   Inspired by Skywater Cape Town — refined coastal-modern
   ========================================================================== */

@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,300;1,400&display=swap');

:root {
  /* Brand colors */
  --navy: #224187;
  --navy-dark: #182f63;
  --navy-deep: #0f1e42;
  --aqua: #0fbed1;
  --aqua-soft: #c7eef2;
  --white: #ffffff;
  --sand: #f7f4ee;
  --sand-warm: #efeae0;
  --charcoal: #1a1a2e;
  --ink: #2c2c3a;
  --grey: #6e6e7a;
  --grey-light: #b4b4be;
  --line: rgba(34, 65, 135, 0.12);

  /* Form palette — defaults assume a LIGHT background (sand body, white card).
     Dark-background sections (.cta, .lp-hero) override these below. Every form
     label/input/placeholder/consent-text style consumes the variables instead
     of hard-coding a colour, so adding a new section context is one block. */
  --form-text: var(--ink);
  --form-label: var(--grey);
  --form-border: rgba(34, 65, 135, 0.22);
  --form-placeholder: rgba(46, 46, 58, 0.45);

  /* Type scale */
  --f-display: clamp(2.5rem, 6vw, 5.5rem);
  --f-h1: clamp(2rem, 4.5vw, 3.75rem);
  --f-h2: clamp(1.5rem, 3vw, 2.5rem);
  --f-h3: clamp(1.15rem, 2vw, 1.5rem);
  --f-body: 1rem;
  --f-sm: 0.875rem;
  --f-xs: 0.75rem;

  /* Spacing */
  --section-pad: clamp(3rem, 6vw, 5.5rem);
  --gutter: clamp(1.25rem, 4vw, 3rem);

  /* Other */
  --easing: cubic-bezier(0.22, 1, 0.36, 1);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html {
  scroll-behavior: smooth;
  overflow-x: hidden;
  background: var(--sand);
}

body {
  font-family: 'Montserrat', system-ui, sans-serif;
  font-weight: 400;
  font-size: var(--f-body);
  line-height: 1.65;
  color: var(--ink);
  background: var(--sand);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}

img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; }

/* --------------------------------------------------------------------------
   Typography
   -------------------------------------------------------------------------- */

.display {
  font-weight: 200;
  font-size: var(--f-display);
  line-height: 1.02;
  letter-spacing: -0.025em;
  color: var(--navy);
}
.display em {
  font-style: italic;
  font-weight: 300;
  color: var(--aqua);
}

h1, .h1 {
  font-weight: 300;
  font-size: var(--f-h1);
  line-height: 1.08;
  letter-spacing: -0.02em;
  color: var(--navy);
}

h2, .h2 {
  font-weight: 300;
  font-size: var(--f-h2);
  line-height: 1.15;
  letter-spacing: -0.015em;
  color: var(--navy);
}

h3, .h3 {
  font-weight: 500;
  font-size: var(--f-h3);
  line-height: 1.3;
  letter-spacing: -0.005em;
  color: var(--navy);
}

p { font-weight: 400; color: var(--ink); }
p.lead {
  font-size: 1.125rem;
  line-height: 1.7;
  font-weight: 300;
  color: var(--ink);
}

.eyebrow {
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--aqua);
  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
}
.eyebrow::before {
  content: '';
  width: 32px;
  height: 1px;
  background: var(--aqua);
}
.eyebrow.no-line::before { display: none; }
.eyebrow.dark { color: var(--navy); }
.eyebrow.dark::before { background: var(--navy); }
.eyebrow.light { color: rgba(255,255,255,0.85); }
.eyebrow.light::before { background: rgba(255,255,255,0.5); }

/* --------------------------------------------------------------------------
   Buttons
   -------------------------------------------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  padding: 0.95rem 1.85rem;
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border-radius: 999px;
  transition: all 0.4s var(--easing);
  white-space: nowrap;
}

.btn-primary {
  background: var(--navy);
  color: var(--white);
}
.btn-primary:hover {
  background: var(--aqua);
  color: var(--navy);
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(15,190,209,0.3);
}

.btn-aqua {
  background: var(--aqua);
  color: var(--navy);
}
.btn-aqua:hover {
  background: var(--white);
  color: var(--navy);
  transform: translateY(-2px);
}

.btn-ghost {
  background: transparent;
  color: var(--white);
  border: 1px solid rgba(255,255,255,0.4);
}
.btn-ghost:hover {
  background: var(--white);
  color: var(--navy);
  border-color: var(--white);
}

.btn-outline {
  background: transparent;
  color: var(--navy);
  border: 1px solid var(--navy);
}
.btn-outline:hover {
  background: var(--navy);
  color: var(--white);
}

.btn .arrow {
  display: inline-block;
  transition: transform 0.4s var(--easing);
}
.btn:hover .arrow { transform: translateX(4px); }

/* --------------------------------------------------------------------------
   Navigation
   -------------------------------------------------------------------------- */

.nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
  padding: 1.5rem var(--gutter);
  transition: all 0.4s var(--easing);
}

.nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 2rem;
  max-width: 1500px;
  margin: 0 auto;
}

.nav-logo img {
  height: 72px;
  width: auto;
  transition: all 0.4s var(--easing);
}
.nav-logo .logo-white { display: block; }
.nav-logo .logo-color { display: none; }

.nav-links {
  display: flex;
  align-items: center;
  gap: 2rem;
  list-style: none;
}
.nav-links a {
  font-size: 0.74rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.85);
  transition: color 0.3s var(--easing);
  position: relative;
}
.nav-links a:hover { color: var(--aqua); }
.nav-links a::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: -6px;
  width: 0;
  height: 1px;
  background: var(--aqua);
  transition: width 0.4s var(--easing);
}
.nav-links a:hover::after { width: 100%; }

/* Dropdown menu */
.has-dropdown { position: relative; }
.has-dropdown > a .caret {
  display: inline-block;
  font-size: 0.7em;
  margin-left: 0.35rem;
  opacity: 0.75;
  transition: transform 0.3s var(--easing);
}
.has-dropdown:hover > a .caret,
.has-dropdown:focus-within > a .caret { transform: rotate(180deg); }

.dropdown {
  position: absolute;
  top: 100%;
  left: -1rem;
  min-width: 220px;
  background: rgba(255, 255, 255, 0.98);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  padding: 0.5rem 0;
  margin-top: 0.65rem;
  list-style: none;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-8px);
  transition: opacity 0.3s var(--easing), transform 0.3s var(--easing), visibility 0s linear 0.3s;
  box-shadow: 0 20px 50px rgba(15, 30, 66, 0.12);
  border-radius: 2px;
  border-top: 2px solid var(--aqua);
}
.has-dropdown:hover .dropdown,
.has-dropdown:focus-within .dropdown {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition: opacity 0.3s var(--easing), transform 0.3s var(--easing);
}
.dropdown::before {
  /* invisible bridge so cursor can travel from trigger to dropdown without losing hover */
  content: '';
  position: absolute;
  top: -0.85rem;
  left: 0;
  right: 0;
  height: 0.85rem;
}
.dropdown li { display: block; }
.dropdown a {
  display: block !important;
  padding: 0.75rem 1.4rem !important;
  font-size: 0.72rem !important;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--navy) !important;
  white-space: nowrap;
  transition: all 0.25s var(--easing);
}
.dropdown a::after { display: none; }
.dropdown a:hover {
  background: var(--sand);
  color: var(--aqua) !important;
  padding-left: 1.7rem !important;
}

/* Status pills in dropdown (Sold Out / Coming Soon / Selling Now) */
.dropdown a {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 0.85rem;
}
.status-pill {
  display: inline-block;
  font-size: 0.58rem !important;
  letter-spacing: 0.14em;
  font-weight: 700;
  padding: 0.2rem 0.55rem;
  border-radius: 999px;
  white-space: nowrap;
  text-transform: uppercase;
  line-height: 1;
}
.status-pill.sold { color: #dc2626; background: rgba(220, 38, 38, 0.12); }
.status-pill.soon { color: #d97706; background: rgba(217, 119, 6, 0.14); }
.status-pill.live {
  color: #16a34a;
  background: rgba(22, 163, 74, 0.14);
  animation: selling-now-pulse 2.2s ease-in-out infinite;
}
@keyframes selling-now-pulse {
  0%, 100% {
    background: rgba(22, 163, 74, 0.14);
    box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.4);
  }
  50% {
    background: rgba(22, 163, 74, 0.32);
    box-shadow: 0 0 0 6px rgba(22, 163, 74, 0);
  }
}

/* Pulsing "live" indicator on the Now Selling nav item */
.is-live > a { position: relative; }
.live-dot {
  display: inline-block;
  width: 7px;
  height: 7px;
  background: #22c55e;
  border-radius: 50%;
  margin-right: 0.5rem;
  vertical-align: middle;
  position: relative;
  flex-shrink: 0;
  box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7);
  animation: live-pulse 2.2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
.live-dot::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background: #22c55e;
  opacity: 0.6;
  animation: live-ring 2.2s ease-out infinite;
}
@keyframes live-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); }
  50%      { box-shadow: 0 0 0 4px rgba(34, 197, 94, 0); }
}
@keyframes live-ring {
  0%   { transform: translate(-50%, -50%) scale(1);   opacity: 0.55; }
  100% { transform: translate(-50%, -50%) scale(3.2); opacity: 0; }
}

/* When the nav is scrolled (white state), the Now Selling link pulses in
   sync with the green dot to draw extra attention as the user reads on. */
.nav.scrolled .is-live > a {
  animation: live-text-pulse 2.2s ease-in-out infinite;
}
@keyframes live-text-pulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.55; }
}

.nav.scrolled {
  background: rgba(255,255,255,0.96);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  padding: 0.9rem var(--gutter);
  box-shadow: 0 1px 20px rgba(0,0,0,0.05);
}
.nav.scrolled .nav-logo .logo-white { display: none; }
.nav.scrolled .nav-logo .logo-color { display: block; }
.nav.scrolled .nav-links a { color: var(--navy); }
.nav.scrolled .nav-logo img { height: 58px; }

.nav.solid {
  background: rgba(255,255,255,0.96);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
}
.nav.solid .nav-logo .logo-white { display: none; }
.nav.solid .nav-logo .logo-color { display: block; }
.nav.solid .nav-links a { color: var(--navy); }

.menu-toggle {
  display: none;
  flex-direction: column;
  gap: 5px;
  width: 30px;
}
.menu-toggle span {
  width: 100%;
  height: 1.5px;
  background: var(--white);
  transition: all 0.3s var(--easing);
}
.nav.scrolled .menu-toggle span,
.nav.solid .menu-toggle span { background: var(--navy); }

/* --------------------------------------------------------------------------
   Hero
   -------------------------------------------------------------------------- */

.hero {
  position: relative;
  height: 100vh;
  min-height: 640px;
  width: 100%;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  color: var(--white);
}
.hero-bg {
  position: absolute;
  inset: 0;
  z-index: 0;
}
.hero-bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  animation: kenBurns 18s ease-out infinite alternate;
}
@keyframes kenBurns {
  0% { transform: scale(1.05); }
  100% { transform: scale(1.15); }
}
.hero-bg::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(15,30,66,0.3) 0%, rgba(15,30,66,0) 35%, rgba(15,30,66,0.7) 100%);
}

.hero-content {
  position: relative;
  z-index: 2;
  width: 100%;
  max-width: 1500px;
  margin: 0 auto;
  padding: 0 var(--gutter) clamp(4rem, 9vw, 7rem);
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 3rem;
  align-items: end;
}

.hero-title {
  font-weight: 200;
  font-size: var(--f-display);
  line-height: 0.98;
  letter-spacing: -0.03em;
  color: var(--white);
  max-width: 900px;
  animation: slideUp 1.2s var(--easing) 0.3s both;
}
.hero-title em {
  font-style: italic;
  font-weight: 300;
  color: var(--aqua);
}

.hero-meta {
  font-size: 0.95rem;
  font-weight: 400;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.92);
  text-align: right;
  animation: slideUp 1.2s var(--easing) 0.7s both;
  line-height: 1.4;
}
.hero-meta strong {
  display: block;
  font-size: clamp(2.2rem, 4.5vw, 3.4rem);
  font-weight: 200;
  letter-spacing: -0.025em;
  text-transform: none;
  color: var(--aqua);
  margin-top: 0.6rem;
  line-height: 1;
}

.hero-eyebrow {
  position: absolute;
  top: 50%;
  left: var(--gutter);
  transform: translateY(-50%) rotate(-90deg);
  transform-origin: left top;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.4em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.75);
  white-space: nowrap;
  z-index: 2;
}

.hero-scroll {
  position: absolute;
  bottom: 2rem;
  left: 50%;
  transform: translateX(-50%);
  z-index: 2;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.7rem;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.7);
  animation: bounce 2.4s ease-in-out infinite;
}
.hero-scroll-line {
  width: 1px;
  height: 40px;
  background: linear-gradient(to bottom, rgba(255,255,255,0.7), transparent);
}
@keyframes bounce {
  0%, 100% { transform: translate(-50%, 0); }
  50% { transform: translate(-50%, 8px); }
}
@keyframes slideUp {
  from { opacity: 0; transform: translateY(40px); }
  to { opacity: 1; transform: translateY(0); }
}

/* --------------------------------------------------------------------------
   Section structure
   -------------------------------------------------------------------------- */

section { position: relative; }

.section-pad {
  padding: var(--section-pad) var(--gutter);
}

.container {
  max-width: 1500px;
  margin: 0 auto;
  width: 100%;
}
.container-narrow {
  max-width: 920px;
  margin: 0 auto;
  width: 100%;
}

.section-header {
  display: grid;
  grid-template-columns: 1fr 1.5fr;
  gap: 4rem;
  margin-bottom: 4rem;
  align-items: end;
}
.section-header .eyebrow { margin-bottom: 1.5rem; }

@media (max-width: 768px) {
  .section-header { grid-template-columns: 1fr; gap: 1.5rem; }
}

/* --------------------------------------------------------------------------
   Intro / philosophy
   -------------------------------------------------------------------------- */

.intro {
  background: var(--sand);
  text-align: center;
}
.intro-content {
  max-width: 880px;
  margin: 0 auto;
}
.intro .display {
  margin: 1.5rem 0 2rem;
}
.intro p.lead {
  color: var(--grey);
  max-width: 680px;
  margin: 0 auto;
}

.fish-divider {
  width: 60px;
  height: 1px;
  background: var(--aqua);
  margin: 3rem auto 0;
  position: relative;
}
.fish-divider::before,
.fish-divider::after {
  content: '';
  position: absolute;
  top: 50%;
  width: 4px;
  height: 4px;
  background: var(--aqua);
  border-radius: 50%;
  transform: translateY(-50%);
}
.fish-divider::before { left: -8px; }
.fish-divider::after { right: -8px; }

/* Intro section flows tightly into the stats strip beneath it */
.intro.section-pad {
  padding-bottom: clamp(1.5rem, 3vw, 2.5rem);
}

/* Stats strip under intro */
.stats-strip {
  background: var(--sand);
  padding: 0 var(--gutter) clamp(5rem, 9vw, 7rem);
}
.stats-strip .site-plan-legend {
  margin-top: 0;
  border-top: 1px solid var(--line);
  padding-top: clamp(2.5rem, 5vw, 3.5rem);
}

/* --------------------------------------------------------------------------
   Image break sections (Skywater-style)
   -------------------------------------------------------------------------- */

.image-break {
  position: relative;
  height: clamp(50vh, 70vh, 720px);
  overflow: hidden;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
}
.image-break-tall {
  height: clamp(60vh, 85vh, 860px);
}
.image-break-h2-xl {
  font-size: clamp(2.4rem, 5.5vw, 4.8rem) !important;
  line-height: 1 !important;
  letter-spacing: -0.025em !important;
  font-weight: 200 !important;
}
.image-break img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.image-break-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(to right, rgba(15,30,66,0.55), rgba(15,30,66,0));
}
.image-break-text {
  position: absolute;
  left: var(--gutter);
  bottom: clamp(2rem, 5vw, 4rem);
  max-width: 600px;
  color: var(--white);
  z-index: 2;
}
.image-break-text h2 {
  color: var(--white);
  font-weight: 200;
  margin-top: 1.5rem;
}
.image-break-text p {
  color: rgba(255,255,255,0.88);
  margin-top: 1.5rem;
  max-width: 520px;
  font-weight: 300;
  font-size: 1rem;
  line-height: 1.65;
}

/* --------------------------------------------------------------------------
   Split layout (text + image)
   -------------------------------------------------------------------------- */

.split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(2rem, 6vw, 5rem);
  align-items: center;
}
.split.flip { direction: rtl; }
.split.flip > * { direction: ltr; }

.split-text { padding: 1rem 0; }
.split-text h2 { margin: 1.25rem 0 1.5rem; }
.split-text p + p { margin-top: 1.25rem; }
.split-text .btn { margin-top: 2rem; }

.split-image {
  position: relative;
  aspect-ratio: 4/5;
  overflow: hidden;
  border-radius: 2px;
}
.split-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.2s var(--easing);
}
.split-image:hover img { transform: scale(1.04); }

.split-image-tag {
  position: absolute;
  bottom: 1.5rem;
  left: 1.5rem;
  background: rgba(255,255,255,0.95);
  padding: 0.65rem 1rem;
  font-size: 0.7rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--navy);
  backdrop-filter: blur(10px);
}

@media (max-width: 768px) {
  .split, .split.flip { grid-template-columns: 1fr; direction: ltr; }
}

/* --------------------------------------------------------------------------
   Lifestyle / amenities grid
   -------------------------------------------------------------------------- */

.lifestyle {
  background: var(--navy);
  color: var(--white);
}
.lifestyle h2 { color: var(--white); }
.lifestyle .section-header { margin-bottom: 4rem; }

.amenities-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 3rem 2.5rem;
  max-width: 1280px;
  margin: 0 auto;
}
@media (max-width: 1100px) {
  .amenities-grid { grid-template-columns: repeat(2, 1fr); max-width: 640px; }
}
@media (max-width: 560px) {
  .amenities-grid { grid-template-columns: 1fr; }
}
.amenity {
  position: relative;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.amenity-icon {
  width: 48px;
  height: 48px;
  margin: 0 auto 1.5rem;
  color: var(--aqua);
}
.amenity-icon svg { width: 100%; height: 100%; stroke-width: 1.2; }
.amenity h4 {
  font-size: 1.05rem;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--white);
  margin-bottom: 0.6rem;
}
.amenity p {
  font-size: 0.92rem;
  line-height: 1.6;
  color: rgba(255,255,255,0.7);
  font-weight: 300;
}

/* --------------------------------------------------------------------------
   Two paths section (plots vs plot+plan)
   -------------------------------------------------------------------------- */

.two-paths { background: var(--white); }

.paths-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
  margin-top: 3rem;
}

.path-card {
  background: var(--sand);
  display: flex;
  flex-direction: column;
  transition: all 0.5s var(--easing);
  position: relative;
  overflow: hidden;
  border-radius: 2px;
}
.path-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 60px rgba(34,65,135,0.14);
}
.path-card.path-featured {
  background: var(--navy);
  color: var(--white);
}
.path-card.path-featured::before {
  content: 'Most Popular';
  position: absolute;
  top: 1.25rem;
  right: 1.25rem;
  background: var(--aqua);
  color: var(--navy);
  padding: 0.4rem 0.85rem;
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  z-index: 2;
  border-radius: 999px;
}
.path-card.path-featured .path-title,
.path-card.path-featured .path-eyebrow {
  color: var(--white);
}
.path-card.path-featured .path-price small { color: rgba(255,255,255,0.6); }
.path-card.path-featured .path-price { color: var(--aqua); }
.path-card.path-featured p { color: rgba(255,255,255,0.78); font-weight: 300; }
.path-card.path-featured .path-features { border-top-color: rgba(255,255,255,0.15); }
.path-card.path-featured .path-features li { color: rgba(255,255,255,0.85); }

.path-image {
  aspect-ratio: 16/10;
  overflow: hidden;
  background: #eee;
}
.path-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.2s var(--easing);
}
.path-card:hover .path-image img { transform: scale(1.05); }

.path-content {
  padding: 2.5rem;
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  flex-grow: 1;
}

.path-eyebrow {
  display: block;
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--aqua);
  margin-bottom: 0.85rem;
}

.path-title {
  font-size: 1.7rem;
  font-weight: 300;
  letter-spacing: -0.015em;
  color: var(--navy);
  line-height: 1.15;
}

.path-price {
  font-size: 2.2rem;
  font-weight: 200;
  color: var(--aqua);
  letter-spacing: -0.025em;
  line-height: 1;
}
.path-price small {
  display: block;
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--grey);
  margin-bottom: 0.5rem;
}

.path-features {
  list-style: none;
  border-top: 1px solid var(--line);
  padding-top: 1.25rem;
  margin: 0;
}
.path-features li {
  padding: 0.45rem 0;
  font-size: 0.92rem;
  color: var(--ink);
  display: flex;
  align-items: flex-start;
  gap: 0.85rem;
  font-weight: 400;
  line-height: 1.55;
}
.path-features li::before {
  content: '→';
  color: var(--aqua);
  font-weight: 700;
  flex-shrink: 0;
  margin-top: 1px;
}

@media (max-width: 900px) {
  .paths-grid { grid-template-columns: 1fr; }
  .path-content { padding: 2rem; }
  .path-title { font-size: 1.45rem; }
  .path-price { font-size: 1.9rem; }
}

/* --------------------------------------------------------------------------
   Phase 1 page specifics
   -------------------------------------------------------------------------- */

/* Small "lifestyle visualisation" attribution on the Phase 1 hero */
.hero-concept-label {
  position: absolute;
  bottom: 1.4rem;
  right: var(--gutter);
  z-index: 4;
  font-size: 0.6rem;
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.6);
  font-style: italic;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
  pointer-events: none;
}
@media (max-width: 700px) {
  .hero-concept-label {
    bottom: 1rem;
    font-size: 0.52rem;
    letter-spacing: 0.16em;
  }
}

/* Diagonal "Sold Out" sash across the hero */
.hero-sold-sash {
  position: absolute;
  top: 50%;
  left: -10%;
  right: -10%;
  background: #dc2626;
  color: var(--white);
  padding: 0.95rem 0;
  transform: rotate(-6deg) translateY(-50%);
  transform-origin: center;
  z-index: 5;
  text-align: center;
  font-weight: 700;
  letter-spacing: 0.3em;
  font-size: clamp(0.78rem, 1.3vw, 1rem);
  text-transform: uppercase;
  white-space: nowrap;
  overflow: hidden;
  box-shadow: 0 8px 28px rgba(0,0,0,0.32);
  border-top: 1px solid rgba(255,255,255,0.2);
  border-bottom: 1px solid rgba(0,0,0,0.22);
  pointer-events: none;
}
.hero-sold-sash span {
  display: inline-block;
}
@media (max-width: 700px) {
  .hero-sold-sash {
    top: 52%;
    transform: rotate(-5deg) translateY(-50%);
    padding: 0.7rem 0;
    font-size: 0.72rem;
    letter-spacing: 0.22em;
  }
}

/* Pulsing red dot for the "Sold Out" hero eyebrow */
.hero-sold-dot {
  display: inline-block;
  width: 7px;
  height: 7px;
  background: #dc2626;
  border-radius: 50%;
  margin-right: 0.7rem;
  vertical-align: middle;
  position: relative;
}
.hero-sold-dot::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: #dc2626;
  animation: live-ring 2.6s ease-out infinite;
}

/* Phase 1 interior gallery — 3 col with one wide feature */
.p1-interior-grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 1rem;
  margin-top: 3rem;
}
.p1-interior-item {
  overflow: hidden;
  aspect-ratio: 4/3;
  position: relative;
}
.p1-interior-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.4s var(--easing);
}
.p1-interior-item:hover img { transform: scale(1.05); }
.p1-interior-item.p1-wide {
  grid-column: span 2;
  aspect-ratio: 16/9;
}

@media (max-width: 900px) {
  .p1-interior-grid { grid-template-columns: 1fr 1fr; }
  .p1-interior-item.p1-wide { grid-column: span 2; }
}
@media (max-width: 600px) {
  .p1-interior-grid { grid-template-columns: 1fr; }
  .p1-interior-item.p1-wide { grid-column: span 1; aspect-ratio: 4/3; }
}

/* Build status cards for the two remaining homes */
.build-cards {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
  margin-top: clamp(2.5rem, 5vw, 4rem);
}
.build-card {
  background: var(--white);
  border: 1px solid var(--line);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: all 0.4s var(--easing);
}
.build-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 40px rgba(34,65,135,0.10);
}
.build-card-image {
  background: var(--sand);
  aspect-ratio: 16/10;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}
.build-card-image img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.build-card-body {
  padding: 1.75rem 2rem 2rem;
  flex: 1;
  display: flex;
  flex-direction: column;
}
.build-card-status {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: #16a34a;
  margin-bottom: 0.85rem;
}
.build-card-status::before {
  content: '';
  width: 7px;
  height: 7px;
  background: #16a34a;
  border-radius: 50%;
  flex-shrink: 0;
  box-shadow: 0 0 0 4px rgba(22,163,74,0.16);
}
.build-card h3 {
  font-size: 1.4rem;
  font-weight: 400;
  color: var(--navy);
  margin: 0 0 1rem;
  letter-spacing: -0.005em;
}
.build-card-meta {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.75rem 1.5rem;
  margin-bottom: 1.25rem;
  padding-top: 1rem;
  border-top: 1px solid var(--line);
}
.build-card-meta > div {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}
.build-meta-label {
  font-size: 0.6rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--grey);
}
.build-meta-val {
  font-size: 1rem;
  font-weight: 400;
  color: var(--navy);
  font-variant-numeric: tabular-nums;
}
.build-card-tag {
  font-size: 0.75rem;
  letter-spacing: 0.08em;
  color: var(--grey);
  font-style: italic;
  margin: auto 0 0;
}

@media (max-width: 800px) {
  .build-cards { grid-template-columns: 1fr; }
}

/* "What's Next" pivot cards — Phase 2 + Phase 3&4 */
.next-phase-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
  margin-top: clamp(2.5rem, 5vw, 4rem);
}
.next-phase-card {
  background: var(--white);
  padding: clamp(2rem, 4vw, 2.75rem);
  border: 1px solid var(--line);
  text-decoration: none;
  color: var(--ink);
  display: flex;
  flex-direction: column;
  gap: 1rem;
  transition: all 0.4s var(--easing);
}
.next-phase-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 40px rgba(34,65,135,0.10);
  border-color: var(--aqua);
}
.next-phase-card::after { display: none; }
.next-phase-status {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--grey);
}
.next-phase-status.soon { color: #d97706; }
.next-phase-status.live { color: #16a34a; }
.next-phase-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
}
.next-phase-card.next-phase-live .next-phase-dot {
  box-shadow: 0 0 0 4px rgba(22,163,74,0.18);
  animation: live-ring 2.2s ease-out infinite;
}
.next-phase-card h3 {
  font-size: clamp(1.5rem, 2.5vw, 1.85rem);
  font-weight: 300;
  color: var(--navy);
  letter-spacing: -0.015em;
  line-height: 1.2;
  margin: 0;
}
.next-phase-card p {
  font-size: 0.95rem;
  color: var(--ink);
  line-height: 1.65;
  font-weight: 300;
  margin: 0;
  flex: 1;
}
.next-phase-link {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--aqua);
  margin-top: auto;
}
.next-phase-card:hover .next-phase-link .arrow {
  transform: translateX(4px);
}

@media (max-width: 800px) {
  .next-phase-grid { grid-template-columns: 1fr; }
}

/* --------------------------------------------------------------------------
   Find Us — Google Maps embed section (homepage + location page)
   Used as a 2-col layout: map left, info right
   Same .find-us-grid + .find-us-map classes also drive the lifestyle
   West Coast section (destinations left, map right)
   -------------------------------------------------------------------------- */

.find-us {
  background: var(--white);
}
.find-us-grid {
  display: grid;
  grid-template-columns: 1.3fr 1fr;
  gap: clamp(1.75rem, 3.5vw, 3rem);
  margin-top: clamp(2.5rem, 5vw, 3.5rem);
  align-items: stretch;
}
.find-us-map {
  border: 1px solid var(--line);
  overflow: hidden;
  position: relative;
  min-height: 480px;
  box-shadow: 0 8px 32px rgba(34, 65, 135, 0.06);
}
.find-us-map iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  position: absolute;
  inset: 0;
}
/* When the map sits alone (e.g. location.html), give it the same top
   spacing the .find-us-grid already gets when wrapping it */
.section-header + .find-us-map {
  margin-top: clamp(2.5rem, 5vw, 3.5rem);
}
.find-us-info {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}
.find-us-intro {
  font-size: 1rem;
  color: var(--ink);
  line-height: 1.65;
  font-weight: 300;
  margin: 0 0 0.25rem;
  padding-bottom: 1.5rem;
  border-bottom: 1px solid var(--line);
}
.find-us-detail h4 {
  font-size: 0.6rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--grey);
  margin: 0 0 0.6rem;
}
.find-us-detail p {
  font-size: 0.92rem;
  color: var(--ink);
  line-height: 1.65;
  font-weight: 300;
  margin: 0;
}

/* When .find-us-grid is used on the lifestyle West Coast section,
   the destinations-grid replaces .find-us-info on the left:
   - flip proportions so the map is the larger column (it's the visual hero)
   - force destinations to a single vertical column (not its default 2-col)
   - drop its max-width and top margin so it fills the cell cleanly */
.west-coast-grid {
  grid-template-columns: 1fr 1.35fr;
}
.west-coast-grid .destinations-grid {
  grid-template-columns: 1fr;
  margin-top: 0;
  max-width: none;
}
.west-coast-grid .dest-row {
  padding: 1rem 0;
}
.west-coast-grid .dest-row:first-child {
  padding-top: 0;
  border-top: none;
}

@media (max-width: 900px) {
  .find-us-grid {
    grid-template-columns: 1fr;
    gap: 2rem;
  }
  .find-us-map { min-height: 380px; }
}
@media (max-width: 700px) {
  .find-us-map { min-height: 320px; }
}

/* --------------------------------------------------------------------------
   Lifestyle page additions — Center of West Coast, Protected Wilderness,
   West Coast Is Growing, The Quiet Truths
   -------------------------------------------------------------------------- */

/* Section 1: Center of West Coast — destinations grid */
.destinations-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 clamp(2rem, 5vw, 4rem);
  margin-top: clamp(2.5rem, 5vw, 4rem);
  max-width: 960px;
}
.dest-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 1.15rem 0;
  border-bottom: 1px solid var(--line);
  gap: 1.5rem;
}
.dest-name {
  font-size: 1rem;
  font-weight: 400;
  color: var(--ink);
  letter-spacing: -0.005em;
}
.dest-dist {
  font-size: 0.85rem;
  font-weight: 500;
  letter-spacing: 0.08em;
  color: var(--aqua);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
@media (max-width: 700px) {
  .destinations-grid { grid-template-columns: 1fr; gap: 0; }
}

/* Section 2: Protected Wilderness — nature stat callout + photo grid (on navy) */
.nature-stat {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: clamp(1.5rem, 4vw, 3rem);
  align-items: center;
  padding: clamp(2rem, 4vw, 3rem);
  background: rgba(255,255,255,0.05);
  border-left: 3px solid var(--aqua);
  margin: clamp(2.5rem, 5vw, 4rem) 0 2rem;
}
.nature-stat-big {
  font-size: clamp(3rem, 7vw, 5rem);
  font-weight: 200;
  line-height: 1;
  letter-spacing: -0.025em;
  color: var(--aqua);
  white-space: nowrap;
}
.nature-stat-big em {
  font-style: normal;
  font-size: 0.5em;
  margin-left: 0.15em;
  vertical-align: 0.45em;
  font-weight: 300;
}
.nature-stat-label {
  display: block;
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.6);
  margin-bottom: 0.6rem;
}
.nature-stat-cap {
  font-size: 0.98rem;
  color: rgba(255,255,255,0.8);
  font-weight: 300;
  line-height: 1.7;
  max-width: 540px;
  margin: 0;
}
.nature-photo-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}
.nature-photo {
  aspect-ratio: 4/3;
  background: rgba(255,255,255,0.04);
  overflow: hidden;
  position: relative;
}
.nature-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.8s var(--easing, ease);
}
.nature-photo:hover img {
  transform: scale(1.04);
}
@media (max-width: 800px) {
  .nature-stat { grid-template-columns: 1fr; gap: 1.25rem; }
  .nature-photo-grid { grid-template-columns: 1fr; }
}

/* Section 3: West Coast Is Growing — two future cards */
.growth-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
  margin-top: clamp(2.5rem, 5vw, 4rem);
}
.growth-card {
  padding: clamp(2rem, 4vw, 2.75rem);
  background: var(--white);
  border-top: 2px solid var(--aqua);
  transition: all 0.4s var(--easing);
}
.growth-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 40px rgba(34,65,135,0.08);
}
.growth-icon {
  width: 48px;
  height: 48px;
  color: var(--aqua);
  margin-bottom: 1.5rem;
}
.growth-icon svg { width: 100%; height: 100%; }
.growth-title {
  font-size: 1.4rem;
  font-weight: 400;
  color: var(--navy);
  margin: 0 0 1rem;
  letter-spacing: -0.005em;
  line-height: 1.25;
}
.growth-body {
  font-size: 0.95rem;
  color: var(--ink);
  line-height: 1.7;
  font-weight: 300;
  margin: 0;
}
@media (max-width: 800px) {
  .growth-grid { grid-template-columns: 1fr; }
}

/* Section 4: The Quiet Truths — Q&A cards */
.qa-list {
  margin-top: clamp(2.5rem, 5vw, 3.5rem);
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
  max-width: 1400px;
}
@media (max-width: 1000px) {
  .qa-list {
    grid-template-columns: 1fr 1fr;
  }
}
@media (max-width: 700px) {
  .qa-list {
    grid-template-columns: 1fr;
  }
}
.qa-card {
  padding: clamp(1.5rem, 3vw, 2.25rem);
  background: var(--sand);
  border-left: 3px solid var(--aqua);
  transition: background 0.3s var(--easing);
}
.qa-card:hover { background: rgba(15,190,209,0.06); }
.qa-q {
  font-size: 1.1rem;
  font-weight: 400;
  font-style: italic;
  color: var(--navy);
  margin: 0 0 0.85rem;
  letter-spacing: -0.005em;
  line-height: 1.4;
}
.qa-a {
  font-size: 0.95rem;
  color: var(--ink);
  line-height: 1.7;
  font-weight: 300;
  margin: 0;
  max-width: 760px;
}

/* The Real Pitch — full-bleed sunset finale */
.pitch-finale {
  position: relative;
  overflow: hidden;
  text-align: center;
  color: var(--white);
  padding: clamp(5rem, 10vw, 8rem) var(--gutter);
  background: var(--navy);
}
.pitch-finale::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url('../images/exterior-sunset.jpg');
  background-size: cover;
  background-position: center 60%;
  z-index: 0;
}
.pitch-finale::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom, rgba(15,30,66,0.55) 0%, rgba(15,30,66,0.78) 100%);
  z-index: 1;
}
.pitch-finale > * {
  position: relative;
  z-index: 2;
}
.pitch-finale .display {
  color: var(--white);
}
.pitch-finale .lead {
  color: rgba(255,255,255,0.85) !important;
}

/* --------------------------------------------------------------------------
   Architect partnership attribution (Phase 2)
   -------------------------------------------------------------------------- */
.partnership {
  background: var(--navy);
  padding: clamp(4rem, 7vw, 6rem) var(--gutter);
}
.partnership-inner {
  text-align: center;
  max-width: 600px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.75rem;
}
.partnership-label {
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.55);
  position: relative;
  padding: 0 2.5rem;
}
.partnership-label::before,
.partnership-label::after {
  content: '';
  position: absolute;
  top: 50%;
  width: 40px;
  height: 1px;
  background: rgba(255,255,255,0.2);
}
.partnership-label::before { right: 100%; }
.partnership-label::after  { left:  100%; }

.partnership-mark {
  display: inline-block;
  text-decoration: none;
  transition: opacity 0.3s var(--easing);
  padding: 0.5rem 0;
}
.partnership-mark img {
  display: block;
  height: 78px;
  width: auto;
}
.partnership-mark:hover { opacity: 0.7; }
.partnership-mark::after { display: none; }

.partnership-tagline {
  font-size: 0.92rem;
  color: rgba(255,255,255,0.7);
  line-height: 1.7;
  font-weight: 300;
  max-width: 520px;
  margin: 0;
}
.partnership-tagline a {
  color: var(--aqua);
  font-weight: 500;
  white-space: nowrap;
}
.partnership-tagline a:hover { text-decoration: underline; }

@media (max-width: 600px) {
  .partnership-mark img { height: 60px; }
}

/* --------------------------------------------------------------------------
   Phase 2 page specifics
   -------------------------------------------------------------------------- */

/* Pulsing amber dot for the hero "Coming Soon" eyebrow */
.hero-soon-dot {
  display: inline-block;
  width: 7px;
  height: 7px;
  background: #d97706;
  border-radius: 50%;
  margin-right: 0.7rem;
  vertical-align: middle;
  position: relative;
}
.hero-soon-dot::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: #d97706;
  animation: live-ring 2.2s ease-out infinite;
}

/* Coming Soon banner strip */
.cs-banner {
  background: var(--navy);
  color: var(--white);
  padding: 1.5rem var(--gutter);
}
.cs-banner-inner {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  align-items: center;
  gap: 1.5rem;
}
.cs-banner-item { display: flex; flex-direction: column; gap: 0.35rem; }
.cs-banner-item:last-child { align-items: flex-end; }
.cs-label {
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.55);
}
.cs-value {
  font-size: 0.95rem;
  font-weight: 400;
  color: var(--white);
  display: flex;
  align-items: center;
}

@media (max-width: 900px) {
  .cs-banner-inner { grid-template-columns: 1fr 1fr; }
  .cs-banner-item:last-child { grid-column: span 2; align-items: stretch; margin-top: 0.5rem; }
  .cs-banner-item:last-child .btn { width: 100%; }
}

/* Phase 2 interior grid */
.p2-interior-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  margin-top: 3rem;
}
.p2-interior-item {
  overflow: hidden;
  aspect-ratio: 16/10;
  border-radius: 2px;
}
.p2-interior-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.2s var(--easing);
}
.p2-interior-item:hover img { transform: scale(1.04); }
.p2-interior-item.p2-wide { grid-column: span 2; aspect-ratio: 21/9; }

@media (max-width: 768px) {
  .p2-interior-grid { grid-template-columns: 1fr; }
  .p2-interior-item.p2-wide { grid-column: span 1; }
}

/* Build trigger callout */
.trigger-card {
  background: var(--white);
  display: grid;
  grid-template-columns: auto 1fr;
  gap: clamp(2rem, 4vw, 4rem);
  align-items: center;
  padding: clamp(2.5rem, 5vw, 4rem);
  border-radius: 2px;
  border-left: 3px solid var(--aqua);
}
.trigger-icon {
  width: 96px;
  height: 96px;
  color: var(--aqua);
  flex-shrink: 0;
}
.trigger-icon svg { width: 100%; height: 100%; }
.trigger-body p {
  color: var(--ink);
  font-size: 1.02rem;
  line-height: 1.7;
  font-weight: 300;
  max-width: 620px;
}

@media (max-width: 700px) {
  .trigger-card { grid-template-columns: 1fr; text-align: left; }
  .trigger-icon { width: 64px; height: 64px; }
}

/* Phase 2 price table */
.price-table-wrap {
  margin-top: 2.5rem;
  overflow-x: auto;
  background: var(--sand);
  padding: 0.5rem;
  border-radius: 2px;
}
.price-table {
  width: 100%;
  border-collapse: collapse;
  background: var(--white);
  font-size: 0.92rem;
}
.price-table thead th {
  text-align: left;
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--grey);
  padding: 1.1rem 1.25rem;
  background: var(--sand);
  border-bottom: 1px solid var(--line);
}
.price-table thead th.num,
.price-table tbody td.num { text-align: right; font-variant-numeric: tabular-nums; }
.price-table thead th.action,
.price-table tbody td.action { text-align: right; width: 90px; }

.price-table tbody td {
  padding: 0.95rem 1.25rem;
  border-bottom: 1px solid rgba(34,65,135,0.06);
  color: var(--ink);
  vertical-align: middle;
}
.price-table tbody tr:hover td { background: rgba(15,190,209,0.04); }

.price-table .block-row td {
  background: var(--navy);
  color: var(--white);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  padding: 0.7rem 1.25rem;
}
.price-table .block-row + tr td { border-top: none; }

.price-table .price {
  font-weight: 500;
  color: var(--navy);
  letter-spacing: -0.005em;
}
.price-table .price-entry {
  color: var(--aqua);
  font-weight: 600;
}

.row-tag {
  display: inline-block;
  margin-left: 0.5rem;
  padding: 0.18rem 0.55rem;
  background: rgba(15,190,209,0.14);
  color: #0a7a87;
  font-size: 0.6rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-radius: 999px;
  vertical-align: middle;
}

.price-table .action a {
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--aqua);
  transition: color 0.25s var(--easing);
}
.price-table .action a:hover { color: var(--navy); }

@media (max-width: 700px) {
  .price-table { font-size: 0.82rem; }
  .price-table thead th,
  .price-table tbody td { padding: 0.75rem 0.85rem; }
  .price-table thead th.action,
  .price-table tbody td.action { display: none; }
}

.price-notes {
  margin-top: 2.5rem;
  padding-top: 2rem;
  border-top: 1px solid var(--line);
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 2rem;
}
.price-notes p {
  font-size: 0.85rem;
  color: var(--grey);
  line-height: 1.7;
  font-weight: 300;
}
.price-notes strong { color: var(--navy); font-weight: 500; }

@media (max-width: 900px) {
  .price-notes { grid-template-columns: 1fr; gap: 1.25rem; }
}

/* --------------------------------------------------------------------------
   Unit / floor plan cards
   -------------------------------------------------------------------------- */

.units {
  background: var(--sand);
}
.units-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(310px, 1fr));
  gap: 2rem;
  margin-top: 3rem;
}

.unit-card {
  background: var(--white);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: all 0.5s var(--easing);
  position: relative;
}
.unit-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 20px 50px rgba(34,65,135,0.12);
}

.unit-image {
  aspect-ratio: 4/3;
  overflow: hidden;
  background: #f3f0e8;
  position: relative;
}
.unit-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1s var(--easing);
}
.unit-card:hover .unit-image img { transform: scale(1.06); }

.unit-badge {
  position: absolute;
  top: 1rem;
  left: 1rem;
  background: var(--aqua);
  color: var(--navy);
  padding: 0.4rem 0.8rem;
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}

.unit-content {
  padding: 1.75rem 1.75rem 2rem;
  display: flex;
  flex-direction: column;
  flex-grow: 1;
}
.unit-content .small-label {
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--aqua);
  margin-bottom: 0.7rem;
}
.unit-content h3 {
  font-size: 1.4rem;
  font-weight: 400;
  color: var(--navy);
  margin-bottom: 1rem;
}
.unit-stats {
  display: flex;
  gap: 1.25rem;
  padding: 1rem 0;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  margin-bottom: 1.5rem;
}
.unit-stat { flex: 1; }
.unit-stat-value {
  font-size: 1.25rem;
  font-weight: 300;
  color: var(--navy);
  letter-spacing: -0.01em;
}
.unit-stat-label {
  font-size: 0.65rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--grey);
  margin-top: 0.2rem;
}
.unit-content p {
  font-size: 0.9rem;
  color: var(--grey);
  line-height: 1.65;
  margin-bottom: 1.5rem;
}
.unit-link {
  margin-top: auto;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--navy);
  transition: gap 0.3s var(--easing);
}
.unit-link:hover { gap: 0.9rem; color: var(--aqua); }

/* --------------------------------------------------------------------------
   Site plan
   -------------------------------------------------------------------------- */

.site-plan-section {
  background: var(--white);
}
.site-plan-wrap {
  margin-top: 3rem;
  background: var(--sand);
  padding: clamp(1rem, 3vw, 2.5rem);
  border-radius: 4px;
  position: relative;
}
.site-plan-wrap img {
  width: 100%;
  height: auto;
}
.site-plan-legend {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 1.5rem;
  margin-top: 3rem;
}
.legend-item {
  border-left: 1px solid var(--line);
  padding-left: 1.25rem;
}
.legend-item strong {
  display: block;
  font-size: 2rem;
  font-weight: 200;
  color: var(--navy);
  letter-spacing: -0.02em;
  margin-bottom: 0.25rem;
}
.legend-item span {
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--grey);
  font-weight: 500;
}

/* --------------------------------------------------------------------------
   Gallery
   -------------------------------------------------------------------------- */

.gallery {
  background: var(--sand);
}
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: 280px 280px;
  gap: 1rem;
  margin-top: 3rem;
}
.gallery-item {
  overflow: hidden;
  position: relative;
}
.gallery-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.2s var(--easing);
}
.gallery-item:hover img { transform: scale(1.07); }
.gallery-item:nth-child(1) { grid-column: span 2; grid-row: span 2; }
.gallery-item:nth-child(4) { grid-column: span 2; }

@media (max-width: 900px) {
  .gallery-grid {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: repeat(3, 220px);
  }
  .gallery-item:nth-child(1) { grid-column: span 2; grid-row: span 1; }
  .gallery-item:nth-child(4) { grid-column: span 2; }
}

/* --------------------------------------------------------------------------
   CTA / Form section
   -------------------------------------------------------------------------- */

.cta {
  background: var(--navy);
  color: var(--white);
  position: relative;
  overflow: hidden;
}
.cta::before {
  content: '';
  position: absolute;
  top: -50%;
  right: -10%;
  width: 600px;
  height: 600px;
  background: radial-gradient(circle, var(--aqua) 0%, transparent 70%);
  opacity: 0.15;
  filter: blur(40px);
}
.cta-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5rem;
  position: relative;
  z-index: 2;
}
.cta h2 { color: var(--white); margin: 1.5rem 0 1.5rem; }
.cta p { color: rgba(255,255,255,0.75); font-weight: 300; }

.cta-contact-list {
  list-style: none;
  margin-top: 2.5rem;
}
.cta-contact-list li {
  padding: 1.1rem 0;
  border-top: 1px solid rgba(255,255,255,0.15);
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  font-size: 0.92rem;
  align-items: center;
}
.cta-contact-list li:last-child { border-bottom: 1px solid rgba(255,255,255,0.15); }
.cta-contact-list .label {
  color: rgba(255,255,255,0.6);
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.cta-contact-list .val { color: var(--white); font-weight: 500; }

/* Form */
.cta-form {
  background: rgba(255,255,255,0.05);
  backdrop-filter: blur(10px);
  border: 1px solid rgba(255,255,255,0.1);
  padding: clamp(1.75rem, 3vw, 2.75rem);
  border-radius: 2px;
}
.cta-form h3 { color: var(--white); margin-bottom: 1.5rem; font-weight: 400; }
.form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  margin-bottom: 1rem;
}
/* Dark-section form palette overrides — .cta is the navy registration block
   on most pages, .lp-hero is the b2b/b2c landing-page hero with a dark scrim.
   Both put forms on a dark background, so labels/inputs/placeholders/consent
   text need light colours. The contact page (.form-wrap on the sand body) and
   any future light-background form keeps the :root defaults. */
.cta,
.lp-hero {
  --form-text: var(--white);
  --form-label: rgba(255, 255, 255, 0.7);
  --form-border: rgba(255, 255, 255, 0.25);
  --form-placeholder: rgba(255, 255, 255, 0.4);
}

.form-field { margin-bottom: 1rem; }
.form-field label {
  display: block;
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--form-label);
  margin-bottom: 0.5rem;
}
.form-field input,
.form-field textarea,
.form-field select {
  width: 100%;
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--form-border);
  padding: 0.6rem 0;
  color: var(--form-text);
  font-family: inherit;
  font-size: 0.95rem;
  font-weight: 300;
  transition: border-color 0.3s var(--easing);
}
.form-field textarea { min-height: 80px; resize: vertical; }
.form-field input:focus,
.form-field textarea:focus,
.form-field select:focus {
  outline: none;
  border-bottom-color: var(--aqua);
}
.form-field select option { color: var(--ink); background: var(--white); }
.form-field input::placeholder,
.form-field textarea::placeholder { color: var(--form-placeholder); }

.cta-form .btn { margin-top: 1.5rem; width: 100%; }

@media (max-width: 768px) {
  .cta-grid { grid-template-columns: 1fr; gap: 2.5rem; }
  .form-row { grid-template-columns: 1fr; }
}

/* --------------------------------------------------------------------------
   Footer
   -------------------------------------------------------------------------- */

footer {
  background: var(--navy-deep);
  color: rgba(255,255,255,0.6);
  padding: 4rem var(--gutter) 2rem;
}
.footer-inner {
  max-width: 1500px;
  margin: 0 auto;
}
.footer-top {
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1fr;
  gap: 3rem;
  padding-bottom: 3rem;
  border-bottom: 1px solid rgba(255,255,255,0.1);
}
.footer-brand img { height: 64px; margin-bottom: 1.25rem; }
.footer-brand p { font-size: 0.88rem; color: rgba(255,255,255,0.55); max-width: 320px; line-height: 1.7; }
.footer-col h5 {
  color: var(--white);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  margin-bottom: 1.25rem;
}
.footer-col ul { list-style: none; }
.footer-col li { margin-bottom: 0.75rem; font-size: 0.88rem; }
.footer-col a {
  color: rgba(255,255,255,0.55);
  transition: color 0.3s var(--easing);
}
.footer-col a:hover { color: var(--aqua); }

.footer-bottom {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 1rem;
  padding-top: 2rem;
  font-size: 0.78rem;
  color: rgba(255,255,255,0.4);
}

@media (max-width: 768px) {
  .footer-top { grid-template-columns: 1fr; gap: 2.5rem; }
}

/* --------------------------------------------------------------------------
   Scroll reveal
   -------------------------------------------------------------------------- */

.reveal {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 1s var(--easing), transform 1s var(--easing);
}
.reveal.in {
  opacity: 1;
  transform: translateY(0);
}

/* --------------------------------------------------------------------------
   Landing-page specific
   -------------------------------------------------------------------------- */

.lp-hero {
  position: relative;
  min-height: 100vh;
  display: flex;
  align-items: center;
  color: var(--white);
  overflow: hidden;
}
.lp-hero .hero-bg::after {
  background: linear-gradient(110deg, rgba(15,30,66,0.85) 0%, rgba(15,30,66,0.55) 45%, rgba(15,30,66,0.2) 100%);
}
.lp-hero-content {
  position: relative;
  z-index: 2;
  max-width: 1500px;
  margin: 0 auto;
  padding: 8rem var(--gutter) 4rem;
  width: 100%;
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  gap: 4rem;
  align-items: center;
}
.lp-hero h1 {
  color: var(--white);
  font-size: clamp(2.2rem, 5vw, 4.5rem);
  font-weight: 200;
  line-height: 1.02;
  letter-spacing: -0.02em;
  margin-bottom: 2rem;
}
.lp-hero h1 em { color: var(--aqua); font-style: italic; font-weight: 300; }
.lp-hero p.lead {
  color: rgba(255,255,255,0.85);
  font-size: 1.1rem;
  max-width: 540px;
  margin-bottom: 2.5rem;
}
.lp-hero-form {
  background: rgba(255,255,255,0.07);
  backdrop-filter: blur(20px);
  border: 1px solid rgba(255,255,255,0.15);
  padding: 2rem;
  border-radius: 4px;
}
.lp-hero-form h3 { color: var(--white); margin-bottom: 0.5rem; font-weight: 400; }
.lp-hero-form p { color: rgba(255,255,255,0.7); font-size: 0.9rem; margin-bottom: 1.5rem; font-weight: 300; }

.lp-actions { display: flex; gap: 1rem; flex-wrap: wrap; }

@media (max-width: 900px) {
  .lp-hero-content { grid-template-columns: 1fr; gap: 2.5rem; }
}

/* Trust strip on LP */
.trust-strip {
  background: var(--white);
  padding: 2.5rem var(--gutter);
  border-bottom: 1px solid var(--line);
}
.trust-grid {
  max-width: 1500px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 2rem;
  text-align: center;
}
.trust-item .num {
  font-size: 2.4rem;
  font-weight: 200;
  color: var(--navy);
  letter-spacing: -0.02em;
  line-height: 1;
}
.trust-item .num em { color: var(--aqua); font-style: normal; font-weight: 300; }
.trust-item .label {
  margin-top: 0.5rem;
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--grey);
  font-weight: 500;
}
@media (max-width: 700px) {
  .trust-grid { grid-template-columns: 1fr 1fr; gap: 2.5rem 1rem; }
}

/* B2B specific */
.b2b-feature-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
  margin-top: 3rem;
}
.b2b-feature {
  background: var(--white);
  padding: 2rem;
  border: 1px solid var(--line);
  display: flex;
  flex-direction: column;
  gap: 1rem;
  transition: all 0.4s var(--easing);
}
.b2b-feature:hover {
  border-color: var(--aqua);
  transform: translateY(-4px);
}
.b2b-feature .num {
  font-size: 2.5rem;
  font-weight: 200;
  color: var(--aqua);
  letter-spacing: -0.02em;
  line-height: 1;
}
.b2b-feature h4 { font-size: 1.05rem; font-weight: 500; color: var(--navy); }
.b2b-feature p { font-size: 0.9rem; color: var(--grey); line-height: 1.7; font-weight: 300; }

@media (max-width: 900px) {
  .b2b-feature-grid { grid-template-columns: 1fr; }
}

/* --------------------------------------------------------------------------
   Mobile menu
   -------------------------------------------------------------------------- */

@media (max-width: 1280px) {
  .nav-links { gap: 1.35rem; }
  .nav-links a { font-size: 0.68rem; }
}
@media (max-width: 1100px) {
  .nav-links { gap: 1.1rem; }
  .nav-links a { font-size: 0.65rem; letter-spacing: 0.1em; }
}

@media (max-width: 1000px) {
  .nav-links {
    position: fixed;
    top: 0;
    right: -100%;
    width: 80%;
    max-width: 380px;
    height: 100vh;
    background: var(--navy);
    flex-direction: column;
    justify-content: flex-start;
    align-items: flex-start;
    padding: 6rem 2.5rem 2rem;
    gap: 1.5rem;
    transition: right 0.4s var(--easing);
    overflow-y: auto;
  }
  .nav-links.open { right: 0; }
  .nav-links a { color: var(--white) !important; font-size: 1rem; }
  .menu-toggle { display: flex; z-index: 102; }
  .menu-toggle.open span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); background: var(--white); }
  .menu-toggle.open span:nth-child(2) { opacity: 0; }
  .menu-toggle.open span:nth-child(3) { transform: rotate(-45deg) translate(6px, -6px); background: var(--white); }
  .nav-cta { display: none; }

  /* Dropdown becomes an inline list on mobile */
  .has-dropdown > a .caret { display: none; }
  .dropdown {
    position: static !important;
    opacity: 1 !important;
    visibility: visible !important;
    transform: none !important;
    background: transparent !important;
    backdrop-filter: none;
    box-shadow: none;
    border-top: none;
    padding: 0.5rem 0 0 0;
    margin: 0.5rem 0 0 0.85rem;
    border-left: 1px solid rgba(255,255,255,0.18);
    min-width: 0;
    transition: none;
  }
  .dropdown::before { display: none; }
  .dropdown a {
    color: rgba(255,255,255,0.78) !important;
    padding: 0.45rem 0 0.45rem 1rem !important;
    font-size: 0.78rem !important;
  }
  .dropdown a:hover { padding-left: 1rem !important; }

  .hero-content { grid-template-columns: 1fr; gap: 1.5rem; }
  .hero-meta { text-align: left; }
  .hero-eyebrow { display: none; }
}

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

/* === Social links (footer) === */
.social-links {
  display: flex;
  gap: 0.6rem;
  margin-top: 1.25rem;
}
.social-links a {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--white);
  background: transparent;
  border: 1px solid rgba(255,255,255,0.2);
  text-decoration: none;
  transition: background 0.22s var(--easing), border-color 0.22s var(--easing), color 0.22s var(--easing), transform 0.22s var(--easing);
}
.social-links a:hover {
  background: var(--aqua);
  border-color: var(--aqua);
  color: var(--navy);
  transform: translateY(-2px);
}
.social-links svg {
  width: 15px;
  height: 15px;
}

/* ==========================================================================
   MOBILE — PHASE 1 LAYOUT FIXES
   Added 2026-05 — targets specific breakages introduced by inline grids
   on b2b and b2c that didn't have mobile fallbacks.
   ========================================================================== */

/* -------- The Swap section (b2c) — stack rows into vertical cards -------- */
@media (max-width: 700px) {
  /* Hide the column header strip — labels move inline per row */
  .swap-header { display: none; }

  /* Stack each row's 3 cells vertically */
  .swap-row {
    grid-template-columns: 1fr !important;
  }

  /* Arrow cell: less padding, rotate the SVG to point downward */
  .swap-arrow {
    padding: 0.6rem 0 !important;
  }
  .swap-arrow svg {
    transform: rotate(90deg);
    width: 20px !important;
    height: 20px !important;
  }

  /* Tighter padding on the text cells when stacked */
  .swap-cell-old,
  .swap-cell-new {
    padding: 1rem 1.25rem !important;
  }

  /* Inline labels above each cell on mobile — uses ::before pseudo-elements
     so we don't add markup to every row. Communicates the before/after
     comparison clearly when the column header is hidden. */
  .swap-cell-old::before {
    content: "Before";
    display: block;
    font-size: 0.62rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--grey);
    font-weight: 700;
    margin-bottom: 0.5rem;
    opacity: 0.7;
  }
  .swap-cell-new::before {
    content: "After";
    display: block;
    font-size: 0.62rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--aqua);
    font-weight: 700;
    margin-bottom: 0.5rem;
  }
}

/* -------- Transfer duty illustration (b2b) — stack narrative & stat boxes -------- */
@media (max-width: 768px) {
  .transfer-duty-grid {
    grid-template-columns: 1fr !important;
  }
}

/* -------- Image break tall — reduce height on mobile to remove dead space --------
   Strategy: switch parent to auto-height (content-driven), then make the
   <img> absolutely positioned so it still fills the section behind the text.
   The text overlay flows naturally in the box-model. */
@media (max-width: 700px) {
  .image-break,
  .image-break-tall {
    height: auto;
    min-height: 55vh;
  }
  /* Image now needs absolute positioning since parent has no fixed height */
  .image-break > img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
  }
  /* Text content flows into the now-relative box rather than being absolute */
  .image-break-text {
    position: relative;
    left: auto;
    bottom: auto;
    padding: clamp(4rem, 10vw, 6rem) var(--gutter) clamp(2.5rem, 6vw, 4rem);
    max-width: none;
  }
}

/* ==========================================================================
   MOBILE — PHASE 2 HERO COMPRESSION
   ========================================================================== */

/* Landing-page heroes (b2b, b2c) were locked to 100vh min-height which forced
   a full screen even when content was short. On mobile, let content size the
   section naturally and tighten the gutter padding. */
@media (max-width: 700px) {
  .lp-hero {
    min-height: auto;
  }
  .lp-hero-content {
    padding-top: 6rem;
    padding-bottom: 2.5rem;
    gap: 1.75rem;
  }
  .lp-hero h1 {
    margin-bottom: 1.25rem;
  }
  .lp-hero p.lead {
    margin-bottom: 1.5rem;
    font-size: 1rem;
  }
}

/* ==========================================================================
   BACK-TO-TOP FLOATING BUTTON — MOBILE ONLY
   Injected via js/back-to-top.js — appears at bottom-right after scrolling.
   ========================================================================== */

.back-to-top {
  display: none;
}

@media (max-width: 700px) {
  .back-to-top {
    position: fixed;
    bottom: 1.25rem;
    right: 1.25rem;
    background: var(--aqua);
    color: var(--navy);
    text-decoration: none;
    font-size: 0.62rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: 700;
    padding: 0.75rem 1rem;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    box-shadow: 0 4px 14px rgba(15, 30, 66, 0.25);
    z-index: 999;
    opacity: 0;
    pointer-events: none;
    transform: translateY(8px);
    transition: opacity 0.25s ease, transform 0.25s ease, background 0.18s ease;
    -webkit-tap-highlight-color: transparent;
  }
  .back-to-top svg {
    width: 13px;
    height: 13px;
  }
  .back-to-top.visible {
    opacity: 1;
    pointer-events: auto;
    transform: translateY(0);
  }
  .back-to-top:active {
    background: var(--navy);
    color: var(--white);
  }
}

/* ==========================================================================
   MOBILE — HERO FITS ABOVE THE FOLD (phase-2, phase-1, phase-3-4, lifestyle, index)
   100vh on mobile counts the URL bar's pixels, so content anchored to flex-end
   can sit behind it on initial load. 100svh = "small viewport height" =
   the visible area assuming URL bar is showing. Hero now always fits without
   needing the user to scroll.
   ========================================================================== */
@media (max-width: 700px) {
  .hero {
    height: 100vh;             /* fallback for very old browsers */
    height: 100svh;             /* preferred — accounts for browser chrome */
    min-height: 0;              /* drop the 640px floor that fought against svh */
  }
  .hero-content {
    padding-bottom: clamp(2rem, 5vw, 3.5rem);
  }
  /* Slightly tighter type so all content comfortably fits on small phones */
  .hero-title {
    font-size: clamp(2.2rem, 8vw, 3rem);
  }
  .hero-meta strong {
    font-size: clamp(1.7rem, 5vw, 2.4rem);
  }
}

/* ==========================================================================
   LIFESTYLE PAGE — MOBILE UX PASS (A through E)
   Five surgical changes to reduce mobile scroll on /lifestyle.html:
   A. Quiet Truths → mobile accordion (uses native <details>/<summary>)
   B. Adventure amenities → 2-col grid on mobile (was 1-col)
   C. Read-more on 2nd paragraph in Beach / Family Life / Convenience
   D. Protected Wilderness photos → horizontal swipe row on mobile
   E. Section padding compressed on lifestyle pages
   ========================================================================== */

/* === A. QUIET TRUTHS ACCORDION =========================================== */
/* Reset native details default styling */
details.qa-card summary {
  list-style: none;
  outline: none;
  cursor: pointer;
}
details.qa-card summary::-webkit-details-marker { display: none; }
details.qa-card summary::marker { display: none; }

/* Desktop: questions look static (all answers visible because of `open` attr in HTML).
   Removing the pointer cursor signals there's no interaction needed. */
@media (min-width: 701px) {
  details.qa-card summary { cursor: default; }
}

/* Mobile: chevron indicator + rotation when open */
@media (max-width: 700px) {
  details.qa-card summary {
    position: relative;
    padding-right: 1.75rem;
    margin: 0;
  }
  details.qa-card summary::after {
    content: '';
    position: absolute;
    right: 0.25rem;
    top: 0.55rem;
    width: 10px;
    height: 10px;
    border-right: 2px solid var(--aqua);
    border-bottom: 2px solid var(--aqua);
    transform: rotate(45deg);
    transition: transform 0.25s ease;
  }
  details.qa-card[open] summary::after {
    transform: rotate(-135deg);
    top: 0.75rem;
  }
  details.qa-card .qa-a {
    margin-top: 0.85rem;
  }
}

/* === B. ADVENTURE AMENITIES — 2-COL ON MOBILE ============================ */
/* Original CSS drops to 1-col at ≤560px. Override to keep 2-col down to 401px,
   then fall back to 1-col only on very narrow phones. */
@media (max-width: 700px) {
  .amenities-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 1.75rem 1rem;
    max-width: none;
  }
  .amenity-icon {
    width: 38px;
    height: 38px;
    margin-bottom: 0.9rem;
  }
  .amenity h4 {
    font-size: 0.95rem;
    margin-bottom: 0.4rem;
  }
  .amenity p {
    font-size: 0.82rem;
    line-height: 1.5;
  }
}
@media (max-width: 400px) {
  .amenities-grid {
    grid-template-columns: 1fr;
  }
}

/* === C. READ-MORE PATTERN (mobile-only, JS-driven) ======================= */
/* Desktop: full content visible, trigger hidden */
.readmore-trigger {
  display: none;
}

@media (max-width: 700px) {
  .readmore-container .readmore-content {
    max-height: 0;
    overflow: hidden;
    opacity: 0;
    transition: max-height 0.4s ease, opacity 0.25s ease;
  }
  .readmore-container.expanded .readmore-content {
    max-height: 80em;
    opacity: 1;
    transition: max-height 0.5s ease, opacity 0.35s ease 0.1s;
  }
  .readmore-trigger {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    margin-top: 0.75rem;
    font-size: 0.7rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--aqua);
    background: transparent;
    border: none;
    padding: 0.5rem 0;
    cursor: pointer;
    font-weight: 700;
    font-family: inherit;
    -webkit-tap-highlight-color: transparent;
  }
  .readmore-trigger::after {
    content: '↓';
    font-size: 0.9rem;
    line-height: 1;
    transition: transform 0.25s ease;
  }
  .readmore-container.expanded .readmore-trigger::after {
    transform: rotate(180deg);
  }
}

/* === D. PROTECTED WILDERNESS — HORIZONTAL PHOTO CAROUSEL ================= */
/* Original drops to 1-col stack at ≤800px. Override to swipeable row at ≤700px. */
@media (max-width: 700px) {
  .nature-photo-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    gap: 0.75rem;
    margin: 0 calc(-1 * var(--gutter));
    padding: 0.25rem var(--gutter);
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  .nature-photo-grid::-webkit-scrollbar { display: none; }
  .nature-photo {
    flex: 0 0 78%;
    scroll-snap-align: start;
    aspect-ratio: 4/3;
  }
}

/* === E. LIFESTYLE PAGE SECTION PADDING COMPRESSION ======================= */
/* Reduce section padding on mobile for the lifestyle page specifically.
   14 sections × ~96px padding adds up to a lot of dead vertical space. */
@media (max-width: 700px) {
  body.lifestyle-page .section-pad {
    padding-top: clamp(2.25rem, 5vw, 3.25rem);
    padding-bottom: clamp(2.25rem, 5vw, 3.25rem);
  }
}

/* ==========================================================================
   PHASE 3 & 4 PAGE — MOBILE UX PASS
   - Read-more containers added to multiple text-heavy sections (uses existing
     .readmore-container / .readmore-content / .readmore-trigger pattern,
     wired up by js/lifestyle-mobile.js which is now also loaded on this page).
   - Stack side-by-side image grids to full-width single column on mobile.
   ========================================================================== */

/* Stack 2-up image grids on mobile so each image gets full width
   (Showcase interiors + Featured Plan renders) */
@media (max-width: 700px) {
  .mobile-stack-grid {
    grid-template-columns: 1fr !important;
  }
}

/* ==========================================================================
   MOBILE — HERO TEXT BIGGER + WHITE-OVER-IMAGE READABILITY
   Builds on the earlier "hero fits above the fold" pass. This pass:
   - Bumps hero title + price typography for impact
   - Strengthens dark gradient overlays so white text contrasts cleanly
   - Adds subtle text-shadow to all white-text-over-image elements
   ========================================================================== */
@media (max-width: 700px) {

  /* === HERO TYPE (phase pages — .hero class) ============================= */
  .hero-title {
    font-size: clamp(2.5rem, 10vw, 3.5rem);
    line-height: 1.0;
    text-shadow: 0 1px 8px rgba(0, 0, 0, 0.4);
  }
  .hero-meta {
    font-size: 1rem;
    font-weight: 500;
    color: rgba(255, 255, 255, 0.96);
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.4);
  }
  .hero-meta strong {
    font-size: clamp(2rem, 7vw, 2.8rem);
    text-shadow: 0 2px 10px rgba(0, 0, 0, 0.45);
  }

  /* === HERO TYPE (landing pages — .lp-hero on b2b/b2c) =================== */
  .lp-hero h1 {
    font-size: clamp(2.5rem, 9vw, 3.5rem);
    line-height: 1.05;
    text-shadow: 0 1px 8px rgba(0, 0, 0, 0.4);
  }
  .lp-hero p.lead {
    font-size: 1.05rem;
    color: rgba(255, 255, 255, 0.95);
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.4);
  }

  /* === GRADIENT OVERLAYS — stronger darkening on mobile ================== */
  /* Phase-page hero: deeper bottom gradient since text anchors to bottom */
  .hero-bg::after {
    background: linear-gradient(
      180deg,
      rgba(15, 30, 66, 0.25) 0%,
      rgba(15, 30, 66, 0) 30%,
      rgba(15, 30, 66, 0.55) 65%,
      rgba(15, 30, 66, 0.88) 100%
    );
  }
  /* LP-hero: original 110deg left-to-right gradient was tuned for desktop's
     2-column hero. On mobile content stacks vertically, so switch to a
     top-to-bottom gradient that covers the whole hero evenly. */
  .lp-hero .hero-bg::after {
    background: linear-gradient(
      180deg,
      rgba(15, 30, 66, 0.5) 0%,
      rgba(15, 30, 66, 0.7) 70%,
      rgba(15, 30, 66, 0.85) 100%
    );
  }

  /* === IMAGE BREAK OVERLAYS — readable on mobile ========================= */
  /* Original 55% left-fade is too subtle. Mobile gets a stronger
     top-to-bottom darkening with text sitting in the deepest band. */
  .image-break-overlay {
    background: linear-gradient(
      180deg,
      rgba(15, 30, 66, 0.35) 0%,
      rgba(15, 30, 66, 0.55) 50%,
      rgba(15, 30, 66, 0.8) 100%
    );
  }
  .image-break-text h2,
  .image-break-text .display,
  .image-break-text .image-break-h2-xl {
    text-shadow: 0 2px 12px rgba(0, 0, 0, 0.45);
  }
  .image-break-text p {
    color: rgba(255, 255, 255, 0.96);
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.4);
  }
  .image-break-text .eyebrow {
    text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
  }
}

/* ==========================================================================
   HOMES-FOR-SALE — MOBILE SIMPLIFICATIONS
   - Hide the filter bar (4 selects + reset + search) — with only 5 listings,
     filtering on a small screen adds friction without value.
   - Hide the "Welgedaan Estate · House Builds In Progress" crumb on mobile —
     the H1 below it already says what the page is about.
   ========================================================================== */
@media (max-width: 700px) {
  .listings-filterbar {
    display: none;
  }
  .page-header .crumb {
    display: none;
  }
}

/* ==========================================================================
   MOBILE — 4-ITEM STAT STRIPS → 2×2 GRID
   Each affected pattern currently uses repeat(auto-fit, minmax(200-220px, 1fr))
   which collapses to 1 column at narrow widths — stacking 4 items vertically
   takes ~4 screens of scroll. Forcing 2×2 cuts that to ~2 screens.
   ========================================================================== */
@media (max-width: 700px) {

  /* ---- 1. Phase pages stats strip (phase-2: 30/7/R990k/1.8km, phase-3-4: R420k/R2.8m/HAB/North) ---- */
  .site-plan-legend {
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 1.5rem 1rem !important;
  }
  .stats-strip .legend-item {
    padding-left: 0.85rem;
  }
  .stats-strip .legend-item strong {
    font-size: 1.85rem;
  }

  /* ---- 2. b2c Smart Move stats (Capital Growth / Hectares / Sold / Phase) ---- */
  .smart-stats {
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.85rem !important;
  }
  /* Tighten internal padding of each stat card */
  .smart-stats > div {
    padding: 1.25rem !important;
  }

  /* ---- 3. b2b 4-entry price boxes (Stand-Only / Apartments / Turnkey / Plot+Plan) ---- */
  .b2b-stat-grid {
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.85rem !important;
  }
  .b2b-stat-grid > div {
    padding: 1.25rem !important;
  }
  /* Scale down the big "From R420k" line so it fits the half-width cell.
     Targets the 2nd direct child div of each card (the price line). */
  .b2b-stat-grid > div > div:nth-of-type(2) {
    font-size: 1.7rem !important;
  }
}

/* ==========================================================================
   READMORE CONTAINER — spacing fix inside .split-text
   The .split-text { p + p } rule normally gives 1.25rem between paragraphs,
   but the readmore wrapper interrupts that sibling selector. This rule
   restores the same spacing for paragraphs that live inside the wrapper,
   so the flow reads identically to two consecutive <p> tags on desktop.
   ========================================================================== */
.split-text > .readmore-container {
  margin-top: 1.25rem;
}
.split-text .readmore-content > p {
  margin: 0;
}

/* ==========================================================================
   TEMPORARILY HIDE: Other Developments
   Hides every nav and footer link pointing to other-developments.html across
   the whole site. Markup stays in place so the page can be re-exposed any
   time by simply removing this rule.
   ========================================================================== */
li:has(> a[href="other-developments.html"]) {
  display: none;
}

/* ==========================================================================
   LEGAL — modal, policy page chrome, consent checkboxes, footer link row.
   Appended for the POPIA legal-pages spec (LAUNCH-PLAN.md §4.F).
   Tokens reused: --navy, --navy-deep, --aqua, --sand, --easing, --gutter.
   No new colour values introduced.
   ========================================================================== */

/* --- sr-only utility — visually hidden, screen-reader accessible ---------- */
.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;
}

/* --- Legal pages (standalone view) ---------------------------------------
   When a user visits privacy-policy.html / terms-and-conditions.html directly,
   <main class="legal-content"> sits at body level and needs container padding
   plus readable typography. When inside .legal-modal-body those constraints
   are removed (see below).                                                  */
body > main.legal-content {
  max-width: 820px;
  margin: 0 auto;
  padding: calc(var(--section-pad) + 4rem) var(--gutter) var(--section-pad);
  background: var(--white);
  color: var(--ink);
}
body > main.legal-content .legal-title {
  font-size: clamp(1.875rem, 4vw, 2.75rem);
  font-weight: 300;
  letter-spacing: -0.015em;
  color: var(--navy-deep);
  margin-bottom: 0.5rem;
}
body > main.legal-content .legal-meta {
  font-size: var(--f-sm);
  color: var(--grey);
  margin-bottom: 2.5rem;
  padding-bottom: 1.5rem;
  border-bottom: 1px solid var(--line);
}

/* Shared (standalone + in-modal) legal-content typography */
main.legal-content section { margin: 2rem 0 2.5rem; }
main.legal-content h2 {
  font-size: clamp(1.125rem, 2vw, 1.375rem);
  font-weight: 600;
  color: var(--navy);
  margin-bottom: 1rem;
  letter-spacing: -0.005em;
}
main.legal-content p,
main.legal-content ul,
main.legal-content ol,
main.legal-content address {
  font-size: 0.95rem;
  line-height: 1.7;
  color: var(--ink);
  margin-bottom: 1rem;
}
main.legal-content ul,
main.legal-content ol { padding-left: 1.5rem; }
main.legal-content li { margin-bottom: 0.35rem; }
main.legal-content address {
  font-style: normal;
  padding: 1rem 1.25rem;
  background: var(--sand);
  border-left: 3px solid var(--aqua);
  border-radius: 4px;
  font-size: 0.9rem;
}
main.legal-content a {
  color: var(--navy);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
}
main.legal-content a:hover { color: var(--aqua); }
main.legal-content code {
  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;
  font-size: 0.85em;
  padding: 0.1rem 0.35rem;
  background: var(--sand);
  border-radius: 3px;
}

/* --- .legal-link — small underlined link used in form labels & footer ----- */
.legal-link {
  color: var(--navy);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  transition: color 0.15s ease;
}
.legal-link:hover,
.legal-link:focus-visible { color: var(--aqua); }

/* --- Legal modal --------------------------------------------------------- */
.legal-modal { position: fixed; inset: 0; z-index: 9999; }
.legal-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(15, 30, 66, 0.72);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--gutter);
  animation: legal-modal-backdrop-in 0.18s var(--easing);
}
.legal-modal-container {
  background: var(--white);
  width: 100%;
  max-width: 720px;
  max-height: 85vh;
  border-radius: 12px;
  box-shadow: 0 24px 60px rgba(15, 30, 66, 0.35);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  animation: legal-modal-in 0.18s var(--easing);
}
.legal-modal-header {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.1rem 1.5rem;
  background: var(--navy);
  color: var(--white);
}
.legal-modal-title {
  margin: 0;
  font-size: 1.125rem;
  font-weight: 500;
  letter-spacing: -0.005em;
  color: var(--white);
}
.legal-modal-close {
  background: transparent;
  border: 0;
  color: var(--white);
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background 0.15s ease;
  margin-left: 1rem;
}
.legal-modal-close:hover { background: rgba(255, 255, 255, 0.12); }
.legal-modal-close:focus-visible {
  outline: 2px solid var(--aqua);
  outline-offset: 2px;
}
.legal-modal-body {
  flex: 1;
  overflow-y: auto;
  padding: 1.75rem 1.75rem 2rem;
  background: var(--white);
  -webkit-overflow-scrolling: touch;
}

/* In-modal overrides — drop the standalone container constraints. */
.legal-modal-body > main.legal-content {
  max-width: none;
  margin: 0;
  padding: 0;
  background: transparent;
}
.legal-modal-body main.legal-content .legal-title {
  font-size: 1.5rem;
  margin-bottom: 0.25rem;
}
.legal-modal-body main.legal-content .legal-meta {
  margin-bottom: 1.75rem;
  padding-bottom: 1rem;
}
.legal-modal-body main.legal-content section { margin: 1.25rem 0 1.5rem; }
.legal-modal-body main.legal-content h2 {
  font-size: 1.05rem;
  margin-bottom: 0.65rem;
}

body.legal-modal-open { overflow: hidden; }

/* Tablet — modal fills more of the viewport */
@media (max-width: 768px) {
  .legal-modal-backdrop { padding: 1rem; }
  .legal-modal-container {
    max-width: none;
    width: 100%;
    max-height: 92vh;
    border-radius: 10px;
  }
  .legal-modal-body { padding: 1.25rem 1.25rem 1.5rem; }
}

/* Phone — full-bleed, 44px close target */
@media (max-width: 480px) {
  .legal-modal-backdrop {
    padding: 0;
    align-items: stretch;
    justify-content: stretch;
  }
  .legal-modal-container {
    max-height: none;
    height: 100vh;
    border-radius: 0;
    animation: legal-modal-in-mobile 0.25s var(--easing);
  }
  .legal-modal-header { padding: 1rem 1.1rem; }
  .legal-modal-close { width: 44px; height: 44px; }
  .legal-modal-body { padding: 1.1rem 1.1rem 1.5rem; }
}

@keyframes legal-modal-backdrop-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes legal-modal-in {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes legal-modal-in-mobile {
  from { opacity: 0; transform: translateY(24px); }
  to { opacity: 1; transform: translateY(0); }
}
@media (prefers-reduced-motion: reduce) {
  .legal-modal-backdrop,
  .legal-modal-container { animation: none; }
}

/* --- Form consent block (3 checkboxes inside <fieldset>) ----------------- */
.form-consent {
  border: 0;
  padding: 1rem 0 0;
  margin: 1rem 0 1.25rem;
  border-top: 1px solid var(--line);
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}
.consent-row {
  display: flex;
  align-items: flex-start;
  gap: 0.65rem;
  cursor: pointer;
  font-size: 0.85rem;
  line-height: 1.5;
  color: var(--form-text);
}
.consent-row input[type="checkbox"] {
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  margin-top: 0.15rem;
  accent-color: var(--navy);
  cursor: pointer;
}
.consent-row input[type="checkbox"]:focus-visible {
  outline: 2px solid var(--aqua);
  outline-offset: 2px;
}
.consent-row .legal-link { font-weight: 500; }
.consent-required {
  color: var(--aqua);
  font-weight: 600;
  margin-left: 0.15rem;
}
.consent-row input[type="checkbox"]:user-invalid ~ span .consent-required {
  color: #c0392b;
}
.consent-optional {
  color: var(--form-label);
  font-style: italic;
  margin-left: 0.25rem;
}

/* --- Footer legal link row ----------------------------------------------- */
.footer-legal {
  display: flex;
  gap: 0.5rem;
  align-items: center;
  flex-wrap: wrap;
}
.footer-legal a {
  color: inherit;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  opacity: 0.85;
}
.footer-legal a:hover,
.footer-legal a:focus-visible { opacity: 1; }

/* --- Reveal fallback for browsers without IntersectionObserver ----------- */
.reveal-no-io {
  opacity: 1 !important;
  transform: none !important;
}

/* ============================================================================
   Cookie consent banner (POPIA opt-in). Hidden by default; js/cookie-consent.js
   builds the DOM via createElement and toggles .is-visible after insertion to
   trigger the slide-up transition. Brand-aligned: navy ground, aqua primary
   action, white-on-navy text. Both actions are equally sized to avoid the
   "Accept is bigger" dark pattern.
   ============================================================================ */

.cookie-banner {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 9000;
  background: var(--navy);
  color: #fff;
  font-family: 'Montserrat', system-ui, sans-serif;
  font-weight: 300;
  box-shadow: 0 -8px 32px rgba(0, 0, 0, 0.22);
  border-top: 3px solid var(--aqua);
  transform: translateY(100%);
  transition: transform 0.32s cubic-bezier(0.22, 0.61, 0.36, 1);
  will-change: transform;
}

.cookie-banner.is-visible {
  transform: translateY(0);
}

.cookie-banner-inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 1.6rem 1.5rem;
  display: flex;
  align-items: flex-start;
  gap: 1.5rem;
  flex-wrap: wrap;
}

/* Decorative shield-with-check — privacy/data-protection metaphor in aqua. */
.cookie-banner-icon-wrap {
  flex-shrink: 0;
  padding-top: 0.15rem;
  color: var(--aqua);
}
.cookie-banner-icon {
  width: 32px;
  height: 32px;
  display: block;
}

.cookie-banner-text {
  flex: 1 1 360px;
  min-width: 0;
}

.cookie-banner-title {
  display: block;
  font-weight: 500;
  font-size: 0.98rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin-bottom: 0.5rem;
  color: var(--aqua);
}

.cookie-banner-desc {
  margin: 0 0 0.95rem;
  font-size: 0.92rem;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.92);
}

/* Standalone prominent privacy-policy link — outlined CTA in aqua, fills on hover.
   class="legal-link" makes js/legal-modal.js intercept and open as the in-page
   modal rather than navigating, so the cookie banner stays in place behind it. */
.cookie-banner-policy-link {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  font-size: 0.76rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--aqua);
  text-decoration: none;
  padding: 0.55rem 0.95rem;
  border: 1px solid rgba(15, 190, 209, 0.55);
  border-radius: 2px;
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.cookie-banner-policy-link:hover,
.cookie-banner-policy-link:focus-visible {
  color: var(--navy);
  background: var(--aqua);
  border-color: var(--aqua);
  outline: none;
}
.cookie-banner-policy-arrow {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
  transition: transform 0.2s ease;
}
.cookie-banner-policy-link:hover .cookie-banner-policy-arrow,
.cookie-banner-policy-link:focus-visible .cookie-banner-policy-arrow {
  transform: translateX(3px);
}

.cookie-banner-actions {
  display: flex;
  gap: 0.6rem;
  flex-shrink: 0;
  align-self: center;
}

.cookie-banner-btn {
  font-family: inherit;
  font-weight: 600;
  font-size: 0.82rem;
  letter-spacing: 0.6px;
  text-transform: uppercase;
  padding: 0.85rem 1.6rem;
  border-radius: 2px;
  cursor: pointer;
  transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}

.cookie-banner-btn:focus-visible {
  outline: 2px solid var(--aqua);
  outline-offset: 2px;
}

.cookie-banner-btn--accept {
  background: var(--aqua);
  color: var(--navy);
  border: 1px solid var(--aqua);
}
.cookie-banner-btn--accept:hover,
.cookie-banner-btn--accept:focus {
  background: #fff;
  border-color: #fff;
}

.cookie-banner-btn--reject {
  background: transparent;
  color: #fff;
  border: 1px solid rgba(255, 255, 255, 0.45);
}
.cookie-banner-btn--reject:hover,
.cookie-banner-btn--reject:focus {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.85);
}

/* Customise is a borderless text-style action — reduces visual weight so the
   user is drawn first to Accept/Reject and the third option doesn't make the
   banner feel like a wall of equal buttons. */
.cookie-banner-btn--customise {
  background: transparent;
  color: rgba(255, 255, 255, 0.85);
  border: 1px solid transparent;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}
.cookie-banner-btn--customise:hover,
.cookie-banner-btn--customise:focus {
  color: #fff;
  background: rgba(255, 255, 255, 0.06);
}

/* Tablet & medium: icon disappears (saves space), actions go full-width. */
@media (max-width: 860px) {
  .cookie-banner-icon-wrap { display: none; }
  .cookie-banner-text { flex: 1 1 100%; }
  .cookie-banner-actions { width: 100%; align-self: stretch; }
  .cookie-banner-btn { flex: 1; padding: 0.85rem 0.5rem; }
}

/* Phone: tighter padding, slightly smaller type. */
@media (max-width: 720px) {
  .cookie-banner-inner { padding: 1.2rem 1.2rem; gap: 0.9rem; }
  .cookie-banner-title { font-size: 0.9rem; letter-spacing: 0.14em; }
  .cookie-banner-desc { font-size: 0.88rem; margin-bottom: 0.75rem; }
  .cookie-banner-policy-link { font-size: 0.72rem; padding: 0.5rem 0.8rem; }
}

.cookie-preferences-link {
  cursor: pointer;
}

/* ============================================================================
   Cookie preferences modal (Consent Mode v2 granular toggles)
   Triggered from the banner "Customise" button or the footer "Cookie
   Preferences" link. Pre-populates toggles from saved state if present.
   ============================================================================ */

body.cookie-prefs-open { overflow: hidden; }

.cookie-prefs-overlay {
  position: fixed;
  inset: 0;
  z-index: 9500;
  background: rgba(15, 30, 66, 0.55);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
  opacity: 0;
  transition: opacity 0.22s ease;
}
.cookie-prefs-overlay.is-visible { opacity: 1; }

.cookie-prefs-modal {
  background: #fff;
  width: 100%;
  max-width: 560px;
  max-height: calc(100vh - 3rem);
  overflow-y: auto;
  border-top: 3px solid var(--aqua);
  box-shadow: 0 24px 64px rgba(0, 0, 0, 0.28);
  padding: 1.75rem 1.75rem 1.5rem;
  transform: translateY(12px);
  transition: transform 0.22s cubic-bezier(0.22, 1, 0.36, 1);
}
.cookie-prefs-overlay.is-visible .cookie-prefs-modal { transform: translateY(0); }

.cookie-prefs-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 0.5rem;
}
.cookie-prefs-header h2 {
  font-size: 1.25rem;
  font-weight: 500;
  letter-spacing: -0.01em;
  color: var(--navy);
  margin: 0;
}
.cookie-prefs-close {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--grey);
  border-radius: 2px;
  cursor: pointer;
  background: transparent;
  border: none;
  transition: color 0.18s ease, background-color 0.18s ease;
}
.cookie-prefs-close:hover,
.cookie-prefs-close:focus-visible {
  color: var(--navy);
  background: var(--sand);
  outline: none;
}
.cookie-prefs-close-icon { width: 16px; height: 16px; }

.cookie-prefs-intro {
  font-size: 0.88rem;
  line-height: 1.55;
  color: var(--grey);
  margin: 0 0 1.25rem;
}

.cookie-prefs-list {
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
  border-top: 1px solid var(--line);
  padding-top: 1.25rem;
}

.cookie-prefs-row {
  display: flex;
  align-items: flex-start;
  gap: 1rem;
  padding: 0.85rem 1rem;
  background: var(--sand);
  border-left: 3px solid var(--aqua);
}
.cookie-prefs-row-text {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
}
.cookie-prefs-row-text strong {
  font-size: 0.92rem;
  font-weight: 600;
  color: var(--navy);
  letter-spacing: 0.01em;
}
.cookie-prefs-row-text span {
  font-size: 0.82rem;
  color: var(--grey);
  line-height: 1.5;
}

/* "Always on" badge for the strictly-necessary row — visually settled,
   communicates non-toggleable status without using a disabled checkbox. */
.cookie-prefs-locked {
  flex-shrink: 0;
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--aqua);
  align-self: center;
  white-space: nowrap;
}

/* Switch toggle — hidden native checkbox + styled span. The :checked sibling
   selector handles the on/off transition. accent-color does not apply here
   because we draw the switch ourselves; aqua-on means consent granted. */
.cookie-prefs-toggle {
  flex-shrink: 0;
  position: relative;
  width: 44px;
  height: 24px;
  cursor: pointer;
  align-self: center;
  display: inline-block;
}
.cookie-prefs-toggle input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
  margin: 0;
}
.cookie-prefs-switch {
  position: absolute;
  inset: 0;
  background: rgba(34, 65, 135, 0.18);
  border-radius: 999px;
  transition: background-color 0.2s ease;
}
.cookie-prefs-switch::before {
  content: '';
  position: absolute;
  top: 3px;
  left: 3px;
  width: 18px;
  height: 18px;
  background: #fff;
  border-radius: 50%;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
  transition: transform 0.2s cubic-bezier(0.22, 1, 0.36, 1);
}
.cookie-prefs-toggle input[type="checkbox"]:checked + .cookie-prefs-switch {
  background: var(--aqua);
}
.cookie-prefs-toggle input[type="checkbox"]:checked + .cookie-prefs-switch::before {
  transform: translateX(20px);
}
.cookie-prefs-toggle input[type="checkbox"]:focus-visible + .cookie-prefs-switch {
  outline: 2px solid var(--aqua);
  outline-offset: 2px;
}

.cookie-prefs-actions {
  margin-top: 1.5rem;
  display: flex;
  justify-content: flex-end;
}
.cookie-prefs-btn {
  font-family: inherit;
  font-weight: 600;
  font-size: 0.82rem;
  letter-spacing: 0.6px;
  text-transform: uppercase;
  padding: 0.85rem 1.6rem;
  border-radius: 2px;
  cursor: pointer;
  border: 1px solid transparent;
  transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}
.cookie-prefs-btn:focus-visible {
  outline: 2px solid var(--aqua);
  outline-offset: 2px;
}
.cookie-prefs-btn--save {
  background: var(--navy);
  color: #fff;
}
.cookie-prefs-btn--save:hover,
.cookie-prefs-btn--save:focus {
  background: var(--navy-dark);
}

@media (max-width: 540px) {
  .cookie-prefs-overlay { padding: 0; align-items: flex-end; }
  .cookie-prefs-modal {
    max-width: none;
    max-height: 92vh;
    padding: 1.5rem 1.25rem 1.25rem;
  }
  .cookie-prefs-row { padding: 0.75rem 0.85rem; }
  .cookie-prefs-actions { justify-content: stretch; }
  .cookie-prefs-btn--save { width: 100%; }
}
