@font-face { font-family:'Kilimanjaro'; src:url('public/fonts/kilimanjaro.ttf') format('truetype'); font-display:block; }
@font-face { font-family:'CSHand';      src:url('public/fonts/cs-hand.otf')     format('opentype'); font-display:swap; }
@font-face { font-family:'Roboto Mono'; src:url('public/fonts/roboto-mono.ttf')  format('truetype'); font-weight:100 700; font-style:normal; font-display:swap; }
@font-face { font-family:'Roboto';      src:url('public/fonts/roboto.ttf')       format('truetype'); font-weight:100 900; font-style:normal; font-display:swap; }

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

:root {
  --bg:    #EDECEA;
  --ink:   #1A1A1A;
  --cream: #FFFFEB;
  --cream-2: #FBF9EC;
  --muted: #7c7968;
  --line:  #B9B7AE;
  --dark:  #252E34;
  --mono: 'Roboto Mono', ui-monospace, "SF Mono", SFMono-Regular, Menlo, Monaco, "Liberation Mono", monospace;
}

/* clip horizontal overflow at the root so the car sweeping in from off-screen
   (intro starts at x = vw*1.16) never adds a stray bar on the right */
html, body { width: 100%; overflow-x: clip; }

body {
  position: relative;               /* anchor for the document-spanning car layer */
  background: var(--bg);
  color: var(--ink);
  font-family: var(--mono);
  font-weight: 500;                 /* Roboto Mono medium for all secondary/body text */
  -webkit-font-smoothing: antialiased;
  -webkit-user-select: none;
  user-select: none;
  /* horizontal clipping handled by `overflow-x: clip` above — hidden here would
     make <body> a scroll container and break the sticky home header */
}
::selection { background: var(--ink); color: var(--cream); }
.home img, #car-layer img { -webkit-user-drag: none; user-drag: none; }

/* Film grain */
.grain {
  position: fixed; inset: 0; pointer-events: none; z-index: 9999;
  opacity: 0.5; mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.28'/%3E%3C/svg%3E");
  background-size: 180px 180px;
}

/* ============================================================
   HOME — responsive, full-bleed sections + capped content
   ============================================================ */
/* overflow-x: CLIP (not hidden) — hidden would make .home a scroll container and
   break the sticky home header; clip only cuts the horizontal spill (unscaled
   #map art, car sweeping in) without capturing sticky positioning */
.home { position: relative; width: 100%; overflow-x: clip; }
.home section { position: relative; width: 100%; }
.container { width: 100%; max-width: 1200px; margin-inline: auto; padding-inline: clamp(20px, 5vw, 90px); }

/* full-bleed background media + scrims (fill the section at any width) */
.bg    { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; z-index: 0; }
.scrim { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
.hero-scrim  { background: linear-gradient(180deg, rgba(20,18,14,.10) 0%, rgba(20,18,14,0) 22%, rgba(20,18,14,0) 74%, rgba(20,18,14,.26) 100%); }
.video-scrim { background: linear-gradient(180deg, rgba(15,14,12,.1) 0%, rgba(15,14,12,0) 45%, rgba(15,14,12,.5) 100%); }
.outro-scrim { background: linear-gradient(180deg, rgba(15,14,12,.15) 0%, rgba(15,14,12,0) 40%, rgba(15,14,12,.5) 100%); }

/* ---- HERO — matched to Figma (desktop 1108×677, mobile 379×674) ---- */
/* desktop: the 3:2 art, top-aligned in a 1108/677 frame (bottom ~9% clipped, as
   in Figma). Mobile switches to the 9:16 portrait art below. Text is absolutely
   placed to the Figma positions at each breakpoint. */
.hero { aspect-ratio: 1108 / 677; display: flex; overflow: hidden; }
.hero .bg-desktop { object-position: center top; }
.hero .bg-mobile { display: none; }
.hero-inner { position: absolute; inset: 0; z-index: 2; max-width: none; padding: 0;
  text-align: center; color: var(--cream); }
.hero-title { position: absolute; top: 2.5%; left: 0; right: 0; padding-inline: clamp(16px, 4vw, 80px);
  font-family: 'Kilimanjaro', sans-serif; }
.hero-title .t-sm { font-size: clamp(28px, 8.12vw, 160px); line-height: .98; letter-spacing: -.01em; }
.hero-title .t-lg { font-size: clamp(62px, 18.05vw, 360px); line-height: .84; letter-spacing: -.01em; }
/* bottom stays near the photo's base, but never drops below the fold on tall
   heroes: clamp it to ~93vh from the top when the hero is taller than the viewport */
.hero-bottom { position: absolute; bottom: max(4%, calc(100% - 93vh)); left: 0; right: 0; padding-inline: clamp(16px, 4vw, 60px);
  display: flex; flex-direction: column; align-items: center; gap: clamp(3px, .6vh, 7px); }
.hero-caption { font-weight: 700; font-size: clamp(12px, 1.5vw, 16px); letter-spacing: .18em; color: var(--cream-2); }
.partner { display: flex; align-items: center; justify-content: center; gap: 5px; }
.partner span { font-weight: 500; font-size: clamp(12px, 1.5vw, 16px); letter-spacing: .18em; color: var(--cream-2); }
/* logo recoloured to EXACTLY the warm cream text colour via a mask (a filter can
   only make it pure white, which reads too cool next to the cream text) */
.partner .lexus-mark { display: inline-block; height: clamp(19px, 2.52vw, 23px); aspect-ratio: 1920 / 436;
  transform: translateY(2px);   /* nudge down onto the text baseline */
  background: var(--cream-2);
  -webkit-mask: url(public/lexus-logo.png) center / contain no-repeat;
          mask: url(public/lexus-logo.png) center / contain no-repeat; }

/* ============================================================
   THE MAP — interactive map (native 993 × 668), scaled by JS
   ============================================================ */
.map-sec { padding-block: clamp(34px, 6vh, 74px) clamp(4px, 1vh, 14px); }
.map-title { text-align: center; font-family: 'Kilimanjaro', sans-serif; font-weight: 400;
  font-size: clamp(38px, 8vw, 74px); line-height: .9; letter-spacing: .005em; color: var(--ink);
  margin-bottom: clamp(12px, 3vh, 32px); }
/* hand-drawn underline beneath the title (Figma Vector 177) */
.map-title::after { content: ""; display: block; width: clamp(112px, 14.6vw, 163px); height: 5.5px;
  margin: 7px auto 0; background: url("public/map/title-underline.svg") center / 100% 100% no-repeat; }

#map-wrap { position: relative; width: min(980px, 92vw); margin-inline: auto; aspect-ratio: 993 / 668; }
/* home map runs larger so the map-exit dashed line reaches down to the video */
.map-sec:not(.sub-map) #map-wrap { width: min(1240px, 94vw); }
#map { position: absolute; top: 0; left: 0; width: 993px; height: 668px; transform-origin: top left; /* scale set by JS */ }
#map > * { position: absolute; }

/* state shapes — paper cut-outs with a soft drop shadow */
.state { display: block; max-width: none; opacity: 1; pointer-events: none;
  transition: filter 260ms ease, opacity 300ms ease, transform 260ms ease; }
.state.lit { filter: brightness(0.9) contrast(1.05); transform: scale(1.01); }

/* photo cut-outs */
.photo { overflow: hidden; mask-repeat: no-repeat; -webkit-mask-repeat: no-repeat; pointer-events: none; }
.photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  pointer-events: none; transition: filter 340ms ease, opacity 340ms ease; }
.photo.bw img    { filter: grayscale(1); opacity: .62; }
.photo.color img { filter: grayscale(1); opacity: .82; }
.photo.color.on img,
.photo.color.active img { filter: grayscale(0); opacity: 1; }

/* "#1"–"#4" stop numbers (native map coords, from the Figma map) */
.map-num { z-index: 5; font-family: var(--mono); font-weight: 500; font-size: 21px;
  letter-spacing: -.022em; color: #000; pointer-events: none; transition: opacity .3s ease; }

/* focused: fade the rest of the map so the active stop's photo stands out */
#map.focused .state:not(.active),
#map.focused .photo:not(.active),
#map.focused .map-num:not(.active),
#map.focused .xmark:not(.active) { opacity: .32; }

/* thin coastline/border detail strokes + dashed routes (native map coords) */
.map-line  { z-index: 5; pointer-events: none; }
.map-route { z-index: 3; pointer-events: none; }

/* ---- X-mark hotspots ---- */
#stops { z-index: 6; left: 0; top: 0; width: 993px; height: 668px; pointer-events: none; }
.xmark { position: absolute; width: 38px; height: 37px; pointer-events: auto; cursor: pointer;
  transform: translate(-50%, -50%); transition: opacity .3s ease; }
.xmark svg { display: block; width: 100%; height: 100%; filter: drop-shadow(0 1px 2px rgba(0,0,0,.18)); }
.xmark path { fill: #111; stroke: #111; transition: fill .2s ease, stroke .2s ease; }
.xmark:hover path { fill: #000; stroke: #000; }

/* ---- connector + stop card ---- */
#connector { z-index: 6; left: 0; top: 0; pointer-events: none; opacity: 0; transition: opacity .3s ease; }
#connector.show { opacity: 1; }
#connector path { stroke: #1A1A1A; stroke-width: 1.6; fill: none; }

.stop-card { z-index: 7; left: 300px; top: 200px; width: 266px;
  background: #fff; border: 1px solid #000; padding: 20px;
  display: flex; flex-direction: column; gap: 12px;
  opacity: 0; visibility: hidden; transform: translateY(6px) scale(.98);
  transition: opacity .28s ease, transform .28s ease, visibility .28s; pointer-events: none; }
.stop-card.show { opacity: 1; visibility: visible; transform: none; pointer-events: auto; }
.sc-eyebrow { font-size: 15px; font-weight: 500; letter-spacing: .04em; color: #1e1e1e; }
.sc-title   { font-family: 'Kilimanjaro', sans-serif; font-weight: 400; font-size: 32px; line-height: .96; color: #000; }
.sc-photo   { width: 100%; aspect-ratio: 16 / 11; overflow: hidden; background: #d9d7cd; margin-top: 2px; }
.sc-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sc-cta { align-self: flex-start; margin-top: 2px; text-decoration: none;
  font-size: 12px; letter-spacing: .16em; color: var(--cream); background: var(--ink);
  padding: 11px 18px; border: 1px solid var(--ink); transition: background .16s ease, color .16s ease; }
.sc-cta:hover { background: transparent; color: var(--ink); }
@keyframes ghostPulse { 0%,100% { opacity: .55; } 50% { opacity: .9; } }
/* "coming soon" stops now show a real photo and drop the CTA entirely */
.stop-card.is-soon .sc-cta { display: none; }

/* ---- mobile map: stop chooser, edge fades, pop-up card (all hidden on desktop) ---- */
.map-chooser { display: none; }
.map-chooser .chooser-label { text-align: center; font-family: var(--mono); font-weight: 500;
  font-size: 15px; letter-spacing: .06em; color: var(--ink); margin-bottom: 14px; }
.chooser-btns { display: flex; justify-content: center; gap: 8px;
  width: min(300px, calc(100% - 44px)); margin-inline: auto; }
.chooser-btn { flex: 1 1 0; max-width: 64px; height: 40px; border: 1px solid var(--ink);
  background: transparent; color: var(--ink); font-family: var(--mono); font-weight: 500;
  font-size: 16px; border-radius: 2px; cursor: pointer;
  transition: background .16s ease, color .16s ease; }
.chooser-btn:hover { background: rgba(26,26,26,.06); }
.chooser-btn.is-active { background: var(--ink); color: var(--cream); }

/* premium edge fades over the pan-able map (fade to the paper colour) */
.map-fade { position: absolute; pointer-events: none; z-index: 5; display: none; }
.map-fade-top    { top: 0;   left: 0; width: 100%; height: clamp(64px, 18vw, 104px);
  background: linear-gradient(to bottom, var(--bg), rgba(237,236,234,0)); }
.map-fade-bottom { bottom: 0; left: 0; width: 100%; height: clamp(72px, 20vw, 120px);
  background: linear-gradient(to top, var(--bg), rgba(237,236,234,0)); }
.map-fade-left   { top: 0; left: 0; height: 100%; width: clamp(22px, 8vw, 44px);
  background: linear-gradient(to right, var(--bg), rgba(237,236,234,0)); }
.map-fade-right  { top: 0; right: 0; height: 100%; width: clamp(22px, 8vw, 44px);
  background: linear-gradient(to left, var(--bg), rgba(237,236,234,0)); }

/* mobile connector line (card → active stop), viewport-space overlay */
.map-conn-m { position: absolute; inset: 0; width: 100%; height: 100%;
  pointer-events: none; z-index: 6; display: none; opacity: 0; transition: opacity .7s ease; }
.map-conn-m.show { opacity: 1; }
.map-conn-m path { stroke: #1A1A1A; stroke-width: 1.6; fill: none; }

/* mobile pop-up card — anchored to the top of the map viewport (mirrors the
   desktop stop-card content: real photo + CTA, or ghost UI for "coming soon") */
.map-card-m { position: absolute; top: clamp(10px, 2.8vw, 18px); left: 50%; transform: translateX(-50%);
  width: min(258px, calc(100% - 44px)); z-index: 7;
  background: #fff; border: 1px solid #000; padding: 14px 16px;
  display: none; flex-direction: column; gap: 8px; }
.scm-eyebrow { font-family: var(--mono); font-weight: 500; font-size: 13px; letter-spacing: .04em; color: #1e1e1e; }
.scm-title { font-family: 'Kilimanjaro', sans-serif; font-weight: 400; font-size: clamp(24px, 7.2vw, 32px);
  line-height: .94; letter-spacing: .005em; color: #000; }
.scm-photo { width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #d9d7cd; margin-top: 2px; }
.scm-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.scm-cta { align-self: flex-start; margin-top: 2px; text-decoration: none;
  font-family: var(--mono); font-size: 11px; letter-spacing: .16em; color: var(--cream);
  background: var(--ink); padding: 9px 14px; border: 1px solid var(--ink); }
/* "coming soon" stops (2–4) now show a real photo, no CTA */
.map-card-m.is-soon .scm-cta { display: none; }

/* ============================================================
   VIDEO / JOURNAL
   ============================================================ */
.journal { position: relative; }
/* dashed "journey" line weaving down through the journal (Figma Vector 15).
   The SVG viewBox is centre-symmetric (-500…500) and the element is pinned to the
   page centre at a FIXED pixel width, so 1 viewBox unit == 1px measured from centre.
   That locks every vertical run to a gutter beside the centred text column — the
   line can't drift into the text as the window resizes. Its runs: right gutter
   (+300px, clears the ~264px-half lead), the centred photo gap (0), then the left
   gutter (-400px, clears the ~355px-half body). Only the vertical scale follows the
   section height, which just lengthens the (near-vertical) runs. Bottom endpoint
   (-400px) meets the fundraise line's top endpoint (also -400px, page-centred). */
.journal-route { position: absolute; z-index: 0; left: calc(50% - 500px); top: 30%; width: 1000px; height: 70.1%;
  opacity: .8; pointer-events: none; }
.video-band, .journal-body { position: relative; z-index: 1; }
/* "WATCH THE LATEST EPISODE:" — centred label above the video (desktop + mobile) */
.watch-latest { position: relative; z-index: 1; text-align: center;
  font-family: var(--mono); font-weight: 700; font-size: clamp(13px, 1.6vw, 16px);
  letter-spacing: .12em; color: var(--ink);
  padding: clamp(26px, 6vw, 60px) 20px clamp(18px, 3.4vw, 30px); }
.video-band { width: 100%; height: clamp(360px, 56vw, 640px); overflow: hidden; }
.video-band .bg,
.video-band > img,
.video-band .scrim,
.video-band .vscrim,
.video-band .play,
.video-band .play-lg,
.video-band .video-cap { transition: opacity 400ms ease; }
.video-band.is-playing .bg,
.video-band.is-playing > img,
.video-band.is-playing .scrim,
.video-band.is-playing .vscrim,
.video-band.is-playing .play,
.video-band.is-playing .play-lg,
.video-band.is-playing .video-cap { opacity: 0; pointer-events: none; }
.video-iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; z-index: 4; }
.play { position: absolute; left: 50%; top: 46%; transform: translate(-50%,-50%); z-index: 3;
  width: clamp(64px, 8vw, 100px); height: auto; border: none; background: transparent; cursor: pointer; padding: 0; display: block; }
.play svg { width: 100%; height: auto; filter: drop-shadow(0 3px 14px rgba(0,0,0,.4)); transition: transform 140ms ease; display: block; }
.play:hover svg { transform: scale(1.06); }
.play:active svg { transform: scale(.96); }
.video-cap { position: absolute; z-index: 3; left: clamp(20px, 5vw, 60px); bottom: clamp(22px, 6vh, 64px);
  font-size: clamp(11px, 1.5vw, 13px); letter-spacing: .2em; color: var(--cream-2); line-height: 2; text-shadow: 0 1px 8px rgba(0,0,0,.55); }

.journal-body { padding-block: clamp(50px, 9vh, 112px); display: flex; flex-direction: column; gap: clamp(44px, 8vh, 100px); }
.j-lead { text-align: center; font-size: clamp(15px, 2vw, 20px); letter-spacing: .06em; line-height: 1.5; max-width: 44ch; margin-inline: auto;
  /* push the intro line down toward the photos below (counteract the parent flex gap) */
  margin-top: clamp(30px, 6vh, 72px); margin-bottom: calc(-1 * clamp(30px, 6vh, 72px)); }

/* ---- Car info tooltip (sits next to the drivable Lexus token) ---- */
.car-info { position: absolute; left: 0; top: 0; width: 16px; height: 16px; z-index: 12; will-change: transform;
  pointer-events: none; opacity: 0; transition: opacity .35s ease; }
.car-info.visible { opacity: 1; pointer-events: auto; }
.car-info-btn { width: 16px; height: 16px; border-radius: 50%; border: 1.25px solid #fff; background: transparent; color: #fff;
  font: 700 10px/1 Georgia, 'Times New Roman', serif; cursor: pointer; display: grid; place-items: center; padding: 0;
  font-style: italic; pointer-events: auto; }
.car-info-tip { position: absolute; left: 30px; top: -6px; width: 220px; padding: 10px 12px; background: #111; color: #fffceb;
  font-size: 11px; letter-spacing: .05em; line-height: 1.55; border-radius: 8px; opacity: 0; pointer-events: none;
  transition: opacity .16s ease; box-shadow: 0 8px 22px rgba(0,0,0,.28); }
.car-info:hover .car-info-tip, .car-info.open .car-info-tip { opacity: 1; }
@media (max-width: 760px) {
  .car-info-tip { left: auto; right: 30px; width: 200px; }
}
.fire-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(24px, 5vw, 76px); align-items: start; }
.fire-grid .ph.shift-down { margin-top: clamp(20px, 6vw, 96px); }
.ph { overflow: hidden; }
.ph img { width: 100%; height: auto; display: block; box-shadow: 0 12px 28px rgba(0,0,0,.12); }
.cap { font-size: clamp(9px, 1vw, 10px); letter-spacing: .09em; color: var(--muted); line-height: 1.4; margin-top: 10px; }
.j-body { text-align: center; font-size: clamp(14px, 1.6vw, 16px); line-height: 1.9; letter-spacing: .02em; max-width: 74ch; margin-inline: auto; }

/* left-justified copy block (Figma): paragraph, blank line, "OVER THE NEXT
   YEAR…" line, then the episode selector directly beneath it */
.j-block { width: 100%; max-width: 74ch; margin-inline: auto;
  display: flex; flex-direction: column; gap: clamp(18px, 3.4vh, 30px); }
.j-block .j-body { text-align: left; max-width: none; margin-inline: 0; }

/* episode selector — label + button row */
.ep-select { display: flex; flex-direction: column; align-items: flex-start; gap: clamp(14px, 2vh, 22px); }
.ep-row-label { font-family: var(--mono); font-weight: 700; font-size: clamp(13px, 1.6vw, 16px);
  letter-spacing: .1em; color: var(--ink); }
/* all four buttons on one line on desktop (they wrap only on mobile, below) */
.ep-row-btns { display: flex; flex-wrap: nowrap; gap: clamp(10px, 1.4vw, 18px); }
.ep-btn { width: clamp(120px, 15vw, 158px); height: 44px; display: flex; align-items: center; justify-content: center;
  font-size: clamp(12px, 1.4vw, 13px); letter-spacing: .14em; text-decoration: none; color: var(--cream);
  border: 1px solid var(--ink); background: var(--ink); cursor: pointer;
  transition: background .16s ease, color .16s ease, transform .18s ease, box-shadow .18s ease; }
/* subtle lift on hover OR when the car drives over the button */
.ep-btn:hover, .ep-btn.car-over { transform: translateY(-3px); box-shadow: 0 6px 18px rgba(0,0,0,.14); }
.ep-btn:not(.is-soon):hover, .ep-btn:not(.is-soon).car-over { background: #E6E6E4; color: var(--ink); }
.ep-btn.is-soon { color: #A9A79C; border-color: #C9C7BC; background: transparent; cursor: default; }
.ep-btn.is-soon:hover, .ep-btn.is-soon.car-over { color: #7c7a70; border-color: #A9A79C; }

/* ============================================================
   HELPING THE PALISADES — full-bleed dark band (#252E34)
   ============================================================ */
.fundraise { position: relative; background: var(--dark); overflow: hidden; padding-block: clamp(64px, 11vh, 130px); }
/* narrow, centred content column with generous gutters (Figma: 704px in 1108) */
.fundraise .container { position: relative; z-index: 2; max-width: 784px; padding-inline: clamp(24px, 4vw, 40px);
  display: flex; flex-direction: column; gap: clamp(30px, 5vh, 52px); }
/* white dashed journey accent (Figma Vector 176). Same centre-symmetric, fixed-px
   pinning as .journal-route: it enters top-left (meeting the black line's -400px
   endpoint), sweeps across the empty top padding, then runs straight down the RIGHT
   gutter at +390px — clearing the fundraise text/photo column (bounded to ~352px
   half) at every width. */
.fund-route { position: absolute; z-index: 1; left: calc(50% - 500px); top: 0; width: 1000px; height: 100%;
  opacity: .9; pointer-events: none; }
.pal-title { font-family: var(--mono); font-weight: 700; color: var(--cream);
  font-size: clamp(34px, 6vw, 60px); line-height: .98; letter-spacing: .005em; max-width: 18ch; }
.pal-grid { display: grid; grid-template-columns: 0.38fr 1fr; gap: clamp(20px, 3vw, 40px); align-items: start; }
.pal-copy { display: flex; flex-direction: column; gap: clamp(16px, 3vh, 28px); }
.pal-body { color: var(--cream); font-size: clamp(13px, 1.5vw, 15px); line-height: 1.9; letter-spacing: .02em; }
.pal-photo img { width: 100%; height: auto; display: block; }

.progress { position: relative; padding-top: clamp(54px, 8vw, 66px); }
.prog-amount { position: absolute; top: 0; left: 19%; transform: translateX(-50%);
  font-family: var(--mono); font-weight: 700; font-size: clamp(28px, 4vw, 38px); color: var(--cream); }
.prog-tick { position: absolute; left: 19%; top: clamp(40px, 6vw, 50px); width: 0; height: 16px; border-left: 2px solid var(--cream); }
.prog-track { position: relative; width: 100%; height: 26px; background: var(--cream); border-radius: 999px; overflow: hidden; }
.prog-fill  { height: 100%; background: var(--ink); }
.prog-scale { display: flex; justify-content: space-between; margin-top: 10px; }
.prog-min, .prog-max { font-size: clamp(12px, 1.4vw, 14px); letter-spacing: .04em; color: rgba(255,255,235,.55); }

.pill-row { display: flex; flex-wrap: wrap; justify-content: center; gap: clamp(12px, 2vw, 24px); }
.pill-btn { width: clamp(160px, 24vw, 220px); height: 46px; display: flex; align-items: center; justify-content: center;
  font-size: clamp(12px, 1.4vw, 13px); letter-spacing: .16em; text-decoration: none; color: var(--cream); background: var(--ink);
  border: 1px solid var(--cream); border-radius: 999px; cursor: pointer; transition: background .16s ease, color .16s ease; }
.pill-btn:hover { background: var(--cream); color: var(--ink); }
.pill-btn.is-ghost { background: var(--cream); color: var(--ink); border-color: var(--cream); }
.pill-btn.is-ghost:hover { background: transparent; color: var(--cream); }
.pill-btn.is-wide { width: clamp(200px, 32vw, 300px); }


/* ============================================================
   OUTRO
   ============================================================ */
.outro { min-height: min(72vh, 560px); display: flex; flex-direction: column; align-items: center;
  justify-content: flex-start; padding-top: clamp(40px, 8vh, 96px); overflow: hidden; }
.outro-title { position: relative; z-index: 2; text-decoration: none; text-align: center; white-space: nowrap;
  font-family: 'Kilimanjaro', sans-serif; font-weight: 400; color: var(--cream);
  font-size: clamp(44px, 9.5vw, 108px); line-height: .86; letter-spacing: .01em; text-shadow: 0 4px 26px rgba(0,0,0,.4);
  transition: opacity .16s ease; }
.outro-title:hover { opacity: .82; }
/* EXPLORE button under the outro title (Figma Group 4: 134×44, cream on 20% fill),
   pushed down so it sits over the GX 550 in the photo */
.outro-btn { position: relative; z-index: 2; margin-top: clamp(150px, 30vh, 320px);
  display: flex; align-items: center; justify-content: space-between;
  width: 134px; height: 44px; padding: 0 18px 0 20px;
  background: rgba(255,255,235,.2); border: 1px solid #fff; text-decoration: none;
  font-weight: 700; font-size: 16px; letter-spacing: -.022em; color: var(--cream);
  transition: background .16s ease; }
.outro-btn img { width: 17px; height: 12px; display: block; }
.outro-btn:hover { background: rgba(255,255,235,.35); }

/* ============================================================
   CAR LAYER — document-spanning, full viewport width
   ============================================================ */
/* z-index above the sticky header (500) so the car can drive over it. overflow
   is CLIP with a JS-set height == page content height, so the car (and its
   guides/shadow) can't extend the document below the last section — the car
   drives right to the bottom edge with no trailing gap. */
#car-layer { position: absolute; top: 0; left: 0; width: 100%; height: 0; overflow: clip; z-index: 600; pointer-events: none; }
#car-layer > * { position: absolute; top: 0; left: 0; }
#car { width: clamp(42px, 5vw, 58px); height: auto; transform-origin: 50% 50%; will-change: transform;
  filter: drop-shadow(0 8px 14px rgba(0,0,0,.5)); }
.guide { width: 30px; height: 30px; opacity: 0; transition: opacity 180ms ease;
  transform-origin: 50% 50%; will-change: transform, opacity; filter: drop-shadow(0 2px 6px rgba(0,0,0,.45)); }
.guide.visible { opacity: 0.9; }

/* tire tracks — one burst = one group-opacity container of opaque, overlapping
   segments, so the trail reads as a single SEAMLESS line (overlap can't darken
   because the 15% opacity lives on the container, not the segments). The whole
   burst holds, then fades out over ~1s. */
.tire-trail { position: absolute; top: 0; left: 0; pointer-events: none;
  will-change: opacity; animation: tireTrailFade 1s linear forwards; }
.tire-track { position: absolute; top: 0; left: 0; width: 16px; height: 3px; border-radius: 1.5px;
  background: #1C160F; pointer-events: none; }
@keyframes tireTrailFade { 0%, 55% { opacity: .15; } 100% { opacity: 0; } }

/* ---- home responsive breakpoints ---- */
@media (max-width: 760px) {
  .pal-grid { grid-template-columns: 1fr; }
  .fire-grid { grid-template-columns: 1fr; gap: 28px; }
  .fire-grid .ph.shift-down { margin-top: 0; }
  .fund-route, .journal-route { display: none; }

  /* ---- mobile map: a full-bleed, pan-able (Google-Maps-style) viewport ---- */
  .map-chooser { display: block; margin-bottom: clamp(14px, 3.6vw, 22px); }
  /* home map only (not the sub-page maps on Episode / Explore) */
  .map-sec:not(.sub-map) #map-wrap { width: 100vw; margin-left: calc(50% - 50vw);
    aspect-ratio: auto; height: clamp(360px, 118vw, 500px); overflow: hidden;
    touch-action: none; cursor: grab; }
  .map-sec:not(.sub-map) #map-wrap.grabbing { cursor: grabbing; }
  .map-sec:not(.sub-map) #map { transform-origin: top left; will-change: transform; } /* translate+scale set by JS */
  .map-sec:not(.sub-map) .xmark { pointer-events: none; }   /* the chooser buttons drive selection now */
  .map-sec:not(.sub-map) .map-route { display: none; }      /* no map-exit dashed line on mobile */

  /* tighten the video section — bring the labels above/below right up to the video.
     (the home .journal picks up the sub-page flex gap:96px, so shrink it here) */
  .home .journal { gap: clamp(12px, 3vw, 18px); }
  .watch-latest { padding: clamp(14px, 3.5vw, 20px) 20px clamp(4px, 1.5vw, 8px); }
  .journal-body { padding-top: clamp(8px, 2.4vw, 14px); }
  .map-sec:not(.sub-map) #stop-card,
  .map-sec:not(.sub-map) #connector { display: none; }      /* desktop card/connector off; mobile ones on */
  .map-sec:not(.sub-map) .map-fade { display: block; }
  .map-sec:not(.sub-map) .map-conn-m { display: block; }
  /* card stays laid out (so it's measurable + can fade) — shown via opacity */
  .map-sec:not(.sub-map) .map-card-m { display: flex; opacity: 0; visibility: hidden;
    pointer-events: none; transition: opacity .55s ease, visibility 0s linear .55s; }
  .map-sec:not(.sub-map) .map-card-m.show { opacity: 1; visibility: visible;
    pointer-events: auto; transition: opacity .45s ease; }
  /* 2×2 grid on mobile so all four episode buttons fit tidily */
  .ep-row-btns { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; width: 100%; max-width: 360px; }
  .ep-btn { width: 100%; max-width: none; }
  /* portrait hero art on phones — Figma mobile frame 379×674 */
  .hero { aspect-ratio: 379 / 674; }
  .hero .bg-desktop { display: none; }
  .hero .bg-mobile { display: block; }
  /* mobile Figma title/caption positions */
  .hero-title { top: 17.5%; padding-inline: clamp(14px, 5.5vw, 28px); }
  .hero-title .t-sm { font-size: 10.55vw; }
  .hero-title .t-lg { font-size: 19.79vw; }
  .hero-bottom { bottom: 12.4%; gap: clamp(52px, 11vh, 84px); padding-inline: clamp(20px, 8vw, 40px); }
  .hero-caption { font-size: clamp(13px, 3.6vw, 16px); }
  .partner span { font-size: clamp(11px, 3vw, 13px); }
  .partner .lexus-mark { height: clamp(19px, 6.05vw, 23px); }
}

/* ============================================================
   SUB-PAGES (Episode 1 / Explore) — normal document flow
   ============================================================ */
/* roaming car token (Episode / Explore pages) */
/* z-index above the fixed header (500) so the car can drive over it */
.roam-layer { position: absolute; top: 0; left: 0; width: 100%; pointer-events: none; z-index: 600; overflow: clip; }
.roam-layer > * { position: absolute; top: 0; left: 0; }
.roam-car { width: 56px; height: auto; transform-origin: 50% 50%; will-change: transform;
  filter: drop-shadow(0 8px 14px rgba(0,0,0,.4)); }
.roam-guide { width: 30px; height: 30px; opacity: 0; transition: opacity 180ms ease;
  transform-origin: 50% 50%; will-change: transform, opacity; filter: drop-shadow(0 2px 6px rgba(0,0,0,.35)); }
.roam-guide.visible { opacity: .85; }
body.roam-dragging { user-select: none; -webkit-user-select: none; cursor: grabbing; }

.site-nav { position: fixed; top: 0; left: 0; width: 100%; z-index: 500;
  display: flex; align-items: center; justify-content: space-between;
  padding: 18px 32px; background: rgba(237,236,234,.86); backdrop-filter: blur(8px);
  border-bottom: 1px solid rgba(26,26,26,.08); }
.site-nav a.nav-home { text-decoration: none; color: #000; font-family: 'Roboto', sans-serif;
  font-weight: 500; font-size: 13px; letter-spacing: .18em; }
.site-nav a.nav-home:hover { opacity: .6; }
.site-nav .nav-partner { display: flex; align-items: center; gap: 5px; }
.site-nav .nav-partner span { font-family: 'Roboto', sans-serif; font-weight: 100;
  font-size: 11px; letter-spacing: .24em; color: #000; }
.site-nav .nav-partner img { height: 18px; width: auto; display: block; }
/* home variant — in flow under the hero, then sticks to the top on scroll */
.site-nav.home-nav { position: sticky; }
@media (max-width: 760px) {
  .site-nav { padding: 14px 16px; gap: 12px; }
  .site-nav a.nav-home { font-size: 10px; letter-spacing: .1em; }
  .site-nav .nav-partner { gap: 4px; flex-shrink: 0; }
  .site-nav .nav-partner span { font-size: 9px; letter-spacing: .12em; }
  .site-nav .nav-partner img { height: 14px; }
}
@media (max-width: 460px) {
  .site-nav .nav-partner span { display: none; } /* logo alone carries the partnership mark */
}

.page { max-width: 900px; margin: 0 auto; padding: 128px 32px 120px; }
.page-eyebrow { font-size: 13px; letter-spacing: .3em; color: var(--muted); margin-bottom: 14px; }
.page-title { font-family: 'Kilimanjaro', sans-serif; font-weight: 400;
  font-size: clamp(48px, 8vw, 92px); line-height: .9; letter-spacing: .005em; color: var(--ink); }

/* near-full-width media with play button */
.media { position: relative; margin: 48px 0 8px; aspect-ratio: 16 / 9; overflow: hidden;
  background: #d9d7cd; box-shadow: 0 20px 46px rgba(0,0,0,.18); }
.media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.media .play-lg { position: absolute; inset: 0; margin: auto; width: 96px; height: 96px;
  border: none; background: transparent; cursor: pointer; display: grid; place-items: center; }
.media .play-lg svg { filter: drop-shadow(0 3px 14px rgba(0,0,0,.45)); transition: transform 140ms ease; }
.media .play-lg:hover svg { transform: scale(1.06); }
.media-cap { font-size: 11px; letter-spacing: .12em; color: var(--muted); margin-top: 12px; }

/* journal entries (legacy .entry layout — no longer used by any page) */
.entry { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: center; }
.entry.flip .entry-media { order: 2; }
.entry-media figure { margin: 0; }
.entry-media img { width: 100%; height: auto; display: block; box-shadow: 0 14px 32px rgba(0,0,0,.14); }
.entry-media figcaption { font-size: 10px; letter-spacing: .09em; color: var(--muted); margin-top: 10px; }
.entry-text h3 { font-family: 'Kilimanjaro', sans-serif; font-weight: 400; font-size: 30px;
  line-height: .98; letter-spacing: .01em; margin-bottom: 16px; }
.entry-text p { font-size: 14px; line-height: 1.9; letter-spacing: .02em; }

/* full-width single image entry */
.entry.full { grid-template-columns: 1fr; }
.entry.full .entry-media img { max-height: 620px; object-fit: cover; }

/* sub-page map — replaces the old footer nav on Episode / Explore */
.sub-map { padding-block: clamp(64px, 12vh, 130px) clamp(30px, 6vh, 70px); }
.sub-map-label { font-family: 'Kilimanjaro', sans-serif; font-weight: 400;
  font-size: clamp(20px, 2.6vw, 28px); line-height: 1; letter-spacing: .01em; color: var(--ink);
  width: min(980px, 92vw); margin: 0 auto clamp(14px, 2.5vh, 24px); }

/* ============================================================
   EPISODE 1 — exact Figma layout (node 4750:424), a 1108-wide frame.
   Every element is positioned on a proportional canvas: 1 canvas unit
   == (100/1108)cqw, so the whole layout scales exactly with the stage
   width (crisp text, no raster scaling). Below 760px it reflows to a
   single readable column (DOM order == Figma vertical order).
   ============================================================ */
.ep1x { position: relative; width: 100%;
  --gutter: clamp(24px, 5vw, 56px); --map-left: clamp(508px, 47vw, 640px); }

/* ---- HERO — title left-justified at the gutter; the full US map graphic sits
   just past the title at a FIXED scale, bleeds off the right edge (you reveal
   more of it as the screen widens) and fades out before the dashed line ---- */
.ep1-hero { position: relative; overflow: hidden;
  padding: clamp(100px, 15vw, 214px) var(--gutter) clamp(16px, 2.5vw, 30px); }
.hero-map { position: absolute; top: 0; left: var(--map-left); right: 0; bottom: 0;
  overflow: hidden; z-index: 0; pointer-events: none; }
.hero-map .ep1-map { position: absolute; left: 0; top: clamp(-10px, 0.5vw, 8px);
  width: 1057px; max-width: none; height: auto;
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 14%, #000 46%, transparent 62%);
          mask-image: linear-gradient(to bottom, transparent 0%, #000 14%, #000 46%, transparent 62%); }
/* clean fade into the paper at the very right edge of the screen */
.ep1-hero::after { content: ""; position: absolute; top: 0; bottom: 0; right: 0;
  width: clamp(80px, 13vw, 210px); z-index: 1; pointer-events: none;
  background: linear-gradient(to right, rgba(237,236,234,0), var(--bg)); }
.ep1-hero .hero-eyebrow { position: relative; z-index: 2; font-family: var(--mono); font-weight: 500;
  font-size: clamp(14px, 1.5vw, 18px); letter-spacing: -.022em; color: #1e1e1e; }
.ep1-hero .hero-title { position: relative; z-index: 2; margin-top: clamp(8px, 1.2vw, 14px);
  margin-left: -0.64em;   /* cancel Kilimanjaro's left side-bearing so the glyphs
                             optically left-align with EPISODE ONE */
  font-family: 'Kilimanjaro', sans-serif; font-weight: 400; font-size: clamp(44px, 7vw, 90px);
  line-height: 1.0; letter-spacing: -.01em; color: #000; }
.ep1-hero .watch-row { position: relative; z-index: 2; display: flex; align-items: center;
  gap: clamp(14px, 2vw, 24px); margin-top: clamp(40px, 7vw, 92px); }
.ep1-hero .watch-label { flex: 0 0 auto; font-family: var(--mono); font-weight: 500;
  font-size: clamp(14px, 1.5vw, 18px); letter-spacing: -.022em; color: #1e1e1e; white-space: nowrap; }
.ep1-hero .dash-line { flex: 1 1 auto; height: 2px;
  background-image: repeating-linear-gradient(to right, #1e1e1e 0 8px, transparent 8px 15px); }

/* ---- journal canvas (Figma-size 1108, centred, buffered) ---- */
.stage-wrap { width: 100%; }
.stage-wrap.pad { box-sizing: border-box; padding-inline: var(--gutter);
  margin-top: clamp(50px, 9vw, 108px); }   /* buffer between video and journal */
.stage { container-type: inline-size; position: relative; width: 100%;
  max-width: 1108px; margin: 0 auto; box-sizing: border-box; }
.journal-stage { aspect-ratio: 1108 / 3430; }

/* generic absolutely-placed canvas element (px→cqw via --x/--y/--w) */
.abs { position: absolute;
  left:  calc(var(--x, 0) / 1108 * 100cqw);
  top:   calc(var(--y, 0) / 1108 * 100cqw);
  width: calc(var(--w, 100) / 1108 * 100cqw); }
.abs.fs { font-size: calc(var(--fs, 18) / 1108 * 100cqw); }

/* fixed-ratio image box (cover) — no drop shadow on the journal photos */
.abs.box { height: calc(var(--h, 100) / 1108 * 100cqw); overflow: hidden; }
.abs.box > img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* side-by-side photo pair inside the journal stage */
.abs.jf-pair { height: calc(var(--h, 100) / 1108 * 100cqw); display: flex; gap: calc(14 / 1108 * 100cqw); }
.abs.jf-pair figure { flex: 1 1 0; margin: 0; overflow: hidden; }
.abs.jf-pair figure img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* vertical dashed rule down the journal (matches the hero dash line) */
.abs.dashline-v { width: 2px; margin-left: -1px;
  height: calc(var(--h, 100) / 1108 * 100cqw);
  background-image: repeating-linear-gradient(to bottom, #1e1e1e 0 8px, transparent 8px 15px); }

/* typography */
.mono { font-family: var(--mono); font-weight: 500; letter-spacing: -.022em; color: #1e1e1e; line-height: 1.5; }
.h-title { font-family: 'Kilimanjaro', sans-serif; font-weight: 400; letter-spacing: -.01em; color: #000; }
.lhpx { line-height: calc(var(--lh, 100) / 1108 * 100cqw); }
.jclose > p + p { margin-top: 1.5em; }

.stage > .mono, .stage > .h-title, .stage > .aplayer, .stage > .jp { z-index: 3; }

/* ---- video — full-bleed, scales like the home page video band
   (scoped to .ep1x so it never touches the home page's own .video-band) ---- */
.ep1x .video-band { position: relative; width: 100%; margin: clamp(6px, 1.4vw, 18px) 0 0;
  height: clamp(340px, 52vw, 680px); overflow: hidden; background: #d9d7cd; }
.ep1x .video-band > img { position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; object-position: center 46%; display: block; }
.ep1x .vscrim { position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(180deg, rgba(15,14,12,.1) 0%, rgba(15,14,12,0) 45%, rgba(15,14,12,.5) 100%); }
.ep1x .video-band .play-lg { position: absolute; inset: 0; margin: auto; z-index: 2;
  width: clamp(66px, 8vw, 100px); height: auto;
  border: none; background: transparent; cursor: pointer; padding: 0; display: grid; place-items: center; }
.ep1x .video-band .play-lg svg { width: 100%; height: auto; filter: drop-shadow(0 3px 14px rgba(0,0,0,.4)); transition: transform 140ms ease; }
.ep1x .video-band .play-lg:hover svg { transform: scale(1.06); }
.ep1x .video-band .play-lg:active svg { transform: scale(.96); }

/* ---- audio player (Figma Group 8 / Group 9) — em-based off a cqw font ---- */
.aplayer { display: flex; align-items: center; box-sizing: border-box;
  height: calc(75 / 1108 * 100cqw); padding: 0 calc(18 / 1108 * 100cqw) 0 calc(15 / 1108 * 100cqw);
  gap: calc(16 / 1108 * 100cqw); background: #fff; border: 1px solid #000;
  font-family: var(--mono); font-weight: 500; font-size: calc(12 / 1108 * 100cqw); }
.ap-play { flex: 0 0 auto; width: 3.833em; height: 3.833em; border-radius: 50%;
  border: 1px solid #000; background: transparent; cursor: pointer;
  display: grid; place-items: center; padding: 0; transition: background .16s ease; }
.ap-play:hover { background: rgba(0,0,0,.06); }
.ap-play svg { width: 1.5em; height: 1.5em; }
.ap-play svg path, .ap-play svg rect { fill: #000; }
.ap-play .ic-pause { display: none; }
.aplayer.playing .ap-play .ic-play { display: none; }
.aplayer.playing .ap-play .ic-pause { display: block; }
.ap-main { flex: 1 1 auto; min-width: 0; }
.ap-row { display: flex; align-items: baseline; justify-content: space-between; gap: 1em; }
.ap-name { letter-spacing: -.02em; color: #1e1e1e; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ap-time { flex: 0 0 auto; color: #1e1e1e; }
.ap-track { position: relative; height: 1em; margin-top: 1.4em; cursor: pointer; }
.ap-track::before { content: ""; position: absolute; left: 0; right: 0; top: 50%;
  height: .25em; transform: translateY(-50%); background: #000; }
.ap-fill { position: absolute; left: 0; top: 50%; height: .25em; width: 0; transform: translateY(-50%); background: #000; }
.ap-dot { position: absolute; left: 0; top: 50%; width: 1em; height: 1em; margin-left: -.5em;
  transform: translateY(-50%); border-radius: 50%; background: #000; }

/* ---- explore the other stops (map heading) — tight gap after the journal ---- */
.ep1-map { padding-top: clamp(20px, 3vw, 40px); }
.explore-title { text-align: center; font-family: 'Kilimanjaro', sans-serif; font-weight: 400;
  font-size: clamp(34px, 5vw, 55px); line-height: 1; letter-spacing: -.01em; color: #000;
  margin-bottom: clamp(20px, 4vw, 48px); }

/* ---- episode selector buttons above the map (Figma Rect 7–10) ---- */
.ep-choose { display: flex; flex-wrap: wrap; justify-content: center; gap: 5px;
  margin-bottom: clamp(30px, 5vw, 60px); }
.epc-btn { width: 170px; height: 40px; display: flex; align-items: center; justify-content: center;
  font-family: var(--mono); font-weight: 700; font-size: 16px; letter-spacing: -.02em;
  text-decoration: none; border: 1px solid #000; background: #d9d9d9; color: #000;
  transition: transform .18s ease, box-shadow .18s ease, background .16s ease, color .16s ease; }
.epc-btn.is-active { background: #000; color: #fff; }
.epc-btn.is-soon { cursor: default; }
.epc-btn.is-active:hover, .epc-btn.car-over { transform: translateY(-3px); box-shadow: 0 6px 18px rgba(0,0,0,.16); }
.epc-btn.is-active:hover { background: #E6E6E4; color: #000; }
.epc-btn.is-soon:hover { background: #E6E6E4; }

/* ---- mobile: reflow the journal canvas into a single readable column ---- */
@media (max-width: 760px) {
  .ep1-hero { padding: 84px 22px 8px; }
  .ep1-hero::after { display: none; }
  /* mobile: the California end of the map floats to the right, below the title */
  .hero-map { position: absolute; top: 150px; left: auto; right: 0; bottom: auto;
    width: 66vw; height: 210px; overflow: hidden; z-index: 0; }
  .hero-map .ep1-map { position: absolute; top: 0; left: -6vw; right: auto; width: 122vw; height: auto;
    -webkit-mask-image: linear-gradient(to bottom, #000 70%, transparent 100%);
            mask-image: linear-gradient(to bottom, #000 70%, transparent 100%); }
  .ep1-hero .hero-title { font-size: 44px; position: relative; z-index: 2; }
  .ep1-hero .hero-eyebrow { position: relative; z-index: 2; }
  .ep1-hero .watch-row { margin-top: 150px; }
  .stage-wrap.pad { padding-inline: 22px; margin-top: 40px; }
  .journal-stage { aspect-ratio: auto; container-type: normal; max-width: none; overflow: visible; padding: 0; }
  .stage > .abs { position: static; left: auto; top: auto; width: 100% !important;
    margin: 0 0 26px; }
  .stage > .abs.fs { font-size: 15px; }
  .mono { line-height: 1.6; }
  .h-title.lhpx { line-height: .95; }
  h2.h-title { font-size: 40px !important; }
  .abs.dashline-v { display: none; }
  .abs.box { height: auto !important; }
  .abs.box > img { height: auto; }
  .aplayer { height: 66px; font-size: 11px; }
  .epc-btn { width: clamp(150px, 44vw, 200px); }
  .stage > .abs.jf-pair { display: flex !important; gap: 10px; height: auto !important; margin: 0 0 26px; }
  .stage > .abs.jf-pair figure { flex: 1 1 0; margin: 0; aspect-ratio: 245/290; overflow: hidden; }
  .stage > .abs.jf-pair figure img { width: 100%; height: 100%; object-fit: cover; display: block; }
}

/* ============================================================
   FOOTER — small, stylized, shared across every page
   ============================================================ */
.site-footer { position: relative; z-index: 1; background: var(--bg);
  border-top: 1px solid var(--line);
  padding: clamp(30px, 5vw, 52px) clamp(20px, 5vw, 56px) clamp(26px, 4vw, 40px); }
.site-footer .foot-top { display: flex; align-items: center; justify-content: space-between;
  gap: 16px 24px; flex-wrap: wrap; }
.site-footer .foot-brand { text-decoration: none; color: var(--ink);
  font-family: 'Roboto', sans-serif; font-weight: 500; font-size: clamp(12px, 1.3vw, 14px); letter-spacing: .18em; }
.site-footer .foot-brand:hover { opacity: .6; }
.site-footer .foot-partner { display: flex; align-items: center; gap: 10px; }
.site-footer .foot-partner span { font-family: 'Roboto', sans-serif; font-weight: 100;
  font-size: 11px; letter-spacing: .24em; color: var(--ink); }
.site-footer .foot-partner img { height: 13px; width: auto; display: block; }
.site-footer .foot-base { display: flex; align-items: center; justify-content: space-between;
  gap: 12px 24px; flex-wrap: wrap; }
.site-footer .foot-copy { font-family: var(--mono); font-weight: 500; font-size: 11px;
  letter-spacing: .12em; color: var(--muted); }
.site-footer .foot-links { display: flex; gap: clamp(14px, 2vw, 28px); flex-wrap: wrap; }
.site-footer .foot-links a { text-decoration: none; font-family: var(--mono); font-weight: 500;
  font-size: 11px; letter-spacing: .12em; color: var(--muted); transition: color .16s ease; }
.site-footer .foot-links a:hover { color: var(--ink); }
@media (max-width: 560px) {
  .site-footer .foot-top { flex-direction: column; align-items: flex-start; gap: 14px; }
  .site-footer .foot-base { flex-direction: column-reverse; align-items: flex-start; }
}

/* ============================================================
   EXPLORE THE GX 550 — feature showcase (Figma 4765:1149)
   Responsive flow; three tile selectors reveal an expandable,
   cross-fading feature panel. No interactive car.
   ============================================================ */
.expx { position: relative; width: 100%;
  --exp-gutter: clamp(20px, 5vw, 79px); --exp-max: 1108px;
  --green: #D1F277;
  padding-bottom: clamp(70px, 11vw, 130px); }
.exp-wrap { width: 100%; max-width: var(--exp-max); margin-inline: auto; padding-inline: var(--exp-gutter); }

/* ---- HERO: centred title + full-bleed pencil sketch ---- */
.exp-hero { position: relative; z-index: 2; padding-top: clamp(92px, 12vw, 150px); }
.exp-title { font-family: 'Kilimanjaro', sans-serif; font-weight: 400; text-align: center;
  font-size: clamp(42px, 8.4vw, 96px); line-height: .96; letter-spacing: -.01em; color: #000; }
.exp-sketch { position: relative; z-index: 1; width: 100vw; margin-left: calc(50% - 50vw); margin-top: clamp(-8px, -1vw, 0px); }
.exp-sketch img { display: block; width: 100%; max-width: 1600px; height: auto; margin-inline: auto; }

/* ---- INTRO lead-in + BTS video ---- */
.exp-intro { display: grid; grid-template-columns: minmax(180px, .74fr) 1.26fr;
  grid-template-areas: "lead video"; gap: clamp(20px, 4vw, 48px); align-items: end;
  margin-top: clamp(10px, 2vw, 26px); }
.exp-lead { grid-area: lead; font-family: var(--mono); font-weight: 700; text-transform: uppercase;
  font-size: clamp(13px, 1.6vw, 20px); line-height: 1.5; letter-spacing: -.022em; color: #000;
  padding-bottom: clamp(4px, 1.4vw, 16px); }
.exp-lead p + p { margin-top: 1.4em; }
.exp-video { grid-area: video; position: relative; border: 1px solid #000; overflow: hidden;
  aspect-ratio: 662 / 344; background: #cfcdc4; }
.exp-video img { width: 100%; height: 100%; object-fit: cover; display: block; }
.exp-video .play-lg { position: absolute; inset: 0; margin: auto; width: clamp(54px, 7vw, 84px); height: auto;
  border: none; background: transparent; cursor: pointer; padding: 0; display: grid; place-items: center; }
.exp-video .play-lg svg { width: 100%; height: auto; filter: drop-shadow(0 3px 14px rgba(0,0,0,.4)); transition: transform .14s ease; }
.exp-video .play-lg:hover svg { transform: scale(1.06); }
.exp-video .play-lg:active svg { transform: scale(.96); }

/* ---- TILE SELECTORS (COOL BOX / MTS / TRUNK OUTLET) ---- */
.exp-tiles { display: flex; justify-content: center; align-items: flex-start;
  gap: clamp(18px, 4.4vw, 62px); margin-top: clamp(46px, 8vw, 92px); }
.tile { position: relative; flex: 0 1 228px; max-width: 228px; aspect-ratio: 1;
  container-type: inline-size; border: 1px solid #000; background: var(--bg);
  cursor: pointer; padding: 0; font-family: var(--mono); color: #000; -webkit-tap-highlight-color: transparent;
  transition: background .5s ease, color .5s ease, transform .2s ease; }
.tile:not(.active):hover { transform: translateY(-3px); }
.tile.active { background: #000; color: var(--bg); }
.tile-num { position: absolute; left: -4.8%; top: -4.4%; width: 16.2%; aspect-ratio: 1;
  display: grid; place-items: center; border: 1px solid #000; background: var(--bg);
  font-weight: 700; font-size: 7.9cqw; letter-spacing: -.022em; color: #000;
  transition: background .5s ease, color .5s ease; }
.tile.active .tile-num { background: #000; color: var(--bg); }

/* icon 1 — COOL BOX */
.cb-slot { position: absolute; left: 36%; top: 19.7%; width: 28%; height: 4.8%;
  border: 1px solid #000; border-radius: 3px; background: var(--bg); transition: background .5s ease, border-color .5s ease; }
.tile.active .cb-slot { background: var(--green); border-color: var(--green); }
.cb-text { position: absolute; left: 0; right: 0; top: 35%; text-align: center;
  font-weight: 700; font-size: 22cqw; line-height: 1; letter-spacing: -.03em; }
/* icon 2 — MTS */
.mts-text { position: absolute; left: 0; right: 0; top: 23%; text-align: center;
  font-weight: 700; font-size: 22cqw; line-height: 1; letter-spacing: -.03em; }
/* exact Figma vectors — car body (Vector 180) + terrain line (Vector 181),
   placed to the Figma coords within the 228px tile, stretched (preserveAspectRatio=none) */
.mts-body   { position: absolute; left: 28.1%; top: 50.9%; width: 45.2%; height: 18.4%; }
.mts-ground { position: absolute; left: 25%;   top: 70.2%; width: 50.9%; height: 6.1%; }
.mts-body svg, .mts-ground svg { width: 100%; height: 100%; display: block; overflow: visible; }
.mts-slot { position: absolute; left: 6.5%; top: 41%; width: 5%; height: 17%;
  border: 1px solid #000; border-radius: 3px; background: var(--bg); transition: background .5s ease, border-color .5s ease; }
.tile.active .mts-slot { background: var(--green); border-color: var(--green); }
/* icon 3 — TRUNK OUTLET */
.op-bar { position: absolute; width: 8.8%; height: 25%; top: 25%; background: currentColor; transition: background .5s ease; }
.op-bar.l { left: 29%; } .op-bar.r { left: 62%; }
.op-ground { position: absolute; left: 42%; top: 60%; width: 15.4%; height: 15%;
  border-radius: 100px 100px 0 0; background: currentColor; transition: background .5s ease; }
.tile.active .op-bar, .tile.active .op-ground { background: var(--green); }

/* ---- EXPANDABLE FEATURE PANEL ---- */
.exp-feat-wrap { height: 0; overflow: hidden; will-change: height; }
.exp-feat-inner { max-width: var(--exp-max); margin-inline: auto; padding-top: clamp(40px, 6.5vw, 78px); }
.exp-feat { display: none; opacity: 0; transition: opacity .32s ease; }
.exp-feat.showing { opacity: 1; }

/* Desktop: a proportional Figma canvas (1108-wide frame). Every element is placed
   at its exact Figma coordinate via --x/--y/--w/--h in cqw, so the whole collage
   scales 1:1 with the frame width. Reflows to a single column below 760px. */
.fcanvas { container-type: inline-size; position: relative; width: 100%; }
.fabs { position: absolute;
  left:  calc(var(--x, 0) / 1108 * 100cqw);
  top:   calc(var(--y, 0) / 1108 * 100cqw);
  width: calc(var(--w, 100) / 1108 * 100cqw);
  font-family: var(--mono); color: #000; letter-spacing: -.022em; }
.fabs.txt  { font-weight: 700; text-transform: uppercase; line-height: 1.5;
  font-size: calc(var(--fs, 20) / 1108 * 100cqw); }
.fabs.kick { font-weight: 500; text-transform: uppercase; line-height: 1.5;
  font-size: calc(var(--fs, 20) / 1108 * 100cqw); }
.fabs.ttl  { font-weight: 700; text-transform: uppercase; line-height: 1.1; white-space: nowrap;
  font-size: calc(var(--fs, 50) / 1108 * 100cqw); }
.fabs.img  { overflow: hidden; height: calc(var(--h, 100) / 1108 * 100cqw); }
.fabs.img img { width: 100%; height: 100%; object-fit: cover; display: block; box-shadow: 0 12px 28px rgba(0,0,0,.14); }

/* ---- mobile: single readable column ---- */
@media (max-width: 760px) {
  .exp-intro { grid-template-columns: 1fr; grid-template-areas: "video" "lead"; gap: clamp(18px, 5vw, 26px); }
  .exp-lead { padding-bottom: 0; }
  .exp-tiles { gap: clamp(12px, 3.6vw, 24px); }
  .exp-feat-inner { padding-inline: var(--exp-gutter); }
  /* canvas → single readable column (DOM order == Figma vertical order) */
  .fcanvas { aspect-ratio: auto !important; container-type: normal; }
  .fabs { position: static; left: auto; top: auto; width: 100% !important;
    margin: 0 0 clamp(18px, 5vw, 26px); }
  .fabs.txt, .fabs.kick { font-size: 15px; }
  .fabs.kick { margin-bottom: 4px; }
  .fabs.ttl { font-size: clamp(28px, 8vw, 34px); white-space: normal; line-height: 1.05;
    margin-bottom: clamp(10px, 4vw, 18px); }
  .fabs.img { height: auto !important; }
  .fabs.img img { height: auto; }
}
@media (prefers-reduced-motion: reduce) {
  .tile, .tile-num, .cb-slot, .mts-slot, .op-bar, .op-ground, .exp-feat { transition-duration: .01ms; }
}
