/* ============================================================
   Kwathula Developments · Selborne — V6.1 "Coastal Editorial"
   Warm ivory paper, deep pine ink, one gold accent. Fraunces
   variable serif for display, Hanken Grotesk for body. Full-bleed
   cinematic hero, floating glass nav, double-bezel surfaces,
   film grain. All class names used by the HTML are preserved.
   ============================================================ */

@font-face {
  font-family: "Fraunces";
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url("assets/fonts/fraunces-variable-normal.woff2") format("woff2");
}

@font-face {
  font-family: "Hanken Grotesk";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("assets/fonts/hanken-variable-normal.woff2") format("woff2");
}

:root {
  color-scheme: light;

  /* Palette — warm ivory paper, pine ink, gold reserved for golf */
  --page: #f6f3ec;
  --surface: #efeadd;
  --surface-strong: #e6dfcd;
  --ink: #1b2a22;
  --muted: #66705f;
  --line: rgba(27, 42, 34, 0.16);
  --pine: #14291e;
  --pine-soft: #1d3627;
  --accent: #23513a;
  --accent-strong: #183a29;
  --on-accent: #f9f7ef;
  --gold: #a5783a;
  --gold-ink: #85652e; /* darker gold for small text on light surfaces (AA) */
  --gold-soft: rgba(165, 120, 58, 0.12);
  --cream-text: #f4f0e4;
  --cream-muted: rgba(244, 240, 228, 0.72);
  --error: #a13030;

  /* Tinted shadows — carry the pine hue, never pure black */
  --shadow-soft: 0 1px 2px rgba(20, 41, 30, 0.08), 0 6px 18px rgba(20, 41, 30, 0.07);
  --shadow-lift: 0 2px 4px rgba(20, 41, 30, 0.09), 0 22px 48px -12px rgba(20, 41, 30, 0.28);

  --radius-lg: 26px;
  --radius: 18px;
  --radius-sm: 12px;
  --pill: 999px;
  --shell: min(1240px, calc(100% - 56px));
  /* Header block height: 14px top padding + 62px .nav-shell + 10px bottom.
     The hero pulls itself up by exactly this to sit behind the floating nav,
     so keep the three values in sync if the nav ever changes size. */
  --header-h: 86px;

  /* Motion — real mass, custom curves */
  --spring: cubic-bezier(0.32, 0.72, 0, 1);
  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
  --dur-fast: 180ms;
  --dur-med: 320ms;
  --dur-slow: 850ms;

  --font-display: "Fraunces", Georgia, "Times New Roman", serif;
  --font-sans: "Hanken Grotesk", "Helvetica Neue", Arial, sans-serif;

  --z-header: 30;
  --z-menu: 40;
  --z-grain: 60;
  --z-skip: 100;
  --z-whatsapp: 45;
}

/* ---------- Reset / base ---------- */

*, *::before, *::after { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--page);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: 16.5px;
  line-height: 1.68;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}

/* Film grain — fixed, non-interactive, breaks digital flatness */
body::after {
  content: "";
  position: fixed; inset: 0;
  z-index: var(--z-grain);
  pointer-events: none;
  opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* Keep intrinsic image proportions when width/height attributes are scaled down. */
img { display: block; max-width: 100%; height: auto; }
figure { margin: 0; }
a { color: inherit; }
button, input, select, textarea { font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; touch-action: manipulation; }

h1, h2, h3 {
  margin-top: 0;
  font-family: var(--font-display);
  font-weight: 400;
  font-variation-settings: "opsz" 90;
  color: var(--ink);
  text-wrap: balance;
}

h1 { font-size: clamp(3.1rem, 6.6vw, 5.8rem); letter-spacing: -0.02em; line-height: 1.04; }
h2 { font-size: clamp(2.3rem, 4.4vw, 3.9rem); letter-spacing: -0.017em; line-height: 1.1; }
h3 { font-size: clamp(1.35rem, 2vw, 1.75rem); letter-spacing: -0.01em; line-height: 1.28; }

p { text-wrap: pretty; }

::selection { background: var(--pine); color: var(--cream-text); }

[id] { scroll-margin-top: 108px; }

.skip-link {
  position: fixed; top: 12px; left: 12px; z-index: var(--z-skip);
  padding: 10px 16px; border-radius: var(--pill);
  background: var(--pine); color: var(--cream-text);
  transform: translateY(-160%); transition: transform var(--dur-fast) var(--ease-out);
}
.skip-link:focus { transform: translateY(0); }

.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;
}

.page-shell { width: var(--shell); margin: 0 auto; }

.eyebrow {
  display: inline-flex; align-items: center; gap: 10px;
  margin: 0 0 22px;
  color: var(--accent);
  font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.22em; text-transform: uppercase;
}
.eyebrow::before {
  content: "";
  width: 26px; height: 1px;
  background: currentColor;
  opacity: 0.6;
}
.eyebrow.light { color: var(--gold-ink); }
.eyebrow.gold { color: var(--gold-ink); }

.section-heading { max-width: 800px; margin-bottom: 64px; }
.section-heading > p:last-child { max-width: 640px; margin: 24px 0 0; color: var(--muted); font-size: 1.06rem; }

.image-disclaimer { color: var(--muted); font-size: 0.78rem; }

/* ---------- Header — floating glass island ---------- */

.site-header {
  position: sticky; top: 0; z-index: var(--z-header);
  padding: 14px 0 10px;
  background: linear-gradient(to bottom, rgba(246, 243, 236, 0.85), rgba(246, 243, 236, 0));
  pointer-events: none;
}
.site-header > *, .site-header a, .site-header button, .site-header nav { pointer-events: auto; }

.nav-shell {
  width: min(1160px, calc(100% - 40px));
  height: 62px;
  margin: 0 auto;
  padding: 0 12px 0 24px;
  display: flex; align-items: center; justify-content: space-between; gap: 28px;
  border-radius: var(--pill);
  background: rgba(246, 243, 236, 0.78);
  backdrop-filter: blur(18px) saturate(1.5);
  -webkit-backdrop-filter: blur(18px) saturate(1.5);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12), var(--shadow-soft);
  transition: box-shadow var(--dur-med) ease, background-color var(--dur-med) ease;
}
.site-header.is-scrolled .nav-shell {
  background: rgba(246, 243, 236, 0.92);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12), var(--shadow-lift);
}

.brand { flex: 0 0 auto; transition: transform var(--dur-fast) var(--spring), opacity var(--dur-fast) ease; }
.brand:hover { opacity: 0.85; transform: scale(1.03); }
/* The source logo is a square off-white badge — present it as a rounded chip */
.brand img { width: 46px; height: 46px; object-fit: cover; border-radius: 13px; box-shadow: 0 1px 3px rgba(20, 41, 30, 0.18); }

.site-nav { display: flex; align-items: center; gap: 32px; }
.site-nav a:not(.nav-cta) {
  position: relative;
  color: var(--muted);
  font-size: 0.88rem; font-weight: 600;
  text-decoration: none; white-space: nowrap;
  transition: color var(--dur-fast) ease;
}
.site-nav a:not(.nav-cta)::after {
  content: ""; position: absolute; left: 0; bottom: -6px;
  height: 1.5px; width: 100%;
  background: var(--gold);
  transform: scaleX(0); transform-origin: right;
  transition: transform 300ms var(--spring);
}
.site-nav a:not(.nav-cta):hover, .site-nav a:not(.nav-cta)[aria-current="page"] { color: var(--ink); }
.site-nav a:not(.nav-cta):hover::after,
.site-nav a:not(.nav-cta)[aria-current="page"]::after { transform: scaleX(1); transform-origin: left; }

.nav-cta {
  min-height: 42px; padding: 8px 8px 8px 22px;
  border-radius: var(--pill);
  background: var(--pine); color: var(--cream-text);
  display: inline-flex; align-items: center; gap: 10px;
  text-decoration: none; font-weight: 600; font-size: 0.88rem;
  transition: transform var(--dur-fast) var(--spring), background-color var(--dur-fast) ease;
}
.nav-cta::after {
  content: "→";
  display: inline-flex; align-items: center; justify-content: center;
  width: 27px; height: 27px; flex: 0 0 auto;
  border-radius: 50%;
  background: rgba(249, 247, 239, 0.16);
  font-size: 0.85rem;
  transition: transform var(--dur-med) var(--spring), background-color var(--dur-med) ease;
}
.nav-cta:hover { background: var(--pine-soft); transform: translateY(-1px); }
.nav-cta:hover::after { transform: translateX(3px); background: rgba(249, 247, 239, 0.26); }
.nav-cta:active { transform: scale(0.97); }

.menu-toggle { display: none; }

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

.button {
  min-height: 50px;
  display: inline-flex; align-items: center; justify-content: center; gap: 12px;
  padding: 12px 12px 12px 26px;
  border: 1px solid transparent;
  border-radius: var(--pill);
  font-weight: 600; line-height: 1; letter-spacing: 0.01em;
  text-decoration: none; white-space: nowrap; cursor: pointer;
  transition: transform var(--dur-fast) var(--spring),
              background-color var(--dur-med) ease,
              border-color var(--dur-med) ease,
              color var(--dur-med) ease;
}
.button:active { transform: scale(0.98); }

/* Button-in-button: trailing arrow lives in its own nested circle */
.button-primary, .button-light { padding-right: 12px; }
.button-primary::after, .button-light::after {
  content: "→";
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; flex: 0 0 auto;
  border-radius: 50%;
  background: rgba(249, 247, 239, 0.16);
  font-size: 0.9rem;
  transition: transform var(--dur-med) var(--spring), background-color var(--dur-med) ease;
}

.button-primary { background: var(--pine); color: var(--cream-text); box-shadow: var(--shadow-soft); }
.button-primary:hover { background: var(--pine-soft); transform: translateY(-2px); }
.button-primary:hover::after { transform: translateX(3px); background: rgba(249, 247, 239, 0.26); }

.button-secondary { border-color: var(--line); background: transparent; color: var(--ink); }
.button-secondary:hover { border-color: var(--ink); transform: translateY(-2px); }

.button-glass {
  border-color: rgba(244, 240, 228, 0.45);
  background: rgba(244, 240, 228, 0.08);
  color: var(--cream-text);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.button-glass:hover { border-color: rgba(244, 240, 228, 0.9); background: rgba(244, 240, 228, 0.14); transform: translateY(-2px); }

.button-light { background: var(--gold); color: #fff; }
.button-light:hover { background: #9d7a3f; transform: translateY(-2px); }
.button-light:hover::after { transform: translateX(3px); background: rgba(255, 255, 255, 0.22); }

.button-outline-light { border-color: var(--line); color: var(--ink); background: transparent; }
.button-outline-light:hover { border-color: var(--ink); transform: translateY(-2px); }

.text-link {
  color: var(--accent);
  font-weight: 600;
  text-underline-offset: 5px;
  text-decoration-thickness: 1.5px;
  transition: color var(--dur-fast) ease, text-underline-offset var(--dur-fast) ease;
}
.text-link:hover { color: var(--accent-strong); text-underline-offset: 7px; }

.button:focus-visible, button:focus-visible, a:focus-visible,
input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: 2px solid var(--gold); outline-offset: 3px;
}

/* ---------- Hero — full-bleed cinematic over the estate ---------- */

.sales-hero {
  position: relative;
  display: flex; align-items: flex-end;
  min-height: clamp(560px, 92dvh, 900px);
  margin-top: calc(-1 * var(--header-h)); /* pulls the photo up behind the floating nav */
  color: var(--cream-text);
  overflow: hidden;
}

.sales-hero-media { position: absolute; inset: 0; z-index: 0; }
.sales-hero-media img {
  width: 100%; height: 100%; object-fit: cover;
}

/* Pine scrim: anchors the base for type, melts into the sky, then fades to paper */
.sales-hero-shade {
  position: absolute; inset: 0; z-index: 1;
  background:
    linear-gradient(to top, rgba(20, 41, 30, 0.92) 0%, rgba(20, 41, 30, 0.55) 34%, rgba(20, 41, 30, 0.18) 62%, rgba(20, 41, 30, 0.5) 100%);
}

.sales-hero-copy {
  position: relative; z-index: 2;
  width: var(--shell); margin: 0 auto;
  padding: clamp(140px, 18vh, 200px) 0 clamp(64px, 9vh, 110px);
}
.sales-hero-copy .eyebrow { color: var(--cream-text); text-shadow: 0 1px 10px rgba(20, 41, 30, 0.75); }
.sales-hero-copy .eyebrow::before { background: var(--gold); }
.sales-hero-copy h1 { max-width: 15ch; margin-bottom: 26px; color: var(--cream-text); }
.sales-hero-copy > p:not(.eyebrow) {
  max-width: 54ch; margin: 0;
  color: var(--cream-muted);
  font-size: 1.12rem; line-height: 1.65;
}
.hero-actions { display: flex; gap: 12px; margin-top: 40px; flex-wrap: wrap; }

html.js .sales-hero-copy.reveal { opacity: 1; transform: none; }

@media (prefers-reduced-motion: no-preference) {
  .sales-hero-media img { animation: hero-settle 2.4s var(--ease-out) both; }
  .sales-hero-copy > * { animation: hero-rise 0.9s var(--spring) both; }
  .sales-hero-copy .eyebrow { animation-delay: 0.1s; }
  .sales-hero-copy h1 { animation-delay: 0.2s; }
  .sales-hero-copy > p:not(.eyebrow) { animation-delay: 0.34s; }
  .sales-hero-copy .hero-actions { animation-delay: 0.48s; }
}

@keyframes hero-settle { from { transform: scale(1.09); } to { transform: scale(1); } }
@keyframes hero-rise { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }

/* ---------- Scene slider — quiet editorial interlude ---------- */

.scene-slider { background: var(--page); }
.scene-slider-inner {
  display: grid;
  gap: 22px;
  justify-items: center;
  text-align: center;
  padding: clamp(52px, 6.5vw, 84px) 0;
}
.scene-track { display: block; }
.scene-slide {
  margin: 0;
  font-family: var(--font-display);
  font-size: clamp(1.55rem, 3vw, 2.3rem);
  line-height: 1.3;
  letter-spacing: -0.012em;
  color: var(--ink);
  max-width: 21ch;
}
html.js .scene-track { display: grid; justify-items: center; }
html.js .scene-slide {
  grid-area: 1 / 1;
  opacity: 0;
  transform: translateY(16px);
  filter: blur(4px);
  pointer-events: none;
  transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out), filter 0.8s var(--ease-out);
}
html.js .scene-slide.is-active { opacity: 1; transform: none; filter: none; }
.scene-progress { display: flex; gap: 8px; align-items: center; }
.scene-progress button {
  appearance: none;
  width: 6px; height: 6px;
  padding: 0; border: 0; cursor: pointer;
  border-radius: 999px;
  background: rgba(27, 42, 34, 0.25);
  transition: width 0.4s var(--spring), background-color 0.35s ease;
}
.scene-progress button.is-active { width: 30px; background: var(--gold); }

/* ---------- Quick facts ---------- */

.property-facts {
  width: var(--shell); margin: 0 auto;
  display: grid; grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.fact { padding: clamp(30px, 3.4vw, 46px) clamp(14px, 2.4vw, 38px); }
.fact + .fact { border-left: 1px solid var(--line); }
.fact strong {
  display: block;
  font-family: var(--font-display);
  font-size: clamp(2rem, 2.8vw, 2.7rem);
  font-weight: 380; letter-spacing: -0.015em; line-height: 1;
  margin-bottom: 10px;
  font-variant-numeric: lining-nums;
}
.fact span { color: var(--muted); font-size: 0.85rem; letter-spacing: 0.02em; }

/* ---------- Editorial intro ---------- */

.editorial-intro { padding: clamp(104px, 12vw, 176px) 0; }
.intro-statement h2 { max-width: 21ch; }
.intro-statement h2 em { font-style: normal; color: var(--accent); }
.intro-body { max-width: 720px; margin-top: 44px; }
.intro-body p { max-width: 640px; margin: 0 0 22px; color: var(--muted); font-size: 1.07rem; }
.editorial-intro-centered { text-align: center; }
.editorial-intro-centered .intro-statement h2 { margin-right: auto; margin-left: auto; }
.editorial-intro-centered .intro-statement .eyebrow::before { display: none; }
.editorial-intro-centered .intro-body { margin-right: auto; margin-left: auto; }
.editorial-intro-centered .intro-body p { max-width: none; }

/* ---------- Residence preview — asymmetric split, sticky heading ---------- */

.residence-preview {
  padding-bottom: clamp(104px, 12vw, 168px);
  display: grid;
  grid-template-columns: minmax(260px, 0.62fr) minmax(0, 1.38fr);
  gap: clamp(48px, 7vw, 110px);
  align-items: start;
}
.residence-preview .section-heading { position: sticky; top: 128px; max-width: 420px; margin: 0; }
.residence-preview .section-heading.reveal { transform: none; filter: none; }
.residence-preview .section-heading > p:last-child { margin-top: 24px; }
.residence-preview .property-card-grid { grid-template-columns: 1fr; gap: 0; }

/* ---------- Property cards — editorial rows, double-bezel frames ---------- */

.property-card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: clamp(24px, 2.5vw, 38px);
}
.property-card { min-width: 0; }
.property-card-wide { grid-column: auto; display: block; }

.property-image-frame {
  width: 100%; min-width: 0;
  aspect-ratio: 3 / 2;
  overflow: hidden;
  border-radius: calc(var(--radius-lg) - 6px);
  background: var(--surface-strong);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12);
  transition: transform var(--dur-slow) var(--spring), box-shadow var(--dur-slow) ease;
}
.property-card-image {
  display: block;
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform var(--dur-slow) var(--spring);
}

.residence-preview .property-card,
.residence-preview .property-card:last-child {
  grid-column: auto;
  display: grid;
  grid-template-columns: minmax(210px, 0.8fr) minmax(0, 1.2fr);
  gap: clamp(28px, 3vw, 44px);
  padding: clamp(28px, 3vw, 40px) 0;
  border-top: 1px solid var(--line);
}
.residence-preview .property-card:last-child { border-bottom: 1px solid var(--line); }
.residence-preview .property-card-body,
.residence-preview .property-card:last-child .property-card-body { padding: 0; }
.residence-preview > .image-disclaimer { grid-column: 2; }

.property-card-body { padding: 24px 4px 0; display: grid; align-content: space-between; gap: 20px; }
.property-card-body h3 { margin-bottom: 0; transition: color var(--dur-med) ease; }
.property-card-body > div > p { margin: 0 0 16px; color: var(--muted); }
.property-type {
  margin: 0 0 10px;
  color: var(--gold-ink);
  font-size: 0.7rem; font-weight: 600;
  letter-spacing: 0.22em; text-transform: uppercase;
}

.property-meta { margin: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.property-meta div { padding-top: 14px; border-top: 1px solid var(--line); }
.property-meta dt {
  color: var(--muted); font-size: 0.66rem;
  letter-spacing: 0.16em; text-transform: uppercase;
}
.property-meta dd { margin: 4px 0 0; font-weight: 650; font-variant-numeric: tabular-nums; }

.card-actions { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }

.property-card-perks { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; list-style: none; }
.property-card-perks li {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 6px 14px;
  border-radius: var(--pill);
  background: rgba(27, 42, 34, 0.05);
  color: var(--ink);
  font-size: 0.76rem; font-weight: 550;
}
.property-card-perks li::before { content: ""; width: 5px; height: 5px; border-radius: 50%; background: var(--accent); }
.property-card-perks li:last-child { background: var(--gold-soft); }
.property-card-perks li:last-child::before { background: var(--gold); }

.residence-preview > .image-disclaimer { margin: 20px 0 0; }

@media (hover: hover) and (pointer: fine) {
  .property-card:hover .property-image-frame {
    transform: translateY(-4px);
    box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12), var(--shadow-lift);
  }
  .property-card:hover .property-card-image { transform: scale(1.025); }
  .property-card:hover .property-card-body h3 { color: var(--accent); }
}

/* ---------- Selborne story — the deep-pine moment ---------- */

.selborne-story {
  padding: clamp(112px, 13vw, 184px) 0;
  background:
    radial-gradient(140% 90% at 85% -10%, rgba(177, 140, 77, 0.14), transparent 55%),
    var(--pine);
  color: var(--cream-text);
}
.story-grid { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: clamp(54px, 9vw, 140px); align-items: center; }
.story-copy h2 { max-width: 15ch; color: var(--cream-text); }
.story-copy > p:not(.eyebrow) { max-width: 52ch; color: var(--cream-muted); }
.story-copy .eyebrow { color: var(--gold); }
.story-copy .button { margin-top: 26px; }

.amenity-index { display: grid; }
.amenity-index a {
  position: relative;
  display: grid; grid-template-columns: 1fr auto; gap: 18px; align-items: baseline;
  padding: 26px 40px 26px 0;
  border-bottom: 1px solid rgba(244, 240, 228, 0.16);
  text-decoration: none;
  transition: border-color var(--dur-med) ease;
}
.amenity-index a:first-child { border-top: 1px solid rgba(244, 240, 228, 0.16); }
.amenity-index span {
  font-family: var(--font-display);
  font-size: 1.3rem; font-weight: 420; letter-spacing: -0.01em;
  color: var(--cream-text);
  transition: color var(--dur-med) ease, transform var(--dur-med) var(--spring);
}
.amenity-index small { color: var(--cream-muted); text-align: right; transition: color var(--dur-med) ease; }
.amenity-index a::after {
  content: "";
  position: absolute; right: 0; top: 50%;
  width: 22px; height: 22px;
  transform: translateY(-50%) translateX(-10px);
  opacity: 0;
  background:
    linear-gradient(45deg, transparent 0 42%, currentColor 42% 58%, transparent 58% 100%) center / 60% 60% no-repeat,
    linear-gradient(-45deg, transparent 0 42%, currentColor 42% 58%, transparent 58% 100%) center / 60% 60% no-repeat;
  color: var(--gold);
  transition: opacity var(--dur-med) ease, transform var(--dur-med) var(--spring);
}
@media (hover: hover) and (pointer: fine) {
  .amenity-index a:hover { border-color: rgba(177, 140, 77, 0.55); }
  .amenity-index a:hover span { color: var(--gold); transform: translateX(6px); }
  .amenity-index a:hover small { color: var(--cream-text); }
  .amenity-index a:hover::after { opacity: 1; transform: translateY(-50%) translateX(0); }
}

/* ---------- Gallery — staggered masonry with soft lift ---------- */

.lifestyle-gallery {
  padding: clamp(112px, 13vw, 176px) 0;
  display: grid;
  grid-template-columns: 1.25fr 0.75fr;
  grid-template-rows: 320px 320px 380px;
  gap: clamp(18px, 2.4vw, 28px);
}
.lifestyle-gallery figure {
  min-height: 0; margin: 0;
  display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: 14px;
}
.lifestyle-gallery .gallery-tall { grid-row: span 2; }
.lifestyle-gallery .gallery-wide { grid-column: 1 / -1; }
.lifestyle-gallery img {
  width: 100%; height: 100%; min-height: 0;
  border-radius: var(--radius-lg);
  object-fit: cover;
  box-shadow: var(--shadow-soft);
  transition: transform 900ms var(--spring), box-shadow 900ms ease;
}
.lifestyle-gallery figcaption { color: var(--muted); font-size: 0.82rem; letter-spacing: 0.02em; }
@media (hover: hover) and (pointer: fine) {
  .lifestyle-gallery figure:hover img { transform: translateY(-6px); box-shadow: var(--shadow-lift); }
}

/* ---------- Signature line ---------- */

.signature-line {
  width: var(--shell); margin: 0 auto;
  padding: clamp(72px, 9vw, 120px) 0;
  display: grid; grid-template-columns: 1fr auto; gap: 40px; align-items: end;
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.signature-line h2 { margin: 0; max-width: 18ch; }
.signature-line h2 em { font-style: normal; color: var(--gold-ink); }
.signature-line .eyebrow::before { display: none; }
.signature-line p { margin: 16px 0 0; color: var(--muted); max-width: 480px; }
.signature-line .button { flex-shrink: 0; }

/* ---------- Security (ivory hairline grid) ---------- */

.security-section {
  padding: clamp(96px, 11vw, 160px) 0;
  background: var(--surface);
  border-top: 1px solid var(--line);
}
.security-grid { display: grid; grid-template-columns: 0.92fr 1.08fr; gap: clamp(56px, 8vw, 120px); align-items: center; }
.security-copy h2 { max-width: 16ch; }
.security-copy > p { color: var(--muted); max-width: 50ch; font-size: 1.06rem; }
.security-pillars {
  display: grid; grid-template-columns: 1fr 1fr; gap: 0;
  border-top: 1px solid var(--line);
  list-style: none; padding: 0; margin: 0;
}
.security-pillars li {
  padding: 34px 0;
  border-bottom: 1px solid var(--line);
}
.security-pillars li:nth-child(odd) { padding-right: 32px; border-right: 1px solid var(--line); }
.security-pillars li:nth-child(even) { padding-left: 32px; }
.security-pillars h3 { font-size: 1.25rem; letter-spacing: -0.01em; margin-bottom: 8px; }
.security-pillars p { margin: 0; color: var(--muted); font-size: 0.94rem; }
.security-pillars .pillar-icon {
  display: inline-flex; width: 44px; height: 44px;
  align-items: center; justify-content: center;
  border-radius: 50%;
  background: var(--page);
  box-shadow: inset 0 0 0 1px var(--line), inset 0 1px 1px rgba(255, 255, 255, 0.7);
  color: var(--accent);
  margin-bottom: 20px;
  transition: box-shadow var(--dur-med) ease, transform var(--dur-med) var(--spring);
}
.security-pillars .pillar-icon svg { width: 19px; height: 19px; }
@media (hover: hover) and (pointer: fine) {
  .security-pillars li:hover .pillar-icon { box-shadow: inset 0 0 0 1px var(--gold), var(--shadow-soft); transform: translateY(-3px); }
  .security-pillars li:hover h3 { color: var(--accent); }
}

/* ---------- Golf membership (the gold chapter) ---------- */

.golf-membership {
  padding: clamp(96px, 11vw, 160px) 0;
  background: var(--surface);
  border-top: 1px solid var(--line);
}
.golf-membership-grid { display: grid; grid-template-columns: 1fr 1.1fr; gap: clamp(48px, 7vw, 108px); align-items: center; }
.golf-membership-copy h2 { max-width: 16ch; }
.golf-membership-copy h2 em { font-style: normal; color: var(--gold-ink); }
.golf-membership-copy > p { max-width: 50ch; color: var(--muted); font-size: 1.06rem; }
.golf-membership-list { display: grid; gap: 0; margin: 0; padding: 0; }
.golf-membership-list li {
  list-style: none;
  padding: 28px 0 28px 20px;
  border-top: 1px solid var(--line);
  display: grid; grid-template-columns: 60px 1fr; gap: 18px; align-items: baseline;
  transition: background-color var(--dur-med) ease, padding-left var(--dur-med) var(--spring);
}
.golf-membership-list li:last-child { border-bottom: 1px solid var(--line); }
.golf-membership-list .num {
  font-family: var(--font-display);
  font-size: 1.8rem; font-weight: 340;
  color: var(--gold); letter-spacing: -0.01em;
  font-variant-numeric: lining-nums;
}
.golf-membership-list strong { display: block; margin-bottom: 4px; font-size: 1.06rem; }
.golf-membership-list span { color: var(--muted); font-size: 0.93rem; }
@media (hover: hover) and (pointer: fine) {
  .golf-membership-list li:hover { background: var(--gold-soft); padding-left: 36px; }
}

/* ---------- Closing CTA ---------- */

.closing-cta {
  margin: clamp(56px, 8vw, 96px) auto clamp(72px, 9vw, 120px);
  padding: clamp(56px, 8vw, 104px);
  width: var(--shell);
  border-radius: var(--radius-lg);
  background:
    radial-gradient(130% 130% at 100% 0%, rgba(177, 140, 77, 0.18), transparent 50%),
    var(--pine);
  color: var(--cream-text);
  box-shadow: var(--shadow-lift);
  display: flex; justify-content: space-between; align-items: end; gap: 40px;
}
.closing-cta h2 { max-width: 16ch; margin-bottom: 18px; color: var(--cream-text); }
.closing-cta .eyebrow.light { color: var(--gold); }
.closing-cta p:not(.eyebrow) { margin: 0; color: var(--cream-muted); }
.closing-actions { display: flex; gap: 12px; flex-wrap: wrap; }
.closing-cta .button-outline-light { border-color: rgba(244, 240, 228, 0.4); color: var(--cream-text); }
.closing-cta .button-outline-light:hover { border-color: rgba(244, 240, 228, 0.9); background: rgba(244, 240, 228, 0.08); }

/* ---------- Page heroes (type-led on ivory) ---------- */

.page-hero { width: var(--shell); margin: 0 auto; padding: clamp(96px, 11vw, 152px) 0 48px; }
.breadcrumbs {
  display: flex; gap: 9px; margin-bottom: 36px;
  color: var(--muted); font-size: 0.8rem; letter-spacing: 0.04em;
}
.breadcrumbs a { text-underline-offset: 4px; transition: color var(--dur-fast) ease; }
.breadcrumbs a:hover { color: var(--gold-ink); }
.page-hero h1 { max-width: 18ch; margin-bottom: 28px; }
.page-hero h1 em { font-style: normal; color: var(--gold-ink); }
.page-hero > p { max-width: 62ch; color: var(--muted); font-size: 1.1rem; }

/* Mini-hero: type block, then a framed photo plate below */
.mini-hero {
  min-height: 0;
  margin-top: 0;
  padding: clamp(56px, 7vw, 92px) 0 0;
  overflow: hidden;
  color: var(--ink);
  display: flex; flex-direction: column;
}
.mini-hero .breadcrumbs { margin-bottom: 26px; color: var(--muted); }
.mini-hero .eyebrow, .mini-hero .property-type { color: var(--gold-ink); }
.mini-hero h1 { max-width: 16ch; margin-bottom: 18px; font-size: clamp(2.9rem, 5.4vw, 5rem); }
.mini-hero h1 em {
  font-style: normal; color: var(--gold-ink);
}
.mini-hero > p, .detail-mini-content > p:not(.property-type) {
  max-width: 62ch; margin: 0;
  color: var(--muted);
  font-size: 1.06rem;
}
.mini-hero::after {
  content: "";
  display: block;
  height: min(52vw, 480px);
  margin-top: clamp(44px, 5vw, 68px);
  border-radius: var(--radius-lg);
  background-image: var(--hero-image);
  background-position: center;
  background-size: cover;
  box-shadow: var(--shadow-soft);
}

.detail-mini-hero { min-height: 0; }
.detail-mini-hero::after { display: none; }
.detail-mini-content { width: min(820px, 100%); }
.detail-mini-content .draft-badge { border-color: var(--line); color: var(--muted); }
.detail-mini-content .property-meta { margin: 28px 0 32px; grid-template-columns: repeat(4, 1fr); }
.detail-mini-content .button-primary { background: var(--pine); color: var(--cream-text); }

/* ---------- Catalogue ---------- */

.catalogue { padding: 84px 0 clamp(112px, 12vw, 168px); }
.catalogue-toolbar { margin-bottom: 40px; display: flex; justify-content: space-between; gap: 24px; align-items: end; }
.catalogue-toolbar p { margin: 0; color: var(--muted); }
.catalogue-toolbar .eyebrow::before { display: none; }
.catalogue .property-card-grid { margin-top: 30px; grid-template-columns: 1fr; gap: 0; }
.catalogue .property-card,
.catalogue .property-card:last-child {
  grid-column: auto;
  display: grid;
  grid-template-columns: minmax(230px, 0.55fr) minmax(0, 1.45fr);
  gap: clamp(34px, 5vw, 72px);
  padding: clamp(36px, 4vw, 52px) 0;
  border-top: 1px solid var(--line);
}
.catalogue .property-card:last-child { border-bottom: 1px solid var(--line); }
.catalogue .property-card-body,
.catalogue .property-card:last-child .property-card-body {
  padding: 0;
  display: grid; grid-template-columns: 1.15fr 0.85fr;
  column-gap: clamp(36px, 7vw, 100px);
}
.catalogue .property-card-body > div:first-child,
.catalogue .property-card-body > p { grid-column: 1; }
.catalogue .property-card-body .property-meta { grid-column: 2; grid-row: 1; }
.catalogue .property-card-body .card-actions { grid-column: 2; grid-row: 2; align-self: end; }

/* ---------- Residence gallery ---------- */

.residence-gallery { padding: 96px 0 32px; }
.gallery-viewer { display: grid; grid-template-columns: 1.4fr 1fr; gap: 28px; }
.gallery-main {
  position: relative;
  min-height: 460px;
  aspect-ratio: 3 / 2;
  overflow: hidden;
  border-radius: var(--radius-lg);
  background: var(--surface-strong);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12);
}
.gallery-main > img { width: 100%; height: 100%; object-fit: cover; }
.gallery-caption {
  position: absolute; left: 18px; bottom: 18px;
  display: flex; gap: 10px; align-items: baseline;
  max-width: calc(100% - 36px);
  padding: 10px 14px;
  border-radius: var(--pill);
  background: rgba(20, 41, 30, 0.86);
  color: var(--cream-text);
  box-shadow: var(--shadow-soft);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}
.gallery-caption span { font-weight: 650; }
.gallery-caption small { color: var(--cream-muted); white-space: nowrap; }
.gallery-thumbnails { display: grid; gap: 14px; align-content: start; }
.gallery-thumb {
  width: 100%; padding: 8px;
  border: 0;
  border-radius: var(--radius);
  background: rgba(255, 255, 255, 0.45);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12);
  display: grid; grid-template-columns: minmax(112px, 0.82fr) minmax(0, 1fr);
  gap: 16px; align-items: center;
  text-align: left; cursor: pointer; overflow: hidden;
  transition: box-shadow var(--dur-fast) ease, background-color var(--dur-fast) ease, transform var(--dur-fast) var(--spring);
}
.gallery-thumb img { width: 100%; height: auto; aspect-ratio: 3 / 2; object-fit: cover; border-radius: calc(var(--radius) - 6px); }
.gallery-thumb-copy { min-width: 0; padding-right: 8px; }
.gallery-thumb:hover { transform: translateY(-2px); box-shadow: inset 0 0 0 1px rgba(177, 140, 77, 0.55), var(--shadow-soft); }
.gallery-thumb.is-active { background: var(--pine); color: var(--cream-text); box-shadow: none; }
.gallery-thumb.is-active small { color: var(--cream-muted); }
.gallery-thumb strong { display: block; font-size: 0.94rem; font-weight: 650; }
.gallery-thumb small { display: block; color: var(--muted); font-size: 0.72rem; line-height: 1.35; }

/* ---------- Detail summary + feature checks ---------- */

.detail-summary { padding: 88px 0; display: grid; grid-template-columns: 1fr 1fr; gap: clamp(48px, 7vw, 108px); align-items: start; }
.detail-summary-copy h2 { max-width: 15ch; }
.detail-summary-copy > p { color: var(--muted); max-width: 52ch; }
.feature-checks { display: grid; grid-template-columns: 1fr; gap: 0; }
.feature-checks > div {
  display: grid;
  grid-template-columns: 30px 1fr;
  grid-template-rows: auto auto;
  column-gap: 16px;
  row-gap: 2px;
  padding: 22px 0; border-top: 1px solid var(--line); align-items: start;
}
.feature-checks > div:last-child { border-bottom: 1px solid var(--line); }
.feature-checks > div::before {
  content: "✓";
  grid-column: 1; grid-row: 1 / -1; align-self: start;
  display: inline-flex; width: 23px; height: 23px;
  border-radius: 50%;
  background: var(--pine); color: var(--cream-text);
  align-items: center; justify-content: center;
  font-size: 0.7rem; font-weight: 700;
  margin-top: 3px;
}
.feature-checks > div > strong { grid-column: 2; grid-row: 1; }
.feature-checks > div > span { grid-column: 2; grid-row: 2; }
.feature-checks strong { display: block; margin-bottom: 4px; }
.feature-checks span { color: var(--muted); font-size: 0.92rem; }
.feature-checks .feature-flag { padding-left: 0; border-top: none; }
.feature-checks .feature-flag::before { display: none; }
.feature-checks .feature-flag-inner {
  grid-column: 2; grid-row: 1 / -1;
  display: grid; grid-template-columns: 30px 1fr; gap: 16px;
  padding: 22px 0; border-top: 1px solid var(--line); align-items: start;
  width: 100%;
}
.feature-checks .feature-flag-inner::before {
  content: "★";
  display: inline-flex; width: 23px; height: 23px;
  border-radius: 50%;
  background: var(--gold); color: #fff;
  align-items: center; justify-content: center;
  font-size: 0.7rem; font-weight: 700;
  margin-top: 3px;
}
.feature-checks .feature-flag-inner > div > strong { color: var(--gold-ink); }

/* ---------- Floor plans ---------- */

.floorplan-section { padding: 80px 0 120px; }
.floorplan-panel {
  display: grid; grid-template-columns: 0.85fr 1.15fr;
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12), var(--shadow-soft);
}
.floorplan-copy { padding: clamp(30px, 4vw, 56px); background: var(--pine); color: var(--cream-text); }
.floorplan-copy h3 { color: var(--cream-text); margin-bottom: 14px; }
.floorplan-copy p { color: var(--cream-muted); margin: 0 0 28px; }
.floorplan-copy .text-link { color: var(--gold); }
.floorplan-frame {
  margin: 0; padding: clamp(28px, 4vw, 52px);
  background: var(--surface-strong);
  display: grid; align-items: center;
}
.floorplan-frame img { width: 100%; height: auto; border-radius: var(--radius); }

/* ---------- Estate advantage ---------- */

.estate-advantage { padding: clamp(88px, 10vw, 144px) 0; background: var(--surface); border-top: 1px solid var(--line); }
.estate-advantage-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(48px, 7vw, 108px); align-items: start; }
.estate-advantage h2 { max-width: 14ch; }
.estate-advantage p { color: var(--muted); }
.estate-advantage .text-link { margin-top: 20px; display: inline-block; }
.mini-amenity { padding: 26px 0; border-top: 1px solid var(--line); transition: padding-left var(--dur-med) var(--spring); }
.mini-amenity:last-child { border-bottom: 1px solid var(--line); }
.mini-amenity strong { display: block; margin-bottom: 6px; }
.mini-amenity span { color: var(--muted); font-size: 0.92rem; }
@media (hover: hover) and (pointer: fine) {
  .mini-amenity:hover { padding-left: 16px; }
}

/* ---------- About page ---------- */

.about-lead { padding: 112px 0 72px; }
.about-lead .large-copy {
  font-family: var(--font-display);
  font-size: clamp(1.8rem, 3vw, 2.6rem);
  font-weight: 360; line-height: 1.28; letter-spacing: -0.014em;
  max-width: 26ch; margin: 0 0 44px;
}
.about-lead .body-copy p { color: var(--muted); max-width: 60ch; margin: 0 0 18px; }
.about-lead .body-copy .about-personal-link { margin-top: 28px; }

.capability-grid { padding: 36px 0 120px; display: grid; grid-template-columns: 2fr 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 18px; }
.capability {
  padding: 36px;
  border-radius: var(--radius-lg);
  background: rgba(255, 255, 255, 0.45);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.1);
  display: grid; align-content: end;
  min-height: 230px;
  transition: transform var(--dur-med) var(--spring), box-shadow var(--dur-med) ease;
}
.capability:first-child {
  grid-row: 1 / span 2;
  background: var(--pine);
  color: var(--cream-text);
  box-shadow: inset 0 0 0 1px rgba(244, 240, 228, 0.08), var(--shadow-lift);
}
.capability:first-child h2, .capability:first-child h3 { color: var(--cream-text); }
.capability:first-child p { color: var(--cream-muted); }
.capability .eyebrow { color: var(--accent); }
.capability:first-child .eyebrow { color: var(--gold); }
.capability h3 { font-size: 1.2rem; margin: 0 0 8px; }
.capability p { margin: 0; color: var(--muted); font-size: 0.94rem; }
@media (hover: hover) and (pointer: fine) {
  .capability:not(:first-child):hover {
    transform: translateY(-4px);
    box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.1), var(--shadow-lift);
  }
}

.values-section { padding: 72px 0 120px; }
.values-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; }
.values-grid .value { padding: 36px 36px 36px 0; border-top: 1px solid var(--line); }
.values-grid .value:last-child { border-bottom: 1px solid var(--line); }
.values-grid .value + .value { border-left: 1px solid var(--line); padding-left: 36px; }
.values-grid h3 { font-size: 1.7rem; margin: 0 0 10px; }
.values-grid p { margin: 0; color: var(--muted); }

.vision-mission { padding: 36px 0 120px; display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.vision-mission article {
  padding: 38px;
  border-radius: var(--radius-lg);
  background: var(--surface);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.1);
}
.vision-mission h3 { font-size: 1.5rem; line-height: 1.28; margin: 8px 0 0; }

/* ---------- Contact ---------- */

.contact-layout { padding: 96px 0 140px; display: grid; grid-template-columns: 1fr 1.1fr; gap: clamp(48px, 7vw, 108px); align-items: start; }
.contact-copy h2 { margin-bottom: 18px; }
.contact-copy > p { color: var(--muted); max-width: 46ch; }
.contact-details { display: grid; gap: 0; margin-top: 36px; }
.contact-details > * { padding: 18px 0; border-top: 1px solid var(--line); }
.contact-details > *:last-child { border-bottom: 1px solid var(--line); }
.contact-details a { text-decoration: none; font-weight: 600; transition: color var(--dur-fast) ease; }
.contact-details a:hover { color: var(--gold-ink); }

.enquiry-form {
  display: grid; gap: 24px;
  padding: clamp(32px, 4vw, 52px);
  border-radius: var(--radius-lg);
  background: rgba(255, 255, 255, 0.5);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12), var(--shadow-soft);
}
.form-row { display: grid; gap: 7px; }
.form-row label { font-size: 0.8rem; font-weight: 600; color: var(--muted); letter-spacing: 0.04em; }
.form-row input, .form-row select, .form-row textarea {
  padding: 15px 16px;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--page);
  color: var(--ink);
  transition: border-color var(--dur-fast) ease, box-shadow var(--dur-fast) ease;
}
.form-row input::placeholder, .form-row select::placeholder, .form-row textarea::placeholder { color: var(--muted); opacity: 1; }
.form-row input:focus, .form-row select:focus, .form-row textarea:focus {
  border-color: var(--gold);
  box-shadow: 0 0 0 3px rgba(177, 140, 77, 0.2);
  outline: none;
}
.form-split { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.consent { display: grid; grid-template-columns: 24px 1fr; gap: 10px; font-size: 0.88rem; color: var(--muted); }
.consent input { margin-top: 2px; accent-color: var(--gold); }
.field-error { color: var(--error); font-size: 0.82rem; min-height: 1em; }
.form-row.has-error input, .form-row.has-error select, .form-row.has-error textarea { border-color: var(--error); box-shadow: 0 0 0 3px rgba(161, 48, 48, 0.16); }
.submit-button { justify-self: start; }
.form-status { margin: 0; font-size: 0.86rem; color: var(--muted); }
.form-status.is-success { color: var(--accent); }
.form-status.is-error { color: var(--error); }
.form-honeypot { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; }

.whatsapp-float {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: var(--z-whatsapp);
  display: inline-flex;
  align-items: center;
  gap: 9px;
  min-height: 52px;
  padding: 0 18px 0 14px;
  border: 1px solid rgba(244, 240, 228, 0.26);
  border-radius: var(--pill);
  background: var(--pine);
  box-shadow: var(--shadow-lift);
  color: var(--on-accent);
  font-family: var(--font-sans);
  font-size: 0.82rem;
  font-weight: 650;
  letter-spacing: 0.02em;
  text-decoration: none;
  transition: transform var(--dur-fast) var(--spring), background var(--dur-fast) ease, box-shadow var(--dur-fast) ease;
}
.whatsapp-float svg { width: 25px; height: 25px; fill: currentColor; flex: 0 0 auto; }
.whatsapp-float:hover { background: var(--accent); color: var(--on-accent); transform: translateY(-2px); box-shadow: 0 4px 8px rgba(20, 41, 30, 0.13), 0 20px 38px -10px rgba(20, 41, 30, 0.36); }
.whatsapp-float:focus-visible { outline: 3px solid var(--gold); outline-offset: 4px; }

/* ---------- Privacy ---------- */

.privacy-content { width: var(--shell); margin: 0 auto; padding: 96px 0 140px; max-width: 760px; }
.privacy-content h2 { font-size: 1.5rem; margin: 40px 0 10px; }
.privacy-content p { color: var(--muted); margin: 0 0 14px; }

/* ---------- Shared bits ---------- */

.draft-badge {
  display: inline-block; padding: 6px 14px;
  border-radius: var(--pill);
  background: rgba(27, 42, 34, 0.05);
  font-size: 0.66rem; font-weight: 600;
  letter-spacing: 0.2em; text-transform: uppercase;
  margin-bottom: 18px;
  color: var(--muted);
}

.access-note {
  padding: 26px 30px;
  border-radius: var(--radius);
  background: var(--gold-soft);
  box-shadow: inset 0 0 0 1px rgba(177, 140, 77, 0.35);
  color: var(--ink);
  font-size: 0.95rem;
}
.access-note strong { color: var(--gold-ink); }
.access-note .text-link { color: var(--gold-ink); }

/* ---------- Selborne amenity features ---------- */

.amenity-feature { padding: clamp(80px, 9vw, 128px) 0; display: grid; grid-template-columns: 1.05fr 0.95fr; gap: clamp(40px, 6vw, 96px); align-items: center; }
.amenity-feature:nth-of-type(odd) { direction: rtl; }
.amenity-feature:nth-of-type(odd) > * { direction: ltr; }
.amenity-image { margin: 0; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-soft); }
.amenity-image img { width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4/3; transition: transform 900ms var(--spring); }
.amenity-copy h2 { max-width: 14ch; }
.amenity-copy > p { color: var(--muted); max-width: 50ch; }
.amenity-facts { display: grid; grid-template-columns: 1fr 1fr; gap: 0; margin-top: 28px; }
.amenity-facts span {
  display: block; padding: 14px 0;
  border-top: 1px solid var(--line);
  font-weight: 600; font-size: 0.9rem;
}
.amenity-facts span:nth-child(odd) { padding-right: 18px; border-right: 1px solid var(--line); }
.amenity-facts span:nth-child(even) { padding-left: 18px; }
@media (hover: hover) and (pointer: fine) {
  .amenity-image:hover img { transform: scale(1.04); }
}

/* ---------- Estate line / sticky enquire ---------- */

.estate-line { width: var(--shell); margin: 0 auto; padding: 0 0 clamp(48px, 6vw, 84px); }
.estate-line-card {
  padding: 34px 38px;
  border-radius: var(--radius-lg);
  background: var(--pine);
  color: var(--cream-text);
  display: grid; grid-template-columns: 1fr auto; gap: 18px; align-items: center;
  box-shadow: var(--shadow-lift);
}
.estate-line-card p { margin: 0; color: var(--cream-muted); }
.estate-line-card strong { color: var(--cream-text); }

.sticky-enquire {
  position: sticky; bottom: 16px;
  z-index: 20;
  margin: 24px auto;
  width: var(--shell);
  padding: 14px 14px 14px 24px;
  border-radius: var(--pill);
  background: rgba(246, 243, 236, 0.85);
  backdrop-filter: blur(16px) saturate(1.4);
  -webkit-backdrop-filter: blur(16px) saturate(1.4);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.12), var(--shadow-lift);
  color: var(--ink);
  display: flex; align-items: center; justify-content: space-between; gap: 18px;
}
.sticky-enquire p { margin: 0; font-weight: 600; }
.sticky-enquire .button { min-height: 44px; }

/* ---------- Footer — pine ground ---------- */

.site-footer {
  background: var(--pine);
  color: var(--cream-muted);
  position: relative;
}
.site-footer::before {
  content: "";
  display: block;
  height: 1px;
  background: linear-gradient(to right, transparent, rgba(177, 140, 77, 0.5), transparent);
}
.site-footer .page-shell {
  display: grid; grid-template-columns: 1.4fr 1fr 1fr;
  gap: clamp(40px, 5vw, 72px); align-items: start;
  padding: clamp(56px, 6vw, 88px) 0 40px;
}
.footer-brand img { width: 54px; height: 54px; object-fit: cover; border-radius: 15px; }
.footer-brand p { max-width: 300px; color: var(--cream-muted); margin: 18px 0 0; }
.footer-links { display: grid; gap: 13px; }
.footer-links a { color: var(--cream-muted); text-decoration: none; transition: color var(--dur-fast) ease; }
.footer-links a:hover { color: var(--gold); }
.footer-contact { display: grid; gap: 11px; color: var(--cream-muted); }
.footer-contact a { color: var(--cream-text); text-decoration: none; transition: color var(--dur-fast) ease; }
.footer-contact a:hover { color: var(--gold); }
.footer-legal {
  grid-column: 1 / -1;
  padding-top: 30px;
  border-top: 1px solid rgba(244, 240, 228, 0.14);
  color: var(--cream-muted);
  font-size: 0.82rem;
}
.footer-legal p { margin: 0 0 8px; max-width: 880px; }
.footer-legal a { color: var(--cream-muted); }
.footer-legal a:hover { color: var(--gold); }

/* ---------- Reveal system (js-gated; heavy fade-up with soft blur) ---------- */

html.js .reveal {
  opacity: 0;
  transform: translateY(26px);
  filter: blur(6px);
  transition: opacity var(--dur-slow) var(--ease-out),
              transform var(--dur-slow) var(--spring),
              filter var(--dur-slow) var(--ease-out);
  will-change: opacity, transform;
}
html.js .reveal.is-visible { opacity: 1; transform: none; filter: none; }

html.js .reveal[data-delay="1"] { transition-delay: 100ms; }
html.js .reveal[data-delay="2"] { transition-delay: 200ms; }
html.js .reveal[data-delay="3"] { transition-delay: 300ms; }

html.js .amenity-index .reveal { transform: translateX(26px); }
html.js .amenity-index .reveal.is-visible { transform: none; }

/* Reduced motion: keep content, drop movement */
@media (prefers-reduced-motion: reduce) {
  html.js .reveal { opacity: 1; transform: none; filter: none; transition: none; }
  html.js .scene-slide { transition: none; filter: none; }
  .sales-hero-copy > *, .sales-hero-media img { animation: none; }
  .amenity-index a::after,
  .lifestyle-gallery img, .amenity-image img,
  .gallery-thumb, .why-card, .capability,
  .security-pillars .pillar-icon, .golf-membership-list li, .mini-amenity,
  .property-image-frame, .property-card-image,
  .site-nav a:not(.nav-cta)::after { transition: none; }
  html { scroll-behavior: auto; }
}

/* ---------- Developer note (homepage teaser for the Mark Reeves letter) ---------- */

.developer-note {
  padding: clamp(104px, 12vw, 172px) 0;
  display: grid;
  grid-template-columns: minmax(0, 820px);
  gap: clamp(48px, 7vw, 104px);
  align-items: center;
}
.developer-note-copy h2 { max-width: 17ch; }
.developer-note-copy h2 em { font-style: normal; color: var(--gold-ink); }
.developer-note-copy > p:not(.eyebrow) { color: var(--muted); max-width: 54ch; font-size: 1.06rem; }

/* Signature strip: name, role, then the years-of-experience stat on a hairline */
.developer-note-signoff {
  margin-top: 38px; padding-top: 26px;
  border-top: 1px solid var(--line);
  display: flex; flex-wrap: wrap; gap: 28px 48px; align-items: baseline;
}
.developer-note-name {
  margin: 0;
  font-family: var(--font-display);
  font-size: 1.5rem; font-weight: 380; letter-spacing: -0.01em;
}
.developer-note-name span {
  display: block; margin-top: 4px;
  font-family: var(--font-sans);
  font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--muted);
}
.developer-note-stat { margin: 0; display: flex; gap: 12px; align-items: baseline; }
.developer-note-stat strong {
  font-family: var(--font-display);
  font-size: 2.6rem; font-weight: 330; line-height: 1;
  letter-spacing: -0.02em; color: var(--gold);
  font-variant-numeric: lining-nums;
}
.developer-note-stat span { max-width: 15ch; color: var(--muted); font-size: 0.88rem; line-height: 1.35; }
.developer-note-links { margin-top: 30px; display: flex; flex-wrap: wrap; gap: 12px 30px; }
.developer-note-links .text-link { display: inline-block; }

/* ---------- Developer letter page ---------- */

.letter-hero {
  padding: clamp(56px, 7vw, 92px) 0 clamp(64px, 8vw, 104px);
  display: grid;
  grid-template-columns: minmax(0, 820px);
  gap: clamp(28px, 4vw, 48px) clamp(44px, 6vw, 96px);
  align-items: end;
}
.letter-hero-crumbs { grid-column: 1 / -1; margin-bottom: 0; }
.letter-hero h1 { max-width: 12ch; margin-bottom: 24px; font-size: clamp(3rem, 6vw, 5.4rem); }
.letter-hero h1 em { font-style: normal; color: var(--gold-ink); }
.letter-standfirst {
  margin: 0;
  font-family: var(--font-display);
  font-size: clamp(1.35rem, 2.2vw, 1.85rem);
  font-weight: 340; line-height: 1.32; letter-spacing: -0.012em;
  color: var(--muted);
  max-width: 24ch;
}
.letter-byline {
  margin: 34px 0 0; padding-top: 22px;
  border-top: 1px solid var(--line);
  display: inline-flex; flex-direction: column; gap: 6px;
}
.letter-byline strong { font-size: 1.02rem; letter-spacing: -0.005em; }
.letter-byline span {
  font-size: 0.7rem; font-weight: 600;
  letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--muted);
}

/* The letter itself sits in one measured column so it reads like a page, not a layout */
.letter-body {
  padding: clamp(24px, 4vw, 48px) 0 clamp(72px, 9vw, 112px);
  max-width: 720px;
}
.letter-open {
  margin: 0 0 44px;
  font-family: var(--font-display);
  font-size: clamp(1.7rem, 2.9vw, 2.5rem);
  font-weight: 350; line-height: 1.24; letter-spacing: -0.016em;
  color: var(--ink);
}
.letter-lede {
  margin: 48px 0 32px;
  font-family: var(--font-display);
  font-size: clamp(1.4rem, 2.2vw, 1.85rem);
  font-weight: 360; line-height: 1.28; letter-spacing: -0.012em;
  color: var(--accent);
}
.letter-prose p {
  margin: 0 0 22px;
  color: var(--muted);
  font-size: 1.08rem; line-height: 1.72;
}
.letter-prose p:last-child { margin-bottom: 0; }
.letter-pull {
  margin: 52px 0;
  padding: 4px 0 4px 32px;
  border-left: 2px solid var(--gold);
}
.letter-pull p {
  margin: 0;
  font-family: var(--font-display);
  font-size: clamp(1.5rem, 2.4vw, 2rem);
  font-weight: 340; line-height: 1.26; letter-spacing: -0.014em;
  color: var(--ink);
}

/* Six reasons, read one line at a time — the cadence is the point */
.letter-reasons {
  list-style: none; margin: 56px 0; padding: 0;
  border-top: 1px solid var(--line);
}
.letter-reasons li {
  display: grid; grid-template-columns: 68px 1fr; gap: 20px; align-items: baseline;
  padding: 22px 0 22px 4px;
  border-bottom: 1px solid var(--line);
  transition: padding-left var(--dur-med) var(--spring), background-color var(--dur-med) ease;
}
.letter-reason-num {
  font-family: var(--font-display);
  font-size: 1.15rem; font-weight: 340;
  color: var(--gold); letter-spacing: 0.02em;
  font-variant-numeric: lining-nums;
}
.letter-reason-text {
  font-family: var(--font-display);
  font-size: clamp(1.35rem, 2.1vw, 1.75rem);
  font-weight: 350; letter-spacing: -0.012em;
  color: var(--ink);
}
@media (hover: hover) and (pointer: fine) {
  .letter-reasons li:hover { padding-left: 20px; background: var(--gold-soft); }
}

.letter-signoff {
  margin-top: 56px; padding-top: 34px;
  border-top: 1px solid var(--line);
}
.letter-signature {
  margin: 0;
  font-family: var(--font-display);
  font-size: clamp(1.9rem, 3vw, 2.4rem);
  font-weight: 330; letter-spacing: -0.018em; line-height: 1.1;
}
.letter-signature-role {
  margin: 10px 0 0;
  font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--muted);
}
.letter-signoff-actions { margin-top: 32px; display: flex; flex-wrap: wrap; gap: 14px 26px; align-items: center; }

/* ---------- Inline note band (single-line reminders that used to be full sections) ---------- */

.inline-note {
  width: var(--shell); margin: 0 auto clamp(72px, 9vw, 112px);
  padding: 30px clamp(28px, 4vw, 44px);
  border-radius: var(--radius);
  background: var(--surface);
  box-shadow: inset 0 0 0 1px rgba(27, 42, 34, 0.1);
  display: flex; flex-wrap: wrap; gap: 16px 32px;
  align-items: center; justify-content: space-between;
}
.inline-note p { margin: 0; flex: 1 1 460px; max-width: 82ch; color: var(--ink); font-size: 1rem; line-height: 1.6; }
.inline-note p strong { color: var(--gold-ink); }

/* ---------- Responsive ---------- */

@media (max-width: 1080px) {
  .property-facts { grid-template-columns: repeat(2, 1fr); }
  .fact:nth-child(3) { border-left: none; border-top: 1px solid var(--line); }
  .fact:nth-child(4) { border-top: 1px solid var(--line); }
  .residence-preview { grid-template-columns: 1fr; }
  .residence-preview .section-heading { position: static; }
  .residence-preview .property-card,
  .residence-preview .property-card:last-child { grid-template-columns: 1fr; }
  .residence-preview .property-card-body,
  .residence-preview .property-card:last-child .property-card-body { padding: 0; }
  .residence-preview > .image-disclaimer { grid-column: 1; }
  .security-grid { grid-template-columns: 1fr; }
  .security-pillars { grid-template-columns: 1fr; }
  .security-pillars li:nth-child(odd) { border-right: none; padding-right: 0; }
  .security-pillars li:nth-child(even) { padding-left: 0; }
  .golf-membership-grid { grid-template-columns: 1fr; }
  .developer-note, .letter-hero { grid-template-columns: 1fr; }
  .letter-hero { align-items: start; }
  .signature-line { grid-template-columns: 1fr; }
  .contact-layout, .detail-summary, .estate-advantage-grid, .floorplan-panel, .amenity-feature, .story-grid { grid-template-columns: 1fr; }
  .amenity-feature:nth-of-type(odd) { direction: ltr; }
  .gallery-viewer { grid-template-columns: 1fr; }
  .gallery-thumbnails { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gallery-thumb { grid-template-columns: 1fr; gap: 8px; align-content: start; }
  .gallery-thumb-copy { padding: 0 4px 4px; }
  .capability-grid, .values-grid, .vision-mission, .form-split, .site-footer .page-shell { grid-template-columns: 1fr; }
  .site-footer .page-shell > * { padding: 0; }
  .footer-legal { padding-top: 24px; }
  .closing-cta { flex-direction: column; align-items: flex-start; }
}

@media (max-width: 720px) {
  :root { --shell: calc(100% - 32px); }
  .whatsapp-float { right: 16px; bottom: 16px; min-height: 50px; padding: 0 15px 0 12px; }
  .menu-toggle {
    display: inline-flex; flex-direction: column; align-items: center; justify-content: center;
    width: 42px; height: 42px;
    border: 0;
    border-radius: 50%;
    background: rgba(27, 42, 34, 0.07);
    padding: 0;
  }
  .menu-toggle span {
    display: block; width: 18px; height: 1.5px;
    background: var(--ink);
    margin: 3px auto;
    transition: transform 220ms var(--spring), opacity 180ms ease;
  }
  .menu-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(4.5px) rotate(45deg); }
  .menu-toggle[aria-expanded="true"] span:nth-child(2) { transform: translateY(-4.5px) rotate(-45deg); }
  .menu-toggle[aria-expanded="true"] span:nth-child(3) { opacity: 0; }
  .site-nav {
    position: absolute; top: 88px; right: 20px; left: 20px;
    flex-direction: column; align-items: stretch; gap: 0;
    padding: 16px 20px;
    border-radius: var(--radius);
    background: rgba(246, 243, 236, 0.92);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    box-shadow: var(--shadow-lift);
    display: none;
    opacity: 0; transform: translateY(-8px);
    transition: opacity var(--dur-med) var(--spring), transform var(--dur-med) var(--spring);
  }
  .site-nav.is-open { display: flex; opacity: 1; transform: none; }
  .site-nav a { padding: 15px 4px; border-bottom: 1px solid var(--line); }
  .site-nav a:last-child { border-bottom: none; }
  .nav-cta { justify-content: center; margin-top: 10px; }
  /* Amenity rows put the caption beside the title on desktop. Too narrow for
     that here: stack them, and reclaim the gutter reserved for the hover arrow
     (which never shows on touch). */
  .amenity-index a { grid-template-columns: 1fr; gap: 6px; padding-right: 0; }
  .amenity-index small { text-align: left; }
  /* The catalogue card keeps a two-column body on desktop; below the mobile
     breakpoint there is no room for it, so stack copy over meta and actions. */
  .catalogue .property-card, .catalogue .property-card:last-child { grid-template-columns: 1fr; gap: 24px; }
  .catalogue .property-card-body, .catalogue .property-card:last-child .property-card-body { grid-template-columns: 1fr; }
  .catalogue .property-card-body .property-meta { grid-column: 1; grid-row: auto; }
  .catalogue .property-card-body .card-actions { grid-column: 1; grid-row: auto; }
  .property-facts { grid-template-columns: 1fr; }
  .fact + .fact, .fact:nth-child(3), .fact:nth-child(4) { border-left: none; border-top: 1px solid var(--line); }
  .property-card-grid { grid-template-columns: 1fr; }
  .lifestyle-gallery { grid-template-columns: 1fr; grid-template-rows: repeat(4, 220px); }
  .lifestyle-gallery .gallery-tall, .lifestyle-gallery .gallery-wide { grid-column: auto; grid-row: auto; }
  .developer-note-signoff { gap: 24px; }
  .inline-note { flex-direction: column; align-items: flex-start; }
  .letter-reasons li { grid-template-columns: 48px 1fr; gap: 14px; }
  .sticky-enquire { flex-direction: column; align-items: stretch; }
  .sticky-enquire .button { justify-content: center; }
  .catalogue-toolbar { flex-direction: column; align-items: flex-start; gap: 8px; }
  .catalogue-toolbar h2 { margin-bottom: 0; }
  .gallery-main { min-height: 0; }
  .gallery-caption small, .gallery-thumb small { display: none; }
  .gallery-thumb strong { font-size: 0.78rem; }
}

@media (max-width: 480px) {
  .whatsapp-float span { display: none; }
  .whatsapp-float { width: 52px; padding: 0; justify-content: center; }
  h1 { font-size: clamp(2.6rem, 12vw, 3.4rem); }
  .detail-mini-content .property-meta { grid-template-columns: 1fr 1fr; }
  .hero-actions .button { width: 100%; }
}

/* Image enlargement: full frame click target and keyboard-accessible control. */
.has-image-expand { position: relative; }
.image-expand {
  position: absolute; inset: 0; z-index: 2; width: 100%; height: 100%;
  border: 0; border-radius: inherit; background: transparent;
  color: transparent; cursor: zoom-in;
}
.image-expand::after {
  content: 'Enlarge ↗'; position: absolute; top: 12px; right: 12px;
  padding: 7px 12px; border-radius: 999px; background: rgba(20, 33, 27, .88);
  color: #fff; font: 500 12px/1.4 sans-serif;
}
.image-expand:focus-visible { outline: 3px solid var(--gold, #b18c4d); outline-offset: -4px; }
.exterior-expand { margin: 12px 0 0 8px; }
.mini-hero.has-exterior-image::after { display: none; }
.exterior-image { display: block; width: 100%; height: min(52vw, 480px); margin-top: clamp(44px, 5vw, 68px); padding: 0; border: 0; border-radius: var(--radius-lg); overflow: hidden; cursor: zoom-in; }
.exterior-image img { width: 100%; height: 100%; object-fit: cover; }
.image-viewer {
  position: fixed; inset: 0; width: 96vw; max-width: 1600px;
  height: 94dvh; max-height: 94dvh; margin: auto; padding: 18px;
  border: 0; border-radius: 12px; background: #14211b; color: #fff;
}
.image-viewer::backdrop { background: rgba(0, 0, 0, .85); }
.image-viewer[open] { display: flex; flex-direction: column; gap: 12px; }
.image-viewer-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-shrink: 0; }
.image-viewer-toolbar a { color: #fff; text-decoration: underline; font-size: 14px; }
.image-viewer-close { min-height: 44px; padding: 8px 16px; background: #fff; color: #14211b; border: 0; border-radius: 6px; cursor: pointer; }
.image-viewer figure { display: flex; flex-direction: column; gap: 10px; margin: 0; min-height: 0; flex: 1; }
.image-viewer img { display: block; width: 100%; height: 100%; min-height: 0; flex: 1; object-fit: contain; }
.image-viewer figcaption { flex-shrink: 0; font-size: 13px; line-height: 1.4; color: #e8e5df; }
@media (max-width: 600px) {
  .image-viewer { width: 100vw; max-width: 100vw; height: 100dvh; max-height: 100dvh; border-radius: 0; padding: 12px; }
  .exterior-expand { margin-left: 0; }
}
