/* ==========================================================================
   Pressed Drive-Thru Cafe — bespoke theme
   Ported from Round-2 mockup 3 (storage/app/public/mockup3/).

   Everything is namespaced `pr-` / `--pr-*` so the framework stylesheet
   (resources/css/app.css, which also ships .btn / .hero) can never leak in.
   Palettes are selected by `data-palette` on <html>; the Branding studio
   writes that attribute plus optional colour/font overrides in the layout.
   ========================================================================== */

/* ============ PALETTES ============ */
/* Default = Graphite & Gold (client pick, 2026-08). All graphite variants
   share the same grey base and differ only in the accent. */
:root,
[data-palette="graphite-gold"] {
  --pr-primary: #4A4A45;
  --pr-primary-deep: #282825;
  --pr-accent: #B08D3C;
  --pr-accent-deep: #86682A;
  --pr-ink: #1C1C1A;
  --pr-paper: #F1F0EC;
  --pr-card: #FFFFFF;
  --pr-on-primary: #F4F3EF;
  --pr-on-accent: #241B06;
}
[data-palette="graphite"] {
  /* Graphite & Sage */
  --pr-primary: #4A4A45;
  --pr-primary-deep: #282825;
  --pr-accent: #6E7E65;
  --pr-accent-deep: #4E5C46;
  --pr-ink: #1C1C1A;
  --pr-paper: #F1F0EC;
  --pr-card: #FFFFFF;
  --pr-on-primary: #F4F3EF;
  --pr-on-accent: #F4F6F1;
}
[data-palette="graphite-terra"] {
  /* Graphite & Terracotta */
  --pr-primary: #4A4A45;
  --pr-primary-deep: #282825;
  --pr-accent: #A8552C;
  --pr-accent-deep: #7E3C1B;
  --pr-ink: #1C1C1A;
  --pr-paper: #F1F0EC;
  --pr-card: #FFFFFF;
  --pr-on-primary: #F4F3EF;
  --pr-on-accent: #FCF2EA;
}
[data-palette="sage"] {
  /* Sage Reset — the mockup-2 favourite, kept as a reference option */
  --pr-primary: #64815A;
  --pr-primary-deep: #43603B;
  --pr-accent: #D97742;
  --pr-accent-deep: #B4551F;
  --pr-ink: #26301F;
  --pr-paper: #F6F3EA;
  --pr-card: #FFFFFF;
  --pr-on-primary: #F8F6EC;
  --pr-on-accent: #33160A;
}

/* Typography roles — overridable per-role from the Branding studio. */
:root {
  --pr-font-display: 'Fraunces', Georgia, serif;
  --pr-font-body: 'Karla', system-ui, sans-serif;
  --pr-font-button: var(--pr-font-body);
  --pr-header-bg: color-mix(in srgb, var(--pr-paper) 92%, transparent);
  --pr-footer-bg: var(--pr-ink);
  --pr-wrap: 1160px;
}

/* ============ BASE ============ */
html { scroll-behavior: smooth; }
body.pr-body {
  font-family: var(--pr-font-body);
  background: var(--pr-paper);
  color: var(--pr-ink);
  line-height: 1.6;
  overflow-x: hidden;
  transition: background .45s ease;
}
/* These resets exist only to neutralise app.css's element-level rules
   (`h1-h6 { color: var(--color-dark); margin-bottom: 1.5rem }`, link colours,
   `p` margins). They MUST NOT outrank the theme's own component classes.
   Writing them as `.pr-body h1` gives (0,1,1), which silently beats every
   single-class rule like `.pr-btn-primary { color }` or
   `.pr-hero-note { margin-top }` — that is what made the nav button black and
   collapsed the hero spacing. `:where()` contributes zero specificity, so
   `.pr-body :where(h1)` is (0,1,0): still ahead of app.css's (0,0,1), but a
   plain component class declared later always wins. */
.pr-body :where(h1, h2, h3, h4) {
  font-family: var(--pr-font-display);
  line-height: 1.06;
  letter-spacing: -0.01em;
  font-weight: 600;
  margin: 0;
  color: inherit;
}
.pr-body :where(h4) { font-family: var(--pr-font-body); line-height: 1.3; }
.pr-body :where(h1, h2) em { font-style: italic; color: var(--pr-primary); font-weight: 640; }
.pr-body :where(img) { max-width: 100%; display: block; }
.pr-body :where(a) { color: inherit; }
.pr-body :where(p) { margin: 0; }
.pr-body :where(ul) { list-style: none; margin: 0; padding: 0; }
.pr-wrap { max-width: var(--pr-wrap); margin: 0 auto; padding: 0 24px; }

/* Buttons — mockup 1's springier treatment, per Mark. */
.pr-btn {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--pr-font-button); font-weight: 700; font-size: 1rem;
  text-decoration: none; padding: 16px 30px; border-radius: 999px;
  transition: transform .18s ease, box-shadow .18s ease, background .3s ease;
  cursor: pointer; border: none;
}
.pr-btn:hover { transform: translateY(-3px) scale(1.02); }
.pr-btn:active { transform: translateY(0) scale(.99); }
.pr-btn-primary { background: var(--pr-primary); color: var(--pr-on-primary); box-shadow: 0 6px 0 var(--pr-primary-deep); }
.pr-btn-primary:hover { box-shadow: 0 9px 0 var(--pr-primary-deep); }
.pr-btn-accent { background: var(--pr-accent); color: var(--pr-on-accent); box-shadow: 0 6px 0 var(--pr-accent-deep); }
.pr-btn-accent:hover { box-shadow: 0 9px 0 var(--pr-accent-deep); }
.pr-btn-outline { background: transparent; color: var(--pr-ink); border: 3px solid var(--pr-ink); }
.pr-btn-outline:hover { background: var(--pr-ink); color: var(--pr-paper); }
.pr-btn-outline.pr-light { color: #fff; border-color: #fff; }
.pr-btn-outline.pr-light:hover { background: #fff; color: var(--pr-primary-deep); }

.pr-reveal { opacity: 0; transform: translateY(30px); transition: opacity .7s ease, transform .7s ease; }
.pr-reveal.pr-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .pr-reveal { opacity: 1; transform: none; transition: none; }
}

.pr-skip {
  position: absolute; left: -9999px; top: 0; z-index: 900;
  background: var(--pr-ink); color: var(--pr-paper); padding: 12px 20px;
  font-weight: 700; text-decoration: none; border-radius: 0 0 12px 0;
}
.pr-skip:focus { left: 0; }

/* ============ TICKER ============ */
.pr-ticker {
  background: var(--pr-ink); color: var(--pr-paper);
  overflow: hidden; white-space: nowrap;
  font-weight: 700; font-size: .78rem; letter-spacing: .18em;
  padding: 9px 0; transition: background .45s ease;
}
.pr-ticker-track { display: inline-block; animation: pr-tick 30s linear infinite; }
.pr-ticker-track span { margin: 0 20px; }
.pr-ticker-track .pr-dot { color: var(--pr-accent); }
@keyframes pr-tick { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .pr-ticker-track { animation: none; } }

/* ============ HEADER ============ */
header.pr-site {
  position: sticky; top: 0; z-index: 300;
  background: var(--pr-header-bg);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid color-mix(in srgb, var(--pr-ink) 18%, transparent);
  transition: background .45s ease;
}
.pr-site-bar { display: flex; align-items: center; gap: 26px; padding: 12px 24px; max-width: 1240px; margin: 0 auto; }
.pr-brand { display: flex; align-items: center; gap: 13px; text-decoration: none; }
.pr-brand img { width: 54px; height: 54px; border-radius: 50%; background: #fff; border: 2px solid var(--pr-ink); object-fit: contain; }
.pr-brand-name { font-family: var(--pr-font-display); font-weight: 700; font-size: 1.5rem; }
.pr-brand-sub { display: block; font-family: var(--pr-font-body); font-size: .6rem; font-weight: 700; letter-spacing: .32em; opacity: .7; margin-top: -3px; }
nav.pr-main { display: flex; gap: 26px; margin-left: auto; }
nav.pr-main a { text-decoration: none; font-weight: 600; font-size: .96rem; border-bottom: 2px solid transparent; padding-bottom: 2px; transition: border-color .2s; }
nav.pr-main a:hover, nav.pr-main a:focus-visible { border-color: var(--pr-accent); }
.pr-site-cta .pr-btn { padding: 11px 22px; font-size: .92rem; }
.pr-burger {
  display: none; margin-left: auto; background: none; border: 2px solid var(--pr-ink);
  border-radius: 12px; width: 42px; height: 42px; cursor: pointer;
  font-size: 1.1rem; line-height: 1; color: var(--pr-ink);
}
@media (max-width: 900px) {
  nav.pr-main { display: none; }
  .pr-site-cta { margin-left: auto; }
  .pr-burger { display: block; margin-left: 10px; }
}
@media (max-width: 640px) {
  .pr-site-bar { gap: 12px; padding: 10px 14px; }
  .pr-brand img { width: 42px; height: 42px; }
  .pr-brand-name { font-size: 1.1rem; }
  .pr-site-cta .pr-btn { padding: 9px 16px; font-size: .8rem; }
}

/* mobile drawer */
.pr-mobile {
  position: fixed; inset: 0; z-index: 400; display: none;
  background: var(--pr-ink); color: var(--pr-paper);
  padding: 90px 28px 28px; flex-direction: column; gap: 4px;
}
.pr-mobile.pr-open { display: flex; }
.pr-mobile a {
  text-decoration: none; font-family: var(--pr-font-display); font-size: 1.6rem;
  font-weight: 620; padding: 12px 0;
  border-bottom: 1px solid color-mix(in srgb, var(--pr-paper) 18%, transparent);
}
.pr-mobile .pr-mobile-close {
  position: absolute; top: 22px; right: 22px; background: none; border: none;
  color: var(--pr-paper); font-size: 2rem; line-height: 1; cursor: pointer;
}

/* ============ VIDEO HERO ============ */
.pr-hero {
  position: relative; overflow: hidden;
  min-height: min(88vh, 780px); display: grid; align-items: center;
  color: #fff;
}
.pr-hero video, .pr-hero .pr-hero-still {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; transform: scale(1.04); filter: saturate(.92);
}
[data-palette^="graphite"] .pr-hero video,
[data-palette^="graphite"] .pr-hero .pr-hero-still { filter: saturate(.35) contrast(1.02); }
.pr-hero .pr-shade {
  position: absolute; inset: 0;
  background: linear-gradient(100deg, rgba(12,12,11,.78) 0%, rgba(12,12,11,.55) 48%, rgba(12,12,11,.30) 100%);
}
.pr-hero-inner { position: relative; max-width: var(--pr-wrap); margin: 0 auto; padding: 110px 24px 130px; width: 100%; }
.pr-kicker {
  display: inline-flex; align-items: center; gap: 10px;
  font-weight: 700; font-size: .74rem; letter-spacing: .26em; text-transform: uppercase;
  color: #fff; border: 1.5px solid rgba(255,255,255,.5);
  border-radius: 999px; padding: 8px 18px; margin-bottom: 28px;
  background: rgba(255,255,255,.1); backdrop-filter: blur(4px);
}
.pr-hero h1 { font-size: clamp(2.5rem, min(9vw, 5.4vw + 1rem), 4.5rem); max-width: 17ch; }
.pr-hero h1 em { color: color-mix(in srgb, var(--pr-accent) 65%, #fff); }
.pr-hero h1 .pr-line2 { display: block; }
.pr-rotator { display: inline-block; font-style: italic; animation: pr-wordin .5s ease; }
@keyframes pr-wordin { 0% { opacity: 0; transform: translateY(.3em); } 100% { opacity: 1; transform: none; } }
.pr-hero p.pr-lead { font-size: 1.15rem; max-width: 30rem; margin: 22px 0 32px; opacity: .92; }
.pr-hero-ctas { display: flex; gap: 14px; flex-wrap: wrap; }
.pr-hero-note { margin-top: 28px; font-size: .9rem; font-weight: 600; opacity: .8; }
.pr-hero .pr-scrollcue {
  position: absolute; left: 50%; bottom: 22px; transform: translateX(-50%);
  font-size: .7rem; font-weight: 700; letter-spacing: .3em; text-transform: uppercase; opacity: .65;
  animation: pr-cue 2.2s ease infinite;
}
@keyframes pr-cue { 0%,100% { transform: translate(-50%, 0); } 50% { transform: translate(-50%, 7px); } }
@media (max-width: 700px) {
  .pr-hero { min-height: 78vh; }
  .pr-hero-inner { padding: 80px 20px 110px; text-align: center; }
  .pr-hero h1 { margin-inline: auto; }
  .pr-hero p.pr-lead { margin-inline: auto; }
  .pr-hero-ctas { justify-content: center; }
}

/* accent marquee */
.pr-marquee {
  background: var(--pr-accent); color: var(--pr-on-accent);
  overflow: hidden; white-space: nowrap;
  font-family: var(--pr-font-display); font-weight: 650; font-style: italic;
  font-size: 1.15rem; letter-spacing: .04em;
  padding: 13px 0; border-block: 2px solid var(--pr-ink);
  transition: background .45s ease;
}
.pr-marquee .pr-ticker-track { animation-duration: 26s; }

/* ============ SECTIONS ============ */
.pr-body section.pr-section { padding: 84px 0; }
.pr-sec-head { text-align: center; max-width: 44rem; margin: 0 auto 48px; }
.pr-eyebrow {
  display: inline-block; font-weight: 700; font-size: .72rem;
  letter-spacing: .3em; text-transform: uppercase;
  color: var(--pr-primary-deep); margin-bottom: 16px;
}
.pr-eyebrow::before, .pr-eyebrow::after { content: '·'; margin: 0 10px; color: var(--pr-accent-deep); }
.pr-sec-head h2 { font-size: clamp(2rem, 4.2vw, 3.1rem); }
.pr-sec-head p { margin-top: 14px; font-size: 1.05rem; opacity: .78; }

/* ============ WHAT'S NEW ============ */
.pr-body section.pr-whatsnew { padding: 60px 0; }
.pr-wn-rail { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.pr-wn-card {
  display: flex; align-items: center; gap: 16px; text-decoration: none;
  background: var(--pr-card); border: 2px solid var(--pr-ink); border-radius: 999px;
  padding: 12px 24px 12px 12px;
  transition: transform .2s ease, box-shadow .2s ease;
}
.pr-wn-card:hover { transform: translateY(-4px); box-shadow: 6px 6px 0 var(--pr-accent); }
.pr-wn-card .pr-thumb {
  width: 62px; height: 62px; border-radius: 50%; overflow: hidden; flex: none;
  border: 2px solid var(--pr-ink); background: linear-gradient(150deg, var(--pr-primary), var(--pr-primary-deep));
  display: grid; place-items: center; font-size: 1.6rem;
}
.pr-wn-card .pr-thumb img { width: 100%; height: 100%; object-fit: cover; }
.pr-wn-card .pr-tag { font-size: .62rem; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: var(--pr-accent-deep); }
.pr-wn-card h3 { font-size: 1.02rem; line-height: 1.2; }
@media (max-width: 900px) { .pr-wn-rail { grid-template-columns: 1fr; max-width: 430px; margin-inline: auto; } }

/* ============ MENU SHOWCASE (flip-card rail) ============ */
.pr-body section.pr-showcase { padding: 20px 0 84px; }
.pr-showcase { position: relative; }
.pr-rail-wrap { position: relative; }

/* DESKTOP/TABLET: a plain grid — every card is visible, nothing to scroll.
   MOBILE (<700px): the horizontal swipe rail below takes over.
   The rail used to run at all widths with ← → buttons, but a programmatic
   `scrollBy({behavior:'smooth'})` is a no-op on a `scroll-snap-type` container
   in Chrome (behavior:'auto' moves it fine), so those arrows never worked —
   in the mockup either. They are gone; touch swipe needs no buttons. */
.pr-rail {
  display: grid;
  /* auto-fit, not a fixed column count: below ~300px a card's back face starts
     wrapping item names onto two lines and the list has to scroll, which is
     miserable on a card you have to flip. Let the column count drop instead. */
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 26px;
  max-width: min(1440px, 100%);
  margin: 0 auto;
  padding: 10px 24px 26px;
}
.pr-fcard {
  aspect-ratio: 2 / 3;
  perspective: 1400px; cursor: pointer;
  position: relative; border: none; background: none; padding: 0; text-align: inherit;
  font: inherit; color: inherit;
}
@media (max-width: 699px) {
  .pr-rail {
    display: flex; grid-template-columns: none;
    overflow-x: auto; scroll-snap-type: x proximity;
    gap: 16px; padding: 10px 24px 26px; max-width: none;
    scrollbar-width: none;
  }
  .pr-rail::-webkit-scrollbar { display: none; }
  .pr-fcard { flex: 0 0 76vw; scroll-snap-align: center; }
}
.pr-fcard .pr-flip {
  position: absolute; inset: 0; transform-style: preserve-3d;
  transition: transform .62s cubic-bezier(.34,1.3,.5,1);
}
.pr-fcard.pr-flipped .pr-flip { transform: rotateY(180deg); }
.pr-face {
  position: absolute; inset: 0; backface-visibility: hidden; -webkit-backface-visibility: hidden;
  border: 2px solid var(--pr-ink); border-radius: 26px; overflow: hidden;
  background: var(--pr-card); display: flex; flex-direction: column;
}
.pr-fcard:hover .pr-face { box-shadow: 8px 8px 0 var(--pr-accent); }
.pr-face.pr-front .pr-ph { flex: 1 1 auto; overflow: hidden; position: relative; min-height: 0; }
.pr-face.pr-front .pr-ph img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s ease; }
.pr-fcard:hover .pr-face.pr-front .pr-ph img { transform: scale(1.05); }
.pr-face.pr-front .pr-ph.pr-tile { display: grid; place-items: center; background: linear-gradient(150deg, var(--pr-primary), var(--pr-primary-deep)); }
/* Monochrome glyphs (⚡, ☕) render near-black and vanish on the dark tile, so
   the emoji sits on a light disc — same treatment as the full-menu cards. */
.pr-face.pr-front .pr-ph.pr-tile .pr-ico {
  width: 132px; height: 132px; border-radius: 50%;
  display: grid; place-items: center; font-size: 3.6rem; line-height: 1;
  background: color-mix(in srgb, var(--pr-on-primary) 94%, transparent);
  box-shadow: 0 8px 24px rgba(0,0,0,.25);
}
@media (max-width: 700px) {
  .pr-face.pr-front .pr-ph.pr-tile .pr-ico { width: 104px; height: 104px; font-size: 2.8rem; }
}
.pr-face.pr-front .pr-bar {
  flex: none; display: grid; grid-template-columns: 1fr auto;
  align-items: baseline; gap: 3px 12px;
  padding: 15px 20px 16px; border-top: 2px solid var(--pr-ink); background: var(--pr-card);
}
.pr-face.pr-front h3 { grid-column: 1 / -1; font-size: 1.3rem; }
.pr-face.pr-front .pr-cnt { grid-column: 1; font-size: .78rem; font-weight: 700; opacity: .55; }
.pr-face.pr-front .pr-flipcue { grid-column: 2; font-size: .72rem; font-weight: 700; letter-spacing: .14em; color: var(--pr-primary-deep); white-space: nowrap; }
.pr-badge {
  position: absolute; top: 16px; left: 16px; z-index: 2;
  font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  background: var(--pr-card); color: var(--pr-ink); border: 2px solid var(--pr-ink);
  border-radius: 999px; padding: 6px 14px;
}
.pr-badge.pr-live { background: var(--pr-accent); color: var(--pr-on-accent); }
.pr-face.pr-back { transform: rotateY(180deg); padding: 26px 26px 22px; }
.pr-face.pr-back h3 { font-size: 1.35rem; margin-bottom: 4px; }
.pr-face.pr-back .pr-win { font-size: .74rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--pr-accent-deep); margin-bottom: 16px; }
.pr-face.pr-back ul { flex: 1; overflow: auto; min-height: 0; }
.pr-face.pr-back li a {
  display: flex; justify-content: space-between; gap: 12px; align-items: baseline;
  text-decoration: none; padding: 9px 2px; font-size: .96rem; font-weight: 600; line-height: 1.5;
  border-bottom: 1px dashed color-mix(in srgb, var(--pr-ink) 22%, transparent);
}
.pr-face.pr-back li a:hover { color: var(--pr-primary-deep); }
.pr-face.pr-back li a:hover .pr-nm { text-decoration: underline; }
.pr-face.pr-back li .pr-pr { font-weight: 700; color: var(--pr-primary-deep); white-space: nowrap; font-size: .85rem; }
.pr-face.pr-back .pr-all {
  margin-top: 16px; display: inline-flex; align-items: center; gap: 8px;
  font-weight: 700; font-size: .85rem; letter-spacing: .1em; text-decoration: none;
  color: var(--pr-primary-deep);
}
.pr-face.pr-back .pr-all:hover { text-decoration: underline; }
@media (max-width: 700px) {
  .pr-face.pr-back { padding: 20px 20px 18px; }
  .pr-face.pr-back h3 { font-size: 1.2rem; }
  .pr-face.pr-back .pr-win { font-size: .68rem; margin-bottom: 12px; }
  .pr-face.pr-back li a { font-size: .9rem; padding: 7px 2px; }
  .pr-face.pr-back .pr-all { margin-top: 12px; font-size: .8rem; }
  .pr-face.pr-front .pr-bar { padding: 13px 16px; }
  .pr-face.pr-front h3 { font-size: 1.15rem; }
  .pr-face.pr-front .pr-cnt { display: none; }
}
.pr-showcase .pr-menu-cta { text-align: center; margin-top: 34px; }
.pr-showcase .pr-hint { text-align: center; font-size: .8rem; opacity: .55; font-weight: 600; margin-top: 14px; }
.pr-showcase .pr-hint .pr-hint-swipe { display: none; }
@media (max-width: 699px) {
  .pr-showcase .pr-hint .pr-hint-tap { display: none; }
  .pr-showcase .pr-hint .pr-hint-swipe { display: inline; }
}

/* ============ YOUR DAY ============ */
.pr-body section.pr-day { background: var(--pr-ink); color: var(--pr-paper); transition: background .45s ease; padding: 76px 0; }
.pr-day .pr-sec-head { margin-bottom: 40px; }
.pr-day .pr-sec-head h2 { color: var(--pr-paper); }
.pr-day .pr-eyebrow { color: var(--pr-accent); }
.pr-day .pr-eyebrow::before, .pr-day .pr-eyebrow::after { color: var(--pr-accent); }
.pr-day-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.pr-slot {
  background: color-mix(in srgb, var(--pr-paper) 7%, transparent);
  border: 1.5px solid color-mix(in srgb, var(--pr-paper) 25%, transparent);
  border-radius: 22px; padding: 26px 24px;
  transition: transform .2s ease, background .3s ease;
}
.pr-slot:hover { transform: translateY(-6px); background: color-mix(in srgb, var(--pr-paper) 12%, transparent); }
.pr-slot .pr-time {
  font-family: var(--pr-font-display); font-style: italic; font-weight: 650;
  font-size: 1.5rem; color: var(--pr-accent); margin-bottom: 8px;
}
[data-palette^="graphite"] .pr-day .pr-slot .pr-time,
[data-palette^="graphite"] .pr-day .pr-eyebrow { color: color-mix(in srgb, var(--pr-accent) 70%, #fff); }
.pr-slot h3 { font-size: 1.12rem; margin-bottom: 6px; color: var(--pr-paper); }
.pr-slot p { font-size: .92rem; opacity: .75; }
@media (max-width: 800px) { .pr-day-grid { grid-template-columns: 1fr; max-width: 430px; margin-inline: auto; } }

/* ============ THE RESET ============ */
.pr-body section.pr-resetrow { background: color-mix(in srgb, var(--pr-primary) 8%, var(--pr-paper)); transition: background .45s ease; }
.pr-reset-steps {
  display: flex; justify-content: center; gap: 14px; flex-wrap: wrap;
  font-family: var(--pr-font-display); font-style: italic; font-weight: 650;
  font-size: clamp(1.3rem, 3vw, 2rem); margin-bottom: 46px;
}
.pr-reset-steps .pr-sep { color: var(--pr-accent-deep); }
.pr-reset-steps .pr-w { color: var(--pr-primary-deep); }
.pr-hub-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; max-width: 940px; margin: 0 auto; }
.pr-hub {
  background: var(--pr-card); border: 2px solid var(--pr-ink); border-radius: 24px;
  padding: 30px 24px; text-align: center;
  transition: transform .2s ease, box-shadow .2s ease;
}
.pr-hub:hover { transform: translateY(-6px); box-shadow: 6px 6px 0 var(--pr-ink); }
.pr-hub img { width: 92px; height: 92px; object-fit: contain; margin: 0 auto 16px; border-radius: 50%; background: #fff; }
.pr-hub h3 { font-size: 1.18rem; }
.pr-hub .pr-tag { font-size: .72rem; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; color: var(--pr-primary-deep); margin: 4px 0 10px; }
.pr-hub p { font-size: .9rem; opacity: .75; }
.pr-hub .pr-you { display: inline-block; margin-top: 12px; font-family: var(--pr-font-display); font-style: italic; color: var(--pr-accent-deep); font-weight: 650; }
@media (max-width: 940px) { .pr-hub-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px) { .pr-hub-grid { grid-template-columns: 1fr; } }

/* ============ ABOUT / VISIT ============ */
.pr-about-grid { display: grid; grid-template-columns: .92fr 1.08fr; gap: 60px; align-items: center; }
.pr-arch {
  width: min(400px, 80vw); aspect-ratio: 4/4.6; overflow: hidden;
  border-radius: 999px 999px 28px 28px;
  border: 5px solid var(--pr-ink);
  box-shadow: -16px 16px 0 var(--pr-primary);
  transition: box-shadow .45s ease;
}
.pr-arch img { width: 100%; height: 100%; object-fit: cover; }
.pr-about-photo { position: relative; justify-self: center; }
.pr-pill-badge {
  position: absolute; z-index: 3; top: -18px; right: 8px; transform: rotate(6deg);
  font-family: var(--pr-font-display); font-weight: 650; font-style: italic;
  background: var(--pr-accent); color: var(--pr-on-accent);
  border: 2px solid var(--pr-ink); border-radius: 999px;
  padding: 10px 20px; font-size: .95rem;
  box-shadow: 0 8px 20px rgba(0,0,0,.18);
}
.pr-about-copy h2 { font-size: clamp(2rem, 3.8vw, 2.9rem); margin: 12px 0 18px; }
.pr-about-copy p { opacity: .82; margin-bottom: 14px; }
.pr-hours-card {
  margin-top: 24px; background: var(--pr-card); border: 2px solid var(--pr-ink);
  border-radius: 22px; padding: 26px 30px;
  display: grid; grid-template-columns: 1fr 1fr; gap: 22px;
  box-shadow: 8px 8px 0 color-mix(in srgb, var(--pr-primary) 30%, transparent);
}
.pr-hours-card h4 {
  font-weight: 700; font-size: .72rem; letter-spacing: .24em; text-transform: uppercase;
  color: var(--pr-primary-deep); margin: 0 0 10px;
}
.pr-hours-card ul { font-size: .95rem; }
.pr-hours-card li { display: flex; justify-content: space-between; gap: 14px; padding: 3px 0; }
.pr-hours-card li span:last-child { font-weight: 700; }
.pr-hours-card .pr-addr { font-size: .95rem; line-height: 1.55; }
.pr-hours-card a.pr-dir { display: inline-block; margin-top: 10px; font-weight: 700; color: var(--pr-primary-deep); }
@media (max-width: 900px) {
  .pr-about-grid { grid-template-columns: 1fr; }
  .pr-hours-card { grid-template-columns: 1fr; }
}

/* ============ BIG CTA ============ */
.pr-body section.pr-bigcta {
  background: linear-gradient(155deg, var(--pr-primary) 0%, var(--pr-primary-deep) 100%);
  color: var(--pr-on-primary); text-align: center; position: relative; overflow: hidden;
  transition: background .45s ease;
}
.pr-waves {
  position: absolute; inset: 0; opacity: .1; pointer-events: none; background: var(--pr-on-primary);
  -webkit-mask: url('../images/wavy-lines-alt.svg') center / cover no-repeat;
          mask: url('../images/wavy-lines-alt.svg') center / cover no-repeat;
}
.pr-bigcta h2 { font-size: clamp(2.2rem, 5vw, 3.6rem); position: relative; }
.pr-bigcta h2 em { color: color-mix(in srgb, var(--pr-accent) 60%, #fff); }
.pr-bigcta p { font-size: 1.1rem; margin: 16px auto 32px; max-width: 33rem; opacity: .9; position: relative; }
.pr-bigcta .pr-hero-ctas { justify-content: center; position: relative; }

/* ============ FOOTER ============ */
footer.pr-site { background: var(--pr-footer-bg); color: var(--pr-paper); padding: 62px 0 32px; transition: background .45s ease; }
.pr-foot-grid { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; gap: 40px; margin-bottom: 42px; }
.pr-foot-grid h4 {
  font-weight: 700; font-size: .72rem; letter-spacing: .26em; text-transform: uppercase;
  color: var(--pr-accent); margin: 0 0 14px;
}
[data-palette^="graphite"] footer.pr-site .pr-foot-grid h4 { color: color-mix(in srgb, var(--pr-accent) 70%, #fff); }
.pr-foot-grid li { padding: 4px 0; font-size: .94rem; opacity: .85; }
.pr-foot-grid a { text-decoration: none; }
.pr-foot-grid a:hover { color: var(--pr-accent); }
.pr-foot-brand img { width: 68px; border-radius: 50%; background: #fff; margin-bottom: 14px; }
.pr-foot-brand p { font-size: .9rem; opacity: .7; max-width: 23rem; }
.pr-foot-bottom {
  border-top: 1px solid color-mix(in srgb, var(--pr-paper) 18%, transparent); padding-top: 24px;
  display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap;
  font-size: .84rem; opacity: .6;
}
@media (max-width: 900px) { .pr-foot-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .pr-foot-grid { grid-template-columns: 1fr; } }

/* ==========================================================================
   FULL MENU PAGE
   ========================================================================== */
/* The Pages template always renders its own inner-hero band; the menu page
   ships its own headline, so suppress just that band and the empty content
   well. Do NOT hide .inner-page-wrapper — this site's page view (the override
   at resources/views/modules/pages/pages/show.blade.php, which shadows the
   Mendol's own copy) nests the page-builder sections INSIDE that wrapper, so
   hiding it blanks the entire menu. The empty .inner-content well still carries
   app.css's 3rem/6rem padding, so it goes too — `:empty` does not match it,
   because the div contains whitespace. */
.pr-page-menu .inner-hero,
.pr-page-menu .inner-content,
.pr-page-rewards-signup .inner-hero,
.pr-page-rewards-signup .inner-content { display: none; }
.pr-page-menu .page-sections-tight > section { padding: 0; }

.pr-mhead { padding: 54px 0 30px; text-align: center; }
.pr-mhead h1 { font-size: clamp(2.2rem, 5vw, 3.4rem); }
.pr-mhead p { margin: 14px auto 0; max-width: 40rem; opacity: .78; }

/* sticky category nav */
.pr-catnav {
  position: sticky; top: 74px; z-index: 250;
  background: color-mix(in srgb, var(--pr-paper) 94%, transparent);
  backdrop-filter: blur(10px);
  border-block: 1px solid color-mix(in srgb, var(--pr-ink) 14%, transparent);
  margin-bottom: 10px;
}
.pr-catnav .pr-inner {
  display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none;
  padding: 12px max(16px, calc((100vw - var(--pr-wrap)) / 2 + 24px));
}
.pr-catnav .pr-inner::-webkit-scrollbar { display: none; }
.pr-catnav a {
  flex: none; text-decoration: none; font-weight: 700; font-size: .84rem;
  letter-spacing: .04em; padding: 9px 18px; border-radius: 999px;
  border: 2px solid color-mix(in srgb, var(--pr-ink) 22%, transparent);
  transition: background .2s, border-color .2s, color .2s;
}
.pr-catnav a:hover { border-color: var(--pr-ink); }
.pr-catnav a.pr-active { background: var(--pr-ink); color: var(--pr-paper); border-color: var(--pr-ink); }
@media (max-width: 640px) { .pr-catnav { top: 62px; } }

.pr-body section.pr-msec { padding: 42px 0 10px; scroll-margin-top: 140px; }
.pr-msec-head {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 20px;
  padding-bottom: 14px; margin-bottom: 26px;
  border-bottom: 2px solid var(--pr-ink);
}
.pr-msec-head h2 { font-size: clamp(1.7rem, 3.4vw, 2.5rem); }
.pr-msec-head .pr-sub { font-size: .92rem; opacity: .7; margin-top: 4px; }
.pr-msec-head .pr-count {
  flex: none; font-size: .72rem; font-weight: 700; letter-spacing: .16em;
  text-transform: uppercase; opacity: .5; padding-bottom: 5px;
}
/* h3.pr-grp, not .pr-grp: the base `.pr-body h3 { margin: 0 }` reset is more
   specific than a lone class and would otherwise flatten the group spacing. */
h3.pr-grp {
  font-size: .78rem; font-weight: 700; letter-spacing: .24em; text-transform: uppercase;
  font-family: var(--pr-font-body); color: var(--pr-primary-deep);
  margin: 30px 0 14px; display: flex; align-items: center; gap: 12px;
}
h3.pr-grp::after { content: ''; flex: 1; height: 1px; background: color-mix(in srgb, var(--pr-ink) 18%, transparent); }

.pr-pgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
@media (max-width: 1000px) { .pr-pgrid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 720px)  { .pr-pgrid { grid-template-columns: repeat(2, 1fr); gap: 14px; } }

.pr-pcard {
  position: relative; display: flex; flex-direction: column; text-decoration: none;
  background: var(--pr-card); border: 2px solid var(--pr-ink); border-radius: 20px; overflow: hidden;
  transition: transform .2s ease, box-shadow .2s ease;
}
.pr-pcard:hover { transform: translateY(-6px); box-shadow: 7px 7px 0 var(--pr-accent); }
/* soft field behind the photo — Toast's product shots are cut out on pure white */
.pr-pcard .pr-ph {
  display: block; aspect-ratio: 1 / 1; overflow: hidden;
  border-bottom: 2px solid var(--pr-ink);
  background: color-mix(in srgb, var(--pr-ink) 5%, var(--pr-card));
}
.pr-pcard .pr-ph img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.pr-pcard:hover .pr-ph img { transform: scale(1.06); }
.pr-pcard .pr-ph.pr-tile {
  display: grid; place-items: center;
  background: linear-gradient(150deg, var(--pr-primary), var(--pr-primary-deep));
  position: relative;
}
.pr-pcard .pr-ph.pr-tile::after {
  content: ''; position: absolute; inset: 0; opacity: .16; background: var(--pr-on-primary);
  -webkit-mask: url('../images/wavy-lines.svg') center / 150% no-repeat;
          mask: url('../images/wavy-lines.svg') center / 150% no-repeat;
}
/* light disc behind the icon: some glyphs render monochrome and would vanish on the dark tile */
.pr-pcard .pr-ph.pr-tile .pr-ico {
  position: relative; z-index: 1;
  width: 78px; height: 78px; border-radius: 50%;
  display: grid; place-items: center; font-size: 2.2rem; line-height: 1;
  background: color-mix(in srgb, var(--pr-on-primary) 94%, transparent);
  box-shadow: 0 6px 18px rgba(0,0,0,.22);
}
@media (max-width: 720px) { .pr-pcard .pr-ph.pr-tile .pr-ico { width: 62px; height: 62px; font-size: 1.8rem; } }
.pr-pcard .pr-cbody { display: flex; flex-direction: column; flex: 1; padding: 14px 16px 15px; gap: 5px; }
.pr-pcard .pr-nm { font-family: var(--pr-font-display); font-weight: 640; font-size: 1.02rem; line-height: 1.2; }
.pr-pcard .pr-ds {
  font-size: .82rem; opacity: .68; line-height: 1.45;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.pr-pcard .pr-foot { margin-top: auto; padding-top: 9px; display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.pr-pcard .pr-pr { font-weight: 700; font-size: .92rem; color: var(--pr-primary-deep); white-space: nowrap; }
.pr-pcard .pr-go {
  font-size: .7rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--pr-accent-deep); opacity: 0; transform: translateX(-4px);
  transition: opacity .2s ease, transform .2s ease; white-space: nowrap;
}
.pr-pcard:hover .pr-go { opacity: 1; transform: none; }
@media (hover: none) { .pr-pcard .pr-go { opacity: .75; transform: none; } }

/* serving-window state */
.pr-msec.pr-closed .pr-pgrid { opacity: .55; }
.pr-msec .pr-winpill {
  display: inline-flex; align-items: center; gap: 8px; margin-top: 8px;
  font-size: .72rem; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  border-radius: 999px; padding: 6px 14px; border: 2px solid var(--pr-ink);
}
.pr-msec .pr-winpill.pr-on { background: var(--pr-accent); color: var(--pr-on-accent); }
.pr-msec .pr-winpill.pr-off { background: transparent; opacity: .6; }

.pr-body section.pr-endcta {
  margin-top: 60px; padding: 66px 0;
  background: linear-gradient(155deg, var(--pr-primary) 0%, var(--pr-primary-deep) 100%);
  color: var(--pr-on-primary); text-align: center; position: relative; overflow: hidden;
}
.pr-endcta h2 { font-size: clamp(1.9rem, 4.4vw, 3rem); position: relative; }
.pr-endcta h2 em { color: color-mix(in srgb, var(--pr-accent) 60%, #fff); }
.pr-endcta p { margin: 14px auto 28px; max-width: 34rem; opacity: .9; position: relative; }


/* ============ REWARDS SIGNUP ============ */
.pr-perk-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; max-width: 980px; margin: 0 auto 44px; }
.pr-perk {
  background: var(--pr-card); border: 2px solid var(--pr-ink); border-radius: 24px;
  padding: 28px 24px; text-align: center;
  transition: transform .2s ease, box-shadow .2s ease;
}
.pr-perk:hover { transform: translateY(-6px); box-shadow: 6px 6px 0 var(--pr-accent); }
.pr-perk-emoji {
  display: grid; place-items: center; width: 62px; height: 62px; margin: 0 auto 14px;
  border-radius: 50%; border: 2px solid var(--pr-ink); font-size: 1.7rem;
  /* light disc — monochrome glyphs (⚡) vanish on the dark gradient */
  background: var(--pr-paper);
}
.pr-perk h3 { font-size: 1.15rem; margin-bottom: 8px; }
.pr-perk p { font-size: .92rem; opacity: .78; }
@media (max-width: 860px) { .pr-perk-grid { grid-template-columns: 1fr; max-width: 430px; } }

.pr-signup-card {
  max-width: 640px; margin: 0 auto; background: var(--pr-card);
  border: 2px solid var(--pr-ink); border-radius: 26px; padding: 34px 34px 26px;
  box-shadow: 8px 8px 0 color-mix(in srgb, var(--pr-primary) 30%, transparent);
}
.pr-signup-card > h3 { font-size: 1.5rem; margin-bottom: 22px; text-align: center; }
.pr-step { display: flex; gap: 16px; padding: 16px 0; border-top: 1px dashed color-mix(in srgb, var(--pr-ink) 22%, transparent); }
.pr-step-n {
  flex: none; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center;
  background: var(--pr-ink); color: var(--pr-paper); font-weight: 700; font-family: var(--pr-font-display);
}
.pr-step strong { font-size: 1.02rem; display: block; margin-bottom: 4px; }
.pr-step p { font-size: .88rem; opacity: .78; margin-bottom: 10px; }
.pr-step .pr-btn { padding: 12px 24px; font-size: .92rem; }
.pr-step .pr-optional { font-weight: 400; font-size: .8rem; opacity: .6; }
.pr-kbd {
  display: inline-block; border: 1px solid color-mix(in srgb, var(--pr-ink) 35%, transparent);
  border-radius: 6px; padding: 1px 7px; font-size: .8rem; font-weight: 700; background: var(--pr-paper);
}
.pr-step-done { opacity: .55; }
.pr-step-done .pr-step-n { background: var(--pr-accent); color: var(--pr-on-accent); }
.pr-step-done .pr-btn { box-shadow: none; transform: none; cursor: default; }
.pr-step-current .pr-step-n { background: var(--pr-accent); color: var(--pr-on-accent); }
/* platform-specific install copy — JS has no hand in this */
.pr-step-ios, .pr-step-android { display: none; }
@supports (-webkit-touch-callout: none) { .pr-step-ios { display: block; } }
@supports not (-webkit-touch-callout: none) { .pr-step-android { display: block; } }
.pr-rewards-status { text-align: center; font-weight: 600; font-size: .92rem; margin-top: 18px; min-height: 1.4em; }
.pr-rewards-status[data-tone="ok"] { color: var(--pr-accent-deep); }
.pr-rewards-status[data-tone="warn"] { color: #a33; }
.pr-rewards-fineprint { text-align: center; font-size: .8rem; opacity: .55; font-weight: 600; margin-top: 26px; }

/* ---- rewards: app drop point (hours + recent offers) ---- */
.pr-today-grid { display: grid; grid-template-columns: 1fr 1.15fr; gap: 22px; max-width: 980px; margin: 0 auto 44px; }
.pr-today-card {
  background: var(--pr-card); border: 2px solid var(--pr-ink); border-radius: 24px;
  padding: 26px 26px 24px; display: flex; flex-direction: column; align-items: flex-start; gap: 12px;
}
.pr-today-card > h3 { font-size: 1.25rem; }
.pr-open-pill {
  font-size: .72rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  border: 2px solid var(--pr-ink); border-radius: 999px; padding: 6px 14px;
}
.pr-open-pill.pr-open { background: var(--pr-accent); color: var(--pr-on-accent); }
.pr-open-pill.pr-shut { opacity: .6; }
.pr-today-hours { width: 100%; }
.pr-today-hours li {
  padding: 6px 0; font-size: .95rem;
  border-bottom: 1px dashed color-mix(in srgb, var(--pr-ink) 22%, transparent);
}
.pr-today-card .pr-btn { margin-top: 6px; padding: 13px 26px; font-size: .95rem; }
.pr-offer-list { width: 100%; }
.pr-offer-list li + li { margin-top: 10px; }
.pr-offer-list a {
  display: block; text-decoration: none; border: 2px solid var(--pr-ink); border-radius: 16px;
  padding: 12px 16px; transition: transform .15s ease, box-shadow .15s ease;
}
.pr-offer-list a:hover { transform: translateY(-3px); box-shadow: 5px 5px 0 var(--pr-accent); }
.pr-offer-list strong { display: block; font-family: var(--pr-font-display); font-size: 1.05rem; }
.pr-offer-list span { display: block; font-size: .85rem; opacity: .75; line-height: 1.45; }
.pr-offer-list em { display: block; font-size: .72rem; font-weight: 700; font-style: normal; letter-spacing: .1em; text-transform: uppercase; color: var(--pr-accent-deep); margin-top: 5px; }
.pr-offers-empty { font-size: .92rem; opacity: .75; }
@media (max-width: 860px) { .pr-today-grid { grid-template-columns: 1fr; max-width: 560px; } }

/* ==========================================================================
   MENU PAGE 2.0 — category index + per-category "pages" + search
   (2026-08 beta round: hash-routed views, all server-rendered)
   ========================================================================== */
.pr-body section.pr-catindex { padding: 6px 0 64px; }
.pr-catgrid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 24px; padding-top: 8px;
}
.pr-cathint { text-align: center; font-size: .8rem; opacity: .55; font-weight: 600; margin-top: 20px; }

/* sticky utility bar (chips + search) */
.pr-menubar .pr-inner { align-items: center; }
.pr-msearch {
  margin-left: auto; flex: none;
  display: inline-flex; align-items: center; gap: 8px;
  border: 2px solid color-mix(in srgb, var(--pr-ink) 30%, transparent);
  border-radius: 999px; padding: 7px 16px; background: var(--pr-card);
  transition: border-color .2s;
}
.pr-msearch:focus-within { border-color: var(--pr-ink); }
.pr-msearch span { font-weight: 700; opacity: .55; }
.pr-msearch input {
  border: none; background: none; outline: none;
  font: inherit; font-weight: 600; font-size: .88rem; color: var(--pr-ink);
  width: clamp(140px, 26vw, 250px);
}
.pr-msearch input::placeholder { opacity: .5; }
@media (max-width: 760px) {
  .pr-menubar .pr-inner { flex-wrap: nowrap; }
  .pr-msearch input { width: clamp(110px, 34vw, 180px); }
  .pr-msearch input::placeholder { font-size: .8rem; }
}

/* category / search "page" head — eyebrow small, title big & mixed-case */
.pr-body section.pr-catpage, .pr-body section.pr-searchpage { padding: 14px 0 30px; }
.pr-catpage-head { text-align: center; padding: 34px 0 30px; }
.pr-catpage-head h1 { font-size: clamp(2.2rem, 5vw, 3.4rem); }
.pr-catpage-head .pr-sub { margin-top: 10px; opacity: .75; }
.pr-backlink {
  display: inline-block; margin-bottom: 20px;
  font-size: .8rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  text-decoration: none; border: 2px solid color-mix(in srgb, var(--pr-ink) 25%, transparent);
  border-radius: 999px; padding: 8px 18px; transition: border-color .2s, background .2s;
}
.pr-backlink:hover { border-color: var(--pr-ink); background: var(--pr-card); }
.pr-catpage-meta {
  display: flex; justify-content: center; align-items: center; gap: 14px; margin-top: 14px;
}
.pr-catpage-meta .pr-count {
  font-size: .72rem; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; opacity: .5;
}

/* group headers inside a category page: big mixed-case serif (the "Shaken
   Espresso" aesthetic from the 8/03 meeting), not tracked ALL-CAPS */
h3.pr-grp.pr-grp-big {
  font-family: var(--pr-font-display); text-transform: none;
  font-size: clamp(1.25rem, 2.4vw, 1.65rem); font-weight: 620;
  letter-spacing: -0.01em; margin: 38px 0 16px;
}
h3.pr-grp.pr-grp-feature { color: var(--pr-accent-deep); margin-top: 8px; }

.pr-pcard .pr-oos {
  position: absolute; top: 12px; left: 12px;
  font-size: .64rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  background: var(--pr-ink); color: var(--pr-paper); border-radius: 999px; padding: 5px 12px;
}
.pr-search-empty { text-align: center; opacity: .7; font-weight: 600; padding: 30px 0 10px; }

/* homepage rail: the non-flip "see the whole menu" end card */
.pr-fcard.pr-seeall { perspective: none; }
.pr-fcard.pr-seeall > a {
  position: absolute; inset: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 14px; text-align: center;
  text-decoration: none; border: 2px solid var(--pr-ink); border-radius: 26px;
  background: linear-gradient(150deg, var(--pr-primary), var(--pr-primary-deep));
  color: var(--pr-on-primary); overflow: hidden; padding: 26px;
}
.pr-fcard.pr-seeall > a::before {
  content: ''; position: absolute; inset: 0; opacity: .14; background: var(--pr-on-primary);
  -webkit-mask: url('../images/wavy-lines.svg') center / 160% no-repeat;
          mask: url('../images/wavy-lines.svg') center / 160% no-repeat;
}
.pr-fcard.pr-seeall:hover > a { box-shadow: 8px 8px 0 var(--pr-accent); }
.pr-seeall .pr-seeall-kicker {
  position: relative; font-size: .7rem; font-weight: 700; letter-spacing: .26em; text-transform: uppercase; opacity: .8;
}
.pr-seeall h3 { position: relative; font-size: clamp(1.6rem, 2.6vw, 2.1rem); font-style: italic; }
.pr-seeall .pr-seeall-count { position: relative; font-size: .9rem; font-weight: 700; opacity: .85; }
.pr-seeall .pr-seeall-go {
  position: relative; margin-top: 8px;
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--pr-accent); color: var(--pr-on-accent);
  border-radius: 999px; padding: 12px 24px; font-weight: 700; font-size: .92rem;
  box-shadow: 0 5px 0 var(--pr-accent-deep);
}

/* rewards signup — the no-strings promise + optional incentive (2026-08 beta) */
.pr-promise {
  font-size: 1.02rem; font-weight: 600; line-height: 1.55;
  background: color-mix(in srgb, var(--pr-accent) 14%, var(--pr-card));
  border: 2px solid var(--pr-ink); border-radius: 16px;
  padding: 14px 18px; margin-bottom: 18px; text-align: center;
}
.pr-promise strong { color: var(--pr-accent-deep); }
.pr-incentive {
  text-align: center; font-family: var(--pr-font-display); font-style: italic;
  font-weight: 650; font-size: 1.08rem; color: var(--pr-accent-deep);
  margin-bottom: 16px;
}
.pr-offers-nudge { font-size: .82rem; opacity: .65; font-weight: 600; margin-top: 12px; }

/* ==========================================================================
   2026-08-29 — client round from the 8/28 meeting (Dr. Mark Boehler)
   1. /menu category cards go straight to the category (no flip)
   2. category chips are a wrapped cluster, on every menu view
   3. the category name is the dominant heading on a category page
   4. tighter item-card text so the 4:5 photo stops getting cropped
   5. the search collapses to a tap-to-open button on a phone
   Everything here is additive and sits after the rules it overrides, so the
   homepage rail (.pr-fcard without .pr-ccard) is untouched.
   ========================================================================== */

/* --- 1. non-flipping category card on /menu -------------------------------
   .pr-ccard keeps the .pr-fcard shell (2/3 box, bordered face, hover lift)
   and the class theme.js needs for [data-badge] / [data-winnote], but it is
   an <a> now: one tap opens the category. */
.pr-fcard.pr-ccard {
  display: block; perspective: none;
  text-decoration: none; color: inherit;
}
.pr-ccard .pr-face.pr-front {
  backface-visibility: visible; -webkit-backface-visibility: visible;
}
/* the front bar stacks now that "TAP TO PEEK" is gone and the tagline that
   used to live on the card back has moved onto the face */
.pr-ccard .pr-face.pr-front .pr-bar {
  display: flex; flex-direction: column; align-items: flex-start;
  gap: 5px; padding: 14px 18px 15px;
}
.pr-ccard .pr-face.pr-front h3 { font-size: 1.3rem; line-height: 1.15; }
.pr-ccard .pr-face.pr-front .pr-win {
  font-size: .82rem; font-weight: 600; line-height: 1.35; opacity: .7;
  text-transform: none; letter-spacing: normal; color: inherit; margin: 0;
  display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2;
  -webkit-box-orient: vertical; overflow: hidden;
}
/* the item count is hidden on the homepage rail at <=700px; on the menu index
   it is the whole point of the card, so put it back */
.pr-ccard .pr-face.pr-front .pr-cnt {
  display: block; font-size: .78rem; font-weight: 700; opacity: .55;
}
@media (max-width: 700px) {
  .pr-ccard .pr-face.pr-front .pr-bar { padding: 12px 15px 13px; gap: 4px; }
  .pr-ccard .pr-face.pr-front h3 { font-size: 1.15rem; }
  .pr-ccard .pr-face.pr-front .pr-win { font-size: .76rem; }
}

/* --- 2. chips: wrapped cluster instead of one scrolling line -------------- */
.pr-catnav.pr-menubar .pr-inner {
  display: flex; flex-wrap: wrap; align-items: center;
  gap: 10px; overflow: visible;
}
.pr-menubar .pr-chips {
  display: flex; flex-wrap: wrap; gap: 8px;
  flex: 1 1 auto; min-width: 0;
}
/* the toggle's checkbox: off-screen but still focusable, so the cluster can
   be opened from the keyboard */
.pr-menubar .pr-chipcb {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  border: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
  white-space: nowrap;
}
.pr-menubar .pr-chiptoggle { display: none; }

/* --- 3. category page: the category name is the heading ------------------- */
.pr-catpage .pr-catpage-head.pr-cathead-lg { padding: 24px 0 26px; }
.pr-catpage .pr-catpage-head.pr-cathead-lg h1 {
  font-size: clamp(2.6rem, 6.6vw, 4.2rem);
  line-height: 1.02; letter-spacing: -.015em;
}
.pr-catpage .pr-catpage-head.pr-cathead-lg .pr-sub {
  margin-top: 12px; font-size: 1.02rem;
}

/* --- 4. item card: give the photo the room, shrink the words -------------
   The photos are authored 4:5 (400x500). The card used to crop them to a
   square, which is the cut-off Mark pointed at; matching the frame to the
   source removes the crop, and the tighter body keeps the card the same
   overall height it had. */
/* Taller frame now the description no longer needs the room: the white block
   starts lower and the photo gets those pixels. 3/4 trims ~6% off the sides of
   a 4:5 Toast shot; revert to 4 / 5 if that ever clips a product. */
.pr-pcard .pr-ph { aspect-ratio: 3 / 4; }
.pr-pcard .pr-cbody { padding: 11px 13px 12px; gap: 3px; }
.pr-pcard .pr-nm { font-size: .96rem; line-height: 1.18; }
.pr-pcard .pr-ds {
  font-size: .76rem; line-height: 1.34;
  -webkit-line-clamp: 2; line-clamp: 2;
}
.pr-pcard .pr-foot { padding-top: 6px; }
.pr-pcard .pr-pr { font-size: .88rem; }
@media (max-width: 720px) {
  .pr-pcard .pr-cbody { padding: 9px 11px 10px; }
  .pr-pcard .pr-nm { font-size: .9rem; }
  .pr-pcard .pr-ds { font-size: .72rem; -webkit-line-clamp: 1; line-clamp: 1; }
}

/* --- 2b + 5. the phone bar -----------------------------------------------
   One row of chips with the one you are on first, a "view more" that opens
   the rest, and a search that is a button until you tap it. Desktop keeps
   the full field and the full cluster. */
@media (max-width: 760px) {
  .pr-catnav.pr-menubar .pr-inner {
    align-items: flex-start; gap: 8px;
    padding-top: 10px; padding-bottom: 10px;
  }
  /* collapsed, the cluster shares its line with the toggle and the search
     button, so the bar is no taller than the single scrolling line it
     replaces; opened, it takes a line of its own */
  .pr-menubar .pr-chips {
    flex: 1 1 0; gap: 7px; max-height: 2.45rem; overflow: hidden;
    transition: max-height .28s ease;
  }
  .pr-menubar .pr-chips a {
    font-size: .8rem; line-height: 1.15; padding: 8px 14px;
  }
  /* theme.js already marks the current chip; float it to the front so the
     collapsed row always shows where you are */
  .pr-menubar .pr-chips a.pr-active { order: -1; }
  .pr-menubar .pr-chipcb:checked ~ .pr-chips { flex-basis: 100%; max-height: 60vh; overflow-y: auto; }

  .pr-menubar .pr-chiptoggle {
    display: inline-flex; align-items: center; gap: 6px; order: 2;
    flex: none; cursor: pointer; user-select: none; -webkit-user-select: none;
    padding: 8px 2px; white-space: nowrap;
    font-size: .68rem; font-weight: 700; letter-spacing: .08em;
    text-transform: uppercase; color: var(--pr-primary-deep);
  }
  .pr-menubar .pr-chev { transition: transform .28s ease; }
  .pr-menubar .pr-chipcb:checked ~ .pr-chiptoggle .pr-chev { transform: rotate(180deg); }
  .pr-menubar .pr-chipcb:focus-visible ~ .pr-chiptoggle {
    outline: 2px solid var(--pr-ink); outline-offset: 3px; border-radius: 8px;
  }

  /* collapsed search: the <label> wraps the input, so tapping the glyph
     focuses it natively and :focus-within opens the field. No JS. */
  .pr-menubar .pr-msearch {
    order: 3; margin-left: auto; flex: none;
    gap: 0; padding: 7px; min-width: 40px; justify-content: center;
    transition: padding .25s ease, gap .25s ease, border-color .2s ease;
  }
  .pr-menubar .pr-msearch .pr-searchico { font-size: 1.1rem; opacity: .7; }
  .pr-menubar .pr-msearch input {
    width: 0; min-width: 0; padding: 0; opacity: 0;
    transition: width .25s ease, opacity .2s ease;
  }
  .pr-menubar .pr-msearch:focus-within { padding: 7px 14px; gap: 8px; }
  .pr-menubar .pr-msearch:focus-within input { width: min(56vw, 260px); opacity: 1; }
  /* keep it open while a query is in it, so a blur never hides the search
     that produced the results on screen (dropped whole in browsers without
     :has, which just fall back to focus-only) */
  .pr-menubar .pr-msearch:has(input:not(:placeholder-shown)) { padding: 7px 14px; gap: 8px; }
  .pr-menubar .pr-msearch:has(input:not(:placeholder-shown)) input { width: min(56vw, 260px); opacity: 1; }
}

/* the narrowest phones: the toggle keeps only its chevron (the word stays in
   the DOM for screen readers) so the chip row keeps usable width */
@media (max-width: 430px) {
  .pr-menubar .pr-chiptoggle {
    padding: 7px 11px; font-size: 1rem; letter-spacing: normal;
    border: 2px solid color-mix(in srgb, var(--pr-ink) 22%, transparent);
    border-radius: 999px;
  }
  .pr-menubar .pr-chiptoggle > span:not(.pr-chev) {
    position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
    border: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
    white-space: nowrap;
  }
}

/* ---- main menu page: category cards side to side (Mark, 2026-08-29) ----
   The grid stays available as an option at /admin/menu -> Categories. The rail
   reuses the home page's scroll-snap behaviour but not its flip cards. */
.pr-catgrid-rail {
  display: flex;
  grid-template-columns: none;
  overflow-x: auto;
  overflow-y: hidden;
  scroll-snap-type: x proximity;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
  padding-bottom: 10px;
}
.pr-catgrid-rail > .pr-ccard {
  flex: 0 0 300px;
  scroll-snap-align: start;
}
.pr-catgrid-rail::-webkit-scrollbar { height: 8px; }
.pr-catgrid-rail::-webkit-scrollbar-thumb {
  background: color-mix(in srgb, var(--pr-ink) 22%, transparent);
  border-radius: 999px;
}
@media (max-width: 720px) {
  .pr-catgrid-rail > .pr-ccard { flex-basis: 258px; }
}
@media (prefers-reduced-motion: reduce) {
  .pr-catgrid-rail { scroll-behavior: auto; }
}

/* Closed state. theme.js toggles .pr-shut on the badge when the cafe is shut,
   with .pr-live off — without this it fell back to the neutral badge. */
.pr-badge.pr-shut {
  background: color-mix(in srgb, var(--pr-ink) 12%, transparent);
  color: color-mix(in srgb, var(--pr-ink) 62%, transparent);
  border-color: transparent;
}

/* --- menu bar, desktop: chips and search share ONE flex line --------------
   The cluster rework left .pr-inner wrapping, so the chips block claimed the
   whole width and pushed the search onto a second line: a 136px-tall sticky
   bar for a single row of chips, with the field floating under the cluster
   instead of sitting beside it. nowrap keeps them on one line — the chips
   still wrap internally, the field stays pinned right and vertically centred
   against however many rows the cluster needs. Below 760px the phone rules
   above take over and this does not apply. */
@media (min-width: 761px) {
  .pr-catnav.pr-menubar .pr-inner {
    flex-wrap: nowrap;
    /* top, not centre: with the cluster on two rows a centred field sits
       between them and reads as floating rather than as part of the bar */
    align-items: flex-start;
    column-gap: 20px;
  }
  .pr-menubar .pr-chips { flex: 1 1 auto; min-width: 0; }
  .pr-menubar .pr-msearch { flex: 0 0 auto; margin-left: auto; align-self: flex-start; }
  /* the eight chips need ~1112px; trimming them here buys back a row at the
     common desktop widths instead of orphaning "Lunch" and "Bakery" */
  .pr-menubar .pr-chips a { font-size: .78rem; padding: 8px 12px; letter-spacing: .02em; }
  .pr-menubar .pr-chips { gap: 7px; }
  .pr-msearch input { width: clamp(120px, 13vw, 170px); }
  /* a longer placeholder the client types should trail off, not be sliced */
  .pr-msearch input::placeholder { text-overflow: ellipsis; }
}

/* The category rail is a scroller, but at desktop widths it just looked like
   the row had been chopped at the container edge. Fade the right edge so it
   reads as "there is more this way". */
.pr-catgrid-rail {
  -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 56px), transparent 100%);
  mask-image: linear-gradient(to right, #000 calc(100% - 56px), transparent 100%);
}
.pr-catgrid-rail.pr-rail-end {
  -webkit-mask-image: none;
  mask-image: none;
}

/* The meal card: only the one that is on shows. [hidden] must win over the
   card's own display, hence the explicit rule. */
.pr-rail .pr-fcard[hidden] { display: none !important; }
