/* =========================================================
   Pinch — Seafood Bistro & Bar in Lisbon
   ========================================================= */

@font-face {
  font-family: "Emilio";
  /* Inlined as base64 in this local preview copy only (not the real deploy
     source) — Chrome (and most browsers) block @font-face from loading over
     a plain file:// URL even when the .woff2 sits right next to the CSS,
     silently falling back to Georgia instead. A data: URI sidesteps that
     restriction entirely since there's no separate file fetch to block. */
  src: url("data:font/woff2;base64,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")
    format("woff2");
  font-weight: 300;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Emilio";
  src: url("data:font/woff2;base64,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")
    format("woff2");
  font-weight: 300;
  font-style: italic;
  font-display: swap;
}

:root {
  --color-cream: #f2ece3;
  --color-white: #ffffff;
  --color-blush: #fcdee1;
  --color-blush-panel: #fbdedf;
  --color-green: #2e482b;
  --color-accent: #f05b5b;
  --color-ink: #0b0f0b;
  --color-black: #000000;

  --font-display: "Emilio", Georgia, "Times New Roman", serif;
  --font-mono: "Roboto Mono", "SFMono-Regular", Menlo, Consolas, monospace;

  --page-max: 1440px;
  --gutter: 40px;

  /* ---- Spacing scale ----
     Canonical scale for new spacing decisions (margin/padding/gap). A
     4px-rooted progression through the values the site already uses most:
     tight component spacing at the low end, section rhythm at the high
     end. Existing rules keep their literal px values where a comment
     documents an exact, non-rhythm reason (shadow-clearance math, the
     vinyl disc's hover-peek safety margin, claw-button geometry, etc.) —
     those are deliberate measurements, not spacing-scale drift, and
     forcing them onto this scale would change tuned pixel math for no
     visual gain. Everything else (new sections, new components, and the
     already-consistent section-padding/heading-margin values below)
     should reference these tokens instead of a fresh literal number. */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-7: 32px;
  --space-8: 40px;
  --space-9: 48px;
  --space-10: 64px;
  --space-11: 80px;
  --space-12: 100px;
  --space-13: 120px;
  --space-14: 140px;

  /* ---- Type scale ----
     Named after the role each size already plays consistently across the
     site (verified by grepping every font-size declaration), not a fresh
     redesign — Pinch's headings and body text keep their shipped sizes.
     --text-heading/--text-heading-mobile is the one scale already applied
     uniformly everywhere (Menu/Journal/Reviews/FAQ/Vinyl/Statement all
     share it desktop and mobile); the rest give the recurring UI-text and
     display sizes a name so future components reach for an existing step
     instead of picking a new one-off number. */
  --text-2xs: 12px;
  --text-xs: 14px;
  --text-sm: 16px;
  --text-base: 18px;
  --text-md: 20px;
  --text-lg: 28px;
  --text-xl: 36px;
  --text-heading-mobile: 44px;
  --text-2xl: 48px;
  --text-3xl: 56px;
  --text-heading: 60px;
  --text-4xl: 66px;
  --text-5xl: 84px;
  --text-6xl: 94px;

  /* ---- Line-height scale ----
     Same audit approach as the sizes above: named after the role each
     ratio already plays (tight display headings vs. body copy vs. the
     couple of deliberately looser multi-line contexts), not a redesign. */
  --leading-tight: 1;
  --leading-snug: 1.15;
  --leading-normal: 1.5;
  --leading-loose: 1.6;
  --leading-relaxed: 1.7;
}

* {
  box-sizing: border-box;
}

html {
  /* Match body — Safari needs the clip on both to stop the sideways pan. */
  overflow-x: clip;
}

body {
  margin: 0;
  /* `overflow-x: clip` (not `hidden`, which would break position:sticky
     by forcing overflow-y to `auto`) — kills stray sideways scroll from
     off-canvas transformed pieces on mobile without creating a scroll
     container. */
  overflow-x: clip;
  /* Light blush ground on the inner pages (was cream) — matches the
     recoloured menu/journal/events heroes above it. */
  background: var(--color-blush);
  color: var(--color-ink);
  font-family: var(--font-mono);
  font-weight: 300;
  -webkit-font-smoothing: antialiased;
  /* Same idea as the heading rule above, for running body copy: reduces
     orphaned last-line words in paragraphs (article body, subtitles,
     tracklists) without changing layout in browsers that don't support
     it yet. */
  text-wrap: pretty;
}

/* Menu / legal / privacy keep the paper grain STATIC — a single fixed
   SVG-noise layer, no animation (js/noise-overlay.js bails on those
   pages, so `has-noise-canvas` never gets set and body::after below
   shows). Journal (listing + article) and Events now get the same
   animated grain the homepage uses instead — same canvas styling as
   .noise-overlay in css/style.css, since these pages don't load that
   file. */
.noise-overlay {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100vh;
  pointer-events: none;
  /* Above the header's own z-index:50 so the grain covers the whole
     page, header and footer included — cards that need to stay clean
     get their own z-index above this instead (see .journal-entry,
     .event-card, .legal-card). */
  z-index: 55;
  image-rendering: pixelated;
  mix-blend-mode: multiply;
}

body::after {
  content: "";
  position: fixed;
  inset: 0;
  /* Covers the WHOLE page, header and footer included — was sat behind
     everything (negative z-index), which kept it off cards but also
     made it vanish behind every ordinary section's own background, and
     before that sat at an astronomical z-index that painted over
     everything INCLUDING cards. This is the middle ground: above the
     header's own z-index:50, so the texture reads across the nav and
     footer bands too; cards that need to stay clean (.journal-entry,
     .event-card, .legal-card) get their own z-index above this
     instead. */
  z-index: 55;
  pointer-events: none;
  opacity: 0.5;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='pg'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.1' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23pg)' opacity='0.09'/%3E%3C/svg%3E");
  background-size: 120px 120px;
}

html.has-noise-canvas body::after {
  display: none;
}

.click-spark {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100vh;
  pointer-events: none;
  z-index: 2147483002;
}

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

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

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

h1,
h2,
h3 {
  margin: 0;
  /* Lets the browser choose better break points on the last line of a
     heading instead of leaving a lone short word stranded (the "orphan"
     several headings already had hand-tuned comments/widths to avoid —
     e.g. .reviews__heading, .intro__text). Purely additive: unsupported
     browsers just wrap normally, and it has no effect on headings whose
     lines are already hard-split in markup for the reveal animation. */
  text-wrap: balance;
}

.eyebrow {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -1.6px;
  text-transform: uppercase;
  color: var(--color-green);
  margin: 0 0 20px;
}

.eyebrow--light {
  color: var(--color-cream);
}

/* ---------- Intro (plays once per session, see js/main.js) ---------- */

.intro {
  position: fixed;
  inset: 0;
  z-index: 400;
  overflow: hidden;
  background: var(--color-blush);
  transition: transform 0.8s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.intro.is-hidden {
  transform: translateY(-100%);
  pointer-events: none;
}

.intro__text {
  position: absolute;
  top: 50%;
  left: 50%;
  z-index: 1;
  margin: 0;
  max-width: 92vw;
  padding: 0 16px;
  font-family: var(--font-display);
  font-weight: 300;
  /* iOS Safari can auto-inflate text in narrow/absolutely-positioned
     blocks past the specified size, which was wrapping this onto far
     more lines than the width math predicts — locked to the literal
     px value instead. */
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  /* Matches .hero__title's own desktop size exactly (see the
     min-width:1300px override below) — same weight in the composition as
     the hero heading it echoes. */
  font-size: var(--text-4xl);
  line-height: var(--leading-tight);
  letter-spacing: -2.4px;
  text-align: center;
  text-transform: uppercase;
  color: var(--color-accent);
  transform: translate(-50%, -50%);
  /* Hidden until is-text-shown — reversed sequence: the crab/lobster are
     what's visible first now, text comes last, right before the site. */
  opacity: 0;
  transition: opacity 0.5s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.intro.is-text-shown .intro__text {
  opacity: 1;
}

/* The hero sits right under the intro in the markup, so this only ever
   matches on the pages that actually render an intro — it starts nudged
   down and rises into place in sync with the intro sliding up off-screen,
   instead of just appearing static underneath a fade. */
.intro ~ .hero {
  transform: translateY(4%);
  transition: transform 0.8s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.intro.is-hidden ~ .hero {
  transform: translateY(0);
}

/* Exact positions lifted from the Figma prototype (file EH2HnDKP56Mvowrmu1MG5Z):
   Desktop-5/Desktop-4 frames (1440x1024) for the wide layout, iPhone 13&14
   -2/-1 frames (390x844) for the mobile layout — together vs. apart crab/
   lobster child-frame x/y/width converted to percentages of the artboard.
   Reversed on request from the original sequence: crab and lobster are
   visible together from the very first frame (opacity:1, no fade-in —
   they're the first thing shown, not something arriving), then is-apart
   drives them to their separated positions, and only then does the text
   appear (see .intro__text above) before the site is revealed. */
.intro__crab,
.intro__lobster {
  position: absolute;
  opacity: 1;
  transition:
    top 1.2s cubic-bezier(0.16, 0.84, 0.44, 1),
    left 1.2s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.intro__crab {
  width: 40.9vw;
  top: 30.2%;
  left: 5.6%;
}

.intro__lobster {
  width: 52vw;
  top: 29.6%;
  left: 44.4%;
}

.intro.is-apart .intro__crab {
  top: 64%;
  left: -20.4%;
}

.intro.is-apart .intro__lobster {
  top: -2.6%;
  left: 76.7%;
}

@media (max-width: 900px) {
  /* Together-state left values (5.6% / 44.4%) and the +20px vertical
     nudge below matched the (now-removed) statement-scroll.js section's
     own mobile convergence rule by design, since both features shared
     the same crab/lobster artwork. Threshold matches the site's own
     mobile/desktop split (900px). */
  .intro__crab {
    top: calc(36.7% + 20px);
    left: 5.6%;
  }

  .intro__lobster {
    top: calc(36.7% + 20px);
    left: 44.4%;
  }

  .intro.is-apart .intro__crab {
    left: -40.9%;
  }

  .intro.is-apart .intro__lobster {
    left: 100%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .intro,
  .intro__text,
  .intro__crab,
  .intro__lobster,
  .intro ~ .hero {
    transition: none !important;
  }
}

/* ---------- Buttons ---------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 82px;
  padding: 0 34px;
  border-radius: 100px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-md);
  letter-spacing: -1.6px;
  text-transform: uppercase;
  border: 1px solid transparent;
  cursor: pointer;
  transition:
    background-color 0.35s cubic-bezier(0.16, 0.84, 0.44, 1),
    color 0.35s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.btn--pink {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-cream);
}

.btn--pink:hover {
  background: color-mix(in srgb, var(--color-accent) 85%, white);
  border-color: color-mix(in srgb, var(--color-accent) 85%, white);
}

.btn--green {
  /* Was var(--color-accent) — despite the name, this rendered coral,
     identical to .btn--pink, everywhere it was used (homepage "See the
     menu", the article "See the menu" back-link). Buttons meant to read
     as green (as opposed to .btn--pink's intentional coral) actually
     use the brand green now. */
  background: var(--color-green);
  border-color: var(--color-green);
  color: var(--color-cream);
}

.btn--green:hover {
  background: color-mix(in srgb, var(--color-green) 85%, white);
  border-color: color-mix(in srgb, var(--color-green) 85%, white);
}

.btn--outline-green {
  /* Same fix as .btn--green above — was var(--color-accent) (coral). */
  background: transparent;
  border-color: var(--color-green);
  color: var(--color-green);
}

.btn--outline-green:hover {
  background: var(--color-green);
  color: var(--color-cream);
}

.btn--accent {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-cream);
}

.btn--accent:hover {
  background: color-mix(in srgb, var(--color-accent) 85%, white);
  border-color: color-mix(in srgb, var(--color-accent) 85%, white);
}

/* Hero CTA — dark green pill with a trailing arrow, per the Figma hero
   redesign (node 407:459/407:510-513). */
.btn--hero {
  background: var(--color-green);
  border-color: var(--color-green);
  color: var(--color-blush);
  height: 88px;
  /* Right padding clears space for the arrow, which is no longer an
     in-flow flex child (see .hero__cta-wrap .btn__arrow) — it's an
     absolutely-positioned sibling now, so this is just reserved room,
     not a gap partner. */
  padding: 0 72px 0 40px;
  font-size: 19px;
  letter-spacing: -0.95px;
}

.btn--hero:hover {
  background: color-mix(in srgb, var(--color-green) 94%, white);
  border-color: color-mix(in srgb, var(--color-green) 94%, white);
}

.btn__arrow {
  width: 22px;
  height: auto;
  flex-shrink: 0;
}

/* Claw-paired buttons only: the arrow lives as its own sibling in
   .hero__cta-wrap (not inside the <a>) so it can be positioned directly
   against the wrap's own right edge (which always equals the button's
   right edge, since the wrap is fit-content) — a fixed distance from
   there is robust in a way tuning gap/padding buffers never was. Sits
   BELOW the front claw layer (z-index 2 here vs. 3 on
   .hero__cta-claw--front below) — the claw grips over the button's
   right end and the arrow, appearing to emerge from behind/under it,
   not floating on top of the claw's own artwork. */
.hero__cta-wrap .btn__arrow {
  position: absolute;
  top: 50%;
  right: 26px;
  transform: translateY(-50%);
  z-index: 2;
  color: var(--color-blush);
  pointer-events: none;
}

/* =========================================================
   Hero
   ========================================================= */

.hero {
  position: relative;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: var(--color-blush);
}

/* Was: sticky-pinned while .menu (below) scrolled up over it. Removed —
   after today's hero rework (split→centered layout, height:100vh, several
   overflow changes) this was producing a stale/ghost repaint of the hero
   near the bottom of the page in Safari (a known position:sticky
   compositing bug that resurfaces after this kind of live CSS churn).
   Plain flow scrolling has no equivalent failure mode. */
#top.hero {
  position: relative;
}

/* ---------- Hero photo background (article/menu-type pages) ---------- */

.hero__bg {
  position: absolute;
  inset: 0;
  z-index: 0;
}

.hero__bg::after {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(11, 15, 11, 0.35);
}

.hero__bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1.18);
  will-change: transform;
}

/* ---------- Hero floating photos (mouse-parallax, js/hero-floating.js) ---------- */
/* Replaces the old horizontal marquee strip and, before that, the 3D
   orbit: a scatter of our own photos across the whole hero, each drifting
   toward/away from the cursor at its own depth (mouse or touch — see the
   JS), fading in once loaded, sitting behind the heading/button (z-index
   0 vs .hero__content's 1) so the text stays readable over them. Full-
   bleed on every breakpoint (no separate mobile/desktop positioning
   needed, unlike the strip this replaced) since position is just
   percentages of this box. */
.hero__floating {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
}

.hero-floating__item {
  position: absolute;
  will-change: transform;
  pointer-events: auto;
}

/* Sizes are mobile-first here and scaled up at the 901px breakpoint
   below, one modifier class per rough size so the JS only has to pick a
   class name, not compute pixel dimensions. Ratio kept at the photos'
   own native 2:3 crop. */
.hero-floating__item--xs {
  width: 64px;
  height: 96px;
}

.hero-floating__item--sm {
  width: 80px;
  height: 120px;
}

.hero-floating__item--md {
  width: 96px;
  height: 144px;
}

.hero-floating__item--lg {
  width: 112px;
  height: 168px;
}

.hero-floating__item img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  cursor: pointer;
  opacity: 0;
  box-shadow: 0 14px 32px rgba(11, 15, 11, 0.2);
  transition:
    opacity 0.6s ease-out,
    transform 0.2s ease-out;
}

.hero-floating__item img.is-visible {
  opacity: 1;
}

.hero-floating__item img:hover {
  transform: scale(1.06);
}

@media (prefers-reduced-motion: reduce) {
  .hero-floating__item img {
    transition: opacity 0.6s ease-out;
  }
}

@media (min-width: 901px) {
  .hero-floating__item--xs {
    width: 96px;
    height: 144px;
  }

  .hero-floating__item--sm {
    width: 120px;
    height: 180px;
  }

  .hero-floating__item--md {
    width: 150px;
    height: 225px;
  }

  .hero-floating__item--lg {
    width: 180px;
    height: 270px;
  }
}

@media (max-width: 900px) {
  /* Fewer photos, repositioned — not just scaled down. The left/top
     percentages above read fine spread across a wide desktop hero, but
     on a narrow phone screen the text column runs nearly edge-to-edge,
     so the same percentages land photos right on top of the heading
     instead of beside it. Most are hidden here and a curated six moved
     below the button, the one part of a short mobile hero reliably clear
     of text, instead of trying to dodge it on the sides.
     Targeted by the photo's own src (:has()), not nth-child position —
     nth-child silently shows/hides whatever now happens to sit at that
     DOM index, which breaks every time a photo is added, removed, or
     reordered above (as this hero's has been, repeatedly). Naming the
     actual six photos survives that churn. */
  .hero-floating__item {
    display: none;
  }

  .hero-floating__item:has(img[src*="hero-marquee-14"]),
  .hero-floating__item:has(img[src*="hero-marquee-26"]),
  .hero-floating__item:has(img[src*="hero-marquee-22"]),
  .hero-floating__item:has(img[src*="hero-marquee-21"]),
  .hero-floating__item:has(img[src*="hero-marquee-23"]),
  .hero-floating__item:has(img[src*="hero-marquee-16"]) {
    display: block;
  }

  .hero-floating__item:has(img[src*="hero-marquee-14"]) {
    top: 58% !important;
    left: 4% !important;
  }

  .hero-floating__item:has(img[src*="hero-marquee-26"]) {
    top: 70% !important;
    left: 58% !important;
  }

  .hero-floating__item:has(img[src*="hero-marquee-22"]) {
    top: 60% !important;
    left: 76% !important;
  }

  .hero-floating__item:has(img[src*="hero-marquee-21"]) {
    top: 80% !important;
    left: 8% !important;
  }

  .hero-floating__item:has(img[src*="hero-marquee-23"]) {
    top: 84% !important;
    left: 52% !important;
  }

  .hero-floating__item:has(img[src*="hero-marquee-16"]) {
    top: 90% !important;
    left: 80% !important;
  }
}

@media (min-width: 901px) {
  /* Centered column, not the old left-text/right-photo split: title,
     subtitle and button all center as one block, with .hero__floating
     (position:absolute, inset:0, see above) covering the whole section
     behind it rather than taking its own row — so it needs no flex
     order/sizing of its own the way the old marquee strip did. */
  /* #top scopes this to the homepage hero specifically — .hero--menu and
     .hero--article (menu/journal pages) share the bare .hero class but
     use a totally different (absolute-background) internal layout, and
     switching THEM to a column would have quietly broken their centering. */
  #top.hero {
    flex-direction: column;
    align-items: center;
    /* Was flex-start (+ a manual padding-top nudge) to sit the block
       close under the nav — switched to true centering, both
       axes, on request. The floating photos (anchored to their own
       edges/corners, see .hero-floating__item positions above) don't
       need to move to match; they already sit clear of the middle. */
    justify-content: center;
    height: 100vh;
    overflow: visible;
  }

  /* #top (an id) + the class combo outranks the shared .hero__content
     rule (padding: 60px var(--gutter) 90px, further down this file) —
     .hero__content--home alone is the same specificity as .hero__content
     and appears earlier in the file, so plain .hero__content's padding
     was winning regardless of the value written here; that leftover 60px
     top padding was the actual cause of the big gap under the nav that
     "raise everything up" was really asking to close. */
  #top .hero__content--home {
    order: 1;
    position: relative;
    z-index: 2;
    flex: none;
    width: 100%;
    max-width: 720px;
    justify-content: flex-start;
    align-items: center;
    text-align: center;
    padding: 0 var(--gutter) 0;
  }

  .hero__content--home .hero__stack {
    align-items: center;
    width: auto;
  }

  .hero__title-wrap {
    width: auto;
  }

  .hero__title {
    text-align: center;
    /* Smaller than the old full-width size on purpose: even centered,
       84px still wrapped "Bistro & Bar" onto two lines at this width.
       Scales back up past 1300px once there's room for it again. */
    font-size: var(--text-4xl);
    letter-spacing: -2.4px;
  }
}

@media (min-width: 1300px) {
  /* Slightly smaller than --text-6xl (94px) on request — a fixed px
     value here, not the shared token, since --text-6xl is also used
     elsewhere; .intro__text is kept at the same size deliberately (see
     its own comment above), so it's tuned down to match. */
  .hero__title {
    font-size: 84px;
    letter-spacing: -3.76px;
  }

  .intro__text {
    font-size: 84px;
    letter-spacing: -3.76px;
  }
}

/* ---------- Nav ---------- */

.nav {
  /* Was 50 — lower than the cards' own z-index (56, and events cards go
     higher still via --z), so the sticky header was getting covered by
     card content scrolling underneath it. Above everything but the
     kinetic-menu overlay (100) and the load-in intro (400). */
  z-index: 90;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  width: 100%;
  background: var(--color-green);
  padding: 16px 20px;
}

.nav__logo {
  order: 2;
  /* Stays clickable above the open kinetic-menu overlay too — see the
     matching note on .nav-menu-btn. */
  position: relative;
  z-index: 101;
}

.nav__logo img {
  height: 29px;
  width: auto;
}

.lang-switch {
  background: none;
  border: none;
  font: inherit;
  color: inherit;
  letter-spacing: inherit;
  cursor: pointer;
  padding: 0;
}

/* Pinned at the top of the viewport while scrolling, on desktop too now
   (was mobile-only, since the burger toggle needed to stay reachable
   without scrolling back up — but the full desktop nav row is worth
   keeping in reach the same way). */
.nav,
.nav--on-light {
  position: sticky;
  top: 0;
}

/* =========================================================
   Kinetic menu (fullscreen)
   ========================================================= */

.nav-menu-btn {
  /* .nav__logo carries order:2 from the old 3-column nav layout (still
     used elsewhere) — order:3 keeps this button to its right regardless. */
  order: 3;
  /* .kinetic-menu sits at z-index:100 and, once open, fully covers the
     header underneath it — without this the toggle would be hidden
     behind the very panel it needs to close. */
  position: relative;
  z-index: 101;
  display: flex;
  align-items: center;
  gap: 10px;
  background: none;
  border: none;
  /* The visible icon is only 20x13px — well under the 44x44 minimum
     touch-target size (WCAG 2.5.8). Padding + matching negative margin
     grows the invisible hit area without moving the icon or affecting
     surrounding header layout. */
  padding: 16px 12px;
  margin: -16px -12px;
  cursor: pointer;
  color: var(--color-blush);
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -0.8px;
  text-transform: uppercase;
  transition: opacity 0.3s ease;
}

/* .nav-menu-btn__icon is a deliberately small 20x13px visual, but the
   clickable area needs to meet the ~44px touch-target minimum — a
   pseudo-element hit zone grows the tap area without affecting layout
   or the icon's apparent size. */
.nav-menu-btn::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 44px;
  height: 44px;
  transform: translate(-50%, -50%);
}

/* The homepage hero now sits on a light cream backdrop (marquee + plain
   background) instead of a dark photo, so blush no longer reads there —
   every other page still has a dark green/photo hero, where it does. */
.nav--on-light .nav-menu-btn,
.nav--on-light .nav-menu-btn__icon {
  color: var(--color-green);
}

.nav--on-light {
  z-index: 50;
  background: var(--color-blush);
  padding: 16px 20px;
}

/* .nav__links already exists in the markup on every page (menu.html,
   events.html, journal.html share it) but was never actually styled —
   it fell back to plain wrapped inline text. Styling it here is a
   straight improvement everywhere it appears, not a homepage-only
   change; only the 3-column centered-logo arrangement below is scoped
   to .nav--on-light specifically. Hidden under 901px on every page —
   the hamburger/kinetic-menu is the mobile nav everywhere already. */
.nav__links,
.nav__meta {
  display: none;
}

/* Mobile header layout, on request: logo centered, language switch on
   the left, hamburger on the right — a 3-column grid (not the flex row
   used elsewhere) so the logo lands at the true center regardless of
   how wide the lang-switch text or hamburger icon render, rather than
   the off-center result plain flex space-between would give with two
   unevenly-sized side items. */
@media (max-width: 900px) {
  .nav,
  .nav--on-light {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
  }

    .nav__meta {
    display: flex;
    grid-column: 1;
    justify-self: start;
    font-family: var(--font-mono);
    font-weight: 300;
    font-size: var(--text-sm);
    letter-spacing: -0.4px;
  }

  /* Only the language switch shows in the mobile header bar — the phone
     number stays reachable from the kinetic menu instead. */
  .nav__meta a:not(.lang-switch) {
    display: none;
  }

  .nav__logo {
    grid-column: 2;
    justify-self: center;
  }

  .nav-menu-btn {
    grid-column: 3;
    justify-self: end;
  }
}

@media (min-width: 901px) {
  .nav-menu-btn {
    display: none;
  }

  .nav__links {
    display: flex;
    align-items: center;
    gap: 28px;
    font-family: var(--font-mono);
    font-weight: 300;
    font-size: var(--text-sm);
    letter-spacing: -0.4px;
    text-transform: uppercase;
  }

  .nav__links-link {
    color: inherit;
    text-decoration: none;
    transition: opacity 0.25s ease;
  }

  .nav__links-link:hover {
    opacity: 0.6;
  }

  .nav__meta {
    display: flex;
    align-items: center;
    gap: 24px;
    font-family: var(--font-mono);
    font-weight: 300;
    font-size: var(--text-sm);
    letter-spacing: -0.4px;
  }

  .nav__meta a {
    color: inherit;
    text-decoration: none;
    transition: opacity 0.25s ease;
  }

  .nav__meta a:hover {
    opacity: 0.6;
  }

  /* Homepage header only: links left, phone/language right, logo
     dead-center regardless of how wide those two columns end up — a
     plain flex justify-content:space-between only centers a middle
     child when both side columns happen to match in width, a 3-column
     grid centers it unconditionally. grid-column is set explicitly on
     all three (not left to DOM-order auto-placement) because .nav__logo
     already carries order:2 from the older flex nav layout above —
     order affects grid auto-placement too, so without an explicit
     column the logo was sorting itself into the last track instead of
     the middle one. */
  .nav--on-light {
    display: grid;
    /* max-content, not auto — auto was computing the logo's column to
       0 width (confirmed by testing: swapping in a fixed px width made
       it render correctly, swapping in max-content did too). The SVG
       logo has no explicit width/height of its own (only a viewBox),
       and combined with the sitewide img{max-width:100%} reset, Chrome's
       auto-track intrinsic-size pass was resolving that column's
       content contribution to 0 instead of the logo's real max-content
       size — max-content sidesteps whatever that auto-specific
       computation was doing wrong. */
    grid-template-columns: 1fr max-content 1fr;
    /* start, not center — the logo and the text items don't share a
       line-height/box-model, so centering each in the row gave them
       different top offsets from the screen edge; aligning all three
       to the row's own top edge instead means they all sit the same
       distance down, logo included. */
    align-items: start;
    /* Tighter than the shared 16px/20px base (mobile keeps that) — she
       asked to raise the logo higher in the header; a shorter bar is
       what actually does that, not repositioning the logo within it. */
    padding: 10px 20px;
  }

  .nav--on-light .nav__links {
    grid-column: 1;
    justify-self: start;
    color: var(--color-green);
  }

  .nav--on-light .nav__logo {
    grid-column: 2;
    /* order:0, resetting the old order:2 from the flex nav layout above
       — that's the actual reason align-items:start still put the logo
       ~45px lower than the links/meta text. Sparse (default) grid auto-
       placement processes items in `order` order, not DOM order; with
       links/meta at order 0 (columns 1 and 3) and the logo at order 2
       (column 2), the logo got processed last, and the sparse-packing
       cursor had already advanced past column 2 by the time it got to
       it — so instead of backfilling that skipped cell in row 1, it
       pushed the logo into a whole second implicit row. Nothing to do
       with align-items at all. */
    order: 0;
    justify-self: center;
  }

  .nav--on-light .nav__meta {
    grid-column: 3;
    justify-self: end;
    color: var(--color-green);
  }
}

.nav-menu-btn__icon {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 4px;
  width: 20px;
  height: 13px;
  color: var(--color-blush);
}

.nav-menu-btn__line {
  display: block;
  width: 100%;
  height: 1.5px;
  background: currentColor;
  border-radius: 2px;
  transition: transform 0.4s cubic-bezier(0.65, 0.05, 0, 1);
}

/* The open panel has its own always-visible close button (fixed, so it
   works regardless of scroll position); this one would otherwise double
   up with it as a second X in the same corner whenever the page hasn't
   scrolled, so it hides instead of morphing while the menu is open. */
.nav-menu-btn[aria-expanded="true"] {
  opacity: 0;
  pointer-events: none;
}

.kinetic-menu {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: none;
}

.kinetic-menu__overlay {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  background: rgba(11, 15, 11, 0.4);
  border: none;
  padding: 0;
  cursor: pointer;
  opacity: 0;
}

.kinetic-menu__panel {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(640px, 100%);
  overflow: hidden;
  /* Closed-state offset is set by GSAP (see js/main.js) instead of here —
     GSAP can't tell a percentage translate in a resolved matrix() apart
     from a plain pixel one, so if CSS sets it, GSAP's xPercent tweens
     silently no-op against a stale cached pixel value. */
}

/* Blush Pinch wordmark, top-left of the open menu (close button stays
   top-right, its own corner). Links back to the homepage. */
.kinetic-menu__logo {
  position: absolute;
  top: 24px;
  left: 24px;
  z-index: 2;
  display: block;
}

.kinetic-menu__logo img {
  display: block;
  width: 84px;
  height: auto;
}

.kinetic-menu__close {
  /* Lives inside .kinetic-menu__panel, which is position:fixed via its
     .kinetic-menu ancestor, so it stays visible regardless of page scroll
     position — unlike the header's own nav-menu-btn, which scrolls with
     the page and can end up off-screen behind the open overlay. */
  position: absolute;
  top: 24px;
  right: 24px;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  color: var(--color-cream);
}

.kinetic-menu__close-line {
  position: absolute;
  width: 16px;
  height: 1.5px;
  background: currentColor;
  border-radius: 2px;
}

.kinetic-menu__close-line:nth-child(1) {
  transform: rotate(45deg);
}

.kinetic-menu__close-line:nth-child(2) {
  transform: rotate(-45deg);
}

.kinetic-menu__bg {
  position: absolute;
  inset: 0;
}

.kinetic-menu__backdrop {
  position: absolute;
  inset: 0;
}

.kinetic-menu__backdrop--accent {
  background: var(--color-accent);
}

.kinetic-menu__backdrop--blush {
  background: var(--color-blush);
}

.kinetic-menu__backdrop--main {
  background: var(--color-green);
}

.kinetic-menu__content {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 140px 60px 60px;
}

.kinetic-menu__list {
  display: flex;
  flex-direction: column;
  /* Centers the list in whatever room is left above .kinetic-menu__meta
     — matches css/style.css's homepage version, which this had drifted
     out of sync with (list sat flush under the logo here instead). */
  margin-top: auto;
  margin-bottom: auto;
}

.kinetic-menu__item {
  border-bottom: 1px dashed rgba(242, 236, 227, 0.25);
}

.kinetic-menu__item:first-child {
  border-top: 1px dashed rgba(242, 236, 227, 0.25);
}

.kinetic-menu__link {
  position: relative;
  display: block;
  padding: 20px 0;
  text-decoration: none;
}

.kinetic-menu__link-mask {
  display: block;
  overflow: hidden;
}

.kinetic-menu__link-text {
  display: block;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(2.25rem, 5.5vw, 3.75rem);
  letter-spacing: -0.02em;
  line-height: var(--leading-tight);
  color: var(--color-cream);
  text-transform: uppercase;
  transition: color 0.35s ease;
}

.kinetic-menu__item:hover .kinetic-menu__link-text {
  color: var(--color-blush);
}

.kinetic-menu__meta {
  display: flex;
  align-items: center;
  /* Phone bottom-left, EN/PT pushed to the far bottom-right corner
     instead of sitting right next to it. */
  justify-content: space-between;
  width: 100%;
  gap: 24px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  color: rgba(242, 236, 227, 0.7);
}

.kinetic-menu__meta a {
  color: inherit;
  text-decoration: none;
}

.kinetic-menu__meta a:hover {
  color: var(--color-cream);
}

@media (max-width: 600px) {
  .kinetic-menu__panel {
    width: 100%;
  }

  .kinetic-menu__content {
    padding: 110px 24px 40px;
  }
}

/* ---------- Hero content ---------- */

.hero__content {
  position: relative;
  z-index: 1;
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 60px var(--gutter) 90px;
}

.hero__content--home {
  /* This box is flex:1 and stretches the full height of .hero, so on
     mobile it sits (invisibly, transparently) directly over the marquee
     below it — which sits at a lower z-index — and was swallowing every
     touch before it could reach the marquee's own scroll container.
     Turned back on just for the button so it stays clickable. */
  pointer-events: none;
}

@media (max-width: 900px) {
  /* Pinned near the top on mobile (not vertically centered) so it clears
     the marquee strip pinned to the bottom below it. The desktop split
     layout below overrides both of these back to a centered column with
     its own padding. */
  .hero__content--home {
    justify-content: flex-start;
    padding: 40px var(--gutter) 100px;
  }
}

.hero__content--home a,
.hero__content--home button {
  pointer-events: auto;
}

.hero__stack {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 30px;
  width: fit-content;
}

/* Wraps the heading, subtitle, and CTA button as one full-width block so
   they can each center independently within it, without disturbing the
   heading's own line-reveal animation. */
.hero__title-wrap {
  position: relative;
  width: 100%;
}

/* Sized to the button itself (not the heading), so the claw flourish
   —positioned relative to this wrap below— always tracks the button
   exactly regardless of where the wrap ends up on the page. */
.hero__cta-wrap {
  position: relative;
  width: fit-content;
}

/* .hero__title-wrap isn't a flex container, so a plain fit-content block
   box (the button) defaults to its container's left edge — .hero__content
   --home's own align-items only centers .hero__stack itself, one level
   up, not stack's individual grandchildren. Scoped to the homepage hero
   specifically so other .hero__cta-wrap usages (the closing CTA, the
   statement section) — some of them inside real flex rows, where a bare
   margin:auto would consume space differently — are unaffected. */
.hero__content--home .hero__cta-wrap {
  margin: 0 auto;
}

@media (min-width: 901px) {
  /* Overrides the old split-layout's own .hero__cta-wrap{margin:104px 0 0}
     (elsewhere in this file, lower specificity) — that gap was tuned for
     a much taller two-column hero; the button now sits right under a
     single centered subtitle line, so it reads tight rather than
     deliberate at 104px. */
  .hero__content--home .hero__cta-wrap {
    /* 28px was too tight — the claw graphic's own artwork extends above
       the button's real top edge, so the button visually touched the
       subtitle text above it even with a positive gap here. */
    margin-top: 44px;
  }
}

.hero__cta-claw {
  display: block;
  position: absolute;
  /* Both layers (back and front — see the two SVG files this class is
     used on) come from one reference artwork where the button itself
     is also drawn in: canvas 269×228, with the button rect at
     x:0-186, y:75-145.

     Sized and positioned in PERCENT, not pixels, for width and right —
     percentages on an absolutely-positioned element's width/left/right
     resolve against its containing block's width, which here
     (.hero__cta-wrap is position:relative, width:fit-content around
     just the button) is exactly the button's own real rendered width.
     A fixed-px width tuned for one button width (e.g. English "Book
     Now") comes out wrong for any other width — Portuguese "Reservar
     Agora" is meaningfully wider, and even the same label reflows
     differently across weights/breakpoints — so the claw either
     swallowed half the label or gapped visibly short of the button's
     actual edge. Percent-of-container keeps both the overall size and
     the right-edge anchor proportional to whatever the button actually
     measures, in any language, with no per-language override needed:
       width: 269/186 × 100%       ≈ 144.62%
       right: -(83/186) × 100%     ≈ -44.62%  (83 = 269 − 186: how much
         wider the canvas is than the button, on the button's right) —
         then nudged a further ~3% right on request (≈6px on the
         English button), landing at -47.65%.
     top used to stay in a fixed px (the button's own height doesn't
     vary with label text the way width does) — but the CLAW's height
     does, since it's width:144.62% + height:auto: a wider button (e.g.
     Portuguese "Reservar Agora") makes the claw both wider AND taller,
     so a constant px top offset left it hanging further below the
     button on any label longer than the English one it was tuned for.
     margin-top instead of top sidesteps that: percentage margins
     (unlike percentage top/bottom) resolve against the CONTAINING
     BLOCK'S WIDTH per spec, the same basis width/right already use
     above — so this scales in step with the claw's own width-driven
     size instead of a fixed offset. -37.445% is -74px ÷ the English
     button's ~197.6px width, at the same nudged-down-~20px position
     the original px value described. */
  top: 0;
  margin-top: -37.445%;
  right: -47.65%;
  width: 144.62%;
  height: auto;
  max-width: none;
  pointer-events: none;
}

/* Portuguese labels ("Reservar Agora" etc.) run wider relative to the
   claw's own percent-of-button sizing than the English ones this was
   tuned against, so the claw sat far enough left to cover the label's
   last letters — nudged further right (more negative) here to clear
   it, on request. */
html[lang="pt"] .hero__cta-claw {
  right: -52%;
}

/* Above the arrow (z-index 2 there) — the front claw grips over the
   button's right end and the arrow should read as emerging from
   under/behind it, not floating on top of the claw's own artwork. */
.hero__cta-claw--front {
  z-index: 3;
}

/* Explicit z stack so every claw button holds the button instead of
   covering it (see the matching note in css/style.css). */
.hero__cta-claw--back {
  z-index: 0;
}

.hero__cta-wrap .btn,
.hero__cta-wrap .btn--hero {
  position: relative;
  z-index: 1;
}

/* The whole button+claw graphic tilts as one rigid piece — left edge
   lifts up, pivoting around the claw side. 0.3s to match the Figma
   prototype's reaction transition. Hover drives it on desktop;
   `.is-tilted` (toggled by js/main.js on click/tap) drives the same
   motion on touch devices, where there's no real hover to trigger it. */
.hero__cta-wrap {
  transition: transform 0.3s ease;
}

@media (min-width: 901px) {
  .hero__cta-wrap {
    margin: 104px 0 0;
  }

  .hero__cta-wrap:hover,
  .hero__cta-wrap.is-tilted {
    transform: translate(10px, -28px) rotate(10deg);
  }
}

@media (max-width: 900px) {
  /* Centers the button under the heading (it isn't flex-centered by its
     own parent — .hero__title-wrap is full-width, not a flex container —
     and gives it clearance from the heading above it), a bit smaller and
     with extra headroom so the tilt animation's lift-and-rotate doesn't
     reach up into the heading text. */
  .hero__cta-wrap {
    margin: 40px auto 0;
    transform: scale(0.82);
  }

  .hero__cta-wrap:hover,
  .hero__cta-wrap.is-tilted {
    transform: scale(0.82) translate(10px, -28px) rotate(10deg);
  }
}

.hero__title {
  font-family: var(--font-display);
  font-weight: 300;
  color: var(--color-green);
  text-transform: uppercase;
  font-size: var(--text-5xl);
  line-height: var(--leading-tight);
  letter-spacing: -3.36px;
}

.hero__title .line {
  display: block;
  overflow: hidden;
}

.hero__title .line__inner {
  display: block;
  transform: translateY(110%);
  opacity: 0;
  transition:
    transform 0.9s cubic-bezier(0.16, 0.84, 0.44, 1),
    opacity 0.9s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.hero__title-group .line:nth-child(1) .line__inner {
  transition-delay: 0.1s;
}
.hero__title-group .line:nth-child(2) .line__inner {
  transition-delay: 0.22s;
}
.hero__title-em .line__inner {
  transition-delay: 0.34s;
}

.hero__title--anim.is-ready .line__inner {
  transform: translateY(0);
  opacity: 1;
}

/* ---------- Generic scroll-triggered per-line text reveal ---------- */
.text-reveal .line {
  display: block;
  overflow: hidden;
  /* Headroom on all sides so tall/italic glyphs (serif overshoot, e.g. a
     swashed "R") don't get clipped by the mask; the negative margin
     cancels the added space so the line's own position/width doesn't
     shift. */
  padding: 0.15em 0.06em;
  margin: -0.15em -0.06em;
}

.text-reveal .line__inner {
  display: block;
  transform: translateY(110%);
  opacity: 0;
  transition:
    transform 0.9s cubic-bezier(0.16, 0.84, 0.44, 1),
    opacity 0.9s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.text-reveal .line:nth-child(2) .line__inner {
  transition-delay: 0.12s;
}

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

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

.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity 0.8s cubic-bezier(0.16, 0.84, 0.44, 1),
    transform 0.8s cubic-bezier(0.16, 0.84, 0.44, 1);
  will-change: opacity, transform;
}

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

/* Component-family variants on top of the shared .reveal scaffolding
   (main.js's IntersectionObserver still just watches for .reveal — these
   compound selectors are naturally more specific than the plain-class
   rules above and override them, no markup or JS changes needed).
   Previously every eyebrow, card and button on the site got the exact
   same rise-and-fade — one shared entrance for unrelated kinds of
   content is what made the site read as templated. Each family gets an
   entrance that fits what it actually is instead. */

/* Eyebrows: a quick settle in tracking instead of a vertical rise — labels
   don't have anywhere to "rise" from, they just come into focus. */
.eyebrow.reveal {
  transform: none;
  letter-spacing: 0.08em;
  transition:
    opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1),
    letter-spacing 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

.eyebrow.reveal.is-visible {
  letter-spacing: -1.6px;
}

/* Cards (records, events, journal, testimonials): settle into place with
   a touch of scale, not just a straight-up rise — reads as an object
   arriving, not a paragraph fading in. */
.vinyl__item.reveal,
.event-card.reveal,
.testimonial-card.reveal {
  transform: translateY(28px) scale(0.97);
}

.vinyl__item.reveal.is-visible,
.event-card.reveal.is-visible,
.testimonial-card.reveal.is-visible {
  transform: translateY(0) scale(1);
}

/* Buttons: no scroll-reveal at all. A CTA is rarely the thing worth
   staging a reveal moment around, and hiding it briefly on scroll-in
   only delays the one thing a visitor might actually be looking for. */
.btn.reveal {
  opacity: 1;
  transform: none;
  transition: none;
}

/* FAQ questions: a staircase cascade, not a straight rise — each row
   slides in from the right while the rows below it are still held back,
   so the list reads top-to-bottom, right-to-left, one step at a time. */
.faq-item.reveal {
  opacity: 0;
  transform: translateX(56px);
  transition:
    opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

.faq-item.reveal.is-visible {
  opacity: 1;
  transform: translateX(0);
}

.faq__list .faq-item:nth-child(1) {
  transition-delay: 0s;
}
.faq__list .faq-item:nth-child(2) {
  transition-delay: 0.07s;
}
.faq__list .faq-item:nth-child(3) {
  transition-delay: 0.14s;
}
.faq__list .faq-item:nth-child(4) {
  transition-delay: 0.21s;
}
.faq__list .faq-item:nth-child(5) {
  transition-delay: 0.28s;
}
.faq__list .faq-item:nth-child(6) {
  transition-delay: 0.35s;
}
.faq__list .faq-item:nth-child(7) {
  transition-delay: 0.42s;
}
.faq__list .faq-item:nth-child(8) {
  transition-delay: 0.49s;
}
.faq__list .faq-item:nth-child(9) {
  transition-delay: 0.56s;
}
.faq__list .faq-item:nth-child(10) {
  transition-delay: 0.63s;
}

@media (prefers-reduced-motion: reduce) {
  .hero__title .line__inner,
  .reveal {
    transition: none !important;
    transform: none !important;
    opacity: 1 !important;
  }
}

.hero__title em,
.hero__title-em em {
  font-style: italic;
  text-transform: uppercase;
}

.hero__subtitle {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  letter-spacing: -0.3px;
  color: var(--color-green);
  opacity: 0.82;
  max-width: 380px;
  /* auto left/right, not 0 — .hero__title-wrap isn't a flex container,
     so a max-width block box here defaults to its container's left edge
     without this; text-align only centers the text inside the box, not
     the box itself. */
  margin: 16px auto 0;
  text-align: center;
}

/* The markup keeps <br>s for editors who want a hint of the original
   grouping, but the paragraph just reflows naturally at every size now —
   there's only one line of body copy left, so a forced stanza isn't
   needed. */
.hero__subtitle br {
  display: none;
}

@media (min-width: 901px) {
  /* text-align:left here is a leftover from the old left-text/right-
     photo split hero (see #top.hero above, now a centered column) —
     .hero__content--home sets text-align:center on desktop now, but
     this rule targets .hero__subtitle directly, so it was winning over
     the inherited value regardless of source order. */
  .hero__subtitle {
    max-width: 460px;
    margin: 24px auto 0;
    text-align: center;
    font-size: var(--text-base);
  }
}

@media (max-width: 900px) {
  .hero__title-group {
    text-align: left;
  }

  .hero__title-em {
    text-align: right;
    /* Right-aligned italic serif overshoots its own advance width a
       little (the italic "n"'s flourish) — this box also masks the
       reveal animation with overflow:hidden, so without a little
       padding here that overshoot gets clipped clean off. */
    padding-right: 6px;
  }

  .hero__subtitle {
    text-align: left;
    max-width: 480px;
    margin-left: 0;
    margin-right: 0;
  }
}

/* =========================================================
   Menu index (plain category list, js/plate-menu.js) — was a
   scroll-pinned spinning-plate carousel, then briefly a click-driven
   version of the same; client feedback settled on a plain list instead.
   Each category is a real link to its section on menu.html; hovering one
   reveals its photo in the fixed preview panel beside the list (built by
   js/plate-menu.js from the same JSON data the list items themselves
   come from, never duplicated by hand). No hover on touch, so the photo
   panel is simply hidden on mobile — see the media query at the bottom.
   ========================================================= */

.menu-index {
  position: relative;
  /* Green edge-to-edge for this section specifically, not the blush the
     rest of the page uses — the dashed-divider row panel used to be an
     island of green floating in a blush margin; now the whole block
     (eyebrow, rows, CTA) reads as one solid green field. */
  background: var(--color-green);
  padding: var(--space-13) var(--gutter);
}

/* .eyebrow's shared default (var(--color-green)) is illegible on this
   section's own green background — overridden to cream just here. */
.menu-index__header .eyebrow {
  color: var(--color-cream);
}

.menu-index__inner {
  max-width: var(--page-max);
  margin: 0 auto;
}

.menu-index__header {
  text-align: center;
  margin-bottom: var(--space-9);
}

.menu-index__heading {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -2.4px;
  text-align: center;
  text-transform: uppercase;
  color: var(--color-green);
}

.menu-index__heading em {
  font-style: italic;
  text-transform: uppercase;
}

/* Full-bleed dark panel of rows, replacing the centered plain-text list
   + random floating-photo-on-hover pair. No separate preview box —
   js/menu-index.js spawns that category's own photo(s) trailing along
   the cursor directly over this panel as it moves across a row. */
.menu-index__panel {
  position: relative;
  background: var(--color-green);
  overflow: hidden;
}

/* One pointer-events:none <img> element js/menu-index.js repositions —
   layered above the rows (z-index) so it reads as "riding" the cursor
   over the text, not tucked behind it, while pointer-events:none keeps
   every row's own link fully clickable underneath. */
.menu-index__trail-layer {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 3;
}

/* Stays wherever the cursor stops — opacity only toggles on entering/
   leaving the whole panel (js/menu-index.js), never on a timer, so the
   photo doesn't vanish out from under a cursor that's holding still.
   transform gets a short transition purely to smooth out the per-frame
   position updates, not to stage an entrance/exit. */
.menu-index__trail-img {
  position: absolute;
  top: 0;
  left: 0;
  width: 170px;
  aspect-ratio: 2 / 3;
  opacity: 0;
  overflow: hidden;
  box-shadow: 0 18px 40px rgba(11, 15, 11, 0.35);
  transition:
    transform 0.12s linear,
    opacity 0.25s ease-out;
  will-change: transform, opacity;
}

.menu-index__trail-img img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.menu-index__list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.menu-index__row {
  border-top: 1px solid color-mix(in srgb, var(--color-cream) 30%, transparent);
}

.menu-index__row:last-child {
  border-bottom: 1px solid
    color-mix(in srgb, var(--color-cream) 30%, transparent);
}

/* Dashed, not solid, between rows specifically — the panel's own
   top/bottom edge (above) stays solid so the block still reads as one
   contained shape; only the seams between rows get the lighter, more
   casual dashed treatment. */
.menu-index__row:not(:first-child) {
  border-top-style: dashed;
}

.menu-index__row-link {
  position: relative;
  display: flex;
  align-items: baseline;
  gap: 16px;
  padding: 20px var(--gutter);
  text-decoration: none;
  color: var(--color-cream);
  transition: opacity 0.3s ease;
}

/* Hovering the list dims every row, then the hovered one alone comes
   back to full opacity — a soft spotlight rather than each row just
   sitting at full strength all the time. */
.menu-index__list:hover .menu-index__row-link {
  opacity: 0.55;
}

.menu-index__list:hover .menu-index__row-link:hover,
.menu-index__row-link:focus-visible {
  opacity: 1;
}

.menu-index__row-name {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(32px, 4.2vw, 58px);
  line-height: 1;
  letter-spacing: -1.2px;
  text-transform: uppercase;
  white-space: nowrap;
}

.menu-index__row-name em {
  font-style: italic;
}

.menu-index__row-note {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: 0.2px;
  color: color-mix(in srgb, var(--color-cream) 70%, transparent);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.menu-index__row-arrow {
  width: 26px;
  height: auto;
  flex-shrink: 0;
  margin-left: auto;
  color: var(--color-blush);
}

/* Blush instead of the site-wide coral outline here specifically — the
   panel behind it is already dark green, so a blush border/label (the
   hero's own background tint) reads as this section's accent instead of
   just reusing .btn--outline-green's default everywhere-else coral. */
.menu-index__cta {
  display: flex;
  width: fit-content;
  margin: var(--space-9) auto 0;
  border-color: var(--color-blush);
  color: var(--color-blush);
}

.menu-index__cta:hover {
  background: var(--color-blush);
  border-color: var(--color-blush);
  color: var(--color-green);
}

@media (max-width: 900px) {
  .menu-index {
    padding: var(--space-11) var(--gutter);
  }

  .menu-index__row-link {
    flex-wrap: wrap;
    gap: 4px 12px;
    padding: 16px var(--gutter);
  }

  .menu-index__row-name {
    font-size: 28px;
    white-space: normal;
  }

  .menu-index__row-note {
    white-space: normal;
  }

  .menu-index__row-arrow {
    width: 20px;
  }
}

/* =========================================================
   Journal
   ========================================================= */

.journal {
  /* Homepage hero above is position:sticky, which paints in a layer above
     static siblings regardless of source order — without this its
     content could show through over this section (and the ones after
     it) as they scroll past. */
  position: relative;
  max-width: var(--page-max);
  margin: 0 auto;
  /* Top padding cut way down from the old symmetric var(--space-14)
     (140px) — the "JOURNAL" title band above already carries its own
     padding-bottom, so stacking a full 140px on top of that read as a
     huge gap before the first card. Bottom keeps the original space
     before the footer. */
  padding: clamp(24px, 4vh, 48px) var(--gutter) var(--space-14);
}

/* The homepage teaser block (has id="journal") gets a full-bleed green
   panel with blush text throughout — its own distinct color moment amid
   the site's mostly cream/green pages; the standalone journal listing
   page (.journal without the id) keeps the plain page background and the
   green-on-cream palette everywhere else, so centering moves down to
   .journal__inner and every text-color override below is scoped to this
   id, not the shared classes themselves. */
#journal {
  max-width: none;
  margin: 0;
  padding: var(--space-14) 0;
  background: var(--color-green);
}

#journal .eyebrow,
#journal .journal__heading,
#journal .journal-entry__title,
#journal .journal-entry__more {
  color: var(--color-blush);
}

#journal .journal-entry__excerpt {
  color: color-mix(in srgb, var(--color-blush) 78%, transparent);
}

.journal__inner {
  max-width: var(--page-max);
  margin: 0 auto;
  padding: 0 var(--gutter);
}

.journal__header {
  text-align: center;
  margin-bottom: 20px;
}

.journal__heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -4.8px;
  text-transform: uppercase;
  text-align: center;
  color: var(--color-green);
}

.journal__heading em {
  font-style: italic;
  text-transform: uppercase;
}

/* Editorial list, not a card grid — the photo stays real estate (this is
   food/atmosphere imagery, it should carry weight), but the "identical
   card with a shadow" scaffold is gone. Rows alternate image side for
   rhythm, separated by a hairline rule instead of a box; captions read
   as an article list (title + dek + byline + a text link), not a tile
   label. Any number of articles just adds rows. */
.journal-list {
  display: flex;
  flex-direction: column;
}

/* Homepage teaser: an editorial row list (date · title/excerpt/CTA ·
   photo), not a 3-up card grid — and it reuses the exact same guide
   lines the footer and FAQ sections already align to instead of
   inventing its own: each row bleeds out of .journal__inner's centered
   page-max column on both sides (same formula as .faq__header/.faq__list)
   so its text starts flush with the footer's nav column and the FAQ
   heading, and the photo's right edge lands on the same full-bleed line
   as the footer's social column and the FAQ list. The internal split
   between the two also reuses that system: 50% - 95px / 50% + 95px is
   the same column math .faq__inner uses, which is why it happens to put
   the boundary exactly on the "hours line" the FAQ list starts from. */
.journal-list--teaser {
  flex-direction: column;
  gap: 0;
}

.journal-list--teaser .journal-entry {
  display: grid;
  /* Column 1 stays calc(50% - 95px) so its right edge lands exactly on
     the hours line (760px at our 1710px reference width), same as
     .faq__inner. Column 2 is shorted by the 56px gap below so the two
     columns plus the gap between them still land on the full-bleed
     right edge instead of overshooting it by one gap-width. */
  grid-template-columns: calc(50% - 95px) calc(50% + 39px);
  align-items: center;
  gap: 56px;
  /* No horizontal padding here on purpose — the bleed margins below
     already land the row's edges exactly on .journal__inner's own
     (pre-gutter) edge, which is the same x as the footer nav/FAQ
     heading's left line and the footer social/FAQ list's right line.
     Adding gutter padding on top of that (like .site-footer__row--top
     needs to, since it has no page-max wrapper to escape) would double
     the inset instead of landing on the line. */
  padding: 48px 0;
  /* The site's own dashed-line-on-a-dark-background treatment (same
     rgba the kinetic fullscreen menu uses over its dark green overlay),
     not a one-off color — the plain rgba(46,72,43,…) dashed rule used
     everywhere else on the site would be invisible here since that's
     literally this section's own background color. */
  border-bottom: 1px dashed rgba(242, 236, 227, 0.25);
  margin-left: min(0px, calc(-1 * (100vw - var(--page-max)) / 2));
  margin-right: min(0px, calc(-1 * (100vw - var(--page-max)) / 2));
  width: calc(100% + 2 * max(0px, calc((100vw - var(--page-max)) / 2)));
}

.journal-list--teaser .journal-entry:first-child {
  padding-top: 48px;
  border-top: 1px dashed rgba(242, 236, 227, 0.25);
}

.journal-list--teaser .journal-entry__image {
  grid-column: 2;
  grid-row: 1;
  aspect-ratio: 4 / 3;
  margin-bottom: 0;
}

.journal-list--teaser .journal-entry__body {
  grid-column: 1;
  grid-row: 1;
  align-items: flex-start;
}

.journal-list--teaser .journal-entry__date {
  display: block;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.03em;
  color: color-mix(in srgb, var(--color-blush) 65%, transparent);
}

.journal-list--teaser .journal-entry__arrow {
  display: none;
}

/* Homepage teaser only — journal.html's own full list has no closing CTA
   of its own, this button lives beneath the .journal-list--teaser. */
.journal-stack__cta {
  display: flex;
  width: fit-content;
  margin: var(--space-8) auto 0;
}

/* Vertical card — full-width photo on top, then a title/time row,
   excerpt, and a "read more" row spanning the full card width with the
   arrow pushed to the opposite corner — replaces the old horizontal
   image-left/text-right split, per explicit request/reference. .journal-
   list becomes a real grid of these instead of a plain stacked column so
   more than one can sit per row on wide screens. */
/* Journal listing (journal.html) — menu-style rows: a small image on the
   left, then title / short excerpt / "Read more" stacked on the right,
   one article under the next down the page (no card grid, no slider),
   dashed dividers between. Handles both the JS-rendered markup
   (title / __media>[__image,__excerpt] / __meta) and the static
   fallback (__image + __body). */
.journal-list {
  display: flex;
  flex-direction: column;
  gap: 18px;
}

/* Cream mat under every row — the same beige card the homepage journal
   teaser sits each story on, but kept in this page's horizontal format
   (photo left, article text right) rather than the teaser's stacked
   polaroid. The dashed rule that used to separate rows is gone: the
   card edges do that job now. */
.journal-entry {
  display: grid;
  grid-template-columns: 220px minmax(0, 1fr);
  /* Excerpt row takes whatever's left over instead of sizing to its own
     content — pushes the Read more / time row down to sit on the same
     bottom line the image ends on, instead of floating right under a
     short excerpt with a gap before the image's actual bottom edge. */
  grid-template-rows: auto 1fr auto;
  align-items: start;
  column-gap: 32px;
  row-gap: 10px;
  padding: clamp(20px, 2.6vw, 28px);
  background: var(--color-cream);
  border-radius: 2px;
  box-shadow: 0 14px 30px rgba(11, 15, 11, 0.12);
  /* Above the grain overlay's z-index:55 so the card's own cream
     surface stays clean. */
  position: relative;
  z-index: 56;
}

.journal-entry__media {
  display: contents;
}

.journal-entry__image {
  /* Stretch to fill the full title/excerpt/more column height instead
     of a fixed 4:3 ratio — top edge stays where the title sits, bottom
     edge now lands on the same line "Read more" + its arrow do,
     instead of stopping short partway down. Explicit width — without
     it the grid item sized itself off the photo's own intrinsic pixel
     width instead of its 116px/220px column, spilling across the text
     next to it. */
  width: 100%;
  min-width: 0;
  height: 100%;
  overflow: hidden;
  border-radius: 2px;
  margin: 0;
  grid-column: 1;
  grid-row: 1 / 4;
}

/* static fallback wraps title/excerpt/more in __body — keep it in col 2 */
.journal-entry__body {
  grid-column: 2;
  grid-row: 1 / 4;
}

.journal-entry__title {
  grid-column: 2;
  grid-row: 1;
}

.journal-entry__excerpt {
  grid-column: 2;
  grid-row: 2;
}

/* Read time shares the Read more row now, bottom-right corner of the
   card, instead of sitting up by the title. */
.journal-entry__meta {
  grid-column: 2;
  grid-row: 3;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  margin-top: 4px;
}

.journal-entry__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.7s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.journal-entry:hover .journal-entry__image img {
  transform: scale(1.04);
}

.journal-entry__body {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 18px;
}

.journal-entry__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
}

.journal-entry__time {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.03em;
  color: color-mix(in srgb, var(--color-ink) 55%, transparent);
}

.journal-entry__title {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 300;
  /* A touch smaller than --text-lg, on request. */
  font-size: 24px;
  line-height: var(--leading-tight);
  letter-spacing: -1.2px;
  color: var(--color-green);
}

.journal-entry__excerpt {
  margin: 0;
  max-width: 46ch;
  font-family: var(--font-mono);
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  color: color-mix(in srgb, var(--color-ink) 78%, transparent);
}

.journal-entry__more {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  font-family: var(--font-mono);
  font-size: var(--text-xs);
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--color-green);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.journal-entry__arrow {
  /* Now an inline outline clock (see js/journal-list-sanity.js), square
     rather than the old arrow glyph's 18x16 box. */
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  transition: transform 0.3s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.journal-entry:hover .journal-entry__arrow {
  transform: translateX(4px);
}

/* ---------- Journal poster stack (homepage only) ---------- */

/* Tall track the pinned stack scrolls through; drives the fan animation.
   Now that #journal itself is full-bleed, this is what centers the content
   and reproduces the section's old padding. Below the page-max breakpoint
   its box already spans the full viewport, so the clip edge below lands at
   the screen edge without needing an extra full-bleed margin trick. */
.journal-track,
.events-track {
  position: relative;
  max-width: var(--page-max);
  margin: 0 auto;
  padding: var(--space-14) var(--gutter);
  min-height: 260vh;
  /* clip, not hidden: clip stops a peeling poster from creating sideways
     page scroll without making a scroll container, which would break the
     sticky pinning below. */
  overflow-x: clip;
}

.journal-stack,
.events-stack {
  position: sticky;
  top: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: clamp(12px, 2.5vh, 24px);
  min-height: 100vh;
}

.journal-fan,
.events-fan {
  position: relative;
  margin: 0 auto;
  perspective: 1600px;
}

/* Inside the pinned stack the flex gap already provides the spacing.
   align-self: stretch so the heading spans the full width — .journal-stack
   centers flex children by default (shrink-to-fit), which left no room
   for the heading's own left/right per-line split to actually show. */
.journal-stack .journal__header {
  margin-bottom: 0;
  align-self: stretch;
}

/* The cream polaroid border + printed caption used to be baked directly
   into 4 hand-crafted image files — meaning a new Journal article could
   never look right here without a developer producing a matching image.
   Built as a real frame + caption instead so any article's plain cover
   photo gets the same look automatically. */
.journal-poster {
  position: absolute;
  top: 50%;
  left: 50%;
  aspect-ratio: 2 / 3;
  display: flex;
  flex-direction: column;
  background: var(--color-cream);
  /* Fixed px, not %: padding percentages resolve against the *containing
     block's* width (.journal-fan, up to 1140px), not the poster's own 31%
     — a percentage here looked fine in isolation but ballooned into a huge
     border on wide screens. A fixed value stays a thin, consistent mat
     regardless of viewport, matching the border weight used elsewhere on
     the site (menu, hero, etc). */
  padding: 14px 14px 0;
  overflow: hidden;
  border-radius: 2px;
  backface-visibility: hidden;
  transform-style: preserve-3d;
  /* translate(-50%,-50%) centres the poster; --tx/--ty are then percentages
     of the poster's own size, matching how the reference expresses its
     offsets as a ratio of poster width. */
  transform: translate(-50%, -50%) translateX(var(--tx, 0%))
    translateY(var(--ty, 0%)) rotate(var(--rotz, 0deg))
    rotateY(var(--roty, 0deg)) scale(var(--sc, 1));
  z-index: var(--z, 1);
  box-shadow: 0 14px 32px rgba(11, 15, 11, 0.28);
  pointer-events: var(--pe, auto);
}

.journal-poster__frame {
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

.journal-poster img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  pointer-events: none;
}

.journal-poster__caption {
  padding: 12px 0 18px;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-base);
  line-height: 1.15;
  letter-spacing: -0.4px;
  text-transform: uppercase;
  color: var(--color-green);
}

/* Same fan-transform mechanics as .journal-poster (see the comment there),
   applied to the existing .event-card instead of switching its content
   over to the poster/caption look — the card keeps its own photo+scrim+
   tag/title/desc, only its positioning becomes scroll-driven. */
.events-fan .event-card {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) translateX(var(--tx, 0%))
    translateY(var(--ty, 0%)) rotate(var(--rotz, 0deg))
    rotateY(var(--roty, 0deg)) scale(var(--sc, 1));
  z-index: var(--z, 1);
  box-shadow: 0 14px 32px rgba(11, 15, 11, 0.28);
  pointer-events: var(--pe, auto);
}

/* Desktop: posters fan out sideways as you scroll in. Threshold matches
   the sitewide 900/901px split (see the mobile block below) rather than
   an independent 900/899 pair — both partitions were individually
   non-overlapping, but disagreed with each other at exactly 900px. */
@media (min-width: 901px) {
  .journal-fan {
    /* Height bound keeps the fan plus heading and hint inside one screen on
       short desktop windows. */
    width: min(100%, 1140px, 118vh);
    aspect-ratio: 16 / 9;
  }

  .journal-poster {
    width: 31%;
    transition: z-index 0s;
  }

  /* A hovered poster reads on top regardless of its resting stack order,
     so a caption underneath a neighbour is never stuck unreachable. */
  .journal-poster:hover {
    z-index: 100;
  }

  .events-fan {
    width: min(100%, 1140px, 118vh);
    aspect-ratio: 16 / 9;
  }

  .events-fan .event-card {
    width: 34%;
    transition: z-index 0s;
  }

  .events-fan .event-card:hover {
    z-index: 100;
  }
}

/* Mobile: posters stay centred and stacked, splayed only by rotation, then
   flip away one at a time. Sized so a 15deg-rotated poster still clears a
   narrow viewport. */
@media (max-width: 900px) {
  .journal-track {
    padding: 60px var(--gutter);
  }

  .journal-stack {
    min-height: 100vh;
  }

  .journal-fan {
    /* Also bounded by viewport height so the 2:3 poster plus its heading
       and hint still fit on short screens. */
    width: min(86vw, 420px, 34vh);
    aspect-ratio: 2 / 3;
  }

  /* Narrower than the fan box so a rotated poster's corners stay inside it
     and never ride up over the heading. */
  .journal-poster {
    width: 88%;
  }

  .events-track {
    padding: 60px var(--gutter);
  }

  .events-stack {
    min-height: 100vh;
  }

  .events-fan {
    width: min(86vw, 420px, 34vh);
    aspect-ratio: 3 / 4;
  }

  .events-fan .event-card {
    width: 88%;
  }
}

@media (min-width: 901px) {
  a.journal-stack__cta {
    height: 92px;
    padding: 0 38px;
    font-size: var(--text-md);
  }
}

/* =========================================================
   Reviews
   ========================================================= */

.reviews {
  position: relative;
  background: var(--color-blush);
  padding: var(--space-11) 0 var(--space-12);
  overflow: hidden;
}

.reviews__header {
  position: relative;
  z-index: 1;
  padding: 0 var(--gutter);
}

.reviews__header {
  max-width: var(--page-max);
  margin: 0 auto;
  text-align: center;
  color: var(--color-green);
}

.rating-badge {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -0.96px;
  margin-bottom: 20px;
}

.rating-badge img {
  width: 20px;
  height: 20px;
}

.reviews__heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -4.8px;
  text-transform: uppercase;
  margin-bottom: 60px;
}

.reviews__heading em {
  font-style: italic;
  text-transform: uppercase;
}

/* All reviews, not just a curated three, still drag/scroll as an
   infinite strip — same mechanic as the old marquee (js/main.js's
   makeDraggableMarquee hooks these exact class names), just with the
   new flat-bordered card design in place of the old printed/tilted
   ones. The list is duplicated once in the HTML (10 reviews -> 20 list
   items) so the loop is seamless. */
.reviews__marquee {
  position: relative;
  z-index: 1;
  overflow: hidden;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  margin-bottom: 32px;
}

.testimonials-track {
  display: flex;
  align-items: stretch;
  gap: 20px;
  width: max-content;
  animation: testimonials-scroll 70s linear infinite;
  /* Let js/main.js own horizontal drags (it swaps this animation out for
     a manual transform mid-gesture); vertical page scroll still passes
     through untouched. */
  touch-action: pan-y;
  cursor: grab;
}

.testimonials-track.is-dragging {
  cursor: grabbing;
}

.reviews__marquee:hover .testimonials-track {
  animation-play-state: paused;
}

@keyframes testimonials-scroll {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-50%);
  }
}

@media (prefers-reduced-motion: reduce) {
  .testimonials-track {
    animation: none;
  }
}

/* Flat and bordered, not the printed/tilted card language used
   elsewhere (About Us, Journal) — a steadier card reads calmer next to
   the now fully-centered heading/CTA around it. Fixed width (not a grid
   1fr) since this is a horizontal flex strip again, not a static grid. */
.testimonial-card {
  position: relative;
  flex: 0 0 400px;
  width: 400px;
  display: flex;
  flex-direction: column;
  background: var(--color-blush);
  border: 1px solid var(--color-green);
  padding: 24px 28px 28px;
  min-height: 280px;
}

.testimonial-card__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding-bottom: 16px;
  margin-bottom: 20px;
  border-bottom: 1px solid var(--color-green);
}

.testimonial-card__stars {
  width: 90px;
  height: 15px;
  flex-shrink: 0;
}

.testimonial-card__author {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--color-green);
  text-align: right;
}

.testimonial-card__text {
  position: relative;
  z-index: 1;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -0.96px;
  line-height: var(--leading-normal);
  color: var(--color-ink);
  margin: 0;
  flex: 1;
}

/* Just the "Google Map" label + arrow now, not a full-card click
   overlay — reads as one specific link rather than the whole card
   being a mystery button. */
.testimonial-card__link {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 24px;
  padding-top: 16px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: -0.4px;
  color: var(--color-green);
  text-decoration: none;
}

.testimonial-card__arrow {
  width: 18px;
  height: auto;
  flex-shrink: 0;
  color: var(--color-green);
  transition: transform 0.2s ease-out;
}

.testimonial-card__link:hover .testimonial-card__arrow {
  transform: translateX(4px);
}

/* Book Now (reusing the same .hero__cta-wrap/claw pattern as the hero
   and closing-cta sections — one consistent CTA button across the
   site, not a one-off) stacked above a short prompt + underlined review
   link, both centered as one column under the grid. */
.reviews__cta-block {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 28px;
}

.reviews__cta-text {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  color: var(--color-green);
  text-align: center;
  margin: 0;
}

.reviews__cta-link {
  color: var(--color-green);
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* =========================================================
   FAQ
   ========================================================= */

.faq {
  position: relative;
  background: var(--color-blush-panel);
}

/* Header and question list sit side by side, not stacked — the column
   split lands exactly on the imaginary vertical line the footer's hours
   block centers on (see .faq__list below): 50% - 95px / 50% + 95px, so
   the heading's column ends precisely where the questions' column (and
   the hours text above it) begins. */
.faq__inner {
  max-width: var(--page-max);
  margin: 0 auto;
  /* Bottom padding trimmed from the shared --space-14 (140px) — the
     footer directly below already carries its own row padding, so the
     full space-14 on top of that read as a big dead gap before the
     footer's first dashed divider. */
  padding: var(--space-12) var(--gutter) var(--space-8);
  display: grid;
  grid-template-columns: calc(50% - 95px) calc(50% + 95px);
  align-items: start;
}

/* Mirrors .faq__list's right-side bleed: breaks out of .faq__inner's
   centered page-max column on the left so the heading starts flush with
   the footer's nav column (MENU/EVENTS/JOURNAL) instead of stopping at
   the page-max container's own padded edge. */
.faq__header {
  grid-column: 1;
  grid-row: 1;
  text-align: left;
  padding-right: clamp(16px, 3vw, 48px);
  margin-left: min(0px, calc(-1 * (100vw - var(--page-max)) / 2));
  /* Nudges the heading's first line down to sit on the same baseline as
     the first question ("Where is Pinch located?") to its right — the
     two start at grid-row: 1 together, but the heading's much larger
     font sits visually higher than the question's small caps by default. */
  margin-top: 10px;
}

.faq__heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -4.8px;
  text-transform: uppercase;
  text-align: left;
  color: var(--color-green);
}

.faq__heading em {
  font-style: italic;
  text-transform: uppercase;
}

/* Fills the empty space the two-column split leaves under the heading,
   the same red-fill/black-linework illustration style already used in
   the footer brand row. Left edge inherits .faq__header's own bled-out
   left offset, so it lines up with the heading and the footer nav. */
.faq__illustration {
  display: block;
  width: clamp(200px, 27vw, 420px);
  height: auto;
  margin-top: clamp(48px, 10vw, 180px);
}

.faq__body {
  grid-column: 2;
  grid-row: 1;
}

/* Photo column removed. The list itself just fills its grid column now
   (the column boundary above is what aligns its left edge to the hours
   line — see .faq__inner). On the right, it still breaks out of
   .faq__inner's centered page-max column the same way the footer's top row
   escapes it (see .site-footer__row--top), so the dashed dividers and "+"
   toggles run all the way to the same right-hand inset as the footer's
   social column instead of stopping short at the page-max container's
   edge. The min(0px, …) guards it off below page-max, where .faq__inner
   isn't centered with extra margin to escape in the first place. */
.faq__list {
  display: flex;
  flex-direction: column;
  justify-self: start;
  width: calc(100% + max(0px, calc((100vw - var(--page-max)) / 2)));
}

.faq-item {
  border-bottom: 1px dashed rgba(46, 72, 43, 0.5);
}

.faq-item:last-child {
  border-bottom: none;
}

/* Same treatment as .journal-entry__title — sentence case, not the small
   caps the toggle used to render in (the markup was always sentence case;
   text-transform was doing the capitalizing). */
.faq-item__toggle {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 24px 0;
  font-family: var(--font-display);
  font-weight: 300;
  /* Matches .journal-entry__title exactly (text-lg / -1.4px), per her
     "same as the article titles" request — not just the same case
     treatment, the same size too. */
  font-size: var(--text-lg);
  line-height: var(--leading-tight);
  letter-spacing: -1.4px;
  color: var(--color-green);
  text-align: left;
}

.faq-item__icon {
  width: 20px;
  height: 20px;
  flex-shrink: 0;
  transform: rotate(-45deg);
  transition: transform 0.4s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.faq-item.is-open .faq-item__icon {
  transform: rotate(0deg);
}

.faq-item__panel {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 0.45s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.faq-item.is-open .faq-item__panel {
  grid-template-rows: 1fr;
}

.faq-item__panel > p {
  overflow: hidden;
  margin: 0;
  padding: 0;
  max-width: 520px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -0.96px;
  color: var(--color-green);
}

.faq-item.is-open .faq-item__panel > p {
  padding-bottom: 24px;
}

/* ---------- Closing CTA (last content beat, right before the footer) ---
   Cream, not blush or green — FAQ (blush) resolves doubt, this converts
   on it, and the footer (green) closes the page; a neutral pause between
   the two keeps all three from blurring into one block. Split with the
   map (moved in from its own standalone strip) so the close doubles as
   "here's exactly where" — copy left, map right. */
.closing-cta {
  display: flex;
  align-items: stretch;
  background: var(--color-blush-panel);
}

.closing-cta__content {
  flex: 1 1 50%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: var(--space-12) var(--gutter);
}

.closing-cta__heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -4.8px;
  text-transform: uppercase;
  color: var(--color-green);
  margin: 0 0 20px;
}

.closing-cta__subtitle {
  max-width: 36ch;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  color: var(--color-green);
  opacity: 0.82;
  margin: 0 0 32px;
}

.closing-cta__actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
}

/* .hero__cta-wrap's own 104px top margin is tuned for the hero, where it
   clears a much taller heading block above it — here the heading is
   short, so that same margin reads as a big dead gap. Cut it down but
   not to zero: the claw artwork still needs ~74px of headroom above
   the button (see .hero__cta-claw's own top offset) to avoid clipping
   into the heading. */
@media (min-width: 901px) {
  .closing-cta__actions .hero__cta-wrap {
    margin-top: 30px;
  }
}

/* Same leak as .closing-cta__actions above — .hero__cta-wrap's 104px top
   margin is sized for the hero's tall heading, and reads as a big dead
   gap between the reviews marquee and this Book Now button. */
@media (min-width: 901px) {
  .reviews__cta-block .hero__cta-wrap {
    margin-top: 30px;
  }
}

.closing-cta__map {
  flex: 1 1 50%;
  min-height: 480px;
  overflow: hidden;
}

.closing-cta__map iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

/* =========================================================
   Vinyl (playlist teasers — hover a cover, the record slides out from
   behind it and spins; js/vinyl.js plays that card's own audio loop and
   stops any other that was playing)
   ========================================================= */

.vinyl {
  position: relative;
  background: var(--color-blush);
  padding: var(--space-13) var(--gutter);
  /* Contains the record's own hover/tap slide-out locally — scoped here
     rather than on html/body: this section has no position:sticky
     descendants, so it can't trip the browser quirk where setting
     overflow-x without overflow-y implicitly turns overflow-y into
     "auto" on the element, which (when done on html/body) breaks any
     sticky element's pin behavior elsewhere on the page. */
  overflow-x: hidden;
}

.vinyl__inner {
  max-width: var(--page-max);
  margin: 0 auto;
}

.vinyl__header {
  text-align: center;
  margin-bottom: 64px;
}

.vinyl__heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -4.8px;
  text-transform: uppercase;
  text-align: center;
  color: var(--color-green);
}

.vinyl__heading em {
  font-style: italic;
  text-transform: uppercase;
}

.vinyl__subtitle {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  letter-spacing: -0.3px;
  color: var(--color-green);
  opacity: 0.82;
  max-width: 420px;
  margin: 16px auto 0;
}

.vinyl__grid {
  display: grid;
  /* 3×400 + 2×80 = 1360px, exactly the usable width inside .vinyl__inner
     at the page's own max-width (1440px) minus its 40px gutter each
     side — sized to fill that fully rather than stopping short of it. */
  grid-template-columns: repeat(3, minmax(0, 400px));
  justify-content: center;
  gap: 80px;
}

.vinyl__item {
  position: relative;
  width: 100%;
  aspect-ratio: 1;
}

/* The record itself is now the card's only visual (no cover artwork sits
   on top of it any more) — centered and large within the square card,
   spinning in place on hover/while playing rather than sliding out from
   behind anything. */
.vinyl__disc {
  position: absolute;
  inset: 6%;
  z-index: 0;
}

.vinyl__disc-spin {
  --spin-start: 0deg;
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  animation: vinyl-spin 2.8s linear infinite;
  animation-play-state: paused;
  box-shadow: 0 14px 32px rgba(11, 15, 11, 0.28);
  cursor: grab;
  touch-action: none;
}

.vinyl__item:hover .vinyl__disc-spin,
.vinyl__item.is-playing .vinyl__disc-spin {
  animation-play-state: running;
}

/* Grabbing and manually turning the record (js/vinyl.js) takes it out of
   the auto-spin animation entirely for the duration of the drag — see the
   comment above bindScratch() there for why. */
.vinyl__item.is-dragging .vinyl__disc-spin {
  cursor: grabbing;
}

.vinyl__disc-spin img {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  display: block;
  pointer-events: none;
}

/* Keyframes read their starting angle from --spin-start (set in JS, see
   vinyl.js) rather than always beginning at 0deg, so handing the record
   back to the auto-spin after a manual drag continues smoothly from
   wherever it was left instead of snapping back to its pre-drag angle. */
@keyframes vinyl-spin {
  from {
    transform: rotate(var(--spin-start));
  }
  to {
    transform: rotate(calc(var(--spin-start) + 360deg));
  }
}

@media (max-width: 900px) {
  .vinyl {
    padding: 80px var(--gutter);
  }

  .vinyl__header {
    margin-bottom: 40px;
  }

  .vinyl__heading {
    font-size: var(--text-heading-mobile);
    letter-spacing: -2.4px;
  }

  .vinyl__grid {
    grid-template-columns: 1fr;
    gap: 40px;
    max-width: 320px;
    margin: 0 auto;
  }
}

/* =========================================================
   Statement — a plain static block. The crab/lobster converge motif
   that used to live here (js/statement-scroll.js, a 250vh scroll-pinned
   track) has moved to the footer instead, converging over the logo
   there rather than this section's text — see .site-footer__brand. */

.statement {
  position: relative;
  background: var(--color-blush);
  display: flex;
  justify-content: center;
  padding: var(--space-13) var(--gutter);
}

.statement__inner {
  max-width: 640px;
  text-align: left;
}

/* A full sentence, not a 2-3 word tagline — the old giant uppercase
   display treatment (--text-heading, -4.8px tracking) read as shouting
   once real sentence-length copy went in it. Sized as a lead-in instead:
   still the display face for character, but sentence case and a size
   that sits between the body copy below it and an actual section
   heading. */
.statement__heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-xl);
  line-height: var(--leading-snug);
  letter-spacing: -0.6px;
  color: var(--color-green);
  margin: 0 0 24px;
}

.statement__heading em {
  font-style: italic;
  text-transform: uppercase;
}

.statement__text {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  letter-spacing: -0.5px;
  color: var(--color-green);
  margin: 0;
  opacity: 0.82;
}

.statement__text + .statement__text {
  margin-top: 16px;
}

/* Reuses the hero's own claw button — .statement__cta only overrides its
   margin (the hero variant auto-centers itself; here it sits flush left,
   under the left-aligned copy, at both breakpoints). Two-class selector
   outranks .hero__cta-wrap alone, so this wins regardless of source order
   against the hero's own responsive margin rules. */
.hero__cta-wrap.statement__cta {
  margin: 32px 0 0;
}

/* =========================================================
   Responsive
   ========================================================= */

@media (max-width: 900px) {
  :root {
    --gutter: 24px;
  }

  .hero {
    min-height: 100vh;
    min-height: 100svh;
  }

  .hero__title {
    font-size: 68px;
    letter-spacing: -2.6px;
    text-align: center;
  }

  .nav {
    flex-direction: row;
    justify-content: space-between;
    align-items: center;
    gap: 0;
    padding: 16px 20px;
  }

  .nav__logo {
    order: 1;
  }

  /* The desktop side-by-side split (heading | questions) collapses back
     to a single stacked column here — heading on top, full-width list
     below, both centered, same as the section always rendered at this
     breakpoint. */
  .faq__inner {
    display: block;
  }

  .faq__header {
    grid-column: unset;
    grid-row: unset;
    padding-right: 0;
    margin-left: 0;
    margin-top: 0;
    margin-bottom: 40px;
  }

  /* No leftover column to fill on the stacked mobile layout — the
     illustration would just add scroll length above the questions. */
  .faq__illustration {
    display: none;
  }

  .faq__list {
    width: 100%;
    margin-right: 0;
  }

  .faq__header,
  .faq__heading {
    text-align: center;
  }

  .journal__heading,
  .reviews__heading,
  .faq__heading,
  .closing-cta__heading {
    font-size: var(--text-heading-mobile);
    letter-spacing: -2.4px;
  }

  /* .statement__heading isn't part of the shared display-heading scale
     above anymore — it's sentence-length lead-in copy now, not a 2-3
     word tagline, so it keeps its own smaller desktop size unscaled. */
  .statement__heading {
    font-size: var(--text-lg);
    letter-spacing: -0.4px;
  }

  /* "Already Loves It" (and its PT equivalent "Já Adora") runs ~5px wider
     than the 327px content box at narrow phone widths — the only one of
     the four shared headings tight enough to orphan its last word. */
  .reviews__heading {
    letter-spacing: -3.6px;
  }

  .intro__text {
    /* Smaller than the matching headings, and fixed rather than vw-based:
       at this font-size "can change" only stays on one line below a
       specific pixel width, and that threshold doesn't scale with
       viewport the way vw would. An explicit width (not just max-width)
       matters here because position:absolute with no "right" set
       shrink-wraps to content instead of filling up to max-width, which
       was rendering narrower than intended and re-wrapping "can" alone. */
    font-size: 38px;
    letter-spacing: -2.1px;
    width: 245px;
    max-width: 245px;
    padding: 0;
  }

  /* Was a stray padding-top: 80px — bigger than the desktop clamp's own
     48px ceiling, so mobile carried MORE space under the hero than
     desktop despite the narrower screen, and never reduced the 140px
     bottom padding at all. .events-page (the sibling listing page,
     same layout) already reduces both ends on mobile via tokens —
     matched to that same pattern here. */
  .journal {
    padding: var(--space-9) var(--gutter) var(--space-11);
  }

  .journal__header {
    margin-bottom: 28px;
  }

  .journal-entry {
    grid-template-columns: 116px minmax(0, 1fr);
    column-gap: 16px;
    row-gap: 8px;
    padding: 16px;
  }

  /* Mobile only — desktop keeps --text-sm. */
  .journal-entry__excerpt {
    font-size: 14px;
  }

  .journal-entry__title {
    font-size: 17px;
    letter-spacing: -0.7px;
  }

  .journal-list--teaser {
    flex-direction: column;
    gap: 0;
  }

  /* No page-max column to escape at this width — the bleed formulas above
     already resolve to 0/100% here, but the row still carries its own
     gutter padding, which would double up on top of .journal__inner's.
     Reset explicitly instead of relying on the arithmetic alone. */
  .journal-list--teaser .journal-entry {
    grid-template-columns: 1fr;
    gap: 24px;
    padding: 32px 0;
    margin-left: 0;
    margin-right: 0;
    width: 100%;
  }

  .journal-list--teaser .journal-entry:first-child {
    padding-top: 0;
    border-top: none;
  }

  .journal-list--teaser .journal-entry__image {
    grid-column: 1;
    grid-row: 1;
  }

  .journal-list--teaser .journal-entry__body {
    grid-column: 1;
    grid-row: 2;
  }
}

@media (max-width: 600px) {
  .hero__title {
    font-size: var(--text-2xl);
    letter-spacing: -1.8px;
  }

  .btn {
    height: 64px;
    padding: 0 30px;
    font-size: var(--text-sm);
    letter-spacing: -1.1px;
  }

  /* The hero CTA is a special-cased design element (claw flourish sized
     and positioned around it) — it shouldn't shrink along with generic
     buttons on small screens, or the claw math above stops lining up.
     Padding must stay identical to the base .btn--hero declaration
     (0 72px 0 40px) for exactly that reason — the arrow's absolute
     `right` offset and the claw's grip are both tuned against that
     right-padding value. An earlier version of this override also
     shrank the padding to "0 26px 0 28px", which narrowed the button
     enough that the arrow ended up sitting on top of the last letters
     of the label, and the claw's pincer gripped past the button's new
     (shorter) actual edge instead of at it. .hero__cta-wrap's own
     scale(0.82) below already handles the mobile size reduction for
     the whole button+claw+arrow group as one proportional unit — this
     block only needs to opt back out of the generic .btn shrink above,
     not introduce a different width relationship. */
  .btn--hero {
    height: 88px;
    padding: 0 72px 0 40px;
    font-size: 19px;
    letter-spacing: -0.95px;
  }

  .journal-entry__title,
  .faq-item__toggle {
    font-size: var(--text-md);
    letter-spacing: -0.8px;
  }
}

/* =========================================================
   Article pages
   ========================================================= */

.hero--article {
  min-height: 62vh;
}

/* The hero photo, body copy, byline and tags all arrive blank (the
   article is fetched from Sanity after the page paints) and used to
   just pop in the instant the fetch resolved. Fade + lift them in
   instead, once js/journal-article-sanity.js flags the page ready —
   staggered slightly so the photo leads, the body follows, byline/tags
   trail in last. (The title has its own line-mask .text-reveal already
   and isn't touched here.)
   IDs, not the .article__body/__meta/__tags classes — legal-notice.html
   and privacy-policy.html reuse those same classes for their own plain
   static content, which never gets Sanity's is-article-ready flag, so
   the class-scoped version left both pages permanently at opacity:0. */
#article-hero-image,
#article-body,
#article-meta,
#article-tags {
  opacity: 0;
  transform: translateY(14px);
  transition:
    opacity 0.6s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
body.is-article-ready #article-hero-image {
  transition-delay: 0s;
}
body.is-article-ready #article-body {
  transition-delay: 0.12s;
}
body.is-article-ready #article-meta {
  transition-delay: 0.28s;
}
body.is-article-ready #article-tags {
  transition-delay: 0.34s;
}
body.is-article-ready #article-hero-image,
body.is-article-ready #article-body,
body.is-article-ready #article-meta,
body.is-article-ready #article-tags {
  opacity: 1;
  transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
  #article-hero-image,
  #article-body,
  #article-meta,
  #article-tags {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

.article-title {
  font-family: var(--font-display);
  font-weight: 300;
  color: var(--color-blush);
  font-size: var(--text-3xl);
  line-height: var(--leading-snug);
  letter-spacing: -2.2px;
  text-transform: uppercase;
  max-width: 820px;
  text-align: center;
}

.article {
  max-width: 720px;
  margin: 0 auto;
  padding: var(--space-12) var(--gutter) var(--space-14);
}

.article__back {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: -0.9px;
  color: var(--color-green);
  text-transform: uppercase;
  margin-bottom: 60px;
  transition: opacity 0.2s ease;
}

.article__back:hover {
  opacity: 0.6;
}

.article__back img {
  width: 16px;
  height: 14px;
  transform: rotate(180deg);
}

/* Byline — hidden via [hidden] until js/journal-article-sanity.js fills it
   in (and only then, since an article with no author set shouldn't show
   an empty "By —"). */
.article__meta {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: -0.3px;
  color: var(--color-green);
  opacity: 0.62;
  margin: -32px 0 48px;
}

.article__body p {
  font-family: var(--font-mono);
  font-weight: 300;
  /* Same size as the footer's copyright/address row (--text-sm, plain
     sentence case — just the size, not that row's own casing), per
     request. Was --text-base, which only matched on mobile (see the
     override below); this brings desktop in line with it too. */
  font-size: var(--text-sm);
  line-height: var(--leading-relaxed);
  letter-spacing: -0.4px;
  color: var(--color-ink);
  margin: 0 0 28px;
}

.article__body p:last-child {
  margin-bottom: 0;
}

.article__body h2 {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-lg);
  letter-spacing: -1px;
  text-transform: uppercase;
  color: var(--color-green);
  margin: 48px 0 14px;
}

.article__body h2:first-child {
  margin-top: 0;
}

/* Legal Notice / Privacy Policy: each section sits on its own cream
   polaroid card, one under the next, each tilted a touch off-square so
   the stack reads as a set of loose cards rather than a single sheet.
   Sits above the page's grain texture (body::after, now covering the
   whole site including header/footer) so the cards stay clean. */
.legal-card {
  /* Plain list, no overlap — Privacy Policy's default. Legal Notice
     (body.legal-page--notice below) overrides back to the sticky,
     piling-stack version; was removed sitewide on request, then asked
     back for Legal Notice specifically. */
  position: relative;
  /* Above body::after's z-index:55 (the whole-page grain), so these
     cards' own cream surface stays clean. */
  z-index: 56;
  background: var(--color-cream);
  border-radius: 3px;
  padding: 32px clamp(20px, 4vw, 40px);
  margin-bottom: 24px;
  box-shadow: 0 18px 36px rgba(11, 15, 11, 0.16);
}
.legal-card:last-child {
  margin-bottom: 0;
}
/* Legal Notice only: each card pinned a touch lower than the last (--i,
   set by js/legal-cards.js, loaded only on legal-notice.html) — as you
   scroll, each card catches under the nav and holds there while the
   next one scrolls down and settles just below it, piling up into an
   overlapping stack instead of a plain list. Higher specificity than
   the plain-list base rule above (2 classes vs. 1), so it wins without
   needing !important. */
body.legal-page--notice .legal-card {
  position: sticky;
  top: calc(84px + var(--i, 0) * 18px);
  /* Each later card needs to paint over the ones already pinned above
     it. */
  z-index: calc(56 + var(--i, 0));
}
/* js/legal-cards.js sets the card's `transform` (its fixed per-card
   rotation, composed with a scroll-driven scale-down as the next card
   climbs over it) and each direct child's `opacity` (fading this card's
   own text out over that same climb) directly as inline styles every
   scroll frame, rather than through a CSS custom property + calc() +
   `transition` — a `transition` fighting a value that the scroll
   handler is already updating every animation frame never actually
   settles on the right number, which is why this looked like it wasn't
   doing anything at all. transform-origin still belongs here, and a
   fallback rotation in case JS hasn't run yet. */
.legal-card {
  transform: rotate(var(--rot, 0deg));
  transform-origin: top center;
}
.legal-card:nth-child(4n + 1) {
  --rot: -1.1deg;
}
.legal-card:nth-child(4n + 2) {
  --rot: 0.9deg;
}
.legal-card:nth-child(4n + 3) {
  --rot: -0.6deg;
}
.legal-card:nth-child(4n + 4) {
  --rot: 1.2deg;
}
.legal-card h2 {
  margin-top: 0;
}
.legal-card p:last-child,
.legal-card ul:last-child {
  margin-bottom: 0;
}
@media (prefers-reduced-motion: reduce) {
  .legal-card {
    transform: none;
  }
}

/* Legal Notice / Privacy Policy, and now Events / Journal too — green
   page ground instead of the inner-pages' shared blush, on request.
   Scoped to body.legal-page (the first two pages) and body.page-theme-
   green (events.html/journal.html + PT), so menu.html and article pages
   are untouched. Nav and footer both already carry their own explicit
   background (green and blush-panel respectively) so neither is
   affected — only the hero title band and the space around the page's
   own cream cards, which is what actually reads as "the page". */
body.legal-page,
body.page-theme-green {
  background: var(--color-green);
}

body.legal-page .hero--menu,
body.page-theme-green .hero--menu {
  background: var(--color-green);
}

/* .article's shared 100px top padding (var(--space-12)) is tuned for
   the real Journal article template, which has a full hero photo right
   above it — here, under a plain text title band, it read as the same
   oversized gap the journal/events listing pages had before the first
   card. Journal/events listing pages (page-theme-green) already got
   their own version of this fix on .journal / .events-page directly. */
body.legal-page .article {
  padding-top: clamp(24px, 4vh, 48px);
}

body.legal-page .hero--menu .eyebrow,
body.legal-page .hero--menu .menu-page__heading,
body.page-theme-green .hero--menu .eyebrow,
body.page-theme-green .hero--menu .menu-page__heading {
  color: var(--color-blush);
}

/* Header goes green too, to match — its logo already swapped from
   logo-green.svg to logo-pink.svg in the HTML for contrast, and the
   hamburger icon (green-on-blush by default) flips to blush-on-green. */
body.legal-page .nav--on-light,
body.page-theme-green .nav--on-light {
  background: var(--color-green);
}

body.legal-page .nav--on-light .nav-menu-btn,
body.legal-page .nav--on-light .nav-menu-btn__icon,
body.page-theme-green .nav--on-light .nav-menu-btn,
body.page-theme-green .nav--on-light .nav-menu-btn__icon {
  color: var(--color-blush);
}

/* Was desktop-only (@media min-width: 901px) — .nav__meta (the EN/PT
   language switch) only shows at all under 900px via its own mobile
   rule, so that min-width guard meant this color fix never applied on
   the one width where .nav__meta is actually visible, leaving EN/PT in
   its default dark-on-light color against this green header. */
body.legal-page .nav--on-light .nav__links,
body.legal-page .nav--on-light .nav__meta,
body.page-theme-green .nav--on-light .nav__links,
body.page-theme-green .nav--on-light .nav__meta {
  color: var(--color-blush);
}

/* Topic tags — set per-article in the admin ("Keywords / topic tags"),
   shown as one quiet mono line rather than pill/chip buttons, matching
   the same restrained typographic voice as .site-footer__legal instead
   of introducing a new "card" treatment. [hidden] until
   js/journal-article-sanity.js fills it in, same reasoning as
   .article__meta above. */
.article__tags {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-2xs);
  letter-spacing: 0.3px;
  text-transform: uppercase;
  color: var(--color-green);
  opacity: 0.55;
  margin-top: 48px;
  padding-top: 24px;
  border-top: 1px dashed rgba(11, 15, 11, 0.15);
}

.article__cta {
  margin-top: 64px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  /* Left-aligned within the article's own text column, not centred —
     on request. */
  justify-content: flex-start;
  /* Wider gap than a plain button pair needs, on purpose — the claw's
     own artwork bleeds well past its button's actual box on the right
     (see .hero__cta-claw's width:144.62%), so the two buttons need more
     room between their layout edges than they'd look like they need. */
  gap: 64px;
}

@media (min-width: 901px) {
  /* Desktop specifically read as way more than the claw's own bleed
     needs — tightened further (was 26px) so the real visible gap
     between the claw's tip and "See the menu" reads as tight, not
     floaty. */
  .article__cta {
    gap: 12px;
  }
}

/* Book Now here is the full claw button — same markup/classes as the
   hero's, so it inherits the identical claw geometry + layer stack.
   (Was reused bare, with no wrap and no claw art: that just left the
   hero-only padding/height stranded with nothing to justify it, so it
   read as oversized and off-centre next to "See the menu". Fixed by
   giving it the claw, not by stripping the geometry.)
   The claw art bleeds well past the button's own right edge (see
   .hero__cta-claw's width:144.62%) — at the hero's own full size that
   was still reaching "See the menu" right next to it even with the
   wider gap above, so the whole button+claw group is scaled down here
   at every width, not just mobile, the same trick the hero's own
   mobile size already uses. */
.article__cta .hero__cta-wrap {
  margin: 0;
  /* transform-origin: left, not the scale default of center — scaling
     from the middle shrinks the button in from the left edge too,
     leaving a gap between it and the article text column's own left
     line above it (looked "not aligned" / asked to move left). Scaling
     from the left keeps that edge planted where flex-start put it. */
  transform-origin: left center;
  transform: scale(0.82);
}

/* "See the menu" is a plain .btn--outline-green sibling, not scaled down
   like the claw wrap above — left at its default 82px height it visibly
   towered over the shrunk Book Now button. Same scale (and the same
   left-edge origin), so the pair reads as one matched, aligned size. */
.article__cta > .btn--outline-green {
  transform-origin: left center;
  /* Bumped up a touch (was 0.82) — on request. */
  transform: scale(0.92);
}

@media (max-width: 900px) {
  /* Was flex-wrap:nowrap + a real padding/font-size shrink applied to
     .btn--hero directly, to force both buttons onto one line — that
     broke the claw button internally: .hero__cta-wrap .btn__arrow sits
     at a FIXED `right: 26px`, and .hero__cta-claw's own width is a
     percentage of .btn--hero's rendered width, both tuned against
     .btn--hero's base right-padding (72px). Shrinking that padding to
     18px directly (not via transform) left "Book Now" and the arrow
     overlapping — the exact bug the .btn--hero mobile override's own
     comment above already warns this class of fix causes. Back to
     scaling the whole claw unit (button+claw+arrow) proportionally via
     transform instead, which keeps its internals intact; "See the
     menu" (no arrow/claw dependency) can still safely shrink for real.
     Wrapping to two lines (rather than forcing one at the cost of a
     broken button) is the acceptable trade-off if the scaled claw
     unit's own un-shrunk layout width doesn't leave room beside it. */
  .article__cta {
    flex-wrap: wrap;
    gap: 12px;
  }

  /* zoom, not transform: transform only repaints smaller and leaves the
     wrap's full pre-shrink layout box (fit-content around just the
     button — claw/arrow are absolutely positioned, so they don't count
     toward it) taking up flex space. zoom actually resizes that layout
     box to match the visible button. But .hero__cta-claw itself is
     positioned at `right: -47.65%` of that box (deliberately, to bleed
     past the button's real edge — see its own comment) — with the box
     now correctly sized, that overhang is no longer absorbed by any
     leftover dead space, and reaches straight into "View Menu" without
     a real margin reserving room for it. */
  .article__cta .hero__cta-wrap {
    /* Cancel the base (desktop) transform:scale(0.82) — zoom replaces
       it here, not stacks with it. */
    transform: none;
    zoom: 0.7;
    margin-right: 56px;
  }

  .article__cta > .btn--outline-green {
    /* Matched to the claw button's own scaled-down height (88px base
       height x the 0.7 zoom above = ~62px) — was 52px, visibly
       shorter than "Book Now" next to it. */
    height: 62px;
    padding: 0 22px;
    font-size: var(--text-xs);
    letter-spacing: -0.8px;
  }
}

@media (max-width: 900px) {
  .hero--article {
    min-height: 46vh;
  }

  .article-title {
    font-size: var(--text-xl);
    letter-spacing: -1.4px;
  }

  .article {
    padding: 70px var(--gutter) 100px;
  }

  .article__body p {
    font-size: var(--text-sm);
  }
}

/* =========================================================
   Full menu page (menu.html)
   ========================================================= */

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* The whole menu hero is now a slim toolbar (search + the Menu /
   Cocktails / Bar / Wine / Coffee section switcher) that STAYS pinned
   to the top of the viewport the whole way down the page, so you can
   search or jump sections from any scroll position. The big "MENU" /
   "THE FULL MENU" titles are removed entirely (the nav already says
   which page you're on). Journal / Events share .hero--menu but not
   this sticky behaviour (scoped via #section-menu's ancestor below). */
.hero--menu {
  min-height: unset;
  background: var(--color-blush);
}

/* Only the full-menu page turns its hero into the pinned toolbar.
   --menu-nav-h is fed by js/menu-sticky.js (0 on desktop, the sticky
   mobile nav's real height on mobile). */
.hero--menu:has(~ .menu-page) {
  position: sticky;
  top: var(--menu-nav-h, 0px);
  z-index: 40;
}

/* Journal / Events share .hero--menu but have no search/tabs — their
   hero is just a centred page-title band ("EVENTS" / "JOURNAL"),
   styled like the site's other display headings. */
.hero--menu:not(:has(~ .menu-page)) {
  display: block;
  padding-top: clamp(40px, 6vh, 72px);
  padding-bottom: clamp(16px, 2.5vh, 28px);
}

.hero--menu:not(:has(~ .menu-page)) .menu-page__heading {
  display: block;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -4.8px;
  text-transform: uppercase;
  text-align: center;
  color: var(--color-green);
}

/* Just the title in that band — no eyebrow, no lede. */
.hero--menu:not(:has(~ .menu-page)) .events-page__subtitle {
  display: none;
}

.hero__content--menu {
  padding: 12px var(--gutter);
  align-items: center;
  text-align: center;
}

/* Tighter vertical rhythm in the sticky search/tabs toolbar — the base
   .hero__stack gap (30px) between every row read as too much air
   between the category tabs and the subcategory nav sticking right
   under it. */
.hero__content--menu .hero__stack {
  gap: 18px;
}

@media (min-width: 901px) {
  /* Both nav rows were left-aligned (flex default) even on a wide
     desktop viewport with room to spare — centred like the rest of the
     toolbar, on request. Mobile keeps flex-start since these are
     horizontally-scrollable strips there. */
  .menu-page__tabs,
  .menu-page__nav {
    justify-content: center;
  }
}

.hero__content--menu .hero__stack {
  align-items: center;
  width: 100%;
  gap: 10px;
}

/* Page-title headings removed on every screen, per request. */
.hero--menu .eyebrow,
.hero--menu .eyebrow--light,
.menu-page__heading {
  display: none;
}

.menu-page__search {
  position: relative;
  display: block;
  max-width: 460px;
  width: 100%;
  margin: 0 auto;
  border-radius: 100px;
}

.menu-page__search-icon {
  position: absolute;
  top: 50%;
  left: 24px;
  width: 17px;
  height: 17px;
  transform: translateY(-50%);
  color: rgba(46, 72, 43, 0.5);
  pointer-events: none;
}

.menu-page__search input {
  width: 100%;
  height: 60px;
  padding: 0 24px 0 52px;
  border: 1px solid rgba(46, 72, 43, 0.3);
  border-radius: 100px;
  background: transparent;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-base);
  letter-spacing: -1.2px;
  color: var(--color-green);
}

.menu-page__search input::placeholder {
  color: rgba(46, 72, 43, 0.5);
}

.menu-page__search input:focus {
  outline: none;
  border-color: var(--color-accent);
}

.menu-page__tabs {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  width: 100%;
  padding-bottom: 4px;
  scrollbar-width: none;
}

.menu-page__tabs::-webkit-scrollbar {
  display: none;
}

.menu-page__tab {
  white-space: nowrap;
  background: none;
  border: none;
  padding: 0 0 6px;
  border-bottom: 1px solid transparent;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -1px;
  text-transform: uppercase;
  /* green on the blush menu hero (was blush, invisible on the recoloured ground) */
  color: rgba(46, 72, 43, 0.55);
  cursor: pointer;
  transition:
    color 0.25s ease,
    border-color 0.25s ease;
}

.menu-page__tab:hover {
  color: var(--color-green);
}

.menu-page__tab.is-active {
  color: var(--color-green);
  border-bottom-color: var(--color-accent);
}

.menu-page__panel.is-hidden {
  display: none;
}

.menu-page__nav {
  display: flex;
  gap: 28px;
  overflow-x: auto;
  width: 100%;
  margin-bottom: 40px;
  scrollbar-width: none;
  /* Sticks right under the pinned search/section toolbar (.hero--menu),
     so the category jump-links stay reachable at any scroll depth. Full
     viewport width with a blush band + hairline so the menu content
     scrolls cleanly beneath it. */
  position: sticky;
  /* flush under the search/tabs toolbar — js/menu-sticky.js measures its
     real rendered bottom edge so there's no overlap and no gap */
  top: var(--menu-toolbar-bottom, 118px);
  z-index: 30;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  padding: 10px var(--gutter) 11px;
  background: var(--color-blush);
  border-top: 1px dashed rgba(46, 72, 43, 0.18);
  border-bottom: 1px dashed rgba(46, 72, 43, 0.18);
}

.menu-page__nav::-webkit-scrollbar {
  display: none;
}

.menu-page__nav.is-hidden {
  display: none;
}

.menu-page__pill {
  white-space: nowrap;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -1px;
  text-transform: uppercase;
  color: rgba(11, 15, 11, 0.55);
  transition: color 0.25s ease;
}

.menu-page__pill:hover {
  color: var(--color-accent);
}

.menu-page {
  position: relative;
  max-width: var(--page-max);
  margin: 0 auto;
  /* No top padding — .menu-page__nav (the first thing in every panel) is
     sticky and needs to sit flush against the hero toolbar right above
     it at rest; a top gap here only shows before you've scrolled far
     enough for the sticky nav to engage. Same treatment the mobile
     override already used, just missing here too. Section spacing below
     the nav comes from .menu-page__nav's own margin-bottom instead. */
  padding: 0 var(--gutter) 140px;
}

/* One coral illustration, pinned to the viewport — the menu items
   scroll past it, it doesn't move (on request, every screen size). A
   fixed pseudo-element on .menu-page, single (no repeat), sized to
   cover the viewport, kept faint so it reads as the sea behind the
   dishes rather than a wallpaper. */
.menu-page::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  background-image: url("../assets/images/coral-pattern.webp");
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  opacity: 0.07;
  pointer-events: none;
}

.menu-page__section {
  padding-top: 64px;
  margin-top: 64px;
  border-top: 1px dashed rgba(0, 0, 0, 0.35);
}

.menu-page__section:first-of-type {
  margin-top: 40px;
  padding-top: 0;
  border-top: none;
}

.menu-page__section.is-hidden {
  display: none;
}

.menu-page__section-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 36px;
}

.menu-page__section-heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-2xl);
  letter-spacing: -2px;
  text-transform: uppercase;
  color: var(--color-green);
  margin: 0;
}

.menu-page__section-note {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: -0.6px;
  opacity: 0.6;
  margin: 0;
}

.menu-page__grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 36px 48px;
}

.menu-page__item {
  display: flex;
  gap: 20px;
}

.menu-page__item.is-hidden {
  display: none;
}

.menu-page__item-photo {
  flex: none;
  width: 96px;
  height: 96px;
  border-radius: 12px;
  overflow: hidden;
  /* Cream mat behind the photo (matches the site's beige, not a bare
     grey box) — visible while the image loads or if it's missing. */
  background: var(--color-cream);
}

.menu-page__item-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.menu-page__item-body {
  flex: 1;
  min-width: 0;
}

.menu-page__item-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
}

.menu-page__item-name {
  font-family: var(--font-mono);
  font-weight: 400;
  font-size: var(--text-base);
  letter-spacing: -0.6px;
  color: var(--color-ink);
  margin: 0;
}

.menu-page__item-meta {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}

.menu-page__item-price {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-base);
  letter-spacing: -0.6px;
  color: var(--color-accent);
  white-space: nowrap;
}

/* Shared like counter (js/menu-likes.js) — a plain outline heart that
   fills solid once liked, same accent color the price already uses. */
.menu-page__like {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px;
  margin: -4px;
  border: 0;
  background: none;
  color: var(--color-accent);
  cursor: pointer;
  transition: transform 0.15s ease;
}

.menu-page__like:hover {
  transform: scale(1.08);
}

.menu-page__like-icon {
  width: 16px;
  height: 16px;
}

.menu-page__like-icon path {
  transition:
    fill 0.15s ease,
    stroke 0.15s ease;
}

.menu-page__like.is-liked .menu-page__like-icon path {
  fill: var(--color-accent);
}

.menu-page__like-count {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: -0.3px;
  min-width: 0.8em;
}

.menu-page__item-desc {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  line-height: var(--leading-normal);
  letter-spacing: -0.3px;
  color: var(--color-ink);
  opacity: 0.7;
  margin: 6px 0 0;
}

/* ---- OFFER OF THE MONTH — the monthly spotlight block on the Cocktails
   tab. Picked out in coral (label + name + flavour notes, not just the
   price, which is coral everywhere) so it clearly reads apart from the
   regular menu below it. */
.menu-page__item-label {
  margin: 0 0 4px;
  font-family: var(--font-mono);
  font-weight: 400;
  font-size: var(--text-2xs);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-accent);
}

.menu-page__item--offer .menu-page__item-name {
  color: var(--color-accent);
}

.menu-page__item--offer .menu-page__item-desc {
  opacity: 0.85;
}

.menu-page__item-notes {
  margin: 4px 0 0;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: -0.3px;
  font-style: italic;
  color: var(--color-accent);
}

.menu-page__section--offer {
  padding-bottom: 32px;
}

/* The offer block's own border-bottom was removed (on request) — the
   very next section's border-top (below) already draws a divider
   right after it, so the two dashed lines were redundant, ~86px apart
   with nothing between them. That section's usual 64px/64px margin+
   padding assumed a divider-free gap to its own predecessor, so it's
   tightened here specifically when it follows the offer block. */
.menu-page__section--offer + .menu-page__section {
  margin-top: 0;
  padding-top: 40px;
}

/* The block's own heading goes coral too, so the whole spotlight —
   heading, labels, names, notes — reads as one distinct coral moment
   above the regular menu. */
.menu-page__section--offer .menu-page__section-heading {
  color: var(--color-accent);
}

.menu-page__item-allergens {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-2xs);
  letter-spacing: 0;
  text-transform: uppercase;
  color: var(--color-accent);
  opacity: 0.85;
  margin: 6px 0 0;
}

.menu-page__item-diet {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-2xs);
  letter-spacing: 0;
  text-transform: uppercase;
  color: #2e7d32;
  opacity: 0.85;
  margin: 6px 0 0;
}

.menu-page__empty {
  display: none;
  padding: 80px 0;
  text-align: center;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-base);
  opacity: 0.6;
}

.menu-page__empty.is-visible {
  display: block;
}

/* ---------- Item detail card (photo items only) ---------- */

.menu-page__item--clickable {
  cursor: pointer;
  border-radius: 12px;
  outline: none;
  transition: color 0.25s ease;
}

.menu-page__item--clickable:hover .menu-page__item-name,
.menu-page__item--clickable:focus-visible .menu-page__item-name {
  color: var(--color-accent);
}

.menu-page__item--clickable .menu-page__item-photo {
  transition: transform 0.35s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.menu-page__item--clickable:hover .menu-page__item-photo,
.menu-page__item--clickable:focus-visible .menu-page__item-photo {
  transform: scale(1.04);
}

.menu-page__card {
  width: calc(100% - 48px);
  max-width: 480px;
  padding: 0;
  border: none;
  border-radius: 20px;
  background: var(--color-cream);
  color: var(--color-ink);
  overflow: hidden;
  opacity: 0;
  transform: translateY(16px) scale(0.98);
  transition:
    opacity 0.3s cubic-bezier(0.16, 0.84, 0.44, 1),
    transform 0.3s cubic-bezier(0.16, 0.84, 0.44, 1);
}

.menu-page__card::backdrop {
  background: rgba(11, 15, 11, 0.55);
  opacity: 0;
  transition: opacity 0.3s ease;
}

.menu-page__card.is-open {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.menu-page__card.is-open::backdrop {
  opacity: 1;
}

.menu-page__card-close {
  position: absolute;
  top: 16px;
  right: 16px;
  z-index: 1;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 100px;
  background: rgba(242, 236, 227, 0.9);
  color: var(--color-ink);
  font-size: var(--text-md);
  line-height: var(--leading-tight);
  cursor: pointer;
  transition: background-color 0.25s ease;
}

.menu-page__card-close:hover {
  background: var(--color-cream);
}

.menu-page__card-photo {
  width: 100%;
  aspect-ratio: 4 / 3;
  background: var(--color-cream);
}

.menu-page__card-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.menu-page__card-body {
  padding: 28px 28px 32px;
}

.menu-page__card-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
}

.menu-page__card-name {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-lg);
  letter-spacing: -1.2px;
  text-transform: uppercase;
  color: var(--color-green);
  margin: 0;
}

.menu-page__card-price {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-md);
  letter-spacing: -0.6px;
  color: var(--color-accent);
  white-space: nowrap;
}

.menu-page__card-desc {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-loose);
  letter-spacing: -0.3px;
  opacity: 0.75;
  margin: 14px 0 0;
}

.menu-page__card-desc:empty {
  display: none;
}

.menu-page__card-allergens {
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-2xs);
  letter-spacing: 0;
  text-transform: uppercase;
  opacity: 0.5;
  margin: 10px 0 0;
}

.menu-page__card-allergens:empty {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .menu-page__card,
  .menu-page__card::backdrop {
    transition: none !important;
  }
}

@media (max-width: 900px) {
  .hero__content--menu {
    /* Slim toolbar, tight against the category nav below it. */
    padding: 10px var(--gutter) 8px;
  }

  .menu-page {
    /* no top padding — the category nav must butt straight up
       against the sticky search/tabs toolbar, one continuous unit */
    padding: 0 var(--gutter) 100px;
  }

  .menu-page__heading {
    font-size: var(--text-3xl);
    letter-spacing: -2.2px;
  }

  .menu-page__grid {
    grid-template-columns: 1fr;
  }

  .menu-page__section-heading {
    font-size: var(--text-xl);
    letter-spacing: -1.4px;
  }
}

@media (max-width: 600px) {
  .menu-page__item-photo {
    width: 72px;
    height: 72px;
  }

  .menu-page__heading {
    font-size: 42px;
    letter-spacing: -1.6px;
  }
}

/* =========================================================
   Site footer
   ========================================================= */

/* Redesigned per Figma (node 853:252 desktop / 854:398 mobile): blush
   background instead of the old dark-green panel, three dashed-rule
   bands (nav+hours+social / the illustrated wordmark / legal), coral
   center lockup flanked by the same two line-art characters used
   elsewhere on the site. Sizes between the two Figma breakpoints
   (tablet, foldables, etc.) are fluid/clamp()-based rather than a third
   fixed design, since only mobile and desktop frames were specified. */
.site-footer {
  position: relative;
  background: var(--color-blush-panel);
  color: var(--color-green);
  padding: 0 var(--gutter);
  /* Same fine dashed hairline as the FAQ list dividers (1px, 50%-alpha
     green) — was a bolder 2px solid-green-ish dash that read heavier
     than every other dashed rule on the site. */
  border-top: 1px dashed rgba(46, 72, 43, 0.5);
  font-family: var(--font-mono);
  font-weight: 300;
}

.site-footer__row {
  width: 100%;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: clamp(16px, 4vw, 80px);
  padding: 28px 0;
}

/* Full-bleed dashed rule, not one inset to .site-footer's own gutter
   padding — negative margin cancels that padding so the border itself
   reaches both true edges, then equal padding added back so the row's
   own content (nav/hours/social) still lines up at the usual gutter
   instead of sliding out to the edge with it. */
/* Grid, not the flex:1-on-the-middle-item trick .site-footer__row uses —
   that trick only lands hours in the row's true center when nav and
   social happen to be equal width (they aren't: nav is three short
   words, social carries icons and a phone number), so hours was
   centering in whatever space was left over instead, with more room on
   one side than the other. 1fr/auto/1fr keeps it at the actual midpoint
   regardless. Also carries its own explicit full-bleed width — the
   inherited width:100% from .site-footer__row is 100% of the *padded*
   parent content box, which the margin-left/-right below can shift but
   not widen, so the border landed short of the right edge; this adds
   back the two gutters the negative margins pulled in from. */
.site-footer__row--top {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: start;
  /* Same fine dashed hairline as the FAQ list dividers (1px, 50%-alpha
     green) — same full-bleed-under-padded-content trick as the
     width/margin/padding below. */
  border-bottom: 1px dashed rgba(46, 72, 43, 0.5);
  width: calc(100% + var(--gutter) * 2);
  margin-left: calc(-1 * var(--gutter));
  margin-right: calc(-1 * var(--gutter));
  padding-left: var(--gutter);
  padding-right: var(--gutter);
}

.site-footer__nav {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
  justify-self: start;
}

.site-footer__nav a,
.site-footer__social-link {
  transition: opacity 0.25s ease;
}

.site-footer__nav a:hover,
.site-footer__social-link:hover {
  opacity: 0.65;
}

.site-footer__hours,
.site-footer__nav,
.site-footer__social {
  font-size: var(--text-sm);
  letter-spacing: -0.6px;
  text-transform: uppercase;
}

.site-footer__hours {
  margin: 0;
  justify-self: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  text-align: center;
  line-height: var(--leading-loose);
  opacity: 0.9;
}

.site-footer__social {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 10px;
  justify-self: end;
  opacity: 0.9;
}

.site-footer__social-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.site-footer__social-icon {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
}

/* Used to be the pin/extra-scroll-room pair for a scroll-driven
   crab/lobster converge (js/footer-brand-scroll.js) — that motion moved
   to the About Us section instead (see .statement__track/-pin on the
   homepage), so this footer stage is a plain static block now, frozen
   at what used to be its resting/apart frame. Kept as a wrapper (rather
   than flattened away) only so the nav/hours/social row and the brand
   stage below it don't need re-nesting. */
.site-footer__brand-pin {
  position: relative;
}

.site-footer__brand-sticky {
  display: flex;
  flex-direction: column;
  /* svh (not just vh) — same fix as .hero's own dual declaration: 100vh
     is measured against the browser's tallest possible viewport (toolbar
     collapsed), so on a shorter real viewport (toolbar showing) the box
     is taller than what's visibly filled, leaving a strip of the body's
     own cream background exposed past the footer's actual bottom edge. */
  height: 100vh;
  height: 100svh;
}

/* Deliberately mirrors .intro's own crab/lobster staging — same
   full-viewport stage (minus whatever height the nav/hours/social row
   above it takes up), same widths (40.9vw / 52vw), same apart-frame
   coordinates, just static now rather than scroll-interpolated: this
   was always the resting look before a visitor ever scrolled into the
   (now-removed) converge, so freezing it here changes nothing visually
   at rest. Reusing the exact assets/icons/intro-crab.svg +
   intro-lobster.svg files (not a separate footer-specific crop) keeps
   this visually identical to the About Us block's own version of the
   same motif (homepage only). */
.site-footer__brand {
  position: relative;
  overflow: hidden;
  width: 100vw;
  flex: 1 1 auto;
  min-height: 0;
  margin-left: calc(-1 * var(--gutter));
  margin-right: calc(-1 * var(--gutter));
  background: var(--color-blush-panel);
}

/* The tagline now, not the wordmark — swapped with .intro's own center
   piece (see .intro__logo above) so each "moment" shows the other's
   original content. Same typographic treatment .intro__text used to
   carry (including its mobile/1300px overrides below), just relocated
   here — always visible (no opacity toggle the way .intro__logo has;
   the footer never needed one), covered by the converging illustrations
   via z-index as they close in instead of fading itself. */
/* Tagline + the Book Now button below it, centred on the pinned stage as
   one block (the button was added under the heading on request). */
.site-footer__brand-center {
  position: absolute;
  top: 44%;
  left: 50%;
  z-index: 1;
  transform: translate(-50%, -50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  width: max-content;
  max-width: 92vw;
}

.site-footer__brand-text {
  margin: 0;
  padding: 0 16px;
  font-family: var(--font-display);
  font-weight: 300;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  font-size: var(--text-4xl);
  line-height: var(--leading-tight);
  letter-spacing: -2.4px;
  text-align: center;
  text-transform: uppercase;
  color: var(--color-green);
}

.site-footer__brand-cta {
  margin-top: 44px;
}

.site-footer__brand-cta .hero__cta-wrap {
  margin: 0;
}

/* A grid, not the flex row every other .site-footer__row uses — the
   copyright and legal-links text are different lengths, and flex's
   flex:1-on-the-middle-item trick only lands the address in the true
   center of the row when its two neighbors happen to be equal width.
   1fr/auto/1fr keeps the address pinned to the row's actual midpoint
   regardless of how long the copyright or legal-links text is. */
.site-footer__row--bottom {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  /* Same size as .site-footer__nav (MENU/EVENTS/JOURNAL) above it, on
     request — just without that row's uppercase transform, so the
     copyright/address/legal-links text keeps its normal casing. */
  font-size: var(--text-sm);
  letter-spacing: -0.6px;
  opacity: 0.9;
}

/* Anchored to the bottom of the pinned .site-footer__brand stage (see
   the HTML comment where this row is nested, inside the brand row
   rather than after it) — visible the whole time the crab/lobster
   converge plays, both at rest and mid-converge, on desktop and
   mobile, instead of only appearing once the visitor scrolls past the
   pin. z-index above the illustrations (2) and logo/text (1) so it's
   never covered as they converge over the middle of the stage. Needs
   its own horizontal padding here since .site-footer__brand is a
   full-bleed box (width:100vw) that escapes .site-footer's own gutter
   padding — this row would otherwise sit flush against the true
   viewport edges instead of lining up with the row above it. */
.site-footer__brand .site-footer__row--bottom {
  position: absolute;
  left: 0;
  right: 0;
  /* 15px lower than it used to sit, on request — the extra 15px goes on
     padding-top (pushes the text down inside the row) and comes back off
     `bottom` (drops the row so its top edge, i.e. the dashed rule, stays
     put) so only the text moves. */
  bottom: calc(clamp(12px, 1.5vw, 24px) - 15px);
  z-index: 3;
  padding-left: var(--gutter);
  padding-right: var(--gutter);
  /* Fine dashed hairline (1px, 50%-alpha green — same as the FAQ list
     dividers) above the copyright/address/legal text only, none below
     it — full viewport width via this row's own left:0/right:0 inside
     .site-footer__brand's 100vw box, no extra bleed math needed. */
  padding-top: 27px;
  border-top: 1px dashed rgba(46, 72, 43, 0.5);
}

.site-footer__copyright {
  justify-self: start;
  white-space: nowrap;
}

.site-footer__address {
  margin: 0;
  justify-self: center;
  text-align: center;
}

.site-footer__legal-links {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  justify-self: end;
  gap: 6px 18px;
}

.site-footer__legal-links a {
  transition: opacity 0.25s ease;
}

.site-footer__legal-links a:hover {
  opacity: 0.6;
}

/* Its own full-bleed block below the footer now, not a box inside it —
   fixed height (not aspect-ratio) so a very wide viewport doesn't turn
   that ratio into an oversized banner. */
.site-footer__map {
  width: 100%;
  height: 450px;
  overflow: hidden;
}

.site-footer__map iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

@media (max-width: 900px) {
  .site-footer {
    padding: 0 var(--gutter);
  }

  .site-footer__row {
    padding: 20px 0;
  }

  /* Shorter fixed-height stage on mobile — a full 100vh left big empty
     bands above and below the crab/lobster. bg matches the page so
     there's no faint colour seam below it. */
  .site-footer,
  .site-footer__brand,
  .site-footer__brand-panel,
  .site-footer__brand-pin,
  .site-footer__brand-sticky {
    background: var(--color-blush);
  }

  /* nothing should draw a hairline where the brand box's clip ends */
  .site-footer__brand {
    overflow: visible;
  }

  .site-footer__brand-pin {
    height: auto !important;
  }

  .site-footer__brand-sticky {
    position: static;
    height: auto;
    min-height: 0;
    max-height: none;
  }

  /* No nav column on mobile — Menu/Events/Journal are already reachable
     any time via the hamburger pinned to the top of the viewport (see
     .nav's position:sticky rule above), so repeating them here would
     just be a second, redundant way to reach the same three links. */
  .site-footer__nav {
    display: none;
  }

  /* Figma's mobile frame pairs each contact line with the hours line
     across from it (phone/Mon–Fri, pinch.lisbon/Sat–Sun,
     Facebook/Fri&Sat) as a 2-column, 3-row grid rather than two
     side-by-side stacks — display:contents lifts each line out of its
     wrapper so the six become direct grid items placed explicitly (DOM
     order is Facebook/Instagram/phone; the grid reorders that to the
     phone-first row order Figma shows). */
  .site-footer__row--top {
    display: grid;
    grid-template-columns: auto auto;
    justify-content: space-between;
    column-gap: 8px;
    row-gap: 12px;
    width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    padding-left: 14px;
    padding-right: 14px;
    letter-spacing: -0.5px;
  }

  /* display:contents removes the wrapper's box but its font-size still
     cascades to the promoted spans/links — so the small type has to be
     set HERE (the row's own font-size never reaches them). Scaled off vw
     with a low ceiling so every contact line and every hours line stays
     on ONE line at any phone width without running off the edge. */
  .site-footer__hours,
  .site-footer__social {
    display: contents;
    font-size: clamp(9px, 2.7vw, 11.5px);
  }

  /* Never wrap a contact line or an hours line. */
  .site-footer__row--top .site-footer__social-link,
  .site-footer__row--top .site-footer__hours span {
    white-space: nowrap;
  }

  .site-footer__hours span {
    /* Hours on the LEFT now (was right). */
    text-align: left;
    grid-column: 1;
  }

  .site-footer__hours span:nth-child(1) {
    grid-row: 1;
  }

  .site-footer__hours span:nth-child(2) {
    grid-row: 2;
  }

  .site-footer__hours span:nth-child(3) {
    grid-row: 3;
  }

  .site-footer__social-link {
    /* Phone / Instagram / Facebook on the RIGHT (icon stays left of its
       label via the link's own inline-flex order). */
    grid-column: 2;
    justify-self: end;
  }

  .site-footer__social-link:nth-child(1) {
    grid-row: 3;
  }

  .site-footer__social-link:nth-child(2) {
    grid-row: 2;
  }

  .site-footer__social-link:nth-child(3) {
    grid-row: 1;
  }

  .site-footer__brand {
    height: 600px;
    flex: none;
  }

  /* Ported from .intro__text's own mobile override — smaller and fixed
     rather than vw-based: at this font-size "can change" only stays on
     one line below a specific pixel width, and that threshold doesn't
     scale with viewport the way vw would. An explicit width (not just
     max-width) matters here because position:absolute with no "right"
     set shrink-wraps to content instead of filling up to max-width,
     which was rendering narrower than intended and re-wrapping "can"
     alone. */
  .site-footer__brand-center {
    top: 42%;
    width: 245px;
  }

  .site-footer__brand-text {
    font-size: 32px;
    letter-spacing: -1.7px;
    width: 245px;
    max-width: 245px;
    padding: 0;
  }

  .site-footer__brand-cta {
    margin-top: 26px;
  }

  /* .site-footer__row--bottom is a 1fr/auto/1fr grid on desktop (see the
     base rule) — flex-direction here was a leftover from before that
     rule became a grid and did nothing once it did, which is exactly
     what left copyright/address/legal-links jumbled together instead of
     stacked. A single grid column, with each child's justify-self reset
     to center (their desktop start/center/end values would otherwise
     just hug that one column's own edges), reproduces the same "stack
     and center everything" the old flex version intended. */
  .site-footer__row--bottom {
    grid-template-columns: 1fr;
    justify-items: center;
    text-align: center;
    gap: 8px;
    font-size: clamp(9px, 2.7vw, 11.5px);
    letter-spacing: -0.3px;
  }

  .site-footer__copyright,
  .site-footer__address,
  .site-footer__legal-links {
    justify-self: center;
  }

  .site-footer__legal-links {
    justify-content: center;
  }

  .closing-cta {
    flex-direction: column;
  }

  /* The 50% flex-basis is a desktop side-by-side measurement — in this
     column stack it's read against the row's own (auto) height instead,
     which left a phantom gap between the map and the footer below it. */
  .closing-cta__content,
  .closing-cta__map {
    flex: none;
  }

  .closing-cta__content {
    padding: 80px var(--gutter) 48px;
  }

  .closing-cta__map {
    min-height: 300px;
  }
}

/* =========================================================
   Events
   ========================================================= */

/* ---------- Homepage teaser (.events-teaser) ----------
   Same pinned scroll-fan mechanism as the Journal section above — see
   .journal-track/.journal-stack/.journal-fan and js/journal-fan.js — with
   its own events-fan.js driving the (3, not 4, card) numbers. The section
   itself only owns the background now; .events-track owns the centering
   and padding, same split as #journal vs .journal-track. */
.events-teaser {
  position: relative;
  background: var(--color-blush);
}

.events-teaser__inner {
  max-width: var(--page-max);
  margin: 0 auto;
}

.events-stack .events-teaser__header {
  margin-bottom: 0;
  align-self: stretch;
}

.events-teaser__header {
  text-align: center;
  margin-bottom: 64px;
}

.events-teaser__heading {
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-heading);
  line-height: var(--leading-tight);
  letter-spacing: -4.8px;
  text-transform: uppercase;
  text-align: center;
  color: var(--color-green);
}

.events-teaser__heading em {
  font-style: italic;
  text-transform: uppercase;
}

/* Now a two-button row (See All Events + Book a Table) instead of one
   link — same centered flex-wrap pattern as .article__cta. */
.events-teaser__cta {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 16px;
  width: fit-content;
  margin: var(--space-8) auto 0;
}

@media (max-width: 900px) {
  .events-teaser {
    padding: var(--space-11) var(--gutter);
  }

  .events-teaser__header {
    margin-bottom: var(--space-9);
  }

  .events-teaser__heading {
    font-size: var(--text-heading-mobile);
    letter-spacing: -2.4px;
  }
}

/* ---------- Full page (events.html) ---------- */

.events-page__subtitle {
  max-width: 480px;
  margin: var(--space-4) auto 0;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  letter-spacing: -0.3px;
  /* Green on the blush hero ground (was cream on green). */
  color: var(--color-green);
  opacity: 0.85;
}

.events-page {
  /* Wider than the shared --page-max, on request — gives each of the
     4 cards more room without dropping to fewer per row. */
  max-width: 1680px;
  margin: 0 auto;
  /* Same fix as .journal above — top padding cut down from the old
     symmetric var(--space-14) (140px), which stacked on top of the
     "EVENTS" title band's own padding-bottom for a huge gap before the
     first card. Bottom keeps the original space before the footer. */
  padding: clamp(24px, 4vh, 48px) var(--gutter) var(--space-14);
}

.events-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
  gap: var(--space-6);
  /* Images are now cropped to a fixed 9:16, so cards are meant to share
     one height per row — default grid stretch (align-items: stretch)
     pulls every card down to match the tallest one, and
     .event-card__content's flex:1 turns that extra height into empty
     space below the shorter descriptions instead of resizing the image. */
}

/* Book Now under the card grid — the page had no CTA of its own below
   the events, only one buried inside each card's detail modal. */
.events-page__cta {
  display: flex;
  justify-content: center;
  /* Was var(--space-9) (48px) — with align-items:start above already
     removing the stretched dead space, that plus the grid's own
     row-gap read as too much before the button. */
  margin-top: 8px;
}

/* A polaroid-style cream mat around the photo, matching the menu index's
   own hover-reveal photos (css/style.css, .menu-index__floater-img) — same
   cream, same thicker bottom edge. The photo, its scrim and its text
   content all inset by that same border amount below, so the frame reads
   as a real border around the whole card rather than just a background
   color peeking out behind the image. (Text-below-the-photo was tried
   here too — reverted, that treatment was only meant for the journal
   cards.) */
.event-card {
  position: relative;
  /* Above the grain overlay's z-index:55 so the card's own cream mat
     stays clean. */
  z-index: 56;
  aspect-ratio: 3 / 4;
  overflow: hidden;
  background: #fdf9f2;
  padding: 10px 10px 26px;
  display: block;
  box-shadow: 0 22px 50px rgba(11, 15, 11, 0.22);
}

.event-card__image {
  position: absolute;
  inset: 10px 10px 26px;
  width: calc(100% - 20px);
  height: calc(100% - 36px);
  object-fit: cover;
}

/* Ink at the bottom for text legibility, clear at the top so the photo
   still reads as the card's real subject, not just a tinted backdrop. */
.event-card__scrim {
  position: absolute;
  inset: 10px 10px 26px;
  background: linear-gradient(
    to top,
    rgba(11, 15, 11, 0.92) 0%,
    rgba(11, 15, 11, 0.55) 42%,
    rgba(11, 15, 11, 0) 75%
  );
  pointer-events: none;
}

.event-card__content {
  position: absolute;
  left: 10px;
  right: 10px;
  bottom: 26px;
  z-index: 1;
  padding: var(--space-6);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.event-card__tag {
  margin: 0;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-2xs);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-accent);
}

.event-card__title {
  margin: 0;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: var(--text-lg);
  line-height: 1.05;
  letter-spacing: -1.2px;
  text-transform: uppercase;
  color: var(--color-cream);
  text-wrap: balance;
}

.event-card__desc {
  margin: 0;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  line-height: var(--leading-normal);
  color: var(--color-cream);
  opacity: 0.8;
}

.event-card__cta {
  margin-top: var(--space-2);
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  height: 40px;
  padding: 0 var(--space-4);
  border: 1px solid rgba(242, 236, 227, 0.5);
  border-radius: 100px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-2xs);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-cream);
  transition:
    background-color 0.3s ease,
    border-color 0.3s ease,
    color 0.3s ease;
}

.event-card__cta:hover {
  background: var(--color-accent);
  border-color: var(--color-accent);
  color: var(--color-ink);
}

@media (prefers-reduced-motion: reduce) {
  .event-card__image {
    transition: none;
  }
}

@media (max-width: 900px) {
  .events-page {
    padding: var(--space-9) var(--gutter) var(--space-11);
  }

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

/* ---------- Events page cards: photo on top, its date/name/description
   below it (not overlaid — the events fan on the homepage overlays its
   caption on the image with a scrim, but here the photos are often
   full-bleed posters that already carry their own baked-in text, so
   overlaying a second copy of the same copy on top of them just
   duplicated it). 4-up on desktop, one under another on mobile. ---------- */
.events-grid--modal {
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-5);
}

.events-grid--modal .event-card {
  /* Base .event-card is a fixed 3:4 box with overflow:hidden, built for
     a photo-fills-the-whole-card treatment — reset the fixed ratio
     itself, but keep every card the SAME height (grid row already
     stretches items by default) so the row reads as one even set
     regardless of each photo's own aspect ratio. */
  aspect-ratio: auto;
  overflow: visible;
  display: flex;
  flex-direction: column;
  padding: 10px 10px 18px;
  background: #fdf9f2;
  border-radius: 2px;
  box-shadow: 0 22px 50px rgba(11, 15, 11, 0.18);
}

.events-grid--modal .event-card__image {
  /* Base rule absolutely-positions this to fill the card (the overlay
     treatment) — reset so it's a normal in-flow block the text can
     follow underneath.
     Fixed 9:16 aspect-ratio + object-fit:cover — every photo/video crops
     to the SAME shape (on request), so the image area itself is
     identical across cards. Cards still land the same overall height
     as each other: the flexible content block below (.event-card__meta
     via flex:1) absorbs whatever text-length difference there is,
     rather than the image stretching or letterboxing. */
  position: static;
  inset: auto;
  width: 100%;
  height: auto;
  aspect-ratio: 9 / 16;
  object-fit: cover;
  border-radius: 1px;
}

.events-grid--modal .event-card__content {
  /* The base rule (used by the homepage fan/teaser, which overlays this
     on top of the image with a scrim) is position:absolute — reset back
     to a normal in-flow block sitting after the image, not on top of
     it. flex:1 lets this block claim whatever extra height the grid's
     own row-stretch adds beyond this card's own natural content height
     — a shorter description just gets more empty room below it instead
     of the image or card itself resizing to compensate. */
  position: static;
  left: auto;
  right: auto;
  bottom: auto;
  z-index: auto;
  flex: 1;
  padding: 14px 4px 0;
  color: var(--color-green);
}

.events-grid--modal .event-card__tag {
  color: var(--color-accent);
}

.events-grid--modal .event-card__title {
  color: var(--color-green);
}

.events-grid--modal .event-card__desc {
  color: var(--color-green);
  opacity: 0.68;
}

@media (max-width: 900px) {
  .events-grid--modal {
    grid-template-columns: 1fr;
    max-width: 420px;
    margin: 0 auto;
    gap: var(--space-6);
  }
}

/* ---------- Event detail modal (ported from the homepage; opened from
   the events-page cards via js/event-modal.js) ---------- */
.event-card[data-event-modal] {
  cursor: pointer;
}

.event-card[data-event-modal]:focus,
.event-card[data-event-modal]:focus-visible,
.event-modal:focus,
.event-modal:focus-visible,
.event-modal__inner:focus,
.event-modal__close:focus,
.event-modal__close:focus-visible {
  outline: none;
}

.event-modal {
  width: min(92vw, 460px);
  max-height: 88vh;
  margin: auto;
  padding: 0;
  border: 0;
  border-radius: 3px;
  background: var(--color-cream);
  color: var(--color-green);
  opacity: 0;
  transform: translateY(12px) scale(0.97);
  transition:
    opacity 0.22s ease,
    transform 0.22s ease;
  overflow: visible;
}

.event-modal.is-open {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.event-modal::backdrop {
  background: rgba(11, 15, 11, 0.55);
  opacity: 0;
  transition: opacity 0.22s ease;
}

.event-modal.is-open::backdrop {
  opacity: 1;
}

.event-modal__inner {
  position: relative;
  padding: clamp(28px, 6vw, 44px);
}

.event-modal__close {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 34px;
  height: 34px;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
}

.event-modal__close span {
  position: absolute;
  left: 6px;
  right: 6px;
  top: 50%;
  height: 1.5px;
  background: var(--color-green);
}

.event-modal__close span:nth-child(1) {
  transform: rotate(45deg);
}

.event-modal__close span:nth-child(2) {
  transform: rotate(-45deg);
}

.event-modal__eyebrow {
  margin: 0 0 18px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-xs);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: color-mix(in srgb, var(--color-green) 60%, transparent);
}

.event-modal__date {
  margin: 0 0 6px;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  letter-spacing: 0.04em;
  color: var(--color-accent);
}

.event-modal__name {
  margin: 0 0 16px;
  font-family: var(--font-display);
  font-weight: 300;
  font-size: clamp(26px, 6vw, 38px);
  line-height: var(--leading-tight);
  letter-spacing: -1.2px;
  text-transform: uppercase;
  color: var(--color-green);
}

.event-modal__desc {
  margin: 0;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
  color: color-mix(in srgb, var(--color-ink) 82%, transparent);
}

.event-modal__cta {
  display: flex;
  justify-content: flex-start;
  margin-top: 34px;
}

.event-modal__cta .hero__cta-wrap {
  margin: 0;
}

/* =========================================================
   Cursor glow (js/cursor-glow.js) — a soft coral trail following the
   mouse across the site, fixed above everything, fully click-through.
   ========================================================= */

.cursor-glow-canvas {
  position: fixed;
  inset: 0;
  z-index: 9999;
  pointer-events: none;
}

/* Reading-time clock icon (rendered by js/journal-list-sanity.js) —
   must be sized or the bare 24-viewBox SVG balloons. */
.journal-entry__timer-icon {
  width: 13px;
  height: 13px;
  flex-shrink: 0;
  vertical-align: -2px;
  opacity: 0.7;
}

/* Smoother section switching on the menu page — the new panel fades/rises
   in, and jump-links to categories scroll smoothly and land clear of the
   pinned toolbar. */
@keyframes menu-panel-in {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
}

.menu-page__panel:not(.is-hidden) {
  animation: menu-panel-in 0.3s cubic-bezier(0.33, 1, 0.68, 1);
}

html:has(.menu-page) {
  scroll-behavior: smooth;
}

.menu-page__section {
  scroll-margin-top: calc(var(--menu-toolbar-bottom, 120px) + 14px);
}

/* ---- Cookie consent banner (js/cookie-consent.js) ---------------- */
.cookie-banner {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 14px 28px;
  padding: 16px clamp(16px, 5vw, 40px);
  background: var(--color-green);
  color: var(--color-cream);
  border-top: 1px dashed rgba(242, 236, 227, 0.35);
  transform: translateY(100%);
  transition: transform 0.32s cubic-bezier(0.33, 1, 0.68, 1);
}

.cookie-banner.is-in {
  transform: translateY(0);
}

.cookie-banner.is-leaving {
  transform: translateY(100%);
}

.cookie-banner__text {
  margin: 0;
  max-width: 62ch;
  font-family: var(--font-mono);
  font-weight: 300;
  font-size: 13px;
  line-height: 1.5;
  letter-spacing: -0.3px;
}

.cookie-banner__link {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
  /* Keeps "Privacy Policy" from splitting across the line-wrap that the
     sentence before it takes on desktop. */
  white-space: nowrap;
}

.cookie-banner__actions {
  display: flex;
  gap: 10px;
  flex-shrink: 0;
}

.cookie-banner__btn {
  padding: 9px 20px;
  border-radius: 100px;
  font-family: var(--font-mono);
  font-weight: 400;
  font-size: 12px;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  cursor: pointer;
  transition:
    background 0.18s ease,
    color 0.18s ease;
}

.cookie-banner__btn--decline {
  background: transparent;
  border: 1px solid rgba(242, 236, 227, 0.5);
  color: var(--color-cream);
}

.cookie-banner__btn--decline:hover {
  background: rgba(242, 236, 227, 0.12);
}

.cookie-banner__btn--accept {
  background: var(--color-cream);
  border: 1px solid var(--color-cream);
  color: var(--color-green);
}

.cookie-banner__btn--accept:hover {
  background: #fff;
  border-color: #fff;
}

@media (max-width: 600px) {
  .cookie-banner {
    justify-content: flex-start;
    gap: 12px;
  }
  .cookie-banner__actions {
    width: 100%;
  }
  .cookie-banner__btn {
    flex: 1;
  }
}

@media (prefers-reduced-motion: reduce) {
  .cookie-banner {
    transition: none;
  }
}
