/* ==========================================================================
   Ma's Diner / Pop's Place — one site, two sides (A-side / B-side)
   Implementation of "Mas Diner v2c.dc.html" (Claude Design prototype).

   The prototype rendered one side at a time from component state. Here both
   sides live in the DOM and `<html data-side>` decides which is shown, so the
   page works with JavaScript disabled (Ma's, the A-side, is the default).
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. Reset & base
   -------------------------------------------------------------------------- */

* { box-sizing: border-box; }

html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  font-family: 'Libre Franklin', system-ui, -apple-system, sans-serif;
  background: var(--bg);
  color: var(--ink-2);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

img { max-width: 100%; }

:where(a):focus-visible,
:where(button):focus-visible {
  outline: 2px solid var(--focus);
  outline-offset: 3px;
  border-radius: 4px;
}

.skip-link {
  position: absolute;
  left: 12px;
  top: -60px;
  z-index: 200;
  padding: 11px 18px;
  border-radius: 6px;
  background: var(--ink);
  color: var(--bg);
  font-size: 13px;
  font-weight: 700;
  text-decoration: none;
  transition: top .18s ease;
}

.skip-link:focus-visible { top: 12px; }

/* Screen-reader-only, but still focusable/announced. */
.u-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* --------------------------------------------------------------------------
   2. Side tokens

   Most of the two sides share structure and differ only in palette and in
   how the small eyebrow labels are set (Ma's uses tracked-out Libre Franklin,
   Pop's uses Anton). Those differences are tokens; everything else is one
   set of component rules.
   -------------------------------------------------------------------------- */

:root[data-side='mas'] {
  --bg:            #FAF6EE;
  --bg-alt:        #F2EADB;
  --surface:       #FFFFFF;

  --ink:           #15315E;
  --ink-2:         #46596F;
  --ink-3:         #5E6D88;   /* was #71809B — 3.7:1 on cream; now 5.0:1 */
  --line:          rgba(21, 49, 94, .14);
  --hairline:      rgba(21, 49, 94, .1);

  --accent:        #8F6F2E;   /* was #B08A3E — 3.2:1 as text on white; now 5.0:1 */
  --accent-2:      #C98A2D;
  --focus:         #15315E;

  --header-bg:     rgba(250, 246, 238, .92);
  --nav-link:      #46596F;
  --nav-link-hov:  #15315E;

  --eyebrow-color:      #15315E;
  --eyebrow-font:       'Libre Franklin', sans-serif;
  --eyebrow-weight:     700;
  --eyebrow-size:       11px;
  --eyebrow-tracking:   .22em;
  --eyebrow-transform:  uppercase;

  --seal-rec:      #15315E;
}

:root[data-side='pops'] {
  --bg:            #12161F;
  --bg-alt:        #171C28;
  --surface:       #1B2130;

  --ink:           #F2EDE2;
  --ink-2:         #C3CADA;
  --ink-3:         #8D98B4;
  --line:          rgba(242, 237, 226, .12);
  --hairline:      rgba(242, 237, 226, .08);

  --accent:        #D9A048;
  --accent-2:      #E9BE7A;
  --focus:         #E9BE7A;

  --header-bg:     rgba(18, 22, 31, .88);
  --nav-link:      #C3CADA;
  --nav-link-hov:  #E9BE7A;

  --eyebrow-color:      #D9A048;
  --eyebrow-font:       'Anton', sans-serif;
  --eyebrow-weight:     400;
  --eyebrow-size:       12px;
  --eyebrow-tracking:   .24em;
  --eyebrow-transform:  none;

  --seal-rec:      #D9A048;
}

/* The inactive side is hidden rather than removed, so anchors, images and
   layout are all warm the moment someone flips. Specificity (attribute +
   class) clears the component `display` values without !important. */
:root[data-side='mas'] .side--pops,
:root[data-side='pops'] .side--mas { display: none; }

/* --------------------------------------------------------------------------
   3. Keyframes (carried over from the prototype)
   -------------------------------------------------------------------------- */

@keyframes mrSpin { to   { transform: rotate(360deg); } }
@keyframes mrMarq { to   { transform: translateX(calc(-1 * var(--run-w, 50%))); } }
@keyframes mrDrop { from { transform: rotate(-26deg); } to { transform: rotate(0deg); } }
@keyframes mrRise { from { transform: translateY(22px); opacity: 0; } to { transform: none; opacity: 1; } }

@keyframes mrFlip {
   0%  { transform: scale(.25) rotate(0);        opacity: 0; }
  16%  {                                          opacity: 1; }
  50%  { transform: scale(1.05) rotate(560deg); }
  84%  {                                          opacity: 1; }
 100%  { transform: scale(.25) rotate(900deg);   opacity: 0; }
}

@keyframes mrFade { 0%, 100% { opacity: 0; } 22%, 78% { opacity: 1; } }

/* --------------------------------------------------------------------------
   4. Layout & shared pieces
   -------------------------------------------------------------------------- */

.wrap {
  max-width: 1240px;
  margin: 0 auto;
  padding-inline: clamp(16px, 3.5vw, 40px);
}

.wrap--1180 { max-width: 1180px; }
.wrap--980  { max-width: 980px; }
.wrap--760  { max-width: 760px; }
.wrap--720  { max-width: 720px; }

.section {
  background: var(--bg);
  padding-block: clamp(64px, 8vw, 110px);
  /* Keep headings clear of the sticky header when jumped to from the nav. */
  scroll-margin-top: 84px;
}

.section--alt { background: var(--bg-alt); }

.section-head {
  text-align: center;
  margin-bottom: clamp(40px, 5vw, 60px);
}

.section-head--tight { margin-bottom: clamp(36px, 4.5vw, 52px); }

.section-head--reviews {
  max-width: 680px;
  margin-inline: auto;
  margin-bottom: clamp(40px, 5vw, 56px);
}

/* Small tracked-out label above a heading. */
.eyebrow {
  margin: 0 0 12px;
  font-family: var(--eyebrow-font);
  font-weight: var(--eyebrow-weight);
  font-size: var(--eyebrow-size);
  letter-spacing: var(--eyebrow-tracking);
  text-transform: var(--eyebrow-transform);
  color: var(--eyebrow-color);
}

.eyebrow--dotted {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 22px;
}

.eyebrow__dot {
  width: 7px;
  height: 7px;
  flex: none;
  border-radius: 50%;
  background: var(--accent);
  display: inline-block;
}

.section-title {
  margin: 0;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  color: var(--ink);
  text-wrap: balance;
}

.section-title--32 { font-size: clamp(32px, 4.2vw, 52px); }
.section-title--34 { font-size: clamp(34px, 4.6vw, 56px); }

/* Ma's sets a hair of negative tracking on its display type; Pop's doesn't. */
:root[data-side='mas'] .section-title,
:root[data-side='mas'] .hero__title { letter-spacing: -.01em; }

.stars {
  color: var(--accent-2);
  letter-spacing: 2px;
  font-size: 13px;
}

/* Buttons & links that act as buttons ------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 28px;
  border: 1px solid transparent;
  border-radius: 6px;
  font-family: 'Libre Franklin', sans-serif;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: .01em;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color .2s ease, border-color .2s ease, color .2s ease;
}

.btn--solid  { background: var(--btn-bg); color: var(--btn-ink); }
.btn--solid:hover  { background: var(--btn-bg-hov); }

.btn--ghost  { background: none; color: var(--ink); border-color: var(--ghost-line); }
.btn--ghost:hover  { border-color: var(--ghost-line-hov); }

:root[data-side='mas'] {
  /* The prototype declared a hover identical to the resting colour on the
     navy buttons, i.e. no visible affordance. Lifting it one step keeps the
     family and makes the hover read. */
  --btn-bg: #15315E;  --btn-bg-hov: #1C4179;  --btn-ink: #FAF6EE;
  --ghost-line: rgba(21, 49, 94, .35);  --ghost-line-hov: #15315E;
}

:root[data-side='pops'] {
  --btn-bg: #D9A048;  --btn-bg-hov: #E9BE7A;  --btn-ink: #15131A;
  --ghost-line: rgba(242, 237, 226, .35);  --ghost-line-hov: #F2EDE2;
}

.cta-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 14px;
}

/* --------------------------------------------------------------------------
   4b. Announcement bar

   Sits above the header, set in the side's button colours so it reads as part
   of the brand rather than a system alert. Retires itself by date.
   -------------------------------------------------------------------------- */

.announce {
  background: var(--btn-bg);
  color: var(--btn-ink);
  text-align: center;
  padding: 10px clamp(16px, 3.5vw, 40px);
}

.announce__text {
  margin: 0;
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.5;
  text-wrap: balance;
}

.announce__link {
  margin-left: 8px;
  color: inherit;
  font-weight: 700;
  text-underline-offset: 3px;
}

/* --------------------------------------------------------------------------
   5. Header
   -------------------------------------------------------------------------- */

.site-header {
  position: sticky;
  top: 0;
  z-index: 80;
  background: var(--header-bg);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--line);
}

.site-header__inner {
  max-width: 1240px;
  margin: 0 auto;
  padding: 14px clamp(16px, 3.5vw, 40px);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}

.brand {
  display: flex;
  align-items: center;
  gap: 12px;
  text-decoration: none;
}

.brand__seal {
  width: 40px;
  height: 40px;
  flex: none;
  display: block;
  color: var(--ink);
}

.brand__name {
  display: flex;
  flex-direction: column;
  line-height: 1;
}

.brand__word {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: 25px;
  color: var(--ink);
}

:root[data-side='mas'] .brand__word { letter-spacing: -.01em; }
:root[data-side='pops'] .brand__word { color: #F2EDE2; }

.brand__sub {
  margin-top: 3px;
  font-weight: 700;
  font-size: 10px;
  letter-spacing: .34em;
  color: var(--ink);
}

:root[data-side='pops'] .brand__sub {
  font-family: 'Anton', sans-serif;
  font-weight: 400;
  font-size: 11px;
  color: #D9A048;
}

.nav {
  display: flex;
  align-items: center;
  gap: clamp(16px, 2.6vw, 32px);
  flex-wrap: wrap;
}

.nav__link {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--nav-link);
  text-decoration: none;
  white-space: nowrap;
  transition: color .18s ease;
}

.nav__link:hover { color: var(--nav-link-hov); }

/* The A-side / B-side switch. */
.flip-btn {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 10px 16px;
  border: 1px solid var(--btn-bg);
  border-radius: 6px;
  background: var(--btn-bg);
  color: var(--btn-ink);
  font-family: 'Libre Franklin', sans-serif;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .16em;
  cursor: pointer;
  transition: background-color .2s ease, border-color .2s ease;
}

.flip-btn:hover {
  background: var(--btn-bg-hov);
  border-color: var(--btn-bg-hov);
}

.flip-btn__glyph { font-size: 14px; line-height: 1; }

/* Ma's flip button is navy-on-cream, so its arrow gets the gold accent. */
:root[data-side='mas'] .flip-btn__glyph { color: #E9BE7A; }

/* --------------------------------------------------------------------------
   6. Hero
   -------------------------------------------------------------------------- */

.hero {
  scroll-margin-top: 84px;
}

.hero--mas {
  background: var(--bg);
  border-bottom: 1px solid var(--hairline);
}

.hero--pops {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(880px 480px at 84% 8%, rgba(217, 160, 72, .1), transparent 62%),
    #12161F;
}

.hero__inner {
  position: relative;
  max-width: 1240px;
  margin: 0 auto;
  padding: clamp(48px, 7vw, 104px) clamp(16px, 3.5vw, 40px);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(440px, 100%), 1fr));
  gap: clamp(36px, 5vw, 72px);
  align-items: center;
}

.hero__copy {
  max-width: 580px;
  animation: mrRise .7s ease both;
}

.hero__title {
  margin: 0 0 20px;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  color: var(--ink);
  text-wrap: balance;
}

.hero--mas .hero__title {
  font-size: clamp(44px, 5.8vw, 78px);
  line-height: 1.04;
}

.hero--pops .hero__title {
  font-size: clamp(48px, 6.4vw, 88px);
  line-height: 1;
  text-shadow: 0 0 32px rgba(217, 160, 72, .3);
}

.hero__lede {
  margin: 0;
  max-width: 46ch;
  font-size: clamp(16px, 1.6vw, 18px);
  line-height: 1.7;
  color: var(--ink-2);
}

.hero__lede strong { color: var(--ink); }

.hero .cta-row { margin: 30px 0 28px; }

.hero__meta {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--ink-3);
}

.hero__meta .star { color: var(--accent-2); }
.hero__meta strong { color: var(--accent); font-weight: 700; }

.hero__media { animation: mrRise .8s .12s ease both; }

.hero__media--pops {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
}

.hero__disc { position: relative; width: 100%; max-width: 460px; }

/* A gold hairline closes the B-side hero. */
.hero__rule {
  height: 2px;
  background: #D9A048;
  opacity: .7;
}

.hero__frame {
  margin: 0;
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid rgba(21, 49, 94, .16);
  box-shadow: 0 24px 48px rgba(21, 49, 94, .12);
}

.hero__frame img {
  width: 100%;
  aspect-ratio: 4 / 3;
  max-height: 440px;
  object-fit: cover;
  display: block;
  background: var(--photo-bg);
}

.hero__caption {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 14px 0 0;
  padding: 0 2px;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-3);
}

.hero__caption strong { color: var(--ink); font-weight: 700; }

.hero__caption-disc {
  width: 32px;
  height: 32px;
  flex: none;
  display: block;
}

/* --------------------------------------------------------------------------
   7. Record artwork — the seal, the spinning discs, the turntable

   All of it is CSS and inline SVG; there are no image files behind any of it.
   -------------------------------------------------------------------------- */

.seal {
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}

.seal__top { font: 15.5px 'Anton', sans-serif; letter-spacing: 2.6px; }
.seal__bot { font: 12.5px 'Anton', sans-serif; letter-spacing: 2.6px; }

/* The turntable seal carries the longest legend; drop a step so it fits the
   arc instead of clipping at the end. */
.seal--wide .seal__top { font-size: 13.5px; }

.seal__rec { fill: var(--seal-rec); }

/* A vinyl record: grooves, a sweep of sheen, a label, a spindle hole. */
.record {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: repeating-radial-gradient(
    circle at 50% 50%,
    #0a0c11 0px, #0a0c11 1px, #15171f 2px, #15171f 4px
  );
}

.record__sheen,
.record__label,
.record__spindle {
  position: absolute;
  border-radius: 50%;
}

.record__sheen { inset: 0; }
.record__spindle { background: #0a0c11; }

/* Small "now playing" disc beside the A-side hero photo. */
.record--now {
  animation: mrSpin 9s linear infinite;
  box-shadow: inset 0 0 20px rgba(0, 0, 0, .6);
}

.record--now .record__sheen {
  background: conic-gradient(from 210deg,
    transparent 0deg, rgba(255, 255, 255, .1) 40deg,
    transparent 92deg, rgba(255, 255, 255, .05) 220deg, transparent 272deg);
}

.record--now .record__label   { inset: 33%; background: #15315E; }
.record--now .record__spindle { inset: 46.5%; }

/* The B-side hero turntable. */
.turntable {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
}

.turntable__platter {
  position: absolute;
  inset: 1%;
  border-radius: 50%;
  background: radial-gradient(circle at 38% 30%, #2b3247, #0c0f16 72%);
  box-shadow:
    0 36px 80px rgba(0, 0, 0, .5),
    inset 0 2px 8px rgba(255, 255, 255, .06);
}

.turntable__record {
  position: absolute;
  inset: 8%;
  aspect-ratio: auto;
  width: auto;
  animation: mrSpin 3.6s linear infinite;
  box-shadow: inset 0 0 70px rgba(0, 0, 0, .65);
}

.turntable__record .record__sheen {
  background: conic-gradient(from 210deg,
    transparent 0deg, rgba(255, 255, 255, .11) 38deg,
    transparent 86deg, rgba(255, 255, 255, .05) 210deg, transparent 268deg);
}

.turntable__record .record__label {
  inset: 32%;
  background: #D9A048;
  box-shadow: 0 0 20px rgba(217, 160, 72, .35);
}

.turntable__seal {
  position: absolute;
  inset: 30%;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #F2EDE2;
}

/* Tonearm — swings down onto the record once, on load. */
.tonearm {
  position: absolute;
  top: 4%;
  right: 6%;
  width: 50%;
  height: 11%;
  z-index: 4;
  transform-origin: 88% 50%;
  animation: mrDrop 1.2s .25s cubic-bezier(.34, 1.2, .64, 1) both;
}

.tonearm__pivot {
  position: absolute;
  right: 0;
  top: -44%;
  width: 20%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: radial-gradient(circle at 38% 34%, #eef1f5, #aeb4c0);
  box-shadow: 0 6px 14px rgba(0, 0, 0, .4);
}

.tonearm__arm {
  position: absolute;
  right: 9%;
  top: 38%;
  width: 82%;
  height: 24%;
  border-radius: 4px;
  background: linear-gradient(#eef1f5, #b6bcc8);
  transform: rotate(7deg);
  transform-origin: right center;
  box-shadow: 0 3px 8px rgba(0, 0, 0, .3);
}

.tonearm__head {
  position: absolute;
  left: 2%;
  top: 62%;
  width: 16%;
  height: 46%;
  border-radius: 2px;
  background: #2a2f3a;
  transform: rotate(7deg);
}

/* --------------------------------------------------------------------------
   8. Marquee (B-side only)
   -------------------------------------------------------------------------- */

.marquee {
  background: #0D111A;
  border-bottom: 1px solid var(--hairline);
  overflow: hidden;
}

.marquee__track {
  display: flex;
  width: max-content;
  animation: mrMarq var(--marquee-time, 42s) linear infinite;
  will-change: transform;
}

/* The script clones the run until the track is two viewports wide and sets
   --run-w, so the loop shifts by exactly one copy and never shows a gap. */
.marquee__dot { display: inline-block; padding: 0 26px; opacity: .65; }

.marquee__run {
  padding: 11px 0;
  white-space: nowrap;
  font-family: 'Anton', sans-serif;
  font-size: 12.5px;
  letter-spacing: .22em;
  color: #D9A048;
}

/* --------------------------------------------------------------------------
   8b. In memory — the owner's father

   The reason the whole place has a turntable in it. Presented as a mounted
   photographic print rather than a card: cream mount, thin edge, deep shadow,
   and no crop, because the snapshot's own white border is part of the object.
   -------------------------------------------------------------------------- */

.memoriam__inner {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr));
  gap: clamp(32px, 5vw, 72px);
  align-items: center;
}

.memoriam__figure {
  margin: 0;
  max-width: 500px;
  justify-self: center;
  width: 100%;
}

.memoriam__frame {
  padding: clamp(10px, 1.4vw, 18px);
  background: var(--mount-bg);
  border: 1px solid var(--mount-line);
  border-radius: 3px;
  box-shadow: var(--mount-shadow);
}

.memoriam__frame img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 1px;
  background: var(--photo-bg);
}

.memoriam__cap {
  margin: 16px 2px 0;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  line-height: 1.6;
  color: var(--ink-3);
  text-align: center;
}

:root[data-side='mas'] {
  --mount-bg: #FFFFFF;
  --mount-line: rgba(21, 49, 94, .16);
  --mount-shadow: 0 26px 56px rgba(21, 49, 94, .16);
}

:root[data-side='pops'] {
  /* A cream mount against the dark room, with the faintest warm halo. */
  --mount-bg: #F2EDE2;
  --mount-line: rgba(242, 237, 226, .22);
  --mount-shadow: 0 30px 70px rgba(0, 0, 0, .55), 0 0 60px rgba(217, 160, 72, .1);
}

.memoriam__title {
  margin: 0 0 20px;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: clamp(32px, 4.4vw, 54px);
  line-height: 1.08;
  color: var(--ink);
  text-wrap: balance;
}

:root[data-side='mas'] .memoriam__title { letter-spacing: -.01em; }

.memoriam__body p {
  margin: 0 0 18px;
  font-size: clamp(16px, 1.65vw, 18px);
  line-height: 1.75;
  color: var(--ink-2);
  max-width: 46ch;
}

.memoriam__body p:last-child { margin-bottom: 0; }
.memoriam__body strong { color: var(--ink); }

/* Spin / sip / stay, carried over from the prototype's card row but set as
   text so nothing competes with the photograph above. */
.pillars {
  margin-top: clamp(44px, 5vw, 68px);
  padding-top: clamp(30px, 4vw, 44px);
  border-top: 1px solid var(--line);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr));
  gap: clamp(24px, 3vw, 40px);
}

.pillar__kicker {
  margin: 0 0 10px;
  font-family: var(--eyebrow-font);
  font-weight: var(--eyebrow-weight);
  font-size: 11.5px;
  letter-spacing: .22em;
  text-transform: var(--eyebrow-transform);
  color: var(--accent);
}

.pillar__title {
  margin: 0 0 10px;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: 23px;
  color: var(--ink);
}

.pillar__text {
  margin: 0;
  font-size: 15px;
  line-height: 1.7;
  color: var(--ink-2);
}

/* --------------------------------------------------------------------------
   8c. Video clip

   preload="none" means nothing but the poster downloads until someone presses
   play, so a 4 MB clip costs the page nothing.
   -------------------------------------------------------------------------- */

.clip {
  margin: clamp(32px, 4vw, 44px) auto 0;
  max-width: 320px;
}

.clip__video {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 9 / 16;
  border-radius: 10px;
  border: 1px solid var(--line);
  background: #0a0c11;
}

.clip__cap {
  margin: 12px 0 0;
  text-align: center;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-3);
}

/* --------------------------------------------------------------------------
   9. Three-up story cards
   -------------------------------------------------------------------------- */

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
  gap: clamp(20px, 2.6vw, 28px);
}

.card {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
}

.card__media,
.card__media img {
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
}

.card__media { background: var(--photo-bg); }

.card__body { padding: 26px; }

.card__kicker {
  margin: 0 0 10px;
  font-family: var(--eyebrow-font);
  font-weight: var(--eyebrow-weight);
  font-size: 11px;
  letter-spacing: .22em;
  text-transform: var(--eyebrow-transform);
  color: var(--accent);
}

:root[data-side='pops'] .card__kicker { font-size: 11.5px; }

.card__title {
  margin: 0 0 10px;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: 24px;
  color: var(--ink);
}

:root[data-side='pops'] .card__title { font-size: 23px; }
:root[data-side='mas'] .card__title { letter-spacing: -.01em; }

.card__text {
  margin: 0;
  font-size: 15px;
  line-height: 1.7;
  color: var(--ink-2);
}

/* Photos have a tinted bed so a slow (or absent) image reads as an empty
   frame rather than a flash of page background. */
:root[data-side='mas']  { --photo-bg: #EFE7D8; }
:root[data-side='pops'] { --photo-bg: #10141C; }

/* --------------------------------------------------------------------------
   10. Menu / tracklist
   -------------------------------------------------------------------------- */

.menu-card {
  border-radius: 14px;
  padding: clamp(28px, 4vw, 52px);
  background: var(--menu-bg);
  border: 1px solid var(--menu-line);
}

:root[data-side='mas']  { --menu-bg: #15315E; --menu-line: transparent; --menu-rule: rgba(250, 246, 238, .22); --menu-row: rgba(250, 246, 238, .14); }
:root[data-side='pops'] { --menu-bg: #1B2130; --menu-line: rgba(217, 160, 72, .25); --menu-rule: rgba(217, 160, 72, .3); --menu-row: rgba(242, 237, 226, .12); }

.menu-card__head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding-bottom: 20px;
  margin-bottom: 24px;
  border-bottom: 1px solid var(--menu-rule);
}

.menu-card__eyebrow {
  margin: 0 0 10px;
  font-family: var(--eyebrow-font);
  font-weight: var(--eyebrow-weight);
  font-size: var(--eyebrow-size);
  letter-spacing: var(--eyebrow-tracking);
  text-transform: var(--eyebrow-transform);
  color: var(--menu-eyebrow);
}

:root[data-side='mas']  { --menu-eyebrow: #CFBA85; --menu-title: #FAF6EE; --menu-note: #F2C879; --menu-no: #E9BE7A; --menu-name: #FAF6EE; --menu-desc: #AFC0DE; }
:root[data-side='pops'] { --menu-eyebrow: #E9BE7A; --menu-title: #F2EDE2; --menu-note: #D9A048; --menu-no: #D9A048; --menu-name: #F2EDE2; --menu-desc: #9FAAC6; }

.menu-card__title {
  margin: 0;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: clamp(30px, 4vw, 48px);
  color: var(--menu-title);
}

:root[data-side='mas'] .menu-card__title { letter-spacing: -.01em; }

.menu-card__note {
  margin: 0 0 4px;
  font-size: 13px;
  font-weight: 600;
  color: var(--menu-note);
}

.menu-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr));
  gap: 6px 40px;
}

.menu-item {
  display: flex;
  align-items: baseline;
  gap: 12px;
  padding: 14px 0;
  border-bottom: 1px solid var(--menu-row);
}

.menu-item__no {
  width: 24px;
  flex: none;
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .06em;
  color: var(--menu-no);
}

:root[data-side='pops'] .menu-item__no {
  font-family: 'Anton', sans-serif;
  font-weight: 400;
  font-size: 13px;
}

.menu-item__name {
  margin: 0;
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  font-size: 16px;
  font-weight: 700;
  color: var(--menu-name);
}

/* Only rendered when a menu has showPrice on — the website ships priceless by
   design, while the printed menu always shows them. Tabular figures so a column
   of prices lines up. */
.menu-item__price {
  flex: none;
  font-size: 15px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--menu-no);
}

.menu-item__desc {
  margin: 3px 0 0;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--menu-desc);
}

/* --------------------------------------------------------------------------
   10b. Gig list — the calendar, rendered as a tracklist

   Lives inside a .menu-card so it inherits the same tokens as the menu; an
   event listing and a tracklist are the same object in this design.
   -------------------------------------------------------------------------- */

.gigs {
  display: grid;
  gap: 0;
}

.gig {
  display: grid;
  grid-template-columns: 46px 1fr auto;
  gap: 4px 16px;
  align-items: baseline;
  padding: 16px 0;
  border-bottom: 1px solid var(--menu-row);
}

/* Every child is placed explicitly. Grid resolves items with a definite row
   before fully-auto ones, so leaving the columns to auto-placement puts the
   date and the Add button in the first two tracks and pushes the title out. */
.gig__date {
  grid-column: 1;
  grid-row: 1 / span 2;
  text-align: center;
  line-height: 1.05;
  color: var(--menu-no);
  font-family: 'Anton', sans-serif;
  font-weight: 400;
}

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

.gig__month {
  display: block;
  font-size: 11px;
  letter-spacing: .14em;
}

.gig__day {
  display: block;
  font-size: 23px;
}

.gig__name {
  margin: 0;
  font-size: 16px;
  font-weight: 700;
  color: var(--menu-name);
}

.gig__meta {
  margin: 3px 0 0;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--menu-no);
}

.gig__desc {
  grid-column: 2;
  grid-row: 2;
  margin: 5px 0 0;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--menu-desc);
}

.gig__add {
  grid-column: 3;
  grid-row: 1 / span 2;
  align-self: center;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--menu-no);
  border: 1px solid var(--menu-no);
  border-radius: 5px;
  padding: 8px 12px;
  transition: background-color .18s ease, color .18s ease;
}

/* Tint the resting border back so it reads as a quiet action, not a field. */
@supports (color: color-mix(in srgb, red, blue)) {
  .gig__add { border-color: color-mix(in srgb, var(--menu-no) 45%, transparent); }
}

.gig__add:hover {
  background: var(--menu-no);
  border-color: var(--menu-no);
  color: var(--menu-bg);
}

.gig__add-glyph { font-size: 13px; line-height: 1; }

/* Nothing on the books — a gig list has to read well empty. */
.gigs__empty {
  margin: 8px 0 0;
  font-size: 15.5px;
  line-height: 1.7;
  color: var(--menu-desc);
}

.gigs__empty a {
  color: var(--menu-no);
  text-decoration-color: var(--menu-row);
  text-underline-offset: 3px;
}

@media (max-width: 560px) {
  .gig { grid-template-columns: 42px 1fr; }

  /* The button drops under the copy rather than squeezing the title. */
  .gig__add {
    grid-row: auto;
    grid-column: 2;
    justify-self: start;
    margin-top: 10px;
  }
}

/* --------------------------------------------------------------------------
   11. Reviews (A-side)
   -------------------------------------------------------------------------- */

.reviews__rating {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--ink-3);
}

.reviews__rating .stars { letter-spacing: 3px; }

.section-head--reviews .section-title { margin-bottom: 16px; }

.quotes {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr));
  gap: 18px;
  margin-bottom: 40px;
}

.quote {
  margin: 0;
  padding: 26px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
}

.quote__text {
  margin: 0;
  font-size: 15px;
  line-height: 1.65;
  color: var(--ink-2);
}

.quote__by {
  margin-top: auto;
  font-weight: 700;
  font-size: 11.5px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ink);
}

.quote__by span { font-weight: 600; color: var(--ink-3); }

/* One card is pulled out as a full-navy feature. */
.quote--feature {
  background: #15315E;
  border-color: transparent;
}

.quote--feature .stars { color: #F2C879; }

.quote--feature .quote__text {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  letter-spacing: -.01em;
  font-size: 21px;
  line-height: 1.45;
  color: #FAF6EE;
}

.quote--feature .quote__by { color: #CFBA85; }
.quote--feature .quote__by span { color: #7E93BE; }

.u-center { text-align: center; }

/* --------------------------------------------------------------------------
   12. Soft opening (B-side)
   -------------------------------------------------------------------------- */

.soft-opening { text-align: center; }

.soft-opening .section-title { margin-bottom: 18px; }

.soft-opening__text {
  margin: 0 0 32px;
  font-size: 16px;
  line-height: 1.75;
  color: var(--ink-2);
}

.soft-opening .cta-row { justify-content: center; }

/* --------------------------------------------------------------------------
   13. Gallery
   -------------------------------------------------------------------------- */

.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(230px, 100%), 1fr));
  gap: 18px;
}

.polaroid {
  margin: 0;
  background: var(--surface);
  border: 1px solid var(--polaroid-line);
  border-radius: 10px;
  padding: 8px 8px 12px;
}

:root[data-side='mas']  { --polaroid-line: rgba(21, 49, 94, .12); }
:root[data-side='pops'] { --polaroid-line: rgba(242, 237, 226, .1); }

/* The B-side frames are darker than its cards and carry no caption rail. */
:root[data-side='pops'] .polaroid {
  background: #0D111A;
  padding: 8px;
}

.polaroid__media,
.polaroid img {
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  display: block;
  border-radius: 6px;
  background: var(--photo-bg);
}

.polaroid--wide .polaroid__media,
.polaroid--wide img { aspect-ratio: 4 / 3; }

.polaroid__cap {
  margin: 10px 2px 0;
  font-weight: 700;
  font-size: 10.5px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-3);
  text-align: center;
}

/* --------------------------------------------------------------------------
   14. Visit
   -------------------------------------------------------------------------- */

.visit__inner {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(380px, 100%), 1fr));
  gap: clamp(32px, 5vw, 64px);
  align-items: center;
}

.visit__map {
  display: block;
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid var(--map-line);
  box-shadow: var(--map-shadow);
}

:root[data-side='mas']  { --map-line: rgba(21, 49, 94, .16);   --map-shadow: 0 20px 44px rgba(21, 49, 94, .1); }
:root[data-side='pops'] { --map-line: rgba(242, 237, 226, .14); --map-shadow: 0 20px 44px rgba(0, 0, 0, .4); }

.visit__map img {
  width: 100%;
  display: block;
  object-fit: cover;
  aspect-ratio: 1.2 / 1;
  background: var(--photo-bg);
}

:root[data-side='pops'] .visit__map img {
  filter: brightness(.82) saturate(.8) contrast(1.05);
}

.visit .section-title { margin-bottom: 26px; }

.visit__label {
  margin: 0 0 5px;
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--ink-3);
}

.visit__label--hours { margin-bottom: 12px; }

.visit__text {
  margin: 0 0 26px;
  font-size: 16.5px;
  line-height: 1.6;
  color: var(--ink-2);
}

.visit__note {
  margin: 0 0 18px;
  font-size: 15.5px;
  line-height: 1.7;
  color: var(--ink-2);
}

.visit__flag {
  margin: 0;
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--accent);
}

.hours {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 7px 28px;
  max-width: 340px;
  font-size: 15px;
  color: var(--ink-2);
}

.hours__day { font-weight: 700; color: var(--ink); }

/* Holiday hours sit under the weekly table as a second, shorter list. */
.hours--special { margin-top: 18px; }

.hours__why {
  margin-left: 8px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink-3);
}

.hours__time--closed { color: #A2563E; font-weight: 600; }

/* --------------------------------------------------------------------------
   15. Flip promo
   -------------------------------------------------------------------------- */

.flip-promo {
  padding-block: clamp(56px, 7vw, 96px);
  text-align: center;
  background: var(--promo-bg);
}

:root[data-side='mas']  { --promo-bg: #15315E; }
:root[data-side='pops'] { --promo-bg: #0D111A; }

.flip-promo--pops { border-top: 1px solid rgba(217, 160, 72, .3); }

.flip-promo__eyebrow {
  margin: 0 0 14px;
  font-family: var(--eyebrow-font);
  font-weight: var(--eyebrow-weight);
  font-size: var(--eyebrow-size);
  letter-spacing: var(--eyebrow-tracking);
  text-transform: var(--eyebrow-transform);
  color: var(--promo-eyebrow);
}

:root[data-side='mas']  { --promo-eyebrow: #CFBA85; --promo-title: #FAF6EE; --promo-text: #C9D6EC; }
:root[data-side='pops'] { --promo-eyebrow: #D9A048; --promo-title: #F2EDE2; --promo-text: #C3CADA; }

.flip-promo__title {
  margin: 0 0 18px;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  color: var(--promo-title);
  text-wrap: balance;
}

.flip-promo--mas  .flip-promo__title { font-size: clamp(32px, 4.4vw, 52px); letter-spacing: -.01em; }
.flip-promo--pops .flip-promo__title { font-size: clamp(34px, 4.6vw, 56px); }

.flip-promo__text {
  margin: 0 0 32px;
  font-size: 16px;
  line-height: 1.75;
  color: var(--promo-text);
}

.flip-promo__btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 15px 30px;
  border: none;
  border-radius: 6px;
  font-family: 'Libre Franklin', sans-serif;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background-color .2s ease;
  background: var(--promo-btn-bg);
  color: var(--promo-btn-ink);
}

.flip-promo__btn:hover { background: var(--promo-btn-hov); }

:root[data-side='mas']  { --promo-btn-bg: #8F6F2E; --promo-btn-hov: #7A5E26; --promo-btn-ink: #FAF6EE; }
:root[data-side='pops'] { --promo-btn-bg: #FAF6EE; --promo-btn-hov: #E9E2D2; --promo-btn-ink: #15315E; }

.flip-promo__btn .glyph { font-size: 17px; }

/* --------------------------------------------------------------------------
   16. Footer
   -------------------------------------------------------------------------- */

.site-footer {
  background: var(--footer-bg);
  color: #F2EDE2;
}

:root[data-side='mas']  { --footer-bg: #10243B; --footer-rule: #15315E; --footer-line: rgba(242, 237, 226, .16); --footer-dim: rgba(242, 237, 226, .7); --footer-label: rgba(242, 237, 226, .55); }
:root[data-side='pops'] { --footer-bg: #0B0E15; --footer-rule: #D9A048; --footer-line: rgba(242, 237, 226, .14); --footer-dim: rgba(242, 237, 226, .7); --footer-label: rgba(242, 237, 226, .5); }

.site-footer__rule { height: 2px; background: var(--footer-rule); }
.site-footer--pops .site-footer__rule { opacity: .7; }

.footer__grid {
  max-width: 1180px;
  margin: 0 auto;
  padding: clamp(48px, 6vw, 72px) clamp(16px, 3.5vw, 40px) 26px;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
  gap: clamp(28px, 4vw, 48px);
}

.footer__brand {
  display: flex;
  gap: 16px;
  align-items: flex-start;
}

.footer__seal {
  width: 64px;
  height: 64px;
  flex: none;
  color: #F2EDE2;
}

.footer__name {
  display: flex;
  flex-direction: column;
  line-height: 1;
  margin-bottom: 12px;
}

.footer__word {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: 28px;
  color: var(--footer-word);
}

.footer__sub {
  margin-top: 4px;
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .34em;
  color: var(--footer-sub);
}

.site-footer--mas  { --footer-word: #FAF6EE; --footer-sub: #7FA0E0; }
.site-footer--pops { --footer-word: #E9BE7A; --footer-sub: #D9A048; }

.site-footer--mas .footer__word { letter-spacing: -.01em; }

.site-footer--pops .footer__sub {
  font-family: 'Anton', sans-serif;
  font-weight: 400;
  font-size: 12px;
  letter-spacing: .3em;
}

.footer__tagline {
  margin: 0;
  max-width: 30ch;
  font-size: 14px;
  line-height: 1.65;
  color: var(--footer-dim);
}

.footer__label {
  margin: 0 0 14px;
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--footer-label);
}

.footer__phone {
  display: inline-block;
  margin-bottom: 8px;
  font-size: 20px;
  font-weight: 700;
  color: #F2EDE2;
  text-decoration: none;
  transition: opacity .18s ease;
}

.footer__phone:hover { opacity: .75; }

.footer__address {
  margin: 0;
  font-size: 14px;
  line-height: 1.65;
  color: var(--footer-dim);
}

.footer__links {
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.footer__links a {
  font-size: 15px;
  font-weight: 600;
  color: #F2EDE2;
  text-decoration: none;
  transition: opacity .18s ease;
}

.footer__links a:hover { opacity: .7; }

.footer__aside {
  margin: 12px 0 0;
  max-width: 30ch;
  font-size: 12.5px;
  line-height: 1.55;
  color: rgba(242, 237, 226, .45);
}

.footer__base {
  max-width: 1180px;
  margin: 0 auto;
  padding: 20px clamp(16px, 3.5vw, 40px);
  border-top: 1px solid var(--footer-line);
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: space-between;
}

.footer__base p {
  margin: 0;
  font-size: 13px;
  color: var(--footer-label);
}

/* --------------------------------------------------------------------------
   17. Flip transition

   A record spins up over the page while the two sides swap underneath.
   -------------------------------------------------------------------------- */

.flip-overlay {
  position: fixed;
  inset: 0;
  z-index: 300;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
}

.flip-overlay[hidden] { display: none; }

.flip-overlay__scrim {
  position: absolute;
  inset: 0;
  background: #0b0e15;
  animation: mrFade .8s ease both;
}

.flip-overlay__record {
  position: relative;
  width: min(56vw, 400px);
  aspect-ratio: 1;
  border-radius: 50%;
  background: repeating-radial-gradient(circle, #0a0c11 0 1px, #15171f 2px 4px);
  box-shadow: 0 0 60px rgba(217, 160, 72, .4);
  animation: mrFlip .8s cubic-bezier(.5, 0, .5, 1) both;
}

.flip-overlay__record .record__sheen {
  background: conic-gradient(from 210deg,
    transparent 0deg, rgba(255, 255, 255, .12) 40deg, transparent 90deg);
}

.flip-overlay__record .record__label   { inset: 38%; background: #D9A048; }
.flip-overlay__record .record__spindle { inset: 47%; }

/* --------------------------------------------------------------------------
   18. Responsive & motion preferences
   -------------------------------------------------------------------------- */

@media (max-width: 720px) {
  .site-header__inner {
    justify-content: center;
    row-gap: 12px;
  }

  .brand { margin-right: auto; }

  /* Give the links their own full-width row so they never crowd the switch. */
  .nav {
    order: 3;
    width: 100%;
    justify-content: space-between;
    gap: 12px;
    padding-top: 4px;
    border-top: 1px solid var(--line);
  }

  .nav__link { font-size: 13px; }

  .flip-btn {
    padding: 9px 13px;
    font-size: 10.5px;
    letter-spacing: .12em;
  }

  .section,
  .hero { scroll-margin-top: 128px; }

  .footer__base { justify-content: flex-start; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  .hero__copy,
  .hero__media,
  .record--now,
  .turntable__record,
  .tonearm,
  .marquee__track,
  .flip-overlay__scrim,
  .flip-overlay__record {
    animation: none !important;
  }

  /* The tonearm animates in from -26deg; without the animation it needs to
     start where it lands. */
  .tonearm { transform: rotate(0deg); }

  .btn,
  .flip-btn,
  .flip-promo__btn,
  .nav__link,
  .footer__phone,
  .footer__links a,
  .skip-link { transition: none; }
}

/* ==========================================================================
   19. Side themes as classes

   The home page switches sides on <html data-side>. The menu and calendar
   pages show both venues on one page, so the same token sets are available as
   classes to scope a band to either palette.
   ========================================================================== */

.theme-pops {
  --bg: #12161F; --bg-alt: #171C28; --surface: #1B2130;
  --ink: #F2EDE2; --ink-2: #C3CADA; --ink-3: #8D98B4;
  --line: rgba(242, 237, 226, .12); --hairline: rgba(242, 237, 226, .08);
  --accent: #D9A048; --accent-2: #E9BE7A; --focus: #E9BE7A;
  --eyebrow-color: #D9A048; --eyebrow-font: 'Anton', sans-serif; --eyebrow-weight: 400;
  --eyebrow-size: 12px; --eyebrow-tracking: .24em; --eyebrow-transform: none;
  --btn-bg: #D9A048; --btn-bg-hov: #E9BE7A; --btn-ink: #15131A;
  --ghost-line: rgba(242, 237, 226, .35); --ghost-line-hov: #F2EDE2;
  --photo-bg: #10141C;
  --menu-bg: #1B2130; --menu-line: rgba(217, 160, 72, .25); --menu-rule: rgba(217, 160, 72, .3); --menu-row: rgba(242, 237, 226, .12);
  --menu-eyebrow: #E9BE7A; --menu-title: #F2EDE2; --menu-note: #D9A048; --menu-no: #D9A048; --menu-name: #F2EDE2; --menu-desc: #9FAAC6;
  background: var(--bg);
  color: var(--ink-2);
}

/* --------------------------------------------------------------------------
   20. Sticky phone actions

   The three things a phone visitor wants — call, directions, the menu — in
   thumb reach on every scroll position. Desktop never sees it.
   -------------------------------------------------------------------------- */

.quick {
  display: none;
}

@media (max-width: 719px) {
  .quick {
    position: fixed;
    left: 0; right: 0; bottom: 0;
    z-index: 90;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    background: var(--header-bg);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    border-top: 1px solid var(--line);
    padding-bottom: env(safe-area-inset-bottom);
  }

  .quick__btn {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    min-height: 56px;
    padding-top: 9px;
    color: var(--ink);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    text-decoration: none;
  }

  .quick__btn svg { width: 20px; height: 20px; }

  /* room for the bar */
  .site-footer { padding-bottom: 64px; }
}

/* --------------------------------------------------------------------------
   21. Open-now badge (home header) and tonight line (B-side hero)
   -------------------------------------------------------------------------- */

.open-badge {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-left: 4px;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--ink-3);
  white-space: nowrap;
}

.open-badge[hidden] { display: none; }

.open-badge::before {
  content: '';
  width: 8px; height: 8px;
  border-radius: 50%;
  background: #B0691B;
}

.open-badge.is-open::before { background: #2F7A57; }

@media (max-width: 899px) { .open-badge { display: none; } }

.hero__tonight {
  margin: 14px 0 0;
  font-size: 14px;
  font-weight: 600;
  color: var(--ink-3);
}

.hero__tonight strong { color: var(--accent); font-weight: 700; }

/* --------------------------------------------------------------------------
   22. Inner pages — menu and calendar
   -------------------------------------------------------------------------- */

.page-head {
  padding: clamp(40px, 6vw, 72px) 0 clamp(24px, 3vw, 36px);
  text-align: center;
}

.page-head .section-title { margin-bottom: 14px; }

.page-head__lede {
  margin: 0 auto;
  max-width: 54ch;
  font-size: clamp(15px, 1.5vw, 17px);
  line-height: 1.65;
  color: var(--ink-2);
}

.jump {
  display: flex;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 22px;
}

.jump__link {
  padding: 9px 16px;
  border: 1px solid var(--ghost-line);
  border-radius: 999px;
  color: var(--ink);
  font-size: 13px;
  font-weight: 700;
  text-decoration: none;
}

.jump__link:hover { border-color: var(--ink); }

.nav__link.is-current { color: var(--ink); text-decoration: underline; text-underline-offset: 6px; text-decoration-color: var(--accent); }

/* ── menu page ── */

.venue { padding-block: clamp(48px, 6vw, 88px); scroll-margin-top: 84px; }

.venue__head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-bottom: clamp(24px, 3vw, 36px);
  padding-bottom: 18px;
  border-bottom: 1px solid var(--line);
}

.venue__meta {
  margin: 0;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--ink-3);
}

.mside { margin-bottom: clamp(36px, 4.5vw, 56px); }
.mside:last-child { margin-bottom: 0; }

.mside__title {
  margin: 0 0 18px;
  font-family: var(--eyebrow-font);
  font-weight: var(--eyebrow-weight);
  font-size: 12px;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: var(--eyebrow-color);
}

.mcols {
  display: grid;
  grid-template-columns: repeat(var(--mcols, 3), minmax(0, 1fr));
  gap: clamp(20px, 3vw, 36px);
  align-items: start;
}

@media (max-width: 899px) { .mcols { grid-template-columns: repeat(min(var(--mcols, 3), 2), minmax(0, 1fr)); } }
@media (max-width: 599px) { .mcols { grid-template-columns: 1fr; } }

.msec { margin-bottom: 26px; break-inside: avoid; }
.msec:last-child { margin-bottom: 0; }

.msec__title {
  margin: 0 0 6px;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: 24px;
  color: var(--ink);
}

.msec__note {
  margin: 0 0 12px;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--ink-3);
}

.msec--boxed {
  padding: 16px 18px;
  border: 1px solid var(--accent);
  border-radius: 10px;
}

.msec--boxed.msec--dashed { border-style: dashed; }

.mitem { padding: 10px 0; border-bottom: 1px solid var(--line); }
.mitem:last-child { border-bottom: 0; }

.mitem__line {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin: 0;
  font-size: 15.5px;
  font-weight: 700;
  color: var(--ink);
}

.mitem__price {
  flex: none;
  font-variant-numeric: tabular-nums;
  color: var(--accent-2);
}

.mitem__desc {
  margin: 3px 0 0;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--ink-2);
}

.mitem__addons {
  margin: 3px 0 0;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--ink-3);
  font-style: italic;
}

.mitem__new {
  margin-left: 8px;
  padding: 1px 6px;
  border-radius: 3px;
  background: var(--accent);
  color: var(--bg);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .1em;
  vertical-align: 0.15em;
}

.mitem--boxed {
  margin: 8px 0;
  padding: 12px 14px;
  border: 1px solid var(--accent);
  border-radius: 8px;
}

.mitem--boxed.mitem--dashed { border-style: dashed; }

.mlist {
  margin: 0;
  font-size: 13.5px;
  line-height: 1.7;
  color: var(--ink-2);
}

.mlist__sep { color: var(--ink-3); }
.mlist__price { font-weight: 700; color: var(--ink); font-variant-numeric: tabular-nums; }

.menu-foot {
  margin-top: clamp(28px, 3vw, 40px);
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--ink-3);
}

.msec--sub .msec__title { font-size: 15px; font-family: 'Libre Franklin', sans-serif; font-style: normal; font-weight: 700; letter-spacing: .04em; }

/* ── calendar page ── */

.legend {
  display: flex;
  justify-content: center;
  gap: 18px;
  flex-wrap: wrap;
  margin: 18px 0 0;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-3);
}

.legend__item { display: inline-flex; align-items: center; gap: 7px; }
.legend__dot { width: 10px; height: 10px; border-radius: 50%; }
.legend__dot--mas { background: #15315E; }
.legend__dot--pops { background: #D9A048; }

.months {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(420px, 100%), 1fr));
  gap: clamp(20px, 3vw, 36px);
  margin-bottom: clamp(40px, 5vw, 64px);
}

.month__name {
  margin: 0 0 12px;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: 24px;
  color: var(--ink);
}

.mgrid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 1px;
  background: var(--line);
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
}

.mgrid__dow {
  padding: 7px 4px;
  background: var(--bg-alt);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .1em;
  text-align: center;
  color: var(--ink-3);
}

.mgrid__day {
  min-height: 72px;
  padding: 6px;
  background: var(--surface);
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.mgrid__day--pad { background: var(--bg-alt); }
.mgrid__day--past { opacity: .55; }

.mgrid__num {
  width: 24px; height: 24px;
  display: grid; place-items: center;
  border-radius: 50%;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--ink);
}

.mgrid__day--today .mgrid__num { background: var(--accent); color: var(--bg); }

.evchip {
  display: block;
  padding: 2px 6px;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.35;
  text-decoration: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.evchip--mas  { background: #15315E; color: #FAF6EE; }
.evchip--pops { background: #D9A048; color: #15131A; }

@media (max-width: 599px) {
  .mgrid__day { min-height: 52px; padding: 4px; }
  .evchip { width: 7px; height: 7px; padding: 0; border-radius: 50%; display: inline-block; margin-right: 3px; font-size: 0; }
}

.agenda { display: grid; gap: 10px; }

.agenda__day {
  display: grid;
  grid-template-columns: 74px 1fr;
  gap: 16px;
  padding: 16px 0;
  border-top: 1px solid var(--line);
}

.agenda__date {
  text-align: center;
  line-height: 1.05;
  font-family: 'Anton', sans-serif;
  color: var(--accent);
}

.agenda__dow { display: block; font-size: 11px; letter-spacing: .14em; }
.agenda__num { display: block; font-size: 30px; color: var(--ink); }
.agenda__mon { display: block; font-size: 11px; letter-spacing: .14em; }

.agenda__ev { display: flex; gap: 12px; align-items: baseline; flex-wrap: wrap; padding: 6px 0; }
.agenda__ev + .agenda__ev { border-top: 1px dashed var(--line); }

.agenda__venue {
  flex: none;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
}

.agenda__venue--mas  { background: #15315E; color: #FAF6EE; }
.agenda__venue--pops { background: #D9A048; color: #15131A; }

.agenda__name { margin: 0; font-size: 16px; font-weight: 700; color: var(--ink); flex: 1 1 200px; }
.agenda__time { font-size: 13px; font-weight: 600; color: var(--ink-3); white-space: nowrap; }
.agenda__desc { flex-basis: 100%; margin: 2px 0 0; font-size: 13.5px; line-height: 1.55; color: var(--ink-2); }
.agenda__add { font-size: 12px; font-weight: 700; color: var(--accent-2); text-decoration: none; white-space: nowrap; }
.agenda__add:hover { text-decoration: underline; }

@media (max-width: 480px) {
  .agenda__day { grid-template-columns: 58px 1fr; gap: 12px; }
  .agenda__num { font-size: 26px; }
}

.cal-empty {
  padding: 40px 20px;
  text-align: center;
  color: var(--ink-3);
}

/* --------------------------------------------------------------------------
   23. Calendar page — one month at a time, filtered by brand
   -------------------------------------------------------------------------- */

.cal__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 18px;
}

.cal__nav { display: flex; align-items: center; gap: 6px; }

.cal__arrow {
  width: 40px; height: 40px;
  border: 1px solid var(--ghost-line);
  border-radius: 50%;
  background: none;
  color: var(--ink);
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
}

.cal__arrow:hover { border-color: var(--ink); }
.cal__arrow:disabled { opacity: .3; cursor: default; }

.cal__label {
  min-width: 190px;
  text-align: center;
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-weight: 500;
  font-size: 24px;
  color: var(--ink);
}

.month .month__name { display: none; }   /* the bar carries the name */
.month[hidden] { display: none; }

.seg--cal { display: inline-flex; padding: 3px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); }
.seg--cal .seg__btn {
  min-height: 34px; padding: 0 14px; border: 0; border-radius: 999px; background: none;
  color: var(--ink-3); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer;
}
.seg--cal .seg__btn.is-active { background: var(--ink); color: var(--bg); }

.cal[data-filter="mas"]  [data-venue="pops"], .cal[data-filter="mas"]  .agenda__day:not([data-venues~="mas"]),
.cal[data-filter="pops"] [data-venue="mas"],  .cal[data-filter="pops"] .agenda__day:not([data-venues~="pops"]) { display: none; }

@media (max-width: 599px) { .cal__label { min-width: 0; font-size: 20px; } }

/* --------------------------------------------------------------------------
   24. Photo reel — a horizontal, snap-scrolling strip

   Galleries were stacking nine tall frames on a phone. A reel keeps the
   section one row high everywhere; swipe on touch, arrows on desktop.
   -------------------------------------------------------------------------- */

.reel { position: relative; }

.reel__track {
  display: flex;
  gap: 14px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-padding-inline: clamp(16px, 3.5vw, 40px);
  padding: 4px clamp(16px, 3.5vw, 40px) 14px;
  margin: 0 calc(-1 * clamp(16px, 3.5vw, 40px));
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

.reel__track::-webkit-scrollbar { display: none; }

.reel__item {
  flex: none;
  scroll-snap-align: start;
  height: clamp(200px, 26vw, 300px);
  margin: 0;
  background: var(--surface);
  border: 1px solid var(--polaroid-line);
  border-radius: 10px;
  padding: 6px;
}

.reel__item img {
  display: block;
  height: 100%;
  width: auto;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: 6px;
  background: var(--photo-bg);
}

.reel__item--tall img { aspect-ratio: 3 / 4; }
.reel__item--square img { aspect-ratio: 1; }


/* Tall single images on phones */
@media (max-width: 599px) {
  .memoriam__figure { max-width: 320px; }
  .clip { max-width: 260px; }
  .hero__frame img { max-height: 56vh; }
}

.venue__note { margin: 0 0 clamp(20px, 3vw, 34px); font-family: 'Newsreader', Georgia, serif; font-style: italic; font-size: clamp(19px, 2vw, 23px); color: var(--ink-2); text-align: center; }

/* The line under the gig list — plain links were falling through to browser blue. */
.gigs__subscribe { margin: 20px 0 0; font-size: 14.5px; line-height: 1.55; color: var(--ink-3); }
.gigs__subscribe a { color: var(--accent); font-weight: 600; text-decoration-thickness: 1px; text-underline-offset: 3px; }
.gigs__subscribe a:hover { color: var(--ink); }

/* ── reels: arrows overlay on every width, loop + autoplay handled in JS ── */
.reel__arrows { display: contents; }
.reel__arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 40px; height: 40px;
  border: 1px solid var(--ghost-line);
  border-radius: 50%;
  background: var(--surface);
  color: var(--ink);
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(0,0,0,.18);
  z-index: 2;
}
.reel__arrow[data-reel="prev"] { left: 2px; }
.reel__arrow[data-reel="next"] { right: 2px; }
.reel__arrow:hover { border-color: var(--ink); }
.theme-pops .reel__arrow, .side--pops .reel__arrow { background: #1A1F27; color: #F3EEE2; border-color: rgba(255,255,255,.22); }

/* ── hours: the other side's table is quieter ─────────────────────────── */
.hours--other { opacity: .78; }
.hours--other .hours__day { font-weight: 600; }

/* ── online ordering placeholder ─────────────────────────────────────── */
.btn--soon { cursor: default; opacity: .72; position: relative; }
.btn--soon small { font-size: 11px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; margin-left: 8px; opacity: .8; }
.jump__link.btn--soon small { margin-left: 6px; }

/* The Instagram widget grows after it loads; reserving room keeps a jump to
   the map from landing on the feed instead. */
.feed-embed { min-height: 420px; }
