/* ===== amenities.html ===== */
/* ============================================================
   FOUNDATION — tokens · type · layout · reveals
   ============================================================ */
:root {
  --olive: #2D3823;
  --ivory: #F2F6EA;
  --tea: #D5E6C2;
  --pistachio: #A4C36F;
  --moss: #141B0A;
  --rule: rgba(45, 56, 35, .18);
  --serif: "Fraunces", "Times New Roman", serif;
  --sans: "Inter", "Helvetica Neue", system-ui, sans-serif;
  --display: "Inter", "Helvetica Neue", sans-serif;
  --t-h1-size: clamp(56px, 8.4vw, 132px);
  --t-h1-lh: .92;
  --t-h1-tracking: -.04em;
  --t-h2-size: clamp(44px, 6vw, 96px);
  --t-h2-lh: .95;
  --t-h2-tracking: -.035em;
  --t-h3-size: clamp(40px, 5vw, 80px);
  --t-h3-lh: 1;
  --t-h3-tracking: -.03em;
  --t-h4-size: clamp(32px, 3.2vw, 48px);
  --t-h4-lh: 1.2;
  --t-h4-tracking: -.02em;
  --t-h5-size: clamp(22px, 2vw, 32px);
  --t-h5-lh: 1.15;
  --t-h5-tracking: -.015em;
  --t-h6-size: clamp(18px, 1.4vw, 22px);
  --t-h6-lh: 1.25;
  --t-h6-tracking: -.005em;
  --t-body-lg-size: clamp(18px, 1.4vw, 22px);
  --t-body-size: 17px;
  --t-body-sm-size: 15px;
  --t-body-xs-size: 13px;
  --t-label-lg-size: 13px;
  --t-label-size: 11px;
}

/* Honor the native HTML `hidden` attribute even when class-based
   display rules (e.g. .enquire-form{display:flex}) would otherwise win */
html {
  scroll-behavior: smooth;
}

body {
  background: var(--ivory);
  color: var(--olive);
  font-family: var(--sans);
  font-weight: 400;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  /* clip (not hidden) so position:sticky in descendants still works.
     overflow-x:hidden on body makes body a scrolling container, which
     breaks vertical sticky in Chrome/Safari. overflow-x:clip is purely
     visual, no scroll context. */
  overflow-x: clip;
}

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

button {
  font: inherit;
  color: inherit;
}

/* TYPE BASE */
.body-lg {
  font-size: var(--t-body-lg-size);
  line-height: 1.55;
  color: var(--olive);
}

.body {
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: var(--olive);
}

.body-sm {
  font-size: var(--t-body-sm-size);
  line-height: 1.55;
  color: var(--olive);
}

.body-xs {
  font-size: var(--t-body-xs-size);
  line-height: 1.5;
  color: var(--olive);
}

/* Headline em — heavier optical-size 144 emphasis (no italic) */
h1 em,
h2 em,
h3 em,
.opening-h em,
.closing-h em,
.shape-h em {
  font-weight: 500;
  font-variation-settings: "opsz" 144;
}
.text-danger {
  color:red
}
.d-none {
  display:none
}
.d-block {
  display:block;
}
.mt-2 {
  margin-top: 8px;
}
textarea {
  resize:none !important;
}
@media (prefers-reduced-motion: reduce) {

  *,
  *::before,
  *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Word-by-word reveal — applied via JS to every H1–H6 on the page.
   Preserves inline markup (em, br, strong). */
@media (prefers-reduced-motion:reduce) {
  .reveal-words .word {
    transition: none;
    opacity: 1;
    transform: none;
  }
}

/* layout */
@media (max-width:768px) {
  .wrap {
    padding: 0 20px;
  }
}

@media (max-width:480px) {
  .wrap {
    padding: 0 16px;
  }
}

/* eyebrow / labels */
/* pill button — copied verbatim from index.html so visuals match exactly */
/* Oval-arrow icon for pill buttons */
/* Icon colors flow via custom properties so they cascade through <use> shadow DOM */
/* Light-bg pills — invert: dark oval, light arrow */
/* Nav ghost pill hovers to olive — revert icon back to default colors */
/* Download icon — defaults: ivory oval, olive arrow */
/* ============================================================
   HEADER — glassmorphic floating capsule
   ============================================================ */
/* ============================================================
   HAMBURGER + MOBILE MENU
   ============================================================ */
/* ============================================================
   SECTION TRANSITION SYSTEM (mirrors index.html)
   ============================================================ */
.opening.amenities_bg {
  background: var(--pistachio);
  z-index: 7;
  color: var(--moss);
}

.philosophy.philosphy_amenities {
  background: var(--ivory);
  z-index: 6;
  margin-top: -40px;
  padding-top: 140px;
}

/* ============================================================
   FOLD 1 — OPENING STATEMENT
   Hero-like: section-label, big H1, body lead, full-width film
   ============================================================ */
.amenities_bg.opening::before {
  /* Pinned to the section's own box — NOT 100vw — so iOS Safari
     versions without overflow-x:clip support can't leak this layer
     past the viewport edge. */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: url("images/bg_vector.svg");
  /* size 4× (was 200% → 400%) + pinned to viewport so the pattern
     stays still while content scrolls past it. */
  background-size: 400%;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  opacity: .16;
  pointer-events: none;
}

/* Pistachio radial halo above the vector — restores legibility of the
   headline + body by softening the pattern in the centre (same recipe
   as the closing fold). */
.amenities_bg.opening::after{
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 78% 72% at 50% 72%,
      var(--pistachio) 0%,
      rgba(164, 195, 111, .88) 30%,
      rgba(164, 195, 111, 0) 70%);
  pointer-events: none;
  z-index: 1;
}

/* ============================================================
   FOLD 2 — THE PHILOSOPHY
   Pistachio bg. Editorial 2-col: subhead-left / lead+body-right
   ============================================================ */
/* ---- Philosophy fold — typographic centerpiece ----
   Lead pull-quote → ruled list of 3 oversized "choices" (number ·
   display word · faded "over X") → decorative line.svg divider →
   centered closing prose. Mixes Fraunces opsz-144 display with
   Inter sans for serif/sans tonal contrast.
*/
/* Subgrid so all 3 rows share column tracks — col 1 sizes to the widest
   word, which makes the image and "over X" align vertically across rows. */
/* Hover bg lives on a ::before so it can:
   - fill the row exactly (no L/R bleed past wrap edges)
   - have rounded corners
   - fade in/out without affecting layout / shifting any text */
/* Flip text colors on hover so they read against the olive bg */
/* trailing "." reads as a quiet beat */
/* Editorial image strip slotting between display word and "over X" */
/* ============================================================
   FOLD 3 — THE PRINCIPLES
   Ivory bg. 2-col head + 2x2 grid of alternating cards.
   ============================================================ */
/* 4-up alternation reads strongest as ivory · olive · ivory · olive */
/* Use design-system tokens — H5 for the card title, .body for copy */
/* ============================================================
   FOLD 4 — HOW THE WORLD TAKES SHAPE
   Olive bg, ivory text. Lead + 3 alternating image-text rows.
   ============================================================ */
/* Decorative bg vector — pure black via filter:brightness(0), pinned to
   the viewport (background-attachment:fixed) so it stays in place while
   the section's content scrolls past it. */
/* 2-col layout: sticky headline (left) + sticky-stacked cards (right).
   Each card sticks slightly lower than the one before it, creating an
   overlapping shingle effect as the user scrolls. */
/* Card structure: horizontal 16:9 split.
   - LEFT (5fr): moss bg + caption text, vertically centered
   - RIGHT (7fr): photograph, fills the cell
   - Image lives first in DOM (mobile-first stacking) but grid-column
     places it on the right at desktop. */
/* Middle card breaks the moss rhythm — pistachio bg with moss text for
   a dark / light / dark visual cadence as the cards stack. */
/* When a later card stickies on top, this card fades to 80% */
/* Floating prose below the sticky headline — moves with .shape-left,
   stays visible the entire scroll through the cards column. */
/* ============================================================
   FOLD 5 — WHAT THIS WORLD ENABLES
   Tea bg. 3 large editorial lines, centered. Closing prose.
   ============================================================ */
/* ============================================================
   FOLD 6 — CLOSING REFLECTION
   Pistachio bg, full-fill vector + radial glow. Centered headline + CTA.
   ============================================================ */
/* ============================================================
   FOOTER
   ============================================================ */
/* ============================================================
   VIDEO MODAL
   ============================================================ */
/* ================================================================
   RESPONSIVE PASS — mobile/tablet adaptations
   ================================================================ */
@media (max-width:1024px) {

  /* Mobile/tablet header collapses to: brand left, hamburger right.
     Both the desktop link strip AND the Enquire pill are hidden — the
     mobile menu drawer reproduces both. */
  .nav-links {
    display: none;
  }

  .nav-cta {
    display: none;
  }

  .hamburger {
    display: flex;
  }

  .nav {
    grid-template-columns: auto auto;
    justify-content: space-between;
  }

  /* Belt-and-suspenders horizontal-overflow clip on the document root.
     body uses overflow-x:clip (preserves sticky descendants on desktop)
     but iOS Safari < 16 doesn't honour `clip` and falls back to visible
     — letting the page swipe sideways. On mobile/tablet there are no
     sticky descendants, so hiding overflow on <html> is safe. */
  html {
    overflow-x: hidden;
  }
}

@media (max-width:768px) {
  section {
    padding-top: 72px;
    padding-bottom: 72px;
  }

  .section-label {
    margin-bottom: 24px;
    gap: 10px;
  }

  .section-label .line {
    max-width: 60px;
  }

  /* Header */
  header {
    padding: 12px 12px;
  }

  header.scrolled {
    padding: 8px 12px;
  }

  .nav {
    padding: 6px 6px 6px 16px;
    gap: 8px;
  }

  .brand-logo {
    height: 18px;
  }

  /* OPENING */
  .opening {
    padding-top: 120px;
  }

  .opening-text {
    padding: 8px 0 64px;
  }

  .opening-h {
    font-size: clamp(40px, 11vw, 72px);
    line-height: .96;
    letter-spacing: -.03em;
  }

  .opening-body {
    margin-top: 24px;
    font-size: 16px;
  }

  /* PHILOSOPHY — mobile typographic rebuild
     Lead shrinks, the 3-column choice row collapses to a 2-row stack
     (number + word, then "over X" indented under), keeping the editorial
     rhythm without breaking line-lengths on phones. */
  .philosophy {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .philosophy-lead {
    font-size: clamp(28px, 8vw, 48px);
    line-height: 1.18;
    letter-spacing: -.02em;
  }

  .philosophy-rule {
    margin: 56px 0 4px;
  }

  /* Mobile collapses subgrid back to a single-column stack */
  .philosophy-choices {
    grid-template-columns: 1fr;
  }

  .philosophy-choice {
    grid-template-rows: auto auto auto;
    gap: 14px;
    padding: 24px 18px 28px;
  }

  .philosophy-choice::before {
    left: 0;
    right: 0;
    top: 6px;
    bottom: 6px;
    border-radius: 18px;
  }

  .choice-word {
    grid-column: 1;
    grid-row: 1;
    font-size: clamp(48px, 15vw, 84px);
    letter-spacing: -.035em;
  }

  .choice-img {
    grid-column: 1;
    grid-row: 2;
    max-width: none;
    width: 100%;
    height: 96px;
    margin-top: 8px;
    border-radius: 8px;
  }

  .choice-over {
    grid-column: 1;
    grid-row: 3;
    text-align: left;
    font-size: 28px;
    color: rgba(20, 27, 10, .55);
    padding-top: 6px;
  }

  .philosophy-close {
    margin-top: 48px;
  }

  /* SHAPE — golf-course feature; .am-bento mobile rules live further
     down in the page-specific block. Section padding only here. */
  .shape {
    padding-top: 96px;
    padding-bottom: 88px;
  }

  /* ENABLES — horizontal scroll-jack collapses to a swipe carousel;
     the carousel rules live further down in the page-specific block. */
  .enables {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  /* CLOSING */
  .closing {
    padding-top: 120px;
    padding-bottom: 96px;
  }

  .closing-h {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
  }

  .closing-body {
    margin-top: 24px;
    font-size: 15px;
  }

  .closing-cta {
    margin-top: 32px;
    flex-direction: column;
    align-items: center;
    gap: 12px;
  }

  .closing-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
  }

  /* FOOTER accordion */
  footer {
    padding-top: 80px;
    padding-bottom: 24px;
  }

  .foot-grid {
    grid-template-columns: 1fr;
    gap: 0;
    padding-bottom: 28px;
  }

  .foot-brand {
    margin-bottom: 24px;
  }

  .foot-brand .brand-logo {
    height: 120px !important;
  }

  .foot-brand p {
    margin-top: 14px;
    font-size: 13px;
  }

  .foot-col {
    border-bottom: 1px solid rgba(242, 246, 234, .12);
  }

  .foot-col:last-child {
    border-bottom: 0;
  }

  .foot-col h4 {
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 0;
    margin-bottom: 0;
    color: var(--pistachio);
    user-select: none;
  }

  .foot-col h4::after {
    content: "";
    width: 11px;
    height: 11px;
    position: relative;
    flex: 0 0 auto;
    background:
      linear-gradient(currentColor, currentColor) center/100% 1px no-repeat,
      linear-gradient(currentColor, currentColor) center/1px 100% no-repeat;
    transition: transform .3s cubic-bezier(.2, .6, .2, 1);
    opacity: .85;
  }

  .foot-col.is-open h4::after {
    transform: rotate(45deg);
  }

  .foot-col ul {
    max-height: 0;
    overflow: hidden;
    transition: max-height .4s cubic-bezier(.2, .6, .2, 1), padding .35s ease;
    padding-bottom: 0;
  }

  .foot-col.is-open ul {
    max-height: 320px;
    padding-bottom: 18px;
  }

  .foot-col li {
    margin-bottom: 12px;
    font-size: 14px;
  }

  .foot-col li:last-child {
    margin-bottom: 0;
  }

  .foot-bot {
    margin-top: 24px;
    flex-direction: column;
    gap: 8px;
    font-size: 11px;
  }

  /* Section transition radii — the 5 folds on this page only */
  .opening,
  .philosophy,
  .shape,
  .enables,
  .closing {
    border-bottom-left-radius: 28px;
    border-bottom-right-radius: 28px;
  }

  .philosophy,
  .shape,
  .enables,
  .closing,
  footer {
    margin-top: -28px;
  }

  .philosophy {
    padding-top: 96px;
  }

  .shape {
    padding-top: 96px;
  }

  .enables {
    padding-top: 96px;
  }

  .closing {
    padding-top: 120px;
  }

  footer {
    padding-top: 80px;
  }

  /* Video modal */
  .video-modal {
    padding: 12px;
  }

  .video-modal-close {
    top: 16px;
    right: 16px;
    width: 44px;
    height: 44px;
  }

  .video-modal-video {
    max-height: 80vh;
  }
}

@media (max-width:480px) {
  header {
    padding: 10px 10px;
  }

  header.scrolled {
    padding: 8px 10px;
  }

  .nav {
    padding: 5px 5px 5px 14px;
  }

  .hamburger {
    width: 36px;
    height: 36px;
  }

  .opening-h {
    font-size: clamp(36px, 12.5vw, 60px);
  }

  .philosophy-lead {
    font-size: clamp(26px, 8.6vw, 40px);
    line-height: 1.2;
  }

  .choice-word {
    font-size: clamp(40px, 15.5vw, 72px);
  }

  .closing-h {
    font-size: clamp(24px, 6.4vw, 34px);
  }

  .am-close-tagline {
    font-size: clamp(24px, 6.4vw, 34px);
    line-height: 1.3;
  }

  .foot-brand .brand-logo {
    height: 104px !important;
  }

  .mobile-menu-nav a {
    font-size: clamp(24px, 7.8vw, 34px);
  }

  .mobile-menu-cta {
    max-width: 100%;
  }

  /* Match the page gutter at this breakpoint (16px) so the first card
     lines up with the headline above it. */
  .am-horiz-cards {
    padding: 4px 16px 8px;
  }

  /* Tighter card peek on phone-size viewports — 86% width shows more
     of the next card and matches the homepage carousel rhythm. */
  .am-card {
    flex: 0 0 86%;
    border-radius: 18px;
  }

  .am-card-text {
    padding: 22px 22px 24px;
  }
}

/* ============================================================
   LOADING SCREEN + "WORKS" MORPH TRANSITION
   Phase 1: dark moss screen with gently-pulsing logo.
   Phase 2: ivory curtain rises (curve), flattens to cover screen,
            then whole loader fades to opacity 0 — page revealed.
   ============================================================ */
@keyframes rt-logo-pulse {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: .55;
  }
}

/* Lock body scroll while loader is visible */
/* ============================================================
   ENQUIRY MODAL — editorial form, ivory card on moss backdrop.
   ============================================================ */
@media (max-width:640px) {
  .enquire-modal {
    padding: 16px 14px;
  }

  .enquire-card {
    padding: 28px 22px 24px;
    border-radius: 18px;
  }

  .enquire-close {
    top: 10px;
    right: 10px;
    width: 36px;
    height: 36px;
  }

  .enquire-eyebrow {
    margin-bottom: 8px;
  }

  .enquire-title {
    font-size: clamp(22px, 6vw, 28px);
  }

  .enquire-sub {
    font-size: 13.5px;
  }

  .enquire-form {
    margin-top: 18px;
    gap: 14px;
  }

  .enquire-row {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .enquire-submit {
    width: 100%;
    justify-content: center;
  }
}

/* ------ Tea variant (Brochure download) ------ */
/* ============================================================
   AMENITIES PAGE — fold-specific overrides + new components
   ============================================================ */
/* Fold 3 anchor — image fills the section as background, text card
   floats on the right at 50% width. Section padding tightened so the
   visible space above/below matches the wrap's L/R padding of 24px
   (after the -40 transition overlap is absorbed). */
.shape.amenities_shape {
  padding-top: 104px !important;
  padding-bottom: 64px !important;
  background-color: var(--olive);
  /* fallback under the image */
  background-image: url("images/ameneties_title.jpg");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  /* photo stays put as the section scrolls */
}

/* Scrim — lifts the right-side text card off the photograph and keeps
   the left half from feeling visually heavy. Soft left→right olive wash. */
/* Glass-morphism text card — translucent white over the photo with a
   blurred backdrop. A subtle white inner edge + soft drop-shadow gives
   the floating-glass impression. Text colors stay olive for legibility. */
/* Top-right feature image card */
/* Bottom-right two image cards */
/* Fold 4 — override .enables to ivory bg + left-align */
/* Override section padding-bottom to 0 — the horizontal pin container
   lives below the wrap and provides its own vertical scroll budget. */
/* Horizontal scroll-jack:
   - .am-horiz-pin is artificially tall — provides scroll runway
   - .am-horiz-track sticks to the viewport while the pin scrolls past;
     headline + cards row both live INSIDE the track so the headline
     pins WITH the cards (visible above them through the whole scroll)
   - .am-horiz-cards inside is translateX'd by JS based on scroll progress */
@media (max-width:768px) {

  /* On mobile the headline sits inside the page gutter — no extra
     left indent — so it lines up with body copy elsewhere on the page. */
  .am-horiz-head {
    padding: 0 20px;
  }
}

@media (max-width:480px) {
  .am-horiz-head {
    padding: 0 16px;
  }
}

/* Each card: 40vw wide → two full + a peek of the third visible at once.
   50/50 horizontal split: text left, image right, --moss bg, ivory text. */
.am-card {
  flex: 0 0 60vw;
  /* min-height (was fixed 54vh) — lets the card grow when the body
     copy needs more room. Cards in the row will all stretch to the
     tallest one's height via flex's default align-items:stretch. */
  min-height: 54vh;
  display: grid;
  grid-template-columns: 1fr 1fr;
  border-radius: 24px;
  overflow: hidden;
  background: var(--moss);
  color: var(--ivory);
}

/* Alternate cards — even-numbered cards flip to pistachio + moss text */
/* Decorative SVG pattern — each card sets its own --pattern var.
   Renders at 20% opacity behind text so the moss/pistachio bg
   remains dominant. cover-fit so portrait SVGs fill the panel. */
/* Pistachio (even) cards have less contrast against the dark pattern,
   so dial it down to keep the surface calm. */
/* Fold 5 — extra body + tagline lines for amenities closing */
/* Mobile adaptation */
@media (max-width:768px) {

  /* Mobile: text card spans full width over the image bg.
     Background-attachment:fixed is dropped on mobile — it renders oddly
     on iOS (zooms the photo to viewport, not section) and looks worse
     than a normal scrolling cover. Glass blur dialled down for perf
     on budget Android. */
  .shape {
    background-attachment: scroll;
  }

  .shape>.wrap {
    padding-top: 32px;
    padding-bottom: 48px;
  }

  .am-bento {
    justify-content: stretch;
  }

  .am-bento .am-bento-text {
    width: 100%;
  }

  .am-bento-text {
    padding: 28px 24px 32px;
    /* Anchor the glass card to the top of the section on phones so
       the golf photograph behind it stays visible below — desktop's
       vertical centering hides the image on the short mobile section. */
    justify-content: flex-start;
    backdrop-filter: blur(14px) saturate(130%);
    -webkit-backdrop-filter: blur(14px) saturate(130%);
    background-color: rgba(255, 255, 255, .65);
  }

  .am-bento-text .am-bento-h {
    font-size: clamp(28px, 7vw, 40px);
  }

  .am-more-h {
    margin-bottom: 32px;
    font-size: clamp(34px, 9vw, 52px);
  }

  /* Disable scroll-jack and convert to a native horizontal scroll-snap
     carousel — same pattern as the homepage Amenities strip. The pin
     is already viewport-width (no `.wrap` parent), so the cards row
     does NOT use a negative bleed margin — its left padding is the
     gutter, and the first card aligns with the headline above. */
  .am-horiz-pin {
    height: auto;
  }

  .am-horiz-track {
    position: static;
    height: auto;
    display: block;
    padding: 0;
    overflow: visible;
  }

  .am-horiz-cards {
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 14px;
    padding: 4px 20px 8px;
    margin: 0;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    transform: none !important;
  }

  .am-horiz-cards::-webkit-scrollbar {
    display: none;
  }

  .am-card {
    flex: 0 0 82%;
    height: auto;
    grid-template-columns: 1fr;
    grid-template-rows: auto auto;
    border-radius: 20px;
    scroll-snap-align: center;
  }

  .am-card-img {
    aspect-ratio: 16/10;
    min-height: 0;
  }

  .am-card-text {
    padding: 24px 26px 28px;
    gap: 12px;
  }

  .am-card-h {
    font-size: clamp(22px, 5.4vw, 30px);
  }

  .am-close-body {
    font-size: 15px;
    margin-top: 24px;
  }

  .am-close-tagline {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
    margin-top: 32px;
  }
}

/* ===== contact.html ===== */
/* Scoped to the site header — using a bare `header{}` selector
accidentally captured `<header>` elements inside folds and pinned
them to the viewport. */
/* ============================================================
HAMBURGER + MOBILE MENU
============================================================ */
/* ============================================================
SECTION TRANSITION SYSTEM (mirrors index.html)
============================================================ */
.opening,
.visit,
.enquire-fold {
  position: relative;
  border-bottom-left-radius: 40px;
  border-bottom-right-radius: 40px;
}

/* Section stacking — descending z-index so each section's rounded
bottom corners overlap the section below. The Contact page is
only three folds + footer, so the chain is short. */
.opening.contact_bg {
  background: var(--olive);
  z-index: 5;
  color: var(--ivory);
}

.visit {
  background: var(--ivory);
  z-index: 4;
  margin-top: -40px;
  padding-top: 140px;
  padding-bottom: 120px;
}

.enquire-fold {
  background: var(--tea);
  z-index: 3;
  margin-top: -40px;
  padding-top: 140px;
  padding-bottom: 140px;
  color: var(--moss);
}

/* ============================================================
FOLD 1 — OPENING STATEMENT
Hero-like: section-label, big H1, body lead, full-width film
============================================================ */
/* Soft moss radial wash — a darker centre that sinks the headline
into the bg without going darker than olive. Replaces the old
pistachio halo (which made no sense on a dark fold). */
/* ============================================================
FOLD 2 — THE PHILOSOPHY
Pistachio bg. Editorial 2-col: subhead-left / lead+body-right
============================================================ */
/* ---- Philosophy fold — typographic centerpiece ----
Lead pull-quote → ruled list of 3 oversized "choices" (number ·
display word · faded "over X") → decorative line.svg divider →
centered closing prose. Mixes Fraunces opsz-144 display with
Inter sans for serif/sans tonal contrast.
*/
/* Subgrid so all 3 rows share column tracks — col 1 sizes to the widest
word, which makes the image and "over X" align vertically across rows. */
/* Hover bg lives on a ::before so it can:
- fill the row exactly (no L/R bleed past wrap edges)
- have rounded corners
- fade in/out without affecting layout / shifting any text */
/* Flip text colors on hover so they read against the olive bg */
/* trailing "." reads as a quiet beat */
/* Editorial image strip slotting between display word and "over X" */
/* ============================================================
FOLD 3 — THE PRINCIPLES
Ivory bg. 2-col head + 2x2 grid of alternating cards.
============================================================ */
/* 4-up alternation reads strongest as ivory · olive · ivory · olive */
/* Use design-system tokens — H5 for the card title, .body for copy */
/* ============================================================
FOLD 4 — HOW THE WORLD TAKES SHAPE
Olive bg, ivory text. Lead + 3 alternating image-text rows.
============================================================ */
/* Decorative bg vector — pure black via filter:brightness(0), pinned to
the viewport (background-attachment:fixed) so it stays in place while
the section's content scrolls past it. */
/* 2-col layout: sticky headline (left) + sticky-stacked cards (right).
Each card sticks slightly lower than the one before it, creating an
overlapping shingle effect as the user scrolls. */
/* Card structure: horizontal 16:9 split.
- LEFT (5fr): moss bg + caption text, vertically centered
- RIGHT (7fr): photograph, fills the cell
- Image lives first in DOM (mobile-first stacking) but grid-column
places it on the right at desktop. */
/* Middle card breaks the moss rhythm — pistachio bg with moss text for
a dark / light / dark visual cadence as the cards stack. */
/* When a later card stickies on top, this card fades to 80% */
/* Floating prose below the sticky headline — moves with .shape-left,
stays visible the entire scroll through the cards column. */
/* ============================================================
FOLD 5 — WHAT THIS WORLD ENABLES
Tea bg. 3 large editorial lines, centered. Closing prose.
============================================================ */
/* ============================================================
FOLD 6 — CLOSING REFLECTION
Pistachio bg, full-fill vector + radial glow. Centered headline + CTA.
============================================================ */
/* ============================================================
FOOTER
============================================================ */
/* ============================================================
VIDEO MODAL
============================================================ */
/* ================================================================
RESPONSIVE PASS — mobile/tablet adaptations
================================================================ */
@media (max-width:1024px) {

  /* Mobile/tablet header collapses to: brand left, hamburger right.
Both the desktop link strip AND the Enquire pill are hidden — the
mobile menu drawer reproduces both. */
  .nav-links {
    display: none;
  }

  .nav-cta {
    display: none;
  }

  .hamburger {
    display: flex;
  }

  .nav {
    grid-template-columns: auto auto;
    justify-content: space-between;
  }

  /* Belt-and-suspenders horizontal-overflow clip on the document root.
body uses overflow-x:clip (preserves sticky descendants on desktop)
but iOS Safari < 16 doesn't honour `clip` and falls back to visible
— letting the page swipe sideways. On mobile/tablet there are no
sticky descendants, so hiding overflow on <html> is safe. */
  html {
    overflow-x: hidden;
  }
}

@media (max-width:768px) {
  section {
    padding-top: 72px;
    padding-bottom: 72px;
  }

  .section-label {
    margin-bottom: 24px;
    gap: 10px;
  }

  .section-label .line {
    max-width: 60px;
  }

  /* Header */
  #site-header {
    padding: 12px 12px;
  }

  #site-header.scrolled {
    padding: 8px 12px;
  }

  .nav {
    padding: 6px 6px 6px 16px;
    gap: 8px;
  }

  .brand-logo {
    height: 18px;
  }

  /* OPENING */
  .opening {
    padding-top: 120px;
  }

  .opening-text {
    padding: 8px 0 64px;
  }

  .opening-h {
    font-size: clamp(40px, 11vw, 72px);
    line-height: .96;
    letter-spacing: -.03em;
  }

  .opening-body {
    margin-top: 24px;
    font-size: 16px;
  }

  /* PHILOSOPHY — mobile typographic rebuild
Lead shrinks, the 3-column choice row collapses to a 2-row stack
(number + word, then "over X" indented under), keeping the editorial
rhythm without breaking line-lengths on phones. */
  .philosophy {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .philosophy-lead {
    font-size: clamp(28px, 8vw, 48px);
    line-height: 1.18;
    letter-spacing: -.02em;
  }

  .philosophy-rule {
    margin: 56px 0 4px;
  }

  /* Mobile collapses subgrid back to a single-column stack */
  .philosophy-choices {
    grid-template-columns: 1fr;
  }

  .philosophy-choice {
    grid-template-rows: auto auto auto;
    gap: 14px;
    padding: 24px 18px 28px;
  }

  .philosophy-choice::before {
    left: 0;
    right: 0;
    top: 6px;
    bottom: 6px;
    border-radius: 18px;
  }

  .choice-word {
    grid-column: 1;
    grid-row: 1;
    font-size: clamp(48px, 15vw, 84px);
    letter-spacing: -.035em;
  }

  .choice-img {
    grid-column: 1;
    grid-row: 2;
    max-width: none;
    width: 100%;
    height: 96px;
    margin-top: 8px;
    border-radius: 8px;
  }

  .choice-over {
    grid-column: 1;
    grid-row: 3;
    text-align: left;
    font-size: 28px;
    color: rgba(20, 27, 10, .55);
    padding-top: 6px;
  }

  .philosophy-close {
    margin-top: 48px;
  }

  /* SHAPE — golf-course feature; .am-bento mobile rules live further
down in the page-specific block. Section padding only here. */
  .shape {
    padding-top: 96px;
    padding-bottom: 88px;
  }

  /* ENABLES — horizontal scroll-jack collapses to a swipe carousel;
the carousel rules live further down in the page-specific block. */
  .enables {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  /* CLOSING */
  .closing {
    padding-top: 120px;
    padding-bottom: 96px;
  }

  .closing-h {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
  }

  .closing-body {
    margin-top: 24px;
    font-size: 15px;
  }

  .closing-cta {
    margin-top: 32px;
    flex-direction: column;
    align-items: center;
    gap: 12px;
  }

  .closing-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
  }

  /* FOOTER accordion */
  footer {
    padding-top: 80px;
    padding-bottom: 24px;
  }

  .foot-grid {
    grid-template-columns: 1fr;
    gap: 0;
    padding-bottom: 28px;
  }

  .foot-brand {
    margin-bottom: 24px;
  }

  .foot-brand .brand-logo {
    height: 120px !important;
  }

  .foot-brand p {
    margin-top: 14px;
    font-size: 13px;
  }

  .foot-col {
    border-bottom: 1px solid rgba(242, 246, 234, .12);
  }

  .foot-col:last-child {
    border-bottom: 0;
  }

  .foot-col h4 {
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 0;
    margin-bottom: 0;
    color: var(--pistachio);
    user-select: none;
  }

  .foot-col h4::after {
    content: "";
    width: 11px;
    height: 11px;
    position: relative;
    flex: 0 0 auto;
    background:
      linear-gradient(currentColor, currentColor) center/100% 1px no-repeat,
      linear-gradient(currentColor, currentColor) center/1px 100% no-repeat;
    transition: transform .3s cubic-bezier(.2, .6, .2, 1);
    opacity: .85;
  }

  .foot-col.is-open h4::after {
    transform: rotate(45deg);
  }

  .foot-col ul {
    max-height: 0;
    overflow: hidden;
    transition: max-height .4s cubic-bezier(.2, .6, .2, 1), padding .35s ease;
    padding-bottom: 0;
  }

  .foot-col.is-open ul {
    max-height: 320px;
    padding-bottom: 18px;
  }

  .foot-col li {
    margin-bottom: 12px;
    font-size: 14px;
  }

  .foot-col li:last-child {
    margin-bottom: 0;
  }

  .foot-bot {
    margin-top: 24px;
    flex-direction: column;
    gap: 8px;
    font-size: 11px;
  }

  /* Section transition radii — Contact page (3 folds + footer) */
  .opening,
  .visit,
  .enquire-fold {
    border-bottom-left-radius: 28px;
    border-bottom-right-radius: 28px;
  }

  .visit,
  .enquire-fold,
  footer {
    margin-top: -28px;
  }

  .visit,
  .enquire-fold {
    padding-top: 96px;
  }

  .closing {
    padding-top: 120px;
  }

  footer {
    padding-top: 80px;
  }

  /* Video modal */
  .video-modal {
    padding: 12px;
  }

  .video-modal-close {
    top: 16px;
    right: 16px;
    width: 44px;
    height: 44px;
  }

  .video-modal-video {
    max-height: 80vh;
  }
}

@media (max-width:480px) {
  #site-header {
    padding: 10px 10px;
  }

  #site-header.scrolled {
    padding: 8px 10px;
  }

  .nav {
    padding: 5px 5px 5px 14px;
  }

  .hamburger {
    width: 36px;
    height: 36px;
  }

  .opening-h {
    font-size: clamp(36px, 12.5vw, 60px);
  }

  .foot-brand .brand-logo {
    height: 104px !important;
  }

  .mobile-menu-nav a {
    font-size: clamp(24px, 7.8vw, 34px);
  }

  .mobile-menu-cta {
    max-width: 100%;
  }

  /* CONTACT PAGE — phone-size tightening. Stacks the hero CTA pills
vertically (so two pills don't overflow at <380px), tightens the
enquire-letter padding, drops form input size from 18 to 17 to
match homepage modal rhythm. */
  .contact-hero-cta {
    margin-top: 28px;
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
  }

  .contact-hero-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
    margin: 0 auto;
  }

  .enquire-letter {
    border-radius: 18px;
  }

  .enquire-form-col {
    padding: 32px 20px;
  }

  .contact-form {
    gap: 18px;
  }

  .contact-row {
    gap: 18px;
  }

  .contact-field input,
  .contact-field textarea {
    font-size: 17px;
  }

  .contact-field--phone .contact-phone-input {
    gap: 10px;
  }

  .visit-channel,
  .advisor-channel {
    gap: 6px;
  }

  .visit-channel dd,
  .advisor-channel dd {
    font-size: 16px;
  }
}

/* ============================================================
LOADING SCREEN + "WORKS" MORPH TRANSITION
Phase 1: dark moss screen with gently-pulsing logo.
Phase 2: ivory curtain rises (curve), flattens to cover screen,
then whole loader fades to opacity 0 — page revealed.
============================================================ */
@keyframes rt-logo-pulse {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: .55;
  }
}

/* Lock body scroll while loader is visible */
/* ============================================================
ENQUIRY MODAL — editorial form, ivory card on moss backdrop.
============================================================ */
@media (max-width:640px) {
  .enquire-modal {
    padding: 16px 14px;
  }

  .enquire-card {
    padding: 28px 22px 24px;
    border-radius: 18px;
  }

  .enquire-close {
    top: 10px;
    right: 10px;
    width: 36px;
    height: 36px;
  }

  .enquire-eyebrow {
    margin-bottom: 8px;
  }

  .enquire-title {
    font-size: clamp(22px, 6vw, 28px);
  }

  .enquire-sub {
    font-size: 13.5px;
  }

  .enquire-form {
    margin-top: 18px;
    gap: 14px;
  }

  .enquire-row {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .enquire-submit {
    width: 100%;
    justify-content: center;
  }
}

/* ------ Tea variant (Brochure download) ------ */
/* ============================================================
AMENITIES PAGE — fold-specific overrides + new components
============================================================ */
/* Fold 3 anchor — image fills the section as background, text card
floats on the right at 50% width. Section padding tightened so the
visible space above/below matches the wrap's L/R padding of 24px
(after the -40 transition overlap is absorbed). */
/* Scrim — lifts the right-side text card off the photograph and keeps
the left half from feeling visually heavy. Soft left→right olive wash. */
/* Glass-morphism text card — translucent white over the photo with a
blurred backdrop. A subtle white inner edge + soft drop-shadow gives
the floating-glass impression. Text colors stay olive for legibility. */
/* Top-right feature image card */
/* Bottom-right two image cards */
/* Fold 4 — override .enables to ivory bg + left-align */
/* Override section padding-bottom to 0 — the horizontal pin container
lives below the wrap and provides its own vertical scroll budget. */
/* Horizontal scroll-jack:
- .am-horiz-pin is artificially tall — provides scroll runway
- .am-horiz-track sticks to the viewport while the pin scrolls past;
headline + cards row both live INSIDE the track so the headline
pins WITH the cards (visible above them through the whole scroll)
- .am-horiz-cards inside is translateX'd by JS based on scroll progress */
@media (max-width:768px) {

  /* On mobile the headline sits inside the page gutter — no extra
left indent — so it lines up with body copy elsewhere on the page. */
  .am-horiz-head {
    padding: 0 20px;
  }
}

@media (max-width:480px) {
  .am-horiz-head {
    padding: 0 16px;
  }
}

/* Each card: 40vw wide → two full + a peek of the third visible at once.
50/50 horizontal split: text left, image right, --moss bg, ivory text. */
/* Alternate cards — even-numbered cards flip to pistachio + moss text */
/* Decorative SVG pattern — each card sets its own --pattern var.
Renders at 20% opacity behind text so the moss/pistachio bg
remains dominant. cover-fit so portrait SVGs fill the panel. */
/* Pistachio (even) cards have less contrast against the dark pattern,
so dial it down to keep the surface calm. */
/* Fold 5 — extra body + tagline lines for amenities closing */
/* Mobile adaptation */
@media (max-width:768px) {

  /* Mobile: text card spans full width over the image bg.
Background-attachment:fixed is dropped on mobile — it renders oddly
on iOS (zooms the photo to viewport, not section) and looks worse
than a normal scrolling cover. Glass blur dialled down for perf
on budget Android. */
  .shape {
    background-attachment: scroll;
  }

  .shape>.wrap {
    padding-top: 32px;
    padding-bottom: 48px;
  }

  .am-bento {
    justify-content: stretch;
  }

  .am-bento .am-bento-text {
    width: 100%;
  }

  .am-bento-text {
    padding: 28px 24px 32px;
    backdrop-filter: blur(14px) saturate(130%);
    -webkit-backdrop-filter: blur(14px) saturate(130%);
    background-color: rgba(255, 255, 255, .65);
  }

  .am-bento-text .am-bento-h {
    font-size: clamp(28px, 7vw, 40px);
  }

  .am-more-h {
    margin-bottom: 32px;
    font-size: clamp(34px, 9vw, 52px);
  }

  /* Disable scroll-jack and convert to a native horizontal scroll-snap
carousel — same pattern as the homepage Amenities strip. The pin
is already viewport-width (no `.wrap` parent), so the cards row
does NOT use a negative bleed margin — its left padding is the
gutter, and the first card aligns with the headline above. */
  .am-horiz-pin {
    height: auto;
  }

  .am-horiz-track {
    position: static;
    height: auto;
    display: block;
    padding: 0;
    overflow: visible;
  }

  .am-horiz-cards {
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 14px;
    padding: 4px 20px 8px;
    margin: 0;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    transform: none !important;
  }

  .am-horiz-cards::-webkit-scrollbar {
    display: none;
  }

  .am-card {
    flex: 0 0 82%;
    height: auto;
    grid-template-columns: 1fr;
    grid-template-rows: auto auto;
    border-radius: 20px;
    scroll-snap-align: center;
  }

  .am-card-img {
    aspect-ratio: 16/10;
    min-height: 0;
  }

  .am-card-text {
    padding: 24px 26px 28px;
    gap: 12px;
  }

  .am-card-h {
    font-size: clamp(22px, 5.4vw, 30px);
  }

  .am-close-body {
    font-size: 15px;
    margin-top: 24px;
  }

  .am-close-tagline {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
    margin-top: 32px;
  }
}

/* ============================================================
VILLAS PAGE — fold-specific layouts.
Each fold reuses .v-head/.v-h/.v-lead at the top and lays out
its body with a per-fold grid below.
============================================================ */
/* Shared headline / lead block */
/* On the dark olive Features fold, headlines + leads invert. */
/* Fold 2 — design-philosophy stanza
3-line numbered list, mono num + serif phrase, faint divider. */
/* Fold 2 — "The Tenets" editorial spreads.
Replaces the older numbered list. Each tenet is a full-width grid:
[ numeral · portrait image · type ]
The intro block (eyebrow + headline + lead) sits inside the wrap
above; the three tenets run edge-to-edge below for prominence. */
/* Intro block — eyebrow + asymmetric headline + lead */
/* Tenets list — runs edge-to-edge for prominence. A continuous
olive hairline runs along the top and bottom; each tenet is
separated by another hairline. */
/* Numeral column — display-optical Fraunces, oversized, baseline-aligned
with the phrase column on the right via flex. */
/* Image — softened rectangle. ~30% shorter than the original 5:6
portrait so it sits as a calm landscape band rather than a tall
plate. The wrap clips the img so its scale-out reveal stays inside
the rounded corners. */
/* Text column — meta tag + serif phrase + animated rule.
The serif phrase is large but soft (weight 300, opsz 144). */
/* Reveal states — set by IntersectionObserver in JS.
On enter: image releases zoom, rule draws across, content fades
in with a tiny upward slide. Stagger via animation-delay per
element. */
/* Hover — image scales gently */
@media (hover:hover) {
  .v-tenet:hover .v-tenet-img img {
    transform: scale(1.04);
  }
}

/* Reduced-motion — drop animations entirely */
@media (prefers-reduced-motion:reduce) {

  .v-tenet-index,
  .v-tenet-img-wrap,
  .v-tenet-text>* {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .v-tenet-img img {
    transform: none !important;
    transition: none;
  }

  .v-tenet-rule {
    width: 100% !important;
    transition: none;
  }
}

/* Fold 3 — architecture grid (3-up captioned image cards) */
/* Fold 4 — living-spaces alternating rows
Slower, more editorial than the architecture grid above. */
/* Fold 5 — features grid (4-card on olive) */
/* Fold 6 — golf-points list (inside the .am-bento glass card) */
/* Fold 7 — villa configurations (2 large cards) */
/* Villa folds — mobile adaptation
Everything stacks 1-up; gutters tighten; type scales down.   */
@media (max-width:768px) {

  .architecture,
  .living,
  .features,
  .configs {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .v-head {
    margin-bottom: 36px;
  }

  .v-h {
    font-size: clamp(32px, 8vw, 48px);
  }

  .v-lead {
    font-size: 16px;
    margin-top: 18px;
  }

  .v-phrases {
    margin-top: 28px;
    gap: 14px;
  }

  .v-phrases li {
    grid-template-columns: auto 1fr;
    gap: 14px;
    padding-bottom: 14px;
  }

  .v-phrase {
    font-size: clamp(17px, 4.6vw, 22px);
  }

  /* Tenets — mobile: stack to single column, smaller numerals, no
stagger offset. The image goes wide (4:5) so it stays a hero. */
  .v-tenets-intro {
    grid-template-columns: 1fr;
    column-gap: 0;
    row-gap: 24px;
    padding-bottom: 56px;
  }

  .v-tenets-eyebrow {
    margin-bottom: 12px;
  }

  .v-tenets-eyebrow-rule {
    width: 42px;
  }

  .v-tenets-h {
    font-size: clamp(44px, 11vw, 72px);
  }

  .v-tenets-lead {
    font-size: 16px;
    padding-bottom: 0;
    max-width: none;
  }

  .v-tenet {
    grid-template-columns: 1fr;
    gap: 24px;
    padding: 48px 20px 56px;
  }

  .v-tenet[data-tenet="02"] .v-tenet-index,
  .v-tenet[data-tenet="03"] .v-tenet-index {
    padding-top: .4em;
  }

  .v-tenet-num {
    font-size: clamp(72px, 18vw, 110px);
  }

  .v-tenet-img-wrap {
    aspect-ratio: 8/7;
    border-radius: 14px;
  }

  .v-tenet-text {
    padding-top: 0;
    gap: 16px;
  }

  .v-tenet-h {
    font-size: clamp(26px, 7vw, 38px);
  }

  .v-cards {
    grid-template-columns: 1fr;
    gap: 24px;
  }

  .v-card-img {
    aspect-ratio: 16/12;
  }

  .v-rows {
    gap: 48px;
  }

  .v-row,
  .v-row--reverse {
    grid-template-columns: 1fr;
    gap: 18px;
  }

  .v-row--reverse .v-row-img {
    order: 0;
  }

  .v-row--reverse .v-row-text {
    order: 0;
  }

  .v-row-text {
    padding: 0;
  }

  .v-row-h {
    font-size: clamp(22px, 6vw, 30px);
  }

  .v-feat-grid {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .v-feat {
    min-height: 0;
    padding: 24px 22px;
  }

  .v-config-grid {
    grid-template-columns: 1fr;
    gap: 18px;
  }

  .v-config-body {
    padding: 22px 24px 26px;
  }

  .v-config-h {
    font-size: clamp(22px, 6vw, 28px);
  }
}

/* ============================================================
CONTACT PAGE — fold-specific layouts.
Three folds: hero (olive) → visit (ivory) → enquire (tea).
The hero italic on "conversation" is just the existing
.opening-h em rule; the other components are bespoke.
============================================================ */
/* Hero — pill pair sitting below the lead. */
/* Ghost pill on dark bg — translucent ivory with hairline edge.
Matches the brand's pill rhythm but reads as "muted CTA". */
/* Visit fold — 60/40 grid, address typography on left, map on right. */
/* Channel rows: dt = mono label, dd = serif/mono link. */
/* Map — square-ish, soft rounded corners, faint border. */
/* Enquire fold — both columns wrapped inside a single ivory
"letterhead" card on the tea bg. Vertical hairline separates form
from advisor. The card gives the form proper enclosure and lifts
the whole composition off the section. */
/* Form — line-style inputs (no boxes). Tighter rhythm than the
previous version — 22px between rows reads as a single paragraph. */
/* Two-column field row — Name + Phone share a line at desktop. */
/* Field — label sits above input as a tiny mono caption.
Input is a single underlined line, no box. */
/* Phone field — +91 prefix sits inline with the input. */
.contact-field--phone .contact-phone-input {
  position: relative;
  /* anchors the dropdown panel */
  display: flex;
  align-items: baseline;
  gap: 14px;
  border-bottom: 1px solid rgba(45, 56, 35, .32);
  transition: border-color .25s ease;
}

.contact-field--phone input[type="tel"] {
  border-bottom: 0;
  padding-left: 0;
  flex: 1;
  min-width: 0;
}

/* Country-code trigger — flag + dial code + chevron. No box — sits
inline in the underlined phone field, matches the brand register. */
.contact-phone-cc {
  background: none;
  border: 0;
  padding: 6px 4px 12px 0;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  font-family: var(--display);
  font-weight: 500;
  font-size: 14px;
  letter-spacing: .04em;
  color: var(--moss);
  -webkit-appearance: none;
  appearance: none;
  flex: 0 0 auto;
}

.contact-phone-cc:hover {
  opacity: .85;
}

.contact-phone-cc:focus-visible {
  outline: none;
  box-shadow: 0 1px 0 0 var(--moss);
}

.contact-phone-flag {
  font-size: 18px;
  line-height: 1;
  /* Render emoji flags consistently across platforms. */
  font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
}

.contact-phone-code {
  opacity: .85;
}

.contact-phone-arrow {
  width: 10px;
  height: 6px;
  margin-left: 2px;
  opacity: .55;
  transition: transform .25s ease;
  color: var(--moss);
}

.contact-phone-cc[aria-expanded="true"] .contact-phone-arrow {
  transform: rotate(180deg);
  opacity: .85;
}

/* Dropdown panel — white card on ivory bg, soft shadow + olive
border, hairline rule on each row. Reads as a small editorial
directory rather than a generic select. */
.contact-phone-cc-list {
  position: absolute;
  top: calc(100% + 10px);
  left: -12px;
  z-index: 30;
  list-style: none;
  margin: 0;
  padding: 6px;
  width: min(320px, calc(100vw - 56px));
  max-height: 320px;
  overflow-y: auto;
  background: #fff;
  border: 1px solid rgba(45, 56, 35, .18);
  border-radius: 14px;
  box-shadow: 0 16px 40px rgba(20, 27, 10, .12),
    0 2px 6px rgba(20, 27, 10, .06);
  /* Hide default scrollbar styling for a cleaner panel */
  scrollbar-width: thin;
  scrollbar-color: rgba(45, 56, 35, .3) transparent;
}

.contact-phone-cc-list[hidden] {
  display: none;
}

.contact-phone-cc-list::-webkit-scrollbar {
  width: 6px;
}

.contact-phone-cc-list::-webkit-scrollbar-track {
  background: transparent;
}

.contact-phone-cc-list::-webkit-scrollbar-thumb {
  background: rgba(45, 56, 35, .25);
  border-radius: 3px;
}

.contact-phone-cc-list li {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 14px;
  border-radius: 8px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: 14px;
  line-height: 1.3;
  color: var(--moss);
  cursor: pointer;
  transition: background .15s ease;
}

.contact-phone-cc-list li:hover,
.contact-phone-cc-list li.is-active {
  background: rgba(213, 230, 194, .55);
  /* tea wash on hover */
}

.contact-phone-cc-list li.is-selected {
  background: rgba(20, 27, 10, .06);
}

.contact-phone-cc-list li .cc-flag {
  font-size: 18px;
  line-height: 1;
  flex: 0 0 auto;
  font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
}

.contact-phone-cc-list li .cc-name {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.contact-phone-cc-list li em {
  font-style: normal;
  margin-left: auto;
  color: rgba(20, 27, 10, .6);
  font-family: var(--display);
  font-weight: 500;
  font-size: 12px;
  letter-spacing: .06em;
  flex: 0 0 auto;
}

/* Honeypot — visually hidden but kept in tab order skip */
/* Consent — small checkbox + serif body. */
/* Advisor card — calm, typographic, no portrait. Lives inside the
.enquire-card next to the form column, separated by a hairline. */
/* Mobile — stack everything to single column, tighten spacing. */
@media (max-width:1024px) {
  .visit-grid {
    grid-template-columns: 1fr;
    gap: 48px;
  }

  .enquire-letter {
    border-radius: 24px;
  }

  .enquire-form-col {
    padding: 48px 40px;
  }

  .contact-row {
    grid-template-columns: 1fr;
    gap: 22px;
  }
}

@media (max-width:768px) {

  .visit,
  .enquire-fold {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .contact-hero-cta {
    margin-top: 32px;
    gap: 10px;
  }

  .visit-eyebrow,
  .enquire-eyebrow,
  .advisor-eyebrow {
    margin-bottom: 24px;
  }

  .visit-eyebrow-rule {
    width: 42px;
  }

  .visit-h {
    font-size: clamp(36px, 9vw, 60px);
  }

  .visit-rule {
    margin: 32px 0 28px;
  }

  .visit-channel,
  .advisor-channel {
    grid-template-columns: 1fr;
    gap: 6px;
    padding-bottom: 14px;
    border-bottom: 1px solid rgba(45, 56, 35, .12);
  }

  .visit-channel:last-child,
  .advisor-channel:last-child {
    border-bottom: 0;
    padding-bottom: 0;
  }

  .visit-channel dd,
  .advisor-channel dd {
    font-size: 18px;
  }

  .visit-map {
    aspect-ratio: 4/3;
    border-radius: 14px;
  }

  .enquire-h {
    font-size: clamp(28px, 7vw, 40px);
    margin-bottom: 32px;
  }

  .contact-form {
    gap: 20px;
  }

  .enquire-form-col {
    padding: 40px 28px;
  }
}

/* ===== index.html ===== */
:root {
  --olive: #2D3823;
  --ivory: #F2F6EA;
  --tea: #D5E6C2;
  --pistachio: #A4C36F;
  --moss: #141B0A;
  --white: #FFFFFF;
  --black: #000000;
  --rule: rgba(45, 56, 35, .18);
  --serif: "Fraunces", "Times New Roman", serif;
  --sans: "Inter", "Helvetica Neue", system-ui, sans-serif;
  --display: "Inter", "Helvetica Neue", sans-serif;
  /* ============================================
TYPOGRAPHY SYSTEM — Oakridge
6 heading sizes (H1 = biggest, H6 = smallest)
4 body sizes, 2 label sizes.
Use classes .h1–.h6, .body, .body-lg, .body-sm, .body-xs, .label, .label-lg
Or apply the matching CSS vars directly.
============================================ */
  /* HEADINGS — Fraunces serif, weight 500
Sizes calibrated to match Folds 1–3 (the approved baseline). */
  --t-h1-size: clamp(56px, 8.4vw, 132px);
  /* Hero · Curated · Invite */
  --t-h1-lh: .92;
  --t-h1-tracking: -.04em;
  --t-h2-size: clamp(44px, 6vw, 96px);
  /* Golf landscape head */
  --t-h2-lh: .95;
  --t-h2-tracking: -.035em;
  --t-h3-size: clamp(40px, 5vw, 80px);
  /* Villas · Amenities · Neighbourhood */
  --t-h3-lh: 1;
  --t-h3-tracking: -.03em;
  --t-h4-size: clamp(32px, 3.2vw, 48px);
  /* Distinct intro lead, big body leads */
  --t-h4-lh: 1.2;
  --t-h4-tracking: -.02em;
  --t-h5-size: clamp(22px, 2vw, 32px);
  /* Card titles, small heads */
  --t-h5-lh: 1.15;
  --t-h5-tracking: -.015em;
  --t-h6-size: clamp(18px, 1.4vw, 22px);
  /* Tiny heads */
  --t-h6-lh: 1.25;
  --t-h6-tracking: -.005em;
  /* BODY — Inter sans, weight 400 */
  --t-body-lg-size: clamp(18px, 1.4vw, 22px);
  /* lead paragraph */
  --t-body-size: 17px;
  /* default body */
  --t-body-sm-size: 15px;
  /* secondary copy */
  --t-body-xs-size: 13px;
  /* fine print, captions */
  /* LABELS — Inter, uppercase, tracked */
  --t-label-lg-size: 13px;
  /* section / eyebrow */
  --t-label-size: 11px;
  /* small caps, tags */
}

/* ----- TYPE BASE STYLES ----- */
h1,
.h1,
h2,
.h2,
h3,
.h3,
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  font-family: var(--serif);
  font-weight: 500;
  color: var(--olive);
  margin: 0;
}

h1,
.h1 {
  font-size: var(--t-h1-size);
  line-height: var(--t-h1-lh);
  letter-spacing: var(--t-h1-tracking);
}

h2,
.h2 {
  font-size: var(--t-h2-size);
  line-height: var(--t-h2-lh);
  letter-spacing: var(--t-h2-tracking);
}

h3,
.h3 {
  font-size: var(--t-h3-size);
  line-height: var(--t-h3-lh);
  letter-spacing: var(--t-h3-tracking);
}

h4,
.h4 {
  font-size: var(--t-h4-size);
  line-height: var(--t-h4-lh);
  letter-spacing: var(--t-h4-tracking);
}

h5,
.h5 {
  font-size: var(--t-h5-size);
  line-height: var(--t-h5-lh);
  letter-spacing: var(--t-h5-tracking);
}

h6,
.h6 {
  font-size: var(--t-h6-size);
  line-height: var(--t-h6-lh);
  letter-spacing: var(--t-h6-tracking);
}

.body-lg {
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-lg-size);
  line-height: 1.55;
  color: var(--olive);
}

.body {
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: var(--olive);
}

.body-sm {
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-sm-size);
  line-height: 1.55;
  color: var(--olive);
}

.body-xs {
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-xs-size);
  line-height: 1.5;
  color: var(--olive);
}

.label-lg {
  font-family: var(--display);
  font-weight: 500;
  font-size: var(--t-label-lg-size);
  line-height: 1.3;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--olive);
}

.label {
  font-family: var(--display);
  font-weight: 500;
  font-size: var(--t-label-size);
  line-height: 1.3;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--olive);
}

/* Subhead — Inter weight 500, between H6 and body. Slightly muted by default. */
.subhead {
  font-family: var(--display);
  font-weight: 500;
  font-size: clamp(16px, 1.3vw, 20px);
  line-height: 1.4;
  letter-spacing: 0;
  color: var(--olive);
  opacity: .7;
}

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

em,
i {
  font-style: normal;
  font-weight: inherit;
}

/* Honor the native HTML `hidden` attribute even when class-based
display rules (e.g. .enquire-form{display:flex}) would otherwise win */
[hidden] {
  display: none !important;
}

/* Fade-up reveal — applied to elements that should ease in on load / scroll-into-view */
.fade-up {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity .9s cubic-bezier(.2, .6, .2, 1), transform .9s cubic-bezier(.2, .6, .2, 1);
  will-change: opacity, transform;
}

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

@media (prefers-reduced-motion: reduce) {
  .fade-up {
    transition: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}

html {
  scroll-behavior: smooth;
  /* hide native scrollbar — page still scrolls, just no visible track */
  scrollbar-width: none;
  /* Firefox */
  -ms-overflow-style: none;
  /* IE / old Edge */
}

html::-webkit-scrollbar {
  display: none;
}

/* Chrome, Safari, Edge */
body::-webkit-scrollbar {
  display: none;
}

body {
  background: var(--ivory);
  color: var(--olive);
  font-family: var(--sans);
  font-weight: 400;
  font-size: 16px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

img {
  max-width: 100%;
  display: block;
}

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

button {
  font: inherit;
  cursor: pointer;
  border: 0;
  background: none;
  color: inherit;
}

/* layout */
.wrap {
  max-width: 1440px;
  margin: 0 auto;
  padding: 0 24px;
}

@media (max-width:768px) {
  .wrap {
    padding: 0 12px;
  }
}

/* eyebrow / labels */
.eyebrow {
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--olive);
  opacity: .8;
}

.index-num {
  font-family: var(--sans);
  font-size: 11px;
  letter-spacing: .22em;
  font-weight: 500;
  opacity: .55;
}

/* pill button */
/* New oval-arrow icon for pill buttons */
/* Icon colors flow via custom properties so they cascade through <use> shadow DOM */
/* Light-bg pills — invert: dark oval, light arrow */
/* Nav ghost pill hovers to olive — revert icon back to default colors */
/* Download icon — defaults: ivory oval, olive arrow */
.pill--light:hover {
  background: var(--white);
}

/* HEADER — glassmorphic floating capsule */
.nav-links a:hover {
  background: var(--pistachio);
  color: var(--moss);
}

@media (max-width:1024px) {
  .nav-links {
    display: none;
  }

  header {
    padding: 14px 12px;
  }

  header.scrolled {
    padding: 10px 12px;
  }

  .nav {
    padding: 6px 6px 6px 18px;
    gap: 8px;
  }
}

/* HERO — fold 1 */
.hero {
  height: 100vh;
  min-height: 640px;
  max-height: 1000px;
  padding-top: 110px;
  padding-bottom: 32px;
  display: flex;
  flex-direction: column;
  position: relative;
  overflow: hidden;
}

.hero::before {
  /* extend beyond .hero's max-width 1440 so the contour pattern reaches viewport edges */
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  width: 100vw;
  transform: translateX(-50%);
  z-index: -1;
  background-image: url("images/banner_bg.jpg");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: .9;
  pointer-events: none;
}

.hero-inner {
  flex: 1;
  display: flex;
  flex-direction: column;
  min-height: 0;
  width: 100%;
}

.hero-grid {
  display: grid;
  grid-template-columns: .85fr 1.35fr;
  gap: 56px;
  align-items: stretch;
  flex: 1;
  min-height: 0;
}

.hero-grid>div:first-child {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-height: 0;
}

.hero-headline {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h1-size);
  line-height: var(--t-h1-lh);
  letter-spacing: var(--t-h1-tracking);
  color: var(--olive);
}

.hero-headline em {
  font-weight: 500;
  font-variation-settings: "opsz" 144;
}

.hero-sub {
  margin-top: 24px;
  font-family: var(--sans);
  font-size: 14px;
  letter-spacing: .01em;
  font-weight: 500;
  color: var(--olive);
  opacity: .8;
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}

.hero-sub span {
  display: inline-flex;
  align-items: center;
  gap: 12px;
}

.hero-sub .dot {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--olive);
  opacity: .4;
}

.hero-cta {
  margin-top: 28px;
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.hero-visual {
  background: var(--olive);
  border-radius: 24px;
  width: 100%;
  height: 100%;
  position: relative;
  overflow: hidden;
}

.hero-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.play-btn {
  position: absolute;
  left: 32px;
  bottom: 32px;
  display: flex;
  align-items: center;
  gap: 14px;
  z-index: 2;
}

.play-btn:hover .play-glass {
  transform: scale(1.06);
  background: rgba(255, 255, 255, .22);
  box-shadow:
    0 18px 60px rgba(0, 0, 0, .24),
    inset 0 1px 0 rgba(255, 255, 255, .55),
    inset 0 -1px 0 rgba(0, 0, 0, .08);
}

/* Scroll-down cue — bottom-left of hero, vertical mono label + scanning track */
.scroll-cue {
  position: absolute;
  bottom: 32px;
  left: 24px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  z-index: 5;
  pointer-events: none;
}

.scroll-cue-label {
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: .35em;
  text-transform: uppercase;
  color: rgba(45, 56, 35, .6);
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  white-space: nowrap;
}

.scroll-cue-track {
  width: 2px;
  height: clamp(56px, 5.55vw, 160px);
  border-radius: 2px;
  background: rgba(45, 56, 35, .12);
  overflow: hidden;
  position: relative;
}

.scroll-cue-track::after {
  content: "";
  position: absolute;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(to bottom,
      transparent 0%,
      rgba(45, 56, 35, .95) 50%,
      transparent 100%);
  animation: scroll-cue-scan 1.8s cubic-bezier(.4, 0, .2, 1) infinite;
}

@keyframes scroll-cue-scan {
  0% {
    top: -100%;
    opacity: 0;
  }

  15% {
    opacity: 1;
  }

  85% {
    opacity: 1;
  }

  100% {
    top: 100%;
    opacity: 0;
  }
}

@media (max-width:767px) {
  .scroll-cue {
    display: none;
  }
}

@media (max-width:900px) {
  .play-btn {
    left: 20px;
    bottom: 20px;
    gap: 10px;
  }

  .play-glass {
    width: 56px;
    height: 56px;
  }

  .play-glass svg {
    width: 18px;
    height: 18px;
    margin-left: 2px;
  }
}

@media (max-width:900px) {
  .hero {
    height: auto;
    min-height: 100vh;
    max-height: none;
    padding: 120px 0 40px;
  }

  .hero-grid {
    grid-template-columns: 1fr;
    gap: 32px;
    align-items: start;
    flex: 0 0 auto;
  }

  .hero-grid>div:first-child {
    justify-content: flex-start;
  }

  .hero-headline {
    font-size: clamp(56px, 14vw, 96px);
  }

  .hero-visual {
    aspect-ratio: 4/3;
    height: auto;
  }
}

/* SECTION SCAFFOLDING */
.section-label .num {
  font-size: 11px;
  letter-spacing: .22em;
  font-weight: 500;
  opacity: .55;
}

/* FOLD 2 — World Curated */
.curated {
  height: 100vh;
  min-height: 640px;
  max-height: 1000px;
  padding-top: 0;
  padding-bottom: 0;
  display: flex;
  align-items: center;
}

.curated-grid {
  display: grid;
  /* Match hero column proportions exactly: image (left) takes the same
width as the hero text column, text (right) takes the same width
as the hero video. So the image's RIGHT edge aligns vertically
with the hero video's LEFT edge. */
  grid-template-columns: .85fr 1.35fr;
  gap: 56px;
  align-items: stretch;
  width: 100%;
  height: 78vh;
  max-height: 780px;
  min-height: 520px;
}

.curated-visual {
  background: var(--olive);
  border-radius: 24px;
  /* Extend the image 56px past its grid cell into the gap area, so its
right edge reaches the next column's left edge — wider visual, while
the text in column 2 stays put. */
  width: calc(100% + 56px);
  height: 100%;
  position: relative;
  overflow: hidden;
}

.curated-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: left bottom;
  display: block;
}

.curated-grid>div:last-child {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  /* Editorial indent — pulls headline + body away from the image edge */
  padding-left: 64px;
}

.curated-sub {
  margin-top: 20px;
  /* uses .subhead token */
  font-family: var(--display);
  font-weight: 500;
  font-size: clamp(16px, 1.3vw, 20px);
  line-height: 1.4;
  letter-spacing: 0;
  color: var(--olive);
  opacity: .7;
}

.curated-visual::after {
  content: "";
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(135deg,
      transparent 0, transparent 60px,
      rgba(242, 246, 234, .04) 60px, rgba(242, 246, 234, .04) 61px);
}

.curated-tag {
  position: absolute;
  top: 24px;
  left: 24px;
  background: rgba(242, 246, 234, .12);
  backdrop-filter: blur(8px);
  color: var(--ivory);
  padding: 8px 14px;
  border-radius: 999px;
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
  border: 1px solid rgba(242, 246, 234, .18);
}

.curated-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h2-size);
  line-height: var(--t-h2-lh);
  letter-spacing: var(--t-h2-tracking);
  color: var(--olive);
}

.curated-body {
  margin-top: 28px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  max-width: 480px;
  color: rgba(45, 56, 35, .85);
}

.curated-cta {
  margin-top: 36px;
}

@media (max-width:900px) {
  .curated {
    height: auto;
    min-height: auto;
    max-height: none;
    padding-top: 80px;
    padding-bottom: 80px;
  }

  .curated-grid {
    grid-template-columns: 1fr;
    gap: 40px;
    height: auto;
    max-height: none;
    min-height: 0;
  }

  .curated-visual {
    aspect-ratio: 4/3;
    height: auto;
    width: 100%;
  }

  .curated-grid>div:last-child {
    padding-left: 0;
  }
}

/* FOLD 3 — Distinctions */
.distinct {
  background: var(--ivory);
}

.distinct-head {
  margin-bottom: 64px;
  max-width: 1080px;
}

.distinct-sub {
  margin-bottom: 36px;
  /* uses .subhead token */
  font-family: var(--display);
  font-weight: 500;
  font-size: clamp(16px, 1.3vw, 20px);
  line-height: 1.4;
  letter-spacing: 0;
  color: var(--olive);
  opacity: .7;
}

.distinct-sub-line {
  display: inline-block;
  vertical-align: middle;
  height: .34em;
  width: auto;
  margin-right: 14px;
  transform: translateY(-1px);
}

.distinct-intro {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(22px, 2vw, 32px);
  line-height: 1.3;
  letter-spacing: -.015em;
  color: var(--olive);
}

/* Variant B — intro lead paragraph (custom: H4 + 10% size, generous breathing room) */
#distinct-v1 .distinct-intro {
  font-size: clamp(35px, 3.52vw, 53px);
  line-height: 1.35;
  /* was 1.2 — more breathing room, editorial feel */
  letter-spacing: -.018em;
  /* slightly looser than H4 tracking */
}

.distinct-intro .word {
  display: inline-block;
  opacity: .16;
  transform: translateY(6px);
  transition: opacity .9s cubic-bezier(.2, .6, .2, 1), transform .9s cubic-bezier(.2, .6, .2, 1);
  transition-delay: var(--delay-rev, 0ms);
  will-change: opacity, transform;
}

.distinct-intro .word-bold {
  font-weight: 500;
}

.distinct-intro.in-view .word {
  opacity: 1;
  transform: translateY(0);
  transition-delay: var(--delay-fwd, 0ms);
}

@media (prefers-reduced-motion:reduce) {
  .distinct-intro .word {
    transition: none;
    opacity: 1;
    transform: none;
  }
}

/* ============================================================
HEADLINE REVEAL — same word-by-word fade-in as .distinct-intro,
applied to every H1–H6 on the page. JS adds `.reveal-words` to
each heading and splits text into <span class="word"> while
preserving inline markup (em, strong, br). IntersectionObserver
toggles `.in-view` to drive the staggered fade-in.
============================================================ */
.reveal-words .word {
  display: inline-block;
  opacity: .16;
  transform: translateY(6px);
  transition: opacity .9s cubic-bezier(.2, .6, .2, 1), transform .9s cubic-bezier(.2, .6, .2, 1);
  transition-delay: var(--delay-rev, 0ms);
  will-change: opacity, transform;
}

.reveal-words.in-view .word {
  opacity: 1;
  transform: translateY(0);
  transition-delay: var(--delay-fwd, 0ms);
}

@media (prefers-reduced-motion:reduce) {
  .reveal-words .word {
    transition: none;
    opacity: 1;
    transform: none;
  }
}

.distinct-sublabel {
  margin-bottom: 8px;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--olive);
  opacity: .6;
}

/* Distinct carousel — Variant B */
/* Used during seamless-loop silent reset to instantly snap without any morph */
.dc-carousel.dc-no-anim,
.dc-carousel.dc-no-anim * {
  transition: none !important;
}

.dc-carousel {
  margin-top: 48px;
  padding-bottom: 0;
  /* widths are computed by JS — defaults: 1 big + 3 same-width cards visible.
Medium is just a small card that's a bit taller (height-only hint). */
  --dc-feat-w: 486px;
  --dc-med-w: 286px;
  --dc-small-w: 286px;
  --dc-feat-h: 374px;
  --dc-med-h: 374px;
  --dc-small-h: 374px;
  --dc-gap: 16px;
}

.dc-viewport {
  position: relative;
  overflow: hidden;
  height: var(--dc-feat-h);
  margin-bottom: 0;
}

.dc-track {
  display: flex;
  gap: var(--dc-gap);
  align-items: flex-start;
  transition: transform .65s cubic-bezier(.2, .6, .2, 1);
  will-change: transform;
}

.dc-card {
  flex: 0 0 var(--dc-small-w);
  height: var(--dc-small-h);
  border-radius: 20px;
  overflow: hidden;
  position: relative;
  background: var(--olive);
  color: var(--ivory);
  border-color: transparent;
  transition: flex-basis .65s cubic-bezier(.2, .6, .2, 1),
    height .65s cubic-bezier(.2, .6, .2, 1),
    background .5s ease,
    color .5s ease;
}

/* medium card — same dark bg, just bigger */
.dc-card.is-medium {
  flex: 0 0 var(--dc-med-w);
  height: var(--dc-med-h);
}

/* featured card — same dark palette as smalls; differentiated by width + content layout */
.dc-card.is-featured {
  flex: 0 0 var(--dc-feat-w);
  height: var(--dc-feat-h);
}

/* image area — fills the card; same image-shape transition for the featured layout */
.dc-imagebox {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  transition: left .65s cubic-bezier(.2, .6, .2, 1);
}

.dc-card.is-featured .dc-imagebox {
  left: 50%;
}

/* Icon at top-left of every card; bigger on the featured */
.dc-icon {
  position: absolute;
  top: 24px;
  left: 24px;
  width: 88px;
  height: 88px;
  z-index: 2;
  /* recolor black-fill SVG to #D5E7C2 (pale tea green) via filter chain */
  filter: brightness(0) saturate(100%) invert(91%) sepia(18%) saturate(396%) hue-rotate(40deg) brightness(102%) contrast(89%);
  opacity: .95;
  object-fit: contain;
}

/* Card bg colors — alternate olive / moss across 4 variants */
.dc-card.dc-bg-1 {
  background: var(--olive);
}

.dc-card.dc-bg-2 {
  background: var(--moss);
}

.dc-card.dc-bg-3 {
  background: var(--olive);
}

.dc-card.dc-bg-4 {
  background: var(--moss);
}

/* SVG pattern overlay — original olive fill (#364026), low opacity for subtle texture */
.dc-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: var(--pattern-url);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: .22;
  z-index: 0;
  pointer-events: none;
  /* lighten blend so the dark-olive pattern reads as a subtle highlight on the dark card */
  mix-blend-mode: screen;
}

/* Dark gradient at bottom for text legibility (matches amenities) */
.dc-card::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top,
      rgba(20, 27, 10, .7) 0%,
      rgba(20, 27, 10, .25) 40%,
      rgba(20, 27, 10, 0) 70%);
  z-index: 1;
  pointer-events: none;
}

/* single text block — repositions, title resizes, desc fades in */
.dc-text {
  position: absolute;
  z-index: 2;
  display: flex;
  flex-direction: column;
  /* title on top, desc below it */
  gap: 14px;
  bottom: 22px;
  left: 22px;
  right: 22px;
  transition: bottom .65s cubic-bezier(.2, .6, .2, 1),
    left .65s cubic-bezier(.2, .6, .2, 1),
    right .65s cubic-bezier(.2, .6, .2, 1);
}

.dc-card.is-featured .dc-text {
  bottom: 32px;
  left: 32px;
  right: 32px;
  /* full card width minus padding */
}

/* small + medium card titles use H5 token; featured uses H4 */
.dc-title {
  margin: 0;
  font-family: var(--serif);
  font-weight: 200;
  color: inherit;
  font-size: var(--t-h5-size);
  line-height: var(--t-h5-lh);
  letter-spacing: var(--t-h5-tracking);
  transition: font-size .65s cubic-bezier(.2, .6, .2, 1),
    line-height .65s cubic-bezier(.2, .6, .2, 1),
    letter-spacing .65s cubic-bezier(.2, .6, .2, 1);
}

.dc-card.is-featured .dc-title {
  font-size: var(--t-h4-size);
  line-height: var(--t-h4-lh);
  letter-spacing: var(--t-h4-tracking);
}

.dc-desc {
  margin: 0;
  font-size: 14px;
  line-height: 1.55;
  color: inherit;
  opacity: 0;
  max-height: 0;
  overflow: hidden;
  /* pure fade — no max-height growth animation. Layout reflows instantly,
only opacity transitions, so the text appears in place rather than growing. */
  transition: opacity .55s cubic-bezier(.2, .6, .2, 1);
}

.dc-card.is-featured .dc-desc {
  opacity: .78;
  max-height: 200px;
}

/* Controls — Key Distinctions label (left) + prev/next arrows (right) */
.dc-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 24px;
}

.dc-controls .distinct-sublabel {
  margin-bottom: 0;
}

.dc-arrows {
  display: flex;
  gap: 12px;
}

.dc-btn {
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity .25s ease;
}

.dc-btn:hover {
  opacity: .78;
}

.dc-btn .btn-arrow {
  width: 44px;
  height: 36px;
  flex-shrink: 0;
  display: inline-block;
  transition: transform .3s cubic-bezier(.2, .6, .2, 1);
  overflow: visible;
}

/* dark oval + white arrow inside (overrides default ivory/olive via cascading custom prop) */
.dc-btn {
  --ico-bg: var(--olive);
  --ico-fg: var(--ivory);
}

/* prev arrow — mirror horizontally */
.dc-btn .btn-arrow.dc-arrow-flip {
  transform: scaleX(-1);
}

/* hover micro-nudge */
.dc-btn.dc-next:hover .btn-arrow {
  transform: translateX(3px);
}

.dc-btn.dc-prev:hover .btn-arrow {
  transform: scaleX(-1) translateX(3px);
}

@media (max-width:900px) {
  .dc-carousel {
    --dc-feat-h: 352px;
    --dc-med-h: 352px;
    --dc-small-h: 352px;
  }

  /* on mobile, featured card uses single-column layout (no left/right split) */
  .dc-card.is-featured .dc-imagebox {
    left: 0;
  }

  .dc-card.is-featured .dc-text {
    right: 22px;
  }

  .dc-btn .btn-arrow {
    width: 44px;
    height: 36px;
  }
}

/* Variant A — hidden (kept in DOM for easy toggle back) */
#distinct {
  display: none;
}

/* Variant A/B comparison label */
.variant-label {
  display: inline-block;
  margin-bottom: 36px;
  padding: 6px 14px;
  border-radius: 999px;
  background: rgba(45, 56, 35, .06);
  border: 1px solid var(--rule);
  font-family: var(--display);
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--olive);
  opacity: .7;
}

/* New 2-column sticky stacking layout */
.distinct-grid {
  display: grid;
  grid-template-columns: .85fr 1.15fr;
  gap: 80px;
  align-items: start;
}

.distinct-left {
  position: sticky;
  top: 120px;
  align-self: start;
}

.distinct-stack {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.distinct-card {
  position: sticky;
  top: 120px;
  border-radius: 24px;
  padding: 36px;
  display: grid;
  grid-template-columns: 1.3fr .7fr;
  gap: 32px;
  align-items: stretch;
  min-height: 340px;
  background: var(--ivory);
  color: var(--olive);
  border: 1px solid var(--rule);
  transition: transform .4s ease;
}

.distinct-card:nth-child(1) {
  top: 120px;
}

.distinct-card:nth-child(2) {
  top: 138px;
}

.distinct-card:nth-child(3) {
  top: 156px;
}

.distinct-card:nth-child(4) {
  top: 174px;
}

.distinct-card:nth-child(5) {
  top: 192px;
}

.distinct-card:nth-child(6) {
  top: 210px;
}

/* alternate even cards to dark olive */
.distinct-card:nth-child(even) {
  background: var(--olive);
  color: var(--ivory);
  border-color: transparent;
}

.dc-text {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 8px 4px;
}

.dc-num {
  font-family: var(--display);
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  font-weight: 500;
  opacity: .55;
  margin-bottom: auto;
}

.dc-title {
  font-family: var(--serif);
  font-weight: 200;
  font-size: clamp(26px, 2.4vw, 38px);
  line-height: 1.05;
  letter-spacing: -.02em;
  margin-top: 24px;
}

.dc-body {
  margin-top: 14px;
  font-size: 15px;
  line-height: 1.55;
  opacity: .78;
  max-width: 380px;
}

.dc-visual {
  border-radius: 18px;
  background: var(--tea);
  min-height: 280px;
  align-self: stretch;
}

.distinct-card:nth-child(even) .dc-visual {
  background: var(--pistachio);
}

@media (max-width:900px) {
  .distinct-grid {
    grid-template-columns: 1fr;
    gap: 48px;
  }

  .distinct-left {
    position: static;
    top: auto;
  }

  .distinct-card {
    position: static;
    top: auto;
    grid-template-columns: 1fr;
    min-height: auto;
    padding: 28px;
  }

  .dc-visual {
    min-height: 200px;
    order: -1;
  }
}

.distinct-list {
  display: flex;
  flex-direction: column;
  border-top: 1px solid var(--rule);
}

.distinct-row {
  display: grid;
  grid-template-columns: 80px 1fr 1.2fr 60px;
  gap: 32px;
  padding: 36px 0;
  border-bottom: 1px solid var(--rule);
  align-items: center;
  transition: padding .35s ease;
  cursor: default;
}

.distinct-row:hover {
  padding: 48px 0;
}

.distinct-row .num {
  font-family: var(--sans);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: .05em;
  opacity: .5;
}

.distinct-row .title {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(24px, 2.6vw, 36px);
  line-height: 1.1;
  letter-spacing: -.015em;
}

.distinct-row .title em {}

.distinct-row .body {
  font-size: 15px;
  line-height: 1.55;
  color: rgba(45, 56, 35, .78);
}

.distinct-row .arrow {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--rule);
  display: flex;
  align-items: center;
  justify-content: center;
  justify-self: end;
  transition: all .25s ease;
}

.distinct-row:hover .arrow {
  background: var(--olive);
  color: var(--ivory);
  border-color: var(--olive);
}

.distinct-row .arrow svg {
  width: 14px;
  height: 14px;
  transition: transform .25s ease;
}

.distinct-row:hover .arrow svg {
  transform: translate(2px, -2px);
}

@media (max-width:900px) {
  .distinct-head {
    grid-template-columns: 1fr;
    gap: 24px;
  }

  .distinct-row {
    grid-template-columns: 48px 1fr 36px;
    gap: 16px;
  }

  .distinct-row .body {
    display: none;
  }
}

/* ============================================
SECTION TRANSITION SYSTEM
Every fold ends with 40px rounded bottom corners.
Each section after the first overlaps upward by 40px so the previous
section's curves visibly carve into the next section's bg.
z-index counts down so earlier sections stack above later ones.
============================================ */
.hero,
.curated,
#distinct-v1,
.golf,
.villas,
.neigh,
.invite {
  position: relative;
  border-bottom-left-radius: 40px;
  border-bottom-right-radius: 40px;
}

.hero {
  background: var(--ivory);
  z-index: 8;
}

.curated {
  background: var(--pistachio);
  z-index: 7;
  margin-top: -40px;
}

.curated-inner {
  width: 100%;
}

#distinct-v1 {
  background: var(--ivory);
  z-index: 6;
  padding-bottom: 80px;
}

/* Overlap mechanic only applied where adjacent sections have different bg colors,
so the rounded curves are actually visible: Distinct→Golf, Golf→Villas, Neigh→Invite.
.golf, .villas, .invite handle their own margin-top:-40 + padding-top below. */
/* FOLD 4 — Golf Landscape */
.golf {
  background: var(--olive);
  color: var(--ivory);
  padding-top: 0;
  /* image extends up into the overlap so it shows through distinct's rounded corners */
  padding-bottom: 140px;
  margin-top: -40px;
  z-index: 5;
  overflow: hidden;
}

/* Wrapper crops image; image is taller than wrap so parallax translate doesn't expose edges */
.golf-hero-wrap {
  width: 100%;
  height: clamp(380px, 48vw, 640px);
  overflow: hidden;
  position: relative;
  margin-bottom: 48px;
  /* reduced from 120px — closer to headline */
}

.golf-hero {
  position: absolute;
  top: -80px;
  left: 0;
  right: 0;
  width: 100%;
  height: calc(100% + 160px);
  object-fit: fill;
  /* stretch to fill wrap exactly — no zoom-crop */
  will-change: transform;
  z-index: 1;
}

/* SVG wave overlay — sits on top of the parallax image, anchored to bottom, full width, no parallax */
.golf-wave {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: auto;
  display: block;
  pointer-events: none;
  z-index: 2;
}

.golf::before {
  content: "";
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(0deg,
      transparent 0, transparent 80px,
      rgba(242, 246, 234, .03) 80px, rgba(242, 246, 234, .03) 81px);
  pointer-events: none;
}

.golf .section-label {
  color: var(--ivory);
}

.golf .section-label .line {
  background: rgba(242, 246, 234, .2);
  max-width: 120px;
}

.golf-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h2-size);
  line-height: var(--t-h2-lh);
  letter-spacing: var(--t-h2-tracking);
  max-width: 900px;
  color: var(--ivory);
  position: relative;
}

.golf-stat {
  margin-top: 80px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: end;
  position: relative;
}

.golf-numbers {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(80px, 14vw, 220px);
  line-height: .85;
  letter-spacing: -.05em;
  color: var(--ivory);
}

.golf-numbers .slash {
  opacity: .35;
  font-weight: 300;
}

.golf-numbers em {
  opacity: .9;
}

.golf-stat-side {
  border-left: 1px solid rgba(242, 246, 234, .2);
  padding-left: 32px;
  align-self: end;
}

.golf-stat-side .lead {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(20px, 1.8vw, 28px);
  line-height: 1.35;
  color: var(--ivory);
  max-width: 380px;
}

.golf-body {
  margin-top: 56px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: start;
  border-top: 1px solid rgba(242, 246, 234, .18);
  padding-top: 40px;
}

.golf-body p {
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: rgba(242, 246, 234, .82);
  max-width: 520px;
}

.golf-body .pill {
  align-self: center;
  justify-self: end;
}

@media (max-width:900px) {
  .golf-stat {
    grid-template-columns: 1fr;
    gap: 32px;
  }

  .golf-stat-side {
    border-left: 0;
    padding-left: 0;
    border-top: 1px solid rgba(242, 246, 234, .18);
    padding-top: 24px;
  }

  .golf-body {
    grid-template-columns: 1fr;
    gap: 24px;
  }

  .golf-body .pill {
    justify-self: start;
  }
}

/* FOLD 5 — Villas */
.villas {
  background: var(--ivory);
  padding-top: 90px;
  /* 50 visible + 40 overlap, was 180 */
  padding-bottom: 70px;
  /* halved from 140 */
  margin-top: -40px;
  z-index: 4;
  overflow: hidden;
}

/* ============================================
VILLAS BENTO — editorial 2-column grid:
text top-left  |  feature image full-height right
small images bottom-left
============================================ */
.villas-bento {
  display: grid;
  grid-template-columns: 1.05fr .95fr;
  grid-template-rows: 1.15fr .85fr;
  gap: 16px;
  grid-template-areas:
    "text feature"
    "text imgs";
  margin-top: 32px;
}

.villas-card {
  position: relative;
  border-radius: 28px;
  overflow: hidden;
}

/* Left text card — full height, topographic contour bg fitted to top-left */
.villas-text {
  grid-area: text;
  background-color: var(--ivory);
  background-image: url("images/banner_bg.jpg");
  background-size: auto;
  background-position: top left;
  background-repeat: no-repeat;
  border: 1px solid var(--rule);
  padding: 48px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
}

.villas-text .villas-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h3-size);
  line-height: var(--t-h3-lh);
  letter-spacing: var(--t-h3-tracking);
  color: var(--olive);
  max-width: 520px;
}

/* Pistachio CTA button on the villas text card */
.villas-cta {
  background: var(--pistachio);
  color: var(--moss);
  --ico-bg: var(--moss);
  --ico-fg: var(--ivory);
}

.villas-cta:hover {
  background: var(--olive);
  color: var(--ivory);
  --ico-bg: var(--ivory);
  --ico-fg: var(--olive);
}

.villas-text .villas-body {
  margin-top: 24px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: rgba(45, 56, 35, .78);
  max-width: 480px;
}

.villas-text .villas-cta {
  margin-top: 36px;
  align-self: flex-start;
}

/* Feature card — top-right; villa exterior photograph */
.villas-feature {
  grid-area: feature;
  background: var(--olive);
  color: var(--ivory);
  padding: 32px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  min-height: 368px;
}

/* shared image style for all right-side bento cards */
.villas-card-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  z-index: 0;
  display: block;
}

.villas-feature .villas-card-meta {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-width: 80%;
}

.villas-feature .villas-card-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: rgba(242, 246, 234, .78);
}

.villas-feature .villas-card-title {
  margin: 0;
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h4-size);
  line-height: var(--t-h4-lh);
  letter-spacing: var(--t-h4-tracking);
  color: var(--ivory);
}

/* Bottom-left two-card row */
.villas-img-row {
  grid-area: imgs;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}

.villas-img {
  padding: 28px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  min-height: 192px;
}

/* fallback bg colors in case images fail to load */
.villas-img--a {
  background: var(--tea);
}

.villas-img--b {
  background: var(--pistachio);
}

.villas-img .villas-card-name {
  position: relative;
  z-index: 2;
  margin: 0;
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h5-size);
  line-height: var(--t-h5-lh);
  letter-spacing: var(--t-h5-tracking);
  color: var(--ivory);
}

/* Tag pills (shared across all bento cards) */
.villas-card-tag {
  display: inline-flex;
  align-items: center;
  padding: 7px 14px;
  border-radius: 999px;
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  background: rgba(45, 56, 35, .1);
  border: 1px solid rgba(45, 56, 35, .2);
  color: var(--olive);
  z-index: 1;
  align-self: flex-start;
}

/* Inverted tag on dark featured card */
.villas-feature .villas-card-tag {
  background: rgba(242, 246, 234, .16);
  border-color: rgba(242, 246, 234, .24);
  color: var(--ivory);
}

/* Corner arrow on feature card */
.villas-corner {
  position: absolute;
  top: 28px;
  right: 28px;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid rgba(242, 246, 234, .28);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--ivory);
  transition: background .25s ease, transform .25s ease;
  z-index: 2;
}

.villas-corner:hover {
  background: rgba(242, 246, 234, .1);
  transform: scale(1.05);
}

.villas-corner svg {
  width: 14px;
  height: 14px;
}

@media (max-width:900px) {
  .villas-bento {
    grid-template-columns: 1fr;
    grid-template-rows: auto auto auto;
    grid-template-areas:
      "text"
      "feature"
      "imgs";
    gap: 14px;
  }

  .villas-feature {
    min-height: 336px;
  }

  .villas-text {
    padding: 32px;
    min-height: auto;
  }

  .villas-img-row {
    grid-template-columns: 1fr 1fr;
  }

  .villas-img {
    min-height: 160px;
    padding: 20px;
  }
}

@media (max-width:560px) {
  .villas-img-row {
    grid-template-columns: 1fr;
  }
}

/* FOLD 6 — Amenities */
.amenities {
  background: var(--tea);
  border-radius: 32px;
  margin: 0 24px;
  padding: 120px 48px;
}

.amen-head {
  display: grid;
  grid-template-columns: 1.1fr .9fr;
  gap: 80px;
  align-items: end;
  margin-bottom: 80px;
}

.amen-head-right {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 32px;
}

.amen-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h3-size);
  line-height: var(--t-h3-lh);
  letter-spacing: var(--t-h3-tracking);
}

.amen-body {
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: rgba(45, 56, 35, .85);
}

/* ============================================
AMENITIES CAROUSEL — horizontal track of tall image cards
============================================ */
.amen-carousel {
  margin-top: 8px;
  position: relative;
}

.amen-nav {
  display: flex;
  justify-content: flex-end;
  gap: 14px;
  margin-bottom: 24px;
}

.amen-btn {
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity .25s ease;
  --ico-bg: var(--olive);
  --ico-fg: var(--ivory);
}

.amen-btn:hover {
  opacity: .78;
}

.amen-btn:disabled {
  opacity: .3;
  cursor: not-allowed;
}

.amen-btn .btn-arrow {
  width: 41px;
  height: 33px;
  flex-shrink: 0;
  display: inline-block;
  transition: transform .3s cubic-bezier(.2, .6, .2, 1);
  overflow: visible;
}

.amen-btn.amen-prev .btn-arrow {
  transform: scaleX(-1);
}

.amen-btn.amen-next:hover .btn-arrow {
  transform: translateX(3px);
}

.amen-btn.amen-prev:hover .btn-arrow {
  transform: scaleX(-1) translateX(3px);
}

.amen-viewport {
  overflow-x: auto;
  overflow-y: hidden;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}

.amen-viewport::-webkit-scrollbar {
  display: none;
}

.amen-track {
  display: flex;
  gap: 16px;
  padding-bottom: 4px;
}

.amen-card {
  flex: 0 0 calc((100% - 48px) / 4);
  /* 4 visible + 3 gaps */
  min-width: 240px;
  aspect-ratio: 3/4;
  position: relative;
  border-radius: 24px;
  overflow: hidden;
  background: var(--olive);
  color: var(--ivory);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 28px;
}

/* Image-area placeholder bg fills the card; will be replaced by <img> later */
.amen-card-bg {
  position: absolute;
  inset: 0;
  z-index: 0;
}

/* Subtle topographic placeholder pattern + alternating tints for variety */
.amen-card--01 .amen-card-bg,
.amen-card--05 .amen-card-bg,
.amen-card--09 .amen-card-bg {
  background: var(--olive);
  background-image:
    radial-gradient(ellipse at 30% 20%, rgba(242, 246, 234, .06), transparent 60%),
    repeating-linear-gradient(45deg, transparent 0, transparent 50px, rgba(242, 246, 234, .04) 50px, rgba(242, 246, 234, .04) 51px);
}

.amen-card--02 .amen-card-bg,
.amen-card--06 .amen-card-bg {
  background: var(--moss);
  background-image:
    radial-gradient(ellipse at 70% 30%, rgba(242, 246, 234, .05), transparent 60%),
    repeating-radial-gradient(ellipse at 50% 60%, transparent 0, transparent 36px, rgba(242, 246, 234, .04) 36px, rgba(242, 246, 234, .04) 37px);
}

.amen-card--03 .amen-card-bg,
.amen-card--07 .amen-card-bg {
  background: var(--olive);
  background-image:
    radial-gradient(circle at 40% 60%, rgba(242, 246, 234, .08), transparent 50%),
    repeating-linear-gradient(135deg, transparent 0, transparent 60px, rgba(242, 246, 234, .03) 60px, rgba(242, 246, 234, .03) 61px);
}

.amen-card--04 .amen-card-bg,
.amen-card--08 .amen-card-bg {
  background: var(--moss);
  background-image:
    radial-gradient(ellipse at 50% 50%, rgba(164, 195, 111, .08), transparent 60%);
}

/* Real photographs for the cards that have matching images in
images/amenities/. These rules sit AFTER the placeholder gradient
rules above so they win by source order. Cards 02 (Clubhouse), 04
(Spa) and 09 (Lakes & Parks) keep the placeholder pattern until
their photos are supplied. */
.amen-card--01 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/exculsive_golf_course.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--02 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/golf_facing_clubhouse.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--03 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/resturant.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--04 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/spa.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--05 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/swimming_pool.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--06 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/sports.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--07 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/guest_suit.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--08 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/walk_trail.jpg");
  background-size: cover;
  background-position: center;
}

.amen-card--09 .amen-card-bg {
  background: var(--olive);
  background-image: url("images/amenities/lakes.jpg");
  background-size: cover;
  background-position: center;
}

/* Dark gradient at bottom for text legibility */
.amen-card::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top,
      rgba(20, 27, 10, .7) 0%,
      rgba(20, 27, 10, .25) 40%,
      rgba(20, 27, 10, 0) 70%);
  z-index: 1;
  pointer-events: none;
}

.amen-card-title {
  position: relative;
  z-index: 2;
  margin: 0;
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h5-size);
  line-height: var(--t-h5-lh);
  letter-spacing: var(--t-h5-tracking);
  color: var(--ivory);
}

@media (max-width:1024px) {
  .amenities {
    margin: 0 12px;
    padding: 80px 28px;
  }

  .amen-head {
    grid-template-columns: 1fr;
    gap: 24px;
    align-items: start;
  }

  .amen-card {
    flex: 0 0 calc((100% - 32px) / 3);
    min-width: 200px;
  }
}

@media (max-width:720px) {
  .amen-card {
    flex: 0 0 70%;
    min-width: 0;
  }
}

/* FOLD 7 — Neighbourhood */
.neigh {
  background: var(--ivory);
  padding-top: 140px;
  padding-bottom: 140px;
  z-index: 3;
  overflow: hidden;
}

.neigh-grid {
  display: grid;
  grid-template-columns: .9fr 1.1fr;
  gap: 60px;
  align-items: center;
}

.neigh-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h3-size);
  line-height: var(--t-h3-lh);
  letter-spacing: var(--t-h3-tracking);
}

.neigh-body {
  margin-top: 28px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  max-width: 480px;
  color: rgba(45, 56, 35, .85);
}

.neigh-loc {
  margin-top: 36px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  border-left: 1px solid var(--rule);
  padding-left: 18px;
}

.neigh-loc .label {
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
  opacity: .7;
}

.neigh-loc .place {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 300;
}

.neigh-cta {
  margin-top: 36px;
}

.neigh-visual {
  background: var(--pistachio);
  border-radius: 24px;
  aspect-ratio: 5/4;
  position: relative;
  overflow: hidden;
}

.neigh-map {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  width: 100%;
  /* iframe extends 32px below the container so Google's attribution strip
(Keyboard shortcuts · Map data · Terms · Report a map error) gets clipped
by .neigh-visual's overflow:hidden */
  height: calc(100% + 32px);
  border: 0;
  display: block;
  filter: saturate(.85) contrast(1.02);
}

/* Custom centered pin — fluorescent green core with pulsing rings */
.neigh-pin {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: #39ff14;
  transform: translate(-50%, -50%);
  box-shadow: 0 0 0 8px rgba(20, 27, 10, .45), 0 0 0 20px rgba(57, 255, 20, .28), 0 0 0 44px rgba(57, 255, 20, .12);
  z-index: 3;
  pointer-events: none;
}

.neigh-pin-pulse {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 3px solid #39ff14;
  transform: translate(-50%, -50%);
  animation: neigh-pulse 2.6s ease-out infinite;
  pointer-events: none;
}

.neigh-pin-pulse--delay {
  animation-delay: 1.3s;
}

@keyframes neigh-pulse {
  0% {
    transform: translate(-50%, -50%) scale(1);
    opacity: .6;
  }

  80% {
    transform: translate(-50%, -50%) scale(5);
    opacity: 0;
  }

  100% {
    transform: translate(-50%, -50%) scale(5);
    opacity: 0;
  }
}

@media (max-width:900px) {
  .neigh-grid {
    grid-template-columns: 1fr;
    gap: 40px;
  }
}

/* FOLD 8 — Final Invitation */
.invite {
  background: var(--pistachio);
  color: var(--moss);
  padding-top: 200px;
  padding-bottom: 160px;
  text-align: center;
  margin-top: -40px;
  z-index: 2;
  overflow: hidden;
}

.invite::before {
  /* full-fill SVG vector behind the headline + body — subtle at 16% with parallax */
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("images/bg_vector.svg");
  background-size: cover;
  background-position: center calc(50% + var(--invite-bg-y, 0px));
  background-repeat: no-repeat;
  opacity: .16;
  pointer-events: none;
  will-change: background-position;
  z-index: 0;
}

/* Pistachio radial glow above the vector — restores legibility of the headline + body */
.invite::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 60% 55% at 50% 42%,
      var(--pistachio) 0%,
      rgba(164, 195, 111, .88) 30%,
      rgba(164, 195, 111, 0) 70%);
  pointer-events: none;
  z-index: 1;
}

.invite>.wrap {
  position: relative;
  z-index: 2;
}

.invite .section-label {
  justify-content: center;
  color: var(--moss);
}

.invite .section-label .line {
  background: rgba(20, 27, 10, .2);
}

.invite-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h1-size);
  line-height: var(--t-h1-lh);
  letter-spacing: var(--t-h1-tracking);
  color: var(--moss);
  max-width: 1100px;
  margin: 0 auto;
}

.invite-body {
  margin: 36px auto 0;
  max-width: 520px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: rgba(20, 27, 10, .78);
}

.invite-cta {
  margin-top: 48px;
  display: flex;
  gap: 14px;
  justify-content: center;
  flex-wrap: wrap;
}

/* FOOTER */
footer {
  background: var(--moss);
  color: var(--ivory);
  padding-top: 120px;
  /* 80 + 40 overlap */
  padding-bottom: 32px;
  margin-top: -40px;
  /* slide UP under invite's rounded bottom corners */
  position: relative;
  z-index: 1;
}

.foot-col h4 {
  font-family: var(--display);
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  font-weight: 500;
  color: var(--pistachio);
  margin-bottom: 18px;
}

@media (max-width:900px) {
  .foot-grid {
    grid-template-columns: 1fr 1fr;
    gap: 32px;
  }
}

/* small utilities */
.arrow-ico {
  display: inline-block;
  width: 14px;
  height: 14px;
}

/* Full-screen video modal */
@media (max-width:768px) {
  .video-modal {
    padding: 12px;
  }

  .video-modal-close {
    top: 16px;
    right: 16px;
    width: 44px;
    height: 44px;
  }

  .video-modal-video {
    max-height: 80vh;
  }
}

/* ============================================================
LOADING SCREEN + ARCHIVE TRANSITION
------------------------------------------------------------
Phase 1: dark moss screen, centered logo color-cycling through
brand palette while page loads.
Phase 2: "Archive" transition — SVG spiral path draws itself
and thickens to fill the screen with ivory, then the
path collapses to reveal the page underneath.
Adapted from the Astro/Barba/GSAP "example-5-transition" with
pure CSS stroke-dasharray (no DrawSVGPlugin dependency).
============================================================ */
@keyframes rt-logo-pulse {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: .55;
  }
}

/* "Works" curve-morph transition (replaces the spiral).
Path morphs through three states by toggling classes:
1) base       d="M 0 100 V 100 Q 50 100 100 100 V 100 z" — flat at bottom (invisible)
2) .is-rising d="M 0 100 V 50  Q 50 0   100 50  V 100 z" — curved curtain rising
3) .is-filled d="M 0 100 V 0   Q 50 0   100 0   V 100 z" — fully filled rectangle
Animated via the CSS `d:` property (modern browsers, fallback = snap). */
/* Lock body scroll while loader is visible */
/* ================================================================
HAMBURGER + MOBILE MENU (desktop hidden; visible ≤1024px)
================================================================ */
.mobile-menu-nav a {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(28px, 7vw, 40px);
  line-height: 1.15;
  letter-spacing: -.015em;
  color: var(--ivory);
  padding: 8px 12px;
  transition: color .25s ease, opacity .25s ease;
  /* staggered entrance — driven via .is-open */
  opacity: 0;
  transform: translateY(8px);
  transition: opacity .5s cubic-bezier(.2, .6, .2, 1) var(--menu-delay, 0ms),
    transform .5s cubic-bezier(.2, .6, .2, 1) var(--menu-delay, 0ms),
    color .25s ease;
}

/* Mobile menu pills override the light-bg pill style (we're on dark moss) */
/* ================================================================
RESPONSIVE PASS — desktop layout untouched.
Breakpoints: ≤1024 (tablet refinements via existing rules + hamburger),
≤768  (phone — heavy stacking, sizing, accordion footer),
≤480  (small phone — tightest constraints).
Existing fold-level @media(max-width:900) rules already stack most
sections; this block layers refinements on top.
================================================================ */
/* ----- TABLET + MOBILE: hide nav-cta pills, show hamburger ----- */
@media (max-width:1024px) {
  .nav-cta {
    display: none;
  }

  .hamburger {
    display: flex;
  }

  .nav {
    grid-template-columns: auto auto;
    justify-content: space-between;
  }
}

/* ----- PHONE — ≤768 ------------------------------------------ */
@media (max-width:768px) {

  /* Wrap gutters: 12 → 20 (more comfortable reading) */
  .wrap {
    padding: 0 20px;
  }

  /* Section padding: 120 → 72 */
  section {
    padding-top: 72px;
    padding-bottom: 72px;
  }

  /* Section labels tighter */
  .section-label {
    margin-bottom: 24px;
    gap: 10px;
  }

  .section-label .line {
    max-width: 60px;
  }

  /* Header tightened */
  header {
    padding: 12px 12px;
  }

  header.scrolled {
    padding: 8px 12px;
  }

  .nav {
    padding: 6px 6px 6px 16px;
    gap: 8px;
  }

  .brand-logo {
    height: 18px;
  }

  /* HERO ----------------------------------------------------- */
  .hero {
    height: auto;
    min-height: auto;
    padding: 96px 0 32px;
  }

  .hero-grid {
    gap: 28px;
  }

  .hero-headline {
    font-size: clamp(48px, 12.5vw, 76px);
    line-height: .96;
  }

  .hero-sub {
    margin-top: 18px;
    gap: 8px;
    font-size: 13px;
  }

  .hero-sub .dot {
    width: 3px;
    height: 3px;
  }

  .hero-cta {
    margin-top: 22px;
    gap: 10px;
  }

  .hero-visual {
    aspect-ratio: 4/3;
    height: auto;
    border-radius: 18px;
  }

  .play-btn {
    left: 18px;
    bottom: 18px;
    gap: 8px;
  }

  .play-glass {
    width: 48px;
    height: 48px;
  }

  .play-glass svg {
    width: 14px;
    height: 14px;
    margin-left: 2px;
  }

  .play-label {
    font-size: 10px;
    letter-spacing: .18em;
  }

  /* CURATED -------------------------------------------------- */
  /* padding-bottom: was 0; bump to 64 so Explore CTA doesn't kiss the
rounded section edge on mobile. */
  .curated {
    padding-top: 68px;
    padding-bottom: 64px;
  }

  .curated-grid {
    grid-template-columns: 1fr;
    gap: 32px;
  }

  /* Reset the desktop overflow-into-gap; on mobile the grid is single-col */
  .curated-visual {
    aspect-ratio: 4/3;
    height: auto;
    width: 100%;
    border-radius: 18px;
  }

  /* Drop the desktop editorial indent so stacked text aligns to wrap edge */
  .curated-grid>div:last-child {
    padding-left: 0;
  }

  .curated-h {
    font-size: clamp(34px, 9vw, 56px);
    line-height: 1;
  }

  .curated-sub {
    margin-top: 14px;
    font-size: 14px;
  }

  .curated-body {
    margin-top: 22px;
    font-size: 15px;
  }

  .curated-cta {
    margin-top: 26px;
  }

  /* DISTINCTIONS — Variant B carousel ----------------------- */
  #distinct-v1 {
    padding-top: 72px;
    padding-bottom: 56px;
  }

  .distinct-head {
    margin-bottom: 36px;
  }

  .distinct-sub {
    margin-bottom: 22px;
    font-size: 14px;
  }

  .distinct-sub-line {
    margin-right: 10px;
  }

  #distinct-v1 .distinct-intro {
    font-size: clamp(26px, 5.6vw, 40px);
    line-height: 1.3;
    letter-spacing: -.012em;
  }

  /* Mobile carousel rebuilt as a NATIVE horizontal-scroll, snap-to-card
strip. All cards are the SAME size, descriptions show on every card,
and the user swipes through with their finger. The JS-driven
featured/medium classes are visually flattened by these overrides. */
  .dc-carousel {
    margin-top: 32px;
  }

  .dc-viewport {
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    height: auto;
    /* allow the scroll strip to bleed into the wrap padding so the cards
can sit edge-to-edge on phones; reset margin-left/right so the
strip starts at section edge */
    margin-left: -20px;
    margin-right: -20px;
    padding: 4px 20px 4px;
  }

  .dc-viewport::-webkit-scrollbar {
    display: none;
  }

  .dc-track {
    transform: none !important;
    transition: none !important;
    gap: 14px;
  }

  /* Force ALL cards to a single size — flatten featured/medium states */
  .dc-card,
  .dc-card.is-medium,
  .dc-card.is-featured {
    flex: 0 0 78vw;
    height: auto;
    aspect-ratio: 3/4;
    scroll-snap-align: center;
    transition: none;
  }

  /* Featured imagebox always full-width on mobile (no left:50% split) */
  .dc-card.is-featured .dc-imagebox {
    left: 0;
  }

  /* Description ALWAYS visible — override the desktop fade behaviour */
  .dc-card .dc-desc,
  .dc-card.is-featured .dc-desc {
    opacity: .85 !important;
    max-height: 200px !important;
    overflow: visible;
    transition: none;
  }

  /* Title size consistent across all cards on mobile */
  .dc-card .dc-title,
  .dc-card.is-featured .dc-title {
    font-size: clamp(20px, 4.8vw, 28px);
    line-height: 1.1;
    transition: none;
  }

  .dc-card .dc-text,
  .dc-card.is-featured .dc-text {
    left: 20px;
    right: 20px;
    bottom: 22px;
    gap: 12px;
    transition: none;
  }

  .dc-icon,
  .dc-card.is-featured .dc-icon {
    width: 54px;
    height: 54px;
    top: 16px;
    left: 16px;
  }

  /* Hide arrows — user swipes natively. Keep label visible. */
  .dc-controls {
    margin-bottom: 18px;
  }

  .dc-arrows {
    display: none;
  }

  .distinct-sublabel {
    font-size: 10px;
    letter-spacing: .18em;
  }

  /* GOLF ----------------------------------------------------- */
  .golf {
    padding-bottom: 80px;
  }

  .golf-hero-wrap {
    height: clamp(260px, 52vw, 400px);
    margin-bottom: 32px;
  }

  .golf-hero {
    top: -40px;
    height: calc(100% + 80px);
  }

  /* Wave overlay — escape any container width and force full viewport
width on mobile (the SVG has a 20:1 aspect ratio, so we also
stretch it slightly taller via preserveAspectRatio:none vibe — no
SVG attribute change, just a min-height to keep the curve readable
on narrow screens). */
  .golf-wave {
    left: 50%;
    right: auto;
    width: 100vw;
    max-width: 100vw;
    transform: translateX(-50%);
    min-height: 36px;
  }

  .golf-h {
    font-size: clamp(34px, 9vw, 52px);
    line-height: 1;
    max-width: 100%;
  }

  .golf-stat {
    margin-top: 48px;
    gap: 24px;
  }

  .golf-numbers {
    font-size: clamp(64px, 18vw, 120px);
    letter-spacing: -.04em;
  }

  .golf-stat-side {
    padding-top: 18px;
  }

  .golf-stat-side .lead {
    font-size: clamp(18px, 4.4vw, 22px);
  }

  .golf-body {
    margin-top: 36px;
    padding-top: 24px;
    gap: 18px;
  }

  .golf-body p {
    font-size: 15px;
  }

  /* VILLAS --------------------------------------------------- */
  /* padding-top bumped (62→104) so the white villas-text card has clear
breathing room below golf's dark green section above. The 28px
section-overlap eats some of this; net visible space ≈ 76px. */
  .villas {
    padding-top: 104px;
    padding-bottom: 40px;
  }

  .villas-bento {
    margin-top: 24px;
    gap: 12px;
  }

  .villas-text {
    padding: 28px;
    min-height: auto;
  }

  .villas-text .villas-h {
    font-size: clamp(28px, 7vw, 44px);
    line-height: 1.05;
  }

  .villas-text .villas-body {
    margin-top: 18px;
    font-size: 15px;
  }

  .villas-text .villas-cta {
    margin-top: 26px;
  }

  .villas-feature {
    padding: 24px;
    min-height: 280px;
  }

  .villas-feature .villas-card-title {
    font-size: clamp(24px, 6.4vw, 36px);
  }

  .villas-img-row {
    gap: 12px;
  }

  .villas-img {
    padding: 20px;
    min-height: 140px;
  }

  .villas-img .villas-card-name {
    font-size: clamp(18px, 4.6vw, 24px);
  }

  .villas-corner {
    top: 18px;
    right: 18px;
    width: 38px;
    height: 38px;
  }

  .villas-corner svg {
    width: 12px;
    height: 12px;
  }

  .villas-card-tag {
    padding: 6px 12px;
    font-size: 10px;
    letter-spacing: .18em;
  }

  /* AMENITIES ------------------------------------------------ */
  .amenities {
    margin: 0 12px;
    padding: 64px 22px;
    border-radius: 24px;
  }

  .amen-head {
    margin-bottom: 36px;
    gap: 18px;
  }

  .amen-h {
    font-size: clamp(30px, 7.6vw, 46px);
    line-height: 1.05;
  }

  .amen-body {
    font-size: 15px;
  }

  /* Round the viewport (scroll mask) so any vertical clipping at the
bottom of cards reads soft, matching the card's own border-radius
— instead of a hard rectangular cut. */
  .amen-viewport {
    border-radius: 24px;
  }

  .amen-card {
    flex: 0 0 75%;
    min-width: 0;
    padding: 22px;
  }

  .amen-card-title {
    font-size: clamp(18px, 4.6vw, 24px);
  }

  .amen-btn .btn-arrow {
    width: 36px;
    height: 30px;
  }

  .amen-nav {
    margin-bottom: 18px;
    gap: 10px;
  }

  /* NEIGHBOURHOOD ------------------------------------------- */
  .neigh {
    padding-top: 68px;
    padding-bottom: 68px;
  }

  .neigh-grid {
    gap: 32px;
  }

  .neigh-visual {
    aspect-ratio: 4/3;
    border-radius: 18px;
  }

  .neigh-h {
    font-size: clamp(30px, 7.6vw, 46px);
    line-height: 1.05;
  }

  .neigh-body {
    margin-top: 20px;
    font-size: 15px;
  }

  .neigh-loc {
    margin-top: 24px;
  }

  .neigh-loc .place {
    font-size: 18px;
  }

  .neigh-cta {
    margin-top: 26px;
  }

  /* Tighter pulsing pin on small map */
  .neigh-pin {
    width: 20px;
    height: 20px;
    box-shadow: 0 0 0 6px rgba(20, 27, 10, .45),
      0 0 0 14px rgba(57, 255, 20, .28),
      0 0 0 30px rgba(57, 255, 20, .12);
  }

  .neigh-pin-pulse {
    width: 20px;
    height: 20px;
  }

  /* INVITE --------------------------------------------------- */
  .invite {
    padding-top: 120px;
    padding-bottom: 96px;
  }

  .invite-h {
    font-size: clamp(40px, 10.5vw, 72px);
    line-height: .98;
  }

  .invite-body {
    margin-top: 24px;
    font-size: 15px;
  }

  .invite-cta {
    margin-top: 32px;
    flex-direction: column;
    align-items: center;
    gap: 12px;
  }

  .invite-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
  }

  /* FOOTER — accordion mode --------------------------------- */
  footer {
    padding-top: 80px;
    padding-bottom: 24px;
  }

  .foot-grid {
    grid-template-columns: 1fr;
    gap: 0;
    padding-bottom: 28px;
  }

  .foot-brand {
    margin-bottom: 24px;
  }

  .foot-brand .brand-logo {
    height: 120px !important;
  }

  .foot-brand p {
    margin-top: 14px;
    font-size: 13px;
  }

  .foot-col {
    border-bottom: 1px solid rgba(242, 246, 234, .12);
  }

  .foot-col:last-child {
    border-bottom: 0;
  }

  .foot-col h4 {
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 0;
    margin-bottom: 0;
    color: var(--pistachio);
    user-select: none;
  }

  .foot-col h4::after {
    content: "";
    width: 11px;
    height: 11px;
    position: relative;
    flex: 0 0 auto;
    background:
      linear-gradient(currentColor, currentColor) center/100% 1px no-repeat,
      linear-gradient(currentColor, currentColor) center/1px 100% no-repeat;
    transition: transform .3s cubic-bezier(.2, .6, .2, 1);
    opacity: .85;
  }

  .foot-col.is-open h4::after {
    transform: rotate(45deg);
  }

  .foot-col ul {
    max-height: 0;
    overflow: hidden;
    transition: max-height .4s cubic-bezier(.2, .6, .2, 1),
      padding .35s ease;
    padding-bottom: 0;
  }

  .foot-col.is-open ul {
    max-height: 320px;
    padding-bottom: 18px;
  }

  .foot-col li {
    margin-bottom: 12px;
    font-size: 14px;
  }

  .foot-col li:last-child {
    margin-bottom: 0;
  }

  .foot-bot {
    margin-top: 24px;
    flex-direction: column;
    gap: 8px;
    font-size: 11px;
  }

  /* SECTION TRANSITION SYSTEM — soften corners on phone */
  .hero,
  .curated,
  #distinct-v1,
  .golf,
  .villas,
  .neigh,
  .invite {
    border-bottom-left-radius: 28px;
    border-bottom-right-radius: 28px;
  }

  .curated,
  .golf,
  .villas,
  .invite,
  footer {
    margin-top: -28px;
  }

  footer {
    padding-top: 80px;
  }

  /* MOBILE MENU spacing on small viewports */
  .mobile-menu {
    gap: 28px;
    padding: 24px 20px;
  }
}

/* ----- SMALL PHONE — ≤480 ------------------------------------ */
@media (max-width:480px) {
  .wrap {
    padding: 0 16px;
  }

  /* Header even tighter */
  header {
    padding: 10px 10px;
  }

  header.scrolled {
    padding: 8px 10px;
  }

  .nav {
    padding: 5px 5px 5px 14px;
  }

  .hamburger {
    width: 36px;
    height: 36px;
  }

  /* HERO */
  .hero-headline {
    font-size: clamp(44px, 13vw, 68px);
  }

  .hero-cta {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }

  .hero-cta .pill {
    justify-content: center;
    width: 100%;
  }

  /* CURATED */
  .curated-h {
    font-size: clamp(34px, 9.6vw, 52px);
  }

  /* DISTINCTIONS */
  #distinct-v1 .distinct-intro {
    font-size: clamp(24px, 5.8vw, 36px);
  }

  .dc-carousel {
    --dc-feat-w: 84vw;
    --dc-feat-h: 280px;
    --dc-med-w: 74vw;
    --dc-med-h: 280px;
    --dc-small-w: 74vw;
    --dc-small-h: 280px;
  }

  .dc-card .dc-text,
  .dc-card.is-featured .dc-text {
    left: 16px;
    right: 16px;
    bottom: 18px;
  }

  .dc-icon {
    width: 48px;
    height: 48px;
  }

  .dc-card.is-featured .dc-icon {
    width: 54px;
    height: 54px;
  }

  /* GOLF */
  .golf-numbers {
    font-size: clamp(56px, 18vw, 96px);
  }

  .golf-h {
    font-size: clamp(30px, 9vw, 46px);
  }

  /* VILLAS */
  .villas-text {
    padding: 24px;
  }

  .villas-feature {
    padding: 20px;
    min-height: 240px;
  }

  .villas-img {
    padding: 16px;
    min-height: 120px;
  }

  /* villas-img-row already stacks at 560px from existing rule */
  /* AMENITIES */
  .amenities {
    margin: 0 8px;
    padding: 56px 18px;
    border-radius: 20px;
  }

  .amen-card {
    flex: 0 0 82%;
    padding: 20px;
  }

  /* NEIGHBOURHOOD */
  .neigh-h {
    font-size: clamp(28px, 8vw, 40px);
  }

  /* INVITE */
  .invite {
    padding-top: 104px;
    padding-bottom: 80px;
  }

  .invite-h {
    font-size: clamp(36px, 11vw, 60px);
  }

  /* FOOTER */
  .foot-brand .brand-logo {
    height: 104px !important;
  }

  .foot-bot {
    margin-top: 18px;
    font-size: 10.5px;
  }

  /* MOBILE MENU smaller */
  .mobile-menu-nav a {
    font-size: clamp(24px, 7.8vw, 34px);
  }

  .mobile-menu-cta {
    max-width: 100%;
  }
}

/* ============================================================
ENQUIRY MODAL — editorial form on a moss-tinted backdrop.
Ivory card, Fraunces title, hairline-underlined inputs,
pill submit. Opens via [data-enquire-trigger] click.
============================================================ */
@media (max-width:640px) {
  .enquire-modal {
    padding: 16px 14px;
  }

  .enquire-card {
    padding: 28px 22px 24px;
    border-radius: 18px;
  }

  .enquire-close {
    top: 10px;
    right: 10px;
    width: 36px;
    height: 36px;
  }

  .enquire-eyebrow {
    margin-bottom: 8px;
  }

  .enquire-title {
    font-size: clamp(22px, 6vw, 28px);
  }

  .enquire-sub {
    font-size: 13.5px;
  }

  .enquire-form {
    margin-top: 18px;
    gap: 14px;
  }

  .enquire-row {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .enquire-submit {
    width: 100%;
    justify-content: center;
  }
}

/* ------ Tea variant (Brochure download) ------
Same modal/form, swapped to a tea-green card with moss text —
softer / creamier than pistachio. */
/* Submit pill on pistachio reads strongest as moss */
/* ===== neighbourhood.html ===== */
/* .wrap{max-width:1440px;margin:0 auto;padding:0 24px}
@media (max-width:768px){ .wrap{padding:0 20px} }
@media (max-width:480px){ .wrap{padding:0 16px} } */
/* eyebrow / labels */
/* pill button — copied verbatim from index.html so visuals match exactly */
/* Oval-arrow icon for pill buttons */
/* Icon colors flow via custom properties so they cascade through <use> shadow DOM */
/* Light-bg pills — invert: dark oval, light arrow */
/* Nav ghost pill hovers to olive — revert icon back to default colors */
/* Download icon — defaults: ivory oval, olive arrow */
/* ============================================================
HEADER — glassmorphic floating capsule
============================================================ */
/* Scoped to the site header — using a bare `header{}` selector
accidentally captured `<header>` elements inside folds and pinned
them to the viewport. */
/* ============================================================
HAMBURGER + MOBILE MENU
============================================================ */
/* ============================================================
SECTION TRANSITION SYSTEM (mirrors index.html)
============================================================ */
.opening,
.narrative,
.atlas,
.closing {
  position: relative;
  border-bottom-left-radius: 40px;
  border-bottom-right-radius: 40px;
}

/* Section stacking — Neighbourhood: olive → ivory → tea → pistachio → moss. */
.opening.neighbourhood-bg {
  background: var(--pistachio);
  z-index: 6;
  color: var(--moss);
}

.neighbourhood-bg.opening>.wrap {
  position: relative;
  z-index: 2;
}

.narrative {
  background: var(--ivory);
  z-index: 5;
  margin-top: -40px;
  padding-top: 160px;
  padding-bottom: 140px;
}

.atlas {
  background: var(--tea);
  z-index: 4;
  margin-top: -40px;
  padding-top: 160px;
  padding-bottom: 160px;
}

.closing {
  background: var(--pistachio);
  z-index: 3;
  margin-top: -40px;
  padding-top: 200px;
  padding-bottom: 160px;
  text-align: center;
  overflow: hidden;
}

/* ============================================================
FOLD 1 — OPENING STATEMENT
Hero-like: section-label, big H1, body lead, full-width film
============================================================ */
.neighbourhood-bg.opening::before {
  /* Pinned to the section's own box — NOT 100vw — so iOS Safari
versions without overflow-x:clip support can't leak this layer
past the viewport edge. The dark-olive SVG sits on the pistachio
bg as a soft topographic etching. Same recipe as Amenities. */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: url("images/bg_vector.svg");
  background-size: 400%;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  opacity: .16;
  pointer-events: none;
}

/* Pistachio radial halo above the vector — softens the pattern
behind the headline + body so the type stays legible. Mirrors
the Amenities and Closing folds. */
.neighbourhood-bg.opening::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 78% 72% at 50% 72%,
      var(--pistachio) 0%,
      rgba(164, 195, 111, .88) 30%,
      rgba(164, 195, 111, 0) 70%);
  pointer-events: none;
  z-index: 1;
}

.opening-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h1-size);
  line-height: var(--t-h1-lh);
  letter-spacing: var(--t-h1-tracking);
  color: var(--moss);
  margin-top: 24px;
}

.opening-body {
  margin: 36px auto 0;
  max-width: 760px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: clamp(17px, 1.4vw, 20px);
  line-height: 1.6;
  color: rgba(20, 27, 10, .78);
}

/* ============================================================
FOLD 2 — THE PHILOSOPHY
Pistachio bg. Editorial 2-col: subhead-left / lead+body-right
============================================================ */
/* ---- Philosophy fold — typographic centerpiece ----
Lead pull-quote → ruled list of 3 oversized "choices" (number ·
display word · faded "over X") → decorative line.svg divider →
centered closing prose. Mixes Fraunces opsz-144 display with
Inter sans for serif/sans tonal contrast.
*/
/* Subgrid so all 3 rows share column tracks — col 1 sizes to the widest
word, which makes the image and "over X" align vertically across rows. */
/* Hover bg lives on a ::before so it can:
- fill the row exactly (no L/R bleed past wrap edges)
- have rounded corners
- fade in/out without affecting layout / shifting any text */
/* Flip text colors on hover so they read against the olive bg */
/* trailing "." reads as a quiet beat */
/* Editorial image strip slotting between display word and "over X" */
/* ============================================================
FOLD 3 — THE PRINCIPLES
Ivory bg. 2-col head + 2x2 grid of alternating cards.
============================================================ */
/* 4-up alternation reads strongest as ivory · olive · ivory · olive */
/* Use design-system tokens — H5 for the card title, .body for copy */
/* ============================================================
FOLD 4 — HOW THE WORLD TAKES SHAPE
Olive bg, ivory text. Lead + 3 alternating image-text rows.
============================================================ */
/* Decorative bg vector — pure black via filter:brightness(0), pinned to
the viewport (background-attachment:fixed) so it stays in place while
the section's content scrolls past it. */
/* 2-col layout: sticky headline (left) + sticky-stacked cards (right).
Each card sticks slightly lower than the one before it, creating an
overlapping shingle effect as the user scrolls. */
/* Card structure: horizontal 16:9 split.
- LEFT (5fr): moss bg + caption text, vertically centered
- RIGHT (7fr): photograph, fills the cell
- Image lives first in DOM (mobile-first stacking) but grid-column
places it on the right at desktop. */
/* Middle card breaks the moss rhythm — pistachio bg with moss text for
a dark / light / dark visual cadence as the cards stack. */
/* When a later card stickies on top, this card fades to 80% */
/* Floating prose below the sticky headline — moves with .shape-left,
stays visible the entire scroll through the cards column. */
/* ============================================================
FOLD 5 — WHAT THIS WORLD ENABLES
Tea bg. 3 large editorial lines, centered. Closing prose.
============================================================ */
/* ============================================================
FOLD 6 — CLOSING REFLECTION
Pistachio bg, full-fill vector + radial glow. Centered headline + CTA.
============================================================ */
/* ============================================================
FOOTER
============================================================ */
/* ============================================================
VIDEO MODAL
============================================================ */
/* ================================================================
RESPONSIVE PASS — mobile/tablet adaptations
================================================================ */
@media (max-width:1024px) {

  /* Mobile/tablet header collapses to: brand left, hamburger right.
Both the desktop link strip AND the Enquire pill are hidden — the
mobile menu drawer reproduces both. */
  .nav-links {
    display: none;
  }

  .nav-cta {
    display: none;
  }

  .hamburger {
    display: flex;
  }

  .nav {
    grid-template-columns: auto auto;
    justify-content: space-between;
  }

  /* Belt-and-suspenders horizontal-overflow clip on the document root.
body uses overflow-x:clip (preserves sticky descendants on desktop)
but iOS Safari < 16 doesn't honour `clip` and falls back to visible
— letting the page swipe sideways. On mobile/tablet there are no
sticky descendants, so hiding overflow on <html> is safe. */
  html {
    overflow-x: hidden;
  }
}

@media (max-width:768px) {
  section {
    padding-top: 72px;
    padding-bottom: 72px;
  }

  .section-label {
    margin-bottom: 24px;
    gap: 10px;
  }

  .section-label .line {
    max-width: 60px;
  }

  /* Header */
  #site-header {
    padding: 12px 12px;
  }

  #site-header.scrolled {
    padding: 8px 12px;
  }

  .nav {
    padding: 6px 6px 6px 16px;
    gap: 8px;
  }

  .brand-logo {
    height: 18px;
  }

  /* OPENING */
  .opening {
    padding-top: 120px;
  }

  .opening-text {
    padding: 8px 0 64px;
  }

  .opening-h {
    font-size: clamp(40px, 11vw, 72px);
    line-height: .96;
    letter-spacing: -.03em;
  }

  .opening-body {
    margin-top: 24px;
    font-size: 16px;
  }

  /* PHILOSOPHY — mobile typographic rebuild
Lead shrinks, the 3-column choice row collapses to a 2-row stack
(number + word, then "over X" indented under), keeping the editorial
rhythm without breaking line-lengths on phones. */
  .philosophy {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .philosophy-lead {
    font-size: clamp(28px, 8vw, 48px);
    line-height: 1.18;
    letter-spacing: -.02em;
  }

  .philosophy-rule {
    margin: 56px 0 4px;
  }

  /* Mobile collapses subgrid back to a single-column stack */
  .philosophy-choices {
    grid-template-columns: 1fr;
  }

  .philosophy-choice {
    grid-template-rows: auto auto auto;
    gap: 14px;
    padding: 24px 18px 28px;
  }

  .philosophy-choice::before {
    left: 0;
    right: 0;
    top: 6px;
    bottom: 6px;
    border-radius: 18px;
  }

  .choice-word {
    grid-column: 1;
    grid-row: 1;
    font-size: clamp(48px, 15vw, 84px);
    letter-spacing: -.035em;
  }

  .choice-img {
    grid-column: 1;
    grid-row: 2;
    max-width: none;
    width: 100%;
    height: 96px;
    margin-top: 8px;
    border-radius: 8px;
  }

  .choice-over {
    grid-column: 1;
    grid-row: 3;
    text-align: left;
    font-size: 28px;
    color: rgba(20, 27, 10, .55);
    padding-top: 6px;
  }

  .philosophy-close {
    margin-top: 48px;
  }

  /* SHAPE — golf-course feature; .am-bento mobile rules live further
down in the page-specific block. Section padding only here. */
  .shape {
    padding-top: 96px;
    padding-bottom: 88px;
  }

  /* ENABLES — horizontal scroll-jack collapses to a swipe carousel;
the carousel rules live further down in the page-specific block. */
  .enables {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  /* CLOSING */
  .closing {
    padding-top: 120px;
    padding-bottom: 96px;
  }

  .closing-h {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
  }

  .closing-body {
    margin-top: 24px;
    font-size: 15px;
  }

  .closing-cta {
    margin-top: 32px;
    flex-direction: column;
    align-items: center;
    gap: 12px;
  }

  .closing-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
  }

  /* FOOTER accordion */
  footer {
    padding-top: 80px;
    padding-bottom: 24px;
  }

  .foot-grid {
    grid-template-columns: 1fr;
    gap: 0;
    padding-bottom: 28px;
  }

  .foot-brand {
    margin-bottom: 24px;
  }

  .foot-brand .brand-logo {
    height: 120px !important;
  }

  .foot-brand p {
    margin-top: 14px;
    font-size: 13px;
  }

  .foot-col {
    border-bottom: 1px solid rgba(242, 246, 234, .12);
  }

  .foot-col:last-child {
    border-bottom: 0;
  }

  .foot-col h4 {
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 0;
    margin-bottom: 0;
    color: var(--pistachio);
    user-select: none;
  }

  .foot-col h4::after {
    content: "";
    width: 11px;
    height: 11px;
    position: relative;
    flex: 0 0 auto;
    background:
      linear-gradient(currentColor, currentColor) center/100% 1px no-repeat,
      linear-gradient(currentColor, currentColor) center/1px 100% no-repeat;
    transition: transform .3s cubic-bezier(.2, .6, .2, 1);
    opacity: .85;
  }

  .foot-col.is-open h4::after {
    transform: rotate(45deg);
  }

  .foot-col ul {
    max-height: 0;
    overflow: hidden;
    transition: max-height .4s cubic-bezier(.2, .6, .2, 1), padding .35s ease;
    padding-bottom: 0;
  }

  .foot-col.is-open ul {
    max-height: 320px;
    padding-bottom: 18px;
  }

  .foot-col li {
    margin-bottom: 12px;
    font-size: 14px;
  }

  .foot-col li:last-child {
    margin-bottom: 0;
  }

  .foot-bot {
    margin-top: 24px;
    flex-direction: column;
    gap: 8px;
    font-size: 11px;
  }

  /* Section transition radii — Neighbourhood (4 folds + footer) */
  .opening,
  .narrative,
  .atlas,
  .closing {
    border-bottom-left-radius: 28px;
    border-bottom-right-radius: 28px;
  }

  .narrative,
  .atlas,
  .closing,
  footer {
    margin-top: -28px;
  }

  .narrative,
  .atlas {
    padding-top: 104px;
    padding-bottom: 80px;
  }

  .closing {
    padding-top: 140px;
    padding-bottom: 96px;
  }

  footer {
    padding-top: 80px;
  }

  /* Video modal */
  .video-modal {
    padding: 12px;
  }

  .video-modal-close {
    top: 16px;
    right: 16px;
    width: 44px;
    height: 44px;
  }

  .video-modal-video {
    max-height: 80vh;
  }
}

@media (max-width:480px) {
  #site-header {
    padding: 10px 10px;
  }

  #site-header.scrolled {
    padding: 8px 10px;
  }

  .nav {
    padding: 5px 5px 5px 14px;
  }

  .hamburger {
    width: 36px;
    height: 36px;
  }

  .opening-h {
    font-size: clamp(36px, 12.5vw, 60px);
  }

  .foot-brand .brand-logo {
    height: 104px !important;
  }

  .mobile-menu-nav a {
    font-size: clamp(24px, 7.8vw, 34px);
  }

  .mobile-menu-cta {
    max-width: 100%;
  }

  /* CONTACT PAGE — phone-size tightening. Stacks the hero CTA pills
vertically (so two pills don't overflow at <380px), tightens the
enquire-letter padding, drops form input size from 18 to 17 to
match homepage modal rhythm. */
  .contact-hero-cta {
    margin-top: 28px;
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
  }

  .contact-hero-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
    margin: 0 auto;
  }

  .enquire-letter {
    border-radius: 18px;
  }

  .enquire-form-col {
    padding: 32px 20px;
  }

  .contact-form {
    gap: 18px;
  }

  .contact-row {
    gap: 18px;
  }

  .contact-field input,
  .contact-field textarea {
    font-size: 17px;
  }

  .contact-field--phone .contact-phone-input {
    gap: 10px;
  }

  .visit-channel,
  .advisor-channel {
    gap: 6px;
  }

  .visit-channel dd,
  .advisor-channel dd {
    font-size: 16px;
  }
}

/* ============================================================
LOADING SCREEN + "WORKS" MORPH TRANSITION
Phase 1: dark moss screen with gently-pulsing logo.
Phase 2: ivory curtain rises (curve), flattens to cover screen,
then whole loader fades to opacity 0 — page revealed.
============================================================ */
@keyframes rt-logo-pulse {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: .55;
  }
}

/* Lock body scroll while loader is visible */
/* ============================================================
ENQUIRY MODAL — editorial form, ivory card on moss backdrop.
============================================================ */
@media (max-width:640px) {
  .enquire-modal {
    padding: 16px 14px;
  }

  .enquire-card {
    padding: 28px 22px 24px;
    border-radius: 18px;
  }

  .enquire-close {
    top: 10px;
    right: 10px;
    width: 36px;
    height: 36px;
  }

  .enquire-eyebrow {
    margin-bottom: 8px;
  }

  .enquire-title {
    font-size: clamp(22px, 6vw, 28px);
  }

  .enquire-sub {
    font-size: 13.5px;
  }

  .enquire-form {
    margin-top: 18px;
    gap: 14px;
  }

  .enquire-row {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .enquire-submit {
    width: 100%;
    justify-content: center;
  }
}

/* ------ Tea variant (Brochure download) ------ */
/* ============================================================
AMENITIES PAGE — fold-specific overrides + new components
============================================================ */
/* Fold 3 anchor — image fills the section as background, text card
floats on the right at 50% width. Section padding tightened so the
visible space above/below matches the wrap's L/R padding of 24px
(after the -40 transition overlap is absorbed). */
.shape {
  padding-top: 104px !important;
  padding-bottom: 64px !important;
  background-color: var(--olive);
  /* fallback under the image */
  background-image: url("images/golf_image.jpg");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  /* photo stays put as the section scrolls */
}

/* Scrim — lifts the right-side text card off the photograph and keeps
the left half from feeling visually heavy. Soft left→right olive wash. */
/* Glass-morphism text card — translucent white over the photo with a
blurred backdrop. A subtle white inner edge + soft drop-shadow gives
the floating-glass impression. Text colors stay olive for legibility. */
/* Top-right feature image card */
/* Bottom-right two image cards */
/* Fold 4 — override .enables to ivory bg + left-align */
/* Override section padding-bottom to 0 — the horizontal pin container
lives below the wrap and provides its own vertical scroll budget. */
/* Horizontal scroll-jack:
- .am-horiz-pin is artificially tall — provides scroll runway
- .am-horiz-track sticks to the viewport while the pin scrolls past;
headline + cards row both live INSIDE the track so the headline
pins WITH the cards (visible above them through the whole scroll)
- .am-horiz-cards inside is translateX'd by JS based on scroll progress */
@media (max-width:768px) {

  /* On mobile the headline sits inside the page gutter — no extra
left indent — so it lines up with body copy elsewhere on the page. */
  .am-horiz-head {
    padding: 0 20px;
  }
}

@media (max-width:480px) {
  .am-horiz-head {
    padding: 0 16px;
  }
}

/* Each card: 40vw wide → two full + a peek of the third visible at once.
50/50 horizontal split: text left, image right, --moss bg, ivory text. */
/* Alternate cards — even-numbered cards flip to pistachio + moss text */
/* Decorative SVG pattern — each card sets its own --pattern var.
Renders at 20% opacity behind text so the moss/pistachio bg
remains dominant. cover-fit so portrait SVGs fill the panel. */
/* Pistachio (even) cards have less contrast against the dark pattern,
so dial it down to keep the surface calm. */
/* Fold 5 — extra body + tagline lines for amenities closing */
/* Mobile adaptation */
@media (max-width:768px) {

  /* Mobile: text card spans full width over the image bg.
Background-attachment:fixed is dropped on mobile — it renders oddly
on iOS (zooms the photo to viewport, not section) and looks worse
than a normal scrolling cover. Glass blur dialled down for perf
on budget Android. */
  .shape {
    background-attachment: scroll;
  }

  .shape>.wrap {
    padding-top: 32px;
    padding-bottom: 48px;
  }

  .am-bento {
    justify-content: stretch;
  }

  .am-bento .am-bento-text {
    width: 100%;
  }

  .am-bento-text {
    padding: 28px 24px 32px;
    backdrop-filter: blur(14px) saturate(130%);
    -webkit-backdrop-filter: blur(14px) saturate(130%);
    background-color: rgba(255, 255, 255, .65);
  }

  .am-bento-text .am-bento-h {
    font-size: clamp(28px, 7vw, 40px);
  }

  .am-more-h {
    margin-bottom: 32px;
    font-size: clamp(34px, 9vw, 52px);
  }

  /* Disable scroll-jack and convert to a native horizontal scroll-snap
carousel — same pattern as the homepage Amenities strip. The pin
is already viewport-width (no `.wrap` parent), so the cards row
does NOT use a negative bleed margin — its left padding is the
gutter, and the first card aligns with the headline above. */
  .am-horiz-pin {
    height: auto;
  }

  .am-horiz-track {
    position: static;
    height: auto;
    display: block;
    padding: 0;
    overflow: visible;
  }

  .am-horiz-cards {
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 14px;
    padding: 4px 20px 8px;
    margin: 0;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    transform: none !important;
  }

  .am-horiz-cards::-webkit-scrollbar {
    display: none;
  }

  .am-card {
    flex: 0 0 82%;
    height: auto;
    grid-template-columns: 1fr;
    grid-template-rows: auto auto;
    border-radius: 20px;
    scroll-snap-align: center;
  }

  .am-card-img {
    aspect-ratio: 16/10;
    min-height: 0;
  }

  .am-card-text {
    padding: 24px 26px 28px;
    gap: 12px;
  }

  .am-card-h {
    font-size: clamp(22px, 5.4vw, 30px);
  }

  .am-close-body {
    font-size: 15px;
    margin-top: 24px;
  }

  .am-close-tagline {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
    margin-top: 32px;
  }
}

/* ============================================================
VILLAS PAGE — fold-specific layouts.
Each fold reuses .v-head/.v-h/.v-lead at the top and lays out
its body with a per-fold grid below.
============================================================ */
/* Shared headline / lead block */
/* On the dark olive Features fold, headlines + leads invert. */
/* Fold 2 — design-philosophy stanza
3-line numbered list, mono num + serif phrase, faint divider. */
/* Fold 2 — "The Tenets" editorial spreads.
Replaces the older numbered list. Each tenet is a full-width grid:
[ numeral · portrait image · type ]
The intro block (eyebrow + headline + lead) sits inside the wrap
above; the three tenets run edge-to-edge below for prominence. */
/* Intro block — eyebrow + asymmetric headline + lead */
/* Tenets list — runs edge-to-edge for prominence. A continuous
olive hairline runs along the top and bottom; each tenet is
separated by another hairline. */
/* Numeral column — display-optical Fraunces, oversized, baseline-aligned
with the phrase column on the right via flex. */
/* Image — softened rectangle. ~30% shorter than the original 5:6
portrait so it sits as a calm landscape band rather than a tall
plate. The wrap clips the img so its scale-out reveal stays inside
the rounded corners. */
/* Text column — meta tag + serif phrase + animated rule.
The serif phrase is large but soft (weight 300, opsz 144). */
/* Reveal states — set by IntersectionObserver in JS.
On enter: image releases zoom, rule draws across, content fades
in with a tiny upward slide. Stagger via animation-delay per
element. */
/* Hover — image scales gently */
@media (hover:hover) {
  .v-tenet:hover .v-tenet-img img {
    transform: scale(1.04);
  }
}

/* Reduced-motion — drop animations entirely */
@media (prefers-reduced-motion:reduce) {

  .v-tenet-index,
  .v-tenet-img-wrap,
  .v-tenet-text>* {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .v-tenet-img img {
    transform: none !important;
    transition: none;
  }

  .v-tenet-rule {
    width: 100% !important;
    transition: none;
  }
}

/* Fold 3 — architecture grid (3-up captioned image cards) */
/* Fold 4 — living-spaces alternating rows
Slower, more editorial than the architecture grid above. */
/* Fold 5 — features grid (4-card on olive) */
/* Fold 6 — golf-points list (inside the .am-bento glass card) */
/* Fold 7 — villa configurations (2 large cards) */
/* Villa folds — mobile adaptation
Everything stacks 1-up; gutters tighten; type scales down.   */
@media (max-width:768px) {

  .architecture,
  .living,
  .features,
  .configs {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .v-head {
    margin-bottom: 36px;
  }

  .v-h {
    font-size: clamp(32px, 8vw, 48px);
  }

  .v-lead {
    font-size: 16px;
    margin-top: 18px;
  }

  .v-phrases {
    margin-top: 28px;
    gap: 14px;
  }

  .v-phrases li {
    grid-template-columns: auto 1fr;
    gap: 14px;
    padding-bottom: 14px;
  }

  .v-phrase {
    font-size: clamp(17px, 4.6vw, 22px);
  }

  /* Tenets — mobile: stack to single column, smaller numerals, no
stagger offset. The image goes wide (4:5) so it stays a hero. */
  .v-tenets-intro {
    grid-template-columns: 1fr;
    column-gap: 0;
    row-gap: 24px;
    padding-bottom: 56px;
  }

  .v-tenets-eyebrow {
    margin-bottom: 12px;
  }

  .v-tenets-eyebrow-rule {
    width: 42px;
  }

  .v-tenets-h {
    font-size: clamp(44px, 11vw, 72px);
  }

  .v-tenets-lead {
    font-size: 16px;
    padding-bottom: 0;
    max-width: none;
  }

  .v-tenet {
    grid-template-columns: 1fr;
    gap: 24px;
    padding: 48px 20px 56px;
  }

  .v-tenet[data-tenet="02"] .v-tenet-index,
  .v-tenet[data-tenet="03"] .v-tenet-index {
    padding-top: .4em;
  }

  .v-tenet-num {
    font-size: clamp(72px, 18vw, 110px);
  }

  .v-tenet-img-wrap {
    aspect-ratio: 8/7;
    border-radius: 14px;
  }

  .v-tenet-text {
    padding-top: 0;
    gap: 16px;
  }

  .v-tenet-h {
    font-size: clamp(26px, 7vw, 38px);
  }

  .v-cards {
    grid-template-columns: 1fr;
    gap: 24px;
  }

  .v-card-img {
    aspect-ratio: 16/12;
  }

  .v-rows {
    gap: 48px;
  }

  .v-row,
  .v-row--reverse {
    grid-template-columns: 1fr;
    gap: 18px;
  }

  .v-row--reverse .v-row-img {
    order: 0;
  }

  .v-row--reverse .v-row-text {
    order: 0;
  }

  .v-row-text {
    padding: 0;
  }

  .v-row-h {
    font-size: clamp(22px, 6vw, 30px);
  }

  .v-feat-grid {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .v-feat {
    min-height: 0;
    padding: 24px 22px;
  }

  .v-config-grid {
    grid-template-columns: 1fr;
    gap: 18px;
  }

  .v-config-body {
    padding: 22px 24px 26px;
  }

  .v-config-h {
    font-size: clamp(22px, 6vw, 28px);
  }
}

/* ============================================================
CONTACT PAGE — fold-specific layouts.
Three folds: hero (olive) → visit (ivory) → enquire (tea).
The hero italic on "conversation" is just the existing
.opening-h em rule; the other components are bespoke.
============================================================ */
/* Hero — pill pair sitting below the lead. */
.contact-hero-cta {
  margin-top: 48px;
  display: inline-flex;
  flex-wrap: wrap;
  gap: 12px;
  justify-content: center;
}

/* Ghost pill on dark bg — translucent ivory with hairline edge.
Matches the brand's pill rhythm but reads as "muted CTA". */
.pill--ghost-light {
  background: rgba(242, 246, 234, .06);
  color: var(--ivory);
  border: 1px solid rgba(242, 246, 234, .32);
  --ico-bg: var(--ivory);
  --ico-fg: var(--olive);
}

.pill--ghost-light:hover {
  background: var(--ivory);
  color: var(--olive);
  border-color: var(--ivory);
  --ico-bg: var(--olive);
  --ico-fg: var(--ivory);
}

/* Visit fold — 60/40 grid, address typography on left, map on right. */
.visit-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 64px;
  align-items: start;
}

.visit-info {
  display: flex;
  flex-direction: column;
}

.visit-eyebrow,
.enquire-eyebrow,
.advisor-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 18px;
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .28em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .7;
  margin-bottom: 32px;
}

.visit-eyebrow-rule {
  display: inline-block;
  width: 64px;
  height: 1px;
  background: rgba(45, 56, 35, .45);
}

.visit-h {
  font-family: var(--serif);
  font-weight: 500;
  /* Stepped down to H4 token from the type system. */
  font-size: var(--t-h4-size);
  line-height: var(--t-h4-lh);
  letter-spacing: var(--t-h4-tracking);
  color: var(--olive);
  margin: 0;
  font-variation-settings: "opsz" 144;
}

.visit-lead {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 18px;
  line-height: 1.55;
  color: rgba(45, 56, 35, .72);
  margin: 20px 0 0;
  max-width: 420px;
}

.visit-rule {
  display: block;
  height: 1px;
  background: rgba(45, 56, 35, .18);
  margin: 48px 0 36px;
}

/* Channel rows: dt = mono label, dd = serif/mono link. */
.visit-channels,
.advisor-channels {
  margin: 0;
  padding: 0;
  display: grid;
  gap: 18px;
}

.visit-channel,
.advisor-channel {
  display: grid;
  grid-template-columns: 120px 1fr;
  gap: 24px;
  align-items: baseline;
}

.visit-channel dt,
.advisor-channel dt {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .55;
}

.visit-channel dd,
.advisor-channel dd {
  margin: 0;
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(18px, 1.5vw, 22px);
  line-height: 1.3;
  color: var(--olive);
  /* Long emails / phone strings without spaces would overflow on
iPhone SE (320px) — let them break inside the word if needed. */
  overflow-wrap: anywhere;
  word-break: break-word;
}

.visit-channel dd a,
.advisor-channel dd a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px solid rgba(45, 56, 35, .0);
  transition: border-color .25s ease;
}

.visit-channel dd a:hover,
.advisor-channel dd a:hover {
  border-bottom-color: rgba(45, 56, 35, .45);
}

/* Map — square-ish, soft rounded corners, faint border. */
.visit-map {
  position: relative;
  aspect-ratio: 1/1;
  border-radius: 18px;
  overflow: hidden;
  background: var(--olive);
  border: 1px solid rgba(45, 56, 35, .14);
  box-shadow: 0 12px 40px rgba(20, 27, 10, .06);
}

.visit-map iframe {
  display: block;
  width: 100%;
  height: 100%;
  /* Subtle olive cast on the map without losing legibility. */
  filter: saturate(.7) contrast(1.02);
}

/* Enquire fold — both columns wrapped inside a single ivory
"letterhead" card on the tea bg. Vertical hairline separates form
from advisor. The card gives the form proper enclosure and lifts
the whole composition off the section. */
.enquire-letter {
  background: var(--ivory);
  border: 1px solid rgba(45, 56, 35, .14);
  border-radius: 32px;
  box-shadow: 0 24px 60px rgba(20, 27, 10, .08);
  overflow: hidden;
  /* Full width inside the wrap — the wrap's gutter (24/20/16px)
is the only margin around the card. */
  width: 100%;
}

.enquire-grid {
  display: block;
  /* single column — form fills the whole card */
}

.enquire-form-col {
  padding: 72px 80px;
}

.enquire-eyebrow,
.advisor-eyebrow {
  color: var(--moss);
  margin-bottom: 28px;
}

.enquire-h {
  font-family: var(--serif);
  font-weight: 500;
  /* H4 token — paragraph-headline scale, calm but present. */
  font-size: var(--t-h4-size);
  line-height: var(--t-h4-lh);
  letter-spacing: var(--t-h4-tracking);
  color: var(--moss);
  margin: 0 0 44px;
  font-variation-settings: "opsz" 144;
}

/* Form — line-style inputs (no boxes). Tighter rhythm than the
previous version — 22px between rows reads as a single paragraph. */
.contact-form {
  display: flex;
  flex-direction: column;
  gap: 22px;
}

/* Two-column field row — Name + Phone share a line at desktop. */
.contact-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 28px;
}

.contact-intent {
  border: 0;
  padding: 0;
  margin: 0 0 8px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.contact-intent-legend {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--moss);
  opacity: .55;
  padding: 0;
}

.contact-intent-opts {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.contact-intent-opt {
  position: relative;
  display: inline-flex;
  align-items: center;
  cursor: pointer;
}

.contact-intent-opt input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.contact-intent-opt span {
  display: inline-block;
  padding: 10px 18px;
  border: 1px solid rgba(45, 56, 35, .32);
  border-radius: 999px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: 13px;
  letter-spacing: .02em;
  color: var(--moss);
  transition: background .25s ease, border-color .25s ease, color .25s ease;
}

.contact-intent-opt:hover span {
  border-color: rgba(45, 56, 35, .5);
}

.contact-intent-opt input:checked+span {
  background: var(--moss);
  color: var(--ivory);
  border-color: var(--moss);
}

.contact-intent-opt input:focus-visible+span {
  outline: 2px solid var(--moss);
  outline-offset: 3px;
}

/* Field — label sits above input as a tiny mono caption.
Input is a single underlined line, no box. */
.contact-field {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.contact-field label {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--moss);
  opacity: .55;
}

.contact-field input,
.contact-field textarea {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(18px, 1.4vw, 22px);
  line-height: 1.4;
  letter-spacing: -.012em;
  color: var(--moss);
  background: transparent;
  border: 0;
  border-bottom: 1px solid rgba(45, 56, 35, .32);
  padding: 6px 0 12px;
  appearance: none;
  border-radius: 0;
  transition: border-color .25s ease;
  width: 100%;
}

.contact-field textarea {
  resize: vertical;
  min-height: 48px;
  max-height: 240px;
}

.contact-field input:focus,
.contact-field textarea:focus {
  outline: none;
  border-bottom-color: var(--moss);
}

.contact-field input::placeholder,
.contact-field textarea::placeholder {
  color: rgba(45, 56, 35, .4);
  font-style: italic;
}

/* Phone field — +91 prefix sits inline with the input. */
.contact-field--phone .contact-phone-input {
  display: flex;
  align-items: baseline;
  gap: 14px;
  border-bottom: 1px solid rgba(45, 56, 35, .32);
  transition: border-color .25s ease;
}

.contact-field--phone .contact-phone-input:focus-within {
  border-bottom-color: var(--moss);
}

.contact-field--phone input {
  border-bottom: 0;
  padding-left: 0;
}

.contact-phone-prefix {
  font-family: var(--display);
  font-weight: 500;
  font-size: 14px;
  color: var(--moss);
  opacity: .6;
  letter-spacing: .04em;
}

/* Honeypot — visually hidden but kept in tab order skip */
.contact-hp {
  position: absolute !important;
  left: -9999px;
  width: 1px;
  height: 1px;
  opacity: 0;
}

/* Consent — small checkbox + serif body. */
.contact-consent {
  display: inline-flex;
  align-items: flex-start;
  gap: 12px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: 14px;
  line-height: 1.5;
  color: rgba(20, 27, 10, .8);
  cursor: pointer;
  user-select: none;
}

.contact-consent input {
  flex: 0 0 auto;
  margin-top: .25em;
  accent-color: var(--moss);
  width: 16px;
  height: 16px;
}

.contact-actions {
  display: flex;
  align-items: center;
  gap: 18px;
  flex-wrap: wrap;
  margin-top: 8px;
}

.contact-submit {
  font-size: 13px;
}

.contact-status {
  margin: 0;
  font-family: var(--sans);
  font-size: 13px;
  line-height: 1.5;
  color: rgba(20, 27, 10, .7);
}

.contact-status.is-error {
  color: #7a1f1f;
}

.contact-status.is-success {
  color: var(--moss);
  font-style: italic;
}

/* Advisor card — calm, typographic, no portrait. Lives inside the
.enquire-card next to the form column, separated by a hairline. */
.advisor-card {
  position: relative;
  display: flex;
  flex-direction: column;
  padding: 64px 64px 64px 56px;
  background: rgba(213, 230, 194, .18);
  /* faintest tea wash for separation */
}

.advisor-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(28px, 2.6vw, 40px);
  line-height: 1.05;
  letter-spacing: -.018em;
  color: var(--moss);
  margin: 0;
  font-variation-settings: "opsz" 144;
}

.advisor-meta {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 15px;
  line-height: 1.6;
  color: rgba(20, 27, 10, .72);
  margin: 16px 0 0;
  max-width: 320px;
}

.advisor-rule {
  background: rgba(45, 56, 35, .22);
  margin: 36px 0 32px;
}

.advisor-channels {
  gap: 14px;
}

.advisor-channel dt,
.advisor-channel dd {
  color: var(--moss);
}

.advisor-channel dd {
  font-size: clamp(17px, 1.3vw, 20px);
}

.advisor-promise {
  font-family: var(--serif);
  font-weight: 400;
  font-size: 14px;
  color: rgba(20, 27, 10, .72);
  margin: 32px 0 0;
}

.advisor-promise em {
  font-style: italic;
}

/* Mobile — stack everything to single column, tighten spacing. */
@media (max-width:1024px) {
  .visit-grid {
    grid-template-columns: 1fr;
    gap: 48px;
  }

  .enquire-letter {
    border-radius: 24px;
  }

  .enquire-form-col {
    padding: 48px 40px;
  }

  .contact-row {
    grid-template-columns: 1fr;
    gap: 22px;
  }
}

@media (max-width:768px) {

  .visit,
  .enquire-fold {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .contact-hero-cta {
    margin-top: 32px;
    gap: 10px;
  }

  .visit-eyebrow,
  .enquire-eyebrow,
  .advisor-eyebrow {
    margin-bottom: 24px;
  }

  .visit-eyebrow-rule {
    width: 42px;
  }

  .visit-h {
    font-size: clamp(36px, 9vw, 60px);
  }

  .visit-rule {
    margin: 32px 0 28px;
  }

  .visit-channel,
  .advisor-channel {
    grid-template-columns: 1fr;
    gap: 6px;
    padding-bottom: 14px;
    border-bottom: 1px solid rgba(45, 56, 35, .12);
  }

  .visit-channel:last-child,
  .advisor-channel:last-child {
    border-bottom: 0;
    padding-bottom: 0;
  }

  .visit-channel dd,
  .advisor-channel dd {
    font-size: 18px;
  }

  .visit-map {
    aspect-ratio: 4/3;
    border-radius: 14px;
  }

  .enquire-h {
    font-size: clamp(28px, 7vw, 40px);
    margin-bottom: 32px;
  }

  .contact-form {
    gap: 20px;
  }

  .enquire-form-col {
    padding: 40px 28px;
  }
}

/* ============================================================
NEIGHBOURHOOD PAGE — fold-specific layouts.
Hero (olive) → Narrative (ivory, two-col + pull-quote) →
Atlas (tea, 3×2 grid of place markers) → Closing (pistachio).
The .hood-eyebrow class is shared across folds so the page reads
as a unified field-guide register.
============================================================ */
/* Shared editorial eyebrow — small mono with a 64px hairline rule.
Used on hero, atlas head, and any other section anchor. */
.hood-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 18px;
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .28em;
  text-transform: uppercase;
  color: currentColor;
  opacity: .7;
  margin-bottom: 32px;
}

.hood-eyebrow-rule {
  display: inline-block;
  width: 64px;
  height: 1px;
  background: currentColor;
  opacity: .45;
}

/* On the olive hero the eyebrow text + rule pick up the ivory color
automatically via currentColor. */
.opening .hood-eyebrow {
  color: var(--moss);
}

/* Hero — keep the existing .opening-text rules; just centre the
eyebrow above the headline. */
.opening .opening-text {
  /* keep desktop centre alignment from base styles */
}

.opening .hood-eyebrow {
  justify-content: center;
}

/* ------- FOLD 2 — NARRATIVE (ivory) ------- */
.narrative-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 80px;
  align-items: start;
  max-width: 1180px;
  margin: 0 auto;
}

.narrative-p {
  font-family: var(--serif);
  /* Body weight + body optical size — was 300/opsz:144 (display cut)
which has thin strokes that make sustained reading hard at this
size. Now using 400 weight + opsz:24 (text cut), looser tracking,
slightly more line-height. Reads like an editorial article. */
  font-weight: 400;
  font-variation-settings: "opsz" 24;
  font-size: clamp(19px, 1.4vw, 23px);
  line-height: 1.6;
  letter-spacing: 0;
  color: var(--moss);
  margin: 0;
}

.narrative-p em {
  font-style: italic;
  color: var(--moss);
}

/* Pull-quote — centred italic call-out between the paragraphs and
the atlas. Two short lines, the second italicised. The
surrounding hairlines are decorative, not section transitions. */
.narrative-pull {
  margin: 96px auto 0;
  padding: 64px 0 0;
  max-width: 880px;
  text-align: center;
  border-top: 1px solid rgba(45, 56, 35, .18);
  position: relative;
}

.narrative-pull::before {
  content: "";
  position: absolute;
  left: 50%;
  top: -1px;
  width: 8px;
  height: 8px;
  background: var(--moss);
  border-radius: 50%;
  transform: translate(-50%, -50%);
}

.narrative-pull p {
  font-family: var(--serif);
  font-weight: 400;
  font-variation-settings: "opsz" 144;
  font-size: clamp(28px, 3vw, 48px);
  line-height: 1.18;
  letter-spacing: -.022em;
  color: var(--olive);
  margin: 0;
}

.narrative-pull p+p {
  margin-top: 8px;
}

.narrative-pull em {
  font-style: italic;
  color: var(--moss);
}

/* ------- FOLD 3 — ATLAS (tea) ------- */
.atlas {
  color: var(--moss);
}

.atlas-head {
  margin-bottom: 80px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

.atlas-h {
  font-family: var(--serif);
  font-weight: 500;
  font-variation-settings: "opsz" 144;
  font-size: var(--t-h2-size);
  line-height: .96;
  letter-spacing: -.028em;
  color: var(--moss);
  margin: 0;
}

/* 2-col atlas grid — each marker now occupies a substantial editorial
page rather than a packed cell. Olive matrix bg + 1px gaps render
the six cards as a thin atlas table. */
.atlas-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1px;
  background: rgba(45, 56, 35, .18);
  border-top: 1px solid rgba(45, 56, 35, .18);
  border-bottom: 1px solid rgba(45, 56, 35, .18);
}

.atlas-card {
  background: var(--tea);
  padding: 80px 64px 88px;
  display: flex;
  flex-direction: column;
  gap: 32px;
  min-height: 440px;
  position: relative;
}

.atlas-card-meta {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  padding-bottom: 24px;
  border-bottom: 1px solid rgba(45, 56, 35, .22);
}

.atlas-card-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 13px;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--moss);
  opacity: .85;
}

.atlas-card-of {
  opacity: .5;
  font-weight: 400;
}

.atlas-card-cat {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .28em;
  text-transform: uppercase;
  color: var(--moss);
  opacity: .6;
}

.atlas-card-h {
  font-family: var(--serif);
  font-weight: 400;
  font-variation-settings: "opsz" 144;
  font-size: clamp(40px, 4.2vw, 68px);
  line-height: 1.0;
  letter-spacing: -.028em;
  color: var(--moss);
  margin: 0;
  max-width: 540px;
}

/* Stat-style card variant — poster-scale serif number + small mono
unit. The stat IS the headline. Anchors the row visually. */
.atlas-card--stat .atlas-card-h {
  display: flex;
  align-items: baseline;
  gap: 14px;
  font-size: clamp(96px, 10vw, 168px);
  line-height: .86;
  letter-spacing: -.045em;
  font-weight: 300;
}

.atlas-stat-unit {
  font-family: var(--display);
  font-weight: 500;
  font-size: 16px;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--moss);
  opacity: .65;
  align-self: flex-end;
  padding-bottom: .7em;
}

.atlas-card-body {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 17px;
  line-height: 1.6;
  color: rgba(20, 27, 10, .78);
  margin: 0;
  margin-top: auto;
  /* anchor body to bottom of card */
  max-width: 480px;
}

/* Per-card sigil — a 72px hand-drawn glyph at the top-left of each
card, treated as the specimen mark for that marker. Sits in the
card's normal flex flow so it anchors the rest of the content
visually. Stroke uses non-scaling-stroke so the silhouette scales
while the line weight stays refined (~1.4 CSS px at any size). */
.atlas-card-icon {
  position: static;
  flex: 0 0 auto;
  display: block;
  width: 72px;
  height: 72px;
  color: var(--moss);
  opacity: .7;
  pointer-events: none;
}

.atlas-card-icon svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}

.atlas-card-icon svg * {
  vector-effect: non-scaling-stroke;
}

/* ------- FOLD 4 — CLOSING (pistachio) ------- */
.hood-close-tagline {
  font-family: var(--serif);
  font-weight: 400;
  font-variation-settings: "opsz" 144;
  font-size: var(--t-h4-size);
  line-height: 1.25;
  letter-spacing: -.018em;
  color: var(--moss);
  margin: 32px auto 0;
  max-width: 720px;
}

.hood-close-tagline em {
  font-style: italic;
}

/* ============================================================
NEIGHBOURHOOD — mobile.
Narrative goes single-col, pull-quote tightens.
Atlas grid → 1-col with a soft horizontal hairline between cards
(replaces the desktop "table" gap).
============================================================ */
@media (max-width:1024px) {
  .narrative-grid {
    grid-template-columns: 1fr;
    gap: 36px;
  }

  /* Keep 2-col but tighten padding so cards stay readable on tablets */
  .atlas-card {
    padding: 56px 44px 64px;
    min-height: 380px;
  }

  .atlas-card-h {
    font-size: clamp(36px, 5vw, 52px);
  }

  .atlas-card--stat .atlas-card-h {
    font-size: clamp(72px, 11vw, 120px);
  }

  .atlas-card-icon {
    width: 60px;
    height: 60px;
  }
}

@media (max-width:768px) {

  /* Narrative — mobile reading rules made EXPLICIT (don't silently
rely on the desktop inheritance). Body cut at weight 400, opsz 24,
line-height 1.6 — same recipe as desktop, just sized down. */
  .narrative {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .narrative-grid {
    gap: 24px;
  }

  .narrative-p {
    font-family: var(--serif);
    font-weight: 400;
    font-variation-settings: "opsz" 24;
    font-size: clamp(17px, 4.6vw, 19px);
    line-height: 1.65;
    letter-spacing: 0;
    color: var(--moss);
  }

  .narrative-pull {
    margin-top: 56px;
    padding-top: 40px;
    max-width: 560px;
  }

  .narrative-pull p {
    font-size: clamp(24px, 7vw, 38px);
    line-height: 1.18;
  }

  /* Atlas — single-column stack with hairlines, tighter heading. */
  .atlas {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .atlas-head {
    margin-bottom: 36px;
  }

  .atlas-h {
    font-size: clamp(36px, 9vw, 56px);
  }

  .atlas-grid {
    grid-template-columns: 1fr;
    background: transparent;
    border: 0;
    gap: 0;
  }

  .atlas-card {
    padding: 44px 0 48px;
    min-height: 0;
    border-bottom: 1px solid rgba(45, 56, 35, .18);
    gap: 22px;
  }

  .atlas-card:last-child {
    border-bottom: 0;
  }

  .atlas-card-meta {
    padding-bottom: 16px;
  }

  .atlas-card-h {
    font-size: clamp(30px, 8vw, 44px);
  }

  .atlas-card--stat .atlas-card-h {
    font-size: clamp(60px, 17vw, 96px);
    gap: 10px;
  }

  .atlas-stat-unit {
    font-size: 13px;
    padding-bottom: .6em;
  }

  .atlas-card-body {
    font-size: 15px;
  }

  .atlas-card-icon {
    width: 52px;
    height: 52px;
    opacity: .65;
  }

  /* Closing tagline scales down; closing CTA pair stacks. */
  .hood-close-tagline {
    font-size: clamp(20px, 5.4vw, 28px);
    margin-top: 24px;
  }

  .closing-cta {
    flex-direction: column;
    align-items: center;
    gap: 10px;
  }

  .closing-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
  }
}

@media (max-width:480px) {

  /* On the smallest phones the narrative can step down a touch more
to keep two-column-of-text rhythm even in single-col stack. */
  .narrative-p {
    font-size: 17px;
  }

  .narrative-pull p {
    font-size: clamp(22px, 7.4vw, 30px);
  }

  .atlas-card {
    padding: 36px 0 40px;
  }

  .atlas-card-h {
    font-size: clamp(26px, 8.4vw, 36px);
  }

  .atlas-card--stat .atlas-card-h {
    font-size: clamp(56px, 18vw, 84px);
  }

  .atlas-h {
    font-size: clamp(32px, 10vw, 44px);
  }
}

/* ===== villas.html ===== */
/* .wrap{max-width:1440px;margin:0 auto;padding:0 24px}
@media (max-width:768px){ .wrap{padding:0 20px} }
@media (max-width:480px){ .wrap{padding:0 16px} } */
/* eyebrow / labels */
/* pill button — copied verbatim from index.html so visuals match exactly */
/* Oval-arrow icon for pill buttons */
/* Icon colors flow via custom properties so they cascade through <use> shadow DOM */
/* Light-bg pills — invert: dark oval, light arrow */
/* Nav ghost pill hovers to olive — revert icon back to default colors */
/* Download icon — defaults: ivory oval, olive arrow */
/* ============================================================
HEADER — glassmorphic floating capsule
============================================================ */
/* Scoped to the site header — using a bare `header{}` selector
accidentally captured `<header>` elements inside folds and pinned
them to the viewport. */
#site-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 50;
  padding: 18px 24px;
  transition: padding .3s ease;
}

#site-header.scrolled {
  padding: 12px 24px;
}

/* ============================================================
HAMBURGER + MOBILE MENU
============================================================ */
/* ============================================================
SECTION TRANSITION SYSTEM (mirrors index.html)
============================================================ */
.opening,
.philosophy,
.architecture,
.living,
.features,
.shape,
.configs,
.closing {
  position: relative;
  border-bottom-left-radius: 40px;
  border-bottom-right-radius: 40px;
}

/* Section stacking — descending z-index so each section's rounded
bottom corners overlap the section below. */
.opening.villas_bg {
  background: var(--olive);
  z-index: 9;
  color: var(--ivory);
}

.philosophy.philosophy_villas {
  background: var(--ivory);
  z-index: 8;
  margin-top: -40px;
  padding-top: 140px;
  padding-bottom: 120px;
}

.architecture {
  background: var(--tea);
  z-index: 7;
  margin-top: -40px;
  padding-top: 140px;
  padding-bottom: 120px;
}

.living {
  background: var(--ivory);
  z-index: 6;
  margin-top: -40px;
  padding-top: 140px;
  padding-bottom: 120px;
}

.features {
  background: var(--olive);
  z-index: 5;
  margin-top: -40px;
  padding-top: 140px;
  padding-bottom: 140px;
  color: var(--ivory);
}

.configs {
  background: var(--ivory);
  z-index: 3;
  margin-top: -40px;
  padding-top: 140px;
  padding-bottom: 140px;
}

/* ============================================================
FOLD 1 — OPENING STATEMENT
Hero-like: section-label, big H1, body lead, full-width film
============================================================ */
.villas_bg.opening::before ,
.contact_bg.opening::before {
  /* Pinned to the section's own box — NOT 100vw — so iOS Safari
versions without overflow-x:clip support can't leak this layer
past the viewport edge. `filter:brightness(0)` collapses the
SVG's colour to pure black so the topographic lines read as a
darker-than-olive etching against the bg. */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: url("images/bg_vector.svg");
  background-size: 400%;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  filter: brightness(0);
  opacity: .12;
  pointer-events: none;
}

/* Soft moss radial wash — a darker centre that sinks the headline
into the bg without going darker than olive. Replaces the old
pistachio halo (which made no sense on a dark fold). */
.villas_bg.opening::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 78% 72% at 50% 72%,
      rgba(20, 27, 10, .55) 0%,
      rgba(20, 27, 10, .20) 35%,
      rgba(20, 27, 10, 0) 70%);
  pointer-events: none;
  z-index: 1;
}

.villas_bg.opening>.wrap {
  position: relative;
  z-index: 2;
}

.villas_bg .opening-h ,
.contact_bg .opening-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h1-size);
  line-height: var(--t-h1-lh);
  letter-spacing: var(--t-h1-tracking);
  color: var(--ivory);
  margin-top: 24px;
}

.villas_bg .opening-body ,
.contact_bg .opening-body {
  margin: 36px auto 0;
  max-width: 760px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: clamp(17px, 1.4vw, 20px);
  line-height: 1.6;
  color: rgba(242, 246, 234, .78);
}

/* ============================================================
FOLD 2 — THE PHILOSOPHY
Pistachio bg. Editorial 2-col: subhead-left / lead+body-right
============================================================ */
/* ---- Philosophy fold — typographic centerpiece ----
Lead pull-quote → ruled list of 3 oversized "choices" (number ·
display word · faded "over X") → decorative line.svg divider →
centered closing prose. Mixes Fraunces opsz-144 display with
Inter sans for serif/sans tonal contrast.
*/
/* Subgrid so all 3 rows share column tracks — col 1 sizes to the widest
word, which makes the image and "over X" align vertically across rows. */
/* Hover bg lives on a ::before so it can:
- fill the row exactly (no L/R bleed past wrap edges)
- have rounded corners
- fade in/out without affecting layout / shifting any text */
/* Flip text colors on hover so they read against the olive bg */
/* trailing "." reads as a quiet beat */
/* Editorial image strip slotting between display word and "over X" */
/* ============================================================
FOLD 3 — THE PRINCIPLES
Ivory bg. 2-col head + 2x2 grid of alternating cards.
============================================================ */
/* 4-up alternation reads strongest as ivory · olive · ivory · olive */
/* Use design-system tokens — H5 for the card title, .body for copy */
/* ============================================================
FOLD 4 — HOW THE WORLD TAKES SHAPE
Olive bg, ivory text. Lead + 3 alternating image-text rows.
============================================================ */
/* Decorative bg vector — pure black via filter:brightness(0), pinned to
the viewport (background-attachment:fixed) so it stays in place while
the section's content scrolls past it. */
/* 2-col layout: sticky headline (left) + sticky-stacked cards (right).
Each card sticks slightly lower than the one before it, creating an
overlapping shingle effect as the user scrolls. */
/* Card structure: horizontal 16:9 split.
- LEFT (5fr): moss bg + caption text, vertically centered
- RIGHT (7fr): photograph, fills the cell
- Image lives first in DOM (mobile-first stacking) but grid-column
places it on the right at desktop. */
/* Middle card breaks the moss rhythm — pistachio bg with moss text for
a dark / light / dark visual cadence as the cards stack. */
/* When a later card stickies on top, this card fades to 80% */
/* Floating prose below the sticky headline — moves with .shape-left,
stays visible the entire scroll through the cards column. */
/* ============================================================
FOLD 5 — WHAT THIS WORLD ENABLES
Tea bg. 3 large editorial lines, centered. Closing prose.
============================================================ */
/* ============================================================
FOLD 6 — CLOSING REFLECTION
Pistachio bg, full-fill vector + radial glow. Centered headline + CTA.
============================================================ */
/* ============================================================
FOOTER
============================================================ */
/* ============================================================
VIDEO MODAL
============================================================ */
/* ================================================================
RESPONSIVE PASS — mobile/tablet adaptations
================================================================ */
@media (max-width:1024px) {

  /* Mobile/tablet header collapses to: brand left, hamburger right.
Both the desktop link strip AND the Enquire pill are hidden — the
mobile menu drawer reproduces both. */
  .nav-links {
    display: none;
  }

  .nav-cta {
    display: none;
  }

  .hamburger {
    display: flex;
  }

  .nav {
    grid-template-columns: auto auto;
    justify-content: space-between;
  }

  /* Belt-and-suspenders horizontal-overflow clip on the document root.
body uses overflow-x:clip (preserves sticky descendants on desktop)
but iOS Safari < 16 doesn't honour `clip` and falls back to visible
— letting the page swipe sideways. On mobile/tablet there are no
sticky descendants, so hiding overflow on <html> is safe. */
  html {
    overflow-x: hidden;
  }
}

@media (max-width:768px) {
  section {
    padding-top: 72px;
    padding-bottom: 72px;
  }

  .section-label {
    margin-bottom: 24px;
    gap: 10px;
  }

  .section-label .line {
    max-width: 60px;
  }

  /* Header */
  #site-header {
    padding: 12px 12px;
  }

  #site-header.scrolled {
    padding: 8px 12px;
  }

  .nav {
    padding: 6px 6px 6px 16px;
    gap: 8px;
  }

  .brand-logo {
    height: 18px;
  }

  /* OPENING */
  .opening {
    padding-top: 120px;
  }

  .opening-text {
    padding: 8px 0 64px;
  }

  .opening-h {
    font-size: clamp(40px, 11vw, 72px);
    line-height: .96;
    letter-spacing: -.03em;
  }

  .opening-body {
    margin-top: 24px;
    font-size: 16px;
  }

  /* PHILOSOPHY — mobile typographic rebuild
Lead shrinks, the 3-column choice row collapses to a 2-row stack
(number + word, then "over X" indented under), keeping the editorial
rhythm without breaking line-lengths on phones. */
  .philosophy {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .philosophy-lead {
    font-size: clamp(28px, 8vw, 48px);
    line-height: 1.18;
    letter-spacing: -.02em;
  }

  .philosophy-rule {
    margin: 56px 0 4px;
  }

  /* Mobile collapses subgrid back to a single-column stack */
  .philosophy-choices {
    grid-template-columns: 1fr;
  }

  .philosophy-choice {
    grid-template-rows: auto auto auto;
    gap: 14px;
    padding: 24px 18px 28px;
  }

  .philosophy-choice::before {
    left: 0;
    right: 0;
    top: 6px;
    bottom: 6px;
    border-radius: 18px;
  }

  .choice-word {
    grid-column: 1;
    grid-row: 1;
    font-size: clamp(48px, 15vw, 84px);
    letter-spacing: -.035em;
  }

  .choice-img {
    grid-column: 1;
    grid-row: 2;
    max-width: none;
    width: 100%;
    height: 96px;
    margin-top: 8px;
    border-radius: 8px;
  }

  .choice-over {
    grid-column: 1;
    grid-row: 3;
    text-align: left;
    font-size: 28px;
    color: rgba(20, 27, 10, .55);
    padding-top: 6px;
  }

  .philosophy-close {
    margin-top: 48px;
  }

  /* SHAPE — golf-course feature; .am-bento mobile rules live further
down in the page-specific block. Section padding only here. */
  .shape {
    padding-top: 96px;
    padding-bottom: 88px;
  }

  /* ENABLES — horizontal scroll-jack collapses to a swipe carousel;
the carousel rules live further down in the page-specific block. */
  .enables {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  /* CLOSING */
  .closing {
    padding-top: 120px;
    padding-bottom: 96px;
  }

  .closing-h {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
  }

  .closing-body {
    margin-top: 24px;
    font-size: 15px;
  }

  .closing-cta {
    margin-top: 32px;
    flex-direction: column;
    align-items: center;
    gap: 12px;
  }

  .closing-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
  }

  /* FOOTER accordion */
  footer {
    padding-top: 80px;
    padding-bottom: 24px;
  }

  .foot-grid {
    grid-template-columns: 1fr;
    gap: 0;
    padding-bottom: 28px;
  }

  .foot-brand {
    margin-bottom: 24px;
  }

  .foot-brand .brand-logo {
    height: 120px !important;
  }

  .foot-brand p {
    margin-top: 14px;
    font-size: 13px;
  }

  .foot-col {
    border-bottom: 1px solid rgba(242, 246, 234, .12);
  }

  .foot-col:last-child {
    border-bottom: 0;
  }

  .foot-col h4 {
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 0;
    margin-bottom: 0;
    color: var(--pistachio);
    user-select: none;
  }

  .foot-col h4::after {
    content: "";
    width: 11px;
    height: 11px;
    position: relative;
    flex: 0 0 auto;
    background:
      linear-gradient(currentColor, currentColor) center/100% 1px no-repeat,
      linear-gradient(currentColor, currentColor) center/1px 100% no-repeat;
    transition: transform .3s cubic-bezier(.2, .6, .2, 1);
    opacity: .85;
  }

  .foot-col.is-open h4::after {
    transform: rotate(45deg);
  }

  .foot-col ul {
    max-height: 0;
    overflow: hidden;
    transition: max-height .4s cubic-bezier(.2, .6, .2, 1), padding .35s ease;
    padding-bottom: 0;
  }

  .foot-col.is-open ul {
    max-height: 320px;
    padding-bottom: 18px;
  }

  .foot-col li {
    margin-bottom: 12px;
    font-size: 14px;
  }

  .foot-col li:last-child {
    margin-bottom: 0;
  }

  .foot-bot {
    margin-top: 24px;
    flex-direction: column;
    gap: 8px;
    font-size: 11px;
  }

  /* Section transition radii — all 8 folds on this page */
  .opening,
  .philosophy,
  .architecture,
  .living,
  .features,
  .shape,
  .configs,
  .closing {
    border-bottom-left-radius: 28px;
    border-bottom-right-radius: 28px;
  }

  .philosophy,
  .architecture,
  .living,
  .features,
  .shape,
  .configs,
  .closing,
  footer {
    margin-top: -28px;
  }

  .philosophy,
  .architecture,
  .living,
  .features,
  .shape,
  .configs {
    padding-top: 96px;
  }

  .closing {
    padding-top: 120px;
  }

  footer {
    padding-top: 80px;
  }

  /* Video modal */
  .video-modal {
    padding: 12px;
  }

  .video-modal-close {
    top: 16px;
    right: 16px;
    width: 44px;
    height: 44px;
  }

  .video-modal-video {
    max-height: 80vh;
  }
}

@media (max-width:480px) {
  .v-tenet {
    padding: 40px 16px 48px;
  }

  .v-tenet-num {
    font-size: clamp(64px, 22vw, 96px);
  }

  /* Tightens the section's main headline at the smallest viewport
so it doesn't sit at 72px on a 360px screen. */
  .v-tenets-h {
    font-size: clamp(36px, 11vw, 56px);
  }

  #site-header {
    padding: 10px 10px;
  }

  #site-header.scrolled {
    padding: 8px 10px;
  }

  .nav {
    padding: 5px 5px 5px 14px;
  }

  .hamburger {
    width: 36px;
    height: 36px;
  }

  .opening-h {
    font-size: clamp(36px, 12.5vw, 60px);
  }

  .philosophy-lead {
    font-size: clamp(26px, 8.6vw, 40px);
    line-height: 1.2;
  }

  .choice-word {
    font-size: clamp(40px, 15.5vw, 72px);
  }

  .closing-h {
    font-size: clamp(24px, 6.4vw, 34px);
  }

  .am-close-tagline {
    font-size: clamp(24px, 6.4vw, 34px);
    line-height: 1.3;
  }

  .foot-brand .brand-logo {
    height: 104px !important;
  }

  .mobile-menu-nav a {
    font-size: clamp(24px, 7.8vw, 34px);
  }

  .mobile-menu-cta {
    max-width: 100%;
  }

  /* Match the page gutter at this breakpoint (16px) so the first card
lines up with the headline above it. */
  .am-horiz-cards {
    padding: 4px 16px 8px;
  }

  /* Architecture carousel — match the 16px gutter at the smallest size. */
  .v-cards {
    margin: 0 -16px;
    padding: 4px 16px 8px;
  }
}

/* ============================================================
LOADING SCREEN + "WORKS" MORPH TRANSITION
Phase 1: dark moss screen with gently-pulsing logo.
Phase 2: ivory curtain rises (curve), flattens to cover screen,
then whole loader fades to opacity 0 — page revealed.
============================================================ */
@keyframes rt-logo-pulse {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: .55;
  }
}

/* Lock body scroll while loader is visible */
/* ============================================================
ENQUIRY MODAL — editorial form, ivory card on moss backdrop.
============================================================ */
@media (max-width:640px) {
  .enquire-modal {
    padding: 16px 14px;
  }

  .enquire-card {
    padding: 28px 22px 24px;
    border-radius: 18px;
  }

  .enquire-close {
    top: 10px;
    right: 10px;
    width: 36px;
    height: 36px;
  }

  .enquire-eyebrow {
    margin-bottom: 8px;
  }

  .enquire-title {
    font-size: clamp(22px, 6vw, 28px);
  }

  .enquire-sub {
    font-size: 13.5px;
  }

  .enquire-form {
    margin-top: 18px;
    gap: 14px;
  }

  .enquire-row {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .enquire-submit {
    width: 100%;
    justify-content: center;
  }
}

/* ------ Tea variant (Brochure download) ------ */
/* ============================================================
AMENITIES PAGE — fold-specific overrides + new components
============================================================ */
/* Fold 3 anchor — image fills the section as background, text card
floats on the right at 50% width. Section padding tightened so the
visible space above/below matches the wrap's L/R padding of 24px
(after the -40 transition overlap is absorbed). */
.villas_golf.shape {
  padding-top: 104px !important;
  padding-bottom: 64px !important;
  background-color: var(--olive);
  /* fallback under the image */
  background-image: url("images/amenities/villas_golf_landscape.jpg");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  /* photo stays put as the section scrolls */
}

/* Scrim — lifts the right-side text card off the photograph and keeps
the left half from feeling visually heavy. Soft left→right olive wash. */
.villas_golf.shape::before {
  display: block;
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(20, 27, 10, .55) 0%, rgba(20, 27, 10, .20) 55%, rgba(20, 27, 10, 0) 100%);
  z-index: 0;
  pointer-events: none;
}

.villas_golf.shape>.wrap {
  padding-top: 0;
  padding-bottom: 0;
  position: relative;
  z-index: 1;
}

.am-bento {
  display: flex;
  justify-content: flex-end;
  /* text card occupies the right half */
  align-items: stretch;
}

.am-bento .am-bento-text {
  width: 35%;
  /* reduced ~15pp from 50% — more photo on show */
}

.am-bento-card {
  position: relative;
  border-radius: 28px;
  overflow: hidden;
}

/* Glass-morphism text card — translucent white over the photo with a
blurred backdrop. A subtle white inner edge + soft drop-shadow gives
the floating-glass impression. Text colors stay olive for legibility. */
.am-bento-text {
  background-color: rgba(255, 255, 255, .55);
  backdrop-filter: blur(22px) saturate(140%);
  -webkit-backdrop-filter: blur(22px) saturate(140%);
  border: 1px solid rgba(255, 255, 255, .45);
  box-shadow:
    0 18px 48px rgba(20, 27, 10, .18),
    inset 0 1px 0 rgba(255, 255, 255, .55);
  /* tiny highlight along the top */
  padding: 48px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  /* equal whitespace top/bottom, matches L/R padding */
}

.am-bento-eyebrow {
  align-self: flex-start;
  margin-bottom: 24px;
  color: var(--olive);
  opacity: .6;
}

.am-bento-text .am-bento-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(32px, 3.2vw, 52px);
  /* tuned for the narrower glass card */
  line-height: 1.05;
  letter-spacing: var(--t-h3-tracking);
  color: var(--olive);
  max-width: none;
  /* card itself constrains width now */
  margin: 0;
}

.am-bento-text .am-bento-body {
  margin-top: 24px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: rgba(45, 56, 35, .92);
  /* higher contrast on translucent glass */
  max-width: none;
}

.am-bento-cta {
  margin-top: 36px;
  align-self: flex-start;
  background: var(--pistachio);
  color: var(--moss);
  --ico-bg: var(--moss);
  --ico-fg: var(--ivory);
}

.am-bento-cta:hover {
  background: var(--olive);
  color: var(--ivory);
  --ico-bg: var(--ivory);
  --ico-fg: var(--olive);
}

/* Top-right feature image card */
.am-bento-feature {
  background: var(--olive);
  min-height: 368px;
}

.am-bento-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  z-index: 0;
  display: block;
}

/* Bottom-right two image cards */
.am-bento-imgs {
  grid-area: imgs;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}

.am-bento-small {
  min-height: 192px;
}

.am-bento-small--a {
  background: var(--tea);
}

.am-bento-small--b {
  background: var(--pistachio);
}

/* Fold 4 — override .enables to ivory bg + left-align */
.enables {
  background: var(--ivory) !important;
  color: var(--olive);
  text-align: left;
}

/* Override section padding-bottom to 0 — the horizontal pin container
lives below the wrap and provides its own vertical scroll budget. */
.am-horiz {
  padding-bottom: 0 !important;
}

.am-more-h {
  /* Match Fold 2's philosophy-lead exactly — same scale + weight so the
two headlines feel like they belong together. */
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(34px, 4.6vw, 76px);
  line-height: 1.12;
  letter-spacing: -.025em;
  color: var(--olive);
  margin: 0 0 40px;
  /* gap to cards below */
  max-width: 1180px;
}

/* Horizontal scroll-jack:
- .am-horiz-pin is artificially tall — provides scroll runway
- .am-horiz-track sticks to the viewport while the pin scrolls past;
headline + cards row both live INSIDE the track so the headline
pins WITH the cards (visible above them through the whole scroll)
- .am-horiz-cards inside is translateX'd by JS based on scroll progress */
.am-horiz-pin {
  position: relative;
  height: 380vh;
  /* ~3.8× viewport — runway for 8 cards × 60vw to scroll past */
}

.am-horiz-track {
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  padding-top: 100px;
  padding-bottom: 60px;
}

.am-horiz-head {
  flex-shrink: 0;
  padding: 0 24px 0 44px;
  /* +20px on the left vs cards-row */
  text-align: left;
}

.am-horiz-head .am-more-h {
  margin-left: 0;
  margin-right: 0;
}

@media (max-width:768px) {

  /* On mobile the headline sits inside the page gutter — no extra
left indent — so it lines up with body copy elsewhere on the page. */
  .am-horiz-head {
    padding: 0 20px;
  }
}

@media (max-width:480px) {
  .am-horiz-head {
    padding: 0 16px;
  }
}

.am-horiz-cards {
  flex: 1;
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 24px;
  padding: 0 24px 0 44px;
  /* +20px on left to match the headline */
  will-change: transform;
}

/* Each card: 40vw wide → two full + a peek of the third visible at once.
50/50 horizontal split: text left, image right, --moss bg, ivory text. */
.am-card {
  flex: 0 0 60vw;
  height: 54vh;
  display: grid;
  grid-template-columns: 1fr 1fr;
  border-radius: 24px;
  overflow: hidden;
  background: var(--moss);
  color: var(--ivory);
}

/* Alternate cards — even-numbered cards flip to pistachio + moss text */
.am-card:nth-child(even) {
  background: var(--pistachio);
  color: var(--moss);
}

.am-card:nth-child(even) .am-card-h {
  color: var(--moss);
}

.am-card:nth-child(even) .am-card-num {
  color: var(--moss);
  opacity: .65;
}

.am-card:nth-child(even) .am-card-body {
  color: rgba(20, 27, 10, .78);
}

.am-card-text {
  position: relative;
  /* anchors the decorative pattern below */
  padding: 40px 56px;
  /* tighter top/bottom, generous L/R */
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 20px;
  overflow: hidden;
}

/* Decorative SVG pattern — each card sets its own --pattern var.
Renders at 20% opacity behind text so the moss/pistachio bg
remains dominant. cover-fit so portrait SVGs fill the panel. */
.am-card-text::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: var(--pattern, none);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: .20;
  pointer-events: none;
}

.am-card-text>* {
  position: relative;
  z-index: 1;
}

/* Pistachio (even) cards have less contrast against the dark pattern,
so dial it down to keep the surface calm. */
.am-card:nth-child(even) .am-card-text::before {
  opacity: .06;
}

.am-card-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 12px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--ivory);
  opacity: .55;
}

.am-card-h {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(32px, 3vw, 52px);
  line-height: 1.1;
  letter-spacing: -.022em;
  color: var(--ivory);
  margin: 0;
}

.am-card-body {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 16px;
  line-height: 1.6;
  color: rgba(242, 246, 234, .8);
  margin: 0;
}

.am-card-img {
  position: relative;
  background: var(--olive);
}

.am-card-img img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Fold 5 — extra body + tagline lines for amenities closing */
.am-close-body {
  font-family: var(--sans);
  font-weight: 400;
  font-size: clamp(17px, 1.3vw, 19px);
  line-height: 1.65;
  color: rgba(20, 27, 10, .78);
  max-width: 600px;
  margin: 32px auto 0;
}

.am-close-tagline {
  font-family: var(--serif);
  font-weight: 400;
  /* Match the closing headline above — same H4-token scale so the two
serif lines read as a single statement, not two paragraphs. */
  font-size: var(--t-h4-size);
  line-height: 1.25;
  letter-spacing: -.018em;
  color: var(--moss);
  margin: 40px auto 0;
  max-width: 880px;
}

.am-close-tagline em {
  font-style: normal;
  font-variation-settings: "opsz" 144;
  font-weight: 500;
}

.closing .closing-cta {
  margin-top: 48px;
}

/* Mobile adaptation */
@media (max-width:768px) {

  /* Mobile: text card spans full width over the image bg.
Background-attachment:fixed is dropped on mobile — it renders oddly
on iOS (zooms the photo to viewport, not section) and looks worse
than a normal scrolling cover. Glass blur dialled down for perf
on budget Android. */
  .shape {
    background-attachment: scroll;
  }

  .shape>.wrap {
    padding-top: 32px;
    padding-bottom: 48px;
  }

  .am-bento {
    justify-content: stretch;
  }

  .am-bento .am-bento-text {
    width: 100%;
  }

  .am-bento-text {
    padding: 28px 24px 32px;
    backdrop-filter: blur(14px) saturate(130%);
    -webkit-backdrop-filter: blur(14px) saturate(130%);
    background-color: rgba(255, 255, 255, .65);
  }

  .am-bento-text .am-bento-h {
    font-size: clamp(28px, 7vw, 40px);
  }

  .am-more-h {
    margin-bottom: 32px;
    font-size: clamp(34px, 9vw, 52px);
  }

  /* Disable scroll-jack and convert to a native horizontal scroll-snap
carousel — same pattern as the homepage Amenities strip. The pin
is already viewport-width (no `.wrap` parent), so the cards row
does NOT use a negative bleed margin — its left padding is the
gutter, and the first card aligns with the headline above. */
  .am-horiz-pin {
    height: auto;
  }

  .am-horiz-track {
    position: static;
    height: auto;
    display: block;
    padding: 0;
    overflow: visible;
  }

  .am-horiz-cards {
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 14px;
    padding: 4px 20px 8px;
    margin: 0;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    transform: none !important;
  }

  .am-horiz-cards::-webkit-scrollbar {
    display: none;
  }

  .am-card {
    flex: 0 0 82%;
    height: auto;
    grid-template-columns: 1fr;
    grid-template-rows: auto auto;
    border-radius: 20px;
    scroll-snap-align: center;
  }

  .am-card-img {
    aspect-ratio: 16/10;
    min-height: 0;
  }

  .am-card-text {
    padding: 24px 26px 28px;
    gap: 12px;
  }

  .am-card-h {
    font-size: clamp(22px, 5.4vw, 30px);
  }

  .am-close-body {
    font-size: 15px;
    margin-top: 24px;
  }

  .am-close-tagline {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
    margin-top: 32px;
  }
}

/* ============================================================
VILLAS PAGE — fold-specific layouts.
Each fold reuses .v-head/.v-h/.v-lead at the top and lays out
its body with a per-fold grid below.
============================================================ */
/* Shared headline / lead block */
.v-head {
  margin: 0 0 56px;
}

.v-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h2-size);
  line-height: 1.05;
  letter-spacing: -.025em;
  color: var(--olive);
  margin: 0;
  max-width: 880px;
}

.v-lead {
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-lg-size);
  line-height: 1.55;
  color: rgba(45, 56, 35, .78);
  margin: 24px 0 0;
  max-width: 680px;
}

/* On the dark olive Features fold, headlines + leads invert. */
.features .v-h {
  color: var(--ivory);
}

.features .v-lead {
  color: rgba(242, 246, 234, .78);
}

/* Fold 2 — design-philosophy stanza
3-line numbered list, mono num + serif phrase, faint divider. */
.v-phrases {
  list-style: none;
  padding: 0;
  margin: 48px 0 0;
  display: grid;
  gap: 18px;
  max-width: 820px;
}

.v-phrases li {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 24px;
  align-items: baseline;
  padding-bottom: 18px;
  border-bottom: 1px solid rgba(45, 56, 35, .14);
}

.v-phrases li:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.v-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .55;
}

.v-phrase {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(20px, 1.6vw, 26px);
  line-height: 1.35;
  letter-spacing: -.012em;
  color: var(--olive);
}

/* Fold 2 — "The Tenets" editorial spreads.
Replaces the older numbered list. Each tenet is a full-width grid:
[ numeral · portrait image · type ]
The intro block (eyebrow + headline + lead) sits inside the wrap
above; the three tenets run edge-to-edge below for prominence. */
/* Intro block — eyebrow + asymmetric headline + lead */
.v-tenets-intro {
  margin-top: 24px;
  display: grid;
  grid-template-columns: 1.45fr 1fr;
  column-gap: 80px;
  row-gap: 24px;
  align-items: end;
  padding-bottom: 88px;
}

.v-tenets-eyebrow {
  grid-column: 1 / -1;
  display: inline-flex;
  align-items: center;
  gap: 18px;
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .28em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .7;
  margin-bottom: 24px;
}

.v-tenets-eyebrow-rule {
  display: inline-block;
  width: 64px;
  height: 1px;
  background: rgba(45, 56, 35, .45);
}

.v-tenets-h {
  grid-column: 1;
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(56px, 7vw, 124px);
  line-height: .94;
  letter-spacing: -.032em;
  color: var(--olive);
  margin: 0;
  font-variation-settings: "opsz" 144;
}

.v-tenets-h em {
  font-style: italic;
  font-weight: 400;
  /* "intent." set in italic — gives the headline a cadence shift */
}

.v-tenets-lead {
  grid-column: 2;
  font-family: var(--sans);
  font-weight: 400;
  font-size: 18px;
  line-height: 1.65;
  color: rgba(45, 56, 35, .78);
  margin: 0;
  max-width: 440px;
  padding-bottom: 14px;
  /* nudges baseline closer to h2 baseline */
}

/* Tenets list — runs edge-to-edge for prominence. A continuous
olive hairline runs along the top and bottom; each tenet is
separated by another hairline. */
.v-tenets {
  position: relative;
  border-top: 1px solid rgba(45, 56, 35, .18);
  border-bottom: 1px solid rgba(45, 56, 35, .18);
}

.v-tenet {
  display: grid;
  grid-template-columns: 200px minmax(0, 1fr) 1.25fr;
  gap: 64px;
  padding: 80px 56px;
  align-items: start;
  border-bottom: 1px solid rgba(45, 56, 35, .14);
}

.v-tenet:last-child {
  border-bottom: 0;
}

/* Numeral column — display-optical Fraunces, oversized, baseline-aligned
with the phrase column on the right via flex. */
.v-tenet-index {
  display: flex;
  align-items: baseline;
  gap: 10px;
  color: var(--olive);
  /* Stagger the numeral's vertical position per tenet so the column
reads as a slow descending arpeggio instead of a flat list. */
  padding-top: .4em;
}

.v-tenet[data-tenet="02"] .v-tenet-index {
  padding-top: 1.4em;
}

.v-tenet[data-tenet="03"] .v-tenet-index {
  padding-top: 2.4em;
}

.v-tenet-num {
  font-family: var(--serif);
  font-weight: 300;
  font-variation-settings: "opsz" 144;
  font-size: clamp(96px, 9vw, 140px);
  line-height: .85;
  letter-spacing: -.04em;
}

.v-tenet-of {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .5;
  align-self: flex-start;
  padding-top: .65em;
}

/* Image — softened rectangle. ~30% shorter than the original 5:6
portrait so it sits as a calm landscape band rather than a tall
plate. The wrap clips the img so its scale-out reveal stays inside
the rounded corners. */
.v-tenet-img-wrap {
  position: relative;
  overflow: hidden;
  background: var(--olive);
  aspect-ratio: 6/5;
  border-radius: 18px;
}

.v-tenet-img {
  position: absolute;
  inset: 0;
}

.v-tenet-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 1.4s cubic-bezier(.2, .6, .2, 1);
  transform: scale(1.04);
  /* starts slightly zoomed; resets on reveal */
}

/* Text column — meta tag + serif phrase + animated rule.
The serif phrase is large but soft (weight 300, opsz 144). */
.v-tenet-text {
  display: flex;
  flex-direction: column;
  gap: 22px;
  padding-top: 1.2em;
  /* aligns the meta with image's optical top */
  max-width: 520px;
}

.v-tenet-meta {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .55;
}

.v-tenet-h {
  font-family: var(--serif);
  font-weight: 300;
  font-variation-settings: "opsz" 144;
  font-size: clamp(34px, 3.4vw, 56px);
  line-height: 1.06;
  letter-spacing: -.024em;
  color: var(--olive);
  margin: 0;
}

.v-tenet-rule {
  display: block;
  height: 1px;
  background: var(--olive);
  width: 0;
  transition: width 1.6s cubic-bezier(.2, .6, .2, 1);
  margin-top: 8px;
}

/* Reveal states — set by IntersectionObserver in JS.
On enter: image releases zoom, rule draws across, content fades
in with a tiny upward slide. Stagger via animation-delay per
element. */
.v-tenet-index,
.v-tenet-img-wrap,
.v-tenet-text>* {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity .9s cubic-bezier(.2, .6, .2, 1),
    transform .9s cubic-bezier(.2, .6, .2, 1);
}

.v-tenet.is-in-view .v-tenet-index {
  opacity: 1;
  transform: none;
  transition-delay: 0ms;
}

.v-tenet.is-in-view .v-tenet-img-wrap {
  opacity: 1;
  transform: none;
  transition-delay: 120ms;
}

.v-tenet.is-in-view .v-tenet-img img {
  transform: scale(1);
}

.v-tenet.is-in-view .v-tenet-text>.v-tenet-meta {
  opacity: 1;
  transform: none;
  transition-delay: 200ms;
}

.v-tenet.is-in-view .v-tenet-text>.v-tenet-h {
  opacity: 1;
  transform: none;
  transition-delay: 280ms;
}

.v-tenet.is-in-view .v-tenet-text>.v-tenet-rule {
  opacity: 1;
  transform: none;
  transition-delay: 360ms;
  width: 100%;
}

/* Hover — image scales gently */
@media (hover:hover) {
  .v-tenet:hover .v-tenet-img img {
    transform: scale(1.04);
  }
}

/* Reduced-motion — drop animations entirely */
@media (prefers-reduced-motion:reduce) {

  .v-tenet-index,
  .v-tenet-img-wrap,
  .v-tenet-text>* {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .v-tenet-img img {
    transform: none !important;
    transition: none;
  }

  .v-tenet-rule {
    width: 100% !important;
    transition: none;
  }
}

/* Fold 3 — architecture grid (3-up captioned image cards) */
.v-cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

.v-card {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.v-card-img {
  aspect-ratio: 4/5;
  border-radius: 18px;
  overflow: hidden;
  background: var(--olive);
}

.v-card-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.v-card-h {
  font-family: var(--serif);
  font-weight: 400;
  /* Stepped up one tier in the type system: H6 → H5 token */
  font-size: var(--t-h5-size);
  line-height: var(--t-h5-lh);
  letter-spacing: var(--t-h5-tracking);
  color: var(--olive);
  margin: 0;
  max-width: 340px;
}

/* Fold 4 — living-spaces alternating rows
Slower, more editorial than the architecture grid above. */
.v-rows {
  display: flex;
  flex-direction: column;
  gap: 80px;
}

.v-row {
  display: grid;
  grid-template-columns: 1.05fr .95fr;
  gap: 48px;
  align-items: center;
}

.v-row--reverse {
  grid-template-columns: .95fr 1.05fr;
}

.v-row--reverse .v-row-img {
  order: 2;
}

.v-row--reverse .v-row-text {
  order: 1;
}

.v-row-img {
  aspect-ratio: 4/3;
  border-radius: 24px;
  overflow: hidden;
  background: var(--olive);
}

.v-row-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.v-row-text {
  display: flex;
  flex-direction: column;
  gap: 18px;
  padding: 0 24px;
}

.v-row-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .55;
}

.v-row-h {
  font-family: var(--serif);
  font-weight: 400;
  /* Stepped up another tier → H3 token */
  font-size: var(--t-h3-size);
  line-height: var(--t-h3-lh);
  letter-spacing: var(--t-h3-tracking);
  color: var(--olive);
  margin: 0;
  max-width: 560px;
}

/* Fold 5 — features grid (4-card on olive) */
.v-feat-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 20px;
}

.v-feat {
  background: rgba(242, 246, 234, .06);
  border: 1px solid rgba(242, 246, 234, .14);
  border-radius: 20px;
  padding: 32px 28px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  min-height: 240px;
}

.v-feat-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--ivory);
  opacity: .55;
}

.v-feat-h {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(20px, 1.6vw, 26px);
  line-height: 1.25;
  letter-spacing: -.012em;
  color: var(--ivory);
  margin: 0;
}

.v-feat-body {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 15px;
  line-height: 1.6;
  color: rgba(242, 246, 234, .78);
  margin: 0;
  margin-top: auto;
}

/* Fold 6 — golf-points list (inside the .am-bento glass card) */
.v-golf-points {
  list-style: none;
  padding: 0;
  margin: 24px 0 0;
  display: grid;
  gap: 10px;
}

.v-golf-points li {
  position: relative;
  padding-left: 22px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: 15px;
  line-height: 1.55;
  color: rgba(45, 56, 35, .85);
}

.v-golf-points li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .6em;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--moss);
  opacity: .6;
}

/* Fold 7 — villa configurations (2 large cards) */
.v-config-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}

.v-config {
  background: #fff;
  border: 1px solid var(--rule);
  border-radius: 24px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.v-config-img {
  aspect-ratio: 4/3;
  background: var(--olive);
  overflow: hidden;
}

.v-config-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.v-config-body {
  padding: 32px 36px 36px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.v-config-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .6;
}

.v-config-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: clamp(24px, 2vw, 32px);
  line-height: 1.2;
  letter-spacing: -.018em;
  color: var(--olive);
  margin: 0;
}

.v-config-text {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 16px;
  line-height: 1.6;
  color: rgba(45, 56, 35, .78);
  margin: 0;
}

/* Villa folds — mobile adaptation
Everything stacks 1-up; gutters tighten; type scales down.   */
@media (max-width:768px) {

  .architecture,
  .living,
  .features,
  .configs {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .v-head {
    margin-bottom: 36px;
  }

  .v-h {
    font-size: clamp(32px, 8vw, 48px);
  }

  .v-lead {
    font-size: 16px;
    margin-top: 18px;
  }

  .v-phrases {
    margin-top: 28px;
    gap: 14px;
  }

  .v-phrases li {
    grid-template-columns: auto 1fr;
    gap: 14px;
    padding-bottom: 14px;
  }

  .v-phrase {
    font-size: clamp(17px, 4.6vw, 22px);
  }

  /* Tenets — mobile: stack to single column, smaller numerals, no
stagger offset. The image goes wide (4:5) so it stays a hero. */
  .v-tenets-intro {
    grid-template-columns: 1fr;
    column-gap: 0;
    row-gap: 24px;
    padding-bottom: 56px;
  }

  .v-tenets-eyebrow {
    margin-bottom: 12px;
  }

  .v-tenets-eyebrow-rule {
    width: 42px;
  }

  .v-tenets-h {
    font-size: clamp(44px, 11vw, 72px);
  }

  .v-tenets-lead {
    font-size: 16px;
    padding-bottom: 0;
    max-width: none;
  }

  .v-tenet {
    grid-template-columns: 1fr;
    gap: 24px;
    padding: 48px 20px 56px;
  }

  .v-tenet[data-tenet="02"] .v-tenet-index,
  .v-tenet[data-tenet="03"] .v-tenet-index {
    padding-top: .4em;
  }

  .v-tenet-num {
    font-size: clamp(72px, 18vw, 110px);
  }

  .v-tenet-img-wrap {
    aspect-ratio: 8/7;
    border-radius: 14px;
  }

  .v-tenet-text {
    padding-top: 0;
    gap: 16px;
  }

  .v-tenet-h {
    font-size: clamp(26px, 7vw, 38px);
  }

  /* ARCHITECTURE — convert the 3-up image grid into a horizontal
scroll-snap carousel on mobile. Same recipe as amenities + world
principles. Three image cards swipe nicely; vertical stacking
would be ~3 viewport-heights of tall portraits. */
  .v-cards {
    display: flex;
    grid-template-columns: none;
    /* reset desktop grid */
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 14px;
    margin: 0 -20px;
    padding: 4px 20px 8px;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }

  .v-cards::-webkit-scrollbar {
    display: none;
  }

  .v-card {
    flex: 0 0 82%;
    scroll-snap-align: center;
  }

  .v-card-img {
    aspect-ratio: 4/5;
  }

  /* keep portrait; reads better in swipe */
  .v-rows {
    gap: 48px;
  }

  .v-row,
  .v-row--reverse {
    grid-template-columns: 1fr;
    gap: 18px;
  }

  .v-row--reverse .v-row-img {
    order: 0;
  }

  .v-row--reverse .v-row-text {
    order: 0;
  }

  .v-row-text {
    padding: 0;
  }

  .v-row-h {
    font-size: clamp(22px, 6vw, 30px);
  }

  .v-feat-grid {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .v-feat {
    min-height: 0;
    padding: 24px 22px;
  }

  .v-config-grid {
    grid-template-columns: 1fr;
    gap: 18px;
  }

  .v-config-body {
    padding: 22px 24px 26px;
  }

  .v-config-h {
    font-size: clamp(22px, 6vw, 28px);
  }
}

/* ===== world.html ===== */
/* .wrap{max-width:1440px;margin:0 auto;padding:0 24px}
@media (max-width:768px){ .wrap{padding:0 20px} }
@media (max-width:480px){ .wrap{padding:0 16px} } */
/* eyebrow / labels */
.section-label {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 40px;
}

.section-label .num {
  font-size: 11px;
  letter-spacing: .22em;
  font-weight: 500;
  opacity: .55;
  text-transform: uppercase;
}

.section-label .line {
  flex: 1;
  height: 1px;
  background: var(--rule);
  max-width: 120px;
}

.section-label .label {
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  font-weight: 500;
  opacity: .8;
}

.section-label.is-light .num,
.section-label.is-light .label {
  color: var(--ivory);
}

.section-label.is-light .line {
  background: rgba(242, 246, 234, .2);
  max-width: 120px;
}

/* pill button — copied verbatim from index.html so visuals match exactly */
.pill {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 22px;
  border-radius: 999px;
  font-size: 13px;
  letter-spacing: .04em;
  font-weight: 500;
  transition: all .25s ease;
  white-space: nowrap;
}

.pill svg {
  width: 14px;
  height: 14px;
  transition: transform .25s ease;
}

.pill:hover svg {
  transform: translate(2px, -2px);
}

/* Oval-arrow icon for pill buttons */
.pill .btn-arrow {
  width: 22px;
  height: 18px;
  flex-shrink: 0;
  display: inline-block;
  transition: transform .3s ease;
  overflow: visible;
}

.pill:hover .btn-arrow {
  transform: translate(4px, 0);
}

/* Icon colors flow via custom properties so they cascade through <use> shadow DOM */
.btn-arrow-bg {
  fill: var(--ico-bg, var(--ivory));
  transition: fill .25s ease;
}

.btn-arrow-fg {
  fill: var(--ico-fg, var(--olive));
  transition: fill .25s ease;
}

/* Light-bg pills — invert: dark oval, light arrow */
.pill--light,
.nav-cta .pill--ghost {
  --ico-bg: var(--olive);
  --ico-fg: var(--ivory);
}

/* Nav ghost pill hovers to olive — revert icon back to default colors */
.nav-cta .pill--ghost:hover {
  --ico-bg: var(--ivory);
  --ico-fg: var(--olive);
}

/* Download icon — defaults: ivory oval, olive arrow */
.dl-arrow-bg {
  fill: var(--dl-bg, var(--ivory));
  transition: fill .25s ease;
}

.dl-arrow-fg {
  fill: var(--dl-fg, var(--olive));
  transition: fill .25s ease;
}

.nav-cta .pill--ghost {
  --dl-bg: var(--olive);
  --dl-fg: var(--pistachio);
}

.nav-cta .pill--ghost:hover {
  --dl-bg: var(--ivory);
  --dl-fg: var(--pistachio);
}

.pill--dark {
  background: var(--olive);
  color: var(--ivory);
}

.pill--dark:hover {
  background: var(--moss);
}

.pill--ghost {
  background: transparent;
  color: var(--olive);
  border: 1px solid var(--rule);
}

.pill--ghost:hover {
  background: var(--olive);
  color: var(--ivory);
  border-color: var(--olive);
}

.pill--light {
  background: var(--ivory);
  color: var(--olive);
}

.pill--light:hover {
  background: #fff;
}

/* ============================================================
HEADER — glassmorphic floating capsule
============================================================ */
/* header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 50;
  padding: 18px 24px;
  transition: padding .3s ease;
} */

header.scrolled {
  padding: 12px 24px;
}

.nav {
  max-width: 1440px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 18px;
  background: rgba(242, 246, 234, .45);
  -webkit-backdrop-filter: blur(22px) saturate(180%);
  backdrop-filter: blur(22px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, .55);
  border-radius: 999px;
  padding: 8px 8px 8px 22px;
  box-shadow:
    0 8px 32px rgba(45, 56, 35, .08),
    0 1px 2px rgba(45, 56, 35, .04),
    inset 0 1px 0 rgba(255, 255, 255, .55),
    inset 0 -1px 0 rgba(45, 56, 35, .05);
  transition: background .3s ease, box-shadow .3s ease;
}

header.scrolled .nav {
  background: rgba(242, 246, 234, .7);
  box-shadow:
    0 12px 40px rgba(45, 56, 35, .1),
    0 2px 4px rgba(45, 56, 35, .05),
    inset 0 1px 0 rgba(255, 255, 255, .6),
    inset 0 -1px 0 rgba(45, 56, 35, .05);
}

.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 2px 0;
}

.brand-logo {
  height: 21px;
  width: auto;
  object-fit: contain;
}

.brand-name {
  font-family: var(--serif);
  font-size: 20px;
  font-weight: 400;
  color: var(--olive);
  letter-spacing: -.01em;
}

.nav-links {
  display: flex;
  justify-content: center;
  gap: 2px;
  align-items: center;
  justify-self: center;
}

.nav-links a {
  padding: 9px 16px;
  font-size: 13px;
  letter-spacing: .02em;
  font-weight: 500;
  border-radius: 999px;
  transition: background .25s ease, color .25s ease, box-shadow .25s ease;
  color: var(--olive);
}

.nav-links a:hover,
.nav-links a.is-active {
  background: var(--pistachio);
  color: var(--moss);
}

.nav-cta {
  display: flex;
  gap: 6px;
  align-items: center;
}

.nav-cta .pill {
  padding: 11px 18px;
  font-size: 12px;
}

.nav-cta .pill--ghost {
  background: var(--pistachio);
  color: var(--moss);
  border: 1px solid transparent;
}

.nav-cta .pill--ghost:hover {
  background: var(--olive);
  color: var(--ivory);
  border-color: var(--olive);
}

/* ============================================================
HAMBURGER + MOBILE MENU
============================================================ */
.hamburger {
  display: none;
  width: 40px;
  height: 40px;
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  border-radius: 50%;
  transition: background .25s ease;
}

.hamburger:hover {
  background: rgba(45, 56, 35, .06);
}

.hamburger span {
  display: block;
  width: 22px;
  height: 1.5px;
  background: var(--olive);
  border-radius: 1px;
  transition: transform .35s cubic-bezier(.2, .6, .2, 1), opacity .25s ease;
  transform-origin: center;
}

.hamburger.is-open span:nth-child(1) {
  transform: translateY(6.5px) rotate(45deg);
}

.hamburger.is-open span:nth-child(2) {
  opacity: 0;
}

.hamburger.is-open span:nth-child(3) {
  transform: translateY(-6.5px) rotate(-45deg);
}

.mobile-menu {
  position: fixed;
  inset: 0;
  z-index: 60;
  background: var(--moss);
  color: var(--ivory);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 36px;
  padding: 32px 24px;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity .35s cubic-bezier(.2, .6, .2, 1),
    visibility .35s cubic-bezier(.2, .6, .2, 1);
}

.mobile-menu.is-open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

.mobile-menu::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("images/banner_bg.jpg");
  background-size: cover;
  background-position: center;
  opacity: .04;
  pointer-events: none;
}

.mobile-menu-close {
  position: absolute;
  top: 20px;
  right: 20px;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: rgba(242, 246, 234, .1);
  border: 1px solid rgba(242, 246, 234, .3);
  color: var(--ivory);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 2;
  transition: background .25s ease, transform .25s ease, border-color .25s ease;
}

.mobile-menu-close:hover {
  background: rgba(242, 246, 234, .18);
  border-color: rgba(242, 246, 234, .5);
  transform: scale(1.04);
}

.mobile-menu-close svg {
  width: 18px;
  height: 18px;
}

.mobile-menu-nav {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}

.mobile-menu-nav a {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(28px, 7vw, 40px);
  line-height: 1.15;
  letter-spacing: -.015em;
  color: var(--ivory);
  padding: 8px 12px;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity .5s cubic-bezier(.2, .6, .2, 1) var(--menu-delay, 0ms),
    transform .5s cubic-bezier(.2, .6, .2, 1) var(--menu-delay, 0ms),
    color .25s ease;
}

.mobile-menu.is-open .mobile-menu-nav a {
  opacity: .92;
  transform: translateY(0);
}

.mobile-menu-nav a:hover {
  color: var(--pistachio);
  opacity: 1;
}

.mobile-menu-nav a:nth-child(1) {
  --menu-delay: 80ms;
}

.mobile-menu-nav a:nth-child(2) {
  --menu-delay: 140ms;
}

.mobile-menu-nav a:nth-child(3) {
  --menu-delay: 200ms;
}

.mobile-menu-nav a:nth-child(4) {
  --menu-delay: 260ms;
}

.mobile-menu-nav a:nth-child(5) {
  --menu-delay: 320ms;
}

.mobile-menu-cta {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  gap: 12px;
  width: 100%;
  max-width: 300px;
  margin-top: 8px;
}

.mobile-menu-pill {
  width: 100%;
  justify-content: center;
  padding: 14px 22px;
  font-size: 13px;
  letter-spacing: .05em;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity .5s cubic-bezier(.2, .6, .2, 1) var(--menu-delay, 0ms),
    transform .5s cubic-bezier(.2, .6, .2, 1) var(--menu-delay, 0ms),
    background .25s ease, color .25s ease;
}

.mobile-menu.is-open .mobile-menu-pill {
  opacity: 1;
  transform: translateY(0);
}

.mobile-menu-pill:nth-child(1) {
  --menu-delay: 380ms;
}

.mobile-menu-pill:nth-child(2) {
  --menu-delay: 440ms;
}

.mobile-menu-pill.pill--ghost {
  background: transparent;
  color: var(--ivory);
  border: 1px solid rgba(242, 246, 234, .4);
  --ico-bg: var(--ivory);
  --ico-fg: var(--moss);
}

.mobile-menu-pill.pill--ghost:hover {
  background: var(--pistachio);
  color: var(--moss);
  border-color: var(--pistachio);
  --ico-bg: var(--moss);
  --ico-fg: var(--pistachio);
}

.mobile-menu-pill.pill--dark {
  background: var(--pistachio);
  color: var(--moss);
  --ico-bg: var(--moss);
  --ico-fg: var(--pistachio);
}

.mobile-menu-pill.pill--dark:hover {
  background: var(--ivory);
  color: var(--moss);
  --ico-bg: var(--moss);
  --ico-fg: var(--ivory);
}


  button.send-otp-btn {
    padding: 8px 10px !important;
  }

body.menu-open {
  overflow: hidden;
}

/* ============================================================
SECTION TRANSITION SYSTEM (mirrors index.html)
============================================================ */
section {
  padding-top: 120px;
  padding-bottom: 120px;
}

.opening,
.philosophy,
.principles,
.shape,
.enables,
.closing {
  position: relative;
  border-bottom-left-radius: 40px;
  border-bottom-right-radius: 40px;
}

.opening {
  background: var(--ivory);
  z-index: 7;
}

.philosophy {
  background: var(--pistachio);
  z-index: 6;
  margin-top: -40px;
  padding-top: 140px;
}

.principles {
  background: var(--ivory);
  z-index: 5;
  padding-bottom: 120px;
}

.shape {
  background: var(--olive);
  z-index: 4;
  margin-top: -40px;
  padding-top: 140px;
  color: var(--ivory);
  overflow: clip;
}

.enables {
  background: var(--tea);
  z-index: 3;
  margin-top: -40px;
  padding-top: 140px;
}

.closing {
  background: var(--pistachio);
  z-index: 2;
  margin-top: -40px;
  padding-top: 200px;
  padding-bottom: 160px;
  text-align: center;
  overflow: hidden;
}

footer {
  background: var(--moss);
  z-index: 1;
  margin-top: -40px;
  padding-top: 120px;
}

/* ============================================================
FOLD 1 — OPENING STATEMENT
Hero-like: section-label, big H1, body lead, full-width film
============================================================ */
.opening.amenities_bg {
  padding-top: 160px;
  padding-bottom: 0;
  overflow: hidden;
}

.opening::before {
  /* Pinned to the section's own box — NOT 100vw — so iOS Safari
versions without overflow-x:clip support can't leak this layer
past the viewport edge. */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: url("images/bg_vector.svg");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: .04;
  pointer-events: none;
}

.contact_bg.opening>.wrap {
  position: relative;
  z-index: 2;
}
.opening.amenities_bg>.wrap {
  position: relative;
  z-index: 2;
}

.opening-text {
  max-width: 1080px;
  margin: 0 auto;
  text-align: center;
  padding: 32px 0 96px;
}

.opening-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h1-size);
  line-height: var(--t-h1-lh);
  letter-spacing: var(--t-h1-tracking);
  color: var(--olive);
  margin-top: 24px;
}

.opening-body {
  margin: 36px auto 0;
  max-width: 620px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: clamp(17px, 1.4vw, 20px);
  line-height: 1.6;
  color: rgba(45, 56, 35, .85);
}

.opening-body p+p {
  margin-top: 14px;
}

.opening-film {
  position: relative;
  width: 100%;
  aspect-ratio: 16/9;
  border-radius: 24px;
  overflow: hidden;
  background: var(--olive);
  margin-bottom: 96px;
}

.opening-film video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.opening-film .play-btn {
  position: absolute;
  left: 32px;
  bottom: 32px;
  display: flex;
  align-items: center;
  gap: 14px;
  z-index: 2;
  background: transparent;
  border: 0;
  cursor: pointer;
}

.play-glass {
  position: relative;
  width: 72px;
  height: 72px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  color: var(--ivory);
  background: rgba(255, 255, 255, .18);
  border: 0;
  -webkit-backdrop-filter: blur(18px) saturate(160%);
  backdrop-filter: blur(18px) saturate(160%);
  box-shadow: 0 12px 40px rgba(0, 0, 0, .18), inset 0 1px 0 rgba(255, 255, 255, .4);
  transition: transform .35s ease, background .35s ease, box-shadow .35s ease;
}

.play-glass svg {
  width: 22px;
  height: 22px;
  margin-left: 3px;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, .2));
}

.play-btn:hover .play-glass {
  transform: scale(1.06);
  background: rgba(255, 255, 255, .22);
  box-shadow: 0 18px 60px rgba(0, 0, 0, .24), inset 0 1px 0 rgba(255, 255, 255, .55);
}

.play-label {
  color: var(--ivory);
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  font-weight: 500;
  text-shadow: 0 1px 4px rgba(0, 0, 0, .3);
}

/* ============================================================
FOLD 2 — THE PHILOSOPHY
Pistachio bg. Editorial 2-col: subhead-left / lead+body-right
============================================================ */
/* ---- Philosophy fold — typographic centerpiece ----
Lead pull-quote → ruled list of 3 oversized "choices" (number ·
display word · faded "over X") → decorative line.svg divider →
centered closing prose. Mixes Fraunces opsz-144 display with
Inter sans for serif/sans tonal contrast.
*/
.philosophy {
  color: var(--moss);
}

.philosophy>.wrap {
  position: relative;
}

.philosophy-lead {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(34px, 4.6vw, 76px);
  line-height: 1.12;
  letter-spacing: -.025em;
  color: var(--moss);
  max-width: 1180px;
}

.philosophy-lead em {
  font-weight: 500;
  font-variation-settings: "opsz" 144;
}

.philosophy-rule {
  width: 100%;
  height: 1px;
  background: rgba(20, 27, 10, .2);
  margin: 96px 0 8px;
}

/* Subgrid so all 3 rows share column tracks — col 1 sizes to the widest
word, which makes the image and "over X" align vertically across rows. */
.philosophy-choices {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: auto 1fr auto;
  column-gap: 48px;
}

.philosophy-choice {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: subgrid;
  align-items: center;
  /* horizontal padding pushes content inward so the hover bg has
breathing room around the headline + over-text */
  padding: 36px 32px 40px;
  border-bottom: 1px solid rgba(20, 27, 10, .2);
  position: relative;
  cursor: pointer;
  transition: color .4s ease;
}

/* Hover bg lives on a ::before so it can:
- fill the row exactly (no L/R bleed past wrap edges)
- have rounded corners
- fade in/out without affecting layout / shifting any text */
.philosophy-choice::before {
  content: "";
  position: absolute;
  top: 8px;
  bottom: 8px;
  left: 0;
  right: 0;
  background: var(--olive);
  border-radius: 24px;
  opacity: 0;
  z-index: -1;
  transition: opacity .4s ease;
  pointer-events: none;
}

.philosophy-choice:hover::before {
  opacity: 1;
}

/* Flip text colors on hover so they read against the olive bg */
.philosophy-choice:hover .choice-word {
  color: var(--ivory);
}

.philosophy-choice:hover .choice-over {
  color: rgba(242, 246, 234, .6);
}

.philosophy-choice:hover .choice-over em {
  color: rgba(242, 246, 234, .92);
}

.choice-word {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(56px, 9vw, 156px);
  line-height: .92;
  letter-spacing: -.045em;
  color: var(--moss);
  font-variation-settings: "opsz" 144;
  align-self: center;
}

.choice-word .dot {
  opacity: .4;
}

/* trailing "." reads as a quiet beat */
/* Editorial image strip slotting between display word and "over X" */
.choice-img {
  display: block;
  width: 100%;
  max-width: 280px;
  height: 88px;
  object-fit: cover;
  border-radius: 10px;
  justify-self: center;
  align-self: center;
}

.choice-over {
  font-family: var(--sans);
  font-weight: 400;
  font-size: clamp(28px, 2.2vw, 34px);
  letter-spacing: .02em;
  color: rgba(20, 27, 10, .5);
  text-align: right;
  white-space: nowrap;
  align-self: center;
}

.choice-over em {
  font-weight: 500;
  color: rgba(20, 27, 10, .7);
}

.philosophy-close {
  margin: 120px 0 0;
  max-width: 1100px;
  text-align: left;
  font-family: var(--serif);
  font-weight: 300;
  font-size: var(--t-h4-size);
  line-height: var(--t-h4-lh);
  letter-spacing: var(--t-h4-tracking);
  color: rgba(20, 27, 10, .85);
}

.philosophy-close em {
  font-weight: 500;
  font-variation-settings: "opsz" 144;
  color: var(--moss);
}

/* ============================================================
FOLD 3 — THE PRINCIPLES
Ivory bg. 2-col head + 2x2 grid of alternating cards.
============================================================ */
.principles-head {
  margin-bottom: 64px;
  max-width: 1080px;
}

.principles-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h2-size);
  line-height: var(--t-h2-lh);
  letter-spacing: var(--t-h2-tracking);
  color: var(--olive);
}

.principles-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
}

.principle-card {
  position: relative;
  background: var(--ivory);
  border: 1px solid var(--rule);
  border-radius: 24px;
  padding: 32px 26px;
  display: flex;
  flex-direction: column;
  min-height: 340px;
  color: var(--olive);
  transition: transform .4s ease, box-shadow .4s ease;
}

.principle-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 16px 48px rgba(45, 56, 35, .08);
}

/* 4-up alternation reads strongest as ivory · olive · ivory · olive */
.principle-card:nth-child(even) {
  background: var(--olive);
  color: var(--ivory);
  border-color: transparent;
}

.principle-num {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  opacity: .55;
  margin-bottom: auto;
}

/* Use design-system tokens — H5 for the card title, .body for copy */
.principle-h {
  margin-top: 28px;
  font-family: var(--serif);
  font-weight: 600;
  font-size: var(--t-h5-size);
  line-height: var(--t-h5-lh);
  letter-spacing: var(--t-h5-tracking);
}

.principle-body {
  margin-top: 16px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  opacity: .78;
}

/* ============================================================
FOLD 4 — HOW THE WORLD TAKES SHAPE
Olive bg, ivory text. Lead + 3 alternating image-text rows.
============================================================ */
/* Decorative bg vector — pure black via filter:brightness(0), pinned to
the viewport (background-attachment:fixed) so it stays in place while
the section's content scrolls past it. */
.shape::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("images/bg_vector.svg");
  /* size bumped from cover → 200% so the pattern reads larger / more
pronounced on screen */
  background-size: 200%;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
  filter: brightness(0);
  /* opacity reduced ~30% from .18 → .13 — fainter trace */
  opacity: .13;
  pointer-events: none;
}

.shape>.wrap {
  position: relative;
  z-index: 1;
}

/* 2-col layout: sticky headline (left) + sticky-stacked cards (right).
Each card sticks slightly lower than the one before it, creating an
overlapping shingle effect as the user scrolls. */
.shape-grid {
  display: grid;
  grid-template-columns: .85fr 1.15fr;
  gap: 80px;
  align-items: start;
}

.shape-left {
  position: sticky;
  top: 120px;
  align-self: start;
}

.shape-h {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--t-h2-size);
  line-height: var(--t-h2-lh);
  letter-spacing: var(--t-h2-tracking);
  color: var(--ivory);
}

.shape-cards {
  display: flex;
  flex-direction: column;
  gap: 24px;
}

/* Card structure: horizontal 16:9 split.
- LEFT (5fr): moss bg + caption text, vertically centered
- RIGHT (7fr): photograph, fills the cell
- Image lives first in DOM (mobile-first stacking) but grid-column
places it on the right at desktop. */
.shape-card {
  position: sticky;
  border-radius: 24px;
  overflow: hidden;
  background: var(--moss);
  color: var(--ivory);
  display: grid;
  grid-template-columns: 5fr 7fr;
  /* aspect-ratio narrowed from 16/9 → 21/9 for a slimmer, more editorial card */
  aspect-ratio: 21/9;
  transition: opacity .35s ease;
}

.shape-card:nth-child(1) {
  top: 120px;
}

.shape-card:nth-child(2) {
  top: 138px;
}

.shape-card:nth-child(3) {
  top: 156px;
}

/* Middle card breaks the moss rhythm — pistachio bg with moss text for
a dark / light / dark visual cadence as the cards stack. */
.shape-card:nth-child(2) {
  background: var(--pistachio);
  color: var(--moss);
}

.shape-card:nth-child(2) .shape-card-text {
  color: var(--moss);
}

/* When a later card stickies on top, this card fades to 80% */
.shape-card.is-overlapped {
  opacity: .8;
}

.shape-card-img {
  grid-column: 2;
  grid-row: 1;
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  background: var(--moss);
}

.shape-card-img img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.shape-card-body {
  grid-column: 1;
  grid-row: 1;
  padding: 36px 40px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.shape-card-text {
  margin: 0;
  font-family: var(--serif);
  font-weight: 300;
  font-size: var(--t-h5-size);
  line-height: var(--t-h5-lh);
  letter-spacing: var(--t-h5-tracking);
  color: var(--ivory);
}

/* Floating prose below the sticky headline — moves with .shape-left,
stays visible the entire scroll through the cards column. */
.shape-left-prose {
  margin-top: 36px;
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(20px, 1.6vw, 26px);
  line-height: 1.4;
  letter-spacing: -.012em;
  color: rgba(242, 246, 234, .82);
  max-width: 480px;
}

.shape-left-prose p+p {
  margin-top: 8px;
}

/* ============================================================
FOLD 5 — WHAT THIS WORLD ENABLES
Tea bg. 3 large editorial lines, centered. Closing prose.
============================================================ */
.enables {
  text-align: center;
}

.enables-lines {
  display: flex;
  flex-direction: column;
  gap: 14px;
  max-width: 1100px;
  margin: 0 auto;
}

.enables-lines p {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(30px, 3vw, 52px);
  line-height: 1.25;
  letter-spacing: -.02em;
  color: var(--olive);
}

.enables-close {
  margin: 80px auto 0;
  font-family: var(--sans);
  font-weight: 400;
  font-size: clamp(18px, 1.4vw, 22px);
  line-height: 1.55;
  color: rgba(45, 56, 35, .8);
  max-width: 720px;
}

/* ============================================================
FOLD 6 — CLOSING REFLECTION
Pistachio bg, full-fill vector + radial glow. Centered headline + CTA.
============================================================ */
.closing::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("images/bg_vector.svg");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: .16;
  pointer-events: none;
  z-index: 0;
}

.closing::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 60% 55% at 50% 42%,
      var(--pistachio) 0%,
      rgba(164, 195, 111, .88) 30%,
      rgba(164, 195, 111, 0) 70%);
  pointer-events: none;
  z-index: 1;
}

.closing>.wrap {
  position: relative;
  z-index: 2;
}

.closing .section-label {
  justify-content: center;
  color: var(--moss);
}

.closing .section-label .num,
.closing .section-label .label {
  color: var(--moss);
}

.closing .section-label .line {
  background: rgba(20, 27, 10, .2);
}

.closing-h {
  font-family: var(--serif);
  font-weight: 400;
  /* Closing thought reads quieter than a section H1 — H4 token feels
contemplative, like a final line in an editorial column. */
  font-size: var(--t-h4-size);
  line-height: 1.25;
  letter-spacing: -.018em;
  color: var(--moss);
  max-width: 880px;
  margin: 0 auto;
}

.closing-body {
  margin: 36px auto 0;
  max-width: 560px;
  font-family: var(--sans);
  font-weight: 400;
  font-size: var(--t-body-size);
  line-height: 1.6;
  color: rgba(20, 27, 10, .78);
}

.closing-cta {
  margin-top: 48px;
  display: flex;
  gap: 14px;
  justify-content: center;
  flex-wrap: wrap;
}

/* ============================================================
FOOTER
============================================================ */
footer {
  padding-bottom: 32px;
  color: var(--ivory);
}

.foot-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr 1fr;
  gap: 48px;
  padding-bottom: 60px;
  border-bottom: 1px solid rgba(242, 246, 234, .12);
}

.foot-brand .brand-name {
  color: var(--ivory);
}

.foot-brand p {
  margin-top: 20px;
  color: rgba(242, 246, 234, .65);
  font-size: 14px;
  line-height: 1.6;
  max-width: 320px;
}

.foot-col h4 {
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--pistachio);
  margin-bottom: 18px;
}

.foot-col ul {
  list-style: none;
}

.foot-col li {
  margin-bottom: 10px;
}

.foot-col a {
  font-size: 14px;
  color: rgba(242, 246, 234, .85);
  transition: color .2s ease;
}

.foot-col a:hover {
  color: var(--ivory);
}

.foot-bot {
  margin-top: 32px;
  display: flex;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
  font-size: 12px;
  color: rgba(242, 246, 234, .55);
}

/* ============================================================
VIDEO MODAL
============================================================ */
.video-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(20, 27, 10, .94);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  display: none;
  align-items: center;
  justify-content: center;
  padding: 24px;
  opacity: 0;
  transition: opacity .3s ease;
}

.video-modal.is-open {
  display: flex;
  opacity: 1;
}

.video-modal-video {
  width: 100%;
  max-width: 1600px;
  max-height: 88vh;
  height: auto;
  border-radius: 12px;
  box-shadow: 0 24px 80px rgba(0, 0, 0, .4);
  background: #000;
}

.video-modal-close {
  position: absolute;
  top: 24px;
  right: 24px;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: rgba(255, 255, 255, .14);
  -webkit-backdrop-filter: blur(12px) saturate(160%);
  backdrop-filter: blur(12px) saturate(160%);
  border: 1px solid rgba(255, 255, 255, .28);
  color: var(--ivory);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1;
  transition: background .25s ease, transform .25s ease, border-color .25s ease;
}

.video-modal-close:hover {
  background: rgba(255, 255, 255, .24);
  border-color: rgba(255, 255, 255, .45);
  transform: scale(1.06);
}

.video-modal-close svg {
  width: 18px;
  height: 18px;
}

/* ================================================================
RESPONSIVE PASS — mobile/tablet adaptations
================================================================ */
@media (max-width:1024px) {

  /* Mobile/tablet header collapses to: brand left, hamburger right.
Both the desktop link strip AND the Enquire pill are hidden — the
mobile menu drawer reproduces both. */
  .nav-links {
    display: none;
  }

  .nav-cta {
    display: none;
  }

  .hamburger {
    display: flex;
  }

  .nav {
    grid-template-columns: auto auto;
    justify-content: space-between;
  }

  /* Principles row collapses 4-up → 2x2 in the in-between tablet range */
  .principles-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 18px;
  }

  /* Belt-and-suspenders horizontal-overflow clip on the document root.
body uses overflow-x:clip (preserves sticky descendants on desktop)
but iOS Safari < 16 doesn't honour `clip` and falls back to visible
— letting the page swipe sideways. On mobile/tablet there are no
sticky descendants, so hiding overflow on <html> is safe. */
  html {
    overflow-x: hidden;
  }
}

@media (max-width:768px) {
  section {
    padding-top: 72px;
    padding-bottom: 72px;
  }

  .section-label {
    margin-bottom: 24px;
    gap: 10px;
  }

  .section-label .line {
    max-width: 60px;
  }

  /* Header */
  header {
    padding: 12px 12px;
  }

  header.scrolled {
    padding: 8px 12px;
  }

  .nav {
    padding: 6px 6px 6px 16px;
    gap: 8px;
  }

  .brand-logo {
    height: 18px;
  }

  /* OPENING */
  .opening {
    padding-top: 120px;
  }

  .opening-text {
    padding: 8px 0 64px;
  }

  .opening-h {
    font-size: clamp(40px, 11vw, 72px);
    line-height: .96;
    letter-spacing: -.03em;
  }

  .opening-body {
    margin-top: 24px;
    font-size: 16px;
  }

  .opening-film {
    aspect-ratio: 4/3;
    border-radius: 18px;
    margin-bottom: 64px;
  }

  .opening-film .play-btn {
    left: 18px;
    bottom: 18px;
    gap: 8px;
  }

  .play-glass {
    width: 48px;
    height: 48px;
  }

  .play-glass svg {
    width: 14px;
    height: 14px;
    margin-left: 2px;
  }

  .play-label {
    font-size: 10px;
    letter-spacing: .18em;
  }

  /* PHILOSOPHY — mobile typographic rebuild
Lead shrinks, the 3-column choice row collapses to a 2-row stack
(number + word, then "over X" indented under), keeping the editorial
rhythm without breaking line-lengths on phones. */
  .philosophy {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .philosophy-lead {
    font-size: clamp(28px, 8vw, 48px);
    line-height: 1.18;
    letter-spacing: -.02em;
  }

  .philosophy-rule {
    margin: 56px 0 4px;
  }

  /* Mobile collapses subgrid back to a single-column stack */
  .philosophy-choices {
    grid-template-columns: 1fr;
  }

  .philosophy-choice {
    grid-template-rows: auto auto auto;
    gap: 14px;
    padding: 24px 18px 32px;
    /* Soften the divider so it sits with the floating ::before bg
rather than reading as a hard horizontal rule on mobile. */
    border-bottom-color: rgba(20, 27, 10, .12);
  }

  .philosophy-choice::before {
    left: 0;
    right: 0;
    top: 6px;
    bottom: 6px;
    border-radius: 18px;
  }

  .choice-word {
    grid-column: 1;
    grid-row: 1;
    font-size: clamp(48px, 15vw, 84px);
    letter-spacing: -.035em;
  }

  .choice-img {
    grid-column: 1;
    grid-row: 2;
    max-width: none;
    width: 100%;
    /* aspect-ratio replaces fixed height:96px which produced an
ugly forced letterbox on small phones. */
    aspect-ratio: 16/7;
    height: auto;
    margin-top: 8px;
    border-radius: 10px;
  }

  .choice-over {
    grid-column: 1;
    grid-row: 3;
    text-align: left;
    font-size: 28px;
    color: rgba(20, 27, 10, .55);
    padding-top: 6px;
  }

  .philosophy-close {
    margin-top: 48px;
  }

  /* PRINCIPLES */
  .principles {
    padding-bottom: 88px;
  }

  .principles-head {
    grid-template-columns: 1fr;
    gap: 18px;
    margin-bottom: 36px;
  }

  .principles-sub {
    padding-top: 0;
  }

  .principles-h {
    font-size: clamp(34px, 9vw, 52px);
    line-height: 1;
  }

  /* PRINCIPLES — convert the 4-up grid to a horizontal scroll-snap
carousel on mobile. Same recipe as the amenities .am-horiz-cards
mobile fallback. Saves ~1200px of vertical scroll, adds tactile
swipe interaction, and reads better than 4 stacked twin cards. */
  .principles-grid {
    display: flex;
    grid-template-columns: none;
    /* reset desktop grid */
    flex-direction: row;
    flex-wrap: nowrap;
    gap: 14px;
    margin: 0 -20px;
    /* bleed past wrap to viewport edges */
    padding: 4px 20px 8px;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }

  .principles-grid::-webkit-scrollbar {
    display: none;
  }

  .principle-card {
    flex: 0 0 82%;
    scroll-snap-align: center;
    padding: 32px 28px;
    min-height: auto;
  }

  .principle-h {
    margin-top: 24px;
  }

  .principle-body {
    margin-top: 14px;
  }

  /* SHAPE — collapse 2-col + remove sticky on phones */
  .shape {
    padding-top: 96px;
    padding-bottom: 88px;
  }

  .shape-grid {
    grid-template-columns: 1fr;
    gap: 32px;
  }

  .shape-left,
  .shape-card,
  .shape-card:nth-child(1),
  .shape-card:nth-child(2),
  .shape-card:nth-child(3) {
    position: static;
    top: auto;
  }

  .shape-h {
    font-size: clamp(34px, 9vw, 52px);
    line-height: 1;
  }

  .shape-cards {
    gap: 16px;
  }

  /* Collapse 2-col split to single-col stack: image on top, body below */
  .shape-card {
    grid-template-columns: 1fr;
    aspect-ratio: auto;
    border-radius: 18px;
  }

  .shape-card-img {
    grid-column: 1;
    grid-row: 1;
    aspect-ratio: 2/1;
  }

  .shape-card-body {
    grid-column: 1;
    grid-row: 2;
    padding: 22px 24px 26px;
    justify-content: flex-start;
  }

  .shape-card-text {
    font-size: clamp(20px, 5vw, 26px);
  }

  .shape-left-prose {
    margin-top: 24px;
    font-size: 17px;
  }

  /* ENABLES */
  .enables {
    padding-top: 96px;
    padding-bottom: 80px;
  }

  .enables-lines {
    gap: 10px;
  }

  .enables-lines p {
    font-size: clamp(24px, 6vw, 38px);
    line-height: 1.25;
  }

  .enables-close {
    margin-top: 48px;
    font-size: 16px;
  }

  /* CLOSING */
  .closing {
    padding-top: 120px;
    padding-bottom: 96px;
  }

  .closing-h {
    font-size: clamp(26px, 5.6vw, 38px);
    line-height: 1.3;
  }

  .closing-body {
    margin-top: 24px;
    font-size: 15px;
  }

  .closing-cta {
    margin-top: 32px;
    flex-direction: column;
    align-items: center;
    gap: 12px;
  }

  .closing-cta .pill {
    width: 100%;
    max-width: 280px;
    justify-content: center;
  }


  /* FOOTER accordion */
  footer {
    padding-top: 80px;
    padding-bottom: 24px;
  }

  .foot-grid {
    grid-template-columns: 1fr;
    gap: 0;
    padding-bottom: 28px;
  }

  .foot-brand {
    margin-bottom: 24px;
  }

  .foot-brand .brand-logo {
    height: 120px !important;
  }

  .foot-brand p {
    margin-top: 14px;
    font-size: 13px;
  }

  .foot-col {
    border-bottom: 1px solid rgba(242, 246, 234, .12);
  }

  .foot-col:last-child {
    border-bottom: 0;
  }

  .foot-col h4 {
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 0;
    margin-bottom: 0;
    color: var(--pistachio);
    user-select: none;
  }

  .foot-col h4::after {
    content: "";
    width: 11px;
    height: 11px;
    position: relative;
    flex: 0 0 auto;
    background:
      linear-gradient(currentColor, currentColor) center/100% 1px no-repeat,
      linear-gradient(currentColor, currentColor) center/1px 100% no-repeat;
    transition: transform .3s cubic-bezier(.2, .6, .2, 1);
    opacity: .85;
  }

  .foot-col.is-open h4::after {
    transform: rotate(45deg);
  }

  .foot-col ul {
    max-height: 0;
    overflow: hidden;
    transition: max-height .4s cubic-bezier(.2, .6, .2, 1), padding .35s ease;
    padding-bottom: 0;
  }

  .foot-col.is-open ul {
    max-height: 320px;
    padding-bottom: 18px;
  }

  .foot-col li {
    margin-bottom: 12px;
    font-size: 14px;
  }

  .foot-col li:last-child {
    margin-bottom: 0;
  }

  .foot-bot {
    margin-top: 24px;
    flex-direction: column;
    gap: 8px;
    font-size: 11px;
  }

  /* Section transition radii */
  .opening,
  .philosophy,
  .principles,
  .shape,
  .enables,
  .closing {
    border-bottom-left-radius: 28px;
    border-bottom-right-radius: 28px;
  }

  /* Every non-hero section pulls up by the radius so the rounded bottom
of the section above tucks into it — same pattern as the homepage. */
  .philosophy,
  .principles,
  .shape,
  .enables,
  .closing,
  footer {
    margin-top: -28px;
  }

  .philosophy {
    padding-top: 96px;
  }

  .shape {
    padding-top: 96px;
  }

  .enables {
    padding-top: 96px;
  }

  .closing {
    padding-top: 120px;
  }

  footer {
    padding-top: 80px;
  }

  /* Video modal */
  .video-modal {
    padding: 12px;
  }

  .video-modal-close {
    top: 16px;
    right: 16px;
    width: 44px;
    height: 44px;
  }

  .video-modal-video {
    max-height: 80vh;
  }
}

@media (max-width:480px) {
  header {
    padding: 10px 10px;
  }

  header.scrolled {
    padding: 8px 10px;
  }

  .nav {
    padding: 5px 5px 5px 14px;
  }

  .hamburger {
    width: 36px;
    height: 36px;
  }

  .opening-h {
    font-size: clamp(36px, 12.5vw, 60px);
  }

  .philosophy-lead {
    font-size: clamp(26px, 8.6vw, 40px);
    line-height: 1.2;
  }

  .choice-word {
    font-size: clamp(40px, 15.5vw, 72px);
  }

  .principles-h {
    font-size: clamp(30px, 9.6vw, 44px);
  }

  /* Tighten the carousel bleed/padding at the smallest viewport — 16px
gutter matches the wrap padding rule above. */
  .principles-grid {
    margin: 0 -16px;
    padding: 4px 16px 8px;
  }

  .principle-card {
    padding: 28px 24px;
  }

  .shape-h {
    font-size: clamp(30px, 9.6vw, 44px);
  }

  .shape-card-body {
    padding: 20px 22px 24px;
  }

  .shape-card-text {
    font-size: clamp(18px, 5.2vw, 24px);
  }

  .enables-lines p {
    font-size: clamp(22px, 6.4vw, 32px);
  }

  .closing-h {
    font-size: clamp(24px, 6.4vw, 34px);
  }

  .foot-brand .brand-logo {
    height: 104px !important;
  }

  .mobile-menu-nav a {
    font-size: clamp(24px, 7.8vw, 34px);
  }

  .mobile-menu-cta {
    max-width: 100%;
  }
}

/* ============================================================
LOADING SCREEN + "WORKS" MORPH TRANSITION
Phase 1: dark moss screen with gently-pulsing logo.
Phase 2: ivory curtain rises (curve), flattens to cover screen,
then whole loader fades to opacity 0 — page revealed.
============================================================ */
.rt-loader {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background: var(--moss);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  will-change: opacity;
}

.rt-loader.is-hidden {
  opacity: 0;
  pointer-events: none;
  transition: opacity .65s ease;
}

.rt-loader-logo-wrap {
  position: relative;
  z-index: 5;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity .45s ease;
}

.rt-loader-logo {
  width: clamp(140px, 16vw, 220px);
  height: auto;
  display: block;
  animation: rt-logo-pulse 2s ease-in-out infinite;
}

@keyframes rt-logo-pulse {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: .55;
  }
}

.rt-loader-logo-wrap.is-fading {
  opacity: 0;
}

.rt-morph-svg {
  position: fixed;
  inset: 0;
  z-index: 3;
  width: 100%;
  height: 100dvh;
  visibility: hidden;
  pointer-events: none;
}

.rt-morph-svg.is-active {
  visibility: visible;
}

.rt-morph-svg svg {
  display: block;
  width: 100%;
  height: 100%;
}

.rt-morph-svg svg path {
  fill: var(--ivory);
  stroke: none;
  d: path("M 0 100 V 100 Q 50 100 100 100 V 100 z");
  transition: d .55s cubic-bezier(.45, .05, .55, .95);
}

.rt-morph-svg.is-rising svg path {
  d: path("M 0 100 V 50 Q 50 0 100 50 V 100 z");
}

.rt-morph-svg.is-filled svg path {
  d: path("M 0 100 V 0 Q 50 0 100 0 V 100 z");
}

/* Lock body scroll while loader is visible */
body.rt-loading {
  overflow: hidden;
}

/* ============================================================
ENQUIRY MODAL — editorial form, ivory card on moss backdrop.
============================================================ */
.enquire-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(20, 27, 10, .72);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  backdrop-filter: blur(10px) saturate(140%);
  display: none;
  align-items: center;
  justify-content: center;
  padding: 28px 24px;
  overflow-y: auto;
  opacity: 0;
  transition: opacity .35s ease;
}

.enquire-modal.is-open {
  display: flex;
  opacity: 1;
}

.enquire-card {
  width: 100%;
  max-width: 620px;
  background: var(--ivory);
  border-radius: 22px;
  padding: 34px 44px 32px;
  position: relative;
  margin: auto;
  box-shadow: 0 40px 120px rgba(0, 0, 0, .4),
    0 0 0 1px rgba(45, 56, 35, .04);
}

.enquire-close {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: transparent;
  border: 1px solid var(--rule);
  color: var(--olive);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background .25s ease, color .25s ease, transform .25s ease;
}

.enquire-close:hover {
  background: var(--olive);
  color: var(--ivory);
  transform: scale(1.04);
}

.enquire-close svg {
  width: 13px;
  height: 13px;
}

.enquire-eyebrow {
  display: block;
  font-family: var(--display);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .55;
  margin-bottom: 10px;
}

.enquire-title {
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(24px, 2.4vw, 32px);
  line-height: 1.15;
  letter-spacing: -.018em;
  color: var(--olive);
  margin: 0 0 6px;
  max-width: 520px;
}

.enquire-sub {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 14px;
  line-height: 1.5;
  color: rgba(45, 56, 35, .7);
  max-width: 480px;
  margin: 0;
}

.enquire-form {
  margin-top: 22px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.enquire-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
}

.enquire-field {
  display: flex;
  flex-direction: column;
  position: relative;
}

.enquire-label {
  font-family: var(--display);
  font-weight: 500;
  font-size: 10.5px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--olive);
  opacity: .6;
  margin-bottom: 5px;
}

.enquire-label sup {
  color: var(--pistachio);
  font-size: 11px;
  margin-left: 2px;
  top: -2px;
}

.enquire-field input,
.enquire-field textarea {
  font-family: var(--sans);
  font-weight: 400;
  font-size: 15px;
  color: var(--olive);
  background: transparent;
  border: 0;
  border-bottom: 1px solid rgba(45, 56, 35, .2);
  padding: 7px 0;
  transition: border-color .25s ease;
  outline: none;
}

.enquire-field textarea {
  min-height: 48px;
  resize: vertical;
}

.enquire-field input:focus,
.enquire-field textarea:focus,
.enquire-phone:focus-within {
  border-bottom-color: var(--olive);
}

.enquire-phone {
  display: flex;
  align-items: stretch;
  border-bottom: 1px solid rgba(45, 56, 35, .2);
  transition: border-color .25s ease;
}

.enquire-phone .enquire-cc {
  display: flex;
  align-items: center;
  gap: 6px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: 15px;
  color: var(--olive);
  padding: 7px 12px 7px 0;
  margin-right: 12px;
  border-right: 1px solid rgba(45, 56, 35, .2);
  white-space: nowrap;
}

.enquire-phone .enquire-flag {
  font-size: 13px;
  display: inline-block;
}

.enquire-phone input {
  flex: 1;
  border: 0;
  padding: 7px 0;
  font-family: var(--sans);
  font-size: 15px;
  color: var(--olive);
  background: transparent;
  outline: none;
}

.enquire-tos {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  cursor: pointer;
  font-family: var(--sans);
  font-size: 13px;
  line-height: 1.45;
  color: rgba(45, 56, 35, .78);
  margin-top: 0;
  user-select: none;
}

.enquire-tos input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

.enquire-tos-mark {
  width: 18px;
  height: 18px;
  border: 1.5px solid rgba(45, 56, 35, .4);
  border-radius: 4px;
  flex: 0 0 auto;
  margin-top: 2px;
  position: relative;
  transition: border-color .25s ease, background .25s ease;
}

.enquire-tos input:checked+.enquire-tos-mark {
  background: var(--olive);
  border-color: var(--olive);
}

.enquire-tos input:checked+.enquire-tos-mark::after {
  content: "";
  position: absolute;
  top: 2px;
  left: 5px;
  width: 5px;
  height: 9px;
  border: solid var(--ivory);
  border-width: 0 1.5px 1.5px 0;
  transform: rotate(45deg);
}

.enquire-tos input:focus-visible+.enquire-tos-mark {
  border-color: var(--olive);
  box-shadow: 0 0 0 3px rgba(45, 56, 35, .12);
}

.enquire-tos a {
  color: var(--olive);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.enquire-submit {
  align-self: flex-start;
  margin-top: 4px;
  cursor: pointer;
  padding: 11px 18px;
  font-size: 12px;
}
.enquire-submit:disabled {
  opacity: .5;
  cursor: not-allowed;
}

.enquire-thanks {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(20px, 1.8vw, 26px);
  line-height: 1.4;
  color: var(--olive);
  padding: 12px 0 20px;
  max-width: 480px;
}

.enquire-success {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

body.enquire-open {
  overflow: hidden;
}

@media (max-width:640px) {
  .enquire-modal {
    padding: 16px 14px;
  }

  .enquire-card {
    padding: 28px 22px 24px;
    border-radius: 18px;
  }

  .enquire-close {
    top: 10px;
    right: 10px;
    width: 36px;
    height: 36px;
  }

  .enquire-eyebrow {
    margin-bottom: 8px;
  }

  .enquire-title {
    font-size: clamp(22px, 6vw, 28px);
  }

  .enquire-sub {
    font-size: 13.5px;
  }

  .enquire-form {
    margin-top: 18px;
    gap: 14px;
  }

  .enquire-row {
    grid-template-columns: 1fr;
    gap: 14px;
  }

  .enquire-submit {
    width: 100%;
    justify-content: center;
  }
}

/* ------ Tea variant (Brochure download) ------ */
.enquire-modal.is-brochure .enquire-card {
  background: var(--tea);
  color: var(--moss);
}

.enquire-modal.is-brochure .enquire-eyebrow,
.enquire-modal.is-brochure .enquire-title,
.enquire-modal.is-brochure .enquire-label,
.enquire-modal.is-brochure .enquire-thanks {
  color: var(--moss);
}

.enquire-modal.is-brochure .enquire-eyebrow {
  opacity: .6;
}

.enquire-modal.is-brochure .enquire-label {
  opacity: .7;
}

.enquire-modal.is-brochure .enquire-sub {
  color: rgba(20, 27, 10, .72);
}

.enquire-modal.is-brochure .enquire-field input,
.enquire-modal.is-brochure .enquire-field textarea,
.enquire-modal.is-brochure .enquire-phone {
  color: var(--moss);
  border-bottom-color: rgba(20, 27, 10, .32);
}

.enquire-modal.is-brochure .enquire-field input:focus,
.enquire-modal.is-brochure .enquire-field textarea:focus,
.enquire-modal.is-brochure .enquire-phone:focus-within {
  border-bottom-color: var(--moss);
}

.enquire-modal.is-brochure .enquire-phone .enquire-cc {
  color: var(--moss);
  border-right-color: rgba(20, 27, 10, .32);
}

.enquire-modal.is-brochure .enquire-phone input {
  color: var(--moss);
}

.enquire-modal.is-brochure .enquire-close {
  border-color: rgba(20, 27, 10, .28);
  color: var(--moss);
}

.enquire-modal.is-brochure .enquire-close:hover {
  background: var(--moss);
  color: var(--tea);
}

.enquire-modal.is-brochure .enquire-submit {
  background: var(--moss);
  color: var(--ivory);
  --ico-bg: var(--ivory);
  --ico-fg: var(--moss);
  --dl-bg: var(--ivory);
  --dl-fg: var(--moss);
}

.enquire-modal.is-brochure .enquire-submit:hover {
  background: var(--olive);
}

.enquire-modal.is-brochure .enquire-error {
  color: #7a1f1f !important;
}