/* Esmé Travel — editorial, architectural, restrained.
   Palette per brand brief: Chalk / Ink / Mineral + one principal accent (Aubergine). */

@font-face {
  font-family: "Newsreader";
  src: url("fonts/newsreader-latin-opsz-normal.woff2") format("woff2");
  font-weight: 200 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Hanken Grotesk";
  src: url("fonts/hanken-grotesk-latin-wght-normal.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

:root {
  --chalk: #F4F1EA;
  --ink: #171717;
  --mineral: #A7A49D;
  --aubergine: #4F1F34;

  --ink-soft: #57554f;                       /* Ink toward Mineral, for readable secondary text on Chalk */
  --rule: rgb(167 164 157 / .75);            /* Mineral hairlines */
  --mineral-wash: #e2dfd7;                   /* Mineral at low strength, quiet backgrounds */

  --serif: "Newsreader", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
  --sans: "Hanken Grotesk", "Helvetica Neue", Helvetica, Arial, sans-serif;

  --pad: clamp(1.25rem, 4vw, 4rem);
  --max: 88rem;
  --gutter: max(var(--pad), calc((100vw - var(--max)) / 2));
  --nav-h: 4.5rem;

}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: var(--nav-h); -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--chalk);
  color: var(--ink);
  font: 400 1.125rem/1.65 var(--serif);
  font-optical-sizing: auto;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  word-spacing: .04em;
}
h1, h2, h3, p, blockquote { margin: 0; }
h1, h2, h3 { font-weight: 300; letter-spacing: -.015em; text-wrap: balance; }
a { color: inherit; }
img { max-width: 100%; }

:focus-visible { outline: 2px solid var(--aubergine); outline-offset: 4px; }
.hero :focus-visible, .approach :focus-visible, footer :focus-visible { outline-color: var(--chalk); }

.skip {
  position: absolute; left: var(--pad); top: -4rem; z-index: 100;
  background: var(--aubergine); color: var(--chalk); padding: .75rem 1rem;
  font: 500 .8rem/1 var(--sans); letter-spacing: .1em; text-decoration: none;
}
.skip:focus { top: .75rem; }

/* ---------- Shared type ---------- */
.eyebrow, .kicker {
  font: 500 .72rem/1.4 var(--sans);
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 1.25rem;
}
.text-link {
  display: inline-block;
  margin-top: 1.75rem;
  padding-bottom: .35rem;
  border-bottom: 1px solid currentColor;
  font: 500 .78rem/1.2 var(--sans);
  letter-spacing: .16em;
  text-transform: uppercase;
  text-decoration: none;
}
.text-link { color: var(--aubergine); }
.text-link:hover { color: var(--ink); }

section[id], main > span { scroll-margin-top: var(--nav-h); }

/* ---------- Navigation ---------- */
.nav {
  position: sticky; top: 0; z-index: 50;
  display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap;
  min-height: var(--nav-h);
  padding: 0 var(--pad);
  background: var(--chalk);
  border-bottom: 1px solid var(--rule);
}
.brand { display: inline-flex; flex-direction: column; align-items: center; text-align: center; text-decoration: none; color: var(--aubergine); line-height: 1; }
/* Tracking adds space after the last letter; the matching left padding keeps each line optically centred. */
.wordmark { font: 400 1.5rem/1 var(--serif); letter-spacing: .34em; padding-left: .34em; }
.travel { font: 500 .56rem/1 var(--sans); letter-spacing: .62em; padding-left: .62em; margin-top: .45rem; }
.nav nav {
  display: flex; align-items: center; gap: clamp(1.25rem, 2.4vw, 2.5rem);
  font: 500 .74rem/1 var(--sans); letter-spacing: .14em; text-transform: uppercase;
}
.nav nav a { text-decoration: none; padding: .5rem 0; border-bottom: 1px solid transparent; }
.nav nav a:hover { border-bottom-color: currentColor; }
.nav .nav-cta { padding: .85rem 1.15rem; background: var(--aubergine); border: 1px solid var(--aubergine); color: var(--chalk); }
.nav .nav-cta:hover { background: var(--ink); border-color: var(--ink); }
.menu {
  display: none;
  background: none; border: 1px solid var(--aubergine); border-radius: 0; color: var(--aubergine);
  padding: .65rem 1rem; cursor: pointer;
  font: 500 .74rem/1 var(--sans); letter-spacing: .14em; text-transform: uppercase;
}

/* ---------- Photographs ----------
   Every photograph sits in a .frame. The frame fixes the proportions up front (no layout shift),
   the image fills it with object-fit: cover and is never stretched. Solid brand colour shows
   behind the photograph and only ever appears if a file fails to load. */
.frame {
  position: relative; margin: 0; overflow: hidden;
  aspect-ratio: var(--ratio, 4 / 5);
  background: var(--tone, var(--mineral));
}
.frame img {
  position: absolute; inset: 0; display: block;
  width: 100%; height: 100%;
  object-fit: cover; object-position: var(--focus, 50% 50%);
}
.frame.is-missing img { visibility: hidden; }

/* ---------- Hero ---------- */
.hero {
  position: relative; isolation: isolate; overflow: hidden;
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  grid-template-rows: 1fr auto;
  column-gap: 1.5rem;
  min-height: max(36rem, calc(100svh - var(--nav-h)));
  color: var(--chalk);
  background: var(--aubergine);
}
.hero-strap {
  grid-column: 9 / -1; grid-row: 1;
  justify-self: end; text-align: right;
  padding: clamp(1.5rem, 3vw, 2.5rem) var(--pad) 0 0;
  font: 500 .72rem/1.9 var(--sans); letter-spacing: .2em; text-transform: uppercase;
}
.hero-copy {
  grid-column: 1 / span 8; grid-row: 2; align-self: end;
  padding: 0 0 clamp(2.5rem, 6vw, 5rem) var(--pad);
}
.hero h1 {
  font-size: clamp(4rem, 11vw, 9.5rem);
  line-height: .9; letter-spacing: -.035em; font-weight: 300;
}
.hero-copy p { max-width: 36ch; margin-top: 1.75rem; font-size: clamp(1.15rem, 1.7vw, 1.4rem); line-height: 1.45; }
.hero-copy .text-link { color: var(--chalk); }
.hero-copy .text-link:hover { color: var(--chalk); opacity: .75; }
.hero-aside {
  grid-column: 9 / -1; grid-row: 2; align-self: end;
  background: var(--chalk); color: var(--ink);
  padding: clamp(1.75rem, 3vw, 3rem);
}
.hero-aside .kicker { margin-bottom: 0; }
.hero-aside .rule { width: 3rem; height: 1px; background: var(--aubergine); margin: 1.1rem 0 1.5rem; }
.hero-aside h2 { font-size: clamp(1.9rem, 2.8vw, 2.6rem); line-height: 1.08; }
.hero-aside p:not(.kicker) { margin-top: 1.25rem; color: var(--ink-soft); font-size: 1.05rem; max-width: 34ch; }
.hero-aside .text-link { margin-top: 1.5rem; }

/* ---------- Manifesto ---------- */
.manifesto {
  display: grid; grid-template-columns: minmax(11rem, 3fr) 9fr; gap: 2rem;
  padding: clamp(5rem, 12vw, 10rem) var(--gutter);
}
.manifesto-label span { display: block; width: 3rem; height: 1px; background: var(--aubergine); }
.manifesto blockquote {
  font-size: clamp(2rem, 4.6vw, 4.25rem); line-height: 1.12; font-weight: 300;
  letter-spacing: -.02em; max-width: 24ch;
}
.manifesto blockquote + p { max-width: 38rem; margin-top: 2.25rem; color: var(--ink-soft); font-size: 1.25rem; }

/* ---------- Section heads ---------- */
.section-head {
  display: grid; grid-template-columns: 8fr 4fr; column-gap: 2rem; align-items: end;
}
.section-head .eyebrow { grid-column: 1 / -1; }
.section-head h2 { font-size: clamp(2.5rem, 5vw, 4.75rem); line-height: 1.04; }
.section-head p:not(.eyebrow) { color: var(--ink-soft); max-width: 34ch; }

/* ---------- Our World ---------- */
.world { padding: clamp(3rem, 6vw, 5rem) var(--gutter) clamp(5rem, 11vw, 9rem); }
.cards {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(1rem, 2.5vw, 2.5rem); align-items: start;
  margin-top: clamp(3rem, 7vw, 6rem);
}
.cards .frame { margin-bottom: 1.5rem; }
.cards .eyebrow { margin-bottom: .6rem; }
.cards h3 { font-size: clamp(1.6rem, 2.4vw, 2.1rem); font-weight: 400; line-height: 1.15; }
.cards article > p:last-child { margin-top: .6rem; color: var(--ink-soft); font-size: 1.05rem; }

/* ---------- Journeys band ---------- */
.journey-band { display: grid; grid-template-columns: 7fr 5fr; min-height: 44rem; border-block: 1px solid var(--rule); }
.journey-band .frame { --tone: #0F5D5E; --ratio: auto; aspect-ratio: auto; min-height: 30rem; }
.journey-copy { align-self: center; padding: clamp(2.5rem, 6vw, 6rem) var(--pad); max-width: 40rem; }
.journey-copy h2 { font-size: clamp(2.25rem, 3.6vw, 3.5rem); line-height: 1.05; margin-bottom: 1.75rem; }
.journey-copy p:not(.eyebrow) { color: var(--ink-soft); }

/* ---------- Our Approach: the one aubergine block ---------- */
.approach {
  background: var(--aubergine); color: var(--chalk);
  padding: clamp(5rem, 10vw, 9rem) var(--gutter);
}
.approach .eyebrow { color: var(--mineral); }
.approach-heading h2 { font-size: clamp(2.5rem, 6vw, 5.25rem); line-height: 1.03; max-width: 16em; }
.principles {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(1.5rem, 3vw, 3rem);
  margin-top: clamp(3.5rem, 8vw, 7rem);
}
.principles article { border-top: 1px solid rgb(167 164 157 / .55); padding-top: 1.5rem; }
.principles h3 { font-size: 1.75rem; font-weight: 400; margin-bottom: .75rem; }
.principles p { color: rgb(244 241 234 / .8); font-size: 1.05rem; max-width: 24ch; }

/* ---------- Journal ---------- */
.journal { padding: clamp(5rem, 11vw, 9rem) var(--gutter); }
/* Asymmetric spreads: wide + narrow, then narrow + wide. Every item shares the same 4:3 proportion. */
.journal-grid {
  display: grid; grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: clamp(1rem, 2.5vw, 2.5rem); row-gap: clamp(3.5rem, 7vw, 6rem);
  align-items: end; margin-top: clamp(3rem, 7vw, 6rem);
}
.story--lakes   { grid-column: 1 / span 7; }
.story--japan   { grid-column: 8 / -1; }
.story--tuscany { grid-column: 1 / span 5; }
.story--france  { grid-column: 6 / -1; align-self: stretch; }

/* The whole feature is one link: photograph, label and title. */
.story { display: block; color: inherit; text-decoration: none; }
.story .frame { --ratio: 4 / 3; }
.story .frame img { transition: transform .8s cubic-bezier(.2, .6, .2, 1); }
.story-meta { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; margin: 1.25rem 0 .55rem; }
.story-meta .eyebrow { margin: 0; }
.story-arrow { font: 500 1rem/1 var(--sans); color: var(--aubergine); transition: transform .4s ease; }
.story h3 { font-size: clamp(1.5rem, 2.3vw, 2.1rem); font-weight: 400; line-height: 1.18; max-width: 22ch; }
.story h3 span {
  background: linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat;
  padding-bottom: .1em; transition: background-size .45s ease;
  -webkit-box-decoration-break: clone; box-decoration-break: clone;
}
.story:hover .frame img, .story:focus-visible .frame img { transform: scale(1.025); }
.story:hover .story-arrow, .story:focus-visible .story-arrow { transform: translateX(5px); }
.story:hover h3 span, .story:focus-visible h3 span { background-size: 100% 1px; }
.story:focus-visible { outline: 2px solid var(--aubergine); outline-offset: 8px; }

/* Text-led feature: no photograph, so the typography carries it. */
.story--france { display: flex; }
.plate {
  flex: 1; display: flex; flex-direction: column; justify-content: space-between; gap: 3rem;
  min-height: 18rem; padding: clamp(1.5rem, 3vw, 2.75rem);
  background: var(--aubergine); color: var(--chalk);
}
.plate .story-meta { margin: 0; }
.plate .eyebrow { color: var(--mineral); }
.plate .story-arrow { color: var(--chalk); }
.plate h3 { font-size: clamp(1.7rem, 2.9vw, 2.75rem); font-weight: 300; line-height: 1.12; max-width: 19em; }
.story--france:focus-visible { outline-color: var(--aubergine); }

/* ---------- Preferred access ---------- */
.access { background: var(--mineral-wash); padding: clamp(4.5rem, 9vw, 8rem) var(--gutter); overflow: hidden; }
.access-copy { max-width: 46rem; }
.access h2 { font-size: clamp(2.1rem, 4.4vw, 3.75rem); line-height: 1.06; margin-bottom: 1.5rem; }
.access-copy p:not(.eyebrow) { color: var(--ink-soft); max-width: 36rem; }
.marquee {
  margin: clamp(3rem, 6vw, 5rem) calc(-1 * var(--gutter)) 0;
  padding-block: 1.6rem;
  border-block: 1px solid var(--rule);
  overflow: hidden;
  -webkit-mask-image: linear-gradient(to right, transparent, #000 8%, #000 92%, transparent);
          mask-image: linear-gradient(to right, transparent, #000 8%, #000 92%, transparent);
}
.track { display: flex; width: max-content; animation: drift 80s linear infinite; }
.track span {
  flex: none; margin-right: clamp(3rem, 6vw, 6rem); white-space: nowrap;
  font: 400 clamp(1.05rem, 1.7vw, 1.4rem)/1 var(--serif); letter-spacing: .3em; color: var(--aubergine);
}
.marquee:hover .track { animation-play-state: paused; }
@keyframes drift { to { transform: translateX(-50%); } }

/* ---------- Beliefs ---------- */
.beliefs {
  display: grid; grid-template-columns: 5fr 7fr; gap: clamp(2rem, 5vw, 5rem); align-items: end;
  padding: clamp(5rem, 11vw, 9rem) var(--gutter);
}
.beliefs h2 { font-size: clamp(3.5rem, 9vw, 8rem); line-height: .92; letter-spacing: -.035em; color: var(--aubergine); }
.belief-list > p:first-child { font-size: clamp(1.6rem, 3vw, 2.6rem); line-height: 1.25; font-weight: 300; }
.belief-small {
  margin-top: 2.5rem; padding-top: 1.5rem; border-top: 1px solid var(--rule);
  max-width: 34rem; color: var(--ink-soft);
}

/* ---------- The name ---------- */
.esme-name {
  display: grid; grid-template-columns: minmax(6rem, 3fr) 9fr; gap: clamp(2rem, 5vw, 5rem); align-items: start;
  padding: clamp(4rem, 8vw, 7rem) var(--gutter);
  border-top: 1px solid var(--rule);
}
.name-mark {
  width: clamp(6rem, 12vw, 9.5rem); aspect-ratio: 1;
  background: var(--aubergine); color: var(--chalk);
}
.name-mark svg { display: block; width: 100%; height: 100%; }   /* É is drawn centred on its own ink bounds */
.esme-name h2 { font-size: clamp(1.75rem, 3.4vw, 3rem); line-height: 1.12; max-width: 22em; }
.esme-name p:not(.eyebrow) { margin-top: 1.5rem; color: var(--ink-soft); max-width: 36rem; }
.esme-name .text-link { margin-top: 2rem; }

/* ---------- Where next ---------- */
.plan {
  display: grid; grid-template-columns: 5fr 7fr; gap: clamp(2.5rem, 6vw, 6rem); align-items: center;
  padding: clamp(5rem, 11vw, 9rem) var(--gutter);
  border-top: 1px solid var(--rule);
}
.plan h2 { font-size: clamp(2.25rem, 4vw, 3.75rem); line-height: 1.03; margin-bottom: 1.5rem; }
.plan-copy p:not(.eyebrow) { color: var(--ink-soft); max-width: 30rem; }
.plan .frame { --ratio: 5 / 4; --tone: var(--mineral); }
.button {
  display: inline-block; margin-top: 2.25rem; padding: 1.15rem 1.9rem;
  background: var(--aubergine); color: var(--chalk); text-decoration: none;
  font: 500 .78rem/1 var(--sans); letter-spacing: .16em; text-transform: uppercase;
}
.button:hover { background: var(--ink); }

/* ---------- Footer ---------- */
footer {
  display: grid; grid-template-columns: 5fr 4fr 3fr; gap: clamp(2rem, 5vw, 5rem);
  padding: clamp(3.5rem, 7vw, 6rem) var(--gutter);
  background: var(--aubergine); color: var(--chalk);
}
footer .brand { color: var(--chalk); }
footer p { color: rgb(244 241 234 / .72); font-size: 1rem; max-width: 30ch; }
.footer-brand { margin-bottom: 1.5rem; }
footer .footer-tagline { color: var(--chalk); font-size: clamp(1.5rem, 2.4vw, 2rem); font-weight: 300; line-height: 1.2; }
footer .fineprint { margin-top: 1rem; color: var(--mineral); font: 400 .8rem/1.5 var(--sans); }
.footer-links { display: flex; flex-direction: column; gap: .9rem; align-items: flex-start; font: 500 .74rem/1 var(--sans); letter-spacing: .14em; text-transform: uppercase; }
.footer-links a { text-decoration: none; padding-bottom: .25rem; border-bottom: 1px solid transparent; }
.footer-links a:hover { border-bottom-color: currentColor; }

/* ---------- Tablet & mobile ---------- */
@media (max-width: 62rem) {
  .js .menu { display: block; }
  .js .nav nav { display: none; }
  .js .nav.is-open nav {
    display: flex; flex-direction: column; align-items: flex-start; gap: .25rem;
    flex-basis: 100%; padding: 1rem 0 1.75rem;
  }
  .js .nav.is-open { border-bottom-color: var(--ink); }
  .js .nav.is-open nav a { padding: .75rem 0; }
  .js .nav.is-open .nav-cta { margin-top: .75rem; }
  .nav { padding-block: .9rem; }
  .nav nav { width: 100%; flex-wrap: wrap; padding-top: .75rem; }

  .journey-band { grid-template-columns: 1fr; min-height: 0; }
  .journey-band .frame { min-height: 26rem; }
  .principles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .beliefs { grid-template-columns: 1fr; }
  footer { grid-template-columns: 1fr 1fr; }
  footer > div:first-child { grid-column: 1 / -1; }
}

@media (max-width: 50rem) {
  .hero { grid-template-rows: 1fr auto auto; }
  .hero-strap { grid-column: 1 / -1; }
  .hero-copy { grid-column: 1 / -1; padding-right: var(--pad); }
  .hero-aside { grid-column: 1 / -1; grid-row: 3; margin: 0 var(--pad) var(--pad); }
  .manifesto, .esme-name { grid-template-columns: 1fr; gap: 1.5rem; }
  .section-head { grid-template-columns: 1fr; row-gap: 1.5rem; }
  .cards { grid-template-columns: 1fr; row-gap: 3rem; }
  .journal-grid { grid-template-columns: 1fr; row-gap: 3rem; align-items: start; }
  .journal-grid > .story { grid-column: 1 / -1; }
  .plate { min-height: 15rem; }
  .plan { grid-template-columns: 1fr; }
  .principles { grid-template-columns: 1fr; }
  footer { grid-template-columns: 1fr; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .track { animation: none; }
  .marquee { overflow-x: auto; -webkit-mask-image: none; mask-image: none; }
  .track span[aria-hidden="true"] { display: none; }
  .story .frame img, .story-arrow, .story h3 span { transition: none; }
  .story:hover .frame img, .story:focus-visible .frame img, .story:hover .story-arrow, .story:focus-visible .story-arrow { transform: none; }
}
