/* ================================================================
   SALT — styles.css
   An editorial hospitality house in Saint Vincent & the Grenadines.

   Structure of this file:
   1. CSS variables (master palette, experience accents, type, spacing)
   2. Reset & base
   3. Typography
   4. Layout helpers
   5. Header & navigation
   6. Hero
   7. Section commons + reveal animation
   8. Philosophy
   9. The SALT World
   10. Signature Experiences (+ accent system)
   11. Hospitality Partners
   12. Passport
   13. Journal
   14. Founder's note
   15. Contact
   16. Footer
   17. Image placeholder system
   18. Responsive breakpoints
   19. Reduced motion
   ================================================================ */

/* ----------------------------------------------------------------
   1. CSS VARIABLES
   To restyle SALT, change values here. Every colour used in the
   site is defined once below — nothing is hard-coded elsewhere.
   ---------------------------------------------------------------- */
:root {
  /* Master palette — limestone and basalt carry the site: a warm light
     stone neutral for most backgrounds, near-black ink for text and dark
     sections. --salt-white and --warm-ivory remain as slightly lighter/
     warmer siblings of limestone, used for gentle section-to-section
     variation (the way the reference lookbook alternates cream / cream-soft
     / coconut) rather than one flat colour everywhere. */
  --salt-white:        #FAF8F4;
  --limestone:          #E2DAC5; /* darkened slightly from #E7E1D2 for a touch more presence */
  --warm-ivory:        #F4F0E8;
  --parchment:         #EFE6D4;
  --sand:              #D9C7A8;
  --soft-stone-grey:   #8C8579;
  --basalt-charcoal:   #17140F;
  --deep-ink:          #0A0A0A;
  --aged-brass:        #B9915C;

  /* Signature accents — turquoise (sea) and lime green (land) are SALT's
     own two recurring accent colours, used site-wide for underlines,
     illustrated line art and full-bleed "separating block" sections —
     not confined to one experience card. Both are genuinely saturated by
     design: the restraint comes from how little surface area they cover
     (a line, a label, one full-bleed interlude), not from muting the hue
     itself — the same principle Bulgari uses a single saturated gem
     against black rather than colouring the whole piece. */
  --turquoise:     #0FA3A3;   /* sea and sky */
  --lime-green:    #8FD400;   /* land and garden */

  /* Experience accent library — each signature experience still draws ONE
     colour as its own accent (an underline, an eyebrow label) — see the
     .accent-* classes further down. SALT Air and SALT Studio use the two
     signature accents above directly, since "sea" and "land" are their
     literal subjects; Salt & Sorrel, After Dark and Private each keep a
     distinct sibling tone from the same rich, warm, Caribbean-editorial
     family. Layout and typography stay identical across all five; only
     this one colour changes. */
  --sorrel-wine:   #6B1E2E;   /* retained for reference, no longer used as an accent */
  --mango-gold:    #D98F3B;   /* retained for reference, no longer used as an accent */

  /* Revised per-experience palette — every gradient below used to open on
     a near-black stop for editorial moodiness, but across five experiences
     that read as "everything is just black plus one colour" rather than
     each experience having its own real hue. Rebuilt so each one is a
     genuine, non-black colour family, and picked so the accent tone also
     passes WCAG AA (>=3:1) as text on the limestone background. */
  /* SALT Air — a rich, deep sea blue into a genuinely light, bright
     turquoise (not the darker teal used for text contrast below). */
  --bequia-turquoise:  #0A7975; /* text/underline use — passes AA on limestone */
  --deep-sea-blue:     #123F63; /* gradient — rich, dark, but a real blue, not black */
  --bright-turquoise:  #2FD4C9; /* gradient — light, vivid turquoise */
  --pale-aqua:         #A8F0E6; /* gradient — shallow-water highlight */

  /* Salt & Sorrel — an obviously brown cocoa (not near-black) into a true
     hibiscus red, replacing the muddier tamarind/mango-gold pairing. */
  --sorrel-brown:      #6B4226;
  --hibiscus-red:      #C81E4A;
  --hibiscus-pink:     #E85C7B; /* gradient highlight */

  /* SALT After Dark — a night-sky nebula gradient (indigo/plum/magenta)
     standing in for an actual astrophotography image, which isn't
     something I can generate here. Editorial plum, not a flat cartoon
     purple, and no orange. */
  --nebula-indigo:     #150C33;
  --nebula-plum:       #5C2A7D;
  --nebula-magenta:    #A8477E;
  --nebula-fade:       #3A2A52;

  /* SALT Studio — indigo dye, clay and bone. Indigo is an actual
     traditional craft/dye colour (batik, weaving), paired with terracotta
     clay and a warm cream — materials-driven rather than "orange craft"
     or a cold black-and-white treatment. */
  --studio-indigo:     #2E3A70;
  --studio-clay:       #A8552E;
  --studio-cream:      #E3D3A8;

  /* SALT Private keeps --aged-brass; only its gradient's darkest stop
     changes below, from near-black to --chocolate. */

  /* SALT Kitchen — fire, spice and harvest. Terracotta and saffron keep it
     distinct from Sorrel's wine-red/cocoa and Private's neutral chocolate-
     tan; olive is a genuinely new hue in the house palette (garden herbs,
     callaloo), used as this experience's --accent-strong. */
  --kitchen-terracotta: #7A2E12;
  --kitchen-saffron:    #D98A2E;
  --kitchen-gold-light: #F0C878;
  --kitchen-olive:      #4B5320;

  /* Body-text colour variants — the master site now varies reading-copy
     colour by section (basalt, chocolate or deep blue) instead of one flat
     ink everywhere. Still dark enough for comfortable reading contrast on
     limestone; the variation itself is the point, not the darkness. */
  --deep-blue: #14304A;
  --chocolate: #3B2415;

  /* Typography — a single editorial serif (Bodoni Moda) carries the whole
     site: wordmark, headlines, navigation and body copy. No secondary
     sans-serif is used. Bodoni Moda is a variable font with an optical-size
     axis, so the browser automatically softens its contrast at small sizes
     (captions, nav) and heightens it at display sizes (the SALT wordmark) —
     that's why body text stays legible even though the same family is used
     throughout. See the README for the full rationale. */
  /* Logo only — the SALT wordmark and nothing else. Bodoni Moda's dramatic
     thick-thin contrast gives a four-letter word real presence, but that
     same contrast makes it tiring as a running headline or body face, so
     its use is deliberately restricted to the wordmark itself. */
  --font-serif: 'Bodoni Moda', Georgia, 'Times New Roman', serif;
  /* Everything functional: navigation, buttons, eyebrows, captions, card
     copy, partner-facing paragraphs, footer, forms. Plus Jakarta Sans is
     softer and less geometric than Instrument Sans or Inter — it reads as
     warm rather than "product UI," while staying legible and compact for
     the site's genuinely functional text (nav, buttons, tables, footer). */
  --font-sans: 'Plus Jakarta Sans', -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif;
  /* The editorial voice: section headings, pull-quotes, Philosophy,
     Founder's Note, the chapter-line transitions, and any other evocative,
     brand-defining copy. Cormorant Garamond now also carries section
     headings (h2/h3/h4) — Italiana has been retired so the site runs on
     two typefaces instead of three, plus the Bodoni logotype. */
  --font-statement: 'Cormorant Garamond', Georgia, 'Times New Roman', serif;

  /* Spacing scale */
  --space-xs: 0.5rem;
  --space-sm: 1rem;
  --space-md: 2rem;
  --space-lg: 4rem;
  --space-xl: 7rem;

  /* Layout */
  --max-width: 1200px;
  --max-width-narrow: 760px;
  --border-hairline: 1px solid rgba(28, 27, 24, 0.12);

  /* Motion */
  --transition-standard: 0.5s cubic-bezier(0.22, 1, 0.36, 1);

  /* Fine paper grain, overlaid on every illustrated scene panel at very low
     opacity — the same technique used in the Salt & Sorrel lookbook. */
  --grain: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"><filter id="n"><feTurbulence type="fractalNoise" baseFrequency="0.85" numOctaves="3" stitchTiles="stitch"/></filter><rect width="100%25" height="100%25" filter="url(%23n)"/></svg>');
}

/* ----------------------------------------------------------------
   2. RESET & BASE
   ---------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }

html {
  scroll-behavior: smooth;
  scroll-padding-top: 84px;
  font-size: 112.5%;
}

body {
  margin: 0;
  background-color: var(--limestone);
  color: var(--basalt-charcoal);
  font-family: var(--font-sans);
  font-weight: 400;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  position: relative;
}

body::before {
  /* A quiet stone grain across the whole limestone ground, so the base
     colour reads as an actual quarried surface rather than a flat tint. */
  content: "";
  position: fixed;
  inset: 0;
  background-image: var(--grain);
  opacity: 0.05;
  mix-blend-mode: multiply;
  pointer-events: none;
  z-index: -1;
}

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

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

ul { list-style: none; margin: 0; padding: 0; }

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

/* Accessible skip link */
.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  background: var(--deep-ink);
  color: var(--salt-white);
  padding: 0.75rem 1.25rem;
  z-index: 1000;
}
.skip-link:focus {
  left: var(--space-sm);
  top: var(--space-sm);
}

.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

:focus-visible {
  outline: 2px solid var(--aged-brass);
  outline-offset: 3px;
}

/* ----------------------------------------------------------------
   3. TYPOGRAPHY
   ---------------------------------------------------------------- */
h1, h2, h3, h4 {
  font-family: var(--font-serif);
  /* A lighter base weight than earlier — 500 plus the coloured hairline
     outlines that used to sit on every h2 and card title compounded into
     a heavier, less premium feel across the page. 400 matches the weight
     already used on the SALT wordmark and nav, which read as the right
     level of refinement. */
  font-weight: 400;
  line-height: 1.15;
  margin: 0 0 var(--space-sm);
  color: var(--deep-ink);
  text-transform: uppercase;
  letter-spacing: 0.02em;
}

h1 {
  /* SALT is the only word this ever renders (every hero across the site),
     so pushed as large as the viewport reasonably allows — a dramatic,
     full-bleed wordmark rather than a conventional headline size. */
  font-size: clamp(4rem, 16vw, 13rem);
  font-weight: 400;
  /* Pulled down further from 80 — still a genuinely high-contrast
     Didone, but the hairlines needed more weight to read comfortably
     at a glance rather than just up close. */
  font-variation-settings: 'opsz' 62;
  letter-spacing: 0.09em;
}

/* Section titles: plain ink, no outline. A turquoise stroke on every h2
   across the page (there are six) was the single biggest contributor to
   the site feeling heavy rather than premium — removed. Colour now shows
   up in fewer, larger moments (the hero, the philosophy statement) instead
   of on every heading. */
/* Cormorant Garamond carries every heading except h1 (h1 stays Bodoni
   Moda at max optical size — the wordmark/page-title treatment). Light,
   not regular — Cormorant Garamond's charm is in its lighter weights, and
   luxury type generally reads best thinner than instinct suggests. */
h2, h3, h4 {
  font-family: var(--font-statement);
  font-weight: 300;
  letter-spacing: 0.01em;
}
/* Pulled down from clamp(1.9rem, 4vw, 2.75rem) and given more tracking —
   section headings are structural labels ("Kitchen", "The Vision"), not
   the site's voice. Quieting them creates real contrast against the
   pull-quote / statement moments below, which now carry the emphasis
   headings used to compete with. */
h2 { font-size: clamp(1.6rem, 3.2vw, 2.3rem); letter-spacing: 0.04em; }
h3 { font-size: clamp(1.3rem, 2.5vw, 1.6rem); }

p { margin: 0 0 var(--space-sm); }

.eyebrow {
  font-family: var(--font-sans);
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--soft-stone-grey);
  margin-bottom: var(--space-sm);
}

.section-title { max-width: 40rem; }

.section-intro {
  max-width: 42rem;
  color: var(--basalt-charcoal);
  /* Plus Jakarta Sans, not Cormorant — this is running body copy, and the
     serif read as heavier and less minimal than intended for continuous
     reading text. Serif now reserved for headings and true display/pull-
     quote moments (Philosophy statement, quote interludes, chapter lines).
     Sized down from 1.18rem — sans reads clearly smaller than serif did,
     and quieter, smaller body copy suits an UHNWI-facing site better than
     large-print text. */
  font-family: var(--font-sans);
  font-weight: 200;
  font-size: 1rem;
  line-height: 1.85;
  /* A touch more room between paragraphs than the site-wide default
     (1rem), so multi-paragraph blocks like this one get real separation
     between thoughts rather than reading as one dense block. */
  margin-bottom: 1.4rem;
}

/* A single large standalone line, used to open a section without a
   supporting paragraph underneath (e.g. the question before the
   Collection grid). Deliberately roomier than .section-intro, with
   nothing following it. */
.section-question {
  max-width: 34rem;
  /* Widened from --space-lg (4rem) to --space-xl (7rem) — this is one of
     the site's few standalone statement lines, and needs enough air
     around it to actually register as a pause rather than just another
     paragraph in the flow. */
  margin: var(--space-xl) 0;
  color: var(--basalt-charcoal);
  font-family: var(--font-statement);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(1.6rem, 3.4vw, 2.3rem);
  line-height: 1.4;
}

.pull-line {
  /* Cormorant Garamond light italic, in ink rather than a bright accent —
     a quiet magazine deck line under the pull-quote above it, not a bold
     uppercase banner. */
  font-family: var(--font-statement);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(1.3rem, 2.6vw, 1.75rem);
  color: var(--chocolate);
  text-align: center;
  max-width: 34rem;
  margin: var(--space-xl) auto 0;
}

.note-flag {
  font-size: 0.85rem;
  color: var(--soft-stone-grey);
  font-style: italic;
}

/* ----------------------------------------------------------------
   4. LAYOUT HELPERS
   ---------------------------------------------------------------- */
.container {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 0 var(--space-md);
}

.container.narrow {
  max-width: var(--max-width-narrow);
}

.section {
  padding: var(--space-xl) 0;
  position: relative;
}

/* A short, centred rule rather than a full-width hairline — reads as a
   deliberate break between sections without cutting the page into visible
   blocks, which matters now that several adjacent sections share the same
   limestone background. */
.section::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 72px;
  height: 2px;
  background-color: rgba(28, 27, 24, 0.28);
}

.cta {
  display: inline-block;
  padding: 0.9rem 1.9rem;
  font-family: var(--font-sans);
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border: 1px solid currentColor;
  transition: background-color var(--transition-standard), color var(--transition-standard);
}

.cta-light {
  color: var(--salt-white);
  border-color: rgba(250, 248, 244, 0.7);
}
.cta-light:hover {
  background-color: var(--salt-white);
  color: var(--deep-ink);
}

.cta-dark {
  color: var(--deep-ink);
  border-color: var(--deep-ink);
  margin-top: var(--space-sm);
}
.cta-dark:hover {
  background-color: var(--deep-ink);
  color: var(--salt-white);
}

/* ----------------------------------------------------------------
   5. HEADER & NAVIGATION
   ---------------------------------------------------------------- */
.site-header {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 100;
  background-color: rgba(250, 248, 244, 0.92);
  backdrop-filter: saturate(140%) blur(6px);
  border-bottom: var(--border-hairline);
  transition: background-color var(--transition-standard);
}

.header-inner {
  max-width: var(--max-width);
  margin: 0 auto;
  padding: 1.1rem var(--space-md);
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.wordmark {
  font-family: var(--font-serif);
  font-size: 1.5rem;
  letter-spacing: 0.12em;
  color: var(--deep-ink);
}

.primary-nav ul {
  display: flex;
  gap: var(--space-md);
}

.primary-nav a {
  font-size: 0.8rem;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--basalt-charcoal);
  position: relative;
  padding-bottom: 4px;
}

.primary-nav a::after {
  content: "";
  position: absolute;
  left: 0; right: 100%;
  bottom: 0;
  height: 1px;
  background-color: var(--aged-brass);
  transition: right var(--transition-standard);
}

.primary-nav a:hover::after,
.primary-nav a:focus-visible::after {
  right: 0;
}

.menu-toggle {
  display: none;
  flex-direction: column;
  gap: 5px;
  width: 26px;
}

.menu-toggle-line {
  display: block;
  height: 1px;
  width: 100%;
  background-color: var(--deep-ink);
  transition: transform var(--transition-standard), opacity var(--transition-standard);
}

.menu-toggle[aria-expanded="true"] .menu-toggle-line:nth-child(1) {
  transform: translateY(6px) rotate(45deg);
}
.menu-toggle[aria-expanded="true"] .menu-toggle-line:nth-child(2) {
  opacity: 0;
}
.menu-toggle[aria-expanded="true"] .menu-toggle-line:nth-child(3) {
  transform: translateY(-6px) rotate(-45deg);
}

.mobile-nav {
  border-top: var(--border-hairline);
  background-color: var(--salt-white);
}

.mobile-nav ul {
  padding: var(--space-sm) var(--space-md) var(--space-md);
}

.mobile-nav a {
  display: block;
  padding: 0.9rem 0;
  font-size: 1rem;
  font-family: var(--font-sans);
  border-bottom: var(--border-hairline);
}

/* ----------------------------------------------------------------
   6. HERO
   ---------------------------------------------------------------- */
.hero {
  position: relative;
  min-height: 100svh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
}

.hero .hero-media {
  /* Qualified with .hero to out-specificity the later .scene-panel rule
     (position: relative), which was silently turning this into a normal
     half-width column instead of a full-bleed background layer. */
  position: absolute;
  inset: 0;
  z-index: 0;
  aspect-ratio: auto;
}

/* A full-bleed breathing image between the hero and Philosophy — no text,
   no container, just room to look at a photograph before the copy starts.
   Swap the background-image out for real photography; the gradient below
   is a placeholder only. */
.section-bleed {
  height: 62vh;
  min-height: 380px;
  max-height: 640px;
  background: linear-gradient(150deg, #12160D 0%, #33401C 55%, #8A7A3F 130%);
  background-size: cover;
  background-position: center;
}

.hero .hero-media::after {
  /* Qualified with .hero for the same reason as the rule above — the later
     .scene-panel::after rule (grain, background-image: var(--grain)) was
     silently winning the background-image sub-property and replacing this
     scrim outright, at equal specificity. Also self-contained (explicit
     opacity/blend-mode) so it can't inherit that rule's 0.06 opacity and
     overlay blend, which would make the scrim nearly invisible. */
  content: "";
  position: absolute;
  inset: 0;
  opacity: 1;
  mix-blend-mode: normal;
  pointer-events: none;
  /* A soft bottom scrim so hero text reads clearly over real photography
     regardless of what's tonally happening in each shot — darkest right
     behind the text, fading to nothing higher up the frame. */
  background: linear-gradient(to top, rgba(10,10,10,0.55) 0%, rgba(10,10,10,0.2) 40%, rgba(10,10,10,0) 65%);
}

.hero-media::before {
  /* Real film-grain texture over the hero photo — pushed up hard from the
     original quiet stone-grain opacity now that this is always a real
     photograph rather than a flat illustrated gradient, matching the
     heavier grain now used on every other real photo on the site. */
  content: "";
  position: absolute;
  inset: 0;
  background-image: var(--grain), var(--grain);
  background-position: 0 0, 50% 50%;
  background-size: 200px 200px, 160px 160px;
  opacity: 0.5;
  mix-blend-mode: multiply;
  pointer-events: none;
  z-index: 1;
}

.hero-content {
  position: relative;
  z-index: 1;
  color: var(--salt-white);
  padding: 0 var(--space-md) var(--space-xl);
  max-width: 46rem;
}

.hero-content .eyebrow {
  color: rgba(250, 248, 244, 0.9);
}

/* The homepage hero now carries a real full-bleed photo with the same
   bottom scrim as every other page, so it no longer needs its own
   chocolate-text exception — white reads correctly here too. */

.hero-title {
  color: var(--salt-white);
  text-shadow: none;
  filter: none;
  /* Extra breathing room below the wordmark, now that it's the dominant
     element in the hero and needs to feel separated from the line under
     it rather than crowding into it. */
  margin-bottom: var(--space-md);
}

.hero-tagline {
  font-family: var(--font-sans);
  font-size: clamp(1.1rem, 2.2vw, 1.5rem);
  max-width: 32rem;
}

.hero-subline {
  font-size: 0.95rem;
  color: rgba(250, 248, 244, 0.92);
  margin-bottom: var(--space-md);
}

/* SALT Air only: its gradient stays light/turquoise throughout the hero
   crop, which previously made white text hard to read, so this used to
   switch the whole hero to chocolate ink instead. That left Air as the one
   experience page with dark hero text while the other five stayed white —
   an inconsistency of its own. Fixed at the root instead: a scrim gradient
   behind the text, darkest at the bottom where the copy sits and fading to
   nothing higher up, so the hero stays light and bright everywhere else
   but white text reads safely — restoring the same white hero treatment
   used on every other experience page. */
.accent-air .hero-media::after {
  background: linear-gradient(to top, rgba(10, 42, 69, 0.8) 0%, rgba(10, 42, 69, 0.4) 32%, rgba(10, 42, 69, 0) 62%);
}

/* ----------------------------------------------------------------
   7. SECTION COMMONS + REVEAL ANIMATION
   ---------------------------------------------------------------- */
.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* ----------------------------------------------------------------
   8. PHILOSOPHY
   ---------------------------------------------------------------- */
.philosophy {
  background-color: var(--warm-ivory);
  text-align: center;
}

.philosophy .statement {
  /* Widened from --space-lg (4rem) to --space-xl (7rem) — this is the
     site's single biggest statement moment, and needed more room to
     breathe before the supporting copy beneath it starts. */
  margin: 0 auto var(--space-xl);
  max-width: 42rem;
  border: none;
  padding: 0;
}

.philosophy .statement p {
  /* Cormorant Garamond, light — a second, classic serif used only for this
     statement, deliberately thinner and quieter than Bodoni Moda so it
     reads as a considered pull-quote rather than a headline. Sized up
     slightly and set in italic so it reads as a distinct, larger "voice"
     moment against the now-quieter, upright section headings elsewhere
     on the page — the contrast between the two is the point. */
  font-family: var(--font-statement);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(2.1rem, 5vw, 3.3rem);
  line-height: 1.5;
  color: var(--basalt-charcoal);
  margin: 0;
}

.philosophy-copy {
  max-width: 38rem;
  margin: 0 auto;
  text-align: left;
  color: var(--chocolate);
  /* Plus Jakarta Sans — running body copy, kept separate from the serif
     pull-quote above it, which stays display/heading territory. Sized
     down from 1.32rem for the same reason as .section-intro. */
  font-family: var(--font-sans);
  font-weight: 200;
  font-size: 1.05rem;
  line-height: 1.85;
}

.philosophy-copy p {
  /* This block runs three separate paragraphs — extra room between them
     so each reads as its own thought rather than one dense stack. */
  margin-bottom: 1.4rem;
}
.philosophy-copy p:last-child { margin-bottom: 0; }

/* ----------------------------------------------------------------
   9. THE SALT WORLD
   ---------------------------------------------------------------- */
.world-grid {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: var(--space-lg);
  align-items: center;
}

.world-text p {
  color: var(--deep-blue);
  /* Matches .section-intro / .philosophy-copy — running body copy, sans. */
  font-family: var(--font-sans);
  font-weight: 200;
  font-size: 1rem;
  line-height: 1.85;
  margin-bottom: 1.4rem;
}
.world-text p:last-child { margin-bottom: 0; }

/* ----------------------------------------------------------------
   10. SIGNATURE EXPERIENCES + ACCENT SYSTEM
   ---------------------------------------------------------------- */
.experiences {
  background-color: var(--salt-white);
}

/* Alternating rows — image and copy side by side, flipping left-right
   every other card. */
.experience-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-lg);
  margin-top: var(--space-lg);
}

.experience-card {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-lg);
  align-items: center;
  border-top: var(--border-hairline);
  padding-top: var(--space-lg);
}

.experience-card:nth-child(even) .experience-media {
  order: 2;
}

.experience-eyebrow {
  /* Cormorant Garamond — kept for the label's small caps character.
     Colour dropped from the per-experience accent down to a quiet
     charcoal/grey: this card used to also carry a .chapter-line directly
     above it, also serif and also accent-coloured, so two labels were
     competing for attention before the heading even loaded. The eyebrow
     now does that identity-label job alone, quietly — the accent colour
     is reserved for the single hairline underline below, the one
     deliberate colour touch per card. */
  font-family: var(--font-statement);
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--soft-stone-grey);
  margin-bottom: var(--space-xs);
}

.experience-copy h3 {
  /* Plain ink, no outline — the coloured underline alone is enough to
     signal each experience's own accent without adding weight to the
     letterforms themselves. Extra margin-bottom now that the heading
     sits directly above the lead paragraph (the redundant .chapter-line
     that used to separate them has been removed from this card). */
  color: var(--deep-ink);
  border-bottom: 2px solid var(--accent-strong, var(--aged-brass));
  display: inline-block;
  padding-bottom: 0.2rem;
  margin-bottom: 1.4rem;
}

.experience-copy > p {
  /* The card's lead/body paragraph — narrowed and given more line-height
     so it reads as a considered editorial sentence rather than a caption,
     now that it's the card's only remaining prose voice. */
  max-width: 32rem;
  line-height: 1.75;
}

.experience-note {
  font-size: 0.9rem;
  color: var(--soft-stone-grey);
  font-style: italic;
}

.experience-more {
  display: inline-block;
  margin-top: 0.9rem;
  font-size: 0.82rem;
  letter-spacing: 0.04em;
  color: var(--deep-ink);
  border-bottom: 1px solid var(--accent-strong, var(--aged-brass));
  padding-bottom: 2px;
  transition: color var(--transition-standard);
}
.experience-more:hover { color: var(--accent-strong, var(--aged-brass)); }

/* Accent colour assignments — one colour per experience, drawn from the
   library declared in :root. To retune any single experience, just change
   its line below — nothing else about the layout or type needs to change. */
.accent-air        { --accent-strong: var(--bequia-turquoise); }
.accent-sorrel     { --accent-strong: var(--hibiscus-red); }
.accent-afterdark  { --accent-strong: var(--nebula-plum); }
.accent-studio     { --accent-strong: var(--studio-indigo); }
.accent-kitchen    { --accent-strong: var(--kitchen-olive); }
.accent-private    { --accent-strong: var(--aged-brass); }

/* ----------------------------------------------------------------
   11. HOSPITALITY PARTNERS
   ---------------------------------------------------------------- */
.partners {
  /* Limestone rather than chocolate — with the Closing CTA already carrying
     the site's one deliberate dark moment near the end of each page, a
     second dark block here read as a stack rather than an accent. Plain
     limestone keeps this section flowing into Passport/Journal/Founder's
     Note as one continuous page. */
  background-color: var(--limestone);
  color: var(--basalt-charcoal);
}

.partners-grid {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: var(--space-lg);
  align-items: center;
}

.partners-subhead {
  margin-top: var(--space-md);
  font-size: 1rem;
}

/* Instrument Sans rather than Cormorant Garamond — these paragraphs explain how a
   partnership actually works, an operational and reassuring register
   aimed at a business reader rather than an evocative one, so they sit
   with the rest of the site's functional text. :not(.eyebrow) keeps the
   small-caps label above untouched. */
.partners-text p:not(.eyebrow) {
  font-family: var(--font-sans);
  font-size: 1.05rem;
  line-height: 1.7;
}

.partners-list li {
  padding: 0.55rem 0;
  border-bottom: var(--border-hairline);
  font-family: var(--font-sans);
  font-size: 0.98rem;
}

/* ----------------------------------------------------------------
   12. PASSPORT
   ---------------------------------------------------------------- */
.passport {
  background-color: var(--parchment);
}

.passport-grid {
  display: grid;
  grid-template-columns: 0.9fr 1.1fr;
  gap: var(--space-lg);
  align-items: center;
}

.passport-list li {
  padding: 0.4rem 0;
  color: var(--basalt-charcoal);
  font-size: 0.95rem;
}

.passport-list li::before {
  content: "— ";
  color: var(--aged-brass);
}

/* ----------------------------------------------------------------
   13. JOURNAL
   ---------------------------------------------------------------- */
.journal-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--space-md);
  margin-top: var(--space-lg);
}

.journal-card .scene-panel {
  aspect-ratio: 4 / 3;
  margin-bottom: var(--space-sm);
}

.journal-label {
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--soft-stone-grey);
}

.journal-card p:last-child {
  font-size: 0.95rem;
  color: var(--basalt-charcoal);
}

/* ----------------------------------------------------------------
   14. FOUNDER'S NOTE
   ---------------------------------------------------------------- */
.founder {
  /* Limestone rather than chocolate — matches the Partners section above it
     and keeps the page reading as one continuous, editorial surface rather
     than a run of stacked dark panels before the footer. */
  background-color: var(--limestone);
  color: var(--basalt-charcoal);
}

.founder-copy p {
  font-family: var(--font-sans);
  font-weight: 200;
  font-size: clamp(0.92rem, 1.3vw, 1.04rem);
  line-height: 1.85;
  margin-bottom: 1.4rem;
}
.founder-copy p:last-child { margin-bottom: 0; }

/* ----------------------------------------------------------------
   15. CONTACT
   ---------------------------------------------------------------- */
.contact-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-sm);
  margin-top: var(--space-lg);
}

.contact-card {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  padding: var(--space-md);
  border: var(--border-hairline);
  transition: border-color var(--transition-standard), background-color var(--transition-standard);
}

.contact-card:hover, .contact-card:focus-visible {
  border-color: var(--aged-brass);
  background-color: var(--warm-ivory);
}

.contact-label {
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--soft-stone-grey);
}

.contact-value {
  font-family: var(--font-sans);
  font-size: 1.15rem;
  color: var(--deep-ink);
}

.social-line {
  margin-top: var(--space-md);
  font-size: 0.9rem;
  color: var(--soft-stone-grey);
}

/* ----------------------------------------------------------------
   16. FOOTER
   ---------------------------------------------------------------- */
.site-footer {
  /* Limestone rather than chocolate — the last dark panel on the page,
     now brought into the same continuous surface as everything above it. */
  background-color: var(--limestone);
  color: var(--basalt-charcoal);
  padding: var(--space-lg) 0 var(--space-md);
}

.footer-grid {
  display: grid;
  grid-template-columns: 1.2fr 1fr 1fr;
  gap: var(--space-md);
  padding-bottom: var(--space-lg);
  border-bottom: var(--border-hairline);
}

/* Plus Jakarta Sans, matching the nav — the wordmark keeps the site's
   Bodoni Moda identity type via :not(). */
.footer-brand p:not(.footer-wordmark) {
  margin: 0 0 0.3rem;
  font-family: var(--font-sans);
  font-size: 1.05rem;
  color: rgba(23, 20, 15, 0.75);
}

.footer-wordmark {
  font-size: 1.4rem;
  color: var(--deep-ink);
  margin-bottom: var(--space-xs);
  letter-spacing: 0.12em;
}

.footer-nav ul { display: flex; flex-direction: column; gap: 0.6rem; }
.footer-nav a {
  font-family: var(--font-sans);
  font-size: 1rem;
  color: rgba(23, 20, 15, 0.8);
}
.footer-nav a:hover { color: var(--aged-brass); }

.footer-contact a {
  display: inline-block;
  margin-bottom: 0.4rem;
  font-family: var(--font-sans);
  font-size: 1.05rem;
  color: var(--chocolate);
}
.footer-contact p { color: rgba(23, 20, 15, 0.7); font-size: 0.9rem; }

.footer-base {
  padding-top: var(--space-md);
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: var(--space-xs);
  font-family: var(--font-sans);
  font-size: 0.92rem;
  color: rgba(23, 20, 15, 0.6);
}

/* ----------------------------------------------------------------
   17. ILLUSTRATED SCENE PANELS
   Stand-ins for photography that has not yet been produced. Rather than a
   plain textured box, each panel is an original illustrated composition —
   a gradient in the section's own colour, a thin line-art motif, and a
   fine grain overlay — in the same spirit as the Salt & Sorrel lookbook.
   Nothing here is a photograph or attempts to look like one.

   To bring in real photography later: delete the inner <svg class="scene-art">
   and the .scene-* class from the wrapping <div>, then add a background
   image (or swap the div for an <img src="..." alt="...">) using the
   filename noted in the .panel-caption text and the HTML comment above it.
   ---------------------------------------------------------------- */
.scene-panel {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 3;
  border-radius: 2px;
  border: 1px solid rgba(28, 27, 24, 0.14);
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  isolation: isolate;
  transition: transform var(--transition-standard);
}

.scene-panel::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: var(--grain);
  opacity: 0.06;
  mix-blend-mode: overlay;
  pointer-events: none;
}

.scene-art {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

/* Real photography, dropped into the same .scene-panel wrapper as the
   illustrated placeholders — same aspect ratio, border, grain overlay,
   hover scale and caption treatment, just an <img> instead of an <svg>.
   The filter is the "shot on film" grade: slightly desaturated, a touch
   warmer, softer contrast — the faded, dreamy quality of Portra-style
   travel film rather than a flat, punchy phone photo. */
.scene-photo {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: saturate(0.84) contrast(1.02) brightness(1.02) sepia(0.06);
}

/* Real photography gets a much heavier, more visible grain than the
   illustrated panels — where the base 0.06 is a whisper meant for flat
   gradients, real photos are pushed hard enough to properly read as "on
   film" rather than a clean digital shot. :not(.hero-media) excludes the
   hero, which already has its own grain via ::before and uses ::after
   solely for the text scrim — letting this rule reach it would fight
   that scrim on opacity at equal specificity. Two stacked grain layers,
   one flipped, so the pattern doesn't read as an obviously repeating
   tile at this strength. */
.scene-panel:not(.hero-media):has(.scene-photo)::after {
  opacity: 0.48;
  background-image: var(--grain), var(--grain);
  background-position: 0 0, 50% 50%;
  background-size: 200px 200px, 160px 160px;
}

/* Real photography reads better at something closer to its natural
   landscape framing than the tight portrait crop this used to force —
   these now fall back to the base .scene-panel 4:3 ratio below instead. */

.scene-panel.tall { aspect-ratio: 3 / 4; }

.scene-panel:hover {
  transform: scale(1.015);
}

/* One gradient per section, drawn from that section's own accent —
   see the accent library and .accent-* classes above for the source
   colours. Add a new .scene-* rule here for any future experience. */
.scene-hero      { background: var(--limestone); }
.scene-world     { background: linear-gradient(150deg, #12160D 0%, #33401C 55%, #8A7A3F 130%); }
/* Rich deep sea blue into a genuinely light, bright turquoise — no black,
   no muddy dark teal. */
.scene-air       { background: linear-gradient(155deg, var(--deep-sea-blue) 0%, var(--bright-turquoise) 55%, var(--pale-aqua) 120%); }
/* Obviously brown cocoa into true hibiscus red — no near-black, no
   orange/mango. */
.scene-sorrel    { background: linear-gradient(155deg, var(--sorrel-brown) 0%, var(--hibiscus-red) 60%, var(--hibiscus-pink) 120%); }
/* Night-sky nebula — indigo into plum into magenta, fading to a muted
   violet-brown rather than snapping to black or orange. */
.scene-afterdark { background: linear-gradient(160deg, var(--nebula-indigo) 0%, var(--nebula-plum) 45%, var(--nebula-magenta) 75%, var(--nebula-fade) 100%); }
/* Back to a smooth editorial gradient — olive into clay into cream —
   after the multicoloured dot pattern read as childish rather than
   crafted. */
.scene-studio    { background: linear-gradient(160deg, var(--studio-indigo) 0%, var(--studio-clay) 55%, var(--studio-cream) 130%); }
/* Chocolate into tan — brown kept for its "privacy and subtlety" feel,
   black removed. */
.scene-kitchen   { background: linear-gradient(155deg, var(--kitchen-terracotta) 0%, var(--kitchen-saffron) 60%, var(--kitchen-gold-light) 120%); }
.scene-private   { background: linear-gradient(160deg, #3B2415 0%, #6B4A32 55%, #D9B98A 130%); }
.scene-partners  { background: linear-gradient(150deg, #0A0A0A 0%, #3A2E22 55%, #B9915C 130%); }
.scene-passport  { background: linear-gradient(150deg, #6B4A32 0%, #B9915C 55%, #EFE6D4 125%); }
.scene-journal-air        { background: linear-gradient(155deg, #0A2E2E 0%, #0FA3A3 50%, #9FE8E8 120%); }
.scene-journal-breadfruit { background: linear-gradient(160deg, #1B2A0A 0%, #4C6B0F 55%, #8FD400 130%); }
.scene-journal-afterdark  { background: linear-gradient(160deg, #0A0A0A 0%, #241E19 50%, #B5762A 130%); }

.panel-caption {
  position: relative;
  z-index: 1;
  display: block;
  width: 100%;
  padding: 0.75rem 0.9rem;
  font-family: var(--font-sans);
  font-size: 0.62rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(250, 248, 244, 0.92);
  text-shadow: 0 1px 6px rgba(0, 0, 0, 0.45);
  word-break: break-all;
}

.panel-caption.on-light {
  color: rgba(23, 20, 15, 0.85);
  text-shadow: none;
}

.hero-media .panel-caption {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  z-index: 2;
}

/* ----------------------------------------------------------------
   18. RESPONSIVE BREAKPOINTS
   ---------------------------------------------------------------- */
@media (max-width: 900px) {
  .world-grid,
  .partners-grid,
  .passport-grid {
    grid-template-columns: 1fr;
  }

  .world-media, .passport-media { order: -1; }

  .experience-card {
    grid-template-columns: 1fr;
  }
  .experience-card:nth-child(even) .experience-media { order: 0; }

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

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

@media (max-width: 720px) {
  .primary-nav { display: none; }
  .menu-toggle { display: flex; }

  .contact-grid { grid-template-columns: 1fr; }
  .journal-grid { grid-template-columns: 1fr; }
  .footer-grid { grid-template-columns: 1fr; gap: var(--space-md); }

  .section { padding: var(--space-lg) 0; }

  html { scroll-padding-top: 64px; }
}

@media (max-width: 480px) {
  .header-inner { padding: 0.9rem var(--space-sm); }
  .container { padding: 0 var(--space-sm); }
  .hero-content { padding: 0 var(--space-sm) var(--space-lg); }
}

/* ----------------------------------------------------------------
   19. REDUCED MOTION
   ---------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  .reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }

  .scene-panel,
  .cta,
  .primary-nav a::after,
  .menu-toggle-line {
    transition: none;
  }

  .scene-panel:hover {
    transform: none;
  }
}

/* ----------------------------------------------------------------
   20. EXPERIENCE PAGE COMPONENTS
   Shared building blocks for the five in-depth experience pages
   (salt-air.html, salt-sorrel.html, salt-afterdark.html,
   salt-studio.html, salt-private.html). Each page wraps its <body> in
   one .accent-* class (already defined above) so every component below
   automatically picks up that experience's own colour via
   var(--accent-strong) — nothing else needs to change page to page.
   The master site's header, hero, footer and typography rules are
   reused as-is; only these additional patterns are new.
   ---------------------------------------------------------------- */

/* Breadcrumb back-link, sits just under the fixed header */
.exp-breadcrumb {
  padding: 6.5rem 0 0;
}
.exp-breadcrumb a {
  font-size: 0.78rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--soft-stone-grey);
  border-bottom: 1px solid rgba(28, 27, 24, 0.2);
  padding-bottom: 2px;
}
.exp-breadcrumb a:hover { color: var(--accent-strong, var(--basalt-charcoal)); }

/* A single-line editorial transition, set just above the Overture on each
   experience page (and above each card on the homepage grid). Quiet and
   italic on purpose — a narrative thread between chapters, not a heading. */
.chapter-line {
  font-family: var(--font-statement);
  font-style: italic;
  font-weight: 300;
  font-size: 1.05rem;
  color: var(--accent-strong, var(--soft-stone-grey));
  /* Widened from --space-sm (1rem) to --space-md (2rem) — this line was
     sitting almost flush against the overture copy beneath it, when it's
     meant to read as its own quiet beat before the paragraph begins. */
  margin-bottom: var(--space-md);
}

/* A short, unlabelled cinematic passage between the hero and "The Vision"
   — atmosphere and imagery before explanation, so each experience earns
   its factual introduction rather than opening with it cold. No eyebrow
   on purpose: this is a cold open, not another labelled section. */
.overture-text {
  font-family: var(--font-sans);
  font-weight: 200;
  font-size: clamp(0.95rem, 1.4vw, 1.08rem);
  line-height: 1.85;
  color: var(--basalt-charcoal);
  max-width: 38rem;
}

/* A quiet, clearly-labelled note for "this is still in development" language
   — set apart from the main copy so it reads as a footnote rather than the
   second thing a guest learns about the experience. */
.dev-status {
  max-width: 42rem;
  margin-top: var(--space-md);
  padding: var(--space-sm) var(--space-md);
  border: var(--border-hairline);
}
.dev-status .dev-label {
  display: block;
  font-family: var(--font-sans);
  font-size: 0.68rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--soft-stone-grey);
  margin-bottom: 0.4rem;
}
.dev-status p {
  font-size: 0.85rem;
  line-height: 1.6;
  color: var(--soft-stone-grey);
  margin: 0;
}

/* Full-bleed statement between sections. A solid accent-colour fill read
   like a corporate banner rather than an editorial device (this was
   already true of Air specifically, and it's true of the others too), so
   the accent now whispers as a hairline border instead of announcing
   itself as a background — plain limestone, large italic Cormorant
   Garamond in ink, on every experience except After Dark. */
.quote-interlude {
  /* More vertical room — clamp(5rem, 12vh, 9rem), up from clamp(4rem, 10vh,
     7rem) — so this reads as a genuine pause between chapters rather than
     a slightly taller section. */
  padding: clamp(5rem, 12vh, 9rem) var(--space-md);
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
}
.quote-interlude p {
  font-family: var(--font-statement);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(1.7rem, 4vw, 2.6rem);
  line-height: 1.45;
  max-width: 42rem;
  margin: 0;
}
.quote-interlude.on-accent {
  background-color: var(--limestone);
  color: var(--chocolate);
  border-top: 2px solid var(--accent-strong, var(--aged-brass));
  border-bottom: 2px solid var(--accent-strong, var(--aged-brass));
}

/* After Dark used to be a deliberate exception here — a full-bleed purple
   nebula gradient behind this quote, on the reasoning that it echoed the
   hero. In practice it reads as a jarring colour banner rather than an
   editorial pause, especially now that the rest of the site keeps colour
   to hairlines and single accents. Removed so After Dark now shares the
   same quiet limestone treatment as every other experience page. */

.quote-interlude.on-dark {
  background-color: var(--basalt-charcoal);
  color: var(--warm-ivory);
}
.quote-interlude.on-dark p { color: var(--warm-ivory); -webkit-text-stroke: 0.3px var(--accent-strong); }

/* Numbered format list — "three ways to experience", collaboration
   formats, and similar short enumerated lists */
.format-list {
  max-width: 46rem;
  margin: var(--space-lg) auto 0;
}
.format-list li {
  display: flex;
  gap: 1.2rem;
  align-items: baseline;
  padding: 1rem 0;
  border-bottom: var(--border-hairline);
}
.format-list .n {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: 1.1rem;
  color: var(--accent-strong, var(--aged-brass));
  flex: 0 0 auto;
}
.format-list .t { font-size: 0.98rem; color: var(--basalt-charcoal); }

/* Acts — alternating illustration / copy spreads describing the flow of
   an experience from start to finish. No boxed panels: both the
   illustration and the copy sit directly on the page background instead
   of being tiled rectangles. The split ratio flips every second act, so
   the image width — and therefore its height, since it's aspect-ratio
   driven — genuinely varies act to act rather than repeating a fixed
   template. (An earlier version stretched the final act to a full-width
   band; with several of the closing acts having no line art in their
   panel, that read as a large empty box, so it's back to the same
   side-by-side treatment as the rest.) Piloted on SALT Air, approved,
   now applied to all six experience pages. */
.acts {
  display: flex;
  flex-direction: column;
  gap: clamp(4rem, 9vw, 7rem);
  padding: clamp(1rem, 4vw, 2.5rem) 0;
}

.act {
  display: flex;
  align-items: center;
  gap: clamp(2.5rem, 6vw, 5rem);
  padding: 0 var(--space-md);
}

.act:nth-child(even) { flex-direction: row-reverse; }

.act > .scene-panel { flex: 1 1 58%; }
.act > .act-copy { flex: 1 1 42%; }

.act:nth-child(2n) > .scene-panel { flex-basis: 46%; }
.act:nth-child(2n) > .act-copy { flex-basis: 54%; }

.act .scene-panel {
  aspect-ratio: 4 / 3;
  min-height: 0;
  border-radius: 3px;
  border: none;
}

.act-copy {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 0;
  background: none;
  color: var(--basalt-charcoal);
}

/* Chocolate fill with a coloured hairline stroke from each experience's
   own accent — reads clearly against the light limestone page background
   now that copy is no longer sitting on a solid dark panel. */
.act-label {
  font-family: var(--font-statement);
  font-style: italic;
  font-size: 2.4rem;
  line-height: 1;
  color: var(--chocolate);
  -webkit-text-stroke: 0.3px var(--accent-strong);
  margin-bottom: 0.6rem;
}
.act-copy h3 { color: var(--basalt-charcoal); font-size: 1.4rem; margin-bottom: 0.6rem; }
.act-copy p { color: rgba(23, 20, 15, 0.72); max-width: 26rem; }
.act-copy .act-note {
  margin-top: 1rem;
  font-size: 0.78rem;
  font-style: italic;
  color: rgba(23, 20, 15, 0.5);
}

@media (max-width: 820px) {
  .act {
    flex-direction: column;
    align-items: stretch;
  }
  .act > .scene-panel,
  .act > .act-copy,
  .act:nth-child(2n) > .scene-panel,
  .act:nth-child(2n) > .act-copy {
    flex-basis: auto;
  }
  .act .scene-panel {
    min-height: 260px;
    aspect-ratio: 4 / 3;
  }
}

/* Guest journey / partner journey timeline (reused verbatim styling from
   the master .timeline pattern used elsewhere would collide with this
   page's own accent, so it's redeclared here scoped to experience pages) */
.exp-timeline { position: relative; padding-left: 2.2rem; max-width: 40rem; }
.exp-timeline::before {
  content: "";
  position: absolute;
  left: 6px; top: 6px; bottom: 6px;
  width: 1px;
  background-color: var(--accent-strong, var(--aged-brass));
  opacity: 0.4;
}
.exp-timeline .t-item { position: relative; padding-bottom: 1.8rem; }
.exp-timeline .t-item:last-child { padding-bottom: 0; }
.exp-timeline .t-item::before {
  content: "";
  position: absolute;
  left: -2.2rem; top: 0.3rem;
  width: 8px; height: 8px;
  border-radius: 50%;
  background-color: var(--accent-strong, var(--aged-brass));
}
.exp-timeline h4 { font-family: var(--font-sans); font-weight: 600; font-size: 1.02rem; margin-bottom: 0.2rem; }
.exp-timeline p { font-size: 0.9rem; color: var(--soft-stone-grey); max-width: 30rem; }

/* "For hospitality partners" section reused across every experience page.
   Previously a solid chocolate panel — but with Closing CTA and the footer
   both also chocolate now, that meant three consecutive dark blocks
   stacked at the bottom of every page. Moved onto the plain page
   background instead, flowing continuously with Guest Journey above it,
   so Closing CTA remains the one deliberate dark accent before the
   footer rather than one of three repeats. */
.exp-partnership .eyebrow { color: var(--soft-stone-grey); }
/* Chocolate fill, coloured hairline stroke — same treatment as .act-label,
   since several accent colours don't pass solid-fill contrast here either. */
.exp-partnership h2 {
  color: var(--chocolate);
  -webkit-text-stroke: 0.3px var(--accent-strong);
}
.exp-partnership .section-intro { color: rgba(23, 20, 15, 0.72); }

/* Two-column "what SALT provides / what a partner provides" */
.provide-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-lg);
}
.provide-cols h4 {
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  /* Chocolate rather than accent-strong: at this small size several of the
     accent colours fall short of AA against limestone. */
  color: var(--chocolate);
  margin-bottom: 0.8rem;
}
.provide-cols li {
  font-size: 0.92rem;
  color: rgba(23, 20, 15, 0.75);
  padding: 0.5rem 0;
  border-bottom: var(--border-hairline);
}

@media (max-width: 760px) {
  .provide-cols { grid-template-columns: 1fr; gap: var(--space-md); }
}

/* Closing call-to-collaboration block */
.closing-cta {
  /* Limestone rather than chocolate — matches the Partners/Founder's Note
     fix on the homepage, so the page reads as one continuous surface all
     the way to the footer instead of ending on a stacked dark panel. */
  text-align: center;
  background-color: var(--limestone);
  color: var(--basalt-charcoal);
}
.closing-cta h2 { color: var(--chocolate); -webkit-text-stroke: 0.3px var(--accent-strong); }
.closing-cta p { color: rgba(23, 20, 15, 0.75); max-width: 34rem; margin: 0 auto var(--space-sm); }
.closing-cta .cta { margin-top: var(--space-sm); color: var(--chocolate); border-color: var(--accent-strong); }
.closing-cta .cta:hover { background-color: var(--accent-strong); color: var(--deep-ink); }
.accent-air .closing-cta .cta:hover,
.accent-sorrel .closing-cta .cta:hover,
.accent-afterdark .closing-cta .cta:hover,
.accent-studio .closing-cta .cta:hover,
.accent-kitchen .closing-cta .cta:hover {
  /* Ink fails against these four accents at this size — ivory instead.
     Aged-brass (Private) keeps ink, which reads better against it. */
  color: var(--warm-ivory);
}
