
/* --- fonts-jost.css --- */
/* ============================================================
   Jost — SELF-HOSTED (body / --font-body / --font-sans)
   ------------------------------------------------------------
   Jost is the site body font. When it was requested from Google
   Fonts it could disappear in production — a privacy / "disable
   Google Fonts" optimiser, a stale page-cache pointing at an old
   malformed CSS2 request, or an ad-blocker — leaving body copy on
   the system-ui fallback. Serving the woff2 files from the theme
   itself removes every one of those failure modes: same-origin,
   no external request to strip, cache, or reject.

   Variable font, weight axis 300–700, normal + italic. Files live
   in ../fonts/jost/ (relative to this stylesheet). Subsets and
   unicode-ranges mirror Google's own Jost v20 output so the browser
   still only downloads the subset a page needs.
   ============================================================ */

/* latin */
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url(https://swellsurfcamp.com/wp-content/themes/swellactive/assets/fonts/jost/jost-normal-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url(https://swellsurfcamp.com/wp-content/themes/swellactive/assets/fonts/jost/jost-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* cyrillic */
@font-face {
  font-family: 'Jost';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url(https://swellsurfcamp.com/wp-content/themes/swellactive/assets/fonts/jost/jost-normal-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* latin */
@font-face {
  font-family: 'Jost';
  font-style: italic;
  font-weight: 300 700;
  font-display: swap;
  src: url(https://swellsurfcamp.com/wp-content/themes/swellactive/assets/fonts/jost/jost-italic-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
  font-family: 'Jost';
  font-style: italic;
  font-weight: 300 700;
  font-display: swap;
  src: url(https://swellsurfcamp.com/wp-content/themes/swellactive/assets/fonts/jost/jost-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* cyrillic */
@font-face {
  font-family: 'Jost';
  font-style: italic;
  font-weight: 300 700;
  font-display: swap;
  src: url(https://swellsurfcamp.com/wp-content/themes/swellactive/assets/fonts/jost/jost-italic-cyrillic.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* --- tokens.css --- */
/* ============================================================
   SWELL DESIGN SYSTEM — Colors & Type
   Premium water sport retreats, Cabarete, Dominican Republic.
   ============================================================ */

/* ---- Fonts ---- */
/* Instrument Serif       — editorial display, boutique-retreat luxe   */
/* Jost                   — humanist geometric sans for body, nav, footer */
/* Tenor Sans             — sleek wordmark font for "Swell"              */
/* Italiana               — high-contrast display serif (alt)            */
/* Cormorant Garamond     — italic serif for secondary display           */
/* DM Serif Display      — high-contrast editorial italic for "escape"   */
/* NOTE: the Google Fonts request now lives in header.php (preconnect + a
   parallel <link>) instead of an @import here — the @import serialised behind
   tokens.css and was a top render-blocking cost. */

:root {
  /* ---------- COLOR — Base palette ---------- */

  /* Teals — the brand's anchor. Drawn from caribbean shallow water.
     Use --teal-500 as the primary brand color. */
  --teal-50:  #ecf8f7;
  --teal-100: #d3efee;
  --teal-200: #a6dedd;
  --teal-300: #6ec7c6;
  --teal-400: #3aaeae;
  --teal-500: #0f9a9a;   /* PRIMARY BRAND */
  --teal-600: #0a7d7e;
  --teal-700: #0a6364;
  --teal-800: #0c4a4c;
  --teal-900: #0d3537;

  /* Ocean — deep navy/blue-green for grounding and over-water text */
  --ocean-300: #4a8190;
  --ocean-500: #1f4f5f;
  --ocean-700: #0e3242;
  --ocean-900: #061d28;

  /* Sand — warm cream/beach neutrals. Page backgrounds, soft surfaces. */
  --sand-50:  #fdfbf7;
  --sand-100: #f7f1e6;
  --sand-200: #efe5d1;
  --sand-300: #e3d3b3;
  --sand-400: #c9b48b;
  --sand-500: #a8916a;
  --sand-600: #7b6a4f;

  /* Coral / Sun — vibrant accent (rashguards, wings). Use sparingly. */
  --coral-400: #ff8b6a;
  --coral-500: #ee6a47;   /* primary accent */
  --coral-600: #d4502e;
  --sun-400:   #f4c14a;
  --sun-500:   #e6a52c;

  /* Ink — neutral text greys, biased slightly cool */
  --ink-900: #0a1f24;
  --ink-700: #2a4046;
  --ink-500: #56707a;
  --ink-400: #8a9da3;
  --ink-300: #c2cdd0;
  --ink-200: #e2e7e8;
  --ink-100: #f0f3f3;
  --white:   #ffffff;

  /* Semantic */
  --success: #2f9460;
  --warning: #e6a52c;
  --danger:  #d4502e;

  /* ---------- COLOR — Semantic foreground / background ---------- */
  --bg:           var(--sand-50);
  --bg-elevated: #ffffff;
  --bg-muted:    var(--sand-100);
  --bg-inverse:  var(--ocean-900);
  --bg-brand:    var(--teal-500);

  --fg:          var(--ink-900);     /* primary body text */
  --fg-muted:    var(--ink-500);     /* secondary text   */
  --fg-subtle:   var(--ink-400);     /* tertiary text    */
  --fg-on-brand: #ffffff;
  --fg-on-dark:  var(--sand-50);
  --fg-brand:    var(--teal-600);
  --fg-accent:   var(--coral-500);

  --border:        var(--ink-200);
  --border-strong: var(--ink-300);
  --border-on-dark: rgba(255,255,255,0.18);

  /* ---------- TYPE — Families ---------- */
  --font-display: 'Instrument Serif', 'Cormorant Garamond', 'Times New Roman', serif;
  --font-sans:    'Jost', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-logo:    'Tenor Sans', 'Optima', 'Avenir Next', serif;
  --font-mono:    ui-monospace, SFMono-Regular, Menlo, monospace;

  /* ---- Display type scale (DM Serif etc.) — 5 steps, all headlines.
     x --h-mult = the S/M/L switcher; x --m-* = per-tier fine-tune (%),
     both set in Swell Settings -> Style. Numerals/prices stay bespoke. ---- */
  --disp-hero:  calc(clamp(46px, 7vw, 104px)  * var(--h-mult, 1) * var(--m-hero, 1));
  --disp-mega:  calc(clamp(38px, 5.6vw, 80px) * var(--h-mult, 1) * var(--m-mega, 1));
  --disp-head:  calc(clamp(34px, 4.6vw, 58px) * var(--h-mult, 1) * var(--m-head, 1));
  --disp-title: calc(clamp(30px, 3.2vw, 46px) * var(--h-mult, 1) * var(--m-title, 1));
  --disp-sub:   calc(clamp(26px, 2.6vw, 36px) * var(--h-mult, 1) * var(--m-sub, 1));
  --disp-small: calc(clamp(21px, 2.1vw, 29px) * var(--h-mult, 1) * var(--m-small, 1));
  /* Stat numerals / prices keep their own clamps but scale with --m-num
     (Swell Settings fine-tune only — deliberately independent of --h-mult). */

  /* ---------- TYPE — Scale (fluid-friendly base) ---------- */
  --text-xs:   12px;
  --text-sm:   14px;
  --text-base: 16px;
  --text-md:   18px;
  --text-lg:   22px;
  --text-xl:   28px;
  --text-2xl:  36px;
  --text-3xl:  48px;
  --text-4xl:  64px;
  --text-5xl:  88px;
  --text-6xl:  120px;

  /* ---------- SPACING (4px base) ---------- */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;
  --space-20: 80px;
  --space-24: 96px;
  --space-32: 128px;

  /* ---------- RADII ---------- */
  --radius-xs: 2px;
  --radius-sm: 6px;
  --radius-md: 10px;
  --radius-lg: 16px;
  --radius-xl: 24px;
  --radius-pill: 999px;

  /* ---------- SHADOWS — soft, sun-on-water feel ---------- */
  --shadow-xs: 0 1px 2px rgba(10, 31, 36, 0.06);
  --shadow-sm: 0 2px 8px rgba(10, 31, 36, 0.08);
  --shadow-md: 0 8px 24px rgba(10, 31, 36, 0.10);
  --shadow-lg: 0 20px 48px rgba(10, 31, 36, 0.16);
  --shadow-xl: 0 32px 80px rgba(10, 31, 36, 0.22);
  /* glow when over teal imagery */
  --shadow-teal: 0 12px 32px rgba(15, 154, 154, 0.30);

  /* ---------- MOTION ---------- */
  --ease-out:   cubic-bezier(0.22, 1, 0.36, 1);   /* default — slight overshoot off */
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --ease-swell:  cubic-bezier(0.4, 0, 0.2, 1);    /* gentle, water-like */
  --dur-fast: 160ms;
  --dur-base: 260ms;
  --dur-slow: 520ms;
  --dur-cinematic: 1200ms;

  /* ---------- LAYOUT ---------- */
  --container-max: 1280px;
  --container-narrow: 880px;
  --gutter: clamp(20px, 4vw, 48px);

  /* ---------- SECTION-LINKING gradients ----------
     These are the seam colors that knit one section to the next.
     Use them as the FIRST/LAST stop of a background-gradient so
     adjacent sections share a horizon. */
  --seam-sky-to-water:   linear-gradient(180deg, #cfe9ee 0%, var(--teal-400) 100%);
  --seam-water-to-deep:  linear-gradient(180deg, var(--teal-500) 0%, var(--ocean-700) 100%);
  --seam-deep-to-sand:   linear-gradient(180deg, var(--ocean-700) 0%, var(--sand-100) 100%);
  --seam-sand-to-water:  linear-gradient(180deg, var(--sand-100) 0%, var(--teal-300) 100%);
}

/* ============================================================
   SEMANTIC TYPE — paste into projects to get correct text styles
   ============================================================ */

.swell-eyebrow {
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--fg-brand);
}

.swell-h1, h1.swell {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--disp-hero);
  line-height: 1.02;
  letter-spacing: -0.01em;
  color: var(--fg);
}

.swell-h2, h2.swell {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--disp-head);
  line-height: 1.05;
  letter-spacing: -0.005em;
  color: var(--fg);
}

.swell-h3, h3.swell {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--text-2xl);
  line-height: 1.15;
  color: var(--fg);
}

.swell-h4, h4.swell {
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--text-lg);
  line-height: 1.25;
  letter-spacing: 0;
  color: var(--fg);
}

.swell-lede {
  font-family: var(--font-sans);
  font-weight: 400;
  font-size: var(--text-md);
  line-height: 1.55;
  color: var(--fg-muted);
}

.swell-body, p.swell {
  font-family: var(--font-sans);
  font-weight: 400;
  font-size: var(--text-base);
  line-height: 1.65;
  color: var(--fg);
  text-wrap: pretty;
}

.swell-small {
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  line-height: 1.5;
  color: var(--fg-muted);
}

/* italic display — used for emphasized words inline */
.swell-display-italic {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 400;
}

/* --- styles.css --- */
/* =========================================================
   SWELL SURF CAMP — Landing page styles
   Three directions: editorial, cinematic, boutique
   ========================================================= */

:root {
  --font-display: "Playfair Display", "Instrument Serif", Georgia, serif;
  --font-body: "Jost", system-ui, -apple-system, sans-serif;
  --font-mark: "Playfair Display", serif;
  /* Brand overrides — keep teal & coral from tokens */
  --ink: #0d1c20;
  --ink-soft: #2a3b3f;
  --paper: #f4eee3;       /* warmer sand */
  --paper-2: #ebe3d2;
  --paper-deep: #ddd0b6;
  --cream: #faf6ec;
  --night: #15333b;   /* Slate — lifted blue-grey dark base (was #0a1d22 midnight) */
  --night-2: #1d4750; /* Slate — alternating darker sections/cards (was #0f2a30) */
  --teal: #0f9a9a;
  --teal-deep: #0b6b6c;
  --teal-pale: #a4d3c8;
  --coral: #ee6a47;
  --coral-deep: #c8462a;
  --coral-glow: rgba(238, 106, 71, 0.28);
  --on-accent: #ffffff;     /* text/icon color sitting ON an accent fill */
  --bone: #f9f5e9;
  --hairline: rgba(13, 28, 32, 0.16);
  --hairline-light: rgba(255, 255, 255, 0.22);
  --ease-swell: cubic-bezier(0.22, 1, 0.36, 1);
}

/* ===== Accent options — cool water family (green · turquoise · blue).
   Each is distinct enough from the brand teal to read as an accent. ===== */
html[data-accent="sunset-gold"] {
  --coral: #f2b134;          /* golden hour */
  --coral-deep: #d4951f;
  --coral-glow: rgba(242, 177, 52, 0.30);
  --on-accent: #3a2a06;      /* dark — bright gold needs dark text */
}
html[data-accent="sunset-amber"] {
  --coral: #e8902a;          /* warm sunset amber */
  --coral-deep: #c4731a;
  --coral-glow: rgba(232, 144, 42, 0.30);
  --on-accent: #ffffff;
}
html[data-accent="sunset-ember"] {
  --coral: #cf5524;          /* deep burnt ember */
  --coral-deep: #aa4119;
  --coral-glow: rgba(207, 85, 36, 0.30);
  --on-accent: #ffffff;
}
html[data-accent="turquoise"] {
  --coral: #0fb6ad;          /* bright lagoon turquoise */
  --coral-deep: #0c968f;
  --coral-glow: rgba(15, 182, 173, 0.32);
  --on-accent: #053a37;      /* dark — bright fill needs dark text */
}
html[data-accent="sky"] {
  --coral: #1f9ed1;          /* bright azure sky */
  --coral-deep: #1783b3;
  --coral-glow: rgba(31, 158, 209, 0.30);
  --on-accent: #05303d;      /* dark — bright fill needs dark text */
}
html[data-accent="coral"] {
  --coral: #ee6a47;          /* original sunset coral */
  --coral-deep: #c8462a;
  --coral-glow: rgba(238, 106, 71, 0.28);
  --on-accent: #ffffff;
}

* { box-sizing: border-box; }
html, body {
  margin: 0; padding: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--font-body);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
img { display: block; max-width: 100%; }
section[id] { scroll-margin-top: 84px; }
a { color: inherit; text-decoration: none; }
button { font: inherit; cursor: pointer; border: 0; background: none; color: inherit; }

/* ====== Direction switcher (top sticky bar) ====== */
.switcher {
  position: fixed; top: 0; left: 0; right: 0;
  z-index: 500;
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 28px;
  background: rgba(10, 29, 34, 0.65);
  backdrop-filter: blur(18px) saturate(140%);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  color: #fff;
  border-bottom: 1px solid rgba(255,255,255,0.08);
  transform: translateY(0);
  transition: transform 360ms var(--ease-swell);
}
.switcher.hide { transform: translateY(-100%); }

/* ====== Concept switcher — floating bottom-center segmented control ====== */
.cswitch {
  position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%);
  z-index: 600;
  display: inline-flex; align-items: center; gap: 14px;
  padding: 8px 8px 8px 20px;
  border-radius: 999px;
  background: rgba(10, 29, 34, 0.62);
  backdrop-filter: blur(18px) saturate(140%);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  border: 1px solid rgba(255,255,255,0.14);
  box-shadow: 0 14px 44px rgba(8,22,28,0.36);
}
.cswitch__label {
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase;
  color: rgba(255,255,255,0.6); white-space: nowrap;
}
.cswitch__seg { display: flex; gap: 3px; padding: 3px; border-radius: 999px; background: rgba(255,255,255,0.08); }
.cswitch__seg button {
  padding: 9px 18px; border-radius: 999px;
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase;
  color: rgba(255,255,255,0.72);
  transition: background 240ms var(--ease-swell), color 240ms var(--ease-swell);
}
.cswitch__seg button:hover { color: #fff; }
.cswitch__seg button.is-active { background: #fff; color: var(--night); }
@media (max-width: 720px) {
  .cswitch { gap: 8px; padding: 7px 7px 7px 14px; bottom: 16px; }
  .cswitch__label { display: none; }
  .cswitch__seg button { padding: 8px 13px; font-size: 12px; letter-spacing: 0.12em; }
}
.switcher__brand {
  display: inline-flex; align-items: baseline; gap: 10px;
  font-family: var(--font-display);
}
.switcher__brand .a { font-size: 13px; letter-spacing: 0.38em; text-transform: uppercase; font-weight: 500; }
.switcher__brand .b { font-style: italic; font-size: 15px; color: var(--teal-pale); }
.switcher__nav { display: flex; gap: 4px; padding: 4px; border-radius: 999px; background: rgba(255,255,255,0.07); }
.switcher__nav button {
  padding: 8px 18px; border-radius: 999px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
  color: rgba(255,255,255,0.7); font-weight: 500;
  transition: background 240ms var(--ease-swell), color 240ms var(--ease-swell);
}
.switcher__nav button:hover { color: #fff; }
.switcher__nav button.is-active { background: #fff; color: var(--night); }
.switcher__hint {
  font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase;
  color: rgba(255,255,255,0.5);
  display: inline-flex; align-items: center; gap: 8px;
}

/* ====== Common ====== */
.container {
  max-width: 1360px;
  margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
}
.narrow { max-width: 880px; margin: 0 auto; padding: 0 clamp(20px, 4vw, 56px); }
.eyebrow {
  font-family: var(--font-body);
  font-size: 12px; letter-spacing: 0.32em; text-transform: uppercase;
  font-weight: 500; color: var(--teal-deep);
  display: inline-flex; align-items: center; gap: 12px;
}
.eyebrow::before {
  content: ""; width: 22px; height: 1px; background: currentColor; opacity: 0.5;
}
.eyebrow.on-dark { color: var(--teal-pale); }
.eyebrow.plain::before { display: none; }

.disp {
  font-family: var(--font-display);
  font-weight: 400;
  letter-spacing: -0.015em;
  margin: 0;
  text-wrap: balance;
}
.disp i, .disp em { font-style: italic; }

/* Hand-brushed highlight behind emphasised words (deco accent) */
.hl { position: relative; display: inline-block; isolation: isolate; }
.hl::before {
  content: "";
  position: absolute;
  left: -0.16em; right: -0.12em; top: 2%; bottom: 0;
  z-index: -1;
  pointer-events: none;
  background: rgba(58, 174, 174, 0.42);
  border-radius: 11px 8px 13px 7px;
  transform: rotate(-0.8deg);
  filter: url(#swell-marker-rough);   /* frays the edges → hand-drawn marker */
}

/* Inline text link — resting hairline tucked close to the wording, with a
   coral underline that wipes in from the left on hover (+ teal text shift). */
.swell-link,
.ed-footer ul a,
.footer ul a { position: relative; }
.swell-link::before,
.ed-footer ul a::before,
.footer ul a::before {
  content: ""; position: absolute; left: 0; right: 0; bottom: 1px;
  height: 1px; background: currentColor; opacity: 0.24; pointer-events: none;
}
.swell-link::after,
.ed-footer ul a::after,
.footer ul a::after {
  content: ""; position: absolute; left: 0; bottom: 0.5px;
  height: 2px; width: 100%; background: var(--coral); border-radius: 2px;
  transform: scaleX(0); transform-origin: left; pointer-events: none;
  transition: transform 340ms var(--ease-swell);
}
.swell-link { color: inherit; text-decoration: none; cursor: pointer; transition: color 300ms var(--ease-swell); }
.swell-link:hover { color: var(--teal-pale); }
.swell-link:hover::after,
.ed-footer ul a:hover::after,
.footer ul a:hover::after { transform: scaleX(1); }

/* Links option 2 — reversed: drop the resting hairline so the underline only
   appears (wipes in coral) on hover. Toggled from the Tweaks panel. */
html[data-links="hover"] .swell-link::before { opacity: 0; }

/* Links — active-as-rest: the emphasized hover look (coral underline + teal
   text) becomes the resting/normal state; hovering relaxes it back to the
   plain hairline. A straight swap of the two states. */
html[data-links="reversed"] .swell-link::after { transform: scaleX(1); }
html[data-links="reversed"] .swell-link::before { opacity: 0; }
html[data-links="reversed"] .swell-link { color: var(--teal-pale); }
html[data-links="reversed"] .swell-link:hover { color: inherit; }
html[data-links="reversed"] .swell-link:hover::after { transform: scaleX(0); }
html[data-links="reversed"] .swell-link:hover::before { opacity: 0.24; }

/* Whole-page scroll progress — thin coral line pinned to the very top edge,
   above the sticky nav. Used by the home page and every interior page. */
.art-prog { position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 250; background: rgba(13,28,32,0.08); pointer-events: none; }
.art-prog span { display: block; height: 100%; background: var(--coral, #ee6a47); transform-origin: left; transform: scaleX(0); will-change: transform; }
.art-prog--page { background: transparent; }
h1.disp { font-size: var(--disp-hero); line-height: 0.95; letter-spacing: -0.02em; }
h2.disp { font-size: var(--disp-mega); line-height: 1.0; }
h3.disp { font-size: var(--disp-title); line-height: 1.1; }
h4.disp { font-size: clamp(22px, 2.2vw, 32px); line-height: 1.15; }

.lede {
  font-family: var(--font-body);
  font-size: 18px;
  line-height: 1.5;
  font-weight: 400;
  color: var(--ink-soft);
  max-width: 560px;
}
.lede.on-dark { color: rgba(249, 245, 233, 0.78); }
.lede.lg { font-size: 18px; line-height: 1.5; }

.body { font-family: var(--font-body); font-size: 16px; line-height: 1.65; font-weight: 400; color: var(--ink-soft); }
.body.on-dark { color: rgba(249, 245, 233, 0.74); }

/* ====== Buttons ====== */
.btn {
  display: inline-flex; align-items: center; gap: 14px;
  height: 54px; padding: 0 28px;
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase;
  border-radius: 8px;
  transition: background 240ms var(--ease-swell), color 240ms var(--ease-swell), transform 180ms var(--ease-swell), box-shadow 240ms var(--ease-swell);
}
.btn:active { transform: scale(0.98); }
.btn svg { width: 16px; height: 16px; stroke-width: 1.5; }
.btn--primary { background: var(--coral); color: var(--on-accent); }
.btn--primary:hover { background: var(--coral-deep); }
.btn--ink { background: var(--ink); color: var(--cream); }
.btn--ink:hover { background: #000; }
.btn--ghost-light {
  background: rgba(255,255,255,0.08); color: #fff;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.4);
  backdrop-filter: blur(8px);
}
.btn--ghost-light:hover { background: rgba(255,255,255,0.18); }
.btn--ghost-dark {
  background: transparent; color: var(--ink);
  box-shadow: inset 0 0 0 1px var(--ink);
}
.btn--ghost-dark:hover { background: var(--ink); color: var(--cream); }
.btn--sm { height: 40px; padding: 0 18px; font-size: 12px; gap: 10px; }
.btn--lg { height: 60px; padding: 0 34px; font-size: 13px; }

/* ====== Editorial nav (Franco-style, bold uppercase, floating)
   A single fixed shell with two stacked rows: (1) .nav__ribbon — a solid
   dark-green specifics strip that collapses to zero height on scroll, and
   (2) .nav__bar — the frosted, translucent-teal menu bar (logo · links · CTA)
   that survives the mosaic transition. */
.nav {
  position: fixed; top: 0; left: 0; right: 0;
  z-index: 200;
  display: flex; flex-direction: column; align-items: stretch;
  color: #fff;
}

/* (1) Specifics ribbon — solid teal-800, collapses once scrolled. */
.nav__ribbon {
  display: flex; align-items: center; justify-content: center; gap: 14px;
  background: var(--teal-800, #0c4a4c); color: #fff;
  padding: 9px 18px;
  font-family: var(--font-body); font-size: 10.5px; font-weight: 600;
  letter-spacing: 0.1em; text-transform: uppercase;
  overflow: hidden; max-height: 60px;
  transition: max-height 340ms cubic-bezier(0.22, 1, 0.36, 1),
              opacity 240ms cubic-bezier(0.22, 1, 0.36, 1),
              padding 340ms cubic-bezier(0.22, 1, 0.36, 1);
}
.nav.is-scrolled .nav__ribbon { max-height: 0; opacity: 0; padding-top: 0; padding-bottom: 0; }
.nav__rib { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; }
.nav__rib svg { width: 14px; height: 14px; stroke-width: 1.8; }
.nav__stars { color: var(--coral); letter-spacing: 1px; font-size: 12px; }
.nav__ribdot { width: 4px; height: 4px; border-radius: 50%; background: rgba(255, 255, 255, 0.6); flex: none; }

/* (2) Menu bar — the frosted translucent-teal slab. */
.nav__bar {
  display: flex; align-items: center; justify-content: space-between;
  gap: clamp(16px, 2.4vw, 40px);
  padding: 14px max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  background: rgba(11, 67, 70, 0.50);
  backdrop-filter: blur(18px) saturate(140%);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  border-bottom: 1px solid rgba(255, 255, 255, 0.10);
  transition: background 320ms var(--ease-swell);
}
.nav__brand { display: flex; flex-direction: column; line-height: 0.85; }
/* Palm-emblem brand lockup */
.brandlock { display: flex; align-items: center; gap: 14px; }
.brandlock { display: flex; align-items: center; gap: 12px; }
.brandlock__mark {
  width: 42px; height: 42px; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
}
.brandlock__logo { height: 52px; width: auto; display: block; }
.brandlock__words { display: flex; flex-direction: column; justify-content: center; }
.brandlock__swell {
  font-family: "Instrument Serif", Georgia, serif; font-weight: 500;
  font-size: 31px; line-height: 0.82; letter-spacing: -0.01em; color: #fff;
}
/* Logo wordmark font options (independent of headline tweak) */
html[data-logo="outfit"] .brandlock__swell { font-family: "Outfit", system-ui, sans-serif; font-weight: 600; font-size: 25px; line-height: 0.92; letter-spacing: -0.02em; }
html[data-logo="yeseva"] .brandlock__swell { font-family: "Yeseva One", Georgia, serif; font-weight: 400; font-size: 26px; line-height: 0.9; letter-spacing: 0; }
.brandlock__sub {
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; line-height: 1; letter-spacing: 0.34em; text-transform: uppercase;
  color: var(--teal-pale);
  margin-top: 5px; padding-left: 1px;
}
.nav__center {
  display: flex; align-items: center; gap: clamp(20px, 2.6vw, 44px);
}
.nav__center > a,
.nav__trigger,
.nav__contact {
  position: relative;
  font-family: var(--font-body); font-weight: 500;
  font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase;
  padding: 8px 0;
  color: rgba(255,255,255,0.78);
  white-space: nowrap;
  transition: color 240ms var(--ease-swell);
}
.nav__center > a::after,
.nav__trigger::after,
.nav__contact::after {
  content: "";
  position: absolute; left: 0; bottom: 2px;
  height: 1px; width: 0%; background: currentColor;
  transition: width 320ms var(--ease-swell);
}
.nav__center > a:hover,
.nav__trigger:hover,
.nav__contact:hover { color: #fff; }
.nav__center > a:hover::after,
.nav__trigger:hover::after,
.nav__contact:hover::after { width: 100%; }
.nav__center > a.is-current,
.nav__trigger.is-current { color: #fff; }
.nav__center > a.is-current::after { width: 100%; background: var(--coral); height: 2px; }
.brandlock { text-decoration: none; }

/* "More info" dropdown */
.nav__group { position: relative; }
.nav__trigger { display: inline-flex; align-items: center; gap: 6px; }
.nav__trigger svg { transition: transform 240ms var(--ease-swell); }
.nav__group:hover .nav__trigger svg,
.nav__group:focus-within .nav__trigger svg { transform: rotate(180deg); }
.nav__menu {
  position: absolute; top: 100%; left: 50%; transform: translate(-50%, 8px);
  min-width: 200px;
  display: flex; flex-direction: column;
  padding: 8px;
  background: rgba(9, 42, 44, 0.92);
  backdrop-filter: blur(16px) saturate(140%);
  -webkit-backdrop-filter: blur(16px) saturate(140%);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 14px;
  box-shadow: 0 20px 50px rgba(6, 29, 40, 0.45);
  opacity: 0; visibility: hidden; pointer-events: none;
  transition: opacity 220ms var(--ease-swell), transform 220ms var(--ease-swell);
}
.nav__group::after { content: ""; position: absolute; top: 100%; left: 0; right: 0; height: 14px; }
.nav__group:hover .nav__menu,
.nav__group:focus-within .nav__menu {
  opacity: 1; visibility: visible; pointer-events: auto;
  transform: translate(-50%, 12px);
}
.nav__menu a {
  font-family: var(--font-body); font-weight: 500;
  font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase;
  color: rgba(255, 255, 255, 0.82);
  padding: 9px 12px; border-radius: 8px;
  transition: background 200ms var(--ease-swell), color 200ms var(--ease-swell);
}
.nav__menu a:hover { background: rgba(255, 255, 255, 0.10); color: #fff; }
.nav__right { display: flex; align-items: center; gap: 22px; }
.nav__right .meta {
  font-family: var(--font-display); font-style: italic; font-size: 16px;
  color: rgba(255,255,255,0.78);
}
.nav__right .reserve {
  display: inline-flex; align-items: center; gap: 12px; white-space: nowrap;
  font-family: var(--font-body); font-weight: 500;
  font-size: 11px; letter-spacing: 0.26em; text-transform: uppercase;
  padding: 14px 24px;
  border-radius: 8px;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.55);
  background: rgba(255,255,255,0.06);
  backdrop-filter: blur(12px);
  transition: background 240ms var(--ease-swell);
}
.nav__right .reserve:hover { background: rgba(255,255,255,0.18); }
.nav__right .reserve svg { width: 14px; height: 14px; stroke-width: 1.5; }

/* ====== Mobile menu (hamburger + 3 treatments) ====== */
.nav__burger { display: none; }
.mm { display: none; }

.nav__burger {
  flex-direction: column; justify-content: center; align-items: center; gap: 5px;
  width: 44px; height: 44px; padding: 0; cursor: pointer;
  background: transparent; border: 0; border-radius: 10px;
}
.nav__burger:hover { background: rgba(255,255,255,0.10); }
.nav__burger span {
  display: block; width: 23px; height: 2px; border-radius: 2px; background: #fff;
  transition: transform 300ms var(--ease-swell), opacity 200ms var(--ease-swell);
}
.nav__burger.is-open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav__burger.is-open span:nth-child(2) { opacity: 0; }
.nav__burger.is-open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.mm { position: fixed; inset: 0; z-index: 300; pointer-events: none; }
.mm[data-open="1"] { pointer-events: auto; }
.mm__scrim {
  position: absolute; inset: 0; background: rgba(6,29,40,0.55);
  -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px);
  opacity: 0; transition: opacity 340ms var(--ease-swell);
}
.mm[data-open="1"] .mm__scrim { opacity: 1; }

.mm__panel { display: flex; flex-direction: column; color: #fff; }
.mm__head { display: flex; align-items: center; justify-content: space-between; }
.mm__brand { font-family: var(--font-display); font-weight: 500; font-size: 30px; color: #fff; line-height: 1; }
.mm__close {
  width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center;
  border-radius: 10px; background: transparent; color: #fff; cursor: pointer;
}
.mm__close:hover { background: rgba(255,255,255,0.10); }

.mm__links { display: flex; flex-direction: column; }
.mm__links a.is-current { color: var(--teal-pale); }
.mm__moretrigger {
  display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%;
  background: transparent; border: 0; cursor: pointer; color: #fff; text-align: left;
}
.mm__moretrigger svg { flex: none; transition: transform 300ms var(--ease-swell); }
.mm__moretrigger.is-open svg { transform: rotate(180deg); }
.mm__morelinks {
  display: flex; flex-direction: column; gap: 2px; overflow: hidden;
  max-height: 0; opacity: 0;
  transition: max-height 340ms var(--ease-swell), opacity 240ms var(--ease-swell);
}
.mm__morelinks[data-open="1"] { max-height: 300px; opacity: 1; }
.mm__morelinks a {
  font-family: var(--font-body); font-size: 16px; color: rgba(255,255,255,0.74);
  padding: 9px 0; padding-left: 16px; transition: color 200ms var(--ease-swell);
}
.mm__morelinks a:first-child { margin-top: 8px; }
.mm__morelinks a:hover { color: #fff; }
.mm__cta {
  display: inline-flex; align-items: center; justify-content: center; gap: 12px;
  background: var(--coral); color: #fff; cursor: pointer; border: 0;
  font-family: var(--font-body); font-weight: 600; font-size: 12px;
  letter-spacing: 0.2em; text-transform: uppercase;
  padding: 17px 26px; border-radius: 8px;
  transition: filter 220ms var(--ease-swell), transform 120ms var(--ease-swell);
}
.mm__cta:hover { filter: brightness(1.06); }
.mm__cta:active { transform: scale(0.98); }
.mm__cta svg { width: 16px; height: 16px; }

/* --- Treatment 1 · Full-screen overlay --- */
.mm--overlay .mm__scrim { background: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
.mm--overlay .mm__panel {
  position: absolute; inset: 0; overflow-y: auto;
  padding: 18px clamp(22px, 7vw, 48px) clamp(28px, 6vw, 44px);
  background: linear-gradient(165deg, rgba(11,67,70,0.99) 0%, rgba(8,22,28,0.99) 100%);
  opacity: 0; transition: opacity 380ms var(--ease-swell);
}
.mm--overlay[data-open="1"] .mm__panel { opacity: 1; }
.mm--overlay .mm__head { padding: 6px 0 0; }
.mm--overlay .mm__links { margin-top: auto; gap: 2px; }
.mm--overlay .mm__links a {
  font-family: var(--font-display); font-weight: 400;
  font-size: clamp(40px, 11vw, 62px); line-height: 1.04; color: #fff;
  padding: 4px 0;
  opacity: 0; transform: translateY(18px);
  transition: opacity 460ms var(--ease-swell), transform 460ms var(--ease-swell);
  transition-delay: calc(var(--i, 0) * 55ms + 140ms);
}
.mm--overlay[data-open="1"] .mm__links a { opacity: 1; transform: none; }
.mm--overlay .mm__links a.is-current { font-style: italic; color: var(--teal-pale); }
.mm--overlay .mm__more { margin-top: 30px; }
.mm--overlay .mm__moretrigger {
  font-family: var(--font-body); font-weight: 500; font-size: 13px;
  letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-pale); padding: 6px 0;
}
.mm--overlay .mm__cta { margin-top: 26px; align-self: flex-start; }

/* --- Treatment 2 · Side drawer --- */
.mm--drawer .mm__panel {
  position: absolute; top: 0; right: 0; bottom: 0; width: min(86vw, 372px);
  overflow-y: auto; padding: 22px clamp(22px, 5vw, 30px) 30px;
  background: linear-gradient(180deg, rgba(11,67,70,0.99) 0%, rgba(8,22,28,0.99) 100%);
  box-shadow: -24px 0 70px rgba(6,18,22,0.5);
  transform: translateX(100%); transition: transform 420ms var(--ease-swell);
}
.mm--drawer[data-open="1"] .mm__panel { transform: none; }
.mm--drawer .mm__links { margin-top: 22px; }
.mm--drawer .mm__links a {
  font-family: var(--font-display); font-weight: 400; font-size: 27px; line-height: 1; color: #fff;
  padding: 13px 0; border-bottom: 1px solid rgba(255,255,255,0.09);
  transition: color 200ms var(--ease-swell);
}
.mm--drawer .mm__links a:hover { color: var(--teal-pale); }
.mm--drawer .mm__more { margin-top: 4px; }
.mm--drawer .mm__moretrigger {
  font-family: var(--font-display); font-weight: 400; font-size: 24px; color: #fff;
  padding: 13px 0; border-bottom: 1px solid rgba(255,255,255,0.09);
}
.mm--drawer .mm__cta { margin-top: 28px; }

/* --- Treatment 3 · Top sheet --- */
.mm--sheet .mm__panel {
  position: absolute; top: 0; left: 0; right: 0;
  max-height: 100vh; overflow-y: auto;
  padding: 16px clamp(22px, 5vw, 44px) 26px;
  background: rgba(11,45,48,0.97);
  -webkit-backdrop-filter: blur(20px) saturate(140%); backdrop-filter: blur(20px) saturate(140%);
  border-bottom: 1px solid rgba(255,255,255,0.12);
  box-shadow: 0 32px 64px rgba(6,18,22,0.5);
  transform: translateY(-100%); transition: transform 420ms var(--ease-swell);
}
.mm--sheet[data-open="1"] .mm__panel { transform: none; }
.mm--sheet .mm__links { margin-top: 18px; }
.mm--sheet .mm__links a {
  font-family: var(--font-body); font-weight: 500; font-size: 15px;
  letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255,255,255,0.9);
  padding: 15px 0; border-bottom: 1px solid rgba(255,255,255,0.08);
}
.mm--sheet .mm__links a.is-current { color: var(--teal-pale); }
.mm--sheet .mm__more { margin-top: 0; }
.mm--sheet .mm__moretrigger {
  font-family: var(--font-body); font-weight: 500; font-size: 15px;
  letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255,255,255,0.9);
  padding: 15px 0; border-bottom: 1px solid rgba(255,255,255,0.08);
}
.mm--sheet .mm__cta { margin-top: 24px; width: 100%; }

/* on small phones the menu carries the CTA — drop the nav button to free space */
@media (max-width: 560px) {
  .nav__right .reserve { display: none; }
}

/* ====== HERO (shared core) ====== */
.hero {
  position: relative; min-height: 100vh;
  display: flex; flex-direction: column;
  background: var(--night);
  color: #fff;
  overflow: hidden;
}
.hero__photo {
  position: absolute; inset: 0;
  background-size: cover; background-position: center 40%;
  transform: scale(1.04);
}
.hero__veil {
  position: absolute; inset: 0;
  background:
    linear-gradient(180deg, rgba(8, 22, 28, 0.32) 0%, rgba(8, 22, 28, 0) 30%, rgba(8, 22, 28, 0) 60%, rgba(8, 22, 28, 0.65) 100%),
    linear-gradient(90deg, rgba(8, 22, 28, 0.35) 0%, rgba(8, 22, 28, 0) 50%);
}
.hero__content {
  position: relative; z-index: 3;
  margin-top: auto; padding: 0 clamp(20px, 4vw, 56px) clamp(60px, 8vw, 96px);
  max-width: 1360px; width: 100%; margin-left: auto; margin-right: auto;
}
.hero__eyebrow {
  display: inline-flex; align-items: center; gap: 14px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.32em; text-transform: uppercase;
  color: rgba(255,255,255,0.78);
}
.hero__eyebrow::before { content: ""; width: 28px; height: 1px; background: currentColor; }
.hero h1 {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-hero);
  line-height: 0.92; letter-spacing: -0.025em;
  margin: 28px 0 0;
  max-width: 14ch;
  color: #fff;
}
.hero h1 i { font-style: italic; color: var(--teal-pale); }
.hero__sub {
  margin-top: 28px;
  font-family: var(--font-body); font-weight: 400;
  font-size: 18px; line-height: 1.5;
  max-width: 540px;
  color: rgba(249,245,233,0.85);
}
.hero__cta { display: flex; gap: 14px; margin-top: 40px; flex-wrap: wrap; }

.hero__rail {
  position: absolute; bottom: clamp(60px, 8vw, 96px); right: clamp(20px, 4vw, 56px);
  z-index: 3;
  display: flex; flex-direction: column; gap: 18px; align-items: flex-end;
  font-family: var(--font-body);
}
.hero__rail .place {
  font-family: var(--font-display); font-style: italic; font-size: 22px;
  color: #fff;
}
.hero__rail .meta {
  font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase;
  color: rgba(255,255,255,0.65);
}
.hero__rail .scroll-hint {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase;
  color: rgba(255,255,255,0.65);
  margin-top: 30px;
}
.hero__rail .scroll-hint .line {
  width: 1px; height: 60px;
  background: linear-gradient(180deg, rgba(255,255,255,0.6), rgba(255,255,255,0));
  position: relative;
}
.hero__rail .scroll-hint .line::after {
  content: ""; position: absolute; top: 0; left: 0; right: 0;
  height: 22px; background: rgba(255,255,255,0.95);
  animation: rail-drop 2.4s var(--ease-swell) infinite;
}
@keyframes rail-drop {
  0% { transform: translateY(-22px); opacity: 0; }
  30% { opacity: 1; }
  100% { transform: translateY(60px); opacity: 0; }
}

/* ====== Zoom-out + parallax 9-box hero (xshack mechanic) ====== */
.zstage {
  position: relative;
  height: 420vh;          /* longer runway → slower zoom + more photo movement */
  background: var(--night);
}
.zstick {
  position: sticky; top: 0;
  height: 100vh;
  overflow: hidden;
  background: var(--night);
  display: flex;
  align-items: center;
  justify-content: center;
}
.zcols {
  display: flex;
  gap: clamp(6px, 0.8vw, 12px);
  width: 100%;
  transform-origin: center center;
  will-change: transform;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.zcol {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  gap: clamp(6px, 0.8vw, 12px);
  will-change: transform;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.zcell {
  position: relative;
  overflow: hidden;
  width: 100%;
  aspect-ratio: 16 / 9;   /* landscape — lower height than the old near-square */
  background: var(--night-2);
  border-radius: 3px;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.zcell__img {
  position: absolute; inset: 0;
  background-size: cover;
  background-position: center;
  transform: translateZ(0);
}
.zcell__veil {
  position: absolute; left: 0; right: 0; bottom: 0; top: 45%;
  background: linear-gradient(180deg, rgba(8,22,28,0) 0%, rgba(8,22,28,0.72) 100%);
  opacity: var(--label-op, 0);
  pointer-events: none;
}
.zcell__label {
  position: absolute; left: 18px; right: 18px; bottom: 16px;
  z-index: 2; color: #fff;
  opacity: var(--label-op, 0);
  transform: translateY(calc((1 - var(--label-op, 0)) * 10px));
  display: flex; flex-direction: column; gap: 6px;
}
.zcell__name {
  font-family: var(--font-display); font-style: italic; font-weight: 400;
  font-size: clamp(15px, 1.4vw, 22px); line-height: 1; color: #fff;
  letter-spacing: -0.015em;
}
.zcell__rule { width: 44px; height: 1px; background: var(--teal-pale); opacity: 0.85; }
@media (max-width: 720px) {
  .zcols, .zcol { gap: 5px; }
}
/* Mobile: zoom out to ONLY the middle column (3 stacked photos) so the rig
   isn't a cramped 9-up grid on a narrow screen. Side columns drop out; the
   centre column goes full-width and the hero/parallax mechanic is unchanged. */
@media (max-width: 680px) {
  .zcol--side { display: none; }
}

/* Translucent stats bar — full-width slab, facts within content width */
.zbar {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  z-index: 4;
  background: rgba(11, 67, 70, 0.42);
  backdrop-filter: blur(18px) saturate(140%);
  -webkit-backdrop-filter: blur(18px) saturate(140%);
  border-top: 1px solid rgba(255, 255, 255, 0.14);
  color: #fff;
  pointer-events: none;
}
.zbar__inner {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
  display: flex;
  align-items: stretch;
}
.zbar__item {
  flex: 1 1 0;
  padding: clamp(10px, 1.45vw, 18px) clamp(16px, 2vw, 34px);
  display: flex; flex-direction: column; gap: 4px;
  border-left: 1px solid rgba(255, 255, 255, 0.13);
}
.zbar__item:first-child { border-left: 0; padding-left: 0; }
.zbar__item:last-child { padding-right: 0; }

/* OPTION 1 — empty translucent band (no text, no dividers) */
.zbar--band { height: clamp(62px, 8vw, 90px); }

/* OPTION 2 — no bar, just a full-width 1px white rule with a solid
   fill below it so no grid photo is ever visible beneath the line */
.zbar--line { background: var(--night); border-top: 0; -webkit-backdrop-filter: none; backdrop-filter: none; height: clamp(62px, 8vw, 90px); }
.zbar--line .zbar__inner { display: block; max-width: none; padding: 0; }
.zbar__rule { width: 100%; height: 1px; background: rgba(255, 255, 255, 0.6); }
.zbar__num {
  font-family: var(--font-display); font-weight: 400;
  font-size: clamp(20px, 2vw, 30px); line-height: 1;
  letter-spacing: -0.01em;
  display: inline-flex; align-items: center; gap: 8px;
}
.zbar__num svg {
  fill: var(--teal-pale); color: var(--teal-pale);
  width: 0.58em; height: 0.58em;
}
.zbar__lbl {
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase;
  color: rgba(255, 255, 255, 0.74);
}
@media (max-width: 720px) {
  .zbar__inner { flex-wrap: wrap; }
  .zbar__item { flex: 1 1 50%; border-left: 0; padding-left: 0; }
}

/* ====== 3x3 MOSAIC moment (the signature) ====== */
.mosaic-stage {
  position: relative;
  height: 640vh;        /* longer runway → slower, more cinematic reveal */
  background: var(--night);
}
.mosaic-stick {
  position: sticky; top: 0;
  height: 100vh;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 1fr);
  gap: var(--mosaic-gap, 0px);
  padding: var(--mosaic-pad, 0px);
  background: var(--night);
  transition: padding 0ms;
  overflow: hidden;
}

/* Hero copy that sits ON TOP of the stitched mosaic at scroll=0 */
.hero-mosaic__veil {
  position: absolute; inset: 0;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(8, 22, 28, 0.30) 0%, rgba(8, 22, 28, 0) 28%, rgba(8, 22, 28, 0) 55%, rgba(8, 22, 28, 0.75) 100%),
    linear-gradient(90deg, rgba(8, 22, 28, 0.45) 0%, rgba(8, 22, 28, 0) 55%);
  z-index: 2;
}
.hero-mosaic__content {
  position: absolute;
  left: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  right: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  bottom: clamp(60px, 8vw, 96px);
  z-index: 3;
  color: #fff;
  margin-left: auto; margin-right: auto;
  pointer-events: auto;
}
.hero-mosaic__content h1 {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-hero);
  line-height: 0.92; letter-spacing: -0.025em;
  margin: 28px 0 0;
  max-width: 14ch;
  color: #fff;
}
.hero-mosaic__content h1 i { font-style: italic; color: var(--teal-pale); }
.hero-mosaic__content .hero__sub {
  margin-top: 28px;
  font-family: var(--font-body); font-weight: 400;
  font-size: 18px; line-height: 1.5;
  max-width: 540px;
  color: rgba(249,245,233,0.88);
}
.hero-mosaic__content .hero__eyebrow {
  display: inline-flex; align-items: center; gap: 14px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.32em; text-transform: uppercase;
  color: rgba(255,255,255,0.78);
}
.hero-mosaic__content .hero__eyebrow::before { content: ""; width: 28px; height: 1px; background: currentColor; }
.hero-mosaic__content .hero__cta { display: flex; gap: 14px; margin-top: 40px; flex-wrap: wrap; }

.hero-mosaic__rail {
  position: absolute;
  bottom: clamp(60px, 8vw, 96px);
  right: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  z-index: 3;
  display: flex; flex-direction: column; gap: 18px; align-items: flex-end;
  font-family: var(--font-body);
  color: #fff;
}
.hero-mosaic__rail .place { font-family: var(--font-display); font-style: italic; font-size: 22px; color: #fff; }
.hero-mosaic__rail .meta { font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase; color: rgba(255,255,255,0.65); }

/* Daily Cabarete conditions readout (replaces the lat/long rail) */
.sw-wx { display: flex; flex-direction: column; align-items: flex-end; gap: 7px; }
.sw-wx__eyebrow {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.24em;
  text-transform: uppercase; color: rgba(255,255,255,0.5); margin-bottom: 1px;
}
.sw-wx__row { display: grid; grid-template-columns: 72px 62px 62px; column-gap: 12px; align-items: baseline; }
.sw-wx__lbl {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em;
  text-transform: uppercase; color: rgba(255,255,255,0.62);
  display: inline-flex; align-items: center; gap: 5px; justify-self: start;
}
.sw-wx__lbl svg { opacity: 0.82; }
.sw-wx__c, .sw-wx__f {
  font-family: var(--font-body); font-style: normal; font-weight: 400; font-size: 15px; line-height: 1;
  letter-spacing: 0.04em; color: #fff; justify-self: end; text-align: right; white-space: nowrap;
}
.sw-wx__deg { font-style: normal; font-size: 0.7em; letter-spacing: 0.04em; margin-left: 1px; vertical-align: 0.08em; opacity: 0.78; }
.sw-wx__loc {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.24em;
  text-transform: uppercase; color: rgba(255,255,255,0.6); margin-top: 4px;
}
.hero-mosaic__rail .scroll-hint {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase;
  color: rgba(255,255,255,0.65);
  margin-top: 30px;
}
.hero-mosaic__rail .scroll-hint .line {
  width: 1px; height: 60px;
  background: linear-gradient(180deg, rgba(255,255,255,0.6), rgba(255,255,255,0));
  position: relative;
}
.hero-mosaic__rail .scroll-hint .line::after {
  content: ""; position: absolute; top: 0; left: 0; right: 0;
  height: 22px; background: rgba(255,255,255,0.95);
  animation: rail-drop 2.4s var(--ease-swell) infinite;
}
.mosaic-cell {
  position: relative;
  overflow: hidden;
  background: var(--night-2);
  border-radius: var(--mosaic-radius, 0px);
}
.mosaic-cell__stitch {
  position: absolute; inset: 0;
  background-size: 300% 300%;
  background-position: var(--mosaic-pos);
  background-repeat: no-repeat;
  /* opacity interpolated by JS */
  opacity: var(--stitch-op, 1);
}
.mosaic-cell__unique {
  position: absolute; inset: 0;
  background-color: var(--night);
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: var(--unique-op, 0);
  transform: scale(var(--unique-scale, 0.55));
  transform-origin: center;
  transition: opacity 0ms;
}
.mosaic-cell__veil {
  position: absolute; left: 0; right: 0; bottom: 0; top: 50%;
  background: linear-gradient(180deg, rgba(8,22,28,0) 0%, rgba(8,22,28,0.78) 100%);
  opacity: var(--label-op, 0);
  pointer-events: none;
}
.mosaic-cell__corner {
  position: absolute; top: 16px; right: 16px;
  width: 44px; height: 44px;
  border-radius: 999px;
  border: 1px solid rgba(255,255,255,0.5);
  background: rgba(255,255,255,0.06);
  backdrop-filter: blur(6px);
  display: flex; align-items: center; justify-content: center;
  opacity: var(--label-op, 0);
  transform: scale(calc(0.7 + 0.3 * var(--label-op, 0)));
  transition: opacity 0ms;
}
.mosaic-cell__corner .dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--coral);
  box-shadow: 0 0 0 4px var(--coral-glow);
}
.mosaic-cell__label {
  position: absolute; left: 22px; right: 22px; bottom: 20px;
  color: #fff;
  opacity: var(--label-op, 0);
  transform: translateY(calc((1 - var(--label-op, 0)) * 12px));
  display: flex; flex-direction: column; gap: 6px;
}
.mosaic-cell__name-big {
  font-family: var(--font-display); font-style: italic;
  font-size: 30px; line-height: 1.0; font-weight: 400;
  color: #fff;
  letter-spacing: -0.015em;
  text-wrap: balance;
}
.mosaic-cell__rule {
  width: 56px; height: 1px;
  background: var(--teal-pale);
  opacity: 0.85;
}
.mosaic-cell__meta {
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.28em; text-transform: uppercase;
  color: rgba(255,255,255,0.72);
}
.mosaic-overlay {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: clamp(40px, 6vw, 80px) clamp(20px, 4vw, 56px);
  z-index: 3;
  display: grid; grid-template-columns: 1fr 1fr; gap: 40px;
  align-items: end;
  pointer-events: none;
  color: #fff;
  background: linear-gradient(180deg, rgba(8,22,28,0) 0%, rgba(8,22,28,0.72) 100%);
  opacity: var(--overlay-op, 1);
}
.mosaic-overlay .left {
  font-family: var(--font-body); font-size: 12px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: rgba(255,255,255,0.7);
}
.mosaic-overlay .right {
  font-family: var(--font-display); font-style: italic;
  font-size: var(--disp-small); line-height: 1.25;
  color: rgba(255,255,255,0.9);
  max-width: 36ch; justify-self: end;
}

/* ====== Section: Promise band ====== */
.promise {
  background: var(--paper);
  padding: clamp(80px, 10vw, 160px) 0;
}
.promise__inner {
  display: grid; grid-template-columns: 1fr 1fr; gap: clamp(40px, 6vw, 100px);
  align-items: start;
  max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
}
.promise h2 { margin-top: 22px; max-width: 12ch; }
.promise__col-r { display: flex; flex-direction: column; gap: 28px; padding-top: clamp(40px, 6vw, 80px); }
.promise__col-r p { margin: 0; font-size: 18px; line-height: 1.6; font-weight: 400; color: var(--ink-soft); max-width: 50ch; }
.promise__list { display: flex; flex-direction: column; }
.promise__list .row {
  display: grid; grid-template-columns: 80px 1fr; gap: 20px;
  padding: 22px 0; border-top: 1px solid var(--hairline);
  align-items: baseline;
}
.promise__list .row:last-child { border-bottom: 1px solid var(--hairline); }
.promise__list .row .num {
  font-family: var(--font-display); font-style: italic; font-size: 28px;
  color: var(--teal-deep);
}
.promise__list .row h4 { margin: 0 0 6px; font-family: var(--font-display); font-size: 22px; line-height: 1.2; font-weight: 400; }
.promise__list .row p { margin: 0; font-size: 15px; line-height: 1.55; color: var(--ink-soft); }

/* ====== Section: Activities (three sports) ====== */
.sports {
  padding: clamp(80px, 10vw, 160px) 0;
  background: var(--night);
  color: var(--cream);
}
.sports__head {
  display: grid; grid-template-columns: 1fr 1fr; gap: 40px;
  align-items: end; max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
  margin-bottom: clamp(40px, 5vw, 80px);
}
.sports__head h2 { color: #fff; max-width: 14ch; }
.sports__grid {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
  max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
}
.sport-card {
  position: relative; overflow: hidden;
  aspect-ratio: 3/4; border-radius: 4px;
  cursor: pointer;
  isolation: isolate;
}
.sport-card__bg {
  position: absolute; inset: 0;
  background-size: cover; background-position: center;
  transform: scale(1);
  transition: transform 1200ms var(--ease-swell);
}
.sport-card:hover .sport-card__bg { transform: scale(1.06); }
.sport-card__veil {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(8,22,28,0.0) 30%, rgba(8,22,28,0.85) 100%);
}
.sport-card__num {
  position: absolute; top: 28px; left: 28px;
  font-family: var(--font-display); font-style: italic; font-size: 18px;
  color: rgba(255,255,255,0.7);
}
.sport-card__arrow {
  position: absolute; top: 24px; right: 24px;
  width: 44px; height: 44px; border-radius: 50%;
  background: rgba(255,255,255,0.1);
  border: 1px solid rgba(255,255,255,0.35);
  display: flex; align-items: center; justify-content: center;
  backdrop-filter: blur(10px);
  transition: background 240ms var(--ease-swell), transform 240ms var(--ease-swell);
}
.sport-card:hover .sport-card__arrow { background: var(--coral); border-color: var(--coral); color: var(--on-accent); transform: rotate(-45deg); }
.sport-card__arrow svg { width: 16px; height: 16px; stroke-width: 1.5; }
.sport-card__body { position: absolute; left: 28px; right: 28px; bottom: 26px; color: #fff; }
.sport-card__body h3 { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-title); line-height: 1.0; }
.sport-card__body p { margin: 10px 0 0; font-size: 15px; line-height: 1.55; color: rgba(255,255,255,0.78); max-width: 30ch; }
.sport-card__tag {
  position: absolute; bottom: 26px; right: 28px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase;
  color: rgba(255,255,255,0.7);
}

/* ====== Section: Two-up image + text ====== */
.feature {
  padding: clamp(80px, 10vw, 160px) 0;
  background: var(--paper);
}
.feature__inner {
  display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(40px, 6vw, 100px);
  align-items: center;
  max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
}
.feature.flip .feature__inner { grid-template-columns: 1fr 1.05fr; direction: rtl; }
.feature.flip .feature__inner > * { direction: ltr; }
.feature__media {
  position: relative; overflow: hidden;
  aspect-ratio: 4/5;
  background: var(--paper-2);
}
.feature__media img { width: 100%; height: 100%; object-fit: cover; }
.feature__media .stamp {
  position: absolute; left: 22px; top: 22px;
  background: var(--cream); padding: 10px 14px; border-radius: 999px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.26em; text-transform: uppercase;
  color: var(--ink);
}
.feature__text h2 { margin: 22px 0 26px; }
.feature__text .lede { margin-bottom: 32px; }
.feature__list { display: flex; flex-direction: column; gap: 18px; padding: 0; margin: 0; list-style: none; }
.feature__list li { display: grid; grid-template-columns: 24px 1fr; gap: 16px; align-items: start; }
.feature__list svg { width: 20px; height: 20px; color: var(--teal-deep); stroke-width: 1.5; margin-top: 3px; }
.feature__list .lbl { font-family: var(--font-body); font-size: 15px; line-height: 1.55; color: var(--ink); font-weight: 400; }
.feature__list .lbl b { display: block; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-deep); margin-bottom: 3px; }

.feature.dark { background: var(--night); color: var(--cream); }
.feature.dark .feature__text { color: var(--cream); }
.feature.dark h2 { color: #fff; }
.feature.dark .lede { color: rgba(249,245,233,0.78); }
.feature.dark .feature__list svg { color: var(--teal-pale); }
.feature.dark .feature__list .lbl { color: var(--cream); }
.feature.dark .feature__list .lbl b { color: var(--teal-pale); }

/* ====== Section: Pull quote / community ====== */
.community {
  padding: clamp(80px, 10vw, 160px) 0;
  background: var(--teal-deep);
  color: var(--cream);
  position: relative; overflow: hidden;
}
.community__inner {
  max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
  display: grid; grid-template-columns: 1fr 1fr; gap: clamp(40px, 6vw, 80px);
  align-items: end;
}
.community blockquote {
  margin: 22px 0 0;
  font-family: var(--font-display); font-style: italic;
  font-size: clamp(40px, 5.5vw, 88px);
  line-height: 1.02; letter-spacing: -0.015em;
  font-weight: 400;
  color: #fff;
  text-wrap: balance;
}
.community blockquote .mark { color: var(--teal-pale); font-size: 0.9em; }
.community__stats { display: flex; flex-direction: column; gap: 28px; padding-bottom: 16px; }
.community__stats .stat { display: grid; grid-template-columns: 140px 1fr; gap: 22px; align-items: baseline; padding: 22px 0; border-top: 1px solid rgba(255,255,255,0.15); }
.community__stats .stat:last-child { border-bottom: 1px solid rgba(255,255,255,0.15); }
.community__stats .num { font-family: var(--font-display); font-size: 56px; line-height: 0.9; color: #fff; }
.community__stats .num i { font-style: italic; color: var(--teal-pale); }
.community__stats .lbl { font-family: var(--font-body); font-size: 15px; line-height: 1.5; color: rgba(255,255,255,0.78); }
.community__stats .lbl b { display: block; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-pale); margin-bottom: 4px; }

/* ====== Section: Location / travel ====== */
.location {
  padding: clamp(80px, 10vw, 160px) 0;
  background: var(--paper);
}
.location__inner { max-width: 1360px; margin: 0 auto; padding: 0 clamp(20px, 4vw, 56px); }
.location__head { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; margin-bottom: clamp(40px, 5vw, 80px); align-items: end; }
.location__grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 24px; }
.location__map {
  position: relative; overflow: hidden;
  aspect-ratio: 16/11;
  background: var(--night-2);
}
.location__map img { width: 100%; height: 100%; object-fit: cover; opacity: 0.95; }
.location__pin {
  position: absolute; transform: translate(-50%, -100%);
  display: inline-flex; flex-direction: column; align-items: center; gap: 4px;
}
.location__pin .dot {
  width: 14px; height: 14px; border-radius: 50%;
  background: var(--coral);
  box-shadow: 0 0 0 5px var(--coral-glow), 0 4px 14px rgba(0,0,0,0.35);
}
.location__pin.swell .dot { width: 18px; height: 18px; background: #f5c443; box-shadow: 0 0 0 6px rgba(245,196,67,0.3), 0 4px 14px rgba(0,0,0,0.4); }
.location__pin .lbl {
  background: var(--night); color: #fff;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase;
  padding: 4px 9px; border-radius: 999px;
  white-space: nowrap;
  transform: translateY(-4px);
}
.location__airports { display: flex; flex-direction: column; gap: 0; align-self: stretch; }
.location__airport {
  display: grid; grid-template-columns: 1fr auto; gap: 20px;
  padding: 22px 0; border-top: 1px solid var(--hairline);
  align-items: baseline;
}
.location__airport:last-child { border-bottom: 1px solid var(--hairline); }
.location__airport .name { font-family: var(--font-display); font-size: 28px; line-height: 1.0; font-weight: 400; }
.location__airport .code { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-deep); margin-top: 6px; }
.location__airport .dist { font-family: var(--font-display); font-style: italic; font-size: 28px; color: var(--coral); }
.location__caption { font-family: var(--font-display); font-style: italic; font-size: 22px; line-height: 1.35; color: var(--ink-soft); margin-top: 28px; max-width: 32ch; }

/* ====== Section: Press strip ====== */
.press {
  padding: clamp(40px, 5vw, 60px) 0;
  background: var(--paper-2);
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
}
.press__inner {
  max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
  display: grid; grid-template-columns: auto 1fr;
  align-items: center; gap: 40px;
}
.press__label { font-family: var(--font-display); font-style: italic; font-size: 22px; color: var(--ink-soft); white-space: nowrap; }
.press__logos { display: flex; align-items: center; justify-content: space-around; gap: 36px; flex-wrap: wrap; }
.press__logos img { height: 26px; opacity: 0.55; filter: grayscale(1) contrast(0.7); }

/* ====== Section: Big CTA ====== */
.bigcta {
  position: relative; overflow: hidden;
  background: var(--night);
  color: var(--cream);
  padding: clamp(120px, 14vw, 220px) 0;
}
.bigcta__bg {
  position: absolute; inset: 0;
  background-size: cover; background-position: center 40%;
  filter: brightness(0.7);
}
.bigcta__veil { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(10,29,34,0.4) 0%, rgba(10,29,34,0.85) 100%); }
.bigcta__inner {
  position: relative; z-index: 2; max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
  text-align: center;
}
.bigcta h2 { color: #fff; max-width: 14ch; margin: 22px auto 0; }
.bigcta .lede { color: rgba(255,255,255,0.82); margin: 24px auto 36px; }
.bigcta__cta { display: inline-flex; gap: 14px; flex-wrap: wrap; justify-content: center; }

/* ====== Footer ====== */
.footer {
  background: var(--night); color: rgba(255,255,255,0.7);
  padding: clamp(60px, 7vw, 100px) 0 32px;
}
.footer__inner {
  max-width: 1360px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px);
  display: grid; grid-template-columns: 1.6fr repeat(3, 1fr); gap: 48px;
}
.footer__brand .mark {
  display: flex; flex-direction: column; line-height: 0.95;
}
.footer__brand .swell { font-family: var(--font-display); font-size: 28px; letter-spacing: 0.32em; text-transform: uppercase; color: #fff; }
.footer__brand .escape { font-family: var(--font-display); font-style: italic; font-size: 28px; color: var(--teal-pale); margin-top: -2px; padding-left: 1.2em; }
.footer__brand p { margin: 24px 0 0; font-size: 15px; line-height: 1.6; max-width: 32ch; color: rgba(255,255,255,0.65); }
.footer h5 { margin: 0 0 18px; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.26em; text-transform: uppercase; color: var(--teal-pale); }
.footer ul { padding: 0; margin: 0; list-style: none; display: flex; flex-direction: column; gap: 12px; }
.footer a { font-size: 15px; transition: color 200ms var(--ease-swell); }
.footer a:hover { color: #fff; }
.footer__bottom {
  max-width: 1360px; margin: 60px auto 0;
  padding: 24px clamp(20px, 4vw, 56px) 0;
  border-top: 1px solid rgba(255,255,255,0.1);
  display: flex; justify-content: space-between; gap: 24px; font-size: 12px;
  color: rgba(255,255,255,0.5);
}

/* ====== Booking modal ====== */
.modal-scrim {
  position: fixed; inset: 0; z-index: 1000;
  background: rgba(10,29,34,0.6);
  backdrop-filter: blur(12px);
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
  opacity: 0; pointer-events: none;
  transition: opacity 320ms var(--ease-swell);
}
.modal-scrim.open { opacity: 1; pointer-events: auto; }
.modal {
  background: var(--cream); border-radius: 12px;
  max-width: 560px; width: 100%;
  padding: 44px 44px 40px;
  box-shadow: 0 24px 80px rgba(0,0,0,0.4);
  transform: translateY(16px) scale(0.98);
  transition: transform 320ms var(--ease-swell);
  position: relative;
}
.modal-scrim.open .modal { transform: translateY(0) scale(1); }
.modal__close { position: absolute; top: 16px; right: 16px; width: 36px; height: 36px; border-radius: 50%; background: var(--paper-2); display: flex; align-items: center; justify-content: center; }
.modal__close svg { width: 16px; height: 16px; color: var(--ink); }
.modal h3 { margin: 8px 0 8px; font-family: var(--font-display); font-size: 40px; line-height: 1.0; font-weight: 400; }
.modal p { margin: 6px 0 0; font-size: 16px; line-height: 1.5; color: var(--ink-soft); }
.modal form { margin-top: 26px; display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.modal label { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.24em; text-transform: uppercase; color: var(--ink-soft); display: flex; flex-direction: column; gap: 8px; }
.modal label.full { grid-column: 1/-1; }
.modal input, .modal select {
  height: 48px; padding: 0 14px;
  border: 1px solid var(--hairline); border-radius: 8px;
  font: inherit; font-size: 16px; color: var(--ink);
  background: #fff;
  text-transform: none;
  letter-spacing: normal;
}
.modal input:focus, .modal select:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 3px rgba(15,154,154,0.15); }
.modal__cta { grid-column: 1/-1; display: flex; justify-content: flex-end; margin-top: 8px; }

/* ====== Booking wizard (3-step) ====== */
.modal--wizard { max-width: 580px; max-height: calc(100vh - 48px); overflow-y: auto; padding: 40px 44px 36px; }
.modal--wizard::-webkit-scrollbar { width: 8px; }
.modal--wizard::-webkit-scrollbar-thumb { background: var(--hairline); border-radius: 8px; }

.bk-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; padding-right: 40px; }
.bk-steps { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; flex-shrink: 0; }
.bk-steps__label { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.22em; text-transform: uppercase; color: var(--ink-soft); }
.bk-steps__bar { display: flex; gap: 5px; }
.bk-steps__seg { width: 26px; height: 4px; border-radius: 999px; background: var(--hairline); transition: background 320ms var(--ease-swell); }
.bk-steps__seg.is-on { background: var(--teal); }

.modal form.bk-form { display: block; margin-top: 0; }
.bk-step { animation: bkFade 360ms var(--ease-swell); }
@keyframes bkFade { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.bk-step h3 { margin-top: 14px; }

.bk-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 24px; }
.bk-field { display: flex; flex-direction: column; gap: 8px; margin-top: 22px; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.24em; text-transform: uppercase; color: var(--ink-soft); }
.bk-grid2 .bk-field { margin-top: 0; }
.bk-field--block { gap: 12px; }
.bk-field__label { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.24em; text-transform: uppercase; color: var(--ink-soft); }
.bk-field input, .bk-field select, .bk-field textarea {
  height: 48px; padding: 0 14px;
  border: 1px solid var(--hairline); border-radius: 8px;
  font-family: var(--font-body); font-size: 16px; color: var(--ink);
  background: #fff; text-transform: none; letter-spacing: normal; font-weight: 400;
}
.bk-field textarea { height: auto; padding: 12px 14px; line-height: 1.5; resize: vertical; }
.bk-field input:focus, .bk-field select:focus, .bk-field textarea:focus { outline: none; border-color: var(--teal); box-shadow: 0 0 0 3px rgba(15,154,154,0.15); }

.bk-pills { display: flex; flex-wrap: wrap; gap: 8px; }
.bk-pills--grid { display: grid; grid-template-columns: 1fr 1fr; }
.bk-pill {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 16px; border: 1px solid var(--hairline); border-radius: 10px;
  background: #fff; cursor: pointer;
  font-family: var(--font-body); font-size: 15px; font-weight: 400; letter-spacing: normal; text-transform: none;
  color: var(--ink); text-align: left;
  transition: border-color 200ms var(--ease-swell), background 200ms var(--ease-swell), box-shadow 200ms var(--ease-swell);
}
.bk-pill:hover { border-color: var(--teal); }
.bk-pill__dot { width: 16px; height: 16px; border-radius: 50%; border: 1.75px solid var(--hairline); flex-shrink: 0; position: relative; transition: border-color 200ms var(--ease-swell); }
.bk-pill.is-active { border-color: var(--teal); background: rgba(15,154,154,0.06); box-shadow: 0 0 0 1px var(--teal) inset; }
.bk-pill.is-active .bk-pill__dot { border-color: var(--teal); }
.bk-pill.is-active .bk-pill__dot::after { content: ''; position: absolute; inset: 3px; border-radius: 50%; background: var(--teal); }

.bk-nav { display: flex; align-items: center; justify-content: space-between; margin-top: 32px; }
.bk-back { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-body); font-size: 15px; color: var(--ink-soft); background: none; padding: 8px 4px; cursor: pointer; transition: color 200ms var(--ease-swell); }
.bk-back:hover { color: var(--teal-deep); }
.bk-back svg { width: 16px; height: 16px; }
.btn--primary:disabled { opacity: 0.45; cursor: not-allowed; }
.toast {
  position: fixed; bottom: 32px; left: 50%;
  transform: translateX(-50%) translateY(80px);
  background: var(--night); color: var(--cream);
  padding: 14px 22px 14px 18px; border-radius: 999px;
  font-size: 16px; display: inline-flex; align-items: center; gap: 10px;
  z-index: 1100; box-shadow: 0 12px 40px rgba(0,0,0,0.35);
  opacity: 0; transition: all 320ms var(--ease-swell);
}
.toast.show { transform: translateX(-50%) translateY(0); opacity: 1; }
.toast svg { color: var(--teal-pale); }

/* ====== DIRECTION 2: Cinematic overrides ====== */
.dir-cinematic .hero h1 { font-size: var(--disp-hero); }
.dir-cinematic .hero__photo { background-position: center; }
.dir-cinematic .hero__veil {
  background:
    radial-gradient(120% 70% at 50% 100%, rgba(8,22,28,0.75) 0%, rgba(8,22,28,0) 60%),
    linear-gradient(180deg, rgba(8,22,28,0.45) 0%, rgba(8,22,28,0) 30%);
}
.dir-cinematic .promise { background: var(--night); color: var(--cream); }
.dir-cinematic .promise h2 { color: #fff; }
.dir-cinematic .promise__col-r p { color: rgba(255,255,255,0.74); }
.dir-cinematic .promise__list .row { border-color: rgba(255,255,255,0.15); }
.dir-cinematic .promise__list .row h4 { color: #fff; }
.dir-cinematic .promise__list .row p { color: rgba(255,255,255,0.7); }
.dir-cinematic .promise__list .row .num { color: var(--teal-pale); }
.dir-cinematic .feature { background: var(--night-2); color: var(--cream); }
.dir-cinematic .feature h2 { color: #fff; }
.dir-cinematic .feature .lede { color: rgba(255,255,255,0.74); }
.dir-cinematic .feature__list .lbl { color: var(--cream); }
.dir-cinematic .feature__list svg { color: var(--teal-pale); }
.dir-cinematic .feature__list .lbl b { color: var(--teal-pale); }
.dir-cinematic .location { background: var(--night); color: var(--cream); }
.dir-cinematic .location h2 { color: #fff; }
.dir-cinematic .location__airport { border-color: rgba(255,255,255,0.15); }
.dir-cinematic .location__airport .name { color: #fff; }
.dir-cinematic .location__airport .code { color: var(--teal-pale); }
.dir-cinematic .location__caption { color: rgba(255,255,255,0.74); }
.dir-cinematic .press { background: var(--night-2); border-color: rgba(255,255,255,0.1); }
.dir-cinematic .press__label { color: rgba(255,255,255,0.7); }
.dir-cinematic .press__logos img { filter: brightness(0) invert(1); opacity: 0.5; }

/* ====== DIRECTION 3: Boutique overrides ====== */
.dir-boutique { background: var(--cream); }
.dir-boutique .hero { background: var(--cream); color: var(--ink); min-height: 100vh; }
.dir-boutique .hero__photo {
  inset: 90px clamp(20px, 4vw, 56px) 120px clamp(20px, 4vw, 56px);
  border-radius: 4px;
}
.dir-boutique .hero__veil {
  inset: 90px clamp(20px, 4vw, 56px) 120px clamp(20px, 4vw, 56px);
  border-radius: 4px;
  background: linear-gradient(180deg, rgba(8,22,28,0.0) 30%, rgba(8,22,28,0.55) 100%);
}
.dir-boutique .nav { color: #fff; padding-top: 36px; }
.dir-boutique .nav__brand .escape { color: var(--teal-pale); }
.dir-boutique .hero__content { padding-bottom: clamp(60px, 8vw, 100px); }
.dir-boutique .hero h1 { font-size: var(--disp-hero); max-width: 16ch; }
.dir-boutique .hero__rail { right: clamp(40px, 6vw, 80px); bottom: clamp(80px, 10vw, 140px); }
.dir-boutique .promise { background: var(--cream); }
.dir-boutique .promise__list .row { border-color: rgba(13,28,32,0.1); }
.dir-boutique .feature { background: var(--cream); }
.dir-boutique .feature__media { border-radius: 6px; }
.dir-boutique .community { background: var(--teal); }
.dir-boutique .sports { background: var(--paper-deep); color: var(--ink); }
.dir-boutique .sports__head h2 { color: var(--ink); }
.dir-boutique .location { background: var(--paper-2); }
.dir-boutique .press { background: var(--cream); }

/* ====== DIRECTION 1: Editorial overrides (default-ish but more magazine) ====== */
.dir-editorial .hero h1 { letter-spacing: -0.025em; }
.dir-editorial .nav__center a { color: rgba(255,255,255,0.9); }

/* ====== Scroll-reveal helper ====== */
.reveal { opacity: 0; transform: translateY(28px); transition: opacity 900ms var(--ease-swell), transform 1000ms var(--ease-swell); }
.reveal.in { opacity: 1; transform: translateY(0); }
.reveal.d1 { transition-delay: 80ms; }
.reveal.d2 { transition-delay: 160ms; }
.reveal.d3 { transition-delay: 240ms; }
.reveal.d4 { transition-delay: 320ms; }

/* mobile: bump Jost body copy +1.5px for small screens */
@media (max-width: 600px) {
  .body { font-size: 18px; }
  .lede, .lede.lg { font-size: 18px; }
}

/* ====== Responsive (basic mobile) ====== */
@media (max-width: 960px) {
  /* Collapse to logo + hamburger: ribbon, inline links and the bar CTA all
     hand off to the mobile sheet (which carries them). */
  .nav__ribbon { display: none; }
  .nav__center { display: none; }
  .nav__right .reserve { display: none; }
  .nav__burger { display: inline-flex; }
  .mm { display: block; }
  .promise__inner, .feature__inner, .feature.flip .feature__inner, .community__inner, .sports__head, .location__head, .location__grid, .footer__inner, .press__inner { grid-template-columns: 1fr !important; }
  .sports__grid { grid-template-columns: 1fr; }
  .hero__rail { display: none; }
  .modal { padding: 28px; }
  .modal form { grid-template-columns: 1fr; }
  .modal--wizard { padding: 28px 24px; }
  .bk-grid2, .bk-pills--grid { grid-template-columns: 1fr; }
  .bk-head { padding-right: 36px; }
}

/* ====== Tweaks-driven font overrides ====== */
html[data-font="instrument"] { --font-display: "Instrument Serif", Georgia, serif; }
html[data-font="cormorant"] { --font-display: "Cormorant Garamond", Georgia, serif; }
html[data-font="playfair"] { --font-display: "Playfair Display", Georgia, serif; }
html[data-font="dmserif"] { --font-display: "DM Serif Display", "Instrument Serif", Georgia, serif; }
html[data-font="italiana"] { --font-display: "Italiana", "Instrument Serif", Georgia, serif; }

html { --h-mult: 1; }
html[data-hsize="xs"] { --h-mult: 0.72; }
html[data-hsize="s"] { --h-mult: 0.84; }
html[data-hsize="l"] { --h-mult: 1.1; }

html[data-rhythm="sand"] .sports { background: var(--paper-deep); color: var(--ink); }
html[data-rhythm="sand"] .sports__head h2 { color: var(--ink); }
html[data-rhythm="sand"] .sports .lede { color: var(--ink-soft); }
html[data-rhythm="sand"] .sport-card { background: var(--night-2); }
html[data-rhythm="sand"] .bigcta { padding-top: clamp(100px, 12vw, 180px); padding-bottom: clamp(100px, 12vw, 180px); }
html[data-rhythm="ocean"] .promise { background: var(--night); color: var(--cream); }
html[data-rhythm="ocean"] .promise h2 { color: #fff; }
html[data-rhythm="ocean"] .promise__list .row { border-color: rgba(255,255,255,0.14); }
html[data-rhythm="ocean"] .promise__list .row h4 { color: #fff; }
html[data-rhythm="ocean"] .promise__list .row p, html[data-rhythm="ocean"] .promise__col-r p { color: rgba(255,255,255,0.72); }
html[data-rhythm="ocean"] .promise__list .row .num { color: var(--teal-pale); }
html[data-rhythm="ocean"] .feature:not(.dark) { background: var(--night-2); color: var(--cream); }
html[data-rhythm="ocean"] .feature:not(.dark) h2 { color: #fff; }
html[data-rhythm="ocean"] .feature:not(.dark) .lede { color: rgba(255,255,255,0.74); }
html[data-rhythm="ocean"] .feature:not(.dark) .feature__list .lbl { color: var(--cream); }
html[data-rhythm="ocean"] .feature:not(.dark) .feature__list .lbl b { color: var(--teal-pale); }
html[data-rhythm="ocean"] .feature:not(.dark) .feature__list svg { color: var(--teal-pale); }

/* --- c-editorial.css --- */
/* =========================================================
   CONCEPT A — EDITORIAL  (prefix: ed-)
   Warm-sand magazine. Hairline rules, numbered index, serif heads.
   ========================================================= */
.ed { background: var(--paper); color: var(--ink); }
.ed-wrap { max-width: 1280px; margin: 0 auto; padding: 0 clamp(20px, 4vw, 56px); }

.ed-kicker {
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.3em; text-transform: uppercase;
  color: var(--teal-deep);
  display: inline-flex; align-items: baseline; gap: 12px;
}
.ed-kicker span {
  font-family: var(--font-display); font-style: italic; font-size: 15px;
  letter-spacing: 0; color: var(--coral); text-transform: none;
}
.ed-kicker--center { justify-content: center; }

/* ===== SECTION EYEBROW — "Minimal" treatment (site-wide) =====
   July 9 redesign: the oversized faint numeral read as cluttered above the
   headline, so it was retired in favour of a clean short coral rule + a tracked
   uppercase label. The numeral and the legacy disc icon are kept in the markup
   but hidden, so any section that still passes a number just shows the rule +
   label. (The CTA "ticket" eyebrow keeps its own compact icon-pill treatment,
   defined further down with higher specificity.) */
.ed-kicker--icon {
  position: relative; display: inline-flex; align-items: center;
  gap: 14px; width: auto; padding-left: 0;
}
.ed-kicker--icon .ed-kicon { display: none; }
.ed-kicker--icon .ed-knum { display: none !important; }
.ed-kicker--icon .ed-krule {
  display: inline-block; align-self: center; flex: none;
  width: clamp(28px, 4vw, 52px); height: 2px; border-radius: 2px;
  background: var(--coral); opacity: 1; margin: 0;
}
.ed-kicker--icon .ed-klabel {
  position: relative; font-family: var(--font-body); font-weight: 600; font-style: normal;
  text-transform: uppercase; letter-spacing: 0.3em; font-size: 12px;
  line-height: 1; color: var(--ink-soft); padding-bottom: 0; margin-left: 0;
}
.ed-kicker--icon.ed-kicker--center { justify-content: center; }
/* on the slate dark theme the label reads teal on the dark ground */
.ed--dark .ed-kicker--icon .ed-klabel { color: var(--teal-pale); }

.ed-h2 {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-head); line-height: 1.0; letter-spacing: -0.02em;
  margin: 18px 0 0; color: var(--ink); text-wrap: balance;
}
.ed-h2 i { font-style: italic; color: var(--teal-deep); }
.ed-lead {
  font-family: var(--font-body); font-weight: 400;
  font-size: 18px; line-height: 1.5; color: var(--ink-soft);
}
.ed-para {
  font-family: var(--font-body); font-weight: 400;
  font-size: 18px; line-height: 1.65; color: var(--ink-soft);
}

/* ---- 1 intro ---- */
.ed-intro { padding: clamp(72px, 9vw, 150px) 0 clamp(48px, 6vw, 96px); }
.ed-intro__top {
  display: flex; justify-content: space-between; align-items: center;
  padding-bottom: 26px; border-bottom: 1px solid var(--hairline);
}
.ed-intro__est { font-family: var(--font-display); font-style: italic; font-size: 16px; color: var(--ink-soft); }
.ed-intro__grid {
  display: grid; grid-template-columns: 1.25fr 1fr; gap: clamp(36px, 6vw, 92px);
  align-items: start; padding-top: clamp(40px, 5vw, 72px);
}
.ed-intro__head {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-head); line-height: 1.04; letter-spacing: -0.02em;
  margin: 0; text-wrap: balance;
}
.ed-intro__head i { font-style: italic; color: var(--teal-deep); }
.ed-intro__body { display: flex; flex-direction: column; gap: 20px; padding-top: 8px; }

/* ---- "Cool" arrow link → interior pages (stay, gallery) ---- */
.ed-morelink {
  display: inline-flex; align-items: center; gap: 16px;
  margin-top: clamp(28px, 3vw, 40px);
  text-decoration: none; cursor: pointer;
  color: var(--ink);
}
.ed--dark .ed-morelink { color: #fff; }
.ed-morelink__icon {
  width: 46px; height: 46px; border-radius: 50%; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--coral); color: var(--on-accent, #fff);
  box-shadow: 0 10px 26px -12px var(--coral-glow, rgba(238,106,71,0.6));
  transition: transform 0.42s var(--ease-swell), background 0.3s var(--ease-swell);
}
.ed-morelink__label {
  position: relative;
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase;
}
.ed-morelink__label::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -4px;
  height: 1px; background: currentColor;
  transform: scaleX(0); transform-origin: left;
  transition: transform 0.42s var(--ease-swell);
}
.ed-morelink:hover .ed-morelink__icon { transform: rotate(-45deg); background: var(--coral-deep, var(--coral)); }
.ed-morelink:hover .ed-morelink__label::after { transform: scaleX(1); }
.ed-morelink:active .ed-morelink__icon { transform: rotate(-45deg) scale(0.94); }

.ed-gal__more { margin-top: clamp(36px, 5vw, 64px); display: flex; justify-content: center; }
.ed-gal__more .ed-morelink { flex-direction: column; align-items: center; gap: 14px; margin-top: 0; text-align: center; }
.ed-gal__more .ed-morelink__label::after { left: 50%; right: auto; transform: translateX(-50%) scaleX(0); transform-origin: center; }
.ed-gal__more .ed-morelink:hover .ed-morelink__label::after { transform: translateX(-50%) scaleX(1); }

/* ---- 1b · MARQUEE opener — oversized full-width headline, copy in two
   columns beneath, no fact strip (mirrors the Surfing page intro). ---- */
.ed-intro--marquee .ed-intro__grid { display: block; }
.ed-intro--marquee .ed-intro__head {
  font-size: var(--disp-head);
  line-height: 1.08;
  font-style: italic;
  position: relative;
  max-width: none;
  text-wrap: balance;
}
.ed-intro--marquee .ed-intro__head::before {
  content: "\201C"; color: var(--teal-pale); font-style: normal;
  font-size: 1.2em; line-height: 0; vertical-align: -0.18em; margin-right: 0.04em;
}
.ed-intro--marquee .ed-intro__head::after {
  content: "\201D"; color: var(--teal-pale); font-style: normal;
  font-size: 1.2em; line-height: 0; vertical-align: -0.18em; margin-left: 0.04em;
}
.ed-intro--marquee .ed-intro__head i { color: var(--teal-pale); font-style: italic; }
.ed-intro--marquee .ed-intro__body {
  display: grid; grid-template-columns: 1fr 1fr; gap: clamp(32px, 5vw, 96px);
  margin-top: clamp(28px, 3.2vw, 48px); padding-top: 0; max-width: none;
}
.ed-intro--marquee .ed-intro__photo {
  margin: clamp(28px, 3.4vw, 52px) 0 0;
  width: 100%;
}
.ed-intro--marquee .ed-intro__photo img {
  width: 100%; height: clamp(260px, 34vw, 460px);
  object-fit: cover; object-position: center 58%;
  border-radius: clamp(14px, 1.4vw, 22px);
  box-shadow: 0 30px 70px -34px rgba(6,29,40,0.55);
}
.ed-intro--marquee .ed-intro__photo figcaption {
  margin-top: 14px;
  font-family: var(--font-body);
  font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--ink-soft);
}
.ed--dark .ed-intro--marquee .ed-intro__photo figcaption { color: rgba(249,245,233,0.55); }
.ed-intro--marquee .ed-facts { display: none; }
.ed:not(.ed--dark) .ed-intro--marquee .ed-intro__head::before,
.ed:not(.ed--dark) .ed-intro--marquee .ed-intro__head::after,
.ed:not(.ed--dark) .ed-intro--marquee .ed-intro__head i { color: var(--teal-deep); }
@media (max-width: 760px) {
  .ed-intro--marquee .ed-intro__body { grid-template-columns: 1fr; gap: 20px; }
}
.ed-facts {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
  margin-top: clamp(48px, 6vw, 88px); padding-top: 34px; border-top: 1px solid var(--hairline);
}
.ed-fact__num { font-family: var(--font-display); font-size: calc(clamp(40px, 4.4vw, 62px) * var(--m-num, 1)); line-height: 0.9; color: var(--ink); }
.ed-fact__lbl { margin-top: 12px; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-deep); }

/* =========================================================
   1c · WHO WE ARE — IMMERSIVE
   Brand statement set into a single cinematic photo, with a
   lead + stat-ledger under-row. Default entrance = Reveal
   (slow zoom-out + masked headline rise). The eyebrow reuses
   .ed-intro__top (flex · hairline). Ships on the dark homepage.
   ========================================================= */
.ed-who--immersive .ed-intro__top { padding-bottom: 26px; }

/* stage — the cinematic photo + overlaid headline */
.ed-who__stage {
  position: relative; margin: clamp(28px, 3.4vw, 44px) 0 0; overflow: hidden;
  border-radius: clamp(16px, 1.6vw, 20px); display: flex; align-items: flex-end;
  min-height: clamp(420px, 56vw, 640px);
  box-shadow: 0 44px 100px -46px rgba(6,29,40,0.7);
}
.ed-who__stage img,
.ed-who__stage video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 54%; }
.ed-who__stage-grad { position: absolute; inset: 0; pointer-events: none; background: linear-gradient(180deg, rgba(6,29,40,0.14) 0%, rgba(6,29,40,0) 34%, rgba(6,29,40,0.8) 100%); }
.ed-who__head--over {
  position: relative; z-index: 1; margin: 0; color: #fff; max-width: 19ch;
  padding: clamp(28px, 4vw, 60px);
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-mega); line-height: 1.02; letter-spacing: -0.02em;
  text-shadow: 0 2px 30px rgba(6,29,40,0.35);
}
.ed-who__head--over i { font-style: italic; color: var(--teal-pale); }

/* under-row — lead copy + stat ledger */
.ed-who__under {
  display: grid; grid-template-columns: 1.1fr 0.9fr; gap: clamp(32px, 5vw, 80px);
  align-items: end; margin-top: clamp(30px, 3.6vw, 52px);
}
.ed-who__lede { max-width: 50ch; }
.ed-who__lede .ed-lead { margin: 0; }
.ed-who__lede .ed-para { margin: 14px 0 0; }
.ed-who__ledger { display: grid; grid-template-columns: repeat(3, 1fr); margin: 0; }
.ed-who__stat { padding: 4px 0 4px 20px; border-left: 1px solid var(--hairline); }
.ed-who__stat:first-child { padding-left: 0; border-left: 0; }
.ed-who__stat-num { font-family: var(--font-display); font-size: calc(clamp(34px, 3.4vw, 50px) * var(--m-num, 1)); line-height: 0.9; color: var(--ink); }
.ed-who__stat-lbl { display: block; margin: 10px 0 0; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--teal-deep); max-width: 14ch; }

/* dark homepage variants */
.ed--dark .ed-who__stat { border-left-color: rgba(255,255,255,0.16); }
.ed--dark .ed-who__stat-num { color: #fff; }
.ed--dark .ed-who__stat-lbl { color: var(--teal-pale); }

@media (max-width: 860px) {
  .ed-who__under { grid-template-columns: 1fr; gap: 28px; }
  .ed-who__stage { min-height: clamp(360px, 88vw, 520px); }
}
@media (max-width: 640px) {
  .ed-who__ledger { grid-template-columns: 1fr; gap: 0; }
  .ed-who__stat {
    display: flex;
    flex-direction: row-reverse;
    align-items: baseline;
    justify-content: space-between;
    gap: 18px;
    padding: 16px 0;
    border-left: 0;
    border-top: 1px solid var(--hairline);
  }
  .ed-who__stat:first-child { border-top: 0; padding-top: 0; padding-left: 0; }
  .ed-who__stat:last-child { padding-bottom: 0; }
  .ed-who__stat-num { font-size: 34px; line-height: 1; }
  .ed-who__stat-lbl {
    margin: 0;
    max-width: none;
    text-align: left;
    font-size: 11px;
    letter-spacing: 0.14em;
  }
  .ed--dark .ed-who__stat { border-top-color: rgba(255, 255, 255, 0.16); }
}

/* --- Reveal entrance (gated so reduced-motion / print show the final frame) --- */
.ed-who--immersive .ed-who__stage img,
.ed-who--immersive .ed-who__stage video { will-change: transform; }
@media (prefers-reduced-motion: no-preference) {
  .ed-who--immersive[data-anim="reveal"] .ed-who__stage img,
  .ed-who--immersive[data-anim="reveal"] .ed-who__stage video {
    transform: scale(1.16); transition: transform 1500ms var(--ease-swell, ease);
  }
  .ed-who--immersive[data-anim="reveal"] .ed-who__stage.in img,
  .ed-who--immersive[data-anim="reveal"] .ed-who__stage.in video { transform: scale(1); }
  .ed-who--immersive[data-anim="reveal"] .ed-who__head--over {
    opacity: 0; transform: translateY(30px); clip-path: inset(105% 0 0 0);
    transition: opacity 900ms var(--ease-swell, ease) 240ms,
                transform 1100ms var(--ease-swell, ease) 240ms,
                clip-path 1100ms var(--ease-swell, ease) 240ms;
  }
  .ed-who--immersive[data-anim="reveal"] .ed-who__stage.in .ed-who__head--over {
    opacity: 1; transform: translateY(0); clip-path: inset(0 0 0 0);
  }
}

/* ---- press marquee (between intro & sports) ---- */
.ed-marq {
  padding-top: clamp(40px, 5vw, 72px);
}
.ed-marq__label {
  margin: 0 0 clamp(18px, 2vw, 26px);
  text-align: center;
  font-family: var(--font-body); font-weight: 600;
  font-size: 12px; letter-spacing: 0.3em; text-transform: uppercase;
  color: var(--coral);
}
/* July 9: on the slate-dark theme the "AS SEEN IN" label reads white */
.ed--dark .ed-marq__label { color: #fff; }
.ed-marq__bar {
  background: #07171b;
  border-top: 1px solid rgba(255,255,255,0.08);
  border-bottom: 1px solid rgba(255,255,255,0.08);
  padding: clamp(18px, 2.2vw, 28px) 0;
}

.ed-marq__viewport {
  width: 100%;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 8%, #000 92%, transparent 100%);
  mask-image: linear-gradient(90deg, transparent 0%, #000 8%, #000 92%, transparent 100%);
}
.ed-marq__track { display: flex; width: max-content; animation: ed-marq-scroll 55s linear infinite; }
.ed-marq__group { display: flex; align-items: center; gap: clamp(44px, 5vw, 88px); padding-right: clamp(44px, 5vw, 88px); }
.ed-marq__item { white-space: nowrap; display: inline-flex; align-items: center; color: rgba(249,245,233,0.5); }
.ed-marq__item--label { font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.3em; text-transform: uppercase; color: var(--coral); }
.ed-marq__item--serif { font-family: "Instrument Serif", Georgia, serif; font-style: italic; font-size: 25px; color: rgba(249,245,233,0.62); }
.ed-marq__item--caps { font-family: var(--font-body); font-weight: 600; font-size: 15px; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(249,245,233,0.55); }
.ed-marq__item--heavy { font-family: var(--font-body); font-weight: 800; font-size: 18px; letter-spacing: 0.04em; text-transform: uppercase; color: rgba(249,245,233,0.7); }
.ed-marq__item--award { font-family: "Instrument Serif", Georgia, serif; font-style: italic; font-size: 22px; color: rgba(249,245,233,0.72); gap: 12px; }
.ed-marq__stars { color: #f5c443; letter-spacing: 2px; font-size: 15px; }
/* Optional press link — a real follow link, but visually indistinguishable
   from plain text: inherits colour, no underline, and no pointer cursor so
   visitors can't tell it's clickable (crawlers still follow it). */
.ed-marq__item--link { color: inherit; text-decoration: none; cursor: default; }
.ed-marq__item--link:hover,
.ed-marq__item--link:focus { color: inherit; text-decoration: none; }
@keyframes ed-marq-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .ed-marq__track { animation: none; } }

/* ---- 2 sports ---- */
.ed-sports { padding: clamp(64px, 8vw, 130px) 0; background: var(--paper-2); }
.ed-shead { max-width: 880px; }
.ed-spread {
  display: grid; grid-template-columns: 1fr 1fr; gap: clamp(24px, 3vw, 40px);
  margin-top: clamp(40px, 5vw, 76px);
}
.ed-sport {
  display: flex; flex-direction: column;
  background: var(--cream);
  border: 1px solid var(--hairline);
  border-radius: 18px;
  overflow: hidden;
  transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell);
}
.ed-sport:hover { transform: translateY(-4px); box-shadow: 0 22px 56px rgba(13,28,32,0.14); }
.ed-sport__fig {
  position: relative; aspect-ratio: 4/3; overflow: hidden;
  background: var(--paper-deep);
}
.ed-sport__fig img { width: 100%; height: 100%; object-fit: cover; transition: transform 1200ms var(--ease-swell); }
.ed-sport:hover .ed-sport__fig img { transform: scale(1.04); }
.ed-sport__rn {
  position: absolute; top: 16px; left: 20px; z-index: 2;
  font-family: var(--font-display); font-style: italic; font-size: 30px; color: #fff;
  text-shadow: 0 2px 18px rgba(0,0,0,0.4);
}
.ed-sport__pill {
  position: absolute; top: 18px; left: 18px; z-index: 2;
  display: inline-flex; align-items: center; gap: 9px;
  padding: 9px 16px 9px 14px; border-radius: 999px;
  background: rgba(8,22,28,0.40);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  backdrop-filter: blur(10px) saturate(140%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.42);
  color: #fff;
  font-family: var(--font-body); font-weight: 600;
  font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
}
.ed-sport__pill::before {
  content: ""; width: 6px; height: 6px; border-radius: 50%;
  background: var(--coral); box-shadow: 0 0 0 3px var(--coral-glow);
}
.ed-sport__meta { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-deep); }
.ed-sport__title { margin: 8px 0 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-title); line-height: 1.0; }
.ed-sport__lead { margin: 16px 0 0; font-family: var(--font-body); font-size: 18px; line-height: 1.55; color: var(--ink-soft); max-width: 42ch; }
.ed-sport__body { display: flex; flex-direction: column; padding: clamp(26px, 3vw, 38px); flex: 1; }
.ed-sport__specs { list-style: none; margin: clamp(28px, 3vw, 40px) 0 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 14px 24px; }
.ed-sport__specs li { display: flex; align-items: center; gap: 10px; font-family: var(--font-body); font-size: 16px; color: var(--ink); }
.ed-sport__specs svg { color: var(--coral); flex: none; }
.ed-sport__facts {
  display: flex; gap: clamp(28px, 4vw, 52px);
  margin: 26px 0 0; padding: 22px 0 0; border-top: 1px solid var(--hairline);
}
.ed-sport__fact { display: flex; flex-direction: column; gap: 5px; }
.ed-sport__fact .k { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-deep); }
.ed-sport__fact .v { font-family: var(--font-display); font-style: italic; font-size: clamp(17px, 1.6vw, 21px); color: var(--ink); line-height: 1.1; }
.ed-sport__btn { margin-top: 26px; align-self: flex-start; }

/* wide multi-sport card (full width, shorter, horizontal) */
.ed-sport--wide { grid-column: 1 / -1; flex-direction: row; align-items: stretch; }
.ed-sport--wide .ed-sport__fig { width: 50%; flex: none; aspect-ratio: auto; min-height: 300px; }
.ed-sport__wbody { flex: 1; min-width: 0; display: flex; flex-direction: column; justify-content: center; padding: clamp(28px, 3.2vw, 48px) clamp(26px, 3vw, 38px) clamp(28px, 3.2vw, 48px) calc(clamp(24px, 3vw, 40px) / 2 + clamp(26px, 3vw, 38px)); }
.ed-sport--wide .ed-sport__meta { margin-top: 0; }
.ed-sport--wide .ed-sport__lead { max-width: 52ch; }
.ed-sport__wside { display: flex; flex-direction: column; margin-top: 24px; }
.ed-sport--wide .ed-sport__facts { margin-top: 0; }
/* combo offer — text note in place of the old wide card */
.ed-combo {
  grid-column: 1 / -1;
  margin-top: clamp(20px, 2.6vw, 40px);
  padding: clamp(34px, 4vw, 58px) 0 0;
  display: flex; flex-direction: column; align-items: flex-start; text-align: left;
  gap: clamp(20px, 2.4vw, 32px);
  border-top: 1px solid var(--hairline);
}
.ed-combo__label {
  display: block;
  font-family: var(--font-body);
  font-size: 12px; font-weight: 600; letter-spacing: 0.24em; text-transform: uppercase;
  color: var(--coral);
}
.ed-combo__head {
  margin: 0; max-width: none; text-wrap: pretty;
  font-family: var(--font-display); font-weight: 400; font-style: normal;
  font-size: var(--disp-head); line-height: 1.02; letter-spacing: -0.02em;
  color: var(--ink);
}
.ed-combo__head i { font-style: italic; color: var(--teal-deep); }
.ed-combo__foot {
  display: flex; flex-direction: column; align-items: flex-start;
  gap: clamp(18px, 2vw, 26px); width: 100%;
  padding-top: clamp(4px, 0.8vw, 10px);
}
.ed-combo__more { margin-top: 0; }
.ed-combo__sub {
  margin: 0; max-width: none;
  font-family: var(--font-body); font-size: clamp(15px, 1.1vw, 18px); line-height: 1.55;
  color: var(--ink-soft);
}
.ed-combo__link {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-body); font-size: 15px; font-weight: 600;
  letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--ink); cursor: pointer;
  padding-bottom: 4px; border-bottom: 1.5px solid var(--coral);
  transition: gap var(--dur-base, 240ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)),
              color var(--dur-base, 240ms) var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.ed-combo__link svg { color: var(--coral); transition: transform var(--dur-base, 240ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)); }
.ed-combo__link:hover { gap: 16px; }
.ed-combo__link:hover svg { transform: translateX(3px); }
.ed--dark .ed-combo { border-top-color: rgba(255,255,255,0.14); }
.ed--dark .ed-combo__head { color: #fff; }
.ed--dark .ed-combo__head i { color: var(--teal-pale); }
.ed--dark .ed-combo__link { color: #fff; }
.ed--dark .ed-combo__sub { color: rgba(249,245,233,0.62); }
@media (max-width: 900px) {
  .ed-combo__foot { flex-direction: column; align-items: flex-start; gap: 22px; }
}

.ed-sport__wside .ed-sport__btn { margin-top: 22px; align-self: flex-start; width: auto; }
@media (max-width: 1080px) {
  .ed-sport--wide { flex-direction: column; }
  .ed-sport--wide .ed-sport__fig { width: 100%; aspect-ratio: 16/7; min-height: 0; }
}
@media (max-width: 1080px) {
  .ed-sport--wide { flex-direction: column; }
  .ed-sport--wide .ed-sport__fig { width: 100%; aspect-ratio: 16/7; min-height: 0; }
  .ed-sport__wbody { grid-template-columns: 1fr; gap: 24px; }
}

/* ---- 3 the stay ---- */
.ed-stay { padding: clamp(64px, 8vw, 130px) 0; background: var(--cream); }
.ed-stay__head { max-width: 880px; }
.ed-stay__lead { margin-top: 22px; max-width: 56ch; font-family: var(--font-display); font-style: italic; font-size: var(--disp-small); line-height: 1.32; color: var(--ink); }
.ed-stay__lead { font-style: italic; }

/* full-width stay slider */
.ed-slider { position: relative; margin-top: clamp(36px, 4.5vw, 64px); }
.ed-slider__track {
  display: flex; overflow-x: auto; scroll-snap-type: x mandatory;
  border-radius: 8px; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.ed-slider__track::-webkit-scrollbar { display: none; }
.ed-slider__slide {
  flex: 0 0 100%; scroll-snap-align: center; position: relative; margin: 0;
  height: clamp(320px, 50vw, 600px); background: var(--paper-deep);
}
.ed-slider__slide img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ed-slider__slide figcaption {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: clamp(40px, 6vw, 72px) clamp(20px, 3vw, 36px) clamp(20px, 2.4vw, 30px);
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em;
  text-transform: uppercase; color: #fff;
  background: linear-gradient(180deg, transparent 0%, rgba(6,29,40,0.72) 100%);
}
.ed-slider__arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 52px; height: 52px; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer;
  color: #fff; background: rgba(13,53,55,0.5);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.32);
  transition: background var(--dur-base, 240ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)),
              transform var(--dur-base, 240ms) var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.ed-slider__arrow:hover { background: var(--coral); transform: translateY(-50%) scale(1.06); }
.ed-slider__arrow:active { transform: translateY(-50%) scale(0.96); }
.ed-slider__arrow--prev { left: clamp(14px, 2vw, 26px); }
.ed-slider__arrow--next { right: clamp(14px, 2vw, 26px); }
.ed-slider__dots {
  position: absolute; left: 0; right: 0; bottom: clamp(18px, 2.2vw, 26px); z-index: 2;
  display: flex; justify-content: center; gap: 10px;
}
.ed-slider__dot {
  width: 8px; height: 8px; border-radius: 50%; cursor: pointer; padding: 0;
  background: rgba(255,255,255,0.45); box-shadow: 0 0 0 1px rgba(0,0,0,0.12);
  transition: background var(--dur-base, 240ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)),
              width var(--dur-base, 240ms) var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.ed-slider__dot.is-on { background: var(--coral); width: 22px; border-radius: 5px; }
@media (max-width: 600px) {
  .ed-slider__arrow { width: 44px; height: 44px; }
}
.ed-stay__grid { display: block; margin-top: clamp(40px, 5vw, 72px); }
.ed-stay__body { display: flex; flex-direction: column; gap: 18px; }
.ed-stay__body .ed-para { line-height: 1.75; max-width: none; }
.ed-stay__amen { list-style: none; margin: 14px 0 0; padding: 22px 0 0; border-top: 1px solid var(--hairline); display: grid; grid-template-columns: 1fr 1fr; gap: 16px 28px; }
.ed-stay__amen li { display: flex; align-items: center; gap: 12px; font-family: var(--font-body); font-size: 16px; color: var(--ink); }
.ed-stay__amen svg { color: var(--teal-deep); flex: none; }
.ed-stay__tall { margin: 0; position: relative; overflow: hidden; border-radius: 4px; aspect-ratio: 4/5; background: var(--paper-deep); position: sticky; top: 90px; }
.ed-stay__tall img { width: 100%; height: 100%; object-fit: cover; }
.ed-stay__tall figcaption { position: absolute; left: 16px; bottom: 14px; color: #fff; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; text-shadow: 0 1px 10px rgba(0,0,0,0.6); }
.ed-stay__mosaic { margin-top: clamp(56px, 7vw, 104px); display: grid; grid-template-columns: repeat(6, 1fr); grid-auto-rows: 150px; gap: 14px; }
.ed-stay__mosaic figure { margin: 0; position: relative; overflow: hidden; border-radius: 3px; background: var(--paper-deep); }
.ed-stay__mosaic img { width: 100%; height: 100%; object-fit: cover; transition: transform 1000ms var(--ease-swell); }
.ed-stay__mosaic figure:hover img { transform: scale(1.05); }
.ed-stay__mosaic figcaption { position: absolute; left: 12px; bottom: 10px; color: #fff; font-family: var(--font-display); font-style: italic; font-size: 16px; opacity: 0; transform: translateY(6px); transition: opacity 300ms var(--ease-swell), transform 300ms var(--ease-swell); text-shadow: 0 1px 10px rgba(0,0,0,0.6); }
.ed-stay__mosaic figure:hover figcaption { opacity: 1; transform: translateY(0); }
.ed-stay__mosaic .s0 { grid-column: span 3; grid-row: span 2; }
.ed-stay__mosaic .s1 { grid-column: span 3; }
.ed-stay__mosaic .s2 { grid-column: span 1; }
.ed-stay__mosaic .s3 { grid-column: span 1; }
.ed-stay__mosaic .s4 { grid-column: span 1; }

/* ---- 4 getting here (journey + departures board) ---- */
.ed-loc { padding: clamp(64px, 8vw, 130px) 0; }
.ed-loc__head { max-width: 760px; }
.ed-loc__intro { margin-top: 26px; max-width: 58ch; }

/* ===== SECTION STARTER — three treatments ===== */
/* A · STACK (default) — inherits base styles, nothing to add */

/* B · RULE — chapter divider: full-width hairline, big index number left,
   label tracked right, headline below */
.ed-gh-head--rule { max-width: none; border-top: 1px solid var(--hairline); padding-top: clamp(20px, 2.2vw, 30px); }
.ed-gh-head--rule .ed-h2 { margin-top: clamp(18px, 2vw, 28px); }
.ed-gh-head--rule .ed-loc__intro { max-width: 64ch; }

/* C · SPLIT — editorial masthead: kicker + headline left, intro in a
   right-hand column aligned to the headline's baseline */
.ed-gh-head--split { max-width: none; display: grid; grid-template-columns: 1.15fr 0.85fr; column-gap: clamp(32px, 5vw, 80px); align-items: start; }
.ed-gh-head--split .ed-kicker { grid-column: 1; grid-row: 1; }
.ed-gh-head--split .ed-h2 { grid-column: 1; grid-row: 2; margin-top: 14px; }
.ed-gh-head--split .ed-loc__intro { grid-column: 2; grid-row: 2; margin-top: 14px; max-width: 42ch; }

/* journey timeline */
.ed-journey {
  list-style: none; margin: clamp(44px, 5vw, 76px) 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(28px, 4vw, 56px);
  position: relative;
}
.ed-journey::before {
  content: ""; position: absolute; top: 27px; left: 0; right: 0; height: 1px;
  background: repeating-linear-gradient(to right, var(--hairline) 0 8px, transparent 8px 16px);
  z-index: 0;
}
.ed-journey__step { position: relative; z-index: 1; }
.ed-journey__node {
  position: relative; width: 56px; height: 56px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--paper); color: var(--teal-deep);
  box-shadow: inset 0 0 0 1px var(--hairline);
}
.ed-journey__ix {
  position: absolute; top: -6px; right: -6px;
  font-family: var(--font-display); font-style: italic; font-size: 15px; color: var(--coral);
  background: var(--paper); padding: 0 3px; line-height: 1;
}
.ed-journey__title { margin: 22px 0 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-small); line-height: 1.05; }
.ed-journey__body { margin: 10px 0 0; font-family: var(--font-body); font-size: 18px; line-height: 1.55; color: var(--ink-soft); max-width: 34ch; }

/* getting-here — full-width supporting note (other airports) */
.ed-gh-note {
  margin-top: clamp(28px, 3.4vw, 44px);
  margin-bottom: clamp(28px, 3.4vw, 44px);
  padding-top: clamp(26px, 3vw, 38px);
  border-top: 1px solid var(--hairline);
  display: flex; flex-direction: column; gap: clamp(16px, 1.6vw, 22px);
}
.ed-gh-note p {
  margin: 0; font-family: var(--font-body); font-weight: 400;
  font-size: clamp(16px, 1.15vw, 18px); line-height: 1.68; color: var(--ink-soft);
}
.ed-gh-note strong { font-weight: 500; color: var(--ink); }
.ed--dark .ed-gh-note p { color: rgba(249,245,233,0.82); }
.ed--dark .ed-gh-note strong { color: #fff; }
@media (max-width: 760px) {
  .ed-gh-note { gap: 18px; }
}

/* departures board */
.ed-board { margin-top: clamp(48px, 6vw, 84px); border-top: 1.5px solid var(--ink); }
.ed-board__row {
  display: grid; grid-template-columns: 1.6fr 0.7fr 0.9fr 2.2fr; align-items: baseline;
  gap: clamp(12px, 2vw, 28px); padding: 22px 0; border-bottom: 1px solid var(--hairline);
}
.ed-board__row--head {
  padding: 14px 0; border-bottom: 1px solid var(--hairline);
}
.ed-board__row--head span {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em;
  text-transform: uppercase; color: var(--teal-deep);
}
.ed-board__name { font-family: var(--font-display); font-size: var(--disp-small); line-height: 1; }
.ed-board__code {
  font-family: var(--font-body); font-weight: 500; font-size: 15px; letter-spacing: 0.16em;
  color: var(--ink); align-self: center;
}
.ed-board__dist { font-family: var(--font-display); font-style: italic; font-size: var(--disp-small); color: var(--coral); }
.ed-board__dist i { font-style: italic; font-size: 0.5em; margin-left: 3px; letter-spacing: 0.06em; }
.ed-board__when { font-family: var(--font-body); font-size: 15px; line-height: 1.5; color: var(--ink-soft); align-self: center; }

.ed-board__foot {
  margin-top: 26px; display: flex; justify-content: space-between; align-items: center;
  gap: 18px; flex-wrap: wrap;
}
.ed-board__coord {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink);
}
.ed-board__coord svg { color: var(--coral); }
.ed-board__tag { font-family: var(--font-display); font-style: italic; font-size: 17px; color: var(--ink-soft); }

/* ===== DESIGN B — MAP-LED ===== */
/* ===== DESIGN A — DEPARTURES BOARD ===== */
.ed-dep { margin-top: clamp(40px, 5vw, 72px); border-top: 1.5px solid var(--ink); }
.ed-dep__row { display: grid; grid-template-columns: 1.3fr 1.4fr 1fr 0.8fr; align-items: center; gap: clamp(12px, 2vw, 28px); padding: 22px 4px; border-bottom: 1px solid var(--hairline); }
.ed-dep__row--head { padding: 14px 4px; }
.ed-dep__row--head span { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-deep); }
.ed-dep__city { font-family: var(--font-display); font-size: clamp(24px, 2.6vw, 38px); line-height: 1; }
.ed-dep__route { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-body); font-weight: 500; font-size: 16px; letter-spacing: 0.12em; color: var(--ink); }
.ed-dep__route svg { color: var(--coral); }
.ed-dep__time { font-family: var(--font-display); font-style: italic; font-size: var(--disp-small); color: var(--coral); }
.ed-dep__status { display: inline-flex; align-items: center; gap: 9px; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink); }
.ed-dep__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--success, #2f9e6f); box-shadow: 0 0 0 3px rgba(47,158,111,0.22); }
.ed-dep__final { margin-top: clamp(20px, 2.6vw, 30px); display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; padding: 0 4px; }
.ed-dep__leg { display: flex; align-items: center; gap: 18px; }
.ed-dep__legicon { width: 52px; height: 52px; flex: none; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--coral); color: var(--on-accent, #fff); }
.ed-dep__legtext { display: flex; flex-direction: column; gap: 4px; }
.ed-dep__legk { font-family: var(--font-body); font-weight: 400; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-deep); }
/* July 9: leg-label reads white + bolder on the slate-dark theme */
.ed--dark .ed-dep__legk { color: #fff; font-weight: 600; }
.ed-dep__legv { font-family: var(--font-display); font-size: var(--disp-small); line-height: 1; color: var(--ink); }

/* ===== DESIGN B — TWO-LEG RAIL ===== */
.ed-rail { margin-top: clamp(44px, 5vw, 76px); display: grid; grid-template-columns: auto 1fr auto 1fr auto; align-items: center; gap: clamp(8px, 1.4vw, 20px); }
.ed-rail__stop { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 10px; padding: 0 8px; }
.ed-rail__k { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-deep); }
.ed-rail__chips { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; }
.ed-rail__chip { font-family: var(--font-body); font-weight: 500; font-size: 13px; letter-spacing: 0.12em; padding: 8px 12px; border-radius: 999px; background: var(--paper-2); box-shadow: inset 0 0 0 1px var(--hairline); color: var(--ink); }
.ed-rail__big { font-family: var(--font-display); font-weight: 400; font-size: calc(clamp(40px, 4.6vw, 72px) * var(--m-num, 1)); line-height: 0.9; color: var(--ink); }
.ed-rail__stop.is-end .ed-rail__big { color: var(--coral); }
.ed-rail__sub { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.04em; color: var(--ink-soft); max-width: 18ch; }
.ed-rail__leg { position: relative; display: flex; flex-direction: column; align-items: center; gap: 8px; min-width: 90px; }
.ed-rail__legline { width: 100%; height: 2px; background: repeating-linear-gradient(to right, var(--teal-deep) 0 7px, transparent 7px 14px); opacity: 0.55; }
.ed-rail__legline.is-drive { background: repeating-linear-gradient(to right, var(--coral) 0 7px, transparent 7px 14px); opacity: 0.7; }
.ed-rail__legicon { position: absolute; top: -16px; width: 38px; height: 38px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--paper); color: var(--teal-deep); box-shadow: inset 0 0 0 1px var(--hairline); }
.ed-rail__legicon.is-drive { color: var(--coral); }
.ed-rail__legt { margin-top: 6px; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-soft); white-space: nowrap; }
.ed-rail__foot { margin-top: clamp(36px, 4vw, 56px); display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; padding-top: 26px; border-top: 1px solid var(--hairline); }
.ed-rail__foot span { font-family: var(--font-display); font-style: italic; font-size: clamp(18px, 1.9vw, 25px); color: var(--ink-soft); max-width: 48ch; }
.ed-rail__foot b { font-style: normal; font-weight: 400; color: var(--coral); }

/* ===== DESIGN C — ROUTE-MAP HUB ===== */
.ed-hub { margin-top: clamp(40px, 5vw, 70px); padding: clamp(24px, 3vw, 44px); background: var(--paper-2); border-radius: 12px; box-shadow: inset 0 0 0 1px var(--hairline); }
.ed-hub__svg { width: 100%; height: auto; display: block; }
.ed-hub__flight line { stroke: var(--teal-deep); stroke-width: 2; stroke-dasharray: 2 9; stroke-linecap: round; opacity: 0.6; }
.ed-hub__drive { stroke: var(--coral); stroke-width: 4; stroke-linecap: round; }
.ed-hub__cdot { fill: var(--teal-deep); }
.ed-hub__ccode { fill: var(--ink); font-family: var(--font-display); font-size: 34px; }
.ed-hub__ccity { fill: var(--ink-soft); font-family: var(--font-body); font-size: 16px; letter-spacing: 0.04em; }
.ed-hub__pop { fill: var(--teal-deep); }
.ed-hub__poplabel { fill: #fff; font-family: var(--font-display); font-size: 40px; text-anchor: middle; dominant-baseline: central; }
.ed-hub__popsub { fill: var(--ink-soft); font-family: var(--font-body); font-size: 15px; letter-spacing: 0.12em; text-anchor: middle; text-transform: uppercase; }
.ed-hub__drivelabel { fill: var(--coral); font-family: var(--font-body); font-weight: 500; font-size: 18px; letter-spacing: 0.16em; text-anchor: middle; }
.ed-hub__swell { fill: var(--coral); }
.ed-hub__swelllabel { fill: var(--on-accent, #fff); font-family: var(--font-display); font-size: 26px; text-anchor: middle; dominant-baseline: central; }
.ed-hub__legend { display: flex; flex-wrap: wrap; gap: 24px; margin-top: 18px; padding-top: 18px; border-top: 1px solid var(--hairline); }
.ed-hub__legend span { display: inline-flex; align-items: center; gap: 9px; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.04em; color: var(--ink-soft); }
.ed-hub__lg { width: 22px; height: 0; border-top: 2px solid; }
.ed-hub__lg--flight { color: var(--teal-deep); border-top-style: dashed; }
.ed-hub__lg--drive { color: var(--coral); border-top-width: 3px; }

/* ---- 4 gallery (asymmetric magazine mosaic) ---- */
.ed-gal { padding: clamp(64px, 8vw, 130px) 0; background: var(--paper-2); }
.ed-gal__head { display: grid; grid-template-columns: auto 1fr; gap: clamp(24px, 5vw, 72px); align-items: end; }
.ed-gal__cap { margin: 0; font-family: var(--font-display); font-style: italic; font-size: clamp(20px, 2.2vw, 30px); line-height: 1.3; color: var(--ink); max-width: 40ch; justify-self: end; }
.ed-gal__cap i { color: var(--teal-deep); }
.ed-gal__mosaic {
  margin-top: clamp(36px, 5vw, 64px);
  display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 150px;
  grid-auto-flow: dense;
  gap: 14px;
}
.ed-gal__tile { margin: 0; position: relative; overflow: hidden; border-radius: 3px; background: var(--paper-deep); }
.ed-gal__tile img { width: 100%; height: 100%; object-fit: cover; transition: transform 1000ms var(--ease-swell); }
.ed-gal__tile:hover img { transform: scale(1.05); }
.ed-gal__tile figcaption {
  position: absolute; left: 12px; bottom: 10px; color: #fff;
  font-family: var(--font-display); font-style: italic; font-size: 15px;
  opacity: 0; transform: translateY(6px); transition: opacity 300ms var(--ease-swell), transform 300ms var(--ease-swell);
  text-shadow: 0 1px 10px rgba(0,0,0,0.6);
}
.ed-gal__tile:hover figcaption { opacity: 1; transform: translateY(0); }
/* feature tile layout */
.ed-gal__tile.t0 { grid-column: span 2; grid-row: span 2; }
.ed-gal__tile.t4 { grid-column: span 2; }
.ed-gal__tile.t6 { grid-row: span 2; }

/* ---- reviews — spotlight (one voice at a time) ---- */
.ed-rev { padding: clamp(64px, 8vw, 130px) 0; background: var(--paper-2); }
.ed-rev__stars { display: inline-flex; gap: 3px; color: var(--teal); line-height: 0; }
.ed-rev__stars svg { fill: currentColor; }

/* header row */
.ed-rev__top { display: grid; grid-template-columns: 1fr auto; align-items: end; gap: 32px; padding-bottom: clamp(28px, 3.4vw, 44px); border-bottom: 1px solid var(--hairline); }
.ed-rev__h { margin-top: 16px; }
.ed-rev__agg { display: flex; align-items: center; gap: 18px; }
.ed-rev__score { font-family: var(--font-display); font-size: calc(clamp(48px, 5vw, 68px) * var(--m-num, 1)); line-height: 0.78; color: var(--ink); }
.ed-rev__score small { font-size: 0.3em; color: var(--ink-soft); margin-left: 3px; }
.ed-rev__aggside { display: flex; flex-direction: column; gap: 9px; padding-left: 18px; border-left: 1px solid var(--hairline); }
.ed-rev__src { margin: 0; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink); }

/* spotlight */
.ed-rev__spot { margin: 0; padding: clamp(34px, 4vw, 56px) 0 0; display: grid; grid-template-columns: auto 1fr; column-gap: clamp(10px, 1.2vw, 18px); animation: edRevIn 460ms var(--ease-swell); }
@keyframes edRevIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.ed-rev__mark { grid-row: 1 / span 2; font-family: var(--font-display); font-style: italic; font-size: clamp(64px, 8vw, 120px); line-height: 0.6; color: var(--coral); opacity: 0.5; user-select: none; }
.ed-rev__quote { grid-column: 2; margin: 0; font-family: var(--font-display); font-weight: 400; font-style: italic; font-size: var(--disp-small); line-height: 1.4; letter-spacing: -0.005em; color: var(--ink); text-wrap: pretty; }
.ed-rev__by { grid-column: 2; display: flex; align-items: center; gap: 15px; margin-top: clamp(24px, 2.8vw, 36px); flex-wrap: wrap; }
.ed-rev__avatar { width: 52px; height: 52px; flex: none; border-radius: 50%; object-fit: cover; background: var(--teal); box-shadow: inset 0 0 0 1px rgba(13,28,32,0.08); }
.ed-rev__bymeta { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.ed-rev__name { font-family: var(--font-display); font-size: 22px; line-height: 1; color: var(--ink); }
.ed-rev__sub { font-family: var(--font-body); font-size: 13px; letter-spacing: 0.04em; color: var(--ink-soft); }
.ed-rev__cred { display: flex; flex-direction: column; align-items: flex-end; gap: 7px; margin-left: auto; }
.ed-rev__verified { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--teal-deep); }
.ed-rev__rate { display: inline-flex; align-items: center; gap: 9px; }
.ed-rev__rate .ed-rev__stars { gap: 2px; }
.ed-rev__rateon { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-soft); }

/* nav */
.ed-rev__nav { margin-top: clamp(28px, 3vw, 42px); padding-top: 20px; border-top: 1px solid var(--hairline); display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.ed-rev__count2 { font-family: var(--font-display); font-style: italic; font-size: 21px; color: var(--ink); }
.ed-rev__count2 span { color: var(--ink-soft); }
.ed-rev__btns { display: flex; gap: 10px; }
.ed-rev__btn { width: 46px; height: 46px; border-radius: 50%; border: 1px solid var(--hairline); background: transparent; color: var(--ink); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: background 240ms var(--ease-swell), color 240ms var(--ease-swell), border-color 240ms var(--ease-swell), transform 160ms var(--ease-swell); }
.ed-rev__btn:hover { background: var(--coral); border-color: var(--coral); color: #fff; }
.ed-rev__btn:active { transform: scale(0.94); }

/* roster chips */
.ed-rev__roster { display: flex; flex-wrap: wrap; gap: 10px; margin-top: clamp(20px, 2.4vw, 28px); }
.ed-rev__chip { display: inline-flex; align-items: center; gap: 10px; padding: 7px 16px 7px 7px; border-radius: 999px; border: 1px solid var(--hairline); background: transparent; color: var(--ink-soft); font-family: var(--font-body); font-size: 15px; cursor: pointer; transition: background 240ms var(--ease-swell), color 240ms var(--ease-swell), border-color 240ms var(--ease-swell); }
.ed-rev__chip img { width: 30px; height: 30px; border-radius: 50%; object-fit: cover; background: var(--teal); }
.ed-rev__chip:hover { border-color: var(--ink-soft); color: var(--ink); }
.ed-rev__chip.is-on { border-color: var(--coral); background: rgba(238,106,71,0.12); color: var(--ink); }

@media (max-width: 820px) {
  .ed-rev__top { grid-template-columns: 1fr; align-items: start; gap: 22px; }
  .ed-rev__spot { grid-template-columns: 1fr; }
  .ed-rev__mark { grid-row: auto; grid-column: 1; font-size: 56px; line-height: 0.8; }
  .ed-rev__quote, .ed-rev__by { grid-column: 1; }
  .ed-rev__cred { margin-left: 0; align-items: flex-start; flex-basis: 100%; }
}

/* ---- 5 faq ---- */
.ed-faq { padding: clamp(64px, 8vw, 130px) 0; }
.ed-faq__inner { display: grid; --fg: clamp(36px, 6vw, 90px); grid-template-columns: 50% 50%; column-gap: 0; align-items: start; }
.ed-faq__aside { position: sticky; top: 90px; padding-right: var(--fg); }
.ed-faq__aside .ed-para { margin-top: 22px; max-width: 34ch; }
.ed-faq__list { display: flex; flex-direction: column; }
.ed-faq__row { border-top: 1px solid var(--hairline); }
.ed-faq__qh { margin: 0; padding: 0; font-size: inherit; font-weight: inherit; line-height: inherit; }
.ed-faq__row:last-child { border-bottom: 1px solid var(--hairline); }
.ed-faq__q {
  width: 100%; display: grid; grid-template-columns: 44px 1fr 28px; align-items: center; gap: 8px;
  padding: 26px 0; text-align: left;
}
.ed-faq__idx { font-family: var(--font-display); font-style: italic; font-size: 17px; color: var(--teal-deep); }
.ed-faq__qtext { font-family: var(--font-display); font-size: var(--disp-small); line-height: 1.15; color: var(--ink); }
.ed-faq__sign { color: var(--coral); display: inline-flex; justify-content: flex-end; }
.ed-faq__abody { overflow: hidden; height: 0; transition: height 420ms var(--ease-swell); }
.ed-faq__abody p { margin: 0 0 28px; padding-left: 0; max-width: 60ch; font-family: var(--font-body); font-size: 18px; line-height: 1.65; color: var(--ink-soft); }

/* ---- 6 cta ---- */
.ed-cta { padding: clamp(64px, 8vw, 120px) 0 clamp(80px, 9vw, 150px); }
.ed-cta__frame {
  text-align: center; padding: clamp(48px, 7vw, 96px) clamp(24px, 4vw, 64px);
  border: 1px solid var(--hairline); border-radius: 6px; background: var(--cream);
}
.ed-cta__head { font-family: var(--font-display); font-weight: 400; font-size: var(--disp-mega); line-height: 1.0; letter-spacing: -0.02em; margin: 22px 0 0; }
.ed-cta__head i { font-style: italic; color: var(--teal-deep); }
.ed-cta__lead { margin: 22px auto 36px; max-width: 52ch; }
.ed-cta__row { display: inline-flex; gap: 14px; flex-wrap: wrap; justify-content: center; }

/* CTA · B — full-bleed photo */
.ed-cta--photo { position: relative; overflow: hidden; padding: clamp(96px, 14vw, 200px) 0; text-align: center; }
.ed-cta__bg { position: absolute; inset: 0; background-size: cover; background-position: center; transform: scale(1.05); }
.ed-cta__scrim { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,22,28,0.5) 0%, rgba(8,22,28,0.82) 100%); }
.ed-cta__photoinner { position: relative; z-index: 1; }
.ed-cta--photo .ed-cta__head { color: #fff; }
.ed-cta--photo .ed-cta__head i { color: var(--teal-pale); }
.ed-cta--photo .ed-cta__lead { margin: 22px auto 36px; max-width: 52ch; color: rgba(255,255,255,0.85); }

/* CTA · C — split booking desk */
.ed-cta--panel { padding: clamp(56px, 8vw, 120px) 0 clamp(72px, 9vw, 140px); }
.ed-cta__split { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: clamp(36px, 5vw, 76px); align-items: center; }
.ed-cta--panel .ed-cta__head { text-align: left; margin-top: 16px; font-size: var(--disp-head); }
.ed-cta--panel .ed-cta__lead { text-align: left; margin: 20px 0 28px; max-width: 46ch; }
.ed-cta__assure { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.ed-cta__assure li { display: flex; align-items: center; gap: 12px; font-family: var(--font-body); font-size: 16px; color: var(--ink); }
.ed-cta__assure svg { color: var(--coral); flex: none; }
.ed-cta__desk { background: #fff; border-radius: 18px; padding: clamp(26px, 3vw, 38px); box-shadow: 0 1px 3px rgba(13,28,32,0.06), 0 24px 60px rgba(13,28,32,0.14); }
.ed-cta__deskhead { display: flex; align-items: center; justify-content: space-between; }
.ed-cta__desklabel { font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-deep); }
.ed-cta__live { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-soft); }
.ed-cta__livedot { width: 7px; height: 7px; border-radius: 50%; background: var(--success, #2f9e6f); box-shadow: 0 0 0 3px rgba(47,158,111,0.2); }
.ed-cta__weeks { list-style: none; margin: 18px 0 0; padding: 0; }
.ed-cta__week { display: grid; grid-template-columns: 1fr auto auto; align-items: center; gap: 14px; padding: 16px 0; border-top: 1px solid var(--hairline); }
.ed-cta__week:first-child { border-top: 0; }
.ed-cta__wdate { font-family: var(--font-display); font-size: var(--disp-small); color: var(--ink); line-height: 1; }
.ed-cta__wtag { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--teal-deep); }
.ed-cta__wstatus { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); padding: 5px 11px; border-radius: 999px; background: var(--paper-2); }
.ed-cta__wstatus.is-tight { color: var(--coral); background: rgba(238,106,71,0.12); }
.ed-cta__price { margin-top: 20px; padding-top: 18px; border-top: 1px solid var(--hairline); font-family: var(--font-body); font-size: 16px; color: var(--ink-soft); display: flex; align-items: baseline; gap: 8px; }
.ed-cta__price b { font-family: var(--font-display); font-style: italic; font-weight: 400; font-size: 32px; color: var(--ink); }
.ed-cta__deskbtn { width: 100%; justify-content: center; margin-top: 20px; }
.ed-cta__desknote { display: block; margin-top: 14px; text-align: center; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-soft); }

/* CTA · D — framed photo (combo) */
.ed-cta__frame--photo { position: relative; overflow: hidden; border-color: rgba(255,255,255,0.18); background: var(--night); }
.ed-cta__frame--photo .ed-cta__bg { position: absolute; inset: 0; background-size: cover; background-position: center; transform: scale(1.05); }
.ed-cta__frame--photo .ed-cta__scrim { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,22,28,0.45) 0%, rgba(8,22,28,0.8) 100%); }
.ed-cta__frameinner { position: relative; z-index: 1; }
.ed-cta__frame--photo .ed-cta__head { color: #fff; }
.ed-cta__frame--photo .ed-cta__head i { color: var(--teal-pale); }
.ed-cta__frame--photo .ed-cta__lead { color: rgba(255,255,255,0.86); }

/* CTA · E — travel tag (boarding-pass ticket) */
.ed-cta--tag { padding: clamp(56px, 8vw, 120px) 0 clamp(72px, 9vw, 140px); }

.ed-ticket {
  display: grid; grid-template-columns: 360px 1fr;
  width: 100%; margin: 0 auto; min-height: 440px;
  background: var(--cream); border-radius: 20px; position: relative;
  box-shadow: 0 26px 70px rgba(10,31,36,0.20);
}
.ed-ticket__stub { position: relative; border-radius: 20px 0 0 20px; overflow: hidden; color: #fff; }
.ed-ticket__stub img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ed-ticket__stubveil { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,40,42,0.12) 0%, rgba(8,40,42,0.78) 100%); }
.ed-ticket__stubinner { position: relative; z-index: 2; height: 100%; display: flex; flex-direction: column; justify-content: space-between; padding: 28px 26px; }
.ed-ticket__stamp { align-self: flex-start; display: inline-flex; flex-direction: column; gap: 2px; padding: 10px 15px; border-radius: 10px; background: var(--coral); transform: rotate(-3deg); box-shadow: 0 8px 22px rgba(238,106,71,0.4); }
.ed-ticket__stamp b { font-family: var(--font-body); font-size: 15px; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: #fff; }
.ed-ticket__stamp span { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; opacity: 0.92; }
.ed-ticket__route { display: flex; align-items: flex-end; gap: 14px; }
.ed-ticket__rcode { font-family: var(--font-display); font-size: 40px; line-height: 0.9; }
.ed-ticket__rmid { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; padding-bottom: 8px; }
.ed-ticket__rmid .ln { width: 100%; height: 1px; background: rgba(255,255,255,0.4); }
.ed-ticket__rmid em { font-style: normal; font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; opacity: 0.85; }

/* perforation seam */
.ed-ticket__perf { position: absolute; left: 360px; top: 0; bottom: 0; width: 0; border-left: 2px dashed rgba(13,28,32,0.2); transform: translateX(-1px); }
.ed-ticket::before, .ed-ticket::after { content: ""; position: absolute; left: 360px; width: 24px; height: 24px; border-radius: 50%; background: var(--paper); transform: translateX(-50%); z-index: 3; }
.ed-ticket::before { top: -12px; }
.ed-ticket::after { bottom: -12px; }

.ed-ticket__body { position: relative; overflow: hidden; padding: clamp(30px, 3.5vw, 48px) clamp(30px, 4vw, 54px); display: flex; flex-direction: column; justify-content: center; }
/* travel-document security texture on the cream ticket surface */
.ed-ticket__body::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-image:
    repeating-linear-gradient(46deg, rgba(13,53,55,0.04) 0 1px, transparent 1px 7px),
    repeating-linear-gradient(-46deg, rgba(13,53,55,0.032) 0 1px, transparent 1px 9px),
    radial-gradient(circle at 88% 22%, rgba(238,106,71,0.06) 0, transparent 34%);
  -webkit-mask-image: radial-gradient(140% 120% at 100% 50%, #000 30%, transparent 78%);
  mask-image: radial-gradient(140% 120% at 100% 50%, #000 30%, transparent 78%);
}
.ed-ticket__watermark {
  position: absolute; right: clamp(-6px, 1vw, 18px); bottom: -8px; z-index: 0; pointer-events: none; user-select: none;
  font-family: var(--font-display); font-style: italic; font-size: clamp(150px, 18vw, 260px);
  line-height: 0.74; color: rgba(13,53,55,0.045); letter-spacing: -0.02em;
}
.ed-ticket__body > *:not(.ed-ticket__watermark) { position: relative; z-index: 1; }

/* Dominican Republic entry stamp — distressed inked rubber stamp */
.ed-stamp {
  position: absolute; z-index: 4; pointer-events: none;
  top: clamp(16px, 2.4vw, 38px); right: clamp(14px, 2vw, 34px);
  width: clamp(116px, 13vw, 158px); aspect-ratio: 1;
  color: #2c6a67; transform: rotate(8deg);
  mix-blend-mode: multiply; opacity: 0.92;
}
.ed-stamp__arc { fill: currentColor; font-family: var(--font-body); font-weight: 600; }
.ed-stamp__arc--top { font-size: 15px; letter-spacing: 1.6px; }
.ed-stamp__arc--bot { font-size: 12px; letter-spacing: 2.4px; }
.ed-stamp__code { fill: currentColor; font-family: var(--font-display); font-size: 30px; letter-spacing: 0.04em; }
.ed-stamp__date { fill: currentColor; font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 2.2px; }
@media (max-width: 760px) {
  .ed-stamp { width: 104px; top: 10px; right: 8px; }
}
.ed-ticket__head { text-align: left; margin-top: 16px; font-size: var(--disp-head); }
.ed-ticket__lead { text-align: left; margin: 16px 0 0; max-width: 46ch; font-weight: 400; }
.ed-ticket__specs { display: flex; gap: 30px; flex-wrap: wrap; justify-content: space-between; margin: 26px 0 28px; padding-top: 22px; border-top: 1px solid var(--hairline); }
.ed-ticket__spec { display: flex; flex-direction: column; gap: 3px; }
.ed-ticket__spec b { font-family: var(--font-display); font-size: 26px; line-height: 1; color: var(--teal-deep); }
.ed-ticket__spec span { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-soft); }
.ed-ticket__row { display: flex; gap: 14px; flex-wrap: wrap; justify-content: flex-start; }
.ed-ticket__row .btn { flex: 1 1 220px; justify-content: center; }

/* gentle attention wiggle on the "Ask us a question" chat icon */
@media (prefers-reduced-motion: no-preference) {
  @keyframes ed-chat-wiggle {
    0%, 60%, 100% { transform: rotate(0deg) scale(1); }
    64% { transform: rotate(-16deg) scale(1.12); }
    69% { transform: rotate(14deg) scale(1.12); }
    74% { transform: rotate(-11deg) scale(1.08); }
    79% { transform: rotate(8deg) scale(1.06); }
    84% { transform: rotate(-5deg) scale(1.03); }
    89% { transform: rotate(3deg) scale(1.01); }
    94% { transform: rotate(-1deg) scale(1); }
  }
  .ed-ticket__row .btn--ghost-dark svg {
    transform-origin: 50% 60%;
    animation: ed-chat-wiggle 2.8s var(--ease-out, ease-in-out) infinite;
  }
  .ed-ticket__row .btn--ghost-dark:hover svg { animation-play-state: paused; }
}
/* Facebook-style unread badge on the chat bubble */
.ed-ask__ic { position: relative; display: inline-flex; align-items: center; }
.ed-ask__badge {
  position: absolute; top: -9px; right: -8px;
  min-width: 16px; height: 16px; padding: 0 4px;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--coral-500, #ee6a47); color: #fff;
  font-family: var(--font-body); font-size: 12px; font-weight: 600;
  line-height: 1; letter-spacing: 0; border-radius: 9999px;
  box-shadow: 0 0 0 2px var(--cream, #fdfbf7);
}
@media (prefers-reduced-motion: no-preference) {
  @keyframes ed-badge-pop {
    0%, 58%, 100% { transform: scale(1); }
    64% { transform: scale(1.28); }
    76% { transform: scale(1); }
  }
  .ed-ask__badge { animation: ed-badge-pop 2.8s var(--ease-out, ease-in-out) infinite; transform-origin: 50% 50%; }
  .ed-ticket__row .btn--ghost-dark:hover .ed-ask__badge { animation-play-state: paused; }
}

/* dark editorial theme — keep the cream card, deepen the seam notches */
.ed--dark .ed-ticket::before, .ed--dark .ed-ticket::after { background: var(--night); }

@media (max-width: 760px) {
  .ed-ticket { grid-template-columns: 1fr; }
  .ed-ticket__stub { border-radius: 20px 20px 0 0; min-height: 220px; }
  .ed-ticket__perf, .ed-ticket::before, .ed-ticket::after { display: none; }
  /* 4 spec tiles wrap awkwardly (3-then-1) on narrow screens — keep just
     price (tile 2) and the star rating (tile 3) so it reads as one clean line. */
  .ed-ticket__specs { flex-wrap: nowrap; }
  .ed-ticket__spec:nth-child(1), .ed-ticket__spec:nth-child(4) { display: none; }
  /* Stack the two CTA buttons full-width and equal so they line up neatly.
     Reset the desktop row's flex-basis (220px) and flex-grow (1) — in this
     column layout those apply to height, not width, and were stretching
     each button to fill the leftover vertical space. */
  .ed-ticket__row { flex-direction: column; align-items: stretch; }
  .ed-ticket__row .btn { flex: 0 0 auto; width: 100%; justify-content: center; }
}

/* ---- footer ---- */
.ed-footer { position: relative; overflow: hidden; background: var(--night); color: rgba(255,255,255,0.7); padding: clamp(56px, 7vw, 96px) 0 30px; }
.ed-footer::before {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: radial-gradient(110% 90% at 12% -10%, rgba(15,154,154,0.14), transparent 55%);
}
.ed-footer__watermark {
  position: absolute; left: 50%; bottom: -0.18em; transform: translateX(-50%);
  font-family: "Instrument Serif", Georgia, serif; font-style: italic;
  font-size: clamp(140px, 30vw, 460px); line-height: 0.8; letter-spacing: 0.02em;
  color: rgba(255,255,255,0.035); white-space: nowrap; pointer-events: none; user-select: none; z-index: 0;
}
.ed-footer .ed-wrap { position: relative; z-index: 1; }
.ed-footer__top { display: grid; grid-template-columns: 1.4fr 2fr; gap: 48px; }
.ed-footer__mark { display: flex; flex-direction: column; line-height: 0.92; }
.ed-footer__mark span { font-family: "Instrument Serif", Georgia, serif; font-size: 28px; letter-spacing: 0.3em; text-transform: uppercase; color: #fff; }
.ed-footer__mark i { font-family: "Instrument Serif", Georgia, serif; font-style: italic; font-size: 28px; color: var(--teal-pale); padding-left: 1.1em; }
.ed-footer__brand p { margin: 22px 0 0; font-size: 16px; line-height: 1.6; max-width: 34ch; color: rgba(255,255,255,0.6); }
.brandlock--footer { margin-bottom: 4px; }
.brandlock--footer .brandlock__logo { height: 68px; }
.ed-footer__rating { display: inline-flex; flex-direction: column; align-items: flex-start; gap: 6px; margin-top: 20px; padding: 0; background: none; box-shadow: none; }
.ed-footer__rating .ed-rev__stars { gap: 2px; }
.ed--dark .ed-footer__rating .ed-rev__stars { color: var(--sun-400, #f4c14a); }
.ed-footer__ratingtxt { font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255,255,255,0.5); }
.ed-footer__social { display: flex; gap: 11px; margin-top: 26px; }
.ed-footer__social a {
  width: 42px; height: 42px; border-radius: 50%; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  color: rgba(255,255,255,0.72);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.2);
  transition: color 220ms var(--ease-swell), background 220ms var(--ease-swell),
              box-shadow 220ms var(--ease-swell), transform 220ms var(--ease-swell);
}
.ed-footer__social a:hover { color: #fff; background: var(--coral); box-shadow: inset 0 0 0 1px var(--coral); transform: translateY(-3px); }
.ed-footer__social a:active { transform: translateY(-3px) scale(0.95); }
.ed-footer__cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; }
.ed-footer h3 { margin: 0 0 16px; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.24em; text-transform: uppercase; color: var(--teal-pale); }
.ed-footer ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 11px; }
.ed-footer a { font-size: 16px; transition: color 200ms var(--ease-swell); }
.ed-footer a:hover { color: #fff; }
.ed-footer__base { margin-top: 56px; padding-top: 22px; border-top: 1px solid rgba(255,255,255,0.1); display: flex; justify-content: space-between; gap: 20px; font-size: 15px; color: rgba(255,255,255,0.5); }
.ed-footer__base a { font-size: inherit; }
.ed-footer__base > span a { color: inherit; text-decoration: underline; text-decoration-color: rgba(255,255,255,0.28); text-underline-offset: 3px; transition: color 200ms var(--ease-swell), text-decoration-color 200ms var(--ease-swell); }
.ed-footer__base > span a:hover { color: #fff; text-decoration-color: rgba(255,255,255,0.6); }

@media (max-width: 1080px) {
  .ed-spread { grid-template-columns: 1fr 1fr; }
  .ed-rev__grid { grid-template-columns: 1fr 1fr; }
  .ed-rev__card.is-feat { grid-column: span 2; }
}
@media (max-width: 900px) {
  .ed-intro__grid, .ed-spread, .ed-gal__head, .ed-footer__top, .ed-stay__grid { grid-template-columns: 1fr; }
  .ed-faq__inner { grid-template-columns: 1fr; }
  .ed-faq__aside { padding-right: 0; }
  .ed-facts { grid-template-columns: 1fr; }
  .ed-rev__summary { grid-template-columns: 1fr; gap: 24px; }
  .ed-rev__sources { border-left: 0; padding-left: 0; padding-top: 20px; border-top: 1px solid var(--hairline); }
  .ed--dark .ed-rev__sources { border-top-color: rgba(255,255,255,0.16); }
  .ed-rev__grid { grid-template-columns: 1fr; }
  .ed-rev__card.is-feat { grid-column: span 1; }
  .ed-journey { grid-template-columns: 1fr; gap: 28px; }
  .ed-journey::before { display: none; }
  .ed-journey__body { max-width: none; }
  .ed-gh-head--split { grid-template-columns: 1fr; }
  .ed-gh-head--split .ed-h2 { grid-row: auto; }
  .ed-gh-head--split .ed-loc__intro { grid-column: 1; grid-row: auto; margin-top: 22px; max-width: 58ch; }
  .ed-dep__row--head { display: none; }
  .ed-dep__row { grid-template-columns: 1fr auto; align-items: baseline; column-gap: 16px; row-gap: 4px; padding: 18px 4px; }
  .ed-dep__city { grid-column: 1; grid-row: 1; }
  .ed-dep__route { grid-column: 1; grid-row: 2; font-size: 15px; }
  .ed-dep__time { grid-column: 2; grid-row: 1; text-align: right; }
  .ed-dep__status { grid-column: 2; grid-row: 2; justify-content: flex-end; font-size: 12px; }
  .ed-rail { grid-template-columns: 1fr; justify-items: center; gap: 4px; }
  .ed-rail__leg { width: 2px; min-width: 0; height: 64px; flex-direction: row; }
  .ed-rail__legline { width: 2px; height: 100%; background: repeating-linear-gradient(to bottom, var(--teal-deep) 0 7px, transparent 7px 14px); }
  .ed-rail__legline.is-drive { background: repeating-linear-gradient(to bottom, var(--coral) 0 7px, transparent 7px 14px); }
  .ed--dark .ed-rail__legline { background: repeating-linear-gradient(to bottom, var(--teal-pale) 0 7px, transparent 7px 14px); }
  .ed-rail__legicon { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
  .ed-rail__legt { position: absolute; left: 30px; top: 50%; transform: translateY(-50%); }
  .ed-board__row, .ed-board__row--head { grid-template-columns: 1.4fr 0.7fr 0.8fr; }
  .ed-board__when { display: none; }
  .ed-stay__tall { position: static; aspect-ratio: 16/10; }
  .ed-stay__amen { grid-template-columns: 1fr; }
  .ed-stay__mosaic { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 130px; }
  .ed-stay__mosaic .s0 { grid-column: span 2; grid-row: span 2; }
  .ed-stay__mosaic .s1 { grid-column: span 2; }
  .ed-stay__mosaic .s2, .ed-stay__mosaic .s3, .ed-stay__mosaic .s4 { grid-column: span 1; }
  .ed-gal__mosaic { grid-template-columns: repeat(2, 1fr); }
  .ed-gal__tile.t0, .ed-gal__tile.t4 { grid-column: span 2; }
  .ed-faq__aside { position: static; }
  .ed-footer__base { flex-direction: column; gap: 8px; }
}

/* mobile: tune Jost body copy size for small screens (bumped +1.5px) */
@media (max-width: 600px) {
  .ed-lead { font-size: 19px; }
  .ed-stay__lead { font-size: 19.5px; } /* stay lead bumped +2px per review */
  .ed-para { font-size: 19px; }
  .ed-sport__lead { font-size: 19px; }
  .ed-journey__body { font-size: 19px; }
  .ed-sport__specs li,
  .ed-stay__amen li { font-size: 19px; }
  /* stack the card's inner two-up grids to one column on phones */
  .ed-sport__specs { grid-template-columns: 1fr; }
  .ed-sport__facts { flex-direction: column; gap: 18px; }
}

/* =========================================================
   EDITORIAL — DARK THEME  (.ed--dark)
   Editorial layout recolored to the Cinematic dark palette.
   ========================================================= */
.ed--dark { background: var(--night); color: var(--cream); }

/* type + accents */
.ed--dark .ed-kicker { color: var(--teal-pale); }
.ed--dark .ed-kicker--icon .ed-knum { border-right-color: rgba(255,255,255,0.2); }
.ed--dark .ed-h2 { color: #fff; }
.ed--dark .ed-h2 i { color: var(--teal-pale); }
.ed--dark .ed-lead { color: rgba(249,245,233,0.82); }
.ed--dark .ed-para { color: rgba(249,245,233,0.72); }

/* section backgrounds — alternate dark / light down the page */
.ed--dark .ed-sports { background: var(--night-2); }
.ed--dark .ed-stay { background: var(--night); }
.ed--dark .ed-loc { background: var(--night-2); }
.ed--dark .ed-gal { background: var(--night); }
.ed--dark .ed-rev { background: var(--night-2); }
.ed--dark .ed-faq { background: var(--teal-deep); }

/* reviews (dark) */
.ed--dark .ed-rev__stars { color: var(--teal-pale); }
.ed--dark .ed-rev__top { border-bottom-color: rgba(255,255,255,0.12); }
.ed--dark .ed-rev__score { color: #fff; }
.ed--dark .ed-rev__score small { color: rgba(249,245,233,0.5); }
.ed--dark .ed-rev__aggside { border-left-color: rgba(255,255,255,0.16); }
.ed--dark .ed-rev__src { color: var(--cream); }
.ed--dark .ed-rev__quote { color: #fff; }
.ed--dark .ed-rev__avatar { box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16); }
.ed--dark .ed-rev__name { color: #fff; }
.ed--dark .ed-rev__sub { color: rgba(249,245,233,0.6); }
.ed--dark .ed-rev__cred .ed-rev__verified { color: var(--teal-pale); }
.ed--dark .ed-rev__rateon { color: rgba(249,245,233,0.6); }
.ed--dark .ed-rev__nav { border-top-color: rgba(255,255,255,0.12); }
.ed--dark .ed-rev__count2 { color: #fff; }
.ed--dark .ed-rev__count2 span { color: rgba(249,245,233,0.5); }
.ed--dark .ed-rev__btn { border-color: rgba(255,255,255,0.2); color: var(--cream); }
.ed--dark .ed-rev__btn:hover { background: var(--coral); border-color: var(--coral); color: #fff; }
.ed--dark .ed-rev__chip { border-color: rgba(255,255,255,0.16); color: rgba(249,245,233,0.72); }
.ed--dark .ed-rev__chip img { background: var(--teal-deep); }
.ed--dark .ed-rev__chip:hover { border-color: rgba(255,255,255,0.34); color: #fff; }
.ed--dark .ed-rev__chip.is-on { border-color: var(--coral); background: rgba(238,106,71,0.12); color: #fff; }
/* press marquee seam: label area matches the section above (sports),
   the logos bar matches the section below (the stay) */
.ed--dark .ed-marq { background: var(--night-2); }
.ed--dark .ed-marq__bar { background: var(--night); border-top-color: rgba(255,255,255,0.06); }

/* hairlines → light */
.ed--dark .ed-intro__top,
.ed--dark .ed-facts,
.ed--dark .ed-air,
.ed--dark .ed-loc__note,
.ed--dark .ed-stay__amen { border-color: rgba(255,255,255,0.16); }
.ed--dark .ed-air:first-child { border-color: transparent; }

/* intro */
.ed--dark .ed-intro__est { color: rgba(249,245,233,0.6); }
.ed--dark .ed-intro__head { color: #fff; }
.ed--dark .ed-intro__head i { color: var(--teal-pale); }
.ed--dark .ed-fact__num { color: #fff; }
.ed--dark .ed-fact__lbl { color: var(--teal-pale); }

/* sports */
.ed--dark .ed-sport__fig,
.ed--dark .ed-stay__tall,
.ed--dark .ed-stay__mosaic figure,
.ed--dark .ed-gal__tile { background: #0c2429; }
.ed--dark .ed-sport { background: rgba(255,255,255,0.035); border-color: rgba(255,255,255,0.12); }
.ed--dark .ed-sport:hover { box-shadow: 0 22px 60px rgba(0,0,0,0.4); }
.ed--dark .ed-sport__facts { border-color: rgba(255,255,255,0.14); }
.ed--dark .ed-sport__fact .v { color: var(--cream); }
.ed--dark .ed-sport__meta { color: var(--teal-pale); }
.ed--dark .ed-sport__title { color: #fff; }
.ed--dark .ed-sport__lead { color: rgba(249,245,233,0.78); }
.ed--dark .ed-sport__specs li { color: var(--cream); }
.ed--dark .ed-sport__fact .k { color: var(--teal-pale); }

/* the stay */
.ed--dark .ed-stay__lead { color: #fff; }
.ed--dark .ed-stay__amen li { color: var(--cream); }
.ed--dark .ed-stay__amen svg { color: var(--teal-pale); }

/* location → getting here */
.ed--dark .ed-journey::before { background: repeating-linear-gradient(to right, rgba(255,255,255,0.2) 0 8px, transparent 8px 16px); }
.ed--dark .ed-journey__node { background: var(--night-2); color: var(--teal-pale); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.2); }
.ed--dark .ed-journey__ix { background: var(--night-2); }
.ed--dark .ed-journey__title { color: #fff; }
.ed--dark .ed-journey__body { color: rgba(249,245,233,0.76); }
.ed--dark .ed-board { border-top-color: rgba(255,255,255,0.5); }
.ed--dark .ed-board__row { border-bottom-color: rgba(255,255,255,0.16); }
.ed--dark .ed-board__row--head { border-bottom-color: rgba(255,255,255,0.16); }
.ed--dark .ed-board__row--head span { color: var(--teal-pale); }
.ed--dark .ed-board__name { color: #fff; }
.ed--dark .ed-board__code { color: var(--cream); }
.ed--dark .ed-board__when { color: rgba(249,245,233,0.74); }
.ed--dark .ed-board__coord { color: #fff; }
.ed--dark .ed-board__tag { color: rgba(249,245,233,0.78); }

/* getting here — departures board (dark) */
.ed--dark .ed-dep { border-top-color: rgba(255,255,255,0.5); }
.ed--dark .ed-dep__row { border-bottom-color: rgba(255,255,255,0.14); }
.ed--dark .ed-dep__row--head span { color: var(--teal-pale); }
.ed--dark .ed-dep__city { color: #fff; }
.ed--dark .ed-dep__route { color: var(--cream); }
.ed--dark .ed-dep__status { color: rgba(249,245,233,0.85); }
.ed--dark .ed-dep__final { background: transparent; }
.ed--dark .ed-dep__legv { color: #fff; }

/* getting here — two-leg rail (dark) */
.ed--dark .ed-rail__k { color: var(--teal-pale); }
.ed--dark .ed-rail__chip { background: var(--night-2); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16); color: var(--cream); }
.ed--dark .ed-rail__big { color: #fff; }
.ed--dark .ed-rail__stop.is-end .ed-rail__big { color: var(--coral); }
.ed--dark .ed-rail__sub { color: rgba(249,245,233,0.72); }
.ed--dark .ed-rail__legline { background: repeating-linear-gradient(to right, var(--teal-pale) 0 7px, transparent 7px 14px); }
.ed--dark .ed-rail__legicon { background: var(--night); color: var(--teal-pale); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.18); }
.ed--dark .ed-rail__legicon.is-drive { color: var(--coral); }
.ed--dark .ed-rail__legt { color: rgba(249,245,233,0.7); }
.ed--dark .ed-rail__foot { border-top-color: rgba(255,255,255,0.16); }
.ed--dark .ed-rail__foot span { color: rgba(249,245,233,0.82); }

/* getting here — route-map hub (dark) */
.ed--dark .ed-hub { background: var(--night-2); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.1); }
.ed--dark .ed-hub__flight line { stroke: var(--teal-pale); }
.ed--dark .ed-hub__cdot { fill: var(--teal-pale); }
.ed--dark .ed-hub__ccode { fill: #fff; }
.ed--dark .ed-hub__ccity { fill: rgba(249,245,233,0.72); }
.ed--dark .ed-hub__pop { fill: var(--teal); }
.ed--dark .ed-hub__popsub { fill: rgba(249,245,233,0.72); }
.ed--dark .ed-hub__legend { border-top-color: rgba(255,255,255,0.16); }
.ed--dark .ed-hub__legend span { color: rgba(249,245,233,0.78); }

/* gallery */
.ed--dark .ed-gal__cap { color: #fff; }
.ed--dark .ed-gal__cap i { color: var(--teal-pale); }

/* faq (on teal-deep) */
.ed--dark .ed-faq__row { border-color: rgba(255,255,255,0.2); }
.ed--dark .ed-faq__idx { color: var(--teal-pale); }
.ed--dark .ed-faq__qtext { color: #fff; }
.ed--dark .ed-faq__abody p { color: rgba(255,255,255,0.82); }

/* cta */
.ed--dark .ed-cta__frame { background: var(--night-2); border-color: rgba(255,255,255,0.14); }
.ed--dark .ed-cta__head { color: #fff; }
.ed--dark .ed-cta__head i { color: var(--teal-pale); }
.ed--dark .ed-cta__lead { color: rgba(249,245,233,0.82); }
.ed--dark .ed-cta .btn--ghost-dark { color: var(--cream); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.42); }
.ed--dark .ed-cta .btn--ghost-dark:hover { background: rgba(255,255,255,0.14); color: #fff; }

/* travel-tag CTA — always reads on warm sand with a cream card and dark ink,
   independent of the editorial light/dark theme (the card is always cream) */
.ed-cta--tag { background: var(--paper); }
.ed-cta--tag .ed-kicker { color: var(--coral); }
/* the ticket keeps its own compact icon-pill eyebrow instead of the site-wide
   "Ghost" numberless treatment (big italic label, no icon) used elsewhere */
.ed-cta--tag .ed-kicker--icon { align-items: baseline; padding-left: 0; }
.ed-cta--tag .ed-kicker--icon .ed-kicon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; flex: none; margin-right: 12px;
  border-radius: 50%; background: rgba(238,106,71,0.14); color: var(--coral);
}
.ed-cta--tag .ed-kicker--icon .ed-knum,
.ed-cta--tag .ed-kicker--icon .ed-krule { display: none; }
.ed-cta--tag .ed-kicker--icon .ed-klabel {
  font-family: var(--font-body); font-weight: 500; font-style: normal;
  font-size: 12px; letter-spacing: 0.3em; text-transform: uppercase;
  color: var(--coral); line-height: 1; padding-bottom: 0; margin-left: 0;
}
.ed-cta--tag .ed-ticket__head { color: var(--ink); }
.ed-cta--tag .ed-ticket__head i { color: var(--teal-deep); }
.ed-cta--tag .ed-ticket__lead { color: var(--ink-soft); }
.ed-cta--tag .ed-ticket__spec b { color: var(--teal-deep); }
.ed-cta--tag .ed-ticket__spec span { color: var(--ink-soft); }
.ed-cta--tag .ed-ticket .btn--ghost-dark { color: var(--ink); box-shadow: inset 0 0 0 1px rgba(13,28,32,0.42); }
.ed-cta--tag .ed-ticket .btn--ghost-dark:hover { background: var(--ink); color: var(--cream); }


/* ===== Surf-focus homepage feature (rolled out from design handoff) ===== */
/* ---- 2 surf · single-sport feature BOX + infographic ---- */
.ed-surf-box {
  margin-top: clamp(40px, 5vw, 76px);
  background: var(--cream);
  border: 1px solid var(--hairline);
  border-radius: 20px;
  overflow: hidden;
  transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell);
}
.ed-surf-box:hover { transform: translateY(-4px); box-shadow: 0 22px 56px rgba(13,28,32,0.14); }
.ed-surf__spread { display: grid; grid-template-columns: 1.02fr 0.98fr; align-items: stretch; }
.ed-surf__media { position: relative; margin: 0; overflow: hidden; min-height: 360px; background: var(--paper-deep); }
.ed-surf__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 1200ms var(--ease-swell); }
.ed-surf-box:hover .ed-surf__media img { transform: scale(1.04); }
.ed-surf__cap {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 46px 24px 18px;
  font-family: var(--font-display); font-style: italic; font-size: 17px; color: #fff;
  background: linear-gradient(180deg, transparent 0%, rgba(6,29,40,0.72) 100%);
}
.ed-surf__body { display: flex; flex-direction: column; justify-content: center; padding: clamp(28px, 3.2vw, 48px); }
.ed-surf__title {
  margin: 8px 0 0; font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-head); line-height: 0.98; letter-spacing: -0.02em;
}
.ed-surf__lead {
  margin: 16px 0 0; font-family: var(--font-body); font-size: clamp(16.5px, 1.25vw, 18.5px);
  line-height: 1.55; color: var(--ink-soft); max-width: 46ch;
}
.ed-surf__specs { list-style: none; margin: clamp(22px, 2.6vw, 30px) 0 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 12px 22px; }
.ed-surf__specs li { display: flex; align-items: center; gap: 10px; font-family: var(--font-body); font-size: 16px; color: var(--ink); }
.ed-surf__specs svg { color: var(--coral); flex: none; }
.ed-surf__btn { margin-top: clamp(24px, 2.8vw, 32px); align-self: flex-start; }

/* ===== infographic — full-width spec-sheet (vertical stack of rows) =====
   Each row is `label column | visual`, bottom-aligned, all the same height so
   the band reads as an even ledger. Rows are divided by horizontal hairlines
   and collapse to a single stacked column on small screens. */
.ed-surf__stats { border-top: 1px solid var(--hairline); }
.ed-surf__stat {
  display: grid;
  grid-template-columns: minmax(200px, 260px) 1fr;
  align-items: end; /* visuals bottom-align with the big italic heading */
  gap: 20px clamp(28px, 4vw, 64px);
  min-height: 132px;
  padding: clamp(20px, 2.2vw, 30px) clamp(22px, 2.4vw, 40px);
}
.ed-surf__stat + .ed-surf__stat { border-top: 1px solid var(--hairline); }
.ed-surf__stat-head { display: flex; flex-direction: column; gap: 8px; }
.ed-surf__stat-k { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-deep); }
.ed-surf__stat-big { font-family: var(--font-display); font-style: italic; font-weight: 400; font-size: calc(clamp(26px, 2.8vw, 38px) * var(--m-num, 1)); line-height: 1.02; letter-spacing: -0.01em; color: #fff; margin: 0; text-wrap: balance; }
.ed:not(.ed--dark) .ed-surf__stat-big { color: var(--ink); }

/* Rows 1, 2 & 4 share a tall rounded "pill": a teal track carrying its tick
   labels INSIDE it in white (divided by faint hairlines on the segmented
   rows). The label row sits above the animated fill. */
.ed-surf__pill { position: relative; height: 40px; border-radius: 999px; overflow: hidden; background: rgba(15,154,154,0.16); }
.ed--dark .ed-surf__pill { background: rgba(255,255,255,0.10); }
.ed-surf__pill-fill { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; transform: scaleX(0); transform-origin: left; }
.ed-surf__pill-labels { position: relative; z-index: 1; display: grid; height: 100%; align-items: center; }
.ed-surf__pill-label { text-align: center; font-family: var(--font-body); font-weight: 500; font-size: 13px; line-height: 1.15; color: #fff; padding: 0 6px; opacity: 0; }
.ed-surf__pill--scale .ed-surf__pill-labels { grid-template-columns: repeat(5, 1fr); } /* legacy skill scale (row removed) */
.ed-surf__pill--season .ed-surf__pill-labels { grid-template-columns: repeat(12, 1fr); }
.ed-surf__pill--ages .ed-surf__pill-labels { grid-template-columns: repeat(6, 1fr); }
/* faint segment dividers on the categorical rows only (not the age axis) */
.ed-surf__pill--scale .ed-surf__pill-label + .ed-surf__pill-label, /* legacy skill scale (row removed) */
.ed-surf__pill--season .ed-surf__pill-label + .ed-surf__pill-label { box-shadow: inset 1px 0 0 rgba(255,255,255,0.20); }

/* Row 3 · water & air reads — big word + temp, then an equal-width fill bar. */
.ed-surf__reads { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(20px, 3vw, 44px); align-items: end; }
.ed-surf__read { display: flex; flex-direction: column; gap: 12px; }
.ed-surf__read-top { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.ed-surf__read-word { font-family: var(--font-display); font-style: italic; font-weight: 400; font-size: var(--disp-small); line-height: 1; color: var(--ink); }
.ed--dark .ed-surf__read-word { color: #fff; }
.ed-surf__read-temp { font-family: var(--font-body); font-size: 14px; color: var(--ink-soft); white-space: nowrap; }
.ed--dark .ed-surf__read-temp { color: rgba(249,245,233,0.72); }
.ed-surf__read-bar { position: relative; height: 8px; border-radius: 999px; overflow: hidden; background: rgba(15,154,154,0.16); }
.ed--dark .ed-surf__read-bar { background: rgba(255,255,255,0.12); }
.ed-surf__read-bar > span { display: block; height: 100%; width: var(--w); border-radius: 999px; background: var(--teal-400, #3aaeae); transform: scaleX(0); transform-origin: left; }
/* Air reads teal too (a touch deeper than Water) — not the coral accent. */
.ed-surf__read--air .ed-surf__read-bar > span { background: var(--teal-500, #0f9a9a); }

/* Row 4 · ages — the shaded distribution band lives INSIDE the pill; its
   position/width come from inline left/width, its centre-peaking gradient
   encodes the concentration. Axis numbers sit on top. */
/* Full-width continuous gradient (peak set inline from the age band centre). */
.ed-surf__pill--ages .ed-surf__pill-fill { border-radius: 999px; }

/* Row 5 · solo travelers — count-up figure + people pictograph + a note. */
.ed-surf__solo-body { display: flex; align-items: center; gap: clamp(16px, 2.4vw, 30px); flex-wrap: wrap; }
.ed-surf__solo-num { font-family: var(--font-display); font-style: italic; font-weight: 400; font-size: calc(clamp(40px, 5vw, 64px) * var(--m-num, 1)); line-height: 0.9; letter-spacing: -0.02em; color: var(--teal-deep); }
.ed--dark .ed-surf__solo-num { color: var(--teal-pale, #a6dedd); }
.ed-surf__solo-figs { display: inline-flex; gap: 6px; }
.ed-surf__solo-fig { display: inline-flex; color: rgba(20,40,44,0.28); opacity: 0; }
.ed--dark .ed-surf__solo-fig { color: rgba(255,255,255,0.30); }
.ed-surf__solo-fig.is-on { color: var(--teal-500, #0f9a9a); }
.ed--dark .ed-surf__solo-fig.is-on { color: var(--teal-400, #3aaeae); }
.ed-surf__solo-note { flex: 1 1 240px; font-family: var(--font-body); font-size: 14px; line-height: 1.5; color: var(--ink-soft); max-width: 48ch; opacity: 0; }
.ed--dark .ed-surf__solo-note { color: rgba(249,245,233,0.72); }

/* ---- infographic reveal animations (fire when the card scrolls in) ----
   Bolder, water-like: fills roll in with surfGrowX, tick labels cascade
   (season drops down, ages/levels rise up), the solo pictograph surfaces
   one figure at a time and the highlighted figures pulse a teal glow. */
.ed-surf-box.in .ed-surf__pill-fill { animation: surfGrowX 1350ms var(--ease-swell) 220ms backwards; transform: scaleX(1); }
.ed-surf-box.in .ed-surf__pill--season .ed-surf__pill-fill { animation-delay: 300ms; }
.ed-surf-box.in .ed-surf__pill--ages .ed-surf__pill-fill { animation-delay: 260ms; }
.ed-surf-box.in .ed-surf__read-bar > span { animation: surfGrowX 1300ms var(--ease-swell) backwards; transform: scaleX(1); }
.ed-surf-box.in .ed-surf__read--water .ed-surf__read-bar > span { animation-delay: 240ms; }
.ed-surf-box.in .ed-surf__read--air .ed-surf__read-bar > span { animation-delay: 380ms; }
.ed-surf-box.in .ed-surf__pill--scale .ed-surf__pill-label { animation: surfRise 560ms var(--ease-swell) backwards; animation-delay: calc(var(--i) * 90ms + 380ms); opacity: 1; } /* legacy skill scale (row removed) */
.ed-surf-box.in .ed-surf__pill--ages .ed-surf__pill-label { animation: surfRise 560ms var(--ease-swell) backwards; animation-delay: calc(var(--i) * 70ms + 380ms); opacity: 1; }
.ed-surf-box.in .ed-surf__pill--season .ed-surf__pill-label { animation: surfDrop 520ms var(--ease-swell) backwards; animation-delay: calc(var(--i) * 40ms + 400ms); opacity: 1; }
.ed-surf-box.in .ed-surf__solo-fig { animation: surfSurface 540ms var(--ease-swell) backwards; animation-delay: calc(var(--i) * 130ms + 440ms); opacity: 1; }
.ed-surf-box.in .ed-surf__solo-fig.is-on { animation: surfSurface 540ms var(--ease-swell) calc(var(--i) * 130ms + 440ms) backwards, surfGlow 900ms ease calc(var(--i) * 130ms + 720ms) 3; }
.ed-surf-box.in .ed-surf__solo-note { animation: surfRise 620ms var(--ease-swell) 620ms backwards; opacity: 1; }
@keyframes surfGrowX { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes surfRise { from { opacity: 0; transform: translateY(11px); } to { opacity: 1; transform: none; } }
@keyframes surfDrop { from { opacity: 0; transform: translateY(-11px); } to { opacity: 1; transform: none; } }
@keyframes surfSurface { from { opacity: 0; transform: translateY(9px) scale(0.4); } to { opacity: 1; transform: none; } }
@keyframes surfGlow {
  0%, 100% { filter: drop-shadow(0 0 0 rgba(58,174,174,0)); }
  50% { filter: drop-shadow(0 0 8px rgba(58,174,174,0.72)); }
}
@media (prefers-reduced-motion: reduce) {
  .ed-surf__pill-fill,
  .ed-surf__read-bar > span { transform: scaleX(1); }
  .ed-surf__pill-label,
  .ed-surf__solo-fig,
  .ed-surf__solo-note { opacity: 1; transform: none; }
  .ed-surf-box.in .ed-surf__pill-fill,
  .ed-surf-box.in .ed-surf__read-bar > span,
  .ed-surf-box.in .ed-surf__pill-label,
  .ed-surf-box.in .ed-surf__solo-fig,
  .ed-surf-box.in .ed-surf__solo-fig.is-on,
  .ed-surf-box.in .ed-surf__solo-note { animation: none; }
}

@media (max-width: 980px) {
  .ed-surf__spread { grid-template-columns: 1fr; }
  .ed-surf__media { min-height: 0; aspect-ratio: 16/10; }
}
@media (max-width: 700px) {
  /* Rows collapse to a single stacked column; the label sits above its visual. */
  .ed-surf__stat { grid-template-columns: 1fr; align-items: start; min-height: 0; gap: 16px; }
}
@media (max-width: 560px) {
  /* Keep the inset labels legible on a narrow pill. */
  .ed-surf__pill-label { font-size: 10.5px; padding: 0 3px; }
  .ed-surf__pill { height: 38px; }
}
@media (max-width: 520px) {
  .ed-surf__reads { grid-template-columns: 1fr; gap: 18px; }
}
@media (max-width: 560px) {
  .ed-surf__specs { grid-template-columns: 1fr; }
}

/* surf feature — dark theme */
.ed--dark .ed-surf-box { background: rgba(255,255,255,0.035); border-color: rgba(255,255,255,0.12); }
.ed--dark .ed-surf-box:hover { box-shadow: 0 22px 60px rgba(0,0,0,0.4); }
.ed--dark .ed-surf__media { background: #0c2429; }
.ed--dark .ed-surf__title { color: #fff; }
.ed--dark .ed-surf__lead { color: rgba(249,245,233,0.78); }
.ed--dark .ed-surf__specs li { color: var(--cream); }
.ed--dark .ed-surf__stats { border-color: rgba(255,255,255,0.14); }
.ed--dark .ed-surf__stat + .ed-surf__stat { border-color: rgba(255,255,255,0.12); }
.ed--dark .ed-surf__stat-k { color: var(--teal-pale, #a6dedd); }
.ed--dark .ed-surf__stat-big { color: #fff; }

/* ---------------------------------------------------------------
   Wingfoil companion block — quiet secondary offering beneath the
   Surf feature in the #sports section. Deliberately lower-key:
   smaller photo, spec chips, a text link (not a coral button).
--------------------------------------------------------------- */
.ed-wing {
  /* Clear gap below the surf box so the wingfoil block reads as its own beat. */
  margin-top: clamp(56px, 7vw, 100px);
  /* Even 50/50 split — the photo is half the card (see .ed-surf-box). */
  display: grid; grid-template-columns: 1fr 1fr; align-items: stretch;
  background: var(--cream);
  border: 1px solid var(--hairline);
  border-radius: 20px;
  overflow: hidden;
  transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell), border-color 320ms var(--ease-swell);
}
.ed-wing:hover { transform: translateY(-4px); box-shadow: 0 22px 56px rgba(13,28,32,0.14); }
.ed--dark .ed-wing { background: rgba(255,255,255,0.035); border-color: rgba(255,255,255,0.12); }
.ed--dark .ed-wing:hover { box-shadow: 0 22px 56px rgba(0,0,0,0.4); }
.ed-wing__media { position: relative; margin: 0; overflow: hidden; min-height: 200px; background: var(--paper-deep, #0c2429); }
.ed-wing__media img,
.ed-wing__video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 1200ms var(--ease-swell); }
.ed-wing:hover .ed-wing__media img,
.ed-wing:hover .ed-wing__video { transform: scale(1.04); }
.ed-sport__pill--teal::before { background: var(--teal-500, #0f9a9a); box-shadow: 0 0 0 3px rgba(15,154,154,0.28); }
.ed-wing__body { display: flex; flex-direction: column; justify-content: center; padding: clamp(22px, 2.6vw, 36px); }
.ed-wing__eyebrow { font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-600, #0c7e7e); }
.ed--dark .ed-wing__eyebrow { color: var(--teal-pale, #a6dedd); }
.ed-wing__title { margin: 9px 0 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-title); line-height: 1; letter-spacing: -0.02em; color: var(--ink); }
.ed--dark .ed-wing__title { color: #fff; }
.ed-wing__lead { margin: 12px 0 0; font-family: var(--font-body); font-size: clamp(15px, 1.1vw, 16.5px); line-height: 1.55; color: var(--ink-soft); max-width: 52ch; }
.ed--dark .ed-wing__lead { color: rgba(249,245,233,0.78); }
/* Plain two-column checklist — teal check + text, no pill background, no
   hairline separators (matches the surf block's spec list). */
.ed-wing__specs { list-style: none; margin: clamp(16px, 1.8vw, 22px) 0 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 12px 22px; }
.ed-wing__specs li { display: flex; align-items: center; gap: 10px; font-family: var(--font-body); font-size: 15px; line-height: 1.3; color: var(--ink); }
.ed--dark .ed-wing__specs li { color: var(--cream); }
.ed-wing__specs svg { color: var(--teal-600, #0c7e7e); flex: none; }
.ed--dark .ed-wing__specs svg { color: var(--teal-pale, #a6dedd); }
/* CTA is now a proper primary button, matching the surf block's CTA. */
.ed-wing__btn { margin-top: clamp(18px, 2.2vw, 26px); align-self: flex-start; }
@media (max-width: 980px) {
  .ed-wing { grid-template-columns: 1fr; }
  .ed-wing__media { min-height: 0; aspect-ratio: 16/9; }
}
@media (max-width: 520px) {
  .ed-wing__specs { grid-template-columns: 1fr; }
}

/* --- guide-quote.css --- */
/**
 * Guidebook quote — editorial two-column pull quote.
 *
 * A single credibility statement (a recognised publication endorsing the
 * retreat): eyebrow → curly-quoted serif headline → two-column body → a
 * hairline that wipes in on scroll → attribution. Rendered by
 * template-parts/guide-quote.php on both the homepage (after the hero) and the
 * Your-stay page (above the food section), so the component is loaded site-wide
 * and is fully self-contained — it does not depend on pages.css (which the
 * homepage never loads).
 *
 * Values follow the Frommer's design handoff, mapped onto the theme's own
 * tokens (--night / --teal-pale / --font-display / --font-body / --ease-swell)
 * so the section reads at the same width, rhythm and type scale as the rest of
 * the site.
 */

/* Section band — same vertical rhythm + gutter as .pg-sec / .pg-wrap. */
.swell-gq {
	position: relative;
	padding: clamp(64px, 8vw, 128px) 0;
	background: var(--night-2);
	color: #fff;
	overflow: hidden;
}
.swell-gq--night { background: var(--night); }

.swell-gq__wrap {
	position: relative;
	z-index: 1;
	max-width: 1280px;
	margin: 0 auto;
	padding: 0 clamp(20px, 4vw, 56px);
}

/* 1 · Eyebrow — rendered with the site-wide swell_kicker() so it is the exact
   same "Minimal" treatment as every other section (short coral rule + tracked
   uppercase label). The band is always dark, but .ed--dark is only present on
   the slate palette, so pin the label light here for every colour style. */
.swell-gq .ed-kicker--icon .ed-klabel { color: var(--teal-pale); }

/* 2 · Headline — wrapped in teal curly quotes; the <i> accent is teal italic. */
/* Match the site's section headings (.ed-h2): Instrument Serif 400,
   clamp(36px, 5vw, 55px), letter-spacing -0.02em. */
.swell-gq__h {
	margin: 18px 0 0;
	font-family: var(--font-display);
	font-weight: 400;
	font-size: var(--disp-head);
	line-height: 1.05;
	letter-spacing: -0.02em;
	color: #fff;
	text-wrap: balance;
}
.swell-gq__h i {
	font-style: italic;
	color: var(--teal-pale);
}
.swell-gq__h::before {
	content: "\201C";
	color: var(--teal-pale);
	font-style: normal;
	font-size: 1.2em;
	line-height: 0;
	vertical-align: -0.18em;
	margin-right: 0.04em;
}
.swell-gq__h::after {
	content: "\201D";
	color: var(--teal-pale);
	font-style: normal;
	font-size: 1.2em;
	line-height: 0;
	vertical-align: -0.18em;
	margin-left: 0.04em;
}

/* 3 · Body — two columns, one paragraph each. */
.swell-gq__cols {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: clamp(32px, 5vw, 88px);
	margin-top: 20px;
}
/* Match the site's body/lead copy exactly (.ed-lead / .ed-para on dark):
   Jost 400, 18px, line-height 1.5, colour rgba(249,245,233,0.82). */
.swell-gq__cols p {
	margin: 0;
	max-width: none;
	font-family: var(--font-body);
	font-weight: 400;
	font-size: 18px;
	line-height: 1.5;
	color: rgba(249, 245, 233, 0.82);
}

/* 4 · Hairline rule — wipes in from the left on reveal. */
.swell-gq__rule {
	margin-top: clamp(24px, 2.6vw, 34px);
	height: 1px;
	background: rgba(255, 255, 255, 0.16);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform 1100ms var(--ease-swell) 350ms;
}
.reveal.in .swell-gq__rule { transform: scaleX(1); }

/* 5 · Attribution */
.swell-gq__foot {
	margin-top: 18px;
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 24px;
	flex-wrap: wrap;
}
.swell-gq__by {
	display: flex;
	align-items: baseline;
	gap: 18px;
	flex-wrap: wrap;
}
.swell-gq__name {
	font-family: var(--font-display);
	font-style: italic;
	font-size: clamp(20px, 1.8vw, 25px);
	line-height: 1;
	color: rgba(249, 245, 233, 0.92);
}
.swell-gq__meta {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 11px;
	letter-spacing: 0.3em;
	text-transform: uppercase;
	color: var(--teal-pale);
	white-space: nowrap;
}

/* Two columns collapse to one on narrow screens. */
@media (max-width: 760px) {
	.swell-gq__cols { grid-template-columns: 1fr; gap: 16px; }
}

/* Match the site's mobile body-copy bump (.ed-lead / .ed-para → 19px). */
@media (max-width: 600px) {
	.swell-gq__cols p { font-size: 19px; }
}

/* Reduced motion — show the rule at full width, skip the wipe. */
@media (prefers-reduced-motion: reduce) {
	.swell-gq__rule { transition: none; transform: none; }
}

/* --- hero-slider.css --- */
/* ==================================================================
   HeroSlider — alternative tabbed showcase hero (Kudanil-inspired)
   Full-bleed backdrop · big serif title + paragraph · floating
   featured image + thumb strip · numbered progress nav.
   Palette / type all from the Swell system.
================================================================== */

.hslider {
  position: relative;
  height: 360vh;            /* scroll runway — ~1 viewport of scroll per slide */
  background: var(--night, #08161c);
}
.hslider__stick {
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;
  isolation: isolate;
}

/* ---- Stacked backdrops (crossfade) ---- */
.hslider__bgs { position: absolute; inset: 0; z-index: 0; }
.hslider__bg {
  position: absolute; inset: 0;
  background-size: cover;
  background-position: center;
  opacity: 0;
  transform: scale(1.06);
  transition:
    opacity var(--dur-cinematic, 1200ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)),
    transform 7600ms var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.hslider__bg[data-on="1"] {
  opacity: 1;
  transform: scale(1.0);
}

.hslider__veil {
  position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background:
    linear-gradient(180deg, rgba(6,29,40,0.52) 0%, rgba(6,29,40,0.12) 24%, rgba(6,29,40,0.08) 50%, rgba(6,29,40,0.68) 100%),
    linear-gradient(94deg, rgba(6,29,40,0.80) 0%, rgba(6,29,40,0.44) 38%, rgba(6,29,40,0.04) 72%);
}
.hslider__seam {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 1;
  height: 62%;
  pointer-events: none;
  opacity: 0;
  background: linear-gradient(180deg, rgba(8,22,28,0) 0%, rgba(8,22,28,0.55) 48%, var(--night, #08161c) 94%);
}

/* ---- Main content frame ---- */
.hslider__inner {
  position: absolute;
  z-index: 2;
  top: clamp(104px, 13vh, 152px);
  bottom: clamp(132px, 17vh, 188px);
  left: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  right: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.74fr);
  align-items: stretch;
  gap: clamp(28px, 4vw, 64px);
}

/* ---- Left: title + body ---- */
.hslider__text {
  align-self: end;
  max-width: 560px;
  color: #fff;
  animation: hs-text-in 720ms var(--ease-swell, cubic-bezier(.4,0,.1,1)) both;
}
@keyframes hs-text-in {
  from { opacity: 0; transform: translateY(18px); }
  to   { opacity: 1; transform: translateY(0); }
}
.hslider__eyebrow {
  display: inline-flex; align-items: center; gap: 14px;
  font-family: var(--font-body);
  font-size: 12px; letter-spacing: 0.32em; text-transform: uppercase;
  color: rgba(255,255,255,0.82);
  margin-bottom: 22px;
}
.hslider__eyebrow::before {
  content: ""; width: 30px; height: 1px; background: currentColor;
}
.hslider__title {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--disp-hero);
  line-height: 0.9;
  letter-spacing: -0.025em;
  color: #fff;
  text-shadow: 0 2px 28px rgba(6,29,40,0.55), 0 1px 4px rgba(6,29,40,0.45);
}
.hslider__body {
  margin: 26px 0 0;
  font-family: var(--font-body);
  font-weight: 400;
  font-size: clamp(16px, 1.25vw, 19px);
  line-height: 1.55;
  color: rgba(255,255,255,0.94);
  max-width: 46ch;
  text-wrap: pretty;
  text-shadow: 0 1px 2px rgba(6,29,40,0.7), 0 1px 1px rgba(0,0,0,0.35);
}
.hslider__cta {
  display: flex; flex-wrap: wrap; gap: 14px;
  margin-top: 34px;
}

/* ---- Animated scroll cue (replaces the CTAs) ---- */
.hslider__scroll {
  display: inline-flex; align-items: center; gap: 18px;
  margin-top: clamp(34px, 4.5vh, 52px);
  padding: 0; border: 0; background: none; cursor: pointer;
  color: rgba(255,255,255,0.82);
  transition: color var(--dur-base, 260ms) var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.hslider__scroll-rail {
  position: relative; flex: none;
  width: 2px; height: 58px;
  border-radius: 2px;
  background: rgba(255,255,255,0.45);
}
.hslider__scroll-bead {
  position: absolute; left: 50%; top: 0;
  width: 9px; height: 9px; border-radius: 50%;
  background: #fff;
  box-shadow: 0 0 0 5px rgba(255,255,255,0.18), 0 0 12px 2px rgba(255,255,255,0.45);
  transform: translate(-50%, 0);
  animation: hs-bead 2.3s var(--ease-swell, cubic-bezier(.4,0,.1,1)) infinite;
}
@keyframes hs-bead {
  0%   { transform: translate(-50%, -2px); opacity: 0; }
  16%  { opacity: 1; }
  82%  { opacity: 1; }
  100% { transform: translate(-50%, 51px); opacity: 0; }
}
.hslider__scroll-lbl {
  font-family: var(--font-body);
  font-size: 12px; letter-spacing: 0.3em; text-transform: uppercase;
  color: inherit;
}
.hslider__scroll:hover { color: #fff; }
.hslider__scroll:hover .hslider__scroll-rail { background: rgba(255,255,255,0.7); }

/* ---- Right: featured image + thumb strip ---- */
.hslider__media {
  align-self: end;
  margin-bottom: clamp(8px, 4vh, 48px);
  width: 100%;
  max-width: clamp(300px, 30vw, 430px);
  margin-left: auto;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  gap: clamp(12px, 1.2vw, 18px);
  min-width: 0;
}
.hslider__feature {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 10.5;
  border-radius: clamp(16px, 1.6vw, 24px);
  overflow: hidden;
  box-shadow:
    0 30px 70px -28px rgba(6,29,40,0.72),
    0 0 0 1px rgba(255,255,255,0.10) inset;
  animation: hs-feature-in 900ms var(--ease-swell, cubic-bezier(.4,0,.1,1)) both;
}
@keyframes hs-feature-in {
  from { opacity: 0; transform: translateY(26px) scale(0.985); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
.hslider__feature-img {
  position: absolute; inset: 0;
  background-size: cover;
  background-position: center;
  opacity: 0;
  transform: scale(1.05);
  transition:
    opacity 900ms var(--ease-swell, cubic-bezier(.4,0,.1,1)),
    transform 8000ms var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.hslider__feature-img[data-on="1"] {
  opacity: 1;
  transform: scale(1.0);
}
.hslider__feature-tag {
  position: absolute; left: 18px; bottom: 16px; z-index: 2;
  font-family: var(--font-body);
  font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase;
  color: #fff;
  padding: 8px 14px; border-radius: 999px;
  background: rgba(13,53,55,0.55);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  animation: hs-tag-in 380ms var(--ease-swell, cubic-bezier(.4,0,.1,1)) both;
}
@keyframes hs-tag-in {
  from { opacity: 0; transform: translateY(5px); }
  to   { opacity: 1; transform: translateY(0); }
}

.hslider__thumbs {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(10px, 1vw, 14px);
}
.hslider__thumb {
  aspect-ratio: 4 / 3;
  border-radius: 12px;
  border: 0; padding: 0; cursor: pointer;
  background-size: cover;
  background-position: center;
  box-shadow: 0 8px 22px -12px rgba(6,29,40,0.6), 0 0 0 1px rgba(255,255,255,0.12) inset;
  opacity: 0.92;
  transform: translateY(0);
  transition: transform var(--dur-base, 260ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)),
              box-shadow var(--dur-base, 260ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)),
              opacity var(--dur-base, 260ms) var(--ease-swell, cubic-bezier(.4,0,.1,1));
  animation: hs-thumb-in 720ms var(--ease-swell, cubic-bezier(.4,0,.1,1)) both;
}
@keyframes hs-thumb-in {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 0.92; transform: translateY(0); }
}
.hslider__thumb:hover {
  opacity: 1;
  transform: translateY(-4px);
  box-shadow: 0 14px 30px -12px rgba(6,29,40,0.7), 0 0 0 2px var(--coral, #ee6a47) inset;
}
.hslider__thumb[data-on="1"] {
  opacity: 1;
  box-shadow: 0 12px 26px -12px rgba(6,29,40,0.7), 0 0 0 2px var(--coral, #ee6a47) inset;
}
.hslider__thumb:active { transform: translateY(-4px) scale(0.98); }

/* ---- Bottom: numbered progress nav ---- */
.hslider__nav {
  position: absolute;
  z-index: 2;
  bottom: clamp(36px, 5.2vh, 64px);
  left: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  right: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(20px, 3vw, 56px);
}
.hslider__tab {
  position: relative;
  display: block;
  text-align: left;
  background: none; border: 0; padding: 0; cursor: pointer;
  color: rgba(255,255,255,0.55);
  transition: color var(--dur-base, 260ms) var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.hslider__tab[data-on="1"] { color: #fff; }
.hslider__tab:hover { color: rgba(255,255,255,0.9); }
.hslider__tab-num {
  display: block;
  font-family: var(--font-body);
  font-size: 13px; font-weight: 500; letter-spacing: 0.16em;
  color: inherit;
  margin-bottom: 16px;
}
.hslider__tab-track {
  display: block;
  position: relative;
  height: 4px;
  border-radius: 3px;
  background: rgba(255,255,255,0.40);
  overflow: hidden;
}
.hslider__tab-fill {
  position: absolute; inset: 0;
  transform-origin: left center;
  transform: scaleX(0);
  background: var(--coral, #ee6a47);
  border-radius: 3px;
  box-shadow: 0 0 10px 0 rgba(238,106,71,0.85), 0 0 0 1px rgba(238,106,71,0.5);
}
/* A travelling bead rides the leading edge of the fill so the scroll
   position reads at a glance even on the active tab. */
.hslider__tab[data-on="1"] .hslider__tab-track {
  background: rgba(255,255,255,0.50);
}
.hslider__tab-lbl {
  display: block;
  margin-top: 16px;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--disp-small);
  line-height: 1;
  letter-spacing: -0.01em;
  color: inherit;
}

/* ---- Scroll cue ---- */
.hslider__scrollcue {
  position: absolute; z-index: 2;
  right: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  top: clamp(104px, 13vh, 152px);
  display: none;
}

/* ==================================================================
   Responsive
================================================================== */
@media (max-width: 1080px) {
  .hslider__inner {
    grid-template-columns: 1fr;
    align-items: end;
    gap: 24px;
    top: clamp(96px, 12vh, 128px);
  }
  .hslider__media { align-self: start; }
  .hslider__feature { aspect-ratio: 16 / 9; }
}

@media (max-width: 760px) {
  .hslider__stick { height: 100svh; }
  .hslider__inner {
    top: clamp(82px, 12vh, 116px);
    bottom: clamp(116px, 16vh, 150px);
    grid-template-columns: 1fr;
    align-content: end;
    align-items: end;
    gap: 18px;
  }
  .hslider__body { font-size: 19px; max-width: 38ch; }
  .hslider__media { display: none; }
  .hslider__thumbs { display: none; }
  .hslider__cta .btn { flex: 1 1 auto; justify-content: center; }
  .hslider__scrollcue { display: none; }
  .hslider__tab-lbl { font-size: 17px; }
  .hslider__tab-num { margin-bottom: 11px; }
  .hslider__tab-lbl { margin-top: 11px; }
}

@media (prefers-reduced-motion: reduce) {
  .hslider__bg,
  .hslider__feature-img { transition: opacity 300ms linear; transform: none !important; }
  .hslider__text,
  .hslider__feature,
  .hslider__thumb { animation: none; opacity: 1; }
  .hslider__scroll-bead { animation: none; opacity: 1; top: 50%; }
}

/* ==================================================================
   HeroVideo — full-bleed looping video hero (3rd option)
================================================================== */
.hvideo {
  position: relative;
  min-height: 100vh;
  background: var(--night, #08161c);
  overflow: hidden;
  isolation: isolate;
}
.hvideo__media {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%;
  object-fit: cover;
}
.hvideo__veil {
  position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background:
    linear-gradient(180deg, rgba(6,29,40,0.48) 0%, rgba(6,29,40,0.12) 26%, rgba(6,29,40,0.08) 50%, rgba(6,29,40,0.70) 100%),
    linear-gradient(94deg, rgba(6,29,40,0.74) 0%, rgba(6,29,40,0.38) 40%, rgba(6,29,40,0.04) 72%);
}
.hvideo__seam {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 1;
  height: 42%; pointer-events: none;
  background: linear-gradient(180deg, rgba(8,22,28,0) 0%, rgba(8,22,28,0.5) 52%, var(--night, #08161c) 96%);
}
.hvideo__inner {
  position: absolute; z-index: 2;
  bottom: clamp(72px, 12vh, 132px);
  left: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  right: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  max-width: 640px;
  color: #fff;
  animation: hs-text-in 760ms var(--ease-swell, cubic-bezier(.4,0,.1,1)) both;
}
.hvideo__inner .hslider__eyebrow { margin-bottom: 22px; }
.hvideo__title {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 400;
  font-size: var(--disp-hero);
  line-height: 0.9;
  letter-spacing: -0.025em;
  color: #fff;
  text-shadow: 0 2px 30px rgba(6,29,40,0.55), 0 1px 4px rgba(6,29,40,0.45);
}
.hvideo__title i { font-style: italic; }
.hvideo__body {
  margin: 26px 0 0;
  font-family: var(--font-body);
  font-weight: 400;
  font-size: clamp(16px, 1.25vw, 19px);
  line-height: 1.55;
  color: rgba(255,255,255,0.94);
  max-width: 46ch;
  text-wrap: pretty;
  text-shadow: 0 1px 2px rgba(6,29,40,0.7), 0 1px 1px rgba(0,0,0,0.35);
}
.hvideo__mute {
  position: absolute; z-index: 3;
  right: max(clamp(20px, 4vw, 56px), calc((100% - 1280px) / 2 + clamp(20px, 4vw, 56px)));
  bottom: clamp(72px, 12vh, 132px);
  width: 50px; height: 50px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid rgba(255,255,255,0.28);
  background: rgba(13,53,55,0.4);
  -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  color: #fff; cursor: pointer;
  transition: background var(--dur-base, 260ms) var(--ease-swell, cubic-bezier(.4,0,.1,1)),
              transform var(--dur-base, 260ms) var(--ease-swell, cubic-bezier(.4,0,.1,1));
}
.hvideo__mute:hover { background: rgba(13,53,55,0.62); }
.hvideo__mute:active { transform: scale(0.94); }

@media (max-width: 760px) {
  .hvideo { min-height: 100svh; }
  .hvideo__inner { max-width: none; bottom: clamp(96px, 16vh, 150px); }
  .hvideo__body { font-size: 19px; max-width: 36ch; }
  .hvideo__mute { bottom: auto; top: clamp(80px, 12vh, 110px); }
}

/* --- pages.css --- */
/* =========================================================
   SWELL SURF CAMP — Interior pages (prefix: pg-)
   Dark-editorial vocabulary, reused header/footer.
   Authored to sit inside <div class="ed ed--dark"> so the
   editorial dark palette + helpers carry across.
   ========================================================= */

.pg { background: var(--night); color: var(--cream); }
.pg-wrap { max-width: 1280px; margin: 0 auto; padding: 0 clamp(20px, 4vw, 56px); }

/* ============================================================
   404 — WIPED OUT
   ============================================================ */
.pg-404 { background: var(--night); display: flex; flex-direction: column; }

.pg-404__scene {
  position: relative; min-height: 100svh;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden; isolation: isolate;
}

/* Ken Burns background */
.pg-404__bg {
  position: absolute; inset: 0;
  background-size: cover; background-position: center 35%;
  transform: scale(1.06);
  animation: pg-hero-drift 20s var(--ease-swell) forwards;
}
.pg-404__veil {
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(
    170deg,
    rgba(6,29,40,0.78) 0%,
    rgba(6,29,40,0.44) 45%,
    rgba(6,29,40,0.90) 100%
  );
}

/* Ghost 404 watermark */
.pg-404__ghost {
  position: absolute; bottom: -0.06em; left: 50%;
  transform: translateX(-50%);
  z-index: 2; pointer-events: none; user-select: none;
  font-family: var(--font-display); font-style: italic;
  font-size: clamp(160px, 26vw, 380px);
  line-height: 1; letter-spacing: -0.04em; white-space: nowrap;
  color: transparent;
  -webkit-text-stroke: 1.5px rgba(110,199,198,0.14);
  text-shadow: 0 0 120px rgba(15,154,154,0.12);
}

/* Content */
.pg-404__inner {
  position: relative; z-index: 3;
  text-align: center;
  padding: clamp(130px, 18vh, 200px) var(--gutter) clamp(140px, 20vh, 220px);
  max-width: 640px; margin: 0 auto;
}

.pg-404__eyebrow {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.34em; text-transform: uppercase;
  color: var(--teal-pale);
  margin-bottom: 26px;
}

.pg-404__title {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-hero);
  line-height: 0.94; letter-spacing: -0.025em;
  color: #fff; margin: 0 0 30px;
}
.pg-404__title i { color: var(--coral-400); font-style: italic; }

.pg-404__body {
  font-family: var(--font-body); font-weight: 300;
  font-size: clamp(16px, 1.7vw, 20px); line-height: 1.62;
  color: rgba(249,245,233,0.72);
  margin: 0 0 48px;
}

.pg-404__actions {
  display: flex; gap: 14px; justify-content: center;
  flex-wrap: wrap; margin-bottom: 52px;
}

.pg-404__links {
  display: flex; justify-content: center; flex-wrap: wrap;
}
.pg-404__links a {
  padding: 7px 16px;
  font-family: var(--font-body); font-size: 12px;
  font-weight: 500; letter-spacing: 0.18em; text-transform: uppercase;
  color: rgba(255,255,255,0.42); text-decoration: none;
  border-right: 1px solid rgba(255,255,255,0.12);
  transition: color 200ms var(--ease-swell);
}
.pg-404__links a:last-child { border-right: 0; }
.pg-404__links a:hover { color: rgba(255,255,255,0.9); }

/* Animated wave strip */
.pg-404__wave {
  position: absolute; bottom: 0; left: 0; right: 0; z-index: 4;
  overflow: hidden; line-height: 0;
}
.pg-404__wave-svg {
  display: block; width: 200%; height: clamp(48px, 6vw, 80px);
  animation: swell-404-wave 7s linear infinite;
}
@keyframes swell-404-wave {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@media (max-width: 600px) {
  .pg-404__links a { padding: 7px 10px; font-size: 12px; }
  .pg-404__actions { gap: 10px; }
}

/* ---------------------------------------------------------
   SUBPAGE HERO — full-bleed photo, nav floats over it
--------------------------------------------------------- */
.pg-hero {
  position: relative;
  min-height: 99vh;
  display: flex;
  overflow: hidden;
  background: var(--night);
  isolation: isolate;
}
/* Lock every interior hero to the SAME height on desktop. Without this the
   hero is only `min-height`, so wordier pages (Surfing, Getting here) grow
   taller than Retreat — the inconsistent height you noticed. On small screens
   we keep the `min-height` floor so long, multi-line titles can't be clipped. */
@media (min-width: 900px) {
  .pg-hero { height: 99vh; }
}
.pg-hero__bg {
  position: absolute; inset: 0;
  background-size: cover; background-position: center;
  transform: scale(1.05);
  animation: pg-hero-drift 16s var(--ease-swell) forwards;
}
@keyframes pg-hero-drift { to { transform: scale(1); } }
/* Seamless hero → page bottom: fade the photo into the page background
   (--night) so the hero dissolves into the section below instead of ending
   on a hard edge. Sits at z-index 1 (under the title at z-index 2). */
.pg-hero::before {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px;
  height: 34%; z-index: 1; pointer-events: none;
  background: linear-gradient(180deg, rgba(10,29,34,0) 0%, rgba(10,29,34,0.6) 55%, var(--night) 100%);
}
.pg-hero__veil {
  position: absolute; inset: 0; z-index: 1;
  background:
    linear-gradient(180deg, rgba(10,29,34,0.55) 0%, rgba(10,29,34,0) 26%, rgba(10,29,34,0) 50%, rgba(10,29,34,0.86) 100%),
    linear-gradient(90deg, rgba(10,29,34,0.55) 0%, rgba(10,29,34,0) 60%);
}
.pg-hero__inner {
  position: relative; z-index: 2;
  align-self: flex-end;
  width: 100%;
  max-width: 1280px; margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 56px) clamp(88px, 11vw, 164px);
  color: #fff;
}
.pg-hero__eyebrow {
  display: inline-flex; align-items: center; gap: 14px;
  font-family: var(--font-body); font-weight: 500;
  font-size: 12px; letter-spacing: 0.32em; text-transform: uppercase;
  color: rgba(255,255,255,0.82);
}
.pg-hero__eyebrow::before { content: ""; width: 28px; height: 1px; background: currentColor; }
.pg-hero__title {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-hero); line-height: 0.94; letter-spacing: -0.02em;
  margin: 26px 0 0; max-width: 16ch; color: #fff; text-wrap: balance;
}
.pg-hero__title i { font-style: italic; color: var(--teal-pale); }
.pg-hero__sub {
  margin-top: 26px; max-width: 52ch;
  font-family: var(--font-body); font-weight: 400;
  font-size: clamp(17px, 1.5vw, 20px); line-height: 1.5;
  color: rgba(249,245,233,0.88);
}
.pg-hero__rail {
  position: absolute; z-index: 2;
  right: calc(max(0px, (100vw - 1280px) / 2) + clamp(20px, 4vw, 56px));
  bottom: clamp(48px, 7vw, 96px);
  display: flex; flex-direction: column; align-items: flex-end; gap: 6px;
  text-align: right;
}
.pg-hero__rail .place { font-family: var(--font-display); font-style: italic; font-size: 22px; color: #fff; }
.pg-hero__rail .meta { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase; color: rgba(255,255,255,0.66); }
@media (max-width: 860px) { .pg-hero__rail { display: none; } }

/* Daily Cabarete conditions readout (replaces the lat/long rail) */
.sw-wx { display: flex; flex-direction: column; align-items: flex-end; gap: 7px; }
.sw-wx__eyebrow {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.24em;
  text-transform: uppercase; color: rgba(255,255,255,0.5); margin-bottom: 1px;
}
.sw-wx__row { display: grid; grid-template-columns: 72px 62px 62px; column-gap: 12px; align-items: baseline; }
.sw-wx__lbl {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em;
  text-transform: uppercase; color: rgba(255,255,255,0.62);
  display: inline-flex; align-items: center; gap: 5px; justify-self: start;
}
.sw-wx__lbl svg { opacity: 0.82; }
.sw-wx__c, .sw-wx__f {
  font-family: var(--font-body); font-style: normal; font-weight: 400; font-size: 15px; line-height: 1;
  letter-spacing: 0.04em; color: #fff; justify-self: end; text-align: right; white-space: nowrap;
}
.sw-wx__deg { font-style: normal; font-size: 0.7em; letter-spacing: 0.04em; margin-left: 1px; vertical-align: 0.08em; opacity: 0.78; }
.sw-wx__loc {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.24em;
  text-transform: uppercase; color: rgba(255,255,255,0.6); margin-top: 4px;
}

/* breadcrumb above the eyebrow */
.pg-crumb {
  display: inline-flex; align-items: center; gap: 9px; margin-bottom: 20px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
  color: rgba(255,255,255,0.6);
}
.pg-crumb a { color: rgba(255,255,255,0.6); transition: color 220ms var(--ease-swell); }
.pg-crumb a:hover { color: #fff; }
.pg-crumb svg { width: 13px; height: 13px; opacity: 0.6; }
.pg-crumb b { color: #fff; font-weight: 500; }

/* ---------------------------------------------------------
   HERO HEADER — switchable treatments (via Tweaks)
--------------------------------------------------------- */
/* split inner fills the hero height; top row clears the fixed nav */
.pg-hero__inner--split {
  align-self: stretch;
  display: flex; flex-direction: column; justify-content: space-between;
  padding-top: clamp(116px, 15vh, 168px);
}
.pg-hero__foot { max-width: 900px; }

/* A · Clean trail — copy anchored to a FIXED distance from the top.
   Previously this was `align-self: flex-end` (copy pinned to the bottom), so
   the eyebrow/title started at a different height on every page depending on
   how tall the title was — Retreat sat low, Surfing/Getting-here climbed up.
   Top-anchoring with a shared padding-top makes the eyebrow start the same
   distance down the viewport on every page, tuned to match the Retreat page. */
.pg-hero__inner--trail {
  align-self: flex-start;
  padding-top: clamp(140px, 34vh, 320px);
  padding-bottom: clamp(40px, 6vw, 96px);
}
.pg-crumb--pill {
  display: inline-flex; align-items: center; align-self: flex-start;
  margin: 28px 0 0; gap: 11px; white-space: nowrap;
  padding: 9px 17px; border-radius: 999px;
  background: rgba(8,28,33,0.42);
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16);
}
.pg-crumb--pill .cur { color: #fff; font-weight: 500; }

/* B · Editorial cover — back-link + index, italic standfirst */
.pg-cover-top { width: 100%; }
.pg-cover-row { display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.pg-cover-back {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-body); font-size: 12px; font-weight: 500;
  letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255,255,255,0.82);
  transition: color 220ms var(--ease-swell);
}
.pg-cover-back:hover { color: #fff; }
.pg-cover-back svg { width: 16px; height: 16px; }
.pg-cover-back .seg { color: rgba(255,255,255,0.5); }
.pg-cover-index {
  display: inline-flex; align-items: baseline; gap: 10px; flex-shrink: 0; white-space: nowrap;
  font-family: var(--font-display); font-style: italic; font-size: 22px; color: rgba(255,255,255,0.78);
}
.pg-cover-index small {
  font-family: var(--font-body); font-style: normal; font-size: 12px; font-weight: 500;
  letter-spacing: 0.24em; text-transform: uppercase; color: var(--teal-pale);
}
.pg-cover-rule { height: 1px; background: rgba(255,255,255,0.22); margin-top: 18px; }
.pg-hero--cover .pg-hero__title { font-size: var(--disp-hero); max-width: 15ch; }
.pg-cover-stand {
  margin: 22px 0 0; max-width: 44ch;
  font-family: var(--font-display); font-style: italic;
  font-size: var(--disp-small); line-height: 1.32; color: rgba(249,245,233,0.92);
}
.pg-cover-stand b {
  display: block; margin-bottom: 12px;
  font-family: var(--font-body); font-style: normal; font-weight: 500; font-size: 12px;
  letter-spacing: 0.24em; text-transform: uppercase; color: var(--teal-pale);
}

/* C · Caption panel — glass card, inline breadcrumb tabs */
.pg-hero__inner--panel { align-self: flex-end; }
.pg-hero__card {
  max-width: 620px; padding: clamp(28px, 2.6vw, 40px);
  background: rgba(13,53,55,0.55);
  -webkit-backdrop-filter: blur(14px) saturate(130%); backdrop-filter: blur(14px) saturate(130%);
  border-radius: 20px;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16), 0 30px 70px rgba(0,0,0,0.30);
}
.pg-tabs {
  display: flex; flex-wrap: nowrap; align-items: center; white-space: nowrap;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase;
  color: rgba(255,255,255,0.62);
}
.pg-tabs a { color: rgba(255,255,255,0.62); transition: color 220ms var(--ease-swell); }
.pg-tabs a:hover { color: #fff; }
.pg-tabs .div { width: 1px; height: 11px; background: rgba(255,255,255,0.3); margin: 0 10px; }
.pg-tabs .cur { color: #fff; }
.pg-hero__card .pg-hero__eyebrow { margin-top: 22px; }
.pg-eyebrow--dot::before {
  width: 7px; height: 7px; border-radius: 50%; background: var(--coral);
  box-shadow: 0 0 0 4px rgba(238,106,71,0.32);
}
.pg-hero__card .pg-hero__title { font-size: var(--disp-mega); margin-top: 16px; }
.pg-hero__card .pg-hero__sub { margin-top: 18px; }
@media (max-width: 600px) { .pg-hero__card { max-width: none; } }

/* tiny helper note inside the Tweaks panel */
.twk-note { margin: 4px 0 0; font-size: 12px; line-height: 1.45; color: rgba(41,38,27,0.55); }

/* ---------------------------------------------------------
   GENERIC SECTION RHYTHM
--------------------------------------------------------- */
.pg-sec { padding: clamp(64px, 8vw, 128px) 0; position: relative; }
.pg-sec > .pg-wrap, .pg-sec > .ed-wrap { position: relative; z-index: 1; }
/* Default page template — editable light content surface (ACF "Content background").
   Flips the main content section from the dark ocean base to sandy cream + dark ink,
   leaving the hero, CTA and footer on their own (dark) surfaces. */
.pg-sec--light { background: var(--cream); }
.pg-sec--light .swell-prose { color: var(--ink-soft); }
.pg-sec--light .swell-prose h2,
.pg-sec--light .swell-prose h3,
.pg-sec--light .swell-prose h4 { color: var(--ink); }
.pg-sec--light .swell-prose a { color: var(--coral); }
.pg-sec--light .swell-prose blockquote { color: var(--ink); border-left-color: var(--coral); }
.pg-sec--light .swell-prose figcaption { color: var(--ink-soft); }
/* WPForms labels/descriptions sit in the content too — keep them readable on cream. */
.pg-sec--light .wpforms-field-label,
.pg-sec--light .wpforms-field-label-inline,
.pg-sec--light .wpforms-form .wpforms-field-sublabel { color: var(--ink); }
.pg-sec--light .wpforms-field-description { color: var(--ink-soft); }
/* section backdrop decoration — switched via [data-decor] (Tweaks) */
.pg-sec--n1::before, .pg-sec--teal::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, transparent 40%, #000 100%);
  mask-image: linear-gradient(90deg, transparent 0%, transparent 40%, #000 100%);
}

/* 0 · Swell lines (original) */
[data-decor="lines"] .pg-sec--n1::before, [data-decor="lines"] .pg-sec--teal::before {
  background: url("https://swellsurfcamp.com/wp-content/themes/swellactive/assets/css/assets/brand/swell-lines.svg") right center / cover no-repeat; opacity: 0.17;
}
[data-decor="lines"] .pg-sec--teal::before { opacity: 0.22; }

/* 1 · Waves — slowly drifting swell lines */
[data-decor="waves"] .pg-sec--n1::before, [data-decor="waves"] .pg-sec--teal::before {
  background: url("https://swellsurfcamp.com/wp-content/themes/swellactive/assets/css/assets/brand/decor-waves.svg") left center / 340px 100% repeat-x; opacity: 0.32;
  animation: pgWaveDrift 26s linear infinite;
}
[data-decor="waves"] .pg-sec--teal::before { opacity: 0.42; }
@keyframes pgWaveDrift { to { background-position-x: -340px; } }

/* 2 · Palms — real photo, static, only on tagged blocks (PageShell limits to ≤2, alternating) */
[data-decor="palms"] .pg-sec--n1::before, [data-decor="palms"] .pg-sec--teal::before {
  background: none;
}
[data-decor="palms"] .pg-sec--n1.is-palm::before, [data-decor="palms"] .pg-sec--teal.is-palm::before {
  background: url("https://swellsurfcamp.com/wp-content/themes/swellactive/assets/css/assets/mood/palms-sky.jpg") right top / 132% auto no-repeat; opacity: 0.16;
}
[data-decor="palms"] .pg-sec--teal.is-palm::before { opacity: 0.11; }

/* 3 · Caustics — sun-on-water shimmer */
[data-decor="caustics"] .pg-sec--n1::before, [data-decor="caustics"] .pg-sec--teal::before {
  background:
    radial-gradient(58% 42% at 72% 28%, rgba(127, 214, 208, 0.5), transparent 62%),
    radial-gradient(50% 50% at 88% 70%, rgba(127, 214, 208, 0.4), transparent 60%),
    radial-gradient(42% 32% at 60% 82%, rgba(238, 106, 71, 0.26), transparent 60%);
  background-size: 200% 200%, 180% 180%, 220% 220%; opacity: 0.5;
  animation: pgCaustics 30s ease-in-out infinite alternate;
}
[data-decor="caustics"] .pg-sec--teal::before { opacity: 0.62; }
@keyframes pgCaustics {
  from { background-position: 0% 0%, 100% 0%, 0% 100%; }
  to   { background-position: 100% 100%, 0% 100%, 100% 0%; }
}

/* 4 · Contours — ocean-depth rings */
[data-decor="contours"] .pg-sec--n1::before, [data-decor="contours"] .pg-sec--teal::before {
  background: url("https://swellsurfcamp.com/wp-content/themes/swellactive/assets/css/assets/brand/decor-contours.svg") right center / auto 128% no-repeat; opacity: 0.22;
}
[data-decor="contours"] .pg-sec--teal::before { opacity: 0.27; }

@media (prefers-reduced-motion: reduce) {
  .pg-sec--n1::before, .pg-sec--teal::before { animation: none !important; }
}
/* a fainter full-bleed wash on the hero so it ties back to the marks */
.pg-hero::after {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: url("https://swellsurfcamp.com/wp-content/themes/swellactive/assets/css/assets/brand/swell-lines.svg") center / cover no-repeat;
  opacity: 0.06;
  -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 55%);
  mask-image: linear-gradient(180deg, #000 0%, transparent 55%);
}
.pg-sec--tight { padding: clamp(48px, 6vw, 88px) 0; }

/* generic single-column prose (About / simple template pages) — full content width */
.pg-prose { max-width: none; }
.pg-prose .ed-lead { margin-top: 26px; }
.pg-prose .ed-para { margin-top: 20px; }
.pg-prose__sub {
  margin: clamp(36px, 4vw, 52px) 0 0; font-family: var(--font-display); font-style: italic;
  font-weight: 400; font-size: var(--disp-small); line-height: 1.15; color: #fff;
}
.pg-sec--n1 { background: var(--night); }
.pg-sec--n2 { background: var(--night-2); }
.pg-sec--teal { background: var(--teal-deep); }

/* intro / lede split — headline left, supporting column right */
.pg-lede {
  display: grid; grid-template-columns: 1.2fr 1fr; gap: clamp(36px, 6vw, 92px);
  align-items: start;
}
.pg-lede__h {
  font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-head); line-height: 1.04; letter-spacing: -0.02em;
  margin: 0; color: #fff; text-wrap: balance;
}
.pg-lede__h i { font-style: italic; color: var(--teal-pale); }
.pg-lede__body { display: flex; flex-direction: column; gap: 18px; padding-top: 6px; }
@media (max-width: 900px) { .pg-lede { grid-template-columns: 1fr; gap: 28px; } }

/* Optional photo to the left of the lede text (set per page in ACF). */
.pg-lede--media { grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr); align-items: center; }
.pg-lede__media { margin: 0; overflow: hidden; border-radius: 14px; }
.pg-lede__media img { display: block; width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4 / 5; }
.pg-lede__text { display: flex; flex-direction: column; gap: clamp(18px, 2vw, 28px); }
@media (max-width: 900px) { .pg-lede--media { grid-template-columns: 1fr; } .pg-lede__media img { aspect-ratio: 16 / 10; } }

/* stat row */
.pg-facts {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
  margin-top: clamp(40px, 5vw, 72px); padding-top: 32px;
  border-top: 1px solid rgba(255,255,255,0.16);
}
.pg-fact__num { font-family: var(--font-display); font-size: calc(clamp(38px, 4.2vw, 58px) * var(--m-num, 1)); line-height: 0.9; color: #fff; }
.pg-fact__num i { font-style: italic; font-size: 0.62em; color: var(--teal-pale); }
.pg-fact__lbl { margin-top: 12px; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-pale); }
@media (max-width: 760px) { .pg-facts { grid-template-columns: 1fr; gap: 22px; } }

/* =====================================================================
   INTRO SECTION CONCEPTS — switched via [data-lede] (Tweaks)
   Box-free treatments of the shared .pg-lede + .pg-facts block.
   Scoped to .pg-sec--n1 so only the page intro is affected.
   ===================================================================== */

/* ---- 1 · MARQUEE — oversized full-width headline, inline meta line ---- */
[data-lede="marquee"] .pg-sec--n1 .pg-lede { display: block; }
[data-lede="marquee"] .pg-sec--n1 .pg-lede__h {
  font-size: var(--disp-head); line-height: 1.08; max-width: none;
  font-style: italic; position: relative; text-wrap: balance;
}
/* Curly quotes are part of the line — inline, turquoise, hugging the text */
[data-lede="marquee"] .pg-sec--n1 .pg-lede__h::before {
  content: "\201C"; color: var(--teal-pale); font-style: normal;
  font-size: 1.2em; line-height: 0; vertical-align: -0.18em; margin-right: 0.04em;
}
[data-lede="marquee"] .pg-sec--n1 .pg-lede__h::after {
  content: "\201D"; color: var(--teal-pale); font-style: normal;
  font-size: 1.2em; line-height: 0; vertical-align: -0.18em; margin-left: 0.04em;
}
[data-lede="marquee"] .pg-sec--n1 .pg-lede__h i { color: var(--teal-pale); }
[data-lede="marquee"] .pg-sec--n1 .pg-lede__body {
  display: grid; grid-template-columns: 1fr 1fr; gap: clamp(32px, 5vw, 96px);
  margin-top: clamp(28px, 3vw, 46px); padding-top: 0; max-width: none;
}
/* Marquee drops the fact strip entirely — headline + copy only. */
[data-lede="marquee"] .pg-sec--n1 .pg-facts { display: none; }
@media (max-width: 760px) {
  [data-lede="marquee"] .pg-sec--n1 .pg-lede__body { grid-template-columns: 1fr; }
}

/* ---- 2 · LEDGER — headline left, facts as a hairline-ruled list ---- */
[data-lede="ledger"] .pg-sec--n1 .pg-lede { grid-template-columns: 1.1fr 1fr; }
[data-lede="ledger"] .pg-sec--n1 .pg-facts {
  display: flex; flex-direction: column; gap: 0;
  border-top: none; padding-top: 0; margin-top: clamp(40px, 5vw, 68px);
  max-width: 820px;
}
[data-lede="ledger"] .pg-sec--n1 .pg-facts > div {
  display: flex; align-items: baseline; justify-content: space-between; gap: 28px;
  padding: clamp(18px, 2vw, 28px) 0;
  border-top: 1px solid rgba(255,255,255,0.16);
}
[data-lede="ledger"] .pg-sec--n1 .pg-facts > div:last-child { border-bottom: 1px solid rgba(255,255,255,0.16); }
[data-lede="ledger"] .pg-sec--n1 .pg-fact__num { flex: none; font-size: calc(clamp(34px, 4vw, 58px) * var(--m-num, 1)); }
[data-lede="ledger"] .pg-sec--n1 .pg-fact__lbl {
  margin-top: 0; text-align: right; color: rgba(255,255,255,0.64);
}

/* ---- 3 · TIDE — brand teal horizon band, big baseline figures ---- */
[data-lede="tide"] .pg-sec--n1 {
  background: linear-gradient(180deg, var(--teal-deep) 0%, #0a4247 46%, var(--night) 100%);
}
[data-lede="tide"] .pg-sec--n1::after {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: url("https://swellsurfcamp.com/wp-content/themes/swellactive/assets/css/assets/brand/decor-waves.svg") left center / 380px 100% repeat-x;
  opacity: 0.16; animation: pgWaveDrift 30s linear infinite;
}
[data-lede="tide"] .pg-sec--n1 .pg-lede__body .ed-lead,
[data-lede="tide"] .pg-sec--n1 .pg-lede__body .ed-para { color: rgba(249,245,233,0.94); }
[data-lede="tide"] .pg-sec--n1 .pg-facts {
  border-top: 1px solid rgba(255,255,255,0.26);
  padding-top: clamp(28px, 3vw, 44px); margin-top: clamp(44px, 5vw, 76px);
  align-items: end;
}
[data-lede="tide"] .pg-sec--n1 .pg-fact__num { font-size: calc(clamp(48px, 6vw, 92px) * var(--m-num, 1)); line-height: 0.86; }
[data-lede="tide"] .pg-sec--n1 .pg-fact__num i { color: var(--coral); }
[data-lede="tide"] .pg-sec--n1 .pg-fact__lbl { color: var(--teal-pale); margin-top: 14px; }
@media (prefers-reduced-motion: reduce) {
  [data-lede="tide"] .pg-sec--n1::after { animation: none; }
}

/* section head (kicker + h2 + lead) */
.pg-head { max-width: 880px; }
.pg-head .ed-h2 { color: #fff; }
.pg-head__lead { margin-top: 22px; max-width: 60ch; }

/* Packages: heading on the left, season toggle on the right (stacks on mobile). */
.pg-pkghead { display: flex; align-items: flex-end; justify-content: space-between; gap: clamp(20px, 4vw, 56px); flex-wrap: wrap; }
.pg-pkghead .pg-head { margin: 0; }
.pg-pkghead .pg-season { margin-top: 0; align-items: flex-end; }
.pg-pkghead .pg-season__note { text-align: right; }
@media (max-width: 760px) {
  .pg-pkghead { align-items: flex-start; }
  .pg-pkghead .pg-season { align-items: flex-start; }
  .pg-pkghead .pg-season__note { text-align: left; }
}

/* ---------------------------------------------------------
   TWO-UP FEATURE — image + text, alternating
--------------------------------------------------------- */
.pg-feature {
  display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(36px, 6vw, 92px);
  align-items: center;
}
.pg-feature--flip { grid-template-columns: 1fr 1.05fr; }
.pg-feature--flip .pg-feature__media { order: 2; }
.pg-feature__media {
  position: relative; overflow: hidden; border-radius: 16px;
  aspect-ratio: 4/5; background: #0c2429;
}
.pg-feature__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 1200ms var(--ease-swell); }
.pg-feature__media:hover img { transform: scale(1.04); }

/* THE FOOD (Your stay) — two pg-feature rows, with extra prose + diet ticks. */
.pg-food__para { margin: 18px 0 0; }
.pg-food__row2 { margin-top: clamp(64px, 8vw, 120px); }
.pg-food__ticks {
  margin-top: 28px; padding-top: 22px; border-top: 1px solid rgba(255,255,255,0.14);
  display: flex; flex-wrap: wrap; gap: 12px 26px;
}
.pg-food__ticks span {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-body); font-size: 15px; color: rgba(249,245,233,0.85);
}
.pg-food__ticks svg { color: var(--coral); flex: none; }
.pg-feature__stamp {
  position: absolute; left: 18px; top: 18px; z-index: 2;
  display: inline-flex; align-items: center; gap: 9px;
  padding: 9px 15px 9px 13px; border-radius: 999px;
  background: rgba(8,22,28,0.42); backdrop-filter: blur(10px) saturate(140%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.42); color: #fff;
  font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
}
.pg-feature__stamp::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--coral); box-shadow: 0 0 0 3px var(--coral-glow); }
.pg-feature__h { margin: 18px 0 0; }
.pg-feature__lead { margin: 20px 0 0; }
.pg-feature__list { list-style: none; margin: 28px 0 0; padding: 22px 0 0; border-top: 1px solid rgba(255,255,255,0.14); display: flex; flex-direction: column; gap: 18px; }
.pg-feature__list li { display: grid; grid-template-columns: 22px 1fr; gap: 16px; align-items: start; }
.pg-feature__list svg { width: 20px; height: 20px; color: var(--teal-pale); margin-top: 3px; }
.pg-feature__list .lbl { font-family: var(--font-body); font-size: 16px; line-height: 1.5; color: var(--cream); }
.pg-feature__list .lbl b { display: block; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); margin-bottom: 4px; }
@media (max-width: 900px) {
  .pg-feature, .pg-feature--flip { grid-template-columns: 1fr; gap: 28px; }
  .pg-feature--flip .pg-feature__media { order: 0; }
  .pg-feature__media { aspect-ratio: 16/11; }
}

/* eyebrow → headline → full-width slider → text (mirrors the home Stay block):
   lead paragraph beside the checklist, sitting under the slider. */
.pg-after { display: grid; grid-template-columns: 1fr 0.82fr; gap: clamp(28px, 5vw, 72px); align-items: start; margin-top: clamp(30px, 3.5vw, 52px); }
.pg-after__lead { margin: 0; max-width: 46ch; }
.pg-after__lead > p { margin: 0; }
.pg-after__lead > p + p { margin-top: 1em; }
.pg-after__list { margin: 0; padding: 0; border-top: 0; }
.pg-after__col2 > p { margin: 0; }
.pg-after__col2 > p + p { margin-top: 1em; }
@media (max-width: 880px) { .pg-after { grid-template-columns: 1fr; gap: 24px; } }

/* ---------------------------------------------------------
   PROGRESSION / LEVELS — numbered cards
--------------------------------------------------------- */
.pg-levels { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 2vw, 26px); margin-top: clamp(40px, 5vw, 72px); }
.pg-level {
  position: relative; padding: clamp(26px, 2.6vw, 38px);
  background: rgba(255,255,255,0.035); border: 1px solid rgba(255,255,255,0.12);
  border-radius: 18px; display: flex; flex-direction: column;
  transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell), border-color 320ms var(--ease-swell);
}
.pg-level:hover { transform: translateY(-4px); box-shadow: 0 22px 56px rgba(0,0,0,0.4); border-color: rgba(255,255,255,0.2); }
.pg-level__rn {
  font-family: var(--font-display); font-style: italic; font-size: 20px; color: var(--coral);
  display: inline-flex; align-items: center; gap: 12px;
}
.pg-level__rn::after { content: ""; flex: 1; height: 1px; background: rgba(255,255,255,0.14); }
.pg-level__t { margin: 20px 0 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); line-height: 1.05; color: #fff; }
.pg-level__d { margin: 12px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.6; color: rgba(249,245,233,0.74); }
.pg-level__tag { margin-top: 20px; padding-top: 16px; border-top: 1px solid rgba(255,255,255,0.12); font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
@media (max-width: 880px) { .pg-levels { grid-template-columns: 1fr; } }

/* ---------------------------------------------------------
   PROGRESSION — staggered numbered "step" cards (surf page)
--------------------------------------------------------- */
.pg-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(24px, 3.5vw, 56px); align-items: start; margin-top: clamp(44px, 5.5vw, 80px); }
.pg-step { border-top: 2px solid var(--coral); padding-top: clamp(22px, 2.4vw, 32px); }
.pg-step:nth-child(1) { margin-top: clamp(96px, 11vw, 168px); }
.pg-step:nth-child(2) { margin-top: clamp(48px, 5.5vw, 84px); }
.pg-step__head { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; }
.pg-step__num {
  font-family: var(--font-display); font-style: italic; font-size: calc(clamp(56px, 6vw, 92px) * var(--m-num, 1)); line-height: 0.9;
  color: transparent; -webkit-text-stroke: 1.2px var(--coral);
}
@supports not ((-webkit-text-stroke: 1px black) or (text-stroke: 1px black)) {
  .pg-step__num { color: var(--coral); }
}
.pg-step__tag { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); white-space: nowrap; }
.pg-step__t { margin: clamp(18px, 2vw, 26px) 0 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); line-height: 1.05; color: #fff; }
.pg-step__d { margin: 12px 0 0; font-family: var(--font-body); font-size: 16px; font-weight: 400; line-height: 1.6; color: rgba(249,245,233,0.74); max-width: 38ch; }
@media (max-width: 880px) {
  .pg-steps { grid-template-columns: 1fr; gap: 40px; }
  .pg-step:nth-child(1), .pg-step:nth-child(2) { margin-top: 0; }
}

/* ---------------------------------------------------------
   A DAY AT SWELL — interactive rail timeline (surf page)
--------------------------------------------------------- */
.pg-dl { margin-top: clamp(40px, 5vw, 72px); }
/* Rail scales to any number of stops: fills the width when there are few,
   scrolls horizontally if there are many — so it never crams. */
.pg-dl__railwrap { overflow-x: auto; overflow-y: hidden; padding-bottom: 6px; scrollbar-width: none; -ms-overflow-style: none; }
.pg-dl__railwrap::-webkit-scrollbar { display: none; }
.pg-dl__rail { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(78px, 1fr); min-width: 100%; }
.pg-dl__stop {
  appearance: none; background: none; border: 0; padding: 0; margin: 0; cursor: pointer;
  display: flex; flex-direction: column; align-items: center; gap: 12px;
  font-family: var(--font-body); color: inherit;
}
.pg-dl__time { font-family: var(--font-display); font-style: italic; font-size: clamp(17px, 1.6vw, 22px); color: rgba(249,245,233,0.45); transition: color 240ms var(--ease-swell); }
.pg-dl__dotw { position: relative; width: 100%; height: 16px; display: flex; align-items: center; justify-content: center; }
.pg-dl__dotw::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 1px; background: rgba(255,255,255,0.16); }
.pg-dl__stop:first-child .pg-dl__dotw::before { left: 50%; }
.pg-dl__stop:last-child .pg-dl__dotw::before { right: 50%; }
.pg-dl__dotw::after { content: ""; position: absolute; top: 50%; height: 2px; margin-top: -0.5px; background: var(--coral); left: 0; right: 100%; transition: right 320ms var(--ease-swell); }
.pg-dl__stop.is-past .pg-dl__dotw::after { right: 0; }
.pg-dl__stop.is-active .pg-dl__dotw::after { right: 50%; }
.pg-dl__stop:first-child .pg-dl__dotw::after { left: 50%; }
.pg-dl__dot {
  position: relative; z-index: 1; width: 9px; height: 9px; border-radius: 50%;
  background: var(--night); box-shadow: inset 0 0 0 1.5px rgba(249,245,233,0.5);
  transition: all 240ms var(--ease-swell);
}
.pg-dl__stop.is-past .pg-dl__dot { background: var(--coral); box-shadow: none; }
.pg-dl__stop.is-active .pg-dl__dot { width: 15px; height: 15px; background: var(--coral); box-shadow: 0 0 0 6px var(--coral-glow); }
/* Per-dot labels are hidden on the rail (they collided once there were many
   stops); the selected stop's label shows large in the panel below instead.
   Kept in the DOM via aria-label on each stop for accessibility. */
.pg-dl__lbl { display: none; }
.pg-dl__stop:hover .pg-dl__time, .pg-dl__stop.is-active .pg-dl__time { color: var(--coral); }
.pg-dl__stop:hover .pg-dl__lbl { color: rgba(249,245,233,0.75); }
.pg-dl__stop.is-active .pg-dl__lbl { color: #fff; }
.pg-dl__stop:focus-visible { outline: 2px solid var(--coral); outline-offset: 4px; border-radius: 6px; }
.pg-dl__panel {
  display: grid; grid-template-columns: minmax(170px, 0.4fr) 1.6fr auto;
  gap: clamp(28px, 4vw, 72px); align-items: start;
  margin-top: clamp(40px, 5vw, 64px);
  animation: pgDlIn 420ms var(--ease-swell) both;
}
@keyframes pgDlIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .pg-dl__panel { animation: none; } }
.pg-dl__bigtime { font-family: var(--font-display); font-style: italic; font-size: calc(clamp(60px, 7vw, 108px) * var(--m-num, 1)); line-height: 0.85; color: var(--coral); }
.pg-dl__body h3 { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); line-height: 1.05; color: #fff; }
.pg-dl__body p { margin: 14px 0 0; font-family: var(--font-body); font-size: clamp(16.5px, 1.3vw, 18px); font-weight: 400; line-height: 1.65; color: rgba(249,245,233,0.74); max-width: 52ch; }
.pg-dl__nav { display: flex; align-items: center; gap: 14px; justify-self: end; }
.pg-dl__arrow {
  appearance: none; background: none; cursor: pointer; padding: 0;
  width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,0.25);
  display: inline-flex; align-items: center; justify-content: center; color: var(--cream);
  transition: border-color 240ms var(--ease-swell), background 240ms var(--ease-swell), opacity 240ms var(--ease-swell);
}
.pg-dl__arrow:hover:not(:disabled) { border-color: var(--coral); background: var(--coral-glow); }
.pg-dl__arrow:disabled { opacity: 0.3; cursor: default; }
.pg-dl__count { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.14em; color: rgba(249,245,233,0.55); white-space: nowrap; }
@media (max-width: 760px) {
  .pg-dl__lbl { display: none; }
  .pg-dl__time { font-size: 15px; }
  .pg-dl__panel { grid-template-columns: 1fr; gap: 18px; }
  .pg-dl__nav { justify-self: start; }
}
/* Phones: keep the day-stops a comfortable, swipeable width (the rail scrolls
   horizontally — the native scrollbar is hidden above, and the active stop is
   scrolled into view by the script). */
@media (max-width: 520px) {
  .pg-dl__rail { grid-auto-columns: minmax(64px, 1fr); }
  .pg-dl__time { font-size: 13px; }
  .pg-dl__railwrap { scroll-snap-type: x proximity; }
  .pg-dl__stop { scroll-snap-align: center; }
}

/* Connected progression — the three cards read as one continuous timeline:
   a coral rail runs through every card AND bridges the gaps, with a glowing
   node above each step's title and an arrowhead at the end. Roman numerals
   are dropped in the markup. (e.g. wingfoiling) */
.pg-levels--connected { position: relative; }
.pg-levels--connected .pg-level {
  overflow: visible;
  padding-top: clamp(58px, 5.5vw, 76px);
}
.pg-levels--connected .pg-level__t { margin-top: 0; }

/* the rail — one segment per card, extended into the gap so it reads continuous */
.pg-levels--connected .pg-level::before {
  content: ""; position: absolute; z-index: 1; pointer-events: none;
  top: clamp(30px, 3.2vw, 40px); left: 0; right: 0; height: 2px;
  background: var(--coral); opacity: 0.7;
}
.pg-levels--connected .pg-level:first-child::before { left: clamp(26px, 2.6vw, 38px); }
.pg-levels--connected .pg-level:not(:last-child)::before { right: calc(-1 * clamp(16px, 2vw, 26px)); }

/* node — a coral station dot sitting on the rail, above each title */
.pg-levels--connected .pg-level::after {
  content: ""; position: absolute; z-index: 2; pointer-events: none;
  top: clamp(30px, 3.2vw, 40px); left: clamp(26px, 2.6vw, 38px);
  width: 14px; height: 14px; border-radius: 50%;
  background: var(--coral);
  box-shadow: 0 0 0 5px rgba(238,106,71,0.16), 0 0 14px 2px rgba(238,106,71,0.35);
  transform: translate(-50%, -50%);
}

/* arrowhead closing the rail */
.pg-levels--connected::after {
  content: ""; position: absolute; z-index: 2; pointer-events: none;
  top: clamp(30px, 3.2vw, 40px); right: 0;
  width: 11px; height: 11px;
  border-top: 2px solid var(--coral); border-right: 2px solid var(--coral);
  transform: translate(35%, -50%) rotate(45deg);
}

@media (max-width: 880px) {
  /* stacked → the rail runs vertically down the left edge */
  .pg-levels--connected .pg-level {
    padding-top: clamp(26px, 2.6vw, 38px);
    padding-left: clamp(52px, 12vw, 64px);
  }
  .pg-levels--connected .pg-level::before {
    top: 0; bottom: 0; left: clamp(28px, 6vw, 34px); right: auto;
    width: 2px; height: auto;
  }
  .pg-levels--connected .pg-level:first-child::before { top: clamp(30px, 7vw, 40px); left: clamp(28px, 6vw, 34px); }
  .pg-levels--connected .pg-level:not(:last-child)::before { right: auto; bottom: calc(-1 * clamp(16px, 2vw, 26px)); }
  .pg-levels--connected .pg-level::after {
    top: clamp(34px, 7.5vw, 46px); left: clamp(28px, 6vw, 34px);
  }
  .pg-levels--connected::after {
    top: auto; right: auto; bottom: 0; left: clamp(28px, 6vw, 34px);
    transform: translate(-50%, 35%) rotate(135deg);
  }
}

/* ---------------------------------------------------------
   A DAY — timeline list
--------------------------------------------------------- */
.pg-day { margin-top: clamp(40px, 5vw, 72px); border-top: 1.5px solid rgba(255,255,255,0.5); }
.pg-day__row {
  display: grid; grid-template-columns: 130px 1fr; gap: clamp(18px, 3vw, 44px);
  padding: 26px 0; border-bottom: 1px solid rgba(255,255,255,0.14); align-items: baseline;
}
.pg-day__time { font-family: var(--font-display); font-style: italic; font-size: var(--disp-small); color: var(--coral); }
.pg-day__body h3 { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-small); line-height: 1.1; color: #fff; }
.pg-day__body p { margin: 8px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: rgba(249,245,233,0.74); max-width: 60ch; }
@media (max-width: 680px) { .pg-day__row { grid-template-columns: 1fr; gap: 6px; } }

/* ---------------------------------------------------------
   WHAT'S INCLUDED — checklist grid
--------------------------------------------------------- */
.pg-inc { list-style: none; margin: clamp(36px, 4vw, 60px) 0 0; padding: 0; display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px 40px; }
.pg-inc li { list-style: none; display: grid; grid-template-columns: 26px 1fr; gap: 14px; align-items: start; padding: 16px 0; border-top: 1px solid rgba(255,255,255,0.12); }
.pg-inc__ico { width: 26px; height: 26px; color: var(--coral); }
.pg-inc h3 { margin: 0; font-family: var(--font-body); font-weight: 500; font-size: 16px; color: #fff; letter-spacing: 0.01em; }
.pg-inc p { margin: 5px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.5; color: rgba(249,245,233,0.68); }
@media (max-width: 760px) { .pg-inc { grid-template-columns: 1fr; } }

/* ---------------------------------------------------------
   IMAGE STRIP
--------------------------------------------------------- */
.pg-strip { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: clamp(36px, 4vw, 60px); }
.pg-strip figure { margin: 0; position: relative; overflow: hidden; border-radius: 12px; aspect-ratio: 4/5; background: #0c2429; }
.pg-strip img { width: 100%; height: 100%; object-fit: cover; transition: transform 1000ms var(--ease-swell); }
.pg-strip figure:hover img { transform: scale(1.05); }
.pg-strip figcaption {
  position: absolute; left: 14px; bottom: 12px; color: #fff;
  font-family: var(--font-display); font-style: italic; font-size: 17px;
  text-shadow: 0 1px 12px rgba(0,0,0,0.6);
}
@media (max-width: 760px) { .pg-strip { grid-template-columns: 1fr 1fr; } }

/* ---------------------------------------------------------
   WHEN TO GO — seasons conditions chart (Surfing page)
--------------------------------------------------------- */
.pg-seasons__scroll { width: 100%; margin-top: clamp(36px, 4vw, 58px); overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; padding-bottom: 4px; }
.pg-seasons__chart {
  display: grid;
  width: 100%;
  min-width: 760px;
  border-top: 1px solid rgba(255,255,255,0.16);
}
.pg-seasons__chart > * {
  padding: 15px 16px;
  border-bottom: 1px solid rgba(255,255,255,0.09);
}
/* header cells */
.pg-seasons__corner { display: flex; flex-direction: column; justify-content: flex-end; gap: 2px; }
.pg-seasons__cornlbl { font-family: var(--font-display); font-style: italic; font-size: 20px; color: var(--teal-pale); line-height: 1; }
.pg-seasons__cornsub { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(249,245,233,0.5); }
.pg-seasons__hd {
  position: relative; overflow: hidden; min-height: 98px;
  display: flex; flex-direction: column; justify-content: flex-end; gap: 5px;
  border-left: 1px solid rgba(255,255,255,0.09);
}
.pg-seasons__hdbg {
  position: absolute; inset: 0; z-index: 0;
  background-size: cover; background-position: center; opacity: 0.42;
  transform: scale(1.001);
  transition: transform 1200ms var(--ease-swell), opacity var(--dur-base) var(--ease-swell);
}
.pg-seasons__hd::after {
  content: ""; position: absolute; inset: 0; z-index: 0;
  background: linear-gradient(180deg, rgba(10,29,34,0.45) 0%, rgba(10,29,34,0.86) 100%);
}
.pg-seasons__hd .pg-seasons__mo { position: relative; z-index: 1; }
.pg-seasons__mo { font-family: var(--font-display); font-size: var(--disp-small); line-height: 0.98; color: #fff; }
.pg-seasons__mo i { color: var(--teal-pale); font-style: italic; }
/* row-label cells */
.pg-seasons__rl { display: flex; flex-direction: column; gap: 2px; justify-content: center; }
.pg-seasons__rlmain { font-family: var(--font-body); font-weight: 500; font-size: 15px; color: #fff; letter-spacing: 0.01em; }
.pg-seasons__rlsub { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(249,245,233,0.44); }
/* value cells */
.pg-seasons__cell { display: flex; align-items: center; border-left: 1px solid rgba(255,255,255,0.09); transition: background var(--dur-base) var(--ease-swell), opacity var(--dur-base) var(--ease-swell); }

/* column hover highlight — lift the hovered period, ease the rest back */
.pg-seasons__cell.is-hot { background: rgba(15,154,154,0.13); }
.pg-seasons__hd.is-hot .pg-seasons__hdbg { opacity: 0.66; transform: scale(1.07); }
.pg-seasons__chart.has-hot .pg-seasons__cell:not(.is-hot) { opacity: 0.5; }
.pg-seasons__chart.has-hot .pg-seasons__hd:not(.is-hot) { opacity: 0.62; }
.pg-seasons__chart.has-hot .pg-seasons__hd:not(.is-hot) .pg-seasons__hdbg { opacity: 0.24; }

/* meters */
.pg-seasons__meter { display: inline-flex; gap: 4px; align-items: flex-end; }
.pg-seasons__meter span {
  width: 9px; height: 22px; border-radius: 3px;
  background: rgba(255,255,255,0.13);
  transition: background var(--dur-base) var(--ease-swell);
}
/* scroll-in fill: chart bars (not the static legend swatches) rise from the
   baseline, staggered left-to-right via --c */
.pg-seasons__scroll .pg-seasons__meter span {
  transform: scaleY(0); transform-origin: bottom;
  transition: transform 720ms var(--ease-swell), background var(--dur-base) var(--ease-swell);
  transition-delay: calc(var(--c, 0) * 70ms);
}
.pg-seasons__scroll.reveal.in .pg-seasons__meter span { transform: scaleY(1); }
@media (prefers-reduced-motion: reduce) {
  .pg-seasons__scroll .pg-seasons__meter span { transform: scaleY(1); transition: background var(--dur-base); }
}
.pg-seasons__meter--teal span.on { background: var(--teal-500); box-shadow: 0 0 10px rgba(15,154,154,0.55); }
.pg-seasons__meter--coral span.on { background: var(--coral); box-shadow: 0 0 10px rgba(238,106,71,0.5); }
/* temps */
.pg-seasons__temp { display: flex; flex-direction: column; line-height: 1; }
.pg-seasons__temp b { font-family: var(--font-display); font-weight: 400; font-size: 27px; color: #fff; }
.pg-seasons__temp b sup { font-family: var(--font-body); font-size: 12px; font-weight: 400; color: var(--teal-pale); vertical-align: super; margin-left: 1px; }
.pg-seasons__temp span { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.08em; color: rgba(249,245,233,0.5); margin-top: 4px; }
/* rain droplets */
.pg-seasons__rain { display: inline-flex; gap: 5px; align-items: center; color: rgba(255,255,255,0.22); }
.pg-seasons__rain .on { color: var(--teal-pale); }

/* legend */
.pg-seasons__legend { display: flex; flex-wrap: wrap; gap: 14px 34px; margin-top: clamp(24px, 2.6vw, 36px); }
.pg-seasons__lg { display: flex; align-items: center; gap: 12px; font-family: var(--font-body); font-size: 13px; color: rgba(249,245,233,0.66); }
.pg-seasons__lg .pg-seasons__meter span { width: 7px; height: 16px; }

@media (max-width: 760px) {
  .pg-seasons__temp b { font-size: 23px; }
  .pg-seasons__legend { flex-direction: column; gap: 12px; }
}

/* ---------------------------------------------------------
   DAY-TRIP CARDS — image-led, drop-in photo + price
--------------------------------------------------------- */
.pg-trips { display: grid; grid-template-columns: repeat(2, 1fr); gap: clamp(16px, 2vw, 26px); margin-top: clamp(40px, 5vw, 72px); }
.pg-trip {
  display: flex; flex-direction: column; overflow: hidden;
  background: rgba(255,255,255,0.035); border: 1px solid rgba(255,255,255,0.12);
  border-radius: 18px;
  transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell), border-color 320ms var(--ease-swell);
}
.pg-trip:hover { transform: translateY(-4px); box-shadow: 0 22px 56px rgba(0,0,0,0.4); border-color: rgba(255,255,255,0.2); }
.pg-trip__media { position: relative; aspect-ratio: 16/10; background: #0c2429; overflow: hidden; }
.pg-trip__media image-slot { display: block; width: 100%; height: 100%; }
.pg-trip__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
/* dark-theme the drop placeholder so it reads on the night cards */
.pg-trip__media image-slot::part(empty),
.pg-feature__media image-slot::part(empty) { color: rgba(249,245,233,0.62); }
.pg-trip__media image-slot::part(ring),
.pg-feature__media image-slot::part(ring) { border-color: rgba(249,245,233,0.28); }
.pg-trip__media image-slot::part(frame),
.pg-feature__media image-slot::part(frame) { background: rgba(255,255,255,0.03); }
.pg-trip__num {
  position: absolute; left: 16px; top: 14px; z-index: 2;
  font-family: var(--font-display); font-style: italic; font-size: 18px; color: #fff;
  text-shadow: 0 1px 10px rgba(0,0,0,0.6);
}
.pg-trip__body { display: flex; flex-direction: column; flex: 1; padding: clamp(22px, 2.2vw, 32px); }
.pg-trip__t { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-small); line-height: 1.05; color: #fff; }
.pg-trip__t i { font-style: italic; color: var(--teal-pale); }
.pg-trip__d { margin: 12px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.6; color: rgba(249,245,233,0.74); }
.pg-trip__foot {
  margin-top: auto; padding-top: 20px;
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
}
.pg-trip__price { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-trip__where { display: inline-flex; align-items: center; gap: 7px; font-family: var(--font-body); font-size: 15px; color: rgba(249,245,233,0.6); }
.pg-trip__where svg { width: 15px; height: 15px; color: var(--coral); }
@media (max-width: 720px) { .pg-trips { grid-template-columns: 1fr; } }

/* ---------------------------------------------------------
   PULL QUOTE
--------------------------------------------------------- */
.pg-quote { max-width: 22ch; }
.pg-quote blockquote {
  margin: 0; font-family: var(--font-display); font-style: italic; font-weight: 400;
  font-size: clamp(30px, 4.4vw, 64px); line-height: 1.08; letter-spacing: -0.015em; color: #fff;
  text-wrap: balance;
}
.pg-quote blockquote .mark { color: var(--teal-pale); }
.pg-quote__by { margin-top: 26px; display: inline-flex; align-items: center; gap: 14px; }
.pg-quote__by img { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.2); }
.pg-quote__by .n { font-family: var(--font-display); font-size: 19px; color: #fff; }
.pg-quote__by .s { font-family: var(--font-body); font-size: 13px; color: rgba(249,245,233,0.62); }

/* ---------------------------------------------------------
   POOL & GARDEN — three tweakable layouts (Your Stay)
--------------------------------------------------------- */
.pg-pool__ey {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-body); font-weight: 500; font-size: 12px;
  letter-spacing: 0.24em; text-transform: uppercase; color: var(--teal-pale);
}
.pg-pool__ey .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--coral); flex: none; }
.pg-pool__q {
  margin: 16px 0 0; font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-title); line-height: 1.1; letter-spacing: -0.015em;
  color: #fff; text-wrap: balance;
}
.pg-pool__q i { color: var(--teal-pale); }
.pg-pool__lead {
  margin: 20px 0 0; font-family: var(--font-body); font-size: 18px; line-height: 1.65;
  color: rgba(255, 255, 255, 0.86); max-width: 48ch;
}
.pg-chips--center { justify-content: center; }

/* A · Overlay (billboard) — copy over a full-bleed photo */
.pg-pool--billboard .pg-pool__frame {
  position: relative; border-radius: 24px; overflow: hidden;
  min-height: clamp(460px, 56vw, 660px); box-shadow: 0 34px 80px rgba(0, 0, 0, 0.34);
}
.pg-pool--billboard .pg-pool__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.pg-pool--billboard .pg-pool__scrim {
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(180deg, rgba(6, 29, 40, 0) 30%, rgba(6, 29, 40, 0.82) 100%);
}
.pg-pool--billboard .pg-pool__copy {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
  padding: clamp(28px, 4vw, 58px); max-width: 840px;
}
.pg-pool--billboard .pg-pool__copy .pg-chips { margin-top: 26px; }

/* B · Editorial split — portrait photo + a tidy column */
.pg-pool--split .pg-pool__split {
  display: grid; grid-template-columns: 1fr 1.05fr; gap: clamp(32px, 5vw, 72px); align-items: center;
}
.pg-pool--split .pg-pool__media {
  position: relative; border-radius: 22px; overflow: hidden; box-shadow: 0 30px 70px rgba(0, 0, 0, 0.28); aspect-ratio: 4 / 5;
}
.pg-pool--split .pg-pool__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pg-pool--split .pg-pool__text { padding-left: clamp(16px, 2vw, 28px); border-left: 2px solid rgba(238, 106, 71, 0.55); }

/* C · Stacked — centred line, wide photo band, chips row */
.pg-pool--stacked .pg-pool__head { max-width: 880px; margin: 0 auto; text-align: center; }
.pg-pool--stacked .pg-pool__head .pg-pool__ey { justify-content: center; }
.pg-pool--stacked .pg-pool__head .pg-pool__lead { margin-left: auto; margin-right: auto; }
.pg-pool--stacked .pg-pool__band {
  position: relative; margin: clamp(32px, 4vw, 56px) 0 clamp(24px, 3vw, 36px);
  border-radius: 22px; overflow: hidden; box-shadow: 0 30px 70px rgba(0, 0, 0, 0.28); aspect-ratio: 21 / 9;
}
.pg-pool--stacked .pg-pool__band img { width: 100%; height: 100%; object-fit: cover; display: block; }

@media (max-width: 900px) {
  .pg-pool--split .pg-pool__split { grid-template-columns: 1fr; }
  .pg-pool--split .pg-pool__text { border-left: 0; padding-left: 0; }
  .pg-pool--billboard .pg-pool__frame { min-height: clamp(400px, 96vw, 560px); }
  .pg-pool--billboard .pg-pool__copy { padding: 24px 22px; }
  .pg-pool--stacked .pg-pool__band { aspect-ratio: 16 / 10; }
}

/* slideshow — shared across the three layouts */
.pg-slider { position: absolute; inset: 0; z-index: 0; }
/* keep the crossfade when the slider sits inside a feature media frame
   (whose `img` rule would otherwise override the opacity transition) */
.pg-feature__media .pg-slider__img { transition: opacity 900ms var(--ease-swell), transform 1200ms var(--ease-swell); }
.pg-slider__img {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  opacity: 0; transition: opacity 900ms var(--ease-swell);
}
.pg-slider__img.is-active { opacity: 1; }
.pg-slider__nav {
  position: absolute; top: 16px; right: 16px; z-index: 3;
  display: inline-flex; align-items: center; gap: 4px; padding: 5px 6px; border-radius: 999px;
  background: rgba(6, 29, 40, 0.42); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.18);
}
.pg-slider__arrow {
  width: 34px; height: 34px; border-radius: 50%; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  color: #fff; background: transparent; transition: background 200ms var(--ease-swell);
}
.pg-slider__arrow:hover { background: rgba(255, 255, 255, 0.18); }
.pg-slider__count {
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.1em; color: rgba(255, 255, 255, 0.92);
  min-width: 56px; text-align: center; font-variant-numeric: tabular-nums;
}

/* amenities — three non-pill treatments */
.pg-poolchips { margin-top: 26px; }

/* inline — middot-separated row (wraps cleanly, no leading dividers) */
.pg-poolchips--inline { display: flex; flex-wrap: wrap; align-items: center; row-gap: 8px; }
.pg-poolchips--inline .ch {
  display: inline-flex; align-items: center;
  font-family: var(--font-body); font-size: 16px; color: rgba(255, 255, 255, 0.9);
}
.pg-poolchips--inline .ch svg { color: var(--teal-pale); flex: none; margin-right: 8px; }
.pg-poolchips--inline .ch:not(:last-child)::after {
  content: "·"; margin: 0 16px; color: rgba(255, 255, 255, 0.42);
}
.pg-poolchips--inline.pg-poolchips--center { justify-content: center; }

/* ticks — coral disc + check, two columns */
.pg-poolchips--ticks {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 30px; max-width: 560px;
}
.pg-poolchips--ticks.pg-poolchips--center { margin-left: auto; margin-right: auto; }
.pg-poolchips--ticks .ch {
  display: flex; align-items: center; gap: 12px;
  font-family: var(--font-body); font-size: 16px; color: rgba(255, 255, 255, 0.92);
}
.pg-poolchips--ticks .ico {
  width: 26px; height: 26px; border-radius: 50%; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(238, 106, 71, 0.18); color: var(--coral);
}

/* ruled — hairline-separated spec list */
.pg-poolchips--ruled { display: flex; flex-direction: column; max-width: 460px; }
.pg-poolchips--ruled.pg-poolchips--center { margin-left: auto; margin-right: auto; }
.pg-poolchips--ruled .ch {
  display: flex; align-items: center; gap: 14px; padding: 14px 0;
  border-top: 1px solid rgba(255, 255, 255, 0.16);
  font-family: var(--font-body); font-size: 16px; color: #fff;
}
.pg-poolchips--ruled .ch:last-child { border-bottom: 1px solid rgba(255, 255, 255, 0.16); }
.pg-poolchips--ruled .ch svg { color: var(--teal-pale); flex: none; }

@media (max-width: 560px) {
  .pg-poolchips--ticks { grid-template-columns: 1fr; }
}

/* ---------------------------------------------------------
   WINGFOILING FILM — three display options
--------------------------------------------------------- */
.pg-vid__poster, .pg-vid__iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.pg-vid__poster { display: block; cursor: pointer; padding: 0; background: #06141c; }
.pg-vid__poster img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pg-vid__scrim {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(6, 29, 40, 0.12) 0%, rgba(6, 29, 40, 0.5) 100%);
  transition: background 320ms var(--ease-swell);
}
.pg-vid__poster:hover .pg-vid__scrim { background: linear-gradient(180deg, rgba(6, 29, 40, 0.2) 0%, rgba(6, 29, 40, 0.56) 100%); }
.pg-vid__play {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
  width: clamp(64px, 7vw, 88px); height: clamp(64px, 7vw, 88px); border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center; padding-left: 5px;
  background: var(--coral); color: #fff; box-shadow: 0 14px 40px rgba(238, 106, 71, 0.5);
  transition: transform 260ms var(--ease-swell);
}
.pg-vid__poster:hover .pg-vid__play { transform: translate(-50%, -50%) scale(1.06); }
.pg-vid__hint {
  position: absolute; left: 0; right: 0; bottom: clamp(18px, 3vw, 30px); text-align: center;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
  color: rgba(255, 255, 255, 0.85);
}

/* A · Cinematic — full-bleed widescreen band */
.pg-vid--cinematic .pg-vid__bleed { position: relative; }
.pg-vid--cinematic .pg-vid__stage { position: relative; height: clamp(380px, 58vw, 780px); overflow: hidden; background: #06141c; }
.pg-vid--cinematic .pg-vid__cap {
  position: absolute; left: 0; right: 0; bottom: 0; padding: clamp(28px, 4vw, 60px) 0;
  background: linear-gradient(180deg, transparent 0%, rgba(6, 29, 40, 0.8) 100%); pointer-events: none;
}
.pg-vid__bigh {
  margin: 14px 0 0; font-family: var(--font-display); font-weight: 400;
  font-size: var(--disp-title); line-height: 1.08; letter-spacing: -0.015em;
  color: #fff; max-width: 20ch; text-wrap: balance;
}
.pg-vid__bigh i { color: var(--teal-pale); }

/* B · Feature — player beside an editorial column */
.pg-vid--feature .pg-vid__grid { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: clamp(32px, 5vw, 72px); align-items: center; }
.pg-vid--feature .pg-vid__media {
  position: relative; aspect-ratio: 16 / 9; border-radius: 20px; overflow: hidden; background: #06141c;
  box-shadow: 0 30px 70px rgba(0, 0, 0, 0.34);
}
.pg-vid__h { margin-top: 14px; }
.pg-vid__lead { margin-top: 18px; max-width: 42ch; }

/* C · Framed — centred contained player */
.pg-vid--framed .pg-vid__head { text-align: center; max-width: 720px; margin: 0 auto; }
.pg-vid--framed .pg-vid__frame {
  position: relative; aspect-ratio: 16 / 9; max-width: 1040px; margin: clamp(28px, 3vw, 46px) auto 0;
  border-radius: 24px; overflow: hidden; background: #06141c; box-shadow: 0 40px 100px rgba(0, 0, 0, 0.45);
}

@media (max-width: 900px) {
  .pg-vid--feature .pg-vid__grid { grid-template-columns: 1fr; }
  .pg-vid--cinematic .pg-vid__stage { height: clamp(300px, 64vw, 520px); }
}

/* ---------------------------------------------------------
   AIRPORT CARDS (getting here)
--------------------------------------------------------- */
.pg-air { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: clamp(36px, 4vw, 60px); }
.pg-air__card {
  padding: clamp(24px, 2.4vw, 34px);
  background: rgba(255,255,255,0.035); border: 1px solid rgba(255,255,255,0.12); border-radius: 18px;
  display: flex; flex-direction: column; gap: 8px;
}
.pg-air__card.is-primary { border-color: rgba(238,106,71,0.5); box-shadow: inset 0 0 0 1px rgba(238,106,71,0.18); }
.pg-air__iata { display: inline-flex; align-items: baseline; gap: 10px; }
.pg-air__iata b { font-family: var(--font-display); font-weight: 400; font-size: calc(clamp(40px, 4vw, 60px) * var(--m-num, 1)); line-height: 0.9; color: #fff; }
.pg-air__dist { font-family: var(--font-display); font-style: italic; font-size: 22px; color: var(--coral); }
.pg-air__name { font-family: var(--font-body); font-weight: 500; font-size: 15px; letter-spacing: 0.04em; color: #fff; margin-top: 4px; }
.pg-air__code { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-air__use { margin: 10px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: rgba(249,245,233,0.7); }
@media (max-width: 860px) { .pg-air { grid-template-columns: 1fr; } }

/* ---------------------------------------------------------
   GALLERY (filterable mosaic)
--------------------------------------------------------- */
.pg-gal__filters { display: flex; flex-wrap: wrap; gap: 10px; margin-top: clamp(30px, 3vw, 44px); }
.pg-gal__filter {
  padding: 11px 20px; border-radius: 999px;
  font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
  color: rgba(249,245,233,0.74); background: transparent;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.18);
  transition: background 240ms var(--ease-swell), color 240ms var(--ease-swell), box-shadow 240ms var(--ease-swell);
}
.pg-gal__filter:hover { color: #fff; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.4); }
.pg-gal__filter.is-active { background: #fff; color: var(--night); box-shadow: none; }
.pg-gal__count { margin-left: auto; align-self: center; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: rgba(249,245,233,0.5); }
.pg-gal__grid {
  margin-top: clamp(28px, 3vw, 44px);
  display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 168px;
  grid-auto-flow: dense; gap: 14px;
}
.pg-gal__tile { margin: 0; position: relative; overflow: hidden; border-radius: 4px; background: #0c2429; cursor: pointer; }
.pg-gal__tile img { display: block; width: 100%; height: 100%; object-fit: cover; background: #0c2429; transition: transform 900ms var(--ease-swell); }
.pg-gal__tile:hover img { transform: scale(1.05); }
.pg-gal__tile figcaption {
  position: absolute; left: 14px; bottom: 12px; right: 14px; color: #fff; z-index: 2;
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  opacity: 0; transform: translateY(6px); transition: opacity 300ms var(--ease-swell), transform 300ms var(--ease-swell);
}
.pg-gal__tile::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,22,28,0) 45%, rgba(8,22,28,0.7) 100%); opacity: 0; transition: opacity 300ms var(--ease-swell); }
.pg-gal__tile:hover figcaption, .pg-gal__tile:hover::after { opacity: 1; }
.pg-gal__tile figcaption .t { font-family: var(--font-display); font-style: italic; font-size: 18px; }
.pg-gal__tile figcaption .c { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-pale); }
.pg-gal__tile.w2 { grid-column: span 2; }
.pg-gal__tile.h2 { grid-row: span 2; }
@media (max-width: 880px) {
  .pg-gal__grid { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 150px; }
  .pg-gal__tile.w2 { grid-column: span 2; }
}

/* lightbox */
.pg-lb { position: fixed; inset: 0; z-index: 1200; display: flex; align-items: center; justify-content: center; padding: clamp(20px, 5vw, 80px); background: rgba(6,18,22,0.92); backdrop-filter: blur(14px); opacity: 0; pointer-events: none; transition: opacity 320ms var(--ease-swell); }
.pg-lb.open { opacity: 1; pointer-events: auto; }
.pg-lb img { max-width: 100%; max-height: 82vh; border-radius: 6px; box-shadow: 0 30px 90px rgba(0,0,0,0.6); }
.pg-lb__cap { position: absolute; bottom: clamp(20px, 4vw, 44px); left: 0; right: 0; text-align: center; font-family: var(--font-display); font-style: italic; font-size: 20px; color: #fff; }
.pg-lb__close { position: absolute; top: 22px; right: 24px; width: 46px; height: 46px; border-radius: 50%; background: rgba(255,255,255,0.1); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.3); color: #fff; display: flex; align-items: center; justify-content: center; }
.pg-lb__close:hover { background: rgba(255,255,255,0.2); }
.pg-lb__nav { position: absolute; top: 50%; transform: translateY(-50%); width: 52px; height: 52px; border-radius: 50%; background: rgba(255,255,255,0.08); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.25); color: #fff; display: flex; align-items: center; justify-content: center; transition: background 220ms var(--ease-swell); }
.pg-lb__nav:hover { background: rgba(255,255,255,0.2); }
.pg-lb__nav.prev { left: clamp(12px, 3vw, 40px); }
.pg-lb__nav.next { right: clamp(12px, 3vw, 40px); }
@media (max-width: 680px) { .pg-lb__nav { display: none; } }

/* ---------------------------------------------------------
   FAQ groups (faq page)
--------------------------------------------------------- */
.pg-faqgroups { display: flex; flex-direction: column; gap: clamp(40px, 5vw, 72px); margin-top: clamp(40px, 5vw, 72px); }
.pg-faqgroup__t {
  display: flex; align-items: baseline; gap: 14px; margin: 0 0 8px;
  font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.26em; text-transform: uppercase; color: var(--teal-pale);
}
.pg-faqgroup__t span { font-family: var(--font-display); font-style: italic; font-size: 16px; letter-spacing: 0; text-transform: none; color: var(--coral); }

/* contact band */
.pg-contact {
  display: grid; grid-template-columns: 1.1fr 0.9fr; gap: clamp(36px, 5vw, 80px); align-items: center;
  padding: clamp(40px, 5vw, 72px); border-radius: 22px;
  background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.12);
}
.pg-contact__h { margin: 14px 0 0; }
.pg-contact__opts { display: flex; flex-direction: column; gap: 14px; }
.pg-contact__opt { display: flex; align-items: center; gap: 16px; padding: 18px 22px; border-radius: 14px; background: rgba(255,255,255,0.04); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.1); transition: background 220ms var(--ease-swell); }
.pg-contact__opt:hover { background: rgba(255,255,255,0.08); }
.pg-contact__opt svg { width: 22px; height: 22px; color: var(--teal-pale); flex: none; }
.pg-contact__opt .k { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-contact__opt .v { font-family: var(--font-display); font-size: 21px; color: #fff; line-height: 1.1; }
@media (max-width: 860px) { .pg-contact { grid-template-columns: 1fr; gap: 28px; } }

/* small shared niceties */
.pg-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 28px; }
.pg-chips span { display: inline-flex; align-items: center; gap: 9px; padding: 10px 16px; border-radius: 999px; background: rgba(255,255,255,0.1); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.24); font-family: var(--font-body); font-size: 13px; letter-spacing: 0.03em; color: #fff; }
.pg-chips svg { width: 17px; height: 17px; color: var(--teal-pale); flex: none; }
.pg-feature--onteal .pg-feature__media { box-shadow: 0 30px 70px rgba(0,0,0,0.28); }
.pg-amen { list-style: none; margin: clamp(36px,4vw,60px) 0 0; padding: 22px 0 0; border-top: 1px solid rgba(255,255,255,0.16); display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px 28px; }
.pg-amen li { display: flex; align-items: center; gap: 12px; font-family: var(--font-body); font-size: 16px; color: var(--cream); }
.pg-amen svg { color: var(--teal-pale); flex: none; width: 19px; height: 19px; }
@media (max-width: 760px) { .pg-amen { grid-template-columns: 1fr; } }

/* mosaic reuse for stay page (matches ed-stay__mosaic but standalone) */
.pg-mosaic { margin-top: clamp(40px, 5vw, 72px); display: grid; grid-template-columns: repeat(6, 1fr); grid-auto-rows: 160px; gap: 14px; grid-auto-flow: row dense; }
.pg-mosaic figure { margin: 0; position: relative; overflow: hidden; border-radius: 4px; background: #0c2429; }
.pg-mosaic img { width: 100%; height: 100%; object-fit: cover; transition: transform 1000ms var(--ease-swell); }
.pg-mosaic figure:hover img { transform: scale(1.05); }
.pg-mosaic figcaption { position: absolute; left: 12px; bottom: 10px; color: #fff; font-family: var(--font-display); font-style: italic; font-size: 16px; opacity: 0; transform: translateY(6px); transition: opacity 300ms var(--ease-swell), transform 300ms var(--ease-swell); text-shadow: 0 1px 10px rgba(0,0,0,0.6); }
.pg-mosaic figure:hover figcaption { opacity: 1; transform: translateY(0); }
/* m0: hero anchor; m1+m2: stacked right pair; m3/m4+: 3-per-row */
.pg-mosaic .m0 { grid-column: span 3; grid-row: span 2; }
.pg-mosaic .m1, .pg-mosaic .m2 { grid-column: span 3; }
.pg-mosaic .m3, .pg-mosaic .m4 { grid-column: span 2; }
/* any extra photos beyond the first 5: fill 3 per row */
.pg-mosaic figure:nth-child(n+6) { grid-column: span 2; }
@media (max-width: 860px) {
  .pg-mosaic { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 140px; }
  .pg-mosaic .m0, .pg-mosaic .m1, .pg-mosaic .m2 { grid-column: span 2; }
  .pg-mosaic .m3, .pg-mosaic .m4 { grid-column: span 1; }
  .pg-mosaic figure:nth-child(n+6) { grid-column: span 1; }
}

/* ---------------------------------------------------------
   PRICING — package cards, comparison, occupancy
--------------------------------------------------------- */
.pg-pkgs { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(16px, 2vw, 24px); margin-top: clamp(40px, 5vw, 72px); align-items: start; }
.pg-pkg {
  position: relative; display: flex; flex-direction: column; overflow: hidden;
  background: rgba(255,255,255,0.035); border: 1px solid rgba(255,255,255,0.12);
  border-radius: 22px;
  transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell), border-color 320ms var(--ease-swell);
}
.pg-pkg:hover { transform: translateY(-5px); box-shadow: 0 26px 64px rgba(0,0,0,0.42); border-color: rgba(255,255,255,0.2); }
.pg-pkg.is-feat { border-color: rgba(238,106,71,0.55); box-shadow: 0 0 0 1px rgba(238,106,71,0.35), 0 26px 64px rgba(0,0,0,0.4); }
.pg-pkg__fig { position: relative; aspect-ratio: 16/10; overflow: hidden; background: #0c2429; }
.pg-pkg__fig img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 1200ms var(--ease-swell); }
.pg-pkg:hover .pg-pkg__fig img { transform: scale(1.05); }
/* combined Surf & Wingfoil card: slow crossfade between the wing shot (base)
   and the surf shot (overlay), looping like a slow tide. */
.pg-pkg__fig-alt { opacity: 0; animation: pkgCrossfade 9s var(--ease-swell) infinite; }
@keyframes pkgCrossfade {
  0%, 38%   { opacity: 0; }
  50%, 88%  { opacity: 1; }
  100%      { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .pg-pkg__fig-alt { animation: none; opacity: 0; }
}
.pg-pkg__fig::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,22,28,0.1) 0%, rgba(8,22,28,0.55) 100%); }
.pg-pkg__ribbon {
  position: absolute; top: 16px; right: 16px; z-index: 2;
  display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px;
  background: var(--coral); color: var(--on-accent);
  font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase;
}
.pg-pkg__tag {
  position: absolute; left: 18px; bottom: 16px; z-index: 2;
  font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: #fff;
  display: inline-flex; align-items: center; gap: 9px;
}
.pg-pkg__tag::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--coral); box-shadow: 0 0 0 3px var(--coral-glow); }
.pg-pkg__body { padding: clamp(26px, 2.6vw, 36px); display: flex; flex-direction: column; flex: 1; }
.pg-pkg__name { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); line-height: 1.0; color: #fff; }
.pg-pkg__desc { margin: 12px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: rgba(249,245,233,0.74); }
.pg-pkg__price { margin: 24px 0 0; padding: 20px 0 0; border-top: 1px solid rgba(255,255,255,0.14); display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
/* dual occupancy rates */
.pg-pkg__rates { display: flex; flex-direction: column; gap: 16px; width: 100%; }
.pg-pkg__rate { display: flex; flex-direction: column; gap: 6px; }
.pg-pkg__rate + .pg-pkg__rate { padding-top: 15px; border-top: 1px solid rgba(255,255,255,0.1); }
.pg-pkg__rk { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-pale); }
.pg-pkg__rrow { display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; }
.pg-pkg__rrow .pg-pkg__amount { font-size: calc(clamp(34px, 3.4vw, 46px) * var(--m-num, 1)); }
.pg-pkg__from { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-pkg__amount { font-family: var(--font-display); font-weight: 400; font-size: calc(clamp(40px, 4vw, 56px) * var(--m-num, 1)); line-height: 0.85; color: #fff; }
.pg-pkg__amount sup { font-size: 0.42em; top: -1.1em; margin-right: 1px; color: rgba(249,245,233,0.7); }
.pg-pkg__unit { font-family: var(--font-body); font-size: 13px; color: rgba(249,245,233,0.7); }
.pg-pkg__occ { margin-top: 8px; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.04em; color: rgba(249,245,233,0.55); }
.pg-pkg__custom { font-family: var(--font-display); font-style: italic; font-size: clamp(28px, 2.6vw, 38px); color: var(--teal-pale); line-height: 1; }
.pg-pkg__list { list-style: none; margin: clamp(30px, 3.4vw, 44px) 0 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.pg-pkg__list li { display: grid; grid-template-columns: 20px 1fr; gap: 12px; align-items: start; font-family: var(--font-body); font-size: 16px; line-height: 1.45; color: var(--cream); }
.pg-pkg__list svg { width: 18px; height: 18px; color: var(--coral); margin-top: 2px; }
.pg-pkg__btn { margin-top: 28px; }
.pg-pkg__btn .btn { width: 100%; justify-content: center; }
@media (max-width: 920px) { .pg-pkgs { grid-template-columns: 1fr; max-width: 480px; margin-left: auto; margin-right: auto; } }

.pg-pricenote { margin-top: clamp(26px, 3vw, 40px); text-align: center; font-family: var(--font-body); font-size: 13px; letter-spacing: 0.04em; color: rgba(249,245,233,0.6); }
.pg-pricenote b { color: var(--teal-pale); font-weight: 500; }

/* comparison matrix */
.pg-cmp-scroll { margin-top: clamp(36px, 4vw, 60px); overflow-x: auto; -webkit-overflow-scrolling: touch; }
.pg-cmp { width: 100%; min-width: 620px; border-collapse: collapse; }
.pg-cmp thead th { text-align: center; padding: 0 0 20px; vertical-align: bottom; }
.pg-cmp thead th.lbl { text-align: left; }
.pg-cmp__col { font-family: var(--font-display); font-weight: 400; font-size: clamp(18px, 1.8vw, 24px); color: #fff; line-height: 1.05; }
.pg-cmp__col .pg-cmp__sub { display: block; font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); margin-top: 6px; }
.pg-cmp__col.is-feat { color: var(--coral); }
.pg-cmp__head { font-family: var(--font-body); font-size: 12px; font-weight: 500; letter-spacing: 0.26em; text-transform: uppercase; color: var(--teal-pale); }
.pg-cmp tbody td { padding: 16px 10px; border-top: 1px solid rgba(255,255,255,0.13); text-align: center; }
.pg-cmp tbody td.lbl { text-align: left; font-family: var(--font-body); font-size: 16px; color: var(--cream); width: 46%; }
.pg-cmp tbody tr:hover td { background: rgba(255,255,255,0.025); }
.pg-cmp__yes { color: var(--coral); display: inline-flex; }
.pg-cmp__no { color: rgba(255,255,255,0.2); display: inline-flex; }
.pg-cmp td.is-featcol { background: rgba(238,106,71,0.06); }
@media (max-width: 768px) {
  /* Fit the matrix to the phone/narrow window instead of forcing horizontal
     scroll. table-layout:fixed + explicit column widths is ESSENTIAL: with auto
     layout the long label column collapses the three icon columns to the
     checkmark width, so the wider header words ("Surf/Both/Wing") overflow
     to the right and run off-screen. Fixed widths keep each header centered
     squarely above its column. */
  .pg-cmp-scroll { overflow-x: visible; }
  .pg-cmp { min-width: 0; width: 100%; table-layout: fixed; }
  .pg-cmp thead th.lbl, .pg-cmp tbody td.lbl { width: 43%; }
  .pg-cmp thead th:not(.lbl), .pg-cmp tbody td:not(.lbl) { width: 19%; }
  .pg-cmp__col { font-size: 15px; overflow-wrap: break-word; }
  .pg-cmp__col .pg-cmp__sub { display: none; }    /* sub-labels are the width hogs */
  .pg-cmp__head { font-size: 12px; letter-spacing: 0.12em; }
  .pg-cmp thead th { padding-bottom: 14px; }
  .pg-cmp tbody td { padding: 13px 2px; }
  .pg-cmp tbody td.lbl { font-size: 13px; line-height: 1.3; padding-right: 10px; }
  .pg-cmp__yes svg, .pg-cmp__no svg { width: 17px; height: 17px; }
}

/* comparison CTA — closes the table with a next step */
.pg-cmp-cta {
  margin-top: clamp(32px, 4vw, 56px); padding-top: clamp(28px, 3vw, 40px);
  border-top: 1px solid rgba(255, 255, 255, 0.14);
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 22px 44px;
}
.pg-cmp-cta__line {
  margin: 0; font-family: var(--font-display); font-style: italic; font-weight: 400;
  font-size: var(--disp-small); line-height: 1.3; color: #fff; max-width: 32ch; text-wrap: balance;
}
.pg-cmp-cta__btns { display: flex; flex-wrap: wrap; gap: 14px; }

/* occupancy table */
.pg-occ { margin-top: clamp(36px, 4vw, 60px); border-top: 1.5px solid rgba(255,255,255,0.5); }
.pg-occ__row { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: clamp(12px,2vw,28px); align-items: baseline; padding: 22px 4px; border-bottom: 1px solid rgba(255,255,255,0.14); }
.pg-occ__row--head span { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-occ__row--head { padding: 0 4px 14px; }
.pg-occ__pkg { font-family: var(--font-display); font-size: var(--disp-small); color: #fff; line-height: 1; }
.pg-occ__pkg small { display: block; font-family: var(--font-body); font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--teal-pale); margin-top: 7px; }
.pg-occ__val { font-family: var(--font-display); font-style: italic; font-size: var(--disp-small); color: var(--coral); }
.pg-occ__val small { font-family: var(--font-body); font-style: normal; font-size: 12px; letter-spacing: 0.04em; color: rgba(249,245,233,0.55); display: block; margin-top: 5px; }
.pg-occ__val.is-req { color: var(--teal-pale); font-size: clamp(17px,1.6vw,21px); }
@media (max-width: 680px) {
  .pg-occ__row, .pg-occ__row--head { grid-template-columns: 1fr 0.7fr 0.7fr; gap: 12px; }
  .pg-occ__pkg { font-size: 18px; }
}

/* find-us map — full-bleed photo with white island outline (NIHI-style) */
.pg-find { position: relative; overflow: hidden; background: var(--night); }
.pg-find__bg { position: absolute; inset: 0; background-size: cover; background-position: center; }
.pg-find__veil { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(6,29,40,0.82) 0%, rgba(6,29,40,0.42) 50%, rgba(6,29,40,0.72) 100%), linear-gradient(180deg, rgba(6,29,40,0.3) 0%, rgba(6,29,40,0) 30%, rgba(6,29,40,0.45) 100%); }
.pg-find__inner { position: relative; z-index: 2; max-width: 1320px; margin: 0 auto; padding: clamp(60px,7vw,110px) clamp(20px,4vw,56px); display: grid; grid-template-columns: 1.08fr 0.92fr; gap: clamp(28px,4vw,72px); align-items: center; min-height: 86vh; }
.pg-find__map { width: 100%; }
.pg-find__svg { width: 100%; height: auto; display: block; overflow: visible; }
.pg-find__outline { fill: rgba(255,255,255,0.045); stroke: #fff; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.pg-find__lead { stroke: rgba(255,255,255,0.72); stroke-width: 1.3; fill: none; }
.pg-find__lead.is-primary { stroke: #fff; stroke-width: 1.7; }
.pg-find__node { fill: #fff; }
.pg-find__node-ring { fill: none; stroke: rgba(255,255,255,0.85); stroke-width: 1.5; }
.pg-find__swell-ring { fill: rgba(255,255,255,0.2); }
.pg-find__lbl { font-family: var(--font-body); font-weight: 600; font-size: 13px; letter-spacing: 0.16em; fill: #fff; }
.pg-find__lbl--swell { font-size: 17px; letter-spacing: 0.2em; }
.pg-find__lbl tspan.t { fill: var(--teal-pale); }
.pg-find__lbl tspan.t--c { fill: var(--coral); }
.pg-find__country { font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.34em; fill: rgba(255,255,255,0.4); text-anchor: middle; }
.pg-find__h { font-family: var(--font-display); font-weight: 400; font-size: var(--disp-hero); line-height: 0.94; letter-spacing: -0.02em; color: #fff; margin: 0; text-wrap: balance; }
.pg-find__h i { font-style: italic; color: var(--teal-pale); }
.pg-find__p { margin: 26px 0 0; font-family: var(--font-body); font-weight: 300; font-size: clamp(17px,1.4vw,20px); line-height: 1.6; color: rgba(249,245,233,0.9); max-width: 46ch; }
.pg-find__actions { margin-top: 38px; display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }
.pg-find__round { width: 64px; height: 64px; border-radius: 50%; background: rgba(255,255,255,0.1); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.5); color: #fff; display: flex; align-items: center; justify-content: center; transition: background 240ms var(--ease-swell), transform 240ms var(--ease-swell); }
.pg-find__round:hover { background: var(--coral); box-shadow: inset 0 0 0 1px var(--coral); transform: rotate(-8deg); }
.pg-find__round svg { width: 24px; height: 24px; }
@media (max-width: 940px) {
  .pg-find__inner { grid-template-columns: 1fr; min-height: 0; gap: 40px; }
  .pg-find__map { max-width: 540px; }
}

/* reassurance band */
.pg-assure { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(20px,3vw,44px); margin-top: clamp(8px,1vw,8px); }
.pg-assure__item { display: flex; flex-direction: column; gap: 8px; padding-top: 26px; border-top: 1px solid rgba(255,255,255,0.16); }
.pg-assure__ico { width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: rgba(238,106,71,0.13); color: var(--coral); box-shadow: inset 0 0 0 1px rgba(238,106,71,0.42); }
.pg-assure__t { font-family: var(--font-display); font-size: var(--disp-small); color: #fff; line-height: 1.05; margin-top: 6px; }
.pg-assure__d { font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: rgba(249,245,233,0.7); }
@media (max-width: 820px) { .pg-assure { grid-template-columns: 1fr; } }

/* ============================================================
   JOURNAL — blog overview (dark editorial, matches siblings)
   ============================================================ */
.jr-feat-head { margin-bottom: clamp(26px, 3vw, 40px); }
.jr-feat { display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(24px, 3.5vw, 56px); align-items: center; text-decoration: none; }
.jr-feat__media { position: relative; aspect-ratio: 4/3; border-radius: 18px; overflow: hidden; background: #0c2429; }
.jr-feat__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 600ms var(--ease-swell); }
.jr-feat:hover .jr-feat__media img { transform: scale(1.04); }
.jr-feat__cat, .jr-card__cat {
  position: absolute; left: 16px; top: 14px;
  font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: #fff;
  background: rgba(8,28,33,0.5); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  padding: 7px 12px; border-radius: 999px; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16);
}
.jr-feat__meta, .jr-card__meta { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-pale); }
.jr-feat__t { font-family: var(--font-display); font-weight: 400; font-size: var(--disp-head); line-height: 1.0; color: #fff; margin: 16px 0 0; }
.jr-feat__t i { font-style: italic; color: var(--teal-pale); }
.jr-feat__ex { font-family: var(--font-body); font-weight: 300; font-size: 18px; line-height: 1.6; color: rgba(249,245,233,0.78); margin: 18px 0 0; max-width: 52ch; }
.jr-feat__more { display: inline-flex; align-items: center; gap: 10px; margin-top: 24px; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: #fff; }
.jr-feat__more svg { transition: transform 240ms var(--ease-swell); }
.jr-feat:hover .jr-feat__more svg { transform: translateX(4px); }
@media (max-width: 860px) { .jr-feat { grid-template-columns: 1fr; } }

.jr-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(18px, 2vw, 28px); margin-top: clamp(36px, 4vw, 56px); }
.jr-card { display: flex; flex-direction: column; text-decoration: none; background: rgba(255,255,255,0.035); border: 1px solid rgba(255,255,255,0.12); border-radius: 16px; overflow: hidden; transition: transform 320ms var(--ease-swell), border-color 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell); }
.jr-card:hover { transform: translateY(-4px); border-color: rgba(255,255,255,0.2); box-shadow: 0 22px 56px rgba(0,0,0,0.4); }
.jr-card__media { position: relative; aspect-ratio: 16/10; background: #0c2429; overflow: hidden; }
.jr-card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 600ms var(--ease-swell); }
.jr-card:hover .jr-card__media img { transform: scale(1.05); }
.jr-card__body { display: flex; flex-direction: column; flex: 1; padding: clamp(20px, 1.6vw, 26px); }
.jr-card__meta { margin-bottom: 12px; }
.jr-card__t { font-family: var(--font-display); font-weight: 400; font-size: 24px; line-height: 1.08; color: #fff; margin: 0; }
.jr-card__ex { font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: rgba(249,245,233,0.7); margin: 12px 0 0; }
.jr-card__more { margin-top: auto; padding-top: 18px; display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.jr-card:hover .jr-card__more { color: #fff; }
@media (max-width: 960px) { .jr-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 620px) { .jr-grid { grid-template-columns: 1fr; } }

/* ============================================================
   BLOG DETAIL — article (light reading surface, 2 designs)
   ============================================================ */
.art-main { background: var(--cream); color: var(--ink); }
.art-prog { position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 250; background: rgba(13,28,32,0.08); }
.art-prog span { display: block; height: 100%; background: var(--coral); transform-origin: left; transform: scaleX(0); }
/* whole-page variant (interior pages + home): transparent track so the coral
   fill reads cleanly over the nav whether it's transparent or solid. */
.art-prog--page { background: transparent; height: 3px; }

.art-kicker { font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.28em; text-transform: uppercase; color: var(--teal-deep); display: inline-flex; align-items: center; gap: 12px; }
.art-kicker::before { content: ""; width: 26px; height: 1px; background: currentColor; }
.art-title { font-family: var(--font-display); font-weight: 400; letter-spacing: -0.02em; color: var(--ink); margin: 0; }
.art-title i { font-style: italic; color: var(--teal-deep); }
.art-dek { font-family: var(--font-body); font-weight: 300; color: var(--ink-soft); }
.art-back { display: flex; width: fit-content; align-items: center; gap: 8px; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: 22px; transition: color 200ms var(--ease-swell); }
.art-back:hover { color: var(--teal-deep); }

.art-byline { display: flex; align-items: center; gap: 14px; margin-top: 26px; }
.art-ava { width: 46px; height: 46px; flex: none; border-radius: 50%; background: var(--teal-deep); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 18px; }
.art-byline__by { font-family: var(--font-body); font-weight: 500; font-size: 15px; color: var(--ink); }
.art-byline__role { color: var(--ink-soft); font-weight: 400; }
.art-byline__meta { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.08em; color: var(--ink-soft); margin-top: 3px; }
.art-byline--light .art-byline__by { color: #fff; }
.art-byline--light .art-byline__role, .art-byline--light .art-byline__meta { color: rgba(255,255,255,0.72); }
.art-byline--light .art-ava { background: rgba(255,255,255,0.16); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.3); }

.art-lead { font-family: var(--font-body); font-weight: 400; font-size: 22px; line-height: 1.6; color: var(--ink); margin: 0 0 22px; }
.art-p { font-family: var(--font-body); font-weight: 400; font-size: 18px; line-height: 1.72; color: var(--ink-soft); margin: 0 0 20px; text-wrap: pretty; }
.art-pull { margin: clamp(34px, 5vw, 56px) 0; padding: 4px 0 4px 28px; border-left: 3px solid var(--coral); font-family: var(--font-display); font-style: italic; font-size: var(--disp-small); line-height: 1.3; color: var(--ink); }

.art-myth { padding-top: clamp(34px, 4vw, 52px); scroll-margin-top: 92px; }
.art-myth__head { display: flex; gap: 18px; align-items: flex-start; margin-bottom: 18px; }
.art-myth__n { font-family: var(--font-display); font-style: italic; font-size: calc(clamp(40px, 5vw, 60px) * var(--m-num, 1)); line-height: 0.8; color: var(--teal-300); flex: none; }
.art-myth__n--final { font-style: normal; color: var(--coral); display: inline-flex; align-items: center; }
.art-myth__tag { display: block; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase; color: var(--teal-deep); margin-bottom: 6px; }
.art-h2 { font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); line-height: 1.08; color: var(--ink); margin: 0; }
.art-figure { margin: 24px 0 4px; border-radius: 14px; overflow: hidden; }

/* Design A — centered column */
.art--col .art-top { padding: clamp(96px, 12vh, 140px) var(--gutter) clamp(28px, 3vw, 40px); }
.art--col .art-top__inner { max-width: 760px; margin: 0 auto; }
.art--col .art-title { font-size: var(--disp-head); line-height: 0.98; margin: 18px 0 0; }
.art--col .art-dek { font-size: clamp(18px, 1.8vw, 22px); line-height: 1.5; margin: 22px 0 0; max-width: 46ch; }
.art-hero-img { max-width: 1120px; margin: 0 auto; padding: 0 var(--gutter); }
.art-hero-img img { width: 100%; aspect-ratio: 21/9; object-fit: cover; border-radius: 18px; display: block; }
.art-wrap { padding: clamp(40px, 5vw, 68px) var(--gutter) clamp(20px, 4vw, 40px); }
.art-col { max-width: 880px; margin: 0 auto; }
/* Hybrid reads under a full-bleed hero — give it a wider measure so the
   column doesn't look stranded beneath the photo. */
.art--hybrid .art-wrap { padding-top: clamp(48px, 5vw, 76px); }
.art--hybrid .art-col { max-width: 1180px; }
.art-toc-inline { margin-bottom: clamp(32px, 4vw, 48px); padding: 22px 24px; background: var(--paper-2); border-radius: 14px; }
.art-toc-inline__lbl { font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase; color: var(--ink-soft); }
.art-toc-inline ol { list-style: none; margin: 14px 0 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px; }
.art-toc-inline a { display: flex; align-items: baseline; gap: 10px; padding: 8px 0; font-family: var(--font-body); font-size: 15px; color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--hairline); transition: color 200ms var(--ease-swell); }
.art-toc-inline a:hover { color: var(--teal-deep); }
.art-toc-inline b { font-family: var(--font-display); font-style: italic; font-size: 15px; color: var(--teal-300); width: 22px; flex: none; }
@media (max-width: 560px) { .art-toc-inline ol { grid-template-columns: 1fr; } }

/* Design B — guide with sticky sidebar */
.art-hero-b { position: relative; min-height: min(64vh, 560px); display: flex; overflow: hidden; background: var(--night); isolation: isolate; }
.art-hero-b__bg { position: absolute; inset: 0; background-size: cover; background-position: center; transform: scale(1.05); animation: pg-hero-drift 16s var(--ease-swell) forwards; }
.art-hero-b__veil { position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(6,29,40,0.5) 0%, rgba(6,29,40,0.15) 40%, rgba(6,29,40,0.85) 100%); }
.art-hero-b__inner { position: relative; z-index: 2; align-self: flex-end; width: 100%; max-width: 1180px; margin: 0 auto; padding: clamp(110px, 16vh, 150px) var(--gutter) clamp(36px, 5vw, 56px); }
.art-hero-b .art-title { color: #fff; font-size: var(--disp-head); line-height: 0.98; margin: 16px 0 0; max-width: 18ch; }
.art-hero-b .art-title i { color: var(--teal-pale); }
.art-kicker--light { color: var(--teal-pale); }
.art-dek--light { color: rgba(249,245,233,0.86); }
.art-back--light { color: rgba(255,255,255,0.8); }
.art-back--light:hover { color: #fff; }
.art-hero-b .art-dek { font-size: clamp(17px, 1.6vw, 20px); margin: 20px 0 0; max-width: 50ch; }

.art-guide-grid { max-width: 1180px; margin: 0 auto; padding: clamp(40px, 5vw, 72px) var(--gutter); display: grid; grid-template-columns: 248px 1fr; gap: clamp(40px, 5vw, 80px); align-items: start; }
.art-rail__sticky { position: sticky; top: 92px; }
.art-rail__lbl { font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: 14px; }
.art-toc { display: flex; flex-direction: column; }
.art-toc a { display: flex; gap: 11px; align-items: baseline; padding: 9px 0 9px 14px; margin-left: -2px; font-family: var(--font-body); font-size: 15px; line-height: 1.3; color: var(--ink-soft); text-decoration: none; border-left: 2px solid transparent; transition: color 200ms var(--ease-swell), border-color 200ms var(--ease-swell); }
.art-toc a:hover { color: var(--ink); }
.art-toc a.is-active { color: var(--teal-deep); border-left-color: var(--coral); }
.art-toc a.is-sub { padding-left: 26px; font-size: 13px; color: var(--ink-soft); }
.art-toc a.is-sub.is-active { color: var(--teal-deep); }
.art-toc__t { flex: 1; }
.art-rail__scroll { max-height: calc(100vh - 230px); overflow-y: auto; margin: 0 -4px; padding: 0 4px; scrollbar-width: thin; }
.art-rail__scroll::-webkit-scrollbar { width: 6px; }
.art-rail__scroll::-webkit-scrollbar-thumb { background: var(--hairline); border-radius: 6px; }
.art-rail__prog { height: 3px; border-radius: 999px; background: var(--hairline); margin-top: 18px; overflow: hidden; }
.art-rail__prog span { display: block; height: 100%; background: var(--coral); transform-origin: left; }
.art-guide__body { max-width: 680px; }
.art--guide .art-myth:first-of-type { padding-top: 0; }
@media (max-width: 900px) { .art-guide-grid { grid-template-columns: 1fr; } .art-rail { display: none; } }

/* related reading */
.art-related { background: var(--paper-2); padding: clamp(56px, 7vw, 96px) 0; }
.art-related__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: clamp(28px, 3vw, 40px); }
.art-related__all { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--teal-deep); text-decoration: none; white-space: nowrap; }
.art-related__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(18px, 2vw, 28px); }
.art-rel { display: flex; flex-direction: column; text-decoration: none; background: #fff; border-radius: 16px; overflow: hidden; box-shadow: var(--shadow-sm); transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell); }
.art-rel:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
.art-rel__media { aspect-ratio: 16/10; overflow: hidden; }
.art-rel__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 600ms var(--ease-swell); }
.art-rel:hover .art-rel__media img { transform: scale(1.05); }
.art-rel__body { padding: 20px 22px 24px; }
.art-rel__cat { font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-deep); }
.art-rel__t { font-family: var(--font-display); font-weight: 400; font-size: 24px; line-height: 1.1; color: var(--ink); margin: 10px 0 0; }
@media (max-width: 760px) { .art-related__grid { grid-template-columns: 1fr; } .art-related__head { flex-direction: column; align-items: flex-start; gap: 14px; } }

/* ---- inline contents (Column design) ---- */
.wp-toc { margin: 0 0 clamp(32px, 4vw, 48px); padding: 24px 26px; background: var(--paper-2); border-radius: 14px; }
.wp-toc__lbl { font-family: var(--font-body); font-weight: 500; font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase; color: var(--ink-soft); }
.wp-toc ol { list-style: none; margin: 12px 0 0; padding: 0; columns: 2; column-gap: 36px; counter-reset: toc; }
.wp-toc li { break-inside: avoid; }
.wp-toc li.is-sub { padding-left: 16px; }
.wp-toc a { display: block; padding: 8px 0; font-family: var(--font-body); font-size: 15px; line-height: 1.35; color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--hairline); transition: color 200ms var(--ease-swell); }
.wp-toc li.is-sub a { font-size: 13px; color: var(--ink-soft); }
.wp-toc a:hover { color: var(--teal-deep); }
@media (max-width: 620px) { .wp-toc ol { columns: 1; } }

/* ============================================================
   WORDPRESS POST BODY — generic styling for pasted WP HTML
   ============================================================ */
.wp { font-family: var(--font-body); color: var(--ink-soft); }
.wp > *:first-child { margin-top: 0; }
.wp p { font-size: 18px; line-height: 1.72; margin: 0 0 20px; color: var(--ink-soft); text-wrap: pretty; }
.wp h2 {
  font-family: var(--font-display); font-weight: 400; color: var(--ink);
  font-size: var(--disp-sub); line-height: 1.06; letter-spacing: -0.01em;
  margin: clamp(44px, 5.5vw, 68px) 0 18px; padding-top: clamp(26px, 3vw, 36px);
  border-top: 1px solid var(--hairline); scroll-margin-top: 92px;
}
.wp h3 {
  font-family: var(--font-display); font-weight: 400; color: var(--ink);
  font-size: var(--disp-small); line-height: 1.14;
  margin: 36px 0 14px; scroll-margin-top: 92px; display: flex; align-items: baseline; gap: 12px;
}
.wp h3::before { content: ""; flex: none; width: 22px; height: 2px; background: var(--coral); transform: translateY(-6px); }
.wp h4 { font-family: var(--font-display); font-weight: 400; color: var(--ink); font-size: 20px; margin: 28px 0 10px; }
.wp strong { color: var(--ink); font-weight: 600; }
.wp em { font-style: italic; }
.wp a { color: var(--teal-deep); text-decoration: underline; text-underline-offset: 1.5px; text-decoration-thickness: 1px; transition: color 200ms var(--ease-swell); }
.wp a:hover { color: var(--coral-deep); }

/* Kill the "double underline" on journal/blog posts. Every body link is also
   tagged `.swell-link` by the swell_decorate_links() filter, whose reversed-mode
   pseudo-element underline (coral `::after` bar + faint `::before` hairline)
   would otherwise stack a SECOND, orange line under the native `.wp a`
   underline. Inside `.wp`, drop the `.swell-link` pseudo-underlines so links
   keep just the single clean native underline (teal at rest, coral on hover). */
.wp a.swell-link::before,
.wp a.swell-link::after { content: none; display: none; }

/* Option 2 — reversed: no underline at rest, underline wipes in from the
   left on hover (and color shifts to coral). Matches the brand link spec. */
.art-main[data-links="hover"] .wp a {
  text-decoration: none;
  background-image: linear-gradient(currentColor, currentColor);
  background-size: 0% 1px; background-position: 0 100%; background-repeat: no-repeat;
  padding-bottom: 1.5px;
  transition: background-size 220ms var(--ease-swell), color 200ms var(--ease-swell);
}
.art-main[data-links="hover"] .wp a:hover { color: var(--coral-deep); background-size: 100% 1px; }
.art-main[data-links="hover"] .wp a:has(> img) { background-image: none; padding-bottom: 0; }

/* Reversed (matches the main-site link spec): coral underline + teal text sit
   at rest; hovering relaxes the underline back to a faint hairline. */
.art-main[data-links="reversed"] .wp a {
  text-decoration: underline;
  text-decoration-color: var(--coral-deep);
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  color: var(--teal-deep);
  transition: text-decoration-color 220ms var(--ease-swell), color 200ms var(--ease-swell);
}
.art-main[data-links="reversed"] .wp a:hover { text-decoration-color: color-mix(in oklab, currentColor 24%, transparent); }
.art-main[data-links="reversed"] .wp a:has(> img) { text-decoration: none; }
.art-main[data-surface="dark"][data-links="reversed"] .wp a { color: var(--teal-pale); }
.wp ul, .wp ol { margin: 0 0 22px; padding: 0; }
.wp ul { list-style: none; }
.wp ul li { position: relative; padding-left: 26px; margin: 0 0 11px; font-size: 17px; line-height: 1.6; color: var(--ink-soft); }
.wp ul li::before { content: ""; position: absolute; left: 3px; top: 11px; width: 7px; height: 7px; border-radius: 50%; background: var(--teal); }
.wp ol { list-style: decimal; padding-left: 22px; }
.wp ol li { margin: 0 0 11px; font-size: 17px; line-height: 1.6; color: var(--ink-soft); padding-left: 6px; }
.wp blockquote {
  margin: clamp(32px, 4vw, 48px) 0; padding: 6px 0 6px 28px; border-left: 3px solid var(--coral);
  font-family: var(--font-display); font-style: italic; font-size: var(--disp-small);
  line-height: 1.32; color: var(--ink);
}
/* Content images honour their own dimensions and the classic-editor alignment
   classes (alignleft / alignright / aligncenter, [caption]) instead of being
   forced to full column width. The old `.wp img { width:100% }` rule upscaled
   small inline icons (e.g. 25px check/cross marks) to giant full-width images
   and destroyed every text-wrap float in legacy posts. */
.wp img { max-width: 100%; height: auto; }
.wp figure { margin: 28px 0; }
.wp a:has(> img) { text-decoration: none; }

/* Solo (unaligned) images and image links: their own line, centred, soft
   corners. :only-child counts elements only, so paragraphs that mix an inline
   icon with label text are excluded via :not([class*="align"]). */
.wp p > img:only-child:not([class*="align"]),
.wp p > a:only-child > img { display: block; margin: 22px auto; border-radius: 14px; }
.wp p > a:only-child:has(> img) { display: block; }

/* WordPress alignment classes (classic-editor floats). */
.wp .alignnone { display: block; margin: 22px 0; }
.wp .aligncenter { display: block; margin-left: auto; margin-right: auto; }
.wp img.alignright, .wp .wp-caption.alignright { float: right; margin: 4px 0 14px 22px; }
.wp img.alignleft,  .wp .wp-caption.alignleft  { float: left;  margin: 4px 22px 14px 0; }

/* Classic [caption] shortcode blocks. */
.wp .wp-caption { max-width: 100%; }
.wp .wp-caption img { display: block; border-radius: 14px; }
.wp .wp-caption-text { margin-top: 8px; font-size: 15px; line-height: 1.5; font-style: italic; color: var(--ink-soft); }

/* New sections clear any floated image sitting above them. */
.wp h2, .wp h3 { clear: both; }
.wp iframe { width: 100%; aspect-ratio: 16 / 9; height: auto; border: 0; border-radius: 14px; margin: 28px 0; display: block; }
.wp hr { border: 0; border-top: 1px solid var(--hairline); margin: 36px 0; }

/* ============================================================
   DARK READING SURFACE — deep ocean-night variant.
   Applies to whichever article layout is active. The Guide hero
   already reads dark; this restyles the body, contents and the
   related rail so the whole read sits on var(--night-2).
   ============================================================ */
.art-main[data-surface="dark"] { background: var(--night-2); color: rgba(244,238,227,0.9); }

/* body type */
.art-main[data-surface="dark"] .wp { color: rgba(228,234,233,0.74); }
.art-main[data-surface="dark"] .wp p,
.art-main[data-surface="dark"] .wp ul li,
.art-main[data-surface="dark"] .wp ol li { color: rgba(228,234,233,0.74); }
.art-main[data-surface="dark"] .wp h2,
.art-main[data-surface="dark"] .wp h3,
.art-main[data-surface="dark"] .wp h4 { color: #fff; }
.art-main[data-surface="dark"] .wp h2 { border-top-color: rgba(255,255,255,0.14); }
.art-main[data-surface="dark"] .wp strong { color: #fff; }
.art-main[data-surface="dark"] .wp a { color: var(--teal-pale); }
.art-main[data-surface="dark"] .wp a:hover { color: var(--coral); }
.art-main[data-surface="dark"] .wp blockquote { color: #fff; }
.art-main[data-surface="dark"] .wp ul li::before { background: var(--teal-300); }
.art-main[data-surface="dark"] .wp hr { border-top-color: rgba(255,255,255,0.14); }

/* inline contents (Column / Hybrid) */
.art-main[data-surface="dark"] .wp-toc { background: rgba(255,255,255,0.05); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.09); }
.art-main[data-surface="dark"] .wp-toc__lbl { color: rgba(255,255,255,0.55); }
.art-main[data-surface="dark"] .wp-toc a { color: rgba(232,238,238,0.86); border-bottom-color: rgba(255,255,255,0.1); }
.art-main[data-surface="dark"] .wp-toc li.is-sub a { color: rgba(232,238,238,0.6); }
.art-main[data-surface="dark"] .wp-toc a:hover { color: var(--teal-pale); }

/* Column-layout light header, now on dark */
.art-main[data-surface="dark"] .art-title { color: #fff; }
.art-main[data-surface="dark"] .art-title i { color: var(--teal-pale); }
.art-main[data-surface="dark"] .art--col .art-dek { color: rgba(228,234,233,0.72); }
.art-main[data-surface="dark"] .art--col .art-kicker { color: var(--teal-pale); }
.art-main[data-surface="dark"] .art--col .art-back { color: rgba(255,255,255,0.7); }
.art-main[data-surface="dark"] .art--col .art-back:hover { color: #fff; }
.art-main[data-surface="dark"] .art--col .art-byline__by { color: #fff; }
.art-main[data-surface="dark"] .art--col .art-byline__meta,
.art-main[data-surface="dark"] .art--col .art-byline__role { color: rgba(255,255,255,0.62); }
.art-main[data-surface="dark"] .art--col .art-ava { background: rgba(255,255,255,0.14); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.28); }

/* guide sidebar rail on dark */
.art-main[data-surface="dark"] .art-rail__lbl { color: rgba(255,255,255,0.5); }
.art-main[data-surface="dark"] .art-toc a { color: rgba(228,234,233,0.62); }
.art-main[data-surface="dark"] .art-toc a:hover { color: #fff; }
.art-main[data-surface="dark"] .art-toc a.is-active { color: var(--teal-pale); }

/* related rail on dark */
.art-main[data-surface="dark"] .art-related { background: rgba(0,0,0,0.22); }
.art-main[data-surface="dark"] .art-related .ed-kicker { color: var(--teal-pale); }
.art-main[data-surface="dark"] .art-related__all { color: var(--teal-pale); }
.art-main[data-surface="dark"] .art-rel { background: var(--night-2); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08); }
.art-main[data-surface="dark"] .art-rel:hover { box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16), 0 18px 44px rgba(0,0,0,0.45); }
.art-main[data-surface="dark"] .art-rel__t { color: #fff; }
.art-main[data-surface="dark"] .art-rel__cat { color: var(--teal-pale); }

/* reading-progress track is darker on dark */
.art-main[data-surface="dark"] .art-prog { background: rgba(255,255,255,0.1); }

/* Match original swell-prose body size (19px) — .wp defaults to 17.5px */
.art-main .wp p,
.art-main .wp ul li,
.art-main .wp ol li { font-size: 19px; }

/* ============================================================
   ARTICLE COLUMN TOP BAR — surface toggle sits here (top-right)
   ============================================================ */
.art-col__bar {
  position: sticky; top: 130px; z-index: 100;
  display: flex; justify-content: flex-end;
  padding: 10px 0;
  pointer-events: none; /* let content scroll freely behind it */
  margin-bottom: clamp(14px, 2vw, 22px);
}
.art-surface-btn {
  pointer-events: all;
  flex: none; box-sizing: border-box;
  display: inline-flex; align-items: center; justify-content: center;
  width: 34px; height: 34px; padding: 0; overflow: hidden;
  border-radius: 50%;
  background: color-mix(in oklab, var(--paper-2, #f0ebe0) 88%, transparent);
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
  border: 1px solid var(--hairline);
  font-size: 0; line-height: 0;
  color: var(--ink-soft); cursor: pointer;
  opacity: 0.85;
  transition: background 200ms var(--ease-swell), color 200ms var(--ease-swell), opacity 200ms var(--ease-swell);
}
.art-surface-btn:hover { background: var(--sand-200, #efe5d1); color: var(--ink); opacity: 1; }
.art-surface-btn:focus-visible { opacity: 1; outline: 2px solid var(--teal-deep, #0f9a9a); outline-offset: 2px; }
.art-surface-btn svg { display: block; width: 15px; height: 15px; }
/* Icon-only: show the sun on a dark surface (click → go light) */
.art-surface-btn__light { display: none;        align-items: center; justify-content: center; line-height: 0; }
.art-surface-btn__dark  { display: inline-flex; align-items: center; justify-content: center; line-height: 0; }
/* On light surface: swap to the moon icon (click → go dark) */
.art-main[data-surface="light"] .art-surface-btn__light { display: none; }
.art-main[data-surface="light"] .art-surface-btn__dark  { display: inline-flex; }
/* On dark surface: show the sun icon (click → go light) */
.art-main[data-surface="dark"] .art-surface-btn__dark  { display: none; }
.art-main[data-surface="dark"] .art-surface-btn__light { display: inline-flex; }
/* Dark surface button colours */
.art-main[data-surface="dark"] .art-surface-btn {
  background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.14);
  color: rgba(255,255,255,0.6);
}
.art-main[data-surface="dark"] .art-surface-btn:hover {
  background: rgba(255,255,255,0.14); color: #fff;
}

/* ============================================================
   INLINE TOC — .swell-toc inside .wp-toc
   Manual counter so H3 sub-items don't break the sequence.
   Higher specificity (.wp-toc ol.swell-toc) beats .wp-toc ol { columns:2 }.
   ============================================================ */
.wp-toc ol.swell-toc {
  list-style: none;
  counter-reset: swell-toc swell-sub;
  margin: 14px 0 0; padding: 0;
  columns: 1;
}
.wp-toc ol.swell-toc > li:not(.is-sub) { counter-increment: swell-toc; counter-reset: swell-sub; }
.wp-toc ol.swell-toc li.is-sub { counter-increment: swell-sub; }
.wp-toc ol.swell-toc a {
  display: block; /* override .wp-toc a { display:flex } */
  padding: 9px 0;
  font-family: var(--font-body); font-size: 15px; line-height: 1.4;
  text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--ink); text-decoration: none;
  border-bottom: 1px solid var(--hairline);
  transition: color 200ms var(--ease-swell);
}
.wp-toc ol.swell-toc > li:not(.is-sub) > a::before {
  content: counter(swell-toc) ".  ";
  color: var(--teal-deep); font-weight: 500;
}
.wp-toc ol.swell-toc li.is-sub { padding-left: 22px; }
.wp-toc ol.swell-toc li.is-sub > a::before {
  content: counter(swell-toc) "." counter(swell-sub) ".  ";
  color: var(--teal-deep); font-weight: 500;
}
.wp-toc ol.swell-toc a:hover { color: var(--teal-deep); }
.wp-toc ol.swell-toc a.is-active { color: var(--teal-deep); font-weight: 500; }

/* Dark surface */
.art-main[data-surface="dark"] .wp-toc ol.swell-toc a { color: rgba(232,238,238,0.86); border-bottom-color: rgba(255,255,255,0.1); }
.art-main[data-surface="dark"] .wp-toc ol.swell-toc a:hover { color: #fff; }
.art-main[data-surface="dark"] .wp-toc ol.swell-toc a.is-active { color: var(--teal-pale); }
.art-main[data-surface="dark"] .wp-toc ol.swell-toc > li:not(.is-sub) > a::before { color: var(--teal-pale); }
.art-main[data-surface="dark"] .wp-toc ol.swell-toc li.is-sub > a::before { color: var(--teal-pale); }

/* Related journal at foot: always dark regardless of article surface */
.art-main .swell-related { background: var(--night-2); }
.art-main .swell-related .ed-h2 { color: #fff; }
.art-main .swell-related .ed-h2 i { color: var(--teal-pale); }
.art-main .swell-related .ed-kicker--icon .ed-klabel { color: var(--teal-pale); }
.art-main .swell-related .ed-kicker--icon .ed-kicon { background: rgba(238,106,71,0.15); }
.art-main .swell-related .ed-morelink { color: #fff; }
.art-main .swell-related .ed-morelink__label::after { background: #fff; }

/* ============================================================
   CONTACT — "get a personal quote": human note + inline wizard
   ============================================================ */
.pg-getquote { display: grid; grid-template-columns: minmax(300px, 0.8fr) minmax(0, 1.2fr); gap: clamp(32px, 4vw, 72px); align-items: start; }
.pg-quote__aside { padding-top: 6px; }
.pg-quote__h { color: #fff; margin: 18px 0 0; }
.pg-quote__lead { margin-top: 20px; max-width: 42ch; }

/* host mini-card — portrait slot + signature */
.pg-host { display: grid; grid-template-columns: 92px 1fr; gap: 20px; align-items: center; margin-top: clamp(32px, 4vw, 44px); padding-top: clamp(28px, 3vw, 36px); border-top: 1px solid rgba(255,255,255,0.14); }
.pg-host__photo { width: 92px; height: 110px; border-radius: 16px; overflow: hidden; box-shadow: var(--shadow-md, 0 16px 40px rgba(0,0,0,0.35)); }
.pg-host__photo image-slot { width: 100%; height: 100%; display: block; }
.pg-host__by { display: flex; flex-direction: column; gap: 4px; }
.pg-host__name { font-family: var(--font-display); font-size: 26px; color: #fff; line-height: 1; }
.pg-host__role { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--teal-pale); }
.pg-host__sig { font-family: var(--font-display); font-style: italic; font-size: 18px; color: rgba(249,245,233,0.82); margin-top: 6px; }

/* reply promise */
.pg-promise { display: flex; gap: 14px; align-items: flex-start; margin-top: 26px; padding: 18px 20px; border-radius: 14px; background: rgba(238,106,71,0.08); box-shadow: inset 0 0 0 1px rgba(238,106,71,0.28); }
.pg-promise svg { color: var(--coral); flex: none; margin-top: 2px; }
.pg-promise p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: var(--cream); }
.pg-promise b { color: #fff; font-weight: 600; }

/* aggregate review badge */
.pg-trust { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-top: 24px; }
.pg-trust__score { display: inline-flex; align-items: center; gap: 10px; }
.pg-trust__score .ed-rev__stars { color: var(--sun-400, #f4c14a); display: inline-flex; gap: 2px; }
.pg-trust__num { font-family: var(--font-display); font-size: 26px; color: #fff; line-height: 1; }
.pg-trust__num small { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.06em; color: rgba(249,245,233,0.6); }
.pg-trust__src { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.1em; color: var(--teal-pale); }

/* the white quote card (reuses .bk-* form styles) */
.pg-quote-card { background: #fff; border-radius: 22px; padding: clamp(28px, 3vw, 44px); box-shadow: 0 30px 80px rgba(6,29,40,0.42); }
.pg-quote-card .bk-head { padding-right: 0; }
.pg-quote-card .bk-step h3 { font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); line-height: 1.05; color: var(--ink); margin: 14px 0 0; }
.pg-quote-card .bk-step > p { font-family: var(--font-body); font-size: 15px; line-height: 1.6; color: var(--ink-soft); margin: 10px 0 0; }
.pg-quote-card__foot { display: flex; align-items: center; gap: 9px; margin: 22px 0 0; padding-top: 18px; border-top: 1px solid var(--hairline); font-family: var(--font-body); font-size: 12px; line-height: 1.5; color: var(--ink-soft); }
.pg-quote-card__foot svg { color: var(--teal-deep); flex: none; }

/* success state */
.pg-quote__done { text-align: center; padding: clamp(18px, 3vw, 38px) 8px; animation: bkFade 360ms var(--ease-swell); }
.pg-quote__donemark { width: 64px; height: 64px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: rgba(15,154,154,0.12); color: var(--teal-deep); box-shadow: inset 0 0 0 1px rgba(15,154,154,0.4); }
.pg-quote__done h3 { font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); color: var(--ink); margin: 20px 0 0; }
.pg-quote__done > p { font-family: var(--font-body); font-size: 16px; line-height: 1.6; color: var(--ink-soft); margin: 14px auto 0; max-width: 40ch; }
.pg-quote__done b { color: var(--ink); font-weight: 600; }
.pg-quote__spam { display: inline-flex; align-items: center; gap: 9px; margin-top: 18px; padding: 11px 16px; border-radius: 999px; background: rgba(13,28,32,0.05); font-size: 13px !important; color: var(--ink-soft); }
.pg-quote__spam svg { color: var(--teal-deep); flex: none; }
.pg-quote__done .bk-back { margin: 22px auto 0; }

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

/* ---- one-column variant — intro → form → trust band, stacked ---- */
.pg-getquote--one { display: flex; flex-direction: column; align-items: stretch; gap: clamp(40px, 5vw, 60px); }
/* intro row — left-aligned, two columns: host panel left, copy right */
.pg-getquote--one .pg-quote__intro {
  width: 100%; display: grid;
  grid-template-columns: minmax(280px, 0.65fr) minmax(0, 1.35fr);
  column-gap: clamp(32px, 5vw, 72px); text-align: left;
}
.pg-getquote--one .pg-quote__intro > .ed-kicker { grid-column: 2; }
.pg-getquote--one .pg-quote__h { grid-column: 2; margin-top: 18px; line-height: 1.06; text-wrap: balance; }
.pg-getquote--one .pg-quote__lead { grid-column: 2; max-width: 52ch; }
/* Clare — a tinted panel filling the left column */
.pg-getquote--one .pg-host {
  grid-column: 1; grid-row: 1 / 4; align-self: stretch; justify-self: stretch;
  display: flex; flex-direction: column; justify-content: center; align-items: flex-start; gap: 20px;
  background: var(--night-2); border-radius: 22px;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08);
  padding: clamp(26px, 3vw, 40px);
  border-top: 0; margin-top: 0; text-align: left;
}
.pg-getquote--one .pg-host__photo { width: 116px; height: 138px; }
.pg-getquote--one .pg-quote-card { width: 100%; }
@media (max-width: 880px) {
  .pg-getquote--one .pg-quote__intro { grid-template-columns: 1fr; }
  /* reset explicit grid-column: 2 so items actually stack in a single column */
  .pg-getquote--one .pg-quote__intro > .ed-kicker,
  .pg-getquote--one .pg-quote__h,
  .pg-getquote--one .pg-quote__lead { grid-column: 1; }
  .pg-getquote--one .pg-host {
    grid-column: 1; grid-row: auto; order: -1;
    justify-self: stretch; margin-top: 0; margin-bottom: 8px;
    flex-direction: row; align-items: center; gap: 18px;
    padding: clamp(20px, 4vw, 28px);
  }
  .pg-getquote--one .pg-host__photo { width: 76px; height: 92px; }
}

/* trust band — ruled three-up strip */
.pg-trustband {
  width: 100%; display: grid; grid-template-columns: repeat(3, 1fr);
  border-top: 1px solid rgba(255,255,255,0.14); border-bottom: 1px solid rgba(255,255,255,0.14);
  padding: clamp(22px, 3vw, 32px) 0;
}
.pg-trustband__cell { display: flex; flex-direction: column; align-items: center; gap: 9px; text-align: center; padding: 0 clamp(14px, 2vw, 28px); }
.pg-trustband__cell + .pg-trustband__cell { border-left: 1px solid rgba(255,255,255,0.14); }
.pg-trustband__big { display: inline-flex; align-items: baseline; gap: 10px; font-family: var(--font-display); font-size: calc(clamp(26px, 2.6vw, 34px) * var(--m-num, 1)); line-height: 1; color: #fff; }
.pg-trustband__big small { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.06em; color: rgba(249,245,233,0.6); }
.pg-trustband__big .ed-rev__stars { color: var(--sun-400, #f4c14a); display: inline-flex; gap: 2px; align-self: center; }
.pg-trustband__cap { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--teal-pale); }
@media (max-width: 720px) {
  .pg-trustband { grid-template-columns: 1fr; gap: 18px; }
  .pg-trustband__cell + .pg-trustband__cell { border-left: 0; border-top: 1px solid rgba(255,255,255,0.14); padding-top: 18px; }
}

/* ---- inline quote form — cleaner, friendlier controls ---------- */
/* named 3-step progress tracker */
.qf-top { display: flex; flex-direction: column; gap: 18px; }
.qf-eyebrow { font-family: var(--font-body); font-size: 12px; font-weight: 600; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-deep); }
.qf-prog { display: flex; align-items: center; gap: 10px; }
.qf-prog__step { display: flex; align-items: center; gap: 9px; flex: 0 0 auto; }
.qf-prog__line { flex: 1 1 auto; height: 1.5px; border-radius: 2px; background: var(--hairline); transition: background 320ms var(--ease-swell); }
.qf-prog__line.is-done { background: var(--teal); }
.qf-prog__dot { width: 26px; height: 26px; flex: none; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-body); font-size: 13px; font-weight: 600; color: var(--ink-soft); background: rgba(13,28,32,0.06); box-shadow: inset 0 0 0 1px var(--hairline); transition: all 240ms var(--ease-swell); }
.qf-prog__lbl { font-family: var(--font-body); font-size: 13px; font-weight: 500; color: var(--ink-soft); transition: color 240ms var(--ease-swell); }
.qf-prog__step.is-on .qf-prog__dot { background: var(--teal); color: #fff; box-shadow: 0 0 0 4px rgba(15,154,154,0.14); }
.qf-prog__step.is-on .qf-prog__lbl { color: var(--ink); font-weight: 600; }
.qf-prog__step.is-done .qf-prog__dot { background: var(--teal-deep); color: #fff; box-shadow: none; }
.qf-prog__step.is-done .qf-prog__lbl { color: var(--teal-deep); }
@media (max-width: 420px) { .qf-prog__lbl { display: none; } .qf-prog { gap: 8px; } }

.pg-quote-card .qf-form { margin-top: 24px; }

/* teal chips (flexibility) */
.qf-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.qf-chip { padding: 10px 16px; border-radius: 999px; border: 1px solid var(--hairline); background: #fff; font-family: var(--font-body); font-size: 15px; color: var(--ink); cursor: pointer; transition: border-color 180ms var(--ease-swell), background 180ms var(--ease-swell), color 180ms var(--ease-swell); }
.qf-chip:hover { border-color: var(--teal); }
.qf-chip.is-active { background: var(--teal); border-color: var(--teal); color: #fff; }

/* segmented control (group size) */
.qf-seg { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; padding: 4px; border-radius: 12px; background: rgba(13,28,32,0.05); }
.qf-seg__btn { padding: 12px 8px; border: 0; border-radius: 9px; background: transparent; font-family: var(--font-body); font-size: 15px; color: var(--ink-soft); cursor: pointer; transition: background 160ms var(--ease-swell), color 160ms var(--ease-swell), box-shadow 160ms var(--ease-swell); }
.qf-seg__btn:hover { color: var(--ink); }
.qf-seg__btn.is-active { background: #fff; color: var(--teal-deep); font-weight: 600; box-shadow: 0 1px 3px rgba(13,28,32,0.14); }

/* icon-led option rows (activities) */
.qf-opts { display: flex; flex-direction: column; gap: 8px; }
.qf-opt { display: flex; align-items: center; gap: 14px; width: 100%; text-align: left; padding: 12px 14px; border-radius: 12px; border: 1px solid var(--hairline); background: #fff; cursor: pointer; transition: border-color 160ms var(--ease-swell), background 160ms var(--ease-swell), box-shadow 160ms var(--ease-swell); }
.qf-opt:hover { border-color: var(--teal); background: rgba(15,154,154,0.03); }
.qf-opt__ico { width: 38px; height: 38px; flex: none; border-radius: 10px; display: flex; align-items: center; justify-content: center; background: rgba(15,154,154,0.09); color: var(--teal-deep); transition: background 160ms var(--ease-swell), color 160ms var(--ease-swell); }
.qf-opt__txt { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.qf-opt__txt b { font-family: var(--font-body); font-size: 15px; font-weight: 600; color: var(--ink); }
.qf-opt__txt small { font-family: var(--font-body); font-size: 12px; color: var(--ink-soft); }
.qf-opt__check { width: 22px; height: 22px; flex: none; border-radius: 50%; border: 1.5px solid var(--hairline); display: flex; align-items: center; justify-content: center; color: #fff; transition: background 160ms var(--ease-swell), border-color 160ms var(--ease-swell); }
.qf-opt__check svg { opacity: 0; transition: opacity 160ms var(--ease-swell); }
.qf-opt.is-active { border-color: var(--teal); background: rgba(15,154,154,0.06); box-shadow: inset 0 0 0 1px var(--teal); }
.qf-opt.is-active .qf-opt__ico { background: var(--teal); color: #fff; }
.qf-opt.is-active .qf-opt__check { background: var(--teal); border-color: var(--teal); }
.qf-opt.is-active .qf-opt__check svg { opacity: 1; }

/* field niceties */
.qf-block { margin-top: 24px; display: flex; flex-direction: column; gap: 11px; }
.qf-label { font-family: var(--font-body); font-size: 12px; font-weight: 600; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-soft); }
.qf-optional { font-size: 12px; font-weight: 500; letter-spacing: 0.16em; text-transform: uppercase; color: var(--teal-deep); background: rgba(15,154,154,0.1); padding: 2px 8px; border-radius: 999px; margin-left: 6px; }


/* ============================================================
   BODY WEIGHT — match the home page's Jost prose (weight 350)
   across every interior page. Leads/paragraphs reuse .ed-lead /
   .ed-para (already 350); this aligns the remaining reading copy
   (card descriptions, list detail, excerpts) and removes the
   stray 300-weight outliers. Eyebrows/labels keep their weight.
   ============================================================ */
.pg-level__d,
.pg-day__body p,
.pg-inc p,
.pg-trip__d,
.pg-pkg__desc,
.pg-pkg__list li,
.pg-pool__lead,
.pg-air__use,
.pg-assure__d,
.pg-promise p,
.pg-cmp tbody td.lbl,
.pg-feature__list .lbl,
.pg-poolchips--inline .ch,
.pg-poolchips--ticks .ch,
.pg-poolchips--ruled .ch,
.pg-find__p,
.jr-feat__ex,
.jr-card__ex,
.art-dek {
  font-weight: 400;
}

/* mobile: bump Jost body/reading copy +1.5px for small screens */
@media (max-width: 600px) {
  .pg-feature__list .lbl,
  .pg-level__d,
  .pg-day__body p,
  .pg-inc h3, .pg-inc p,
  .pg-trip__d,
  .pg-poolchips--inline .ch,
  .pg-poolchips--ticks .ch,
  .pg-poolchips--ruled .ch,
  .pg-air__use,
  .pg-amen li,
  .pg-pkg__desc,
  .pg-pkg__list li,
  .pg-cmp tbody td.lbl,
  .pg-assure__d,
  .jr-card__ex,
  .pg-promise p { font-size: 18px; }
  .art-lead { font-size: 22px; }
  .art-p { font-size: 19px; }
}



/* FAQ page — questions grouped into labelled categories (template-faq.php). */
.pg-faqgroups { display: flex; flex-direction: column; gap: clamp(40px, 5vw, 68px); }
.pg-faqgroup__t {
	display: flex; align-items: baseline; gap: 14px;
	margin: 0; padding-bottom: 14px;
	font-family: var(--font-display); font-weight: 400; font-size: var(--disp-small);
	line-height: 1; color: #fff;
	border-bottom: 1px solid rgba(255, 255, 255, 0.16);
}
.pg-faqgroup__t span {
	font-family: var(--font-body); font-style: italic; font-size: 15px;
	letter-spacing: 0.04em; color: var(--coral); flex: none;
}
.ed-faq__cta { margin-top: 28px; }

/* Getting Here — illustrated Cabarete coastline map (template-parts/getting-here-map.php). */
.swell-map { margin-top: clamp(28px, 4vw, 48px); }
.swell-map svg {
	display: block; width: 100%; height: auto;
	border-radius: 16px;
	box-shadow: 0 2px 8px rgba(10, 31, 36, 0.08);
}
/* Swell marker ripple — animates the two .swell-ripple circles inside the SVG. */
@keyframes swellRipple { 0% { r: 9; opacity: 0.7; } 100% { r: 28; opacity: 0; } }
.swell-map .swell-ripple { animation: swellRipple 2.8s cubic-bezier(0.22, 1, 0.36, 1) infinite; }
.swell-map .swell-ripple-2 { animation-delay: 1.4s; }
@media (prefers-reduced-motion: reduce) { .swell-map .swell-ripple { animation: none; opacity: 0; } }


/* =========================================================
   PRICING REDESIGN — Learn-to-Surf single offer
   (shared .pg-season / .pg-pkg__amount etc. already defined above)
   ========================================================= */

/* Hero "from" price chip */
.pg-hero__price { display: inline-flex; flex-direction: column; gap: 2px; margin-top: clamp(18px, 2vw, 26px); padding: 12px 18px; border-radius: 14px; background: rgba(8,28,33,0.42); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.18); width: fit-content; }
.pg-hero__pricefig { font-family: var(--font-display); font-weight: 400; font-size: calc(clamp(26px, 3vw, 38px) * var(--m-num, 1)); line-height: 1; color: #fff; }
.pg-hero__pricefig sup { font-size: 0.5em; top: -0.7em; margin: 0 1px 0 4px; color: rgba(255,255,255,0.75); }
.pg-hero__pricemeta { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.04em; color: rgba(249,245,233,0.7); }

/* package heading row — title left, season toggle aligned right */
.pg-package-head { display: flex; align-items: center; justify-content: space-between; gap: clamp(24px, 4vw, 64px); flex-wrap: wrap; }
.pg-package-head .pg-head { margin: 0; max-width: none; }
.pg-package-head .pg-season { margin-top: 0; align-items: flex-end; flex: 0 0 auto; }
.pg-package-head--solo { justify-content: flex-start; } /* No season toggle: heading sits left on its own. */
.pg-season__note.pg-season__note--below { width: fit-content; margin: 16px 0 0 auto; max-width: 56ch; text-align: left; text-wrap: balance; }
@media (max-width: 760px) {
  .pg-package-head { align-items: flex-start; }
  .pg-package-head .pg-season { align-items: flex-start; }
  .pg-season__note.pg-season__note--below { margin-left: 0; max-width: none; width: auto; }
}

/* THE OFFER — single feature card (photo left, price panel right) */
.pg-offer { display: grid; grid-template-columns: 1.02fr 0.98fr; margin-top: clamp(26px, 3vw, 40px); background: rgba(255,255,255,0.04); border: 1px solid rgba(238,106,71,0.5); box-shadow: 0 0 0 1px rgba(238,106,71,0.22), 0 30px 72px rgba(0,0,0,0.44); border-radius: 22px; overflow: hidden; }
.pg-offer__fig { position: relative; min-height: 460px; background: #0c2429; overflow: hidden; }
.pg-offer__fig img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 1400ms var(--ease-swell); }
.pg-offer:hover .pg-offer__fig img { transform: scale(1.04); }
/* keep the crossfade: the .pg-offer__fig img rule above would otherwise win on `transition` */
.pg-offer__fig .pg-slider__img { transition: opacity 900ms var(--ease-swell), transform 1400ms var(--ease-swell); }
.pg-offer__fig::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,22,28,0.04) 0%, rgba(8,22,28,0.5) 100%); }
.pg-offer__ribbon { position: absolute; top: 22px; left: 26px; z-index: 2; display: inline-flex; align-items: center; gap: 8px; padding: 9px 15px; border-radius: 999px; background: rgba(8,28,33,0.5); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.2); color: #fff; font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; }
.pg-offer__ribbon svg { color: var(--coral); }
.pg-offer__cap { position: absolute; left: clamp(18px, 2.2vw, 24px); bottom: clamp(18px, 2.2vw, 24px); z-index: 2; width: fit-content; max-width: min(80%, 360px); padding: 13px 17px 14px; border-radius: 16px; background: rgba(13, 53, 55, 0.46); -webkit-backdrop-filter: blur(14px) saturate(135%); backdrop-filter: blur(14px) saturate(135%); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.18), 0 14px 34px rgba(0,0,0,0.3); }
.pg-offer__cap-eyebrow { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: #fff; }
.pg-offer__cap-eyebrow svg { color: var(--coral); flex: none; }
.pg-offer__cap-text { margin: 9px 0 0; max-width: 32ch; font-family: var(--font-body); font-size: 15px; line-height: 1.45; color: rgba(255,255,255,0.92); }
.pg-offer__panel { padding: clamp(28px, 3vw, 46px); display: flex; flex-direction: column; }
.pg-offer__name { margin: 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-title); line-height: 1; color: #fff; }
.pg-offer__desc { margin: 13px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: rgba(249,245,233,0.74); max-width: 42ch; }
/* price block — two occupancy figures side by side (single / double), icon labels */
.pg-price { margin-top: clamp(22px, 2.4vw, 30px); padding-top: clamp(20px, 2.2vw, 26px); border-top: 1px solid rgba(255,255,255,0.14); display: grid; grid-template-columns: 1fr 1fr; }
.pg-price__col { display: flex; flex-direction: column; gap: 12px; padding-inline: clamp(22px, 3vw, 44px); }
.pg-price__col:first-child { padding-left: 0; }
.pg-price__col:last-child { padding-right: 0; border-left: 1px solid rgba(255,255,255,0.08); }
.pg-price__id { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; font-family: var(--font-body); font-size: 12px; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: var(--teal-pale); }
.pg-price__id svg { color: var(--teal-pale); flex: none; }
.pg-price__fig { display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; }
.pg-price__from { font-family: var(--font-body); font-size: 12px; font-weight: 600; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(249,245,233,0.55); }
.pg-price__amount { font-family: var(--font-display); font-weight: 400; font-size: calc(clamp(40px, 4.2vw, 56px) * var(--m-num, 1)); line-height: 0.82; color: #fff; }
.pg-price__amount sup { font-size: 0.36em; top: -1.2em; margin-right: 1px; color: rgba(249,245,233,0.7); }
.pg-price__unit { font-family: var(--font-body); font-size: 13px; letter-spacing: 0.02em; color: var(--teal-pale); }
@media (max-width: 560px) {
  .pg-price { grid-template-columns: 1fr; }
  .pg-price__col { padding-inline: 0; }
  .pg-price__col:last-child { padding-top: 22px; border-left: none; border-top: 1px solid rgba(255,255,255,0.12); }
}
.pg-offer__cta { margin-top: auto; padding-top: clamp(34px, 4vw, 52px); display: flex; flex-direction: column; align-items: flex-start; gap: 13px; }
.pg-offer__cta .btn { width: auto; align-self: flex-start; }
.pg-offer__fine { display: inline-flex; align-items: flex-start; gap: 8px; justify-content: flex-start; text-align: left; font-family: var(--font-body); font-size: 13px; letter-spacing: 0.02em; color: rgba(249,245,233,0.62); }
.pg-offer__fine svg { color: var(--teal-pale); flex: none; margin-top: 2px; }
.pg-offer__gap { flex: none; height: clamp(20px, 2.6vw, 36px); }
.pg-offer__fine--foot { align-self: stretch; margin-top: 2px; padding-top: clamp(15px, 1.8vw, 20px); border-top: 1px solid rgba(255,255,255,0.1); }
@media (max-width: 880px) { .pg-offer { grid-template-columns: 1fr; } .pg-offer__fig { min-height: 300px; } }

/* INLINE QUOTE REVEAL — the package CTA slides the enquiry form open in place.
   Collapsed via grid-template-rows: 0fr → 1fr (animatable height) plus a soft
   fade + lift; visibility flips so the form is out of the tab order when closed. */
.pg-quote-reveal { display: grid; grid-template-rows: 0fr; margin-top: 0; opacity: 0; visibility: hidden; transition: grid-template-rows 0.6s var(--ease-swell), margin-top 0.6s var(--ease-swell), opacity 0.45s ease, visibility 0s linear 0.6s; scroll-margin-top: clamp(80px, 12vh, 120px); }
.pg-quote-reveal__inner { overflow: hidden; min-height: 0; }
.pg-quote-reveal__card { position: relative; transform: translateY(16px); transition: transform 0.6s var(--ease-swell); }
.pg-quote-reveal.is-open { grid-template-rows: 1fr; margin-top: clamp(22px, 2.8vw, 40px); opacity: 1; visibility: visible; transition: grid-template-rows 0.6s var(--ease-swell), margin-top 0.6s var(--ease-swell), opacity 0.5s ease 0.08s, visibility 0s; }
.pg-quote-reveal.is-open .pg-quote-reveal__card { transform: none; }
.pg-quote-reveal__card .pg-quote-card__intro { margin: 10px 0 0; font-family: var(--font-body); font-size: 15px; line-height: 1.6; color: var(--ink-soft); max-width: 60ch; }
.pg-quote-reveal__close { position: absolute; top: 16px; right: 16px; z-index: 2; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; padding: 0; border: 0; border-radius: 50%; background: rgba(13,28,32,0.06); color: var(--ink); cursor: pointer; transition: background 0.2s ease, transform 0.25s var(--ease-swell); }
.pg-quote-reveal__close:hover { background: rgba(13,28,32,0.12); transform: rotate(90deg); }
.pg-quote-reveal__close:focus-visible { outline: 2px solid var(--teal-deep); outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) {
	.pg-quote-reveal { transition: opacity 0.2s ease, visibility 0s; }
	.pg-quote-reveal__card { transform: none; transition: none; }
}

/* WHAT'S INCLUDED — grouped checklist */
.pg-incl { margin-top: clamp(34px, 4vw, 56px); display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(26px, 3vw, 52px); }
.pg-incl__group { display: flex; flex-direction: column; }
.pg-incl__gh { display: flex; align-items: center; gap: 11px; padding-bottom: 16px; margin-bottom: 20px; border-bottom: 1px solid rgba(255,255,255,0.16); font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-incl__gh svg { color: var(--coral); flex: none; }
.pg-incl__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 16px; }
.pg-incl__list li { display: grid; grid-template-columns: 20px 1fr; gap: 13px; align-items: start; font-family: var(--font-body); font-size: 16px; line-height: 1.48; color: var(--cream); }
.pg-incl__list svg { width: 18px; height: 18px; color: var(--coral); margin-top: 2px; flex: none; }
.pg-incl__list b { color: #fff; font-weight: 600; }
@media (max-width: 860px) { .pg-incl { grid-template-columns: 1fr; gap: 30px; } }
.pg-inline-cta { margin-top: clamp(34px, 4vw, 56px); padding-top: clamp(28px, 3vw, 40px); border-top: 1px solid rgba(255,255,255,0.14); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 22px 44px; }
.pg-inline-cta__line { margin: 0; font-family: var(--font-display); font-style: italic; font-weight: 400; font-size: var(--disp-small); line-height: 1.3; color: #fff; max-width: 34ch; text-wrap: balance; }

/* HOW BOOKING WORKS — 3-up route */
.pg-route { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; margin-top: clamp(20px, 3vw, 40px); }
.pg-route__step { position: relative; padding: 4px clamp(26px, 3.2vw, 50px); }
.pg-route__step:first-child { padding-left: 0; }
.pg-route__step:last-child { padding-right: 0; }
.pg-route__step + .pg-route__step::before { content: ""; position: absolute; left: 0; top: 8px; bottom: 8px; width: 1px; background: rgba(255,255,255,0.14); }
.pg-route__top { display: flex; align-items: center; gap: 14px; }
.pg-route__ico { width: 50px; height: 50px; border-radius: 14px; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; background: rgba(238,106,71,0.12); box-shadow: inset 0 0 0 1px rgba(238,106,71,0.42); color: var(--coral); transition: transform 320ms var(--ease-swell), background 320ms var(--ease-swell); }
.pg-route__step:hover .pg-route__ico { transform: translateY(-3px); background: rgba(238,106,71,0.2); }
.pg-route__n { font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-pale); }
.pg-route__t { margin: 24px 0 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-small); line-height: 1.05; color: #fff; }
.pg-route__d { margin: 12px 0 0; font-family: var(--font-body); font-size: 16px; line-height: 1.55; color: rgba(249,245,233,0.7); max-width: 34ch; }
@media (max-width: 820px) {
  .pg-route { grid-template-columns: 1fr; }
  .pg-route__step { padding: clamp(26px, 5vw, 34px) 0; }
  .pg-route__step:first-child { padding-top: 0; }
  .pg-route__step:last-child { padding-bottom: 0; }
  .pg-route__step + .pg-route__step::before { left: 0; right: 0; top: 0; bottom: auto; width: auto; height: 1px; }
  .pg-route__t { margin-top: 18px; }
  .pg-route__d { max-width: none; }
}
.pg-steps__cta { margin-top: clamp(30px, 3.4vw, 46px); display: flex; flex-wrap: wrap; align-items: center; gap: 16px 24px; }
.pg-steps__hint { margin: 0; font-family: var(--font-body); font-size: 13px; letter-spacing: 0.02em; color: rgba(249,245,233,0.6); }

/* ---------------------------------------------------------------
   Pricing — "Learn to Wingfoil" secondary card (.pg-second).
   Sits under the main Surf package card; deliberately quieter (no
   coral glow, ghost button, single price line).
--------------------------------------------------------------- */
.pg-second {
  margin-top: clamp(16px, 1.8vw, 24px);
  display: grid; grid-template-columns: 0.42fr 1fr; align-items: stretch;
  background: rgba(255,255,255,0.025);
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 16px; overflow: hidden;
  transition: border-color 320ms var(--ease-swell), background 320ms var(--ease-swell);
}
.pg-second:hover { border-color: rgba(120,200,200,0.34); background: rgba(255,255,255,0.04); }
.pg-second__fig { position: relative; min-height: 168px; background: #0c2429; overflow: hidden; }
.pg-second__fig img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; filter: saturate(0.92); transition: transform 1400ms var(--ease-swell); }
.pg-second:hover .pg-second__fig img { transform: scale(1.04); }
.pg-second__fig::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(8,22,28,0.1) 0%, rgba(8,22,28,0.46) 100%); }
.pg-second__body { padding: clamp(20px, 2.2vw, 30px); display: flex; align-items: center; justify-content: space-between; gap: clamp(20px, 3vw, 44px); flex-wrap: wrap; }
.pg-second__text { flex: 1 1 280px; }
.pg-second__eyebrow { display: inline-flex; align-items: center; gap: 8px; font-family: var(--font-body); font-weight: 600; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-second__eyebrow svg { color: var(--teal-pale); flex: none; }
.pg-second__name { margin: 11px 0 0; font-family: var(--font-display); font-weight: 400; font-size: var(--disp-sub); line-height: 1; color: var(--cream); }
.pg-second__desc { margin: 9px 0 0; font-family: var(--font-body); font-size: 15px; line-height: 1.52; color: rgba(249,245,233,0.68); max-width: 46ch; }
.pg-second__foot { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-start; gap: 16px; }
.pg-second__price { display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; }
.pg-second__from { font-family: var(--font-body); font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--teal-pale); }
.pg-second__amount { font-family: var(--font-display); font-weight: 400; font-size: calc(clamp(30px, 2.8vw, 40px) * var(--m-num, 1)); line-height: 0.85; color: #fff; }
.pg-second__amount sup { font-size: 0.42em; top: -1.1em; margin-right: 1px; color: rgba(249,245,233,0.7); }
.pg-second__unit { font-family: var(--font-body); font-size: 12px; color: rgba(249,245,233,0.66); }
.pg-second__btn.btn { height: 46px; }
@media (max-width: 720px) {
  .pg-second { grid-template-columns: 1fr; }
  .pg-second__fig { min-height: 160px; }
  .pg-second__foot { align-self: stretch; }
}

/* Split hero sub (tight SEO H1 + remainder) — reads as one paragraph. */
h1.pg-hero__sub { margin-bottom: 0; }
.pg-hero__sub--rest { margin-top: 8px; }

/* --- blog-convert.css --- */
/* ============================================================================
   Swell — Blog "Convert" section  ·  Three doorways (deep-ocean, parallax)
   ----------------------------------------------------------------------------
   Redesign of the end-of-article conversion block. A deep-ocean band that
   interrupts the sand reading surface and reads as an intentional "descent into
   the water": sand seams top/bottom, a coral filament along the top edge, a
   drifting contour texture, three photo "doorway" cards with frosted glass
   caption panels, and a conversion row (guest-review trust widget + primary
   "Plan your week" action).

   Motion (progressive enhancement, both disabled under prefers-reduced-motion):
     • Parallax  — on desktop the card imagery + contour texture translate/zoom
                   as the band scrolls (assets/js/scroll-fx.js, IMG/BG groups).
     • Focus-in  — the whole band resolves from blurred/offset to sharp as it
                   enters the viewport (assets/js/article.js adds .cx-reveal then
                   toggles .is-inview). The pre-state only exists once JS has
                   added .cx-reveal, so no-JS visitors see the final layout.

   Prefix: cx-.  Built on the theme's tokens (tokens.css): --coral-400/500/600,
   --teal-300, --sand-50, --radius-md, --shadow-xs, --ease-swell, --gutter,
   --font-display, --font-sans.
   ========================================================================== */

/* ---------------------------------------------------------------------------
   Section shell — full-width deep-ocean band.
   --------------------------------------------------------------------------- */
.cx-convert {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  color: #fff;
  background:
    radial-gradient(130% 90% at 82% -12%, rgba(15,154,154,0.28), transparent 55%),
    radial-gradient(120% 90% at 8% 8%, rgba(20,120,140,0.20), transparent 52%),
    linear-gradient(176deg, #0b2429 0%, #0c2a30 46%, #081e24 100%);
  padding: clamp(40px, 5vw, 76px) 0 clamp(36px, 4.5vw, 68px);
  margin: clamp(28px, 4vw, 56px) 0 0;
}

/* thin coral filament across the top edge — the section-break accent */
.cx-convert::before {
  content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px; z-index: 3;
  background: linear-gradient(90deg, transparent, rgba(238,106,71,0.7), transparent);
}

/* top + bottom horizon seams — sand melts into ocean and back */
.cx-seam { position: absolute; left: 0; right: 0; height: clamp(48px, 6vw, 90px); z-index: 0; pointer-events: none; }
.cx-seam--top    { top: 0;    background: linear-gradient(180deg, var(--sand-50) 0%, rgba(248,241,230,0) 100%); opacity: 0.14; }
.cx-seam--bottom { bottom: 0; background: linear-gradient(0deg,   var(--sand-50) 0%, rgba(248,241,230,0) 100%); opacity: 0.10; }

/* faint contour lines drifting behind everything — sun-on-water texture.
   Doubles as the desktop parallax background layer (scroll-fx.js BG group). */
.cx-contours {
  position: absolute; inset: -12% -6%; z-index: 0; opacity: 0.5; pointer-events: none;
  will-change: transform;
  background:
    repeating-radial-gradient(120% 120% at 78% 6%,
      rgba(164,211,200,0) 0 38px,
      rgba(164,211,200,0.05) 38px 39px,
      rgba(164,211,200,0) 39px 78px);
  -webkit-mask-image: radial-gradient(120% 100% at 78% 6%, #000, transparent 70%);
  mask-image: radial-gradient(120% 100% at 78% 6%, #000, transparent 70%);
}

.cx-wrap { position: relative; z-index: 1; max-width: 1180px; margin: 0 auto; padding: 0 var(--gutter); }

/* ---------------------------------------------------------------------------
   Focus-in reveal — applied to .cx-wrap once JS has flagged the band.
   The pre-state is scoped to .cx-reveal (added by JS) AND no-reduced-motion,
   so it can never hide content from no-JS or reduced-motion visitors.
   --------------------------------------------------------------------------- */
@media (prefers-reduced-motion: no-preference) {
  .cx-convert.cx-reveal .cx-wrap {
    opacity: 0;
    transform: translateY(30px) scale(0.985);
    filter: blur(14px);
    transition:
      opacity 0.9s var(--ease-swell),
      transform 1.1s var(--ease-swell),
      filter 1.1s var(--ease-swell);
    will-change: opacity, transform, filter;
  }
  .cx-convert.cx-reveal.is-inview .cx-wrap {
    opacity: 1;
    transform: none;
    filter: none;
  }
}

/* ---------------------------------------------------------------------------
   Editorial header — left-aligned
   --------------------------------------------------------------------------- */
.cx-head { max-width: none; }
.cx-eyebrow {
  display: inline-flex; align-items: center; gap: 12px;
  font-family: var(--font-sans); font-weight: 500; font-size: 11px;
  letter-spacing: 0.3em; text-transform: uppercase; color: var(--coral-400);
}
.cx-eyebrow::before { content: ""; width: 32px; height: 1px; background: currentColor; }
/* Pinned to DM Serif Display (always loaded via swell_fonts_url()) and sized
   to hold the headline on a single line at desktop widths. */
.cx-title {
  font-family: "DM Serif Display", var(--font-display); font-weight: 400;
  font-size: calc(clamp(26px, 3.2vw, 44px) * var(--h-mult, 1) * var(--m-head, 1));
  line-height: 1.0; letter-spacing: -0.02em;
  color: #fff; margin: 18px 0 0; text-wrap: balance;
}
.cx-title i { font-style: italic; color: var(--teal-300); }

/* ---------------------------------------------------------------------------
   Triptych of doorway cards
   --------------------------------------------------------------------------- */
.cx-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: clamp(16px, 1.8vw, 26px);
  margin-top: clamp(24px, 2.8vw, 38px);
}

/* 1/1 instead of 4/5 — 20% less tile height at the same width */
.cx-door {
  position: relative; display: block; text-decoration: none; color: #fff;
  border-radius: 20px; overflow: hidden; aspect-ratio: 1 / 1;
  isolation: isolate; background: #0b2429;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.09), 0 22px 56px rgba(0,0,0,0.5);
  transition: transform 0.55s var(--ease-swell), box-shadow 0.55s var(--ease-swell);
}
/* base scale keeps the image over-scanning the frame so the parallax translate
   (scroll-fx.js) never exposes a card edge. */
.cx-door__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scale(1.06); transform-origin: center; transition: transform 0.9s var(--ease-swell); }
.cx-door__veil { position: absolute; inset: 0; z-index: 1; background: linear-gradient(179deg, rgba(6,29,40,0.05) 20%, rgba(6,29,40,0.28) 46%, rgba(6,29,40,0.9) 100%); }

/* editorial index number, top-left */
.cx-door__idx {
  position: absolute; top: 16px; left: 20px; z-index: 3;
  font-family: var(--font-display); font-style: italic; font-weight: 400;
  font-size: 30px; line-height: 1; color: rgba(255,255,255,0.9);
  text-shadow: 0 1px 12px rgba(6,29,40,0.5);
}
/* frosted pin, top-right */
.cx-door__pin {
  position: absolute; top: 15px; right: 16px; z-index: 3;
  width: 38px; height: 38px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(13,53,55,0.4); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.28);
}
.cx-door__pin svg { width: 18px; height: 18px; color: #fff; }

/* frosted glass caption panel at the base — always legible */
.cx-door__panel {
  position: absolute; left: 12px; right: 12px; bottom: 12px; z-index: 2;
  padding: clamp(15px, 1.5vw, 20px) clamp(16px, 1.6vw, 20px) clamp(14px, 1.4vw, 18px);
  border-radius: 15px;
  background: linear-gradient(180deg, rgba(9,32,38,0.36), rgba(9,32,38,0.62));
  -webkit-backdrop-filter: blur(12px) saturate(130%); backdrop-filter: blur(12px) saturate(130%);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.14);
}
.cx-door__cat { font-family: var(--font-sans); font-weight: 600; font-size: 10px; letter-spacing: 0.22em; text-transform: uppercase; color: var(--teal-300); }
.cx-door__t { font-family: var(--font-display); font-weight: 400; font-size: var(--disp-small); line-height: 1.05; margin: 6px 0 0; }
.cx-door__d { font-family: var(--font-sans); font-weight: 400; font-size: 13px; line-height: 1.5; color: rgba(244,238,227,0.86); margin: 7px 0 0; }
.cx-door__go {
  display: inline-flex; align-items: center; gap: 8px; margin-top: 13px;
  font-family: var(--font-sans); font-weight: 600; font-size: 11px;
  letter-spacing: 0.14em; text-transform: uppercase; color: #fff;
  padding-bottom: 3px; position: relative;
}
.cx-door__go::after { content: ""; position: absolute; left: 0; bottom: 0; height: 1.5px; width: 100%; background: var(--coral-500); transform: scaleX(0.34); transform-origin: left; transition: transform 0.45s var(--ease-swell); }
.cx-door__go svg { width: 15px; height: 15px; color: var(--coral-400); transition: transform 0.4s var(--ease-swell); }

@media (hover: hover) {
  .cx-door:hover { transform: translateY(-8px); box-shadow: inset 0 0 0 1px rgba(164,211,200,0.4), 0 34px 76px rgba(0,0,0,0.6); }
  .cx-door:hover .cx-door__img { transform: scale(1.12); }
  .cx-door:hover .cx-door__go::after { transform: scaleX(1); }
  .cx-door:hover .cx-door__go svg { transform: translateX(5px); }
}
.cx-door:focus-visible { outline: 3px solid var(--coral-500); outline-offset: 3px; }

/* When scroll-fx drives the image (data-fxset), it owns the transform — drop the
   CSS base/hover transform so the two don't fight. The engine keeps the image
   over-scanned via its own scale (zoom range starts > 1). */
[data-scrollfx="tideline"] .cx-door__img[data-fxset] { transition: none; }
@media (hover: hover) {
  [data-scrollfx="tideline"] .cx-door:hover .cx-door__img[data-fxset] { transform: none; }
}

/* ---------------------------------------------------------------------------
   Conversion row — trust widget (left) + primary action (right)
   --------------------------------------------------------------------------- */
.cx-convert__row {
  display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap;
  gap: clamp(20px, 3vw, 40px);
  margin-top: clamp(30px, 3.6vw, 48px);
  padding-top: clamp(26px, 3vw, 38px);
  border-top: 1px solid rgba(255,255,255,0.14);
}

.cx-trust { display: inline-flex; align-items: center; gap: clamp(12px, 1.3vw, 16px); }
.cx-trust__faces { display: inline-flex; }
.cx-trust__face { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; border: 2px solid #0f2a30; }
.cx-trust__face + .cx-trust__face { margin-left: -13px; }
.cx-trust__rating { font-family: var(--font-display); font-weight: 400; font-size: 32px; line-height: 1; color: #fff; }
.cx-trust__meta { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.cx-trust__stars { display: inline-flex; gap: 2px; color: var(--coral-500); }
.cx-trust__stars svg { width: 15px; height: 15px; display: block; }
.cx-trust__src { font-family: var(--font-sans); font-size: 12.5px; line-height: 1.2; color: rgba(244,238,227,0.72); }
.cx-trust__src b { color: #fff; font-weight: 600; }

.cx-cta {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  font-family: var(--font-sans); font-weight: 600; font-size: 14px; letter-spacing: 0.04em;
  color: #fff; text-decoration: none; cursor: pointer;
  padding: 15px 26px; border-radius: var(--radius-md); border: 0;
  background: var(--coral-500); box-shadow: 0 12px 30px rgba(238,106,71,0.32);
  transition: background 0.3s var(--ease-swell), transform 0.2s var(--ease-swell), box-shadow 0.3s var(--ease-swell);
}
.cx-cta svg { width: 18px; height: 18px; }
.cx-cta:hover { background: var(--coral-600); box-shadow: 0 16px 38px rgba(238,106,71,0.42); }
.cx-cta:active { transform: scale(0.98); box-shadow: var(--shadow-xs); }
.cx-cta:focus-visible { outline: 3px solid #fff; outline-offset: 3px; }

/* ---------------------------------------------------------------------------
   Responsive
   --------------------------------------------------------------------------- */
@media (max-width: 900px) {
  .cx-grid { grid-template-columns: 1fr; max-width: 480px; }
  .cx-door { aspect-ratio: 2 / 1; }
}
@media (max-width: 620px) {
  .cx-convert__row { flex-direction: column; align-items: stretch; text-align: center; }
  .cx-trust { justify-content: center; }
  .cx-trust__meta { align-items: center; }
  .cx-cta { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .cx-door, .cx-door__img, .cx-door__go::after, .cx-door__go svg, .cx-cta { transition: none; }
}

/* --- style.css --- */
/*
Theme Name: Swell Surf Camp
Theme URI: https://swellsurfcamp.com
Author: Swell Surf Camp
Description: Premium watersport retreats — Cabarete, Dominican Republic. A faithful, server-rendered WordPress port of the Swell Surf Camp editorial design (feasibility build, homepage). Built to be wired to Advanced Custom Fields Pro.
Version: 1.9.134
Requires at least: 6.4
Tested up to: 6.8
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: swellactive
Tags: custom-theme, two-columns, custom-menu

The actual design CSS lives in /assets/css/ (tokens.css, styles.css,
c-editorial.css, hero-slider.css) and is enqueued from functions.php.
This file carries the theme header and a few WordPress-admin shims only.
*/

/* WordPress admin-bar offset so the fixed nav never hides under it. */
.admin-bar .nav { top: 32px; }
@media screen and (max-width: 782px) {
	.admin-bar .nav { top: 46px; }
}

/* Honour reduced-motion for the JS-driven reveals. */
@media (prefers-reduced-motion: reduce) {
	.reveal { opacity: 1 !important; transform: none !important; }
}

/* These prose fields are now WYSIWYG (so links can be inserted via a button);
   the editor wraps content in <p>. Keep spacing tidy inside the styled
   containers — single paragraph sits flush, extra paragraphs get a gap. */
.hslider__body > p,
.ed-sport__lead > p,
.ed-stay__lead > p,
.ed-loc__intro > p,
.ed-gal__cap > p,
.ed-rev__quote > p {
	margin: 0;
}
.hslider__body > p + p,
.ed-sport__lead > p + p,
.ed-stay__lead > p + p,
.ed-loc__intro > p + p,
.ed-gal__cap > p + p,
.ed-rev__quote > p + p {
	margin-top: 0.7em;
}

/* ---- Interior pages: generic section + prose + journal grid ---- */
.pg-sec { padding: clamp(48px, 8vw, 104px) 0; }

.swell-prose {
	max-width: 1080px;
	margin-inline: auto;
	font-family: var(--font-sans);
	font-weight: 400;
	font-size: 19px;
	line-height: 1.75;
	color: rgba(249, 245, 233, 0.88);
}
.swell-prose > * + * { margin-top: 1.05em; }
.swell-prose h2, .swell-prose h3, .swell-prose h4 {
	font-family: var(--font-display);
	font-weight: 400;
	line-height: 1.12;
	color: #f9f5e9;
	margin-top: 1.5em;
}
.swell-prose h2 { font-size: clamp(28px, 4vw, 40px); }
.swell-prose h3 { font-size: clamp(22px, 3vw, 28px); }
.swell-prose h4 { font-size: 21px; }
.swell-prose img { max-width: 100%; height: auto; border-radius: var(--radius-lg); }
.swell-prose ul, .swell-prose ol { padding-left: 1.3em; }
.swell-prose li + li { margin-top: 0.35em; }
.swell-prose blockquote {
	margin: 1.4em 0;
	padding-left: 1em;
	border-left: 3px solid var(--coral-500);
	font-family: var(--font-display);
	font-style: italic;
	font-size: 1.15em;
	color: #f9f5e9;
}
.swell-prose figcaption { font-size: 14px; color: rgba(249, 245, 233, 0.55); margin-top: 8px; }
.swell-article { max-width: 1080px; }

/* "Latest from the Journal" block at the foot of single posts. */
.swell-related { border-top: 1px solid rgba(255, 255, 255, 0.1); }
.swell-related .pg-head { margin-bottom: clamp(28px, 4vw, 44px); }
.swell-related__more { display: flex; justify-content: center; margin-top: clamp(30px, 4vw, 48px); }

/* Legal pages (Privacy, Cookie, Terms) — lead intro + footer link row. */
.swell-legal__lead { font-size: 21px; line-height: 1.6; color: #f9f5e9; }
.ed-footer__legal { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 18px; }
.ed-footer__legal a { color: rgba(255, 255, 255, 0.6); text-decoration: none; transition: color 220ms var(--ease-swell); }
.ed-footer__legal a:hover { color: var(--coral-400, #ff8b6a); }
@media (max-width: 900px) { .ed-footer__legal { order: 3; } }

.swell-journal {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
	gap: clamp(28px, 4vw, 48px);
}
.swell-jcard { display: flex; flex-direction: column; }
.swell-jcard__img {
	display: block;
	aspect-ratio: 16 / 10;
	background-size: cover;
	background-position: center;
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-md);
	overflow: hidden;
}
/* Real <img> thumbnails (SEO: alt + srcset + native lazy-load, indexable in
   Google Images) crop exactly like the old CSS background did. */
.swell-jcard__img img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: inherit;
}
.swell-jcard__meta {
	margin-top: 16px;
	font-family: var(--font-sans);
	font-size: 12px;
	font-weight: 500;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: rgba(249, 245, 233, 0.55);
}
.swell-jcard__title {
	font-family: var(--font-display);
	font-weight: 400;
	font-size: 25px;
	line-height: 1.15;
	margin: 8px 0 8px;
}
.swell-jcard__title a { color: #f9f5e9; text-decoration: none; }
.swell-jcard__title a:hover { color: var(--coral-400); }
/* Normalise ALL-CAPS post titles to sentence case at display time. Titles typed
   in caps (e.g. "WHY CABARETE…") render as "Why cabarete…". Display-only: the
   stored title (single-post H1, <title>, OG, breadcrumbs) is unchanged, and
   proper nouns (Cabarete, Dominican Republic, Swell) get lowercased. Renaming
   the posts is the SEO-clean fix. */
.swell-jcard__title { text-transform: lowercase; }
.swell-jcard__title::first-letter { text-transform: uppercase; }
.swell-jcard__excerpt {
	font-family: var(--font-sans);
	font-weight: 400;
	font-size: 16.5px;
	line-height: 1.6;
	color: rgba(249, 245, 233, 0.78);
	margin-bottom: 14px;
}

.swell-prose .pagination,
.pg .navigation.pagination { margin-top: 56px; }
.pg .page-numbers {
	display: inline-flex;
	min-width: 40px;
	height: 40px;
	align-items: center;
	justify-content: center;
	padding: 0 12px;
	margin: 0 3px;
	border-radius: var(--radius-pill);
	font-family: var(--font-sans);
	font-size: 15px;
	color: rgba(249, 245, 233, 0.8);
	box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.18);
	text-decoration: none;
}
.pg .page-numbers.current { background: var(--coral-500); color: #fff; box-shadow: none; }

/* Homepage combo ("Why pick a side?") as a boxed card matching the two sport
   cards above it — bordered, rounded, dark fill, hover-lift; still one column. */
.ed-combo {
	border: 1px solid var(--hairline);
	border-radius: 18px;
	background: var(--cream);
	padding: clamp(28px, 3.5vw, 46px);
	margin-top: clamp(24px, 3vw, 40px);
	transition: transform 320ms var(--ease-swell), box-shadow 320ms var(--ease-swell);
}
.ed-combo:hover { transform: translateY(-4px); box-shadow: 0 22px 56px rgba(13, 28, 32, 0.14); }
.ed--dark .ed-combo { background: rgba(255, 255, 255, 0.035); border-color: rgba(255, 255, 255, 0.12); }
.ed--dark .ed-combo:hover { box-shadow: 0 22px 60px rgba(0, 0, 0, 0.4); }

/* Pricing — seasonal toggle (Low / High season) + struck high-season reference. */
.pg-season { display: flex; flex-direction: column; align-items: flex-start; gap: 16px; margin-top: clamp(28px, 3.4vw, 44px); }
.pg-season__switch {
	position: relative; display: grid; grid-template-columns: 1fr 1fr;
	padding: 4px; gap: 4px; border-radius: 999px;
	background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.14);
	-webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
}
.pg-season__thumb {
	position: absolute; top: 4px; left: 4px; z-index: 0;
	width: calc(50% - 4px); height: calc(100% - 8px);
	border-radius: 999px; background: var(--coral);
	box-shadow: 0 6px 20px rgba(238, 106, 71, 0.4);
	transition: transform 360ms var(--ease-swell);
}
.pg-season[data-season="high"] .pg-season__thumb { transform: translateX(calc(100% + 4px)); }
.pg-season__opt {
	position: relative; z-index: 1; display: flex; flex-direction: column; gap: 3px;
	padding: 13px clamp(20px, 2.4vw, 34px); border: none; background: none; cursor: pointer;
	text-align: center; align-items: center; border-radius: 999px;
	transition: color 280ms var(--ease-swell);
}
.pg-season__k { font-family: var(--font-body); font-size: 14.5px; font-weight: 600; letter-spacing: 0.02em; color: rgba(249, 245, 233, 0.62); transition: color 280ms var(--ease-swell); }
.pg-season__m { font-family: var(--font-body); font-size: 10.5px; font-weight: 500; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(249, 245, 233, 0.4); transition: color 280ms var(--ease-swell); }
.pg-season__opt.is-on .pg-season__k { color: var(--on-accent); }
.pg-season__opt.is-on .pg-season__m { color: rgba(255, 255, 255, 0.82); }
.pg-season__opt:not(.is-on):hover .pg-season__k { color: rgba(249, 245, 233, 0.92); }
.pg-season__note { margin: 0; font-family: var(--font-body); font-size: 14px; letter-spacing: 0.02em; color: rgba(249, 245, 233, 0.66); }
.pg-season__note b { color: var(--coral-400, #ff8b6a); font-weight: 600; }
.pg-pkg__was { font-family: var(--font-body); font-size: 13px; letter-spacing: 0.02em; color: rgba(249, 245, 233, 0.45); }
.pg-pkg__was s { text-decoration-thickness: 1px; text-underline-offset: 2px; }

/* Photo sliders: no hover/rollover movement. (The feature-media zoom-on-hover
   is meant for single photos; on a slider it shifts the image and peeks the
   next slide.) Kill the transform + transition on slider images. */
.ed-slider__slide img { transition: none !important; }
.pg-feature__media:hover .ed-slider__slide img,
.ed-slider:hover .ed-slider__slide img,
.ed-slider__slide:hover img,
.pg-feature__media:hover .pg-slider__img { transform: none !important; }

/* ---- Interior pages: collapse body copy to the homepage's Jost scale ----
   Homepage body = Jost 350, 18px (19px at ≤600px), line-height 1.65. The
   bespoke pages used a dozen different sizes for the same kind of copy; pin
   them all to the homepage scale. Headings and small tracked labels/captions
   are intentionally left as-is. */
.pg-lede__body p,
.pg-head__lead,
.pg-level__d,
.pg-day__body p,
.pg-inc p,
.pg-pkg__desc,
.pg-pkg__list li,
.pg-assure__d,
.pg-trip__d,
.pg-amen li,
.pg-air__use,
.pg-promise p,
.pg-feature__list .lbl,
.pg-contact__opt .v,
.pg-cmp tbody td.lbl,
.pg-quote-card .bk-step > p,
.pg-quote__done > p {
	font-family: var(--font-body);
	font-weight: 400;
	font-size: 18px;
	line-height: 1.65;
}
@media (max-width: 600px) {
	.pg-lede__body p,
	.pg-head__lead,
	.pg-level__d,
	.pg-day__body p,
	.pg-inc p,
	.pg-pkg__desc,
	.pg-pkg__list li,
	.pg-assure__d,
	.pg-trip__d,
	.pg-amen li,
	.pg-air__use,
	.pg-promise p,
	.pg-feature__list .lbl,
	.pg-contact__opt .v,
	.pg-cmp tbody td.lbl,
	.pg-quote-card .bk-step > p,
	.pg-quote__done > p {
		font-size: 19px;
	}
}

/* ---- Contact page: enquiry card header + WPForms embed + fallback ----
   The quote card (.pg-quote-card, white) on the Contact page now hosts a
   WPForms form instead of the prototype's JS wizard. These rules style the
   card's own heading/intro, give the embedded form sensible spacing, and
   provide the no-ID-yet fallback + admin hint. */
.pg-quote-card__title {
	font-family: var(--font-display);
	font-weight: 400;
	font-size: clamp(26px, 2.6vw, 34px);
	line-height: 1.05;
	color: var(--ink);
	margin: 12px 0 0;
}
.pg-quote-card__intro {
	font-family: var(--font-body);
	font-weight: 400;
	font-size: 15px;
	line-height: 1.6;
	color: var(--ink-soft);
	margin: 10px 0 0;
}
.pg-quote-card__form { margin-top: 22px; }

/* Beige card (warm paper) instead of stark white. Loads after pages.css so it
   overrides .pg-quote-card's white fill. Inputs stay white to pop against it.
   The dark base text colour is important: some WPForms text (page-break
   descriptions, HTML blocks) has no colour of its own and would otherwise
   inherit the dark theme's light text and vanish on the beige. */
.pg-quote-card { background: var(--paper); color: var(--ink-soft); }

/* Force the site font (Jost) on every WPForms element. WPForms can set its own
   typeface via its theme settings, so we override with !important — scoped to
   the card so nothing else is touched. The serif card title is outside the
   form wrapper, so it keeps the display font. */
.pg-quote-card__form,
.pg-quote-card__form * {
	font-family: var(--font-body) !important;
}

/* Host portrait is a real <img> here (the prototype used an image-slot). */
.pg-host__photo img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* WPForms inside the white card — keep it on-brand and readable.
   WPForms ships in two markup modes; we brand both, scoped to the card so no
   other form on the site is affected:
   1) MODERN markup (default in current WPForms) — override its CSS variables.
   2) CLASSIC markup / general fallback — explicit selectors.                  */

/* 1) Modern markup: re-map WPForms' own design tokens to the Swell palette. */
.pg-quote-card__form .wpforms-container,
.pg-quote-card__form.wpforms-container {
	--wpforms-field-border-radius: 12px;
	--wpforms-field-border-style: solid;
	--wpforms-field-border-size: 1px;
	--wpforms-field-background-color: #ffffff;
	--wpforms-field-border-color: var(--hairline);
	--wpforms-field-text-color: var(--ink);
	--wpforms-label-color: var(--ink);
	--wpforms-label-sublabel-color: var(--ink-soft);
	--wpforms-label-error-color: var(--coral-600, #d4502e);
	--wpforms-button-border-radius: 999px;
	--wpforms-button-background-color: var(--coral);
	--wpforms-button-text-color: var(--on-accent, #fff);
	margin: 0;
}

/* Keep all WPForms text dark on the beige card (page-break titles/descriptions
   and HTML blocks have no colour of their own). */
.pg-quote-card__form p,
.pg-quote-card__form .wpforms-field-html,
.pg-quote-card__form .wpforms-page-indicator,
.pg-quote-card__form .wpforms-page-indicator-page-title { color: var(--ink-soft); }

/* Progress bar — Swell Surf Camp brand teal (overrides WPForms' own teal-green,
   which it sets inline, hence !important). Covers the bar, circles and
   connector page-indicator styles. */
.pg-quote-card__form .wpforms-page-indicator { --wpforms-page-break-color: var(--teal); }
.pg-quote-card__form .wpforms-page-indicator.progress { background-color: rgba(13, 28, 32, 0.08) !important; }
.pg-quote-card__form .wpforms-page-indicator-page-progress { background-color: var(--teal) !important; }
.pg-quote-card__form .wpforms-page-indicator-page.active .wpforms-page-indicator-page-number,
.pg-quote-card__form .wpforms-page-indicator-page.completed .wpforms-page-indicator-page-number {
	background-color: var(--teal) !important;
	border-color: var(--teal) !important;
}

/* 2) Explicit selectors (classic markup + reinforcement). */
.pg-quote-card__form .wpforms-form { margin: 0; }
.pg-quote-card__form .wpforms-field { padding: 0 0 18px; }
/* Field labels — match the site's form labels (.bk-field): Jost 10px / 500,
   tracked uppercase, ink-soft. !important beats WPForms' own 700 / 16px. */
.pg-quote-card__form .wpforms-field-label {
	font-family: var(--font-body) !important;
	font-weight: 500 !important;
	font-size: 10px !important;
	line-height: 1.4 !important;
	letter-spacing: 0.24em !important;
	text-transform: uppercase !important;
	color: var(--ink-soft) !important;
	margin-bottom: 9px;
}
/* Helper / sub-label text (e.g. "Format is DD/MM/YYYY", "Step 1 of 3"). */
.pg-quote-card__form .wpforms-field-sublabel,
.pg-quote-card__form .wpforms-field-description,
.pg-quote-card__form .wpforms-page-indicator,
.pg-quote-card__form .wpforms-page-indicator-page-title {
	font-family: var(--font-body) !important;
	font-weight: 400 !important;
	font-size: 13px !important;
	letter-spacing: normal !important;
	text-transform: none !important;
	color: var(--ink-soft) !important;
}
.pg-quote-card__form .wpforms-required-label { color: var(--coral); border: 0; }

/* Inputs / selects / textareas */
.pg-quote-card__form input[type="text"],
.pg-quote-card__form input[type="email"],
.pg-quote-card__form input[type="tel"],
.pg-quote-card__form input[type="url"],
.pg-quote-card__form input[type="number"],
.pg-quote-card__form input[type="date"],
.pg-quote-card__form input[type="datetime-local"],
.pg-quote-card__form select,
.pg-quote-card__form textarea {
	width: 100%;
	font-family: var(--font-body) !important;
	font-size: 16.5px !important;
	font-weight: 400 !important;
	line-height: 1.4;
	letter-spacing: normal !important;
	text-transform: none !important;
	color: var(--ink);
	background: #fff;
	border: 1px solid var(--hairline);
	border-radius: 12px;
	padding: 12px 14px;
	box-shadow: none;
	transition: border-color 160ms var(--ease-swell), box-shadow 160ms var(--ease-swell);
}
.pg-quote-card__form textarea { min-height: 120px; resize: vertical; }
.pg-quote-card__form input:focus,
.pg-quote-card__form select:focus,
.pg-quote-card__form textarea:focus {
	outline: none;
	border-color: var(--teal);
	box-shadow: 0 0 0 3px rgba(15, 154, 154, 0.14);
}
.pg-quote-card__form ::placeholder { color: var(--ink-soft); opacity: 0.6; }

/* Two-up rows (e.g. first / last name) when the form uses WPForms columns. */
.pg-quote-card__form .wpforms-field-row,
.pg-quote-card__form .wpforms-field-name { gap: 14px; }

/* Checkboxes / radios */
.pg-quote-card__form .wpforms-field-radio ul,
.pg-quote-card__form .wpforms-field-checkbox ul {
	margin: 0; padding: 0; list-style: none;
	display: flex; flex-direction: column; gap: 9px;
}
.pg-quote-card__form .wpforms-field-radio li,
.pg-quote-card__form .wpforms-field-checkbox li,
.pg-quote-card__form .wpforms-field-radio label,
.pg-quote-card__form .wpforms-field-checkbox label,
.pg-quote-card__form .wpforms-field-label-inline {
	font-family: var(--font-body) !important;
	font-size: 16.5px !important;
	font-weight: 400 !important;
	letter-spacing: normal !important;
	text-transform: none !important;
	color: var(--ink) !important;
}
.pg-quote-card__form input[type="checkbox"],
.pg-quote-card__form input[type="radio"] { accent-color: var(--teal); width: auto; margin-right: 8px; }

/* Submit button — coral pill matching the site's primary CTA. */
.pg-quote-card__form .wpforms-submit,
.pg-quote-card__form button[type="submit"] {
	font-family: var(--font-body) !important;
	font-weight: 600 !important;
	font-size: 15px !important;
	letter-spacing: 0.01em;
	color: var(--on-accent, #fff) !important;
	background: var(--coral) !important;
	border: none !important;
	border-radius: 999px !important;
	padding: 14px 30px !important;
	cursor: pointer;
	box-shadow: 0 10px 26px rgba(238, 106, 71, 0.30);
	transition: transform 200ms var(--ease-swell), filter 200ms var(--ease-swell), box-shadow 200ms var(--ease-swell);
}
.pg-quote-card__form .wpforms-submit:hover,
.pg-quote-card__form button[type="submit"]:hover {
	transform: translateY(-1px);
	filter: brightness(1.04);
	box-shadow: 0 14px 32px rgba(238, 106, 71, 0.38);
}
.pg-quote-card__form .wpforms-submit-container { margin-top: 4px; }

/* Validation errors */
.pg-quote-card__form label.wpforms-error,
.pg-quote-card__form .wpforms-error {
	font-family: var(--font-body); font-size: 12.5px;
	color: var(--coral-600, #d4502e);
}
.pg-quote-card__form input.wpforms-error,
.pg-quote-card__form textarea.wpforms-error,
.pg-quote-card__form select.wpforms-error { border-color: var(--coral-600, #d4502e); }

/* Success / confirmation message */
.pg-quote-card .wpforms-confirmation-container-full {
	margin: 0;
	background: rgba(15, 154, 154, 0.08);
	border: 1px solid rgba(15, 154, 154, 0.3);
	border-radius: 14px;
	padding: 18px 20px;
	font-family: var(--font-body);
	font-size: 15.5px;
	line-height: 1.6;
	color: var(--ink);
}

/* ---- Modal (pricing "Check availability" → WPForms popup) ----
   Fixed overlay + centred beige card; reuses .pg-quote-card / .pg-quote-card__form
   so the embedded WPForms form inherits the same on-brand styling. */

/* Background scroll-lock — PURE CSS, no JavaScript.
   The site's theme.js scroll-lock never takes effect on the live server (a
   caching / optimisation layer stops it running), and a plugin forces the page
   to stay scrollable. So we lock it from CSS instead: while the proposal popup
   is open, freeze the page scroller. `:has()` matches the open modal; the high
   specificity + !important beats any `html{overflow-y:scroll !important}` rule.
   With the page frozen, the wheel scrolls the form inside the modal instead. */
html:has(.swell-modal:not([hidden])),
html:has(.swell-modal:not([hidden])) body {
	overflow: hidden !important;
}

.swell-modal {
	position: fixed;
	inset: 0;
	z-index: 1000;
	display: flex;
	align-items: flex-start;
	justify-content: center;
	padding: clamp(16px, 5vh, 64px) 16px;
	overflow-y: auto;
	overscroll-behavior: contain;
}
.swell-modal[hidden] { display: none; }
.swell-modal__scrim {
	position: fixed;
	inset: 0;
	background: rgba(6, 20, 28, 0.66);
	-webkit-backdrop-filter: blur(3px);
	backdrop-filter: blur(3px);
	animation: swellFade 240ms var(--ease-swell);
}
.swell-modal__dialog {
	position: relative;
	z-index: 1;
	width: 100%;
	max-width: 560px;
	margin: 0 auto;
	display: flex;
	flex-direction: column;
	/* Never taller than the viewport, so the form gets its OWN scrollbar inside the
	   card (the Next button is always reachable). The background scroll is held by
	   the JS event-lock in theme.js, not by CSS overflow. */
	max-height: calc(100vh - clamp(32px, 10vh, 128px));
	max-height: calc(100dvh - clamp(32px, 10vh, 128px));
	animation: swellPop 280ms var(--ease-swell);
}
.swell-modal__dialog .pg-quote-card {
	width: 100%;
	min-height: 0;
	overflow-y: auto;
	overscroll-behavior: contain;
}
.swell-modal__close {
	position: absolute;
	top: 14px;
	right: 14px;
	z-index: 2;
	width: 40px;
	height: 40px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border: 0;
	border-radius: 50%;
	background: rgba(13, 28, 32, 0.06);
	color: var(--ink);
	cursor: pointer;
	transition: background 180ms var(--ease-swell);
}
.swell-modal__close:hover { background: rgba(13, 28, 32, 0.12); }
@keyframes swellFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes swellPop { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
	.swell-modal__scrim, .swell-modal__dialog { animation: none; }
}

/* Fallback shown when no WPForms ID is set (or WPForms is inactive). */
.pg-quote__fallback { text-align: center; padding: clamp(14px, 3vw, 30px) 6px; }
.pg-quote__fallbackmark {
	width: 60px; height: 60px; margin: 0 auto;
	border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
	background: rgba(15, 154, 154, 0.12); color: var(--teal-deep);
	box-shadow: inset 0 0 0 1px rgba(15, 154, 154, 0.4);
}
.pg-quote__fallback p {
	font-family: var(--font-body);
	font-size: 16px;
	line-height: 1.6;
	color: var(--ink-soft);
	margin: 18px auto 22px;
	max-width: 40ch;
}
.pg-quote__adminhint {
	display: flex; align-items: flex-start; gap: 9px;
	margin: 24px 0 0; padding: 14px 16px;
	border-radius: 12px;
	background: rgba(238, 106, 71, 0.08);
	box-shadow: inset 0 0 0 1px rgba(238, 106, 71, 0.28);
	font-family: var(--font-body); font-size: 13px; line-height: 1.55;
	color: var(--ink-soft);
}
.pg-quote__adminhint svg { color: var(--coral); flex: none; margin-top: 2px; }
.pg-quote__adminhint strong { color: var(--ink); }

/* ---------------------------------------------------------------------------
   Author bio box (single posts) — E-E-A-T "experience" signal rendered by
   template-parts/author-bio.php. Tokens reused from the editorial system.
   --------------------------------------------------------------------------- */
.swell-author {
	padding-top: 8px;
}
.swell-author__card {
	display: flex;
	gap: 22px;
	align-items: flex-start;
	max-width: 760px;
	margin: 0 auto;
	padding: 26px 28px;
	border-radius: 16px;
	background: var(--surface-2, rgba(0, 0, 0, 0.03));
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
}
.swell-author__media { flex: none; }
.swell-author__avatar {
	width: 72px;
	height: 72px;
	border-radius: 50%;
	object-fit: cover;
	display: block;
}
.swell-author__eyebrow {
	font-family: var(--font-body);
	text-transform: uppercase;
	letter-spacing: 0.14em;
	font-size: 11px;
	color: var(--ink-soft);
	margin-bottom: 4px;
}
.swell-author__name {
	font-family: var(--font-display);
	font-size: 22px;
	line-height: 1.15;
	margin: 0 0 8px;
}
.swell-author__name a { color: inherit; text-decoration: none; }
.swell-author__name a:hover { text-decoration: underline; }
.swell-author__bio {
	font-family: var(--font-body);
	font-size: 15px;
	line-height: 1.6;
	color: var(--ink-soft);
	margin: 0 0 12px;
}
.swell-author__more {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-family: var(--font-body);
	font-size: 14px;
	font-weight: 600;
	color: var(--coral, #ee6a47);
	text-decoration: none;
}
.swell-author__more:hover { text-decoration: underline; }
@media (max-width: 540px) {
	.swell-author__card { flex-direction: column; gap: 16px; padding: 22px; }
}

/* --------------------------------------------------------------------------
   Footer NAP block (1.9.94)
   Canonical name + street address in crawlable text. Swell has no public
   phone number, so this address is the primary Named Entity signal and must
   stay identical to the Google Business Profile.
   -------------------------------------------------------------------------- */
.ed-footer__nap {
	margin: 18px 0 0;
	font-style: normal;
	display: flex;
	flex-direction: column;
	gap: 3px;
	font-size: 13px;
	line-height: 1.5;
	opacity: .78;
}
.ed-footer__napname {
	font-weight: 600;
	letter-spacing: .01em;
	opacity: 1;
}
/* --- style-shell-sky.css --- */
/* ============================================================
   SHELL & SKY — light beach colour style.
   Selected in Swell Settings → Style. When active, header.php
   drops data-style="shell-sky" on <html> and every template
   omits the `ed--dark` modifier (see swell_ed_dark_class()), so
   the `.ed` editorial layout falls back to its light/paper
   styling. This file remaps the brand tokens to the cool
   shell-white / pale-aqua / ocean-navy palette, restores the
   section-by-section colour rhythm, fixes a couple of light-theme
   legibility gaps, and routes a handful of legacy hardcoded-coral
   literals through the new accent so no stray orange survives.
   The hero, footer and press marquee stay the dark navy
   "bookends" in both styles, unchanged here.
   ============================================================ */

html[data-style="shell-sky"] {
  --ink:          #123244;
  --ink-soft:     #34566a;
  --paper:        #eef4f3;
  --paper-2:      #e0eae9;
  --paper-deep:   #c9dad9;
  --cream:        #f8fbfa;
  --bone:         #eef5f4;
  --night:        #0c2a3a;
  --night-2:      #123a4e;
  --teal:         #12a6b8;
  --teal-deep:    #0d8395;
  --teal-pale:    #8fd3db;
  --coral:        #0b7e8d;      /* accent — deep teal, not orange */
  --coral-deep:   #086573;
  --coral-glow:   rgba(11,126,141,0.28);
  --hairline:     rgba(18,50,68,0.16);
}

/* ---- per-section colour rhythm (top → bottom) ----
   No two adjacent light sections share a tone. */
html[data-style="shell-sky"] .ed-sports  { background: #f9fcfc; }
html[data-style="shell-sky"] .ed-stay    { background: #edf4f3; }
html[data-style="shell-sky"] .ed-loc     { background: #f9fcfc; }
html[data-style="shell-sky"] .ed-gal     { background: #dcecee; }
html[data-style="shell-sky"] .ed-rev     { background: #f9fcfc; }
html[data-style="shell-sky"] .ed-faq     { background: #edf4f3; }
html[data-style="shell-sky"] .ed-cta--tag { background: #c9e3e6; }

/* nav slab — a deep tone of the palette over the hero photo */
html[data-style="shell-sky"] .nav { background: rgba(12,42,58,0.52); }

/* inline highlight links read the reversed-link colour site-wide;
   the pale teal used on dark grounds washes out on light ones */
html[data-style="shell-sky"][data-links="reversed"] .swell-link { color: var(--teal-deep); }

/* ---- light-theme legibility fixes ----
   The "ghost numeral" section eyebrow (.ed-knum) and its divider
   (.ed-krule) are always white — correct on the dark surface, invisible
   on this light one. */
html[data-style="shell-sky"] .ed-kicker--icon .ed-knum {
  color: var(--teal-deep);
  opacity: 0.34;
}
html[data-style="shell-sky"] .ed-kicker--icon .ed-krule {
  background: var(--teal-deep);
  opacity: 0.4;
}

/* ---- route legacy hardcoded coral literals through the accent ----
   These predate the --coral token and stay orange regardless of the
   accent/style in effect unless recoloured explicitly. */
html[data-style="shell-sky"] .ed-rev__chip.is-on {
  background: color-mix(in srgb, var(--coral) 12%, transparent);
}
html[data-style="shell-sky"] .ed-cta__wstatus.is-tight {
  background: color-mix(in srgb, var(--coral) 12%, transparent);
}
html[data-style="shell-sky"] .ed-ticket__stamp {
  box-shadow: 0 8px 22px color-mix(in srgb, var(--coral) 40%, transparent);
}
html[data-style="shell-sky"] .ed-ticket__body::before {
  background-image:
    repeating-linear-gradient(46deg, rgba(13,53,55,0.04) 0 1px, transparent 1px 7px),
    repeating-linear-gradient(-46deg, rgba(13,53,55,0.032) 0 1px, transparent 1px 9px),
    radial-gradient(circle at 88% 22%, color-mix(in srgb, var(--coral) 8%, transparent) 0, transparent 34%);
}

/* --- style-pacific-sage.css --- */
/* ============================================================
   PACIFIC & SAGE — light olive colour style ("Color 8").
   Selected in Swell Settings → Style (or per page). When active,
   header.php drops data-style="pacific-sage" on <html> and every
   template omits the `ed--dark` modifier (see swell_ed_dark_class()),
   so the `.ed` editorial layout falls back to its light/paper
   styling. This file remaps the brand tokens to the pale-olive /
   pacific-cyan palette, restores the section-by-section colour
   rhythm the client signed off on, fixes the same light-theme
   legibility gaps the Shell & Sky style handles, and routes the
   legacy hardcoded-coral literals through the new accent so no
   stray orange survives. The hero, footer and press marquee stay
   the dark navy "bookends" in both styles, unchanged here.

   Palette source: design_handoff_color8 ("Pacific & Sage").
   ============================================================ */

html[data-style="pacific-sage"] {
  --ink:          #1c3540;
  --ink-soft:     #3d5661;
  --paper:        #ecf2da;      /* base page ground (pale olive) */
  --paper-2:      #e5eddc;      /* alternating sections          */
  --paper-deep:   #d5dcbc;
  --cream:        #ffffff;      /* cards / elevated surfaces      */
  --bone:         #ecf2da;
  --night:        #123a3d;      /* dark section grounds           */
  --night-2:      #17494c;
  --teal:         #2f7d96;      /* brand — links, eyebrows, type  */
  --teal-deep:    #245f73;
  --teal-pale:    #a9dcf0;
  --coral:        #1f9ec4;      /* accent — pacific cyan, not orange */
  --coral-deep:   #167a99;
  --coral-glow:   rgba(31,158,196,0.32);
  --on-accent:    #ffffff;
  --hairline:     rgba(28,53,64,0.18);
}

/* ---- per-section colour rhythm (top → bottom) ----
   Base ground is pale olive (var(--paper) = #ecf2da). Content
   sections alternate to the warm off-white #e5eddc. The "as seen in"
   marquee is a divider, not a counted section, so it stays on the
   base olive and the real sections alternate cleanly around it.
   Every section the Shell & Sky style overrides is overridden here
   too, so no dark surface from the base cascade bleeds through. */
html[data-style="pacific-sage"] .ed-intro   { background: #e5eddc; }
html[data-style="pacific-sage"] .ed-sports  { background: #ecf2da; }
html[data-style="pacific-sage"] .ed-stay    { background: #e5eddc; }
html[data-style="pacific-sage"] .ed-loc     { background: #ecf2da; }
html[data-style="pacific-sage"] .ed-gal     { background: #e5eddc; }
html[data-style="pacific-sage"] .ed-rev     { background: #ecf2da; }
html[data-style="pacific-sage"] .ed-faq     { background: #e5eddc; }
html[data-style="pacific-sage"] .ed-cta--tag { background: #ecf2da; }

/* nav slab — a deep tone of the palette over the hero photo */
html[data-style="pacific-sage"] .nav { background: rgba(18,58,61,0.52); }

/* inline highlight links read the reversed-link colour site-wide;
   the pale teal used on dark grounds washes out on light ones */
html[data-style="pacific-sage"][data-links="reversed"] .swell-link { color: var(--teal-deep); }

/* ---- light-theme legibility fixes ----
   The "ghost numeral" section eyebrow (.ed-knum) and its divider
   (.ed-krule) are always white — correct on the dark surface, invisible
   on this light one. */
html[data-style="pacific-sage"] .ed-kicker--icon .ed-knum {
  color: var(--teal-deep);
  opacity: 0.34;
}
html[data-style="pacific-sage"] .ed-kicker--icon .ed-krule {
  background: var(--teal-deep);
  opacity: 0.4;
}

/* ---- route legacy hardcoded coral literals through the accent ----
   These predate the --coral token and stay orange regardless of the
   accent/style in effect unless recoloured explicitly. */
html[data-style="pacific-sage"] .ed-rev__chip.is-on {
  background: color-mix(in srgb, var(--coral) 12%, transparent);
}
html[data-style="pacific-sage"] .ed-cta__wstatus.is-tight {
  background: color-mix(in srgb, var(--coral) 12%, transparent);
}
html[data-style="pacific-sage"] .ed-ticket__stamp {
  box-shadow: 0 8px 22px color-mix(in srgb, var(--coral) 40%, transparent);
}
html[data-style="pacific-sage"] .ed-ticket__body::before {
  background-image:
    repeating-linear-gradient(46deg, rgba(28,53,64,0.04) 0 1px, transparent 1px 7px),
    repeating-linear-gradient(-46deg, rgba(28,53,64,0.032) 0 1px, transparent 1px 9px),
    radial-gradient(circle at 88% 22%, color-mix(in srgb, var(--coral) 8%, transparent) 0, transparent 34%);
}

/* --- style-light.css --- */
/* ============================================================================
   LIGHT MODE — interior pages (.pg-) + shared editorial fixes.

   Loaded on every request; every rule is gated by html[data-mode="light"],
   which header.php sets whenever the active colour style is a light one
   (Shell & Sky, Pacific & Sage, or any future light palette). Because every
   value here is TOKEN-DRIVEN (var(--paper), var(--ink), var(--hairline), …),
   the one file repaints correctly under whichever light palette remapped the
   tokens — no per-palette duplication.

   Why this file exists
   --------------------
   The interior page layout (assets/css/pages.css, prefix .pg-) was authored as
   an always-dark editorial surface: dark grounds, cream text, white hairlines,
   faint white-on-dark cards. The colour-style switch only ever repainted the
   HOMEPAGE .ed-* sections, so on a light palette the interior grounds stayed
   dark and the page looked broken. This file flips the interior CONTENT
   sections to the light paper surface with dark ink and dark hairlines.

   Left deliberately dark (bookends in every style, like the homepage hero/footer)
   ------------------------------------------------------------------------------
   The full-bleed subpage hero (.pg-hero*, .pg-cover*, .pg-tabs, .pg-crumb,
   .sw-wx), the 404 scene (.pg-404*), the dark "find us" map panel (.pg-find,
   white line-art), the fullscreen lightbox (.pg-lb), and the teal accent band
   (.pg-sec--teal). These sit over photos / are intentional dark features.
   ============================================================================ */

/* ---------------------------------------------------------------------------
   BASE SURFACE + SECTION GROUNDS
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg { background: var(--paper); color: var(--ink); }

html[data-mode="light"] .pg-sec--n1 { background: var(--paper); }
html[data-mode="light"] .pg-sec--n2 { background: var(--paper-2); }

/* The teal accent band (.pg-sec--teal) stays a colour block in every style — a
   deliberate dark bookend, like the homepage hero/footer. Its white-on-teal
   text is restored at the end of this file so the global ink flips don't dim it. */

html[data-mode="light"] .pg-prose__sub { color: var(--ink); }

/* ---------------------------------------------------------------------------
   HEADINGS & DISPLAY FIGURES  →  ink
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-lede__h,
html[data-mode="light"] .pg-fact__num,
html[data-mode="light"] .pg-head .ed-h2,
html[data-mode="light"] .pg-level__t,
html[data-mode="light"] .pg-step__t,
html[data-mode="light"] .pg-feature__h,
html[data-mode="light"] .pg-dl__body h3,
html[data-mode="light"] .pg-day__body h3,
html[data-mode="light"] .pg-inc h3,
html[data-mode="light"] .pg-seasons__mo,
html[data-mode="light"] .pg-seasons__rlmain,
html[data-mode="light"] .pg-seasons__temp b,
html[data-mode="light"] .pg-trip__t,
html[data-mode="light"] .pg-quote blockquote,
html[data-mode="light"] .pg-quote__by .n,
html[data-mode="light"] .pg-pool__q,
html[data-mode="light"] .pg-assure__t,
html[data-mode="light"] .jr-feat__t,
html[data-mode="light"] .jr-card__t { color: var(--ink); }

/* italic accents inside those headings — teal-pale washes out on paper, so use
   the deep teal (same fix the homepage light styles apply to inline links) */
html[data-mode="light"] .pg-lede__h i,
html[data-mode="light"] .pg-fact__num i,
html[data-mode="light"] .pg-trip__t i,
html[data-mode="light"] .pg-pool__q i,
html[data-mode="light"] .pg-seasons__mo i,
html[data-mode="light"] .pg-quote blockquote .mark,
html[data-mode="light"] .jr-feat__t i { color: var(--teal-deep); }

/* ---------------------------------------------------------------------------
   BODY / SECONDARY COPY  →  ink-soft
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-level__d,
html[data-mode="light"] .pg-step__d,
html[data-mode="light"] .pg-dl__body p,
html[data-mode="light"] .pg-dl__count,
html[data-mode="light"] .pg-day__body p,
html[data-mode="light"] .pg-inc p,
html[data-mode="light"] .pg-assure__d,
html[data-mode="light"] .pg-food__ticks span,
html[data-mode="light"] .pg-trip__d,
html[data-mode="light"] .pg-trip__where,
html[data-mode="light"] .pg-quote__by .s,
html[data-mode="light"] .pg-pool__lead,
html[data-mode="light"] .pg-seasons__temp span,
html[data-mode="light"] .pg-seasons__cornsub,
html[data-mode="light"] .pg-seasons__rlsub,
html[data-mode="light"] .pg-seasons__lg,
html[data-mode="light"] .pg-feature__list .lbl,
html[data-mode="light"] .jr-feat__ex,
html[data-mode="light"] .jr-card__ex { color: var(--ink-soft); }

/* ---------------------------------------------------------------------------
   EYEBROWS / TAGS / META  →  deep teal (teal-pale is too light on paper)
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-fact__lbl,
html[data-mode="light"] .pg-level__tag,
html[data-mode="light"] .pg-step__tag,
html[data-mode="light"] .pg-feature__list .lbl b,
html[data-mode="light"] .pg-feature__list svg,
html[data-mode="light"] .pg-trip__price,
html[data-mode="light"] .pg-pool__ey,
html[data-mode="light"] .pg-seasons__cornlbl,
html[data-mode="light"] .pg-seasons__temp b sup,
html[data-mode="light"] .pg-seasons__rain .on,
html[data-mode="light"] .jr-feat__meta,
html[data-mode="light"] .jr-card__meta { color: var(--teal-deep); }

/* ---------------------------------------------------------------------------
   HAIRLINES  →  token hairline (white-on-dark rules become dark-on-paper)
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-facts,
html[data-mode="light"] .pg-food__ticks,
html[data-mode="light"] .pg-feature__list,
html[data-mode="light"] .pg-level__tag,
html[data-mode="light"] .pg-inc li,
html[data-mode="light"] .pg-amen,
html[data-mode="light"] .pg-assure__item,
html[data-mode="light"] .pg-seasons__chart { border-top-color: var(--hairline); }

html[data-mode="light"] .pg-day__row,
html[data-mode="light"] .pg-seasons__chart > * { border-bottom-color: var(--hairline); }

html[data-mode="light"] .pg-seasons__hd,
html[data-mode="light"] .pg-seasons__cell { border-left-color: var(--hairline); }

/* prominent 1.5px dividers (were white 0.5) — a touch stronger than a hairline */
html[data-mode="light"] .pg-day,
html[data-mode="light"] .pg-occ { border-top-color: color-mix(in srgb, var(--ink) 34%, transparent); }
html[data-mode="light"] .pg-occ__row { border-bottom-color: var(--hairline); }

/* the numbered-card divider tick */
html[data-mode="light"] .pg-level__rn::after { background: var(--hairline); }

/* empty meter bars / rain droplets (were faint white) */
html[data-mode="light"] .pg-seasons__meter span { background: color-mix(in srgb, var(--ink) 12%, transparent); }
html[data-mode="light"] .pg-seasons__rain { color: color-mix(in srgb, var(--ink) 26%, transparent); }

/* column hover highlight on the seasons chart — reads on paper */
html[data-mode="light"] .pg-seasons__cell.is-hot { background: color-mix(in srgb, var(--teal) 14%, transparent); }

/* month italic + "on" meter bars: keep them palette teal/coral (the numbered
   scales like --teal-500 aren't remapped by the light palettes, so route the
   lit bars through the tokens that ARE) */
html[data-mode="light"] .pg-seasons__mo i { color: var(--teal-deep); }
html[data-mode="light"] .pg-seasons__meter span { background: color-mix(in srgb, var(--ink) 16%, transparent); }
html[data-mode="light"] .pg-seasons__meter--teal span.on { background: var(--teal); box-shadow: 0 0 10px color-mix(in srgb, var(--teal) 45%, transparent); }
html[data-mode="light"] .pg-seasons__meter--coral span.on { background: var(--coral); box-shadow: 0 0 10px var(--coral-glow); }

/* header cells carry a background photo darkened by a night gradient so white
   month text reads. On paper, fade the bottom to the page ground and calm the
   photo so the (now dark) month label reads instead. */
html[data-mode="light"] .pg-seasons__hdbg { opacity: 0.22; }
html[data-mode="light"] .pg-seasons__hd.is-hot .pg-seasons__hdbg { opacity: 0.4; }
html[data-mode="light"] .pg-seasons__hd::after {
  background: linear-gradient(180deg, rgba(255,255,255,0) 0%, var(--paper) 92%);
}

/* ---------------------------------------------------------------------------
   "A DAY AT SWELL" INTERACTIVE TIMELINE (.pg-dl)
   Rail times, the connecting line, the station dots and the glass prev/next
   buttons were all drawn in white/cream for the dark surface.
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-dl__time { color: color-mix(in srgb, var(--ink) 55%, transparent); }
html[data-mode="light"] .pg-dl__dotw::before { background: var(--hairline); }

/* inactive station dot → white pip with a teal ring; past/active stay coral */
html[data-mode="light"] .pg-dl__dot {
  background: var(--cream);
  box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--teal-deep) 55%, transparent);
}

/* glass prev/next arrows: faint white ring + cream glyph → hairline ring + ink
   glyph (the coral hover state is left untouched) */
html[data-mode="light"] .pg-dl__arrow {
  border-color: var(--hairline);
  color: var(--teal-deep);
}

/* ---------------------------------------------------------------------------
   CARDS — faint white-on-dark fills become clean white cards on paper
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-level,
html[data-mode="light"] .pg-trip,
html[data-mode="light"] .pg-pkg {
  background: var(--cream);
  border-color: var(--hairline);
}
html[data-mode="light"] .pg-level:hover,
html[data-mode="light"] .pg-trip:hover,
html[data-mode="light"] .pg-pkg:hover {
  border-color: color-mix(in srgb, var(--ink) 26%, transparent);
  box-shadow: 0 22px 56px color-mix(in srgb, var(--ink) 14%, transparent);
}

/* chips + contact tiles */
html[data-mode="light"] .pg-chips span,
html[data-mode="light"] .pg-contact__opt {
  background: var(--cream);
  box-shadow: inset 0 0 0 1px var(--hairline);
  color: var(--ink);
}
html[data-mode="light"] .pg-contact__opt:hover { background: color-mix(in srgb, var(--ink) 5%, var(--cream)); }

/* ruled pool chips */
html[data-mode="light"] .pg-poolchips--ruled .ch { border-top-color: var(--hairline); }
html[data-mode="light"] .pg-poolchips--ruled .ch:last-child { border-bottom-color: var(--hairline); }

/* portrait/avatar ring */
html[data-mode="light"] .pg-quote__by img { box-shadow: inset 0 0 0 1px var(--hairline); }

/* ---------------------------------------------------------------------------
   PACKAGES + COMPARISON TABLE (pricing / stay)
   --------------------------------------------------------------------------- */
/* package cards were flipped to white cards above, so their white/cream body
   text must go dark (the photo, ribbon, tag and coral list-ticks stay as-is) */
html[data-mode="light"] .pg-pkg__name,
html[data-mode="light"] .pg-pkg__amount,
html[data-mode="light"] .pg-pkg__list li { color: var(--ink); }
html[data-mode="light"] .pg-pkg__desc,
html[data-mode="light"] .pg-pkg__amount sup,
html[data-mode="light"] .pg-pkg__unit,
html[data-mode="light"] .pg-pkg__occ { color: var(--ink-soft); }
html[data-mode="light"] .pg-pkg__rk,
html[data-mode="light"] .pg-pkg__from,
html[data-mode="light"] .pg-pkg__custom { color: var(--teal-deep); }
html[data-mode="light"] .pg-pkg__price,
html[data-mode="light"] .pg-pkg__rate + .pg-pkg__rate { border-top-color: var(--hairline); }

/* comparison matrix */
html[data-mode="light"] .pg-cmp__col,
html[data-mode="light"] .pg-cmp tbody td.lbl,
html[data-mode="light"] .pg-cmp-cta__line { color: var(--ink); }
html[data-mode="light"] .pg-cmp__col .pg-cmp__sub,
html[data-mode="light"] .pg-cmp__head { color: var(--teal-deep); }
html[data-mode="light"] .pg-cmp tbody td,
html[data-mode="light"] .pg-cmp-cta { border-top-color: var(--hairline); }
html[data-mode="light"] .pg-cmp tbody tr:hover td { background: color-mix(in srgb, var(--ink) 3%, transparent); }
html[data-mode="light"] .pg-cmp__no { color: color-mix(in srgb, var(--ink) 28%, transparent); }

/* occupancy table + price note */
html[data-mode="light"] .pg-occ__pkg { color: var(--ink); }
html[data-mode="light"] .pg-occ__row--head span,
html[data-mode="light"] .pg-occ__pkg small,
html[data-mode="light"] .pg-occ__val.is-req,
html[data-mode="light"] .pg-pricenote b { color: var(--teal-deep); }
html[data-mode="light"] .pg-occ__val small,
html[data-mode="light"] .pg-pricenote { color: var(--ink-soft); }

/* featured "offer" card (wingfoiling + pricing) — a wide photo|panel card. Its
   price rows reuse .pg-pkg__* (handled above), but the panel is a faint
   white-on-dark fill with white name/desc. Flip the panel to a white card with
   dark text; the ribbon/caption sit over the photo and stay light. */
html[data-mode="light"] .pg-offer {
  background: var(--cream);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--coral) 22%, transparent),
              0 30px 72px color-mix(in srgb, var(--ink) 12%, transparent);
}
html[data-mode="light"] .pg-offer__name { color: var(--ink); }
html[data-mode="light"] .pg-offer__desc,
html[data-mode="light"] .pg-offer__fine { color: var(--ink-soft); }
html[data-mode="light"] .pg-offer__fine svg { color: var(--teal-deep); }
html[data-mode="light"] .pg-offer__fine--foot { border-top-color: var(--hairline); }

/* ---------------------------------------------------------------------------
   GALLERY (filter chips + tiles)
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-gal__filter {
  color: var(--ink-soft);
  box-shadow: inset 0 0 0 1px var(--hairline);
}
html[data-mode="light"] .pg-gal__filter:hover { color: var(--ink); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ink) 34%, transparent); }
html[data-mode="light"] .pg-gal__filter.is-active { background: var(--teal-deep); color: #fff; box-shadow: none; }

/* image drop-placeholder chrome reads on paper (empty cards before an upload) */
html[data-mode="light"] .pg-trip__media image-slot::part(empty),
html[data-mode="light"] .pg-feature__media image-slot::part(empty) { color: var(--ink-soft); }
html[data-mode="light"] .pg-trip__media image-slot::part(ring),
html[data-mode="light"] .pg-feature__media image-slot::part(ring) { border-color: color-mix(in srgb, var(--ink) 28%, transparent); }
html[data-mode="light"] .pg-trip__media image-slot::part(frame),
html[data-mode="light"] .pg-feature__media image-slot::part(frame) { background: color-mix(in srgb, var(--ink) 3%, transparent); }

/* journal cards */
html[data-mode="light"] .jr-card { border-color: var(--hairline); }
html[data-mode="light"] .jr-card:hover { border-color: color-mix(in srgb, var(--ink) 26%, transparent); box-shadow: 0 22px 56px color-mix(in srgb, var(--ink) 14%, transparent); }
html[data-mode="light"] .jr-card__more,
html[data-mode="light"] .jr-feat__more { color: var(--teal-deep); }
html[data-mode="light"] .jr-card:hover .jr-card__more { color: var(--ink); }

/* ---------------------------------------------------------------------------
   GHOST BUTTONS on interior content sections.
   .btn--ghost-light is a white outline + white glyph built for dark grounds
   (e.g. "See the full gallery"). Inside a light .pg-sec content section it
   vanishes, so restyle it as a dark-outline ghost (mirroring .btn--ghost-dark).
   Ghost buttons on the dark bookends — the subpage hero (.pg-hero) and the 404
   scene — are NOT matched here, so they stay white as intended.
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-sec .btn--ghost-light {
  background: transparent;
  color: var(--ink);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ink) 42%, transparent);
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}
html[data-mode="light"] .pg-sec .btn--ghost-light:hover {
  background: var(--ink);
  color: var(--cream);
}

/* ---------------------------------------------------------------------------
   HOMEPAGE "AS SEEN IN" PRESS MARQUEE (.ed-marq)
   The bar is a hardcoded near-black band (#07171b) with cream text; on a light
   palette it should read as the light ground, as the client requested.
   --------------------------------------------------------------------------- */
html[data-mode="light"] .ed-marq__bar {
  background: var(--paper);
  border-top-color: var(--hairline);
  border-bottom-color: transparent;
}
html[data-mode="light"] .ed-marq__item,
html[data-mode="light"] .ed-marq__item--serif,
html[data-mode="light"] .ed-marq__item--caps,
html[data-mode="light"] .ed-marq__item--heavy,
html[data-mode="light"] .ed-marq__item--award { color: var(--ink-soft); }

/* ---------------------------------------------------------------------------
   TEAL ACCENT BAND — keep it a dark colour block with light text.
   Placed last so it restores white-on-teal text after the global ink flips
   above. The band is an intentional accent surface in every colour style.
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-sec--teal { color: var(--cream); }
html[data-mode="light"] .pg-sec--teal .ed-h2,
html[data-mode="light"] .pg-sec--teal .pg-head .ed-h2,
html[data-mode="light"] .pg-sec--teal .pg-lede__h,
html[data-mode="light"] .pg-sec--teal .pg-fact__num,
html[data-mode="light"] .pg-sec--teal .pg-feature__h,
html[data-mode="light"] .pg-sec--teal .pg-level__t,
html[data-mode="light"] .pg-sec--teal .pg-dl__body h3 { color: #fff; }
html[data-mode="light"] .pg-sec--teal .ed-lead,
html[data-mode="light"] .pg-sec--teal .ed-para,
html[data-mode="light"] .pg-sec--teal .pg-level__d,
html[data-mode="light"] .pg-sec--teal .pg-dl__body p { color: rgba(249,245,233,0.9); }
html[data-mode="light"] .pg-sec--teal .pg-fact__lbl,
html[data-mode="light"] .pg-sec--teal .pg-level__tag { color: var(--teal-pale); }
html[data-mode="light"] .pg-sec--teal .pg-facts,
html[data-mode="light"] .pg-sec--teal .pg-level__tag { border-top-color: rgba(255,255,255,0.16); }

/* ---------------------------------------------------------------------------
   PHOTO-BACKED CONTENT stays light.
   Two cases keep a dark photo behind the copy in every colour style, so the
   global ink flips above must be undone there and the text kept light:
     1) any .pg-sec given an optional full-bleed background photo — swell_sec_bg_attr()
        emits an inline background-image under an 85% dark tint (no class marker,
        so we match the inline style).
     2) the Pool & Garden "billboard", whose copy overlays a photo + dark scrim.
   Placed last so these win over the ink flips by both order and specificity.
   --------------------------------------------------------------------------- */
html[data-mode="light"] .pg-sec[style*="background-image"],
html[data-mode="light"] .pg-pool--billboard .pg-pool__copy { color: var(--cream); }

/* headings → white */
html[data-mode="light"] .pg-sec[style*="background-image"] .ed-h2,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-lede__h,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-fact__num,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-feature__h,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-pool__q,
html[data-mode="light"] .pg-pool--billboard .pg-pool__copy .pg-pool__q { color: #fff; }

/* heading italics → light teal */
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-lede__h i,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-fact__num i,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-pool__q i,
html[data-mode="light"] .pg-pool--billboard .pg-pool__copy .pg-pool__q i { color: var(--teal-pale); }

/* body / lead copy → soft cream */
html[data-mode="light"] .pg-sec[style*="background-image"] .ed-lead,
html[data-mode="light"] .pg-sec[style*="background-image"] .ed-para,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-food__ticks span,
html[data-mode="light"] .pg-pool--billboard .pg-pool__copy .pg-pool__lead { color: rgba(249,245,233,0.86); }

/* eyebrows / labels → light teal */
html[data-mode="light"] .pg-sec[style*="background-image"] .ed-klabel,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-fact__lbl,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-pool__ey,
html[data-mode="light"] .pg-pool--billboard .pg-pool__copy .pg-pool__ey { color: var(--teal-pale); }

/* hairlines/amenity dividers → white on the photo */
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-amen,
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-food__ticks { border-top-color: rgba(255,255,255,0.16); }

/* chips + ghost buttons over a photo → glass white */
html[data-mode="light"] .pg-sec[style*="background-image"] .pg-chips span,
html[data-mode="light"] .pg-pool--billboard .pg-pool__copy .pg-chips span {
  background: rgba(255,255,255,0.1);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.24);
  color: #fff;
}
html[data-mode="light"] .pg-sec[style*="background-image"] .btn--ghost-light {
  background: rgba(255,255,255,0.08);
  color: #fff;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.4);
}

/* --- scroll-fx.css --- */
/* =========================================================
   Tideline scroll FX — scaffolding for assets/js/scroll-fx.js.
   Gated entirely on html[data-scrollfx="tideline"] (set by the JS
   on desktop only). If the attribute is absent, NONE of this applies
   and the page renders exactly as before. data-scrollfx="off" is the
   kill switch.
   ========================================================= */

/* Keep the per-frame transforms crisp: kill the slow image transitions
   that would smear them; absorb any sub-pixel lateral motion. */
[data-scrollfx="tideline"] .ed-intro__photo img,
[data-scrollfx="tideline"] .ed-sport__fig img,
[data-scrollfx="tideline"] .ed-stay__mosaic figure img,
[data-scrollfx="tideline"] .ed-gal__tile img,
[data-scrollfx="tideline"] .pg-feature__media img,
[data-scrollfx="tideline"] .pg-strip img,
[data-scrollfx="tideline"] .ed-ticket__stub img,
[data-scrollfx="tideline"] .pg-hero__bg {
	transition: none !important;
	will-change: transform;
	backface-visibility: hidden;
}

[data-scrollfx="tideline"] body { overflow-x: clip; }

/* Frames clip the zoom/parallax overscan (most already do; this guarantees it). */
[data-scrollfx="tideline"] .ed-intro__photo,
[data-scrollfx="tideline"] .ed-sport__fig,
[data-scrollfx="tideline"] .ed-stay__mosaic figure,
[data-scrollfx="tideline"] .ed-gal__tile,
[data-scrollfx="tideline"] .pg-feature__media,
[data-scrollfx="tideline"] .pg-strip figure,
[data-scrollfx="tideline"] .ed-ticket__stub {
	overflow: hidden;
}

/* Hero background: replace the one-time load drift with scroll parallax. */
[data-scrollfx="tideline"] .pg-hero__bg {
	animation: none !important;
}

/* =========================================================
   Shared-horizon seam — a glowing teal->coral waterline drawn
   across the top of each section as it rises toward mid-screen.
   --seam (0 -> 1) is set per-frame by the engine on the section;
   the injected .fx-seam child inherits it.
   ========================================================= */
[data-scrollfx="tideline"] .ed-sports,
[data-scrollfx="tideline"] .ed-stay,
[data-scrollfx="tideline"] .ed-loc,
[data-scrollfx="tideline"] .ed-gal,
[data-scrollfx="tideline"] .ed-rev,
[data-scrollfx="tideline"] .ed-faq,
[data-scrollfx="tideline"] .ed-cta,
[data-scrollfx="tideline"] .pg-sec {
	position: relative;
}

[data-scrollfx="tideline"] .fx-seam {
	position: absolute; left: 0; right: 0; top: -1px; height: 3px;
	pointer-events: none; z-index: 6;
	transform: scaleX( var( --seam, 0 ) ); transform-origin: center;
	opacity: var( --seam, 0 );
	background: linear-gradient( 90deg,
		transparent 0%,
		var( --teal-300, #5ec9c2 ) 14%,
		#aef3ec 38%,
		#d6fbf5 50%,
		#aef3ec 62%,
		var( --teal-300, #5ec9c2 ) 86%,
		transparent 100% );
	box-shadow: 0 0 28px 2px rgba( 94, 201, 194, 0.7 ), 0 0 10px 1px rgba( 94, 201, 194, 0.5 );
}

/* When FX is off, the injected seam element must be inert. */
[data-scrollfx="off"] .fx-seam { display: none; }

/* =========================================================
   Reduced motion / safety — never leave anything hidden or moved.
   ========================================================= */
@media ( prefers-reduced-motion: reduce ) {
	[data-scrollfx] .fx-seam { display: none !important; }
	[data-scrollfx] [data-fxset] { transform: none !important; }
}
