/* ==========================================================================
   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:         #71809B;
  --line:          rgba(21, 49, 94, .14);
  --hairline:      rgba(21, 49, 94, .1);

  --accent:        #B08A3E;
  --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(-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;
}

/* --------------------------------------------------------------------------
   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;
  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 42s linear infinite;
  will-change: transform;
}

.marquee__run {
  padding: 11px 14px;
  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%;
  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__name--soon { color: #D9A048; }

.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;
  }
}

/* --------------------------------------------------------------------------
   10c. Instagram feed

   Rendered into the same polaroid frames as the galleries, so the feed reads
   as part of the wall rather than a bolted-on widget.
   -------------------------------------------------------------------------- */

.polaroid--link {
  display: block;
  text-decoration: none;
  transition: transform .2s ease, border-color .2s ease;
}

.polaroid--link:hover {
  transform: translateY(-3px);
  border-color: var(--accent);
}

/* The B-side gallery frames carry no caption rail; the feed's date stamps
   need one back. */
:root[data-side='pops'] .polaroid--link { padding: 8px 8px 12px; }

.feed__handle {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
}

.feed__foot {
  margin-top: clamp(28px, 3.5vw, 40px);
  text-align: center;
}

/* Full-bleed container for the Elfsight embeds. The section supplies the
   background and vertical rhythm; the heading and the follow button stay in a
   .wrap so they keep the page's measure, and only the widget runs edge to edge.
   min-height reserves space so a lazy-loading widget doesn't shove the page
   down when it arrives. */
.feed-embed {
  width: 100%;
  min-height: clamp(280px, 26vw, 420px);
}

.feed-embed > div { width: 100%; }

.feed__stale {
  margin: 0 0 clamp(20px, 2.5vw, 28px);
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-3);
}

/* Badges marking what a tile opens: a Reel, or a multi-image carousel. */
.polaroid--link { position: relative; }

.polaroid__play,
.polaroid__stack {
  position: absolute;
  top: 16px;
  right: 16px;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: rgba(10, 12, 17, .58);
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);
  pointer-events: none;
}

/* A play triangle, drawn with borders so it needs no extra element. */
.polaroid__play::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 54%;
  transform: translate(-50%, -50%);
  border-style: solid;
  border-width: 5.5px 0 5.5px 9px;
  border-color: transparent transparent transparent #FFFFFF;
}

/* Two offset squares, for a carousel. */
.polaroid__stack::after,
.polaroid__stack::before {
  content: '';
  position: absolute;
  width: 10px;
  height: 10px;
  border: 1.5px solid #FFFFFF;
  border-radius: 2px;
}

.polaroid__stack::before { top: 8px;  left: 8px;  opacity: .55; }
.polaroid__stack::after  { top: 11px; left: 11px; }

/* --------------------------------------------------------------------------
   10d. Post lightbox

   <dialog> supplies the focus trap, Escape handling and backdrop, so this is
   mostly presentation. Without JS the tiles stay plain links to instagram.com.
   -------------------------------------------------------------------------- */

.lightbox {
  padding: 0;
  border: none;
  background: none;
  max-width: min(94vw, 560px);
  max-height: 94dvh;
  overflow: visible;
  color: var(--ink-2);
}

.lightbox::backdrop {
  background: rgba(8, 10, 15, .82);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

.lightbox__panel {
  position: relative;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 40px 90px rgba(0, 0, 0, .5);
  max-height: 94dvh;
  display: flex;
  flex-direction: column;
}

.lightbox__stage {
  background: var(--photo-bg);
  flex: none;
}

.lightbox__img {
  display: block;
  width: 100%;
  height: auto;
  max-height: 60dvh;
  object-fit: contain;
}

/* Instagram's embed sizes itself; 9/16 is the tallest it goes (a Reel). */
.lightbox__embed {
  width: 100%;
  aspect-ratio: 9 / 16;
  max-height: 72dvh;
  background: #0a0c11;
}

.lightbox__embed iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

.lightbox__meta {
  padding: 22px clamp(18px, 3vw, 26px) clamp(20px, 3vw, 26px);
  overflow-y: auto;
}

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

.lightbox__caption {
  margin: 0 0 18px;
  font-size: 15px;
  line-height: 1.65;
  color: var(--ink-2);
  white-space: pre-line;   /* captions carry their own line breaks */
  overflow-wrap: break-word;
}

.lightbox__caption:empty { display: none; }

.lightbox__link {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--accent);
}

.lightbox__link:hover { text-decoration: underline; text-underline-offset: 3px; }

.lightbox__close,
.lightbox__nav {
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid rgba(255, 255, 255, .22);
  background: rgba(10, 12, 17, .6);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  color: #F2EDE2;
  cursor: pointer;
  border-radius: 50%;
  transition: background-color .18s ease;
}

.lightbox__close:hover,
.lightbox__nav:hover { background: rgba(10, 12, 17, .85); }

.lightbox__close {
  top: 12px;
  right: 12px;
  z-index: 2;
  width: 34px;
  height: 34px;
  font-size: 22px;
  line-height: 1;
  padding-bottom: 3px;
}

.lightbox__nav {
  top: 50%;
  transform: translateY(-50%);
  width: 38px;
  height: 38px;
  font-size: 26px;
  line-height: 1;
  padding-bottom: 4px;
}

.lightbox__nav--prev { left: 10px; }
.lightbox__nav--next { right: 10px; }
.lightbox__nav[hidden] { display: none; }

@media (max-width: 560px) {
  /* Thumbs reach the bottom corners more easily than the middle edges. */
  .lightbox__nav { top: auto; bottom: 14px; transform: none; }
}

/* --------------------------------------------------------------------------
   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;
}

/* Reserved image frames — Pop's Place is mid soft-opening and some of its
   photos haven't been shot yet. These read as deliberate empty frames. */
.slot {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  aspect-ratio: 1 / 1;
  padding: 16px;
  border-radius: 6px;
  background: #10141C;
  box-shadow: inset 0 0 0 1px rgba(217, 160, 72, .16);
  text-align: center;
}

.slot--wide { aspect-ratio: 4 / 3; }

/* Inside a card the frame runs edge to edge, so the card's own clipping
   supplies the corners. */
.card > .slot { border-radius: 0; }

.slot__icon {
  width: 26px;
  height: 26px;
  color: rgba(217, 160, 72, .5);
}

.slot__cap {
  margin: 0;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  line-height: 1.5;
  color: #7C8AA6;
}

/* --------------------------------------------------------------------------
   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); }

.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: #B08A3E; --promo-btn-hov: #96742F; --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; }
}
