
@font-face {
  font-family: 'TAN Nimbus';
  src: url('/fonts/TAN-NIMBUS.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Poppins';
  src: url('/fonts/poppins_semibold.ttf') format('truetype');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

:root {
  color-scheme: light;
  --cream:       #fdf6ed;
  --cream-dark:  #f0e4d3;
  --cream-mid:   #e8d4bc;
  --charcoal:    #2c2c2c;
  --charcoal-lt: #3d3d3d;
  --maroon:      rgb(88, 18, 23);
  --maroon-dark: rgb(62, 12, 16);
  --maroon-light: rgb(130, 35, 42);
  --maroon-pale: rgba(88, 18, 23, 0.08);
  --accent:      #E2C9A0;
  --black:       #0a0a0a;
  --black-shine: #111111;
  --white:       #ffffff;

  --font-nimbus: 'TAN Nimbus', serif;
  --font-body:   'Poppins', sans-serif;

  --nav-h: 70px;   /* fixed navbar height — bumped up on desktop (see media query) */
  --radius:   12px;
  --radius-lg: 20px;
  --shadow:   0 4px 24px rgba(10, 10, 10, 0.12);
  --shadow-lg: 0 12px 48px rgba(10, 10, 10, 0.2);
  --transition: 0.3s ease;
}

/* ====== RESET ====== */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
/* `overflow-x: clip`, not `hidden`. `hidden` on one axis forces the other axis
   to `auto`, which turns <body> into a scroll container — and a sticky element
   then anchors to a box that never scrolls, so it silently stops sticking (the
   legal-page sidebar). `clip` cuts the same horizontal overflow without
   creating a scrollport, so sticky keeps working. */
html { scroll-behavior: smooth; overflow-x: clip; max-width: 100%; }
body {
  font-family: var(--font-body);
  background: var(--cream);
  color: var(--charcoal);
  line-height: 1.6;
  overflow-x: clip;
  max-width: 100%;
}
img { max-width: 100%; display: block; }
a { text-decoration: none; color: inherit; }
ul { list-style: none; }
/* Form controls don't inherit font-family from the page by default in any
   browser's own stylesheet — every button, input, select and textarea on
   the site was quietly rendering in Arial instead of Poppins until now. */
button, input, select, textarea { font-family: inherit; }

/* Generic hide utility. Most hidden states in this file use a scoped combo
   like .bp-otp-step.hidden instead — both forms coexist fine since a plain
   .hidden is lower specificity and never fights a scoped one for the same
   element. This exists as the fallback for any element using a bare
   class="hidden" with no matching scoped rule — e.g. an element that isn't
   also one of those named things, or one added later — which otherwise
   renders with nothing hiding it at all despite the class being present. */
.hidden { display: none; }

/* ====== NAVBAR ====== */
/* Opaque on purpose: at 0.92 alpha the ~8% seen through backdrop-filter's
   blur was basically invisible over a page's own dark hero image (so it
   read as "the navbar colour") but tinted visibly warm/light on pages that
   start with a light background right under it instead — e.g. the
   battlepass/profile page, whose .bp-page is var(--cream-dark), not a dark
   hero. Full var(--black) makes the navbar colour identical everywhere,
   regardless of what's scrolled underneath it. */
.navbar {
  position: fixed; top: 0; left: 0; right: 0; z-index: 1000;
  background: var(--black);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid rgba(226,201,160,0.15);
}
.nav-inner {
  max-width: 1280px; margin: 0 auto;
  padding: 0 2rem;
  display: flex; align-items: center; justify-content: space-between;
  height: var(--nav-h);
}
.nav-logo {
  display: flex; align-items: center; gap: 0.75rem;
  color: var(--cream);
}
.logo-img { width: 40px; height: 40px; object-fit: contain; }
.logo-text {
  font-family: var(--font-nimbus);
  font-size: 1.3rem; font-weight: 600;
  color: var(--cream);
  letter-spacing: 0.02em;
}
.nav-links {
  display: flex; align-items: center; gap: 0.25rem;
}
.nav-link {
  color: rgba(253, 246, 237, 0.75);
  font-size: 0.9rem; font-weight: 400;
  padding: 0.5rem 0.9rem;
  border-radius: var(--radius);
  transition: color var(--transition), background var(--transition);
}
@media (hover: hover) {
  .nav-link:hover { color: var(--cream); background: rgba(255,255,255,0.07); }
}
.nav-cta {
  background: var(--maroon);
  color: var(--cream) !important;
  font-weight: 500;
  padding: 0.5rem 1.1rem;
}
@media (hover: hover) {
  .nav-cta:hover { background: var(--maroon-light); }
}
.nav-toggle {
  display: none;
  flex-direction: column; gap: 5px;
  background: none; border: none; cursor: pointer; padding: 4px;
}

/* ── "Legal" nav dropdown ── */
.nav-dropdown { position: relative; list-style: none; }
.nav-dropdown-toggle {
  display: inline-flex; align-items: center; gap: 0.3rem;
  background: none; border: none; cursor: pointer;
  font-family: inherit;
}
.nav-dropdown-caret { transition: transform 0.15s ease; }
.nav-dropdown.open .nav-dropdown-caret { transform: rotate(180deg); }
.nav-dropdown-menu {
  display: none;
  list-style: none;
  position: absolute; top: 100%; left: 0;
  margin-top: 0.35rem;
  min-width: 190px;
  background: rgba(10,10,10,0.97);
  border: 1px solid rgba(226,201,160,0.15);
  border-radius: var(--radius);
  padding: 0.4rem;
  box-shadow: 0 8px 24px rgba(0,0,0,0.35);
}
.nav-dropdown.open .nav-dropdown-menu { display: block; }
@media (hover: hover) {
  .nav-dropdown:hover .nav-dropdown-menu { display: block; }
}
.nav-dropdown-link { display: block; white-space: nowrap; }
.nav-toggle span {
  display: block; width: 24px; height: 2px;
  background: var(--cream);
  transition: var(--transition);
}

/* ====== HERO ====== */
.hero {
  min-height: 100vh;
  min-height: 100dvh;   /* fill the visible device height, tracking mobile chrome */
  background: var(--black);
  display: flex; align-items: center;
  position: relative; overflow: hidden;
  padding-top: var(--nav-h);
}
.hero-bg {
  position: absolute;
  inset: 0;
  background: url('../images/backgrounds/home.jpeg') center/cover no-repeat;
}

.hero-bg::after {
  content: '';
  position: absolute;
  inset: 0;

  background:
    radial-gradient(circle at top left, rgba(44, 6, 12, 0.7), transparent 40%),
    radial-gradient(circle at top right, rgba(44, 6, 12, 0.7), transparent 40%),
    radial-gradient(circle at bottom left, rgba(44, 6, 12, 0.7), transparent 40%),
    radial-gradient(circle at bottom right, rgba(44, 6, 12, 0.7), transparent 40%);
}
.hero-grain {
  position: absolute; inset: 0;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.04'/%3E%3C/svg%3E");
  opacity: 0.4;
}
.hero-content {
  position: relative; z-index: 2;
  max-width: 1280px; margin: 0 auto; padding: 0 2rem;
  max-width: 700px; padding-left: 8vw;
}
.hero-eyebrow {
  font-size: 0.8rem; letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--cream); margin-bottom: 1.25rem;
}
.hero-title {
  font-family: var(--font-nimbus);
  font-size: clamp(3rem, 8vw, 6.5rem);
  font-weight: 700;
  color: var(--cream);
  line-height: 1.2;
  margin-bottom: 1.5rem;
}
.hero-title em {
  font-style: normal;
  color: var(--accent);
  -webkit-text-stroke: 1px var(--accent);
}
.hero-subtitle {
  max-width: 420px; margin-bottom: 2.5rem;
  font-family: var(--font-body); font-size: 1.35rem; font-weight: 500;
  color: var(--cream);
  line-height: 1.45;
}
.hero-actions {
  display: flex; gap: 1rem; flex-wrap: wrap;
}
.hero-paw {
  position: absolute; right: -5%; bottom: 5%;
  width: min(50vw, 500px);
  color: var(--accent);
  opacity: 0.15;
  animation: float 6s ease-in-out infinite;
}
@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-20px); }
}

/* ====== BUTTONS ====== */
.btn {
  display: inline-flex; align-items: center;
  padding: 0.85rem 2rem;
  border-radius: var(--radius);
  font-size: 0.9rem; font-weight: 500;
  letter-spacing: 0.03em;
  transition: all var(--transition);
  cursor: pointer; border: none;
}
.btn-primary {
  background: var(--maroon); color: var(--cream);
}
@media (hover: hover) {
  .btn-primary:hover { background: var(--maroon-light); transform: translateY(-2px); box-shadow: 0 8px 24px rgba(88, 18, 23, 0.35); }
}
.btn-outline {
  background: transparent;
  border: 1.5px solid rgba(253,246,237,0.35);
  color: var(--cream);
}
@media (hover: hover) {
  .btn-outline:hover { background: rgba(255,255,255,0.06); border-color: rgba(253,246,237,0.7); }
}
.btn-outline-light {
  background: transparent;
  border: 1.5px solid rgba(253,246,237,0.5);
  color: var(--cream);
}
@media (hover: hover) {
  .btn-outline-light:hover { background: rgba(255,255,255,0.1); }
}
.btn-full { width: 100%; justify-content: center; }
.btn-lg { padding: 1rem 2.5rem; font-size: 1rem; }

/* ====== SECTIONS ====== */
.section { padding: 6rem 0; }
.section-dark {
  background: var(--black-shine);
  color: var(--cream);
}
.section-cream { background: var(--cream-dark); }
.container {
  max-width: 1280px; margin: 0 auto; padding: 0 2rem;
}
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; align-items: center; }
.gap-xl { gap: 6rem; }
.text-center { 
  text-align: center;
}
.section-eyebrow {
  font-size: 0.75rem; letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--maroon); margin-bottom: 1rem; font-weight: 500;
  text-align: center;
}
.section-eyebrow.light { color: var(--accent); }
.section-title {
  font-family: var(--font-nimbus);
  font-size: clamp(2rem, 4vw, 3.2rem);
  font-weight: 600; line-height: 1.15;
  margin-bottom: 1.25rem;
  line-height: 1.3; 
}
.section-title em { font-style: normal; color: var(--maroon); letter-spacing: 0.02em; }
.section-title.light { color: var(--cream); }
.section-title.light em { color: var(--accent); }
.section-body { font-size: 1.05rem; line-height: 1.75; color: rgba(44,44,44,0.8); max-width: 520px; }

/* ====== BATTLEPASS TEASER ====== */
.battlepass-teaser {
  /* background intentionally removed — home-duo wrapper carries the shared bloop */
}
.battlepass-teaser .grid-2 {
  grid-template-columns: 1fr 1fr;
  gap: 3rem;
  align-items: stretch;
}
.bp-text {
  border: 1px solid rgba(88, 18, 23, 0.2);
  border-radius: var(--radius-lg);
  background: linear-gradient(145deg, #1a1a1a, #0a0a0a);
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  padding: 2rem;
}
.bp-text .section-eyebrow { color: var(--accent); }
.bp-text .section-title   { color: var(--cream); }
.bp-text .section-title em { color: var(--accent); }
.bp-text .section-body    { color: rgba(253, 246, 237, 0.75); }
.milestone-pills { display: flex; flex-direction: column; gap: 0.5rem; }
.pill {
  display: inline-block; padding: 0.5rem 1rem;
  border-radius: 50px; font-size: 0.82rem; font-weight: 500;
  width: fit-content;
}
.pill-voucher { background: var(--accent); color: var(--charcoal); }
.pill-drink   { background: var(--accent); color: var(--charcoal); }
.pill-merch { background: var(--black); color: var(--cream); border: 1px solid rgba(88, 18, 23, 0.4); }

.bp-visual { display: flex; align-items: stretch; justify-content: center; }
.bp-card-preview {
  width: 100%; height: auto; min-height: unset;
  background: linear-gradient(145deg, #1a1a1a, #0a0a0a);
  border-radius: var(--radius-lg);
  border: 1px solid rgba(88, 18, 23, 0.2);
  box-shadow: var(--shadow-lg), inset 0 1px 0 rgba(255,255,255,0.05);
  position: relative; overflow: hidden;
}
.bp-card-preview::before {
  content: '';
  position: absolute; top: -50%; left: -50%;
  width: 200%; height: 200%;
  background: radial-gradient(ellipse at 60% 30%, rgba(88, 18, 23, 0.06), transparent 60%);
}
.bp-card-inner {
  padding: 2.5rem 2rem;
  display: flex; flex-direction: column; align-items: center; gap: 1rem;
  height: 100%;
}
.bp-card-logo img { width: 70px; opacity: 0.95; }
.bp-card-name { color: rgba(253,246,237,0.5); font-size: 0.85rem; font-family: var(--font-body); }
.bp-card-qr-placeholder {
  width: 60%;
  aspect-ratio: 1;
  background: rgba(253,246,237,0.06);
  border-radius: 12px;
  border: 1px solid rgba(253,246,237,0.08);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0.75rem;
  box-sizing: border-box;
}

.qr-grid {
  width: 100%;
  aspect-ratio: 1;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect x='5' y='5' width='35' height='35' rx='4' fill='none' stroke='%23E2C9A0' stroke-width='4'/%3E%3Crect x='15' y='15' width='15' height='15' fill='%23E2C9A0' opacity='1'/%3E%3Crect x='60' y='5' width='35' height='35' rx='4' fill='none' stroke='%23E2C9A0' stroke-width='4'/%3E%3Crect x='70' y='15' width='15' height='15' fill='%23E2C9A0' opacity='1'/%3E%3Crect x='5' y='60' width='35' height='35' rx='4' fill='none' stroke='%23E2C9A0' stroke-width='4'/%3E%3Crect x='15' y='70' width='15' height='15' fill='%23E2C9A0' opacity='1'/%3E%3Crect x='50' y='50' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='62' y='50' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='74' y='50' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='86' y='50' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='50' y='62' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='74' y='62' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='50' y='74' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='62' y='74' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='86' y='74' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='50' y='86' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3Crect x='74' y='86' width='8' height='8' fill='%23E2C9A0' opacity='0.85'/%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  border-radius: 4px;
  opacity: 1;
}

.bp-card-inner {
  padding: 1.75rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1rem;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  justify-content: center;
}

.bp-card-logo img {
  width: 80px;
  opacity: 0.95;
}

.bp-card-name {
  color: var(--cream);
  font-size: 1.3rem;
  font-family: var(--font-nimbus);
  font-weight: 600;
  letter-spacing: 0.02em;
  text-align: center;
}
.bp-card-drinks { text-align: center; }

.bp-card-tier {
  display: flex; flex-direction: column; align-items: center; gap: 0.4rem;
}

.tier-badge {
  background: rgba(226,201,160,0.28);
  border: 1px solid rgba(226,201,160,0.95);
  color: var(--accent);
  padding: 0.5rem 1.25rem;
  border-radius: 50px;
  font-size: 0.92rem;
  font-weight: 700;
}

.bp-card-drinks {
  color: rgba(253,246,237,0.55);
  font-size: 0.82rem;
}

/* ====== MENU PREVIEW ====== */
.menu-preview { padding: 6rem 0; }
.menu-grid {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem;
  margin-top: 3rem;
}
.menu-card {
  position: relative;
  overflow: hidden;

  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(253,246,237,0.08);
  border-radius: var(--radius-lg);
  padding: 2.5rem 2rem;

  display: flex;
  flex-direction: column;
  gap: 1rem;

  transition: all var(--transition);
  cursor: pointer;
}

@media (hover: hover) {
  .menu-card:hover {
    background: rgba(88, 18, 23, 0.08);
    border-color: rgba(88, 18, 23, 0.2);
    transform: translateY(-4px);
  }
}

.menu-card-image {
  position: absolute;
  inset: 0;

  background-size: cover;
  background-position: right;

  pointer-events: none;
  z-index: 0;
}

.menu-card::before {
  content: "";
  position: absolute;
  inset: 0;

  background:
    linear-gradient(
      90deg,
      rgba(16,16,16,1) 0%,
      rgba(16,16,16,.95) 35%,
      rgba(16,16,16,.65) 60%,
      rgba(16,16,16,.2) 100%
    );

  z-index: 1;
}


.drinks-image {
  background-image: url('../images/backgrounds/drinks.avif');
  background-position: 70% center;
}

.pastries-image {
  background-image: url('../images/pastries/Pastries.jpeg');
}

.events-image {
  background-image: url('../images/events/stocktruck2.webp');
}

.menu-card h3,
.menu-card p,
.menu-card span {
  position: relative;
  z-index: 2;
}
.menu-card-icon { font-size: 2rem; }
.menu-card h3 { font-family: var(--font-nimbus); font-size: 1.4rem; color: var(--cream); }
.menu-card p { color: rgba(253,246,237,0.6); font-size: 0.9rem; line-height: 1.6; }
.menu-card-link { color: var(--accent); font-size: 0.85rem; margin-top: auto; }

/* ====== EVENTS HOME ====== */
.events-home {
  background: url(../images/backgrounds/blocks.jpg);
  background-size: 75%;
}
.events-home .event-card-body { text-align: right; }
.events-home .event-tags { justify-content: flex-end; }
/* ── Events filter bar ── */
.events-filter-bar {
  display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 1.5rem;
}
.events-filter-pill {
  padding: 0.35rem 1rem; border-radius: 999px; font-size: 0.82rem; font-weight: 600;
  border: 1.5px solid rgba(88,18,23,0.2); background: transparent; color: var(--maroon);
  cursor: pointer; transition: background 0.15s, color 0.15s, border-color 0.15s;
}
@media (hover: hover) {
  .events-filter-pill:hover { background: rgba(88,18,23,0.06); }
}
.events-filter-pill.active { background: var(--maroon); color: var(--cream); border-color: var(--maroon); }

.events-see-all { margin-top: 0.5rem; }

.events-row {
  display: flex; gap: 1.5rem; flex-wrap: wrap; margin: 0 0 2rem;
}
.event-card-small {
  background: var(--white);
  border-radius: var(--radius);
  overflow: hidden;
  min-width: 220px; flex: 1;
  box-shadow: var(--shadow);
  display: flex; flex-direction: column;
}
.event-card-img {
  width: 100%; height: 140px;
  background-size: cover; background-position: center;
  flex-shrink: 0;
}
.event-card-body {
  padding: 1.25rem; display: flex; flex-direction: column; gap: 0.4rem; flex: 1;
}
.event-type-badge {
  font-size: 0.75rem; font-weight: 600; letter-spacing: 0.05em;
  padding: 0.25rem 0.75rem; border-radius: 50px;
  width: fit-content;
  background: rgba(88, 18, 23, 0.08); color: var(--maroon-dark);
}
.event-card-title { font-family: var(--font-nimbus); font-size: 1.1rem; }
.event-card-date { font-size: 0.82rem; color: var(--maroon); font-weight: 500; }
.event-card-location { font-size: 0.82rem; color: rgba(44,44,44,0.55); }

/* ====== PAGE HERO ====== */
.page-hero {
  padding: 140px 0 5rem;
}
.page-hero-short { padding-bottom: 4rem; }
.page-title {
  font-family: var(--font-nimbus);
  font-size: clamp(2.5rem, 6vw, 5rem);
  font-weight: 700; line-height: 1.1;
  margin-bottom: 1rem;
}
.page-title.light { color: var(--cream); 
  text-align: center;
}
.page-subtitle { font-family: var(--font-body); font-size: 1.2rem; color: rgba(44,44,44,0.6); }

/* ====== ABOUT ====== */
.about-img-block { display: flex; flex-direction: column; gap: 1rem; }
.about-img-frame {
  background: var(--black);
  border-radius: var(--radius-lg);
  aspect-ratio: 4/5;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.about-logo-large {
  width: 60%; aspect-ratio: 1 / 1; opacity: 0.95;
  background: url('/images/logo_nav.png') center/contain no-repeat;
}
.about-img-caption { font-size: 0.8rem; color: rgba(44,44,44,0.45); text-align: center; }
.about-text { display: flex; flex-direction: column; gap: 1.25rem; }
.about-text p { font-size: 0.92rem; line-height: 1.8; color: rgba(44,44,44,0.75); }   /* matches .value-card p ("four things that matter to us") */
.about-text em { color: var(--maroon); font-style: normal; font-weight: 600; }
.about-text .section-eyebrow { margin-bottom: 0; }
.about-text .section-title { margin-top: -0.75rem; }

.values-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 2rem; margin-top: 3rem; }
.value-card {
  background: var(--white);
  border-radius: var(--radius-lg);
  border: 1px solid rgba(44,44,44,0.07);
  box-shadow: var(--shadow);
  display: flex; flex-direction: column;
  overflow: hidden;
}

/* Image area — swap .value-card-placeholder bg-image for a real photo */
.value-card-img {
  position: relative;
  height: 200px;
  flex-shrink: 0;
}
.value-card-placeholder {
  width: 100%; height: 100%;
  background: linear-gradient(135deg, #c9b49a 0%, #a8866a 50%, #8a6347 100%);
  background-size: cover; background-position: center;
}
/* Fade overlay — goes from transparent at top to the card's white background at bottom */
.value-card-fade {
  position: absolute; inset: 0; top: auto;
  height: 65%;
  background: linear-gradient(to bottom, transparent 0%, #ffffff 100%);
  pointer-events: none;
}

/* Text body overlaps slightly into the fade zone */
.value-card-body {
  padding: 0 1.75rem 1.75rem;
  margin-top: -2rem;
  position: relative; z-index: 1;
  display: flex; flex-direction: column; gap: 0.6rem;
}
.value-card h3 { font-family: var(--font-nimbus); font-size: 1.25rem; }
.value-card p { font-size: 0.92rem; line-height: 1.7; color: rgba(44,44,44,0.7); margin: 0; }

/* Collapse orders page: dark hero → content section */
.my-orders-main .page-hero-short { padding-bottom: 1.5rem; }
.my-orders-main .section { padding-top: 1.5rem; }

/* Collapse about spacing: origin → mission, mission → cta */
.about-origin { padding-bottom: 1.5rem; }
.about-mission { padding-top: 1.5rem; padding-bottom: 1.5rem; }
.about-cta { background: var(--black); text-align: center; padding-top: 1.5rem; }
.about-cta .section-title { color: var(--cream); }
.about-cta .section-title em { color: var(--accent); }
.about-cta p { color: rgba(253,246,237,0.6); margin-bottom: 2rem; font-family: var(--font-body); font-size: 1.1rem; }

/* ====== DRINKS ====== */
.menu-section { margin-bottom: 4rem; padding-bottom: 4rem; border-bottom: 1px solid rgba(44,44,44,0.08); }
.menu-section:last-child { border-bottom: none; }
.menu-section-header { margin-bottom: 2rem; }
.menu-category-title { font-family: var(--font-nimbus); font-size: 1.8rem; font-weight: 600; margin-bottom: 0.5rem; }
.menu-category-sub { color: rgba(44,44,44,0.55); font-size: 0.9rem; font-family: var(--font-body); font-size: 1rem; }
.drink-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; }
.drink-card {
  border: 1px solid rgba(44,44,44,0.1);
  border-radius: var(--radius); padding: 1.5rem;
  transition: all var(--transition);
  background: var(--white);
}
@media (hover: hover) {
  .drink-card:hover { box-shadow: var(--shadow); transform: translateY(-2px); }
}
.drink-card-featured { border-color: rgba(88, 18, 23, 0.3); background: linear-gradient(135deg, #fdf6ed, #f5e8cf); }
.drink-card-inner { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.5rem; }
.drink-name { font-weight: 600; font-size: 1rem; }
.drink-price { color: var(--maroon); font-weight: 600; font-size: 0.95rem; }
.drink-desc { font-size: 0.85rem; color: rgba(44,44,44,0.6); line-height: 1.5; }

.section-cta { background: var(--black); padding: 3rem 0; text-align: center; }
.section-cta p { color: rgba(253,246,237,0.65); margin-bottom: 1.25rem; font-family: var(--font-body); font-size: 1.1rem; }

/* ====== PASTRIES ====== */
.pastries-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: auto auto;
  gap: 1.25rem;
}
.pastry-card {
  border: 2;
  background: var(--charcoal);
  border-radius: var(--radius-lg);
  padding: 0;
  cursor: pointer;
  aspect-ratio: 3/4;
}
.pastry-card-wide {
  grid-column: span 2;
  aspect-ratio: 16/9;
}
.pastry-card-front {
  position: relative; overflow: hidden;
  border-radius: var(--radius-lg);
  border: 2px solid black;
  width: 100%; height: 100%;
  will-change: transform;
  transition: transform 250ms;
  transform: translateY(-4px) translateX(-4px);
}
@media (hover: hover) {
  .pastry-card:hover .pastry-card-front {
    transform: translateY(-6px) translateX(-6px);
  }
}
.pastry-card:active .pastry-card-front {
  transform: translateY(-2px) translateX(-2px);
}

.pastry-img-wrap { position: absolute; inset: 0; }
.pastry-img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; }
@media (hover: hover) {
  .pastry-card:hover .pastry-img { transform: scale(1.05); }
}
.pastry-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(10,10,10,0.8) 0%, transparent 50%);
}
.pastry-info {
  position: absolute; bottom: 0; left: 0; right: 0;
  padding: 1.5rem 1.75rem;
  display: flex; flex-direction: column; gap: 0.25rem;
}
.pastry-name { font-family: var(--font-nimbus); font-size: 1.2rem; color: var(--cream); font-weight: 600; }
.pastry-desc { font-size: 0.82rem; color: rgba(253,246,237,0.65); }
.pastry-price { color: var(--accent); font-weight: 600; font-size: 0.9rem; }
.pastry-note {
  margin-top: 3rem;
  background: var(--cream-dark);
  border-left: 3px solid var(--maroon);
  padding: 1.25rem 1.5rem;
  border-radius: 0 var(--radius) var(--radius) 0;
  display: flex; flex-direction: column; gap: 0.5rem;
}
.pastry-note p { font-size: 0.9rem; color: rgba(44,44,44,0.75); }

/* ====== EVENTS ====== */
.events-section { padding: 4rem 0; }
.events-tabs-wrap {
  background: var(--black);
  border-bottom: 1px solid rgba(253,246,237,0.06);
  position: sticky; top: var(--nav-h); z-index: 50;
  overflow-x: auto;
}
.events-tabs { max-width: 1280px; margin: 0 auto; padding: 0 2rem; display: flex; gap: 0; }
.events-tab {
  background: none; border: none; cursor: pointer;
  color: rgba(253,246,237,0.45); font-family: var(--font-body);
  font-size: 0.88rem; font-weight: 600; padding: 1rem 1.25rem;
  border-bottom: 2px solid transparent; transition: all var(--transition);
  display: flex; align-items: center; gap: 0.5rem; white-space: nowrap;
}
@media (hover: hover) {
  .events-tab:hover { color: var(--cream); }
}
.events-tab.active { color: var(--cream); border-bottom-color: var(--accent); }
.legend-item { display: flex; align-items: center; gap: 0.5rem; font-size: 0.82rem; }
.legend-dot {
  width: 10px; height: 10px; border-radius: 50%;
}
.event-truck_location, .legend-dot.event-truck_location { background: var(--maroon); }
.event-run_club, .legend-dot.event-run_club { background: #5b9e6e; }
.event-painting, .legend-dot.event-painting { background: #7b6bc4; }
.event-special, .legend-dot.event-special { background: #c46b5b; }

.events-list { display: flex; flex-direction: column; gap: 1.25rem; }
.event-card {
  display: flex; gap: 2rem; align-items: flex-start;
  background: var(--white);
  border-radius: var(--radius-lg); padding: 2rem;
  border: 1px solid rgba(44,44,44,0.07);
  box-shadow: var(--shadow);
  border-left: 4px solid var(--maroon);
}
.event-card.event-card-run_club { border-left-color: #5b9e6e; }
.event-card.event-card-painting { border-left-color: #7b6bc4; }
.event-card.event-card-special { border-left-color: #c46b5b; }

.event-date-block {
  display: flex; flex-direction: column; align-items: center;
  min-width: 60px; text-align: center;
}
.event-day { font-family: var(--font-nimbus); font-size: 2rem; font-weight: 700; line-height: 1; }
.event-month { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.1em; color: rgba(44,44,44,0.5); }
.event-year { font-size: 0.7rem; color: rgba(44,44,44,0.3); }
.event-body { flex: 1; display: flex; flex-direction: column; gap: 0.5rem; }
.event-tags { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.event-tag {
  font-size: 0.72rem; padding: 0.2rem 0.6rem;
  border-radius: 50px; font-weight: 500;
  background: rgba(88, 18, 23, 0.1); color: var(--maroon);
}
.event-tag-run_club { background: rgba(91,158,110,0.1); color: #3a6e4a; }
.event-tag-painting { background: rgba(123,107,196,0.1); color: #5a4ba0; }
.event-tag-recurring { background: rgba(44,44,44,0.06); color: rgba(44,44,44,0.55); }
.event-title { font-family: var(--font-nimbus); font-size: 1.3rem; font-weight: 600; }
.event-location { font-size: 0.85rem; color: rgba(44,44,44,0.55); }
.event-description { font-size: 0.9rem; color: rgba(44,44,44,0.7); line-height: 1.6; }
.event-time { font-size: 0.8rem; color: rgba(44,44,44,0.4); }

/* ====== AUTH ====== */
.auth-section {
  min-height: 100vh;
  display: flex; align-items: center; justify-content: center;
  padding: 100px 1rem 4rem;
  background: var(--cream-dark);
}
.auth-card {
  background: var(--white);
  border-radius: var(--radius-lg);
  padding: 3rem;
  width: 100%; max-width: 460px;
  box-shadow: var(--shadow-lg);
  display: flex; flex-direction: column; gap: 1.25rem;
}
.auth-logo { display: flex; justify-content: center; }
.auth-logo img { width: 64px; opacity: 0.9; }
.auth-title { font-family: var(--font-nimbus); font-size: 1.8rem; text-align: center; }
.auth-sub { text-align: center; color: rgba(44,44,44,0.55); font-size: 0.9rem; }
.auth-error.hidden { display: none; }
.auth-error {
  background: rgba(200, 50, 50, 0.08);
  border: 1px solid rgba(200, 50, 50, 0.2);
  color: #c83232; padding: 0.75rem 1rem;
  border-radius: var(--radius); font-size: 0.88rem;
}
.fp-step.hidden { display: none; }
.auth-form { display: flex; flex-direction: column; gap: 1rem; }
.form-group { display: flex; flex-direction: column; gap: 0.4rem; }
.form-group label { font-size: 0.82rem; font-weight: 500; color: rgba(44,44,44,0.7); }
/* All three field types, not just <input>. This selector outranks .scan-input
   (one class + one element beats one class), so when it covered inputs alone
   every <select> and <textarea> in an admin form quietly fell back to the
   smaller .scan-input scale and rendered ~3px shorter than the text field
   beside it. Listing all three is what actually makes a form line up. */
.form-group input,
.form-group select,
.form-group textarea {
  padding: 0.75rem 1rem;
  border: 1.5px solid rgba(44,44,44,0.15);
  border-radius: var(--radius);
  font-size: 0.95rem;
  line-height: 1.5;
  font-family: var(--font-body);
  background: var(--cream);
  transition: border-color var(--transition);
  width: 100%;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
  outline: none;
  border-color: var(--maroon);
  /* background-COLOR: the shorthand would wipe the chevron off a focused select */
  background-color: var(--white);
}
.auth-switch {
  display: flex; align-items: center; justify-content: center;
  flex-wrap: wrap; gap: 0.25em; text-align: center;
  font-size: 0.85rem; color: rgba(44,44,44,0.55); margin-top: 1.25rem;
}
.auth-switch a { color: var(--maroon); font-weight: 500; white-space: nowrap; }
/* Birthday split fields */
.birthday-fields { display: flex; gap: 0.5rem; }
.birthday-fields input { min-width: 0; text-align: center; }

/* ====== BATTLEPASS PAGE ====== */
.battlepass-page { padding-top: 100px; }
.bp-user-card {
  display: flex; gap: 3rem; align-items: flex-start;
  background: var(--black);
  border-radius: var(--radius-lg); padding: 3rem;
  margin-bottom: 3rem;
  border: 1px solid rgba(88, 18, 23, 0.15);
  box-shadow: var(--shadow-lg);
}
.bp-user-left { flex: 1; display: flex; flex-direction: column; gap: 2rem; }
.bp-tier-badge {
  display: inline-flex; align-items: center; gap: 0.5rem;
  padding: 0.4rem 1rem; border-radius: 50px;
  font-size: 0.82rem; font-weight: 500; width: fit-content;
  background: rgba(88, 18, 23, 0.12);
  border: 1px solid rgba(226,201,160,0.25);
  color: var(--accent);
  margin-bottom: 0.5rem;
}
.bp-user-name { font-family: var(--font-nimbus); font-size: 2rem; color: var(--cream); font-weight: 600; }
.bp-user-email { color: rgba(253,246,237,0.4); font-size: 0.85rem; }
.bp-stats { display: flex; gap: 2rem; }
.bp-stat { display: flex; flex-direction: column; gap: 0.25rem; }
.bp-stat-number { font-family: var(--font-nimbus); font-size: 2.5rem; font-weight: 700; color: var(--accent); line-height: 1; }
.bp-stat-label { font-size: 0.75rem; color: rgba(253,246,237,0.4); text-transform: uppercase; letter-spacing: 0.08em; }

.bp-progress-wrap { display: flex; flex-direction: column; gap: 0.5rem; }
.bp-progress-label { display: flex; justify-content: space-between; font-size: 0.8rem; color: rgba(253,246,237,0.5); }
.bp-progress-bar {
  height: 8px; background: rgba(255,255,255,0.08);
  border-radius: 50px; overflow: hidden;
}
.bp-progress-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--accent), rgba(226,201,160,0.6));
  border-radius: 50px;
  transition: width 1s ease;
}
.bp-next-reward { font-size: 0.82rem; color: rgba(253,246,237,0.5); }
.bp-next-reward em { color: var(--accent); font-style: normal; }

.bp-qr-block {
  display: flex; flex-direction: column; align-items: center; gap: 1rem;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(88, 18, 23, 0.12);
  border-radius: var(--radius-lg);
  padding: 2rem;
}
.bp-qr-label { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.15em; color: rgba(253,246,237,0.4); }
.bp-qr-frame {
  background: var(--cream);
  padding: 1rem; border-radius: var(--radius);
}
.bp-qr-img { width: 200px; height: 200px; }
.bp-qr-hint { font-size: 0.78rem; color: rgba(253,246,237,0.35); text-align: center; max-width: 180px; }

/* Milestones Track */
.bp-milestones-section { margin-bottom: 3rem; }
.bp-milestones-title, .bp-section-title {
  font-family: var(--font-nimbus); font-size: 1.5rem; font-weight: 600;
  margin-bottom: 2rem;
}
.bp-milestones-track {
  display: flex; gap: 1rem; overflow-x: auto; padding-bottom: 1rem;
}
.milestone-node {
  display: flex; flex-direction: column; align-items: center; gap: 0.5rem;
  min-width: 110px; text-align: center; position: relative;
}
.milestone-node:not(:last-child)::after {
  content: '';
  position: absolute; top: 22px; left: calc(50% + 22px);
  width: calc(100% - 12px); height: 2px;
  background: rgba(44,44,44,0.12);
}
.milestone-node.earned::after { background: rgba(88, 18, 23, 0.4); }
.milestone-bubble {
  width: 44px; height: 44px;
  border-radius: 50%;
  background: rgba(44,44,44,0.06);
  border: 2px solid rgba(44,44,44,0.15);
  display: flex; align-items: center; justify-content: center;
  font-size: 1.1rem;
  transition: all var(--transition);
}
.milestone-node.earned .milestone-bubble {
  background: rgba(88, 18, 23, 0.12);
  border-color: var(--maroon);
}
.milestone-node.current .milestone-bubble {
  border-color: var(--maroon); border-width: 3px;
  box-shadow: 0 0 0 4px rgba(88, 18, 23, 0.15);
  animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
  0%, 100% { box-shadow: 0 0 0 4px rgba(88, 18, 23, 0.15); }
  50% { box-shadow: 0 0 0 8px rgba(226,201,160,0.05); }
}
.milestone-icon { font-size: 1rem; }
.milestone-drinks { font-size: 0.75rem; font-weight: 700; color: rgba(44,44,44,0.5); }
.milestone-node.earned .milestone-drinks { color: var(--maroon); }
.milestone-desc { font-size: 0.68rem; color: rgba(44,44,44,0.45); line-height: 1.4; }
.milestone-status { font-size: 0.65rem; padding: 0.15rem 0.5rem; border-radius: 50px; font-weight: 600; }
.milestone-ready { background: rgba(88, 18, 23, 0.12); color: var(--maroon); }
.milestone-claimed { background: rgba(44,44,44,0.06); color: rgba(44,44,44,0.4); }

/* Rewards Grid */
.rewards-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1.25rem; }
.reward-card {
  background: linear-gradient(135deg, var(--black), var(--charcoal-lt));
  border: 1px solid rgba(88, 18, 23, 0.2);
  border-radius: var(--radius-lg); padding: 2rem;
  display: flex; flex-direction: column; gap: 0.75rem;
  color: var(--cream);
}
.reward-icon { font-size: 2rem; }
.reward-card h4 { font-family: var(--font-nimbus); font-size: 1rem; }
.reward-milestone { font-size: 0.75rem; color: rgba(253,246,237,0.4); }
.reward-instructions { font-size: 0.8rem; color: rgba(253,246,237,0.55); line-height: 1.5; }

/* History */
.history-list { display: flex; flex-direction: column; gap: 0.5rem; }
.history-item {
  display: flex; justify-content: space-between;
  padding: 0.75rem 1rem;
  background: var(--cream-dark); border-radius: var(--radius);
}
.history-drink { font-size: 0.9rem; font-weight: 500; }
.history-date { font-size: 0.8rem; color: rgba(44,44,44,0.45); }

/* Admin scan */
.scan-input {
  width: 100%; padding: 0.75rem 1rem;
  border: 1.5px solid rgba(44,44,44,0.15);
  border-radius: var(--radius); font-size: 0.95rem; font-family: var(--font-body);
  background: var(--cream);
}
.scan-result { margin-top: 1.5rem; padding: 1rem; border-radius: var(--radius); font-size: 0.9rem; }
.scan-success { background: rgba(91,158,110,0.12); color: #3a6e4a; padding: 1rem; border-radius: var(--radius); }
.scan-error { background: rgba(200,50,50,0.08); color: #c83232; padding: 1rem; border-radius: var(--radius); }

/* ====== FOOTER ====== */
.footer {
  background: var(--black);
  border-top: 1px solid rgba(88, 18, 23, 0.1);
}
.footer-inner {
  max-width: 1280px; margin: 0 auto; padding: 4rem 2rem;
  display: grid; grid-template-columns: 2fr 1fr 1fr 1fr;
  gap: 3rem;
}
.footer-logo { width: 50px; opacity: 0.9; margin-bottom: 1rem; }
.footer-tagline { color: rgba(253,246,237,0.45); font-size: 0.9rem; line-height: 1.8; font-family: var(--font-body); }
.footer-links { display: flex; flex-direction: column; gap: 0.75rem; }
.footer-links h4 { font-size: 0.7rem; letter-spacing: 0.15em; text-transform: uppercase; color: rgba(253,246,237,0.3); margin-bottom: 0.25rem; }
.footer-links a { color: rgba(253,246,237,0.6); font-size: 0.9rem; transition: color var(--transition); }
@media (hover: hover) {
  .footer-links a:hover { color: var(--accent); }
}
.footer-social h4 { font-size: 0.7rem; letter-spacing: 0.15em; text-transform: uppercase; color: rgba(253,246,237,0.3); margin-bottom: 0.75rem; }
.footer-handle { color: var(--accent); font-weight: 500; font-size: 0.95rem; }
.footer-social-row { display: flex; gap: 0.6rem; }
.footer-social-icon {
  display: flex; align-items: center; justify-content: center;
  width: 34px; height: 34px;
  border-radius: 50%;
  background: rgba(253,246,237,0.08);
  color: rgba(253,246,237,0.65);
  transition: background var(--transition), color var(--transition);
}
@media (hover: hover) {
  .footer-social-icon:hover { background: var(--accent); color: var(--black); }
}
.footer-sub { color: rgba(253,246,237,0.35); font-size: 0.82rem; margin-top: 0.25rem; }
.footer-bottom {
  border-top: 1px solid rgba(253,246,237,0.05);
  padding: 1.5rem 2rem; text-align: center;
  color: rgba(253,246,237,0.25); font-size: 0.8rem;
}

/* ====== RESPONSIVE ====== */
@media (max-width: 900px) {
  .grid-2 { grid-template-columns: 1fr; gap: 2.5rem; }
  .battlepass-teaser .grid-2 { grid-template-columns: 1fr; }
  .bp-text { order: 1; }
  .bp-visual { order: 2; display: flex; justify-content: center; }
  .bp-card-preview { max-width: 300px; }
  .menu-grid { grid-template-columns: 1fr; }
  .values-grid { grid-template-columns: 1fr; }
  .footer-inner { grid-template-columns: 1fr 1fr; gap: 2rem; }
  .pastries-grid { grid-template-columns: 1fr 1fr; }
  .pastry-card-wide { grid-column: span 2; }
  .bp-user-card { flex-direction: column; }
}
/* ── Main navbar: hamburger collapse at 1034px and below ── */
@media (max-width: 1034px) {
  .nav-links {
    display: none; flex-direction: column;
    position: absolute; top: var(--nav-h); left: 0; right: 0;
    background: rgba(10,10,10,0.97);
    padding: 1.5rem; gap: 0.5rem;
    border-bottom: 1px solid rgba(226,201,160,0.15);
  }
  .nav-links.open { display: flex; }
  .nav-toggle { display: flex; }
  .nav-links .nav-link {
    display: block; width: 100%;
    padding: 0.75rem 1rem; font-size: 1rem;
    border-radius: var(--radius);
  }
  .nav-links .nav-cta { margin-top: 0.5rem; text-align: center; }
  .nav-links .nav-pase { text-align: center; }

  /* Dropdown becomes an inline expanding section in the stacked mobile menu
     instead of a floating panel. */
  .nav-dropdown { width: 100%; }
  .nav-dropdown-toggle { width: 100%; justify-content: space-between; }
  .nav-dropdown-menu {
    position: static; margin-top: 0.25rem; margin-left: 0.75rem;
    box-shadow: none; border-color: rgba(226,201,160,0.1);
  }
}
@media (max-width: 650px) {
  .hero-content { padding-left: 2rem; }
  .pastries-grid { grid-template-columns: 1fr; }
  .pastry-card-wide { grid-column: span 1; aspect-ratio: 4/3; }
  .footer-inner { grid-template-columns: 1fr; }
  .bp-stats { flex-direction: column; gap: 1rem; }
  .event-card { flex-direction: column; gap: 1rem; }
}


/* ====== ADMIN PANEL — mobile first ====== */
.admin-layout {
  min-height: 100vh;
  background: #f0ebe4;
  display: flex;
  flex-direction: column;
}

/* ── Header / Navbar ── */
.admin-header {
  background: var(--black);
  border-bottom: 1px solid rgba(88,18,23,0.2);
  position: sticky; top: 0; z-index: 200;
}
.admin-header-inner {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 1rem; height: 58px;
}
.admin-header-brand {
  display: flex; align-items: center; gap: 0.6rem;
}
.admin-header-logo {
  width: 32px; height: 32px; object-fit: contain;
}
.admin-header-name {
  font-family: var(--font-nimbus);
  font-size: 1rem; color: var(--cream); letter-spacing: 0.02em;
}
.admin-header-sub {
  font-family: var(--font-body);
  font-size: 0.65rem; color: rgba(253,246,237,0.35);
  text-transform: uppercase; letter-spacing: 0.12em;
  margin-left: 0.35rem; font-style: normal;
}
.admin-header-right {
  display: flex; align-items: center; gap: 0.75rem;
}
.admin-header-user {
  font-size: 0.75rem; color: rgba(253,246,237,0.4);
  display: none;
}
.admin-header-user em { color: var(--accent); font-style: normal; }

/* Hamburger */
.admin-nav-toggle {
  display: flex; flex-direction: column; gap: 5px;
  background: none; border: none; cursor: pointer; padding: 4px;
}
.admin-nav-toggle span {
  display: block; width: 22px; height: 2px;
  background: var(--cream); border-radius: 2px;
  transition: var(--transition);
}
.admin-nav-toggle.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.admin-nav-toggle.open span:nth-child(2) { opacity: 0; }
.admin-nav-toggle.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* Drawer */
.admin-nav-drawer {
  display: none;
  flex-direction: column;
  background: var(--black);
  border-top: 1px solid rgba(255,255,255,0.05);
  padding: 0.5rem 0;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}
.admin-nav-drawer.open {
  display: flex;
  max-height: 500px;
}
.admin-nav-item {
  display: flex; align-items: center; gap: 0.75rem;
  padding: 0.75rem 1.25rem;
  color: rgba(253,246,237,0.55);
  font-size: 0.9rem;
  transition: all var(--transition);
  border-left: 3px solid transparent;
}
@media (hover: hover) {
  .admin-nav-item:hover { background: rgba(255,255,255,0.04); color: var(--cream); }
}
.admin-nav-item.active {
  color: var(--cream);
  background: rgba(226,201,160,0.08);
  border-left-color: var(--accent);
}
.admin-nav-logout { color: rgba(253,246,237,0.3); margin-top: 0.25rem; border-top: 1px solid rgba(255,255,255,0.05); }
@media (hover: hover) {
  .admin-nav-logout:hover { color: var(--accent); }
}
.admin-nav-icon { font-size: 0.9rem; width: 20px; text-align: center; }

/* ── Main content ── */
.admin-main {
  flex: 1;
  padding: 1.25rem 1rem 3rem;
  max-width: 1100px;
  width: 100%;
  margin: 0 auto;
}

/* ── Page header ── */
.admin-page-header { margin-bottom: 1.25rem; }
.admin-page-title {
  font-family: var(--font-nimbus);
  font-size: 1.6rem; color: var(--charcoal);
}
.admin-page-sub { color: rgba(44,44,44,0.45); font-size: 0.82rem; margin-top: 0.2rem; }

/* ── Stat cards ── */
.admin-stats-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.75rem; margin-bottom: 1.25rem;
}
.admin-stat-card {
  background: var(--white); border-radius: var(--radius);
  padding: 1rem 0.75rem;
  display: flex; align-items: center; gap: 0.75rem;
  box-shadow: var(--shadow);
  border: 1px solid rgba(44,44,44,0.06);
}
.admin-stat-cta { cursor: pointer; transition: all var(--transition); }
@media (hover: hover) {
  .admin-stat-cta:hover { background: var(--maroon); }
}
@media (hover: hover) {
  .admin-stat-cta:hover .admin-stat-number,
  .admin-stat-cta:hover .admin-stat-label { color: var(--cream); }
}
.admin-stat-icon { font-size: 1.4rem; }
.admin-stat-number {
  display: block; font-family: var(--font-nimbus);
  font-size: 1.4rem; line-height: 1; color: var(--charcoal);
}
.admin-stat-label {
  display: block; font-size: 0.65rem; color: rgba(44,44,44,0.4);
  margin-top: 0.2rem; text-transform: uppercase; letter-spacing: 0.08em;
}

/* ── Cards ── */
.admin-card {
  background: var(--white); border-radius: var(--radius-lg);
  padding: 1.25rem; box-shadow: var(--shadow);
  border: 1px solid rgba(44,44,44,0.06);
}
.admin-card-title {
  font-family: var(--font-nimbus); font-size: 1rem;
  margin-bottom: 1rem; color: var(--charcoal);
}
.admin-card-link { display: block; margin-top: 1rem; font-size: 0.8rem; color: var(--maroon); }
.admin-empty { color: rgba(44,44,44,0.4); font-size: 0.85rem; }

/* Two col — stacks on mobile */
.admin-two-col { display: flex; flex-direction: column; gap: 1rem; }

/* ── Lists ── */
.admin-list { display: flex; flex-direction: column; gap: 0.6rem; }
.admin-list-item {
  display: flex; justify-content: space-between; align-items: center;
  padding: 0.6rem 0.75rem; border-radius: var(--radius);
  background: rgba(44,44,44,0.03); gap: 0.5rem; flex-wrap: wrap;
}
.admin-list-item-inactive { opacity: 0.45; }
.admin-list-name { display: block; font-size: 0.88rem; font-weight: 500; }
.admin-list-sub { display: block; font-size: 0.72rem; color: rgba(44,44,44,0.45); }
.admin-list-right { display: flex; flex-direction: column; align-items: flex-end; gap: 0.3rem; flex-shrink: 0; }

/* ── Badges ── */
.admin-badge {
  background: rgba(88,18,23,0.08); color: var(--maroon);
  padding: 0.18rem 0.55rem; border-radius: 50px;
  font-size: 0.7rem; font-weight: 500; display: inline-flex; align-items: center; gap: 0.2rem;
}
.admin-role-badge { padding: 0.18rem 0.55rem; border-radius: 50px; font-size: 0.68rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; }
.admin-role-owner   { background: rgba(88,18,23,0.1); color: var(--maroon); }
.admin-role-manager { background: rgba(44,44,44,0.08); color: var(--charcoal); }
.admin-role-barista { background: rgba(91,158,110,0.1); color: #3a6e4a; }
.admin-toggle-btn {
  background: none; border: 1px solid rgba(44,44,44,0.15);
  border-radius: var(--radius); padding: 0.2rem 0.55rem;
  font-size: 0.7rem; cursor: pointer; color: rgba(44,44,44,0.55);
  transition: all var(--transition); font-family: var(--font-body);
  white-space: nowrap;
}
@media (hover: hover) {
  .admin-toggle-btn:hover { border-color: var(--maroon); color: var(--maroon); }
}

/* ── Table ── */
.admin-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.admin-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; min-width: 540px; }
.admin-table th {
  text-align: left; padding: 0.5rem 0.6rem;
  font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.08em;
  color: rgba(44,44,44,0.4); border-bottom: 1px solid rgba(44,44,44,0.08);
}
.admin-table td { padding: 0.65rem 0.6rem; border-bottom: 1px solid rgba(44,44,44,0.05); vertical-align: middle; }
.admin-table tr:last-child td { border-bottom: none; }
.admin-td-name { font-weight: 500; }
.admin-td-sub { color: rgba(44,44,44,0.45); font-size: 0.75rem; }
.admin-td-num { font-weight: 600; color: var(--maroon); }

/* ── Scan page ── */
.admin-scan-tabs { display: flex; gap: 0.4rem; margin-bottom: 1rem; flex-wrap: wrap; }
.admin-scan-tab {
  background: rgba(44,44,44,0.06); border: 1px solid rgba(44,44,44,0.1);
  border-radius: var(--radius); padding: 0.5rem 0.9rem;
  font-size: 0.82rem; cursor: pointer; font-family: var(--font-body);
  font-weight: 500; transition: all var(--transition); color: var(--charcoal);
}
.admin-scan-tab.active { background: var(--maroon); color: var(--cream); border-color: var(--maroon); }
.admin-scan-panel.hidden { display: none; }
.admin-scan-layout { display: flex; flex-direction: column; gap: 1rem; }

.scan-result-card { text-align: center; padding: 1.5rem; }
.scan-success-card { border: 2px solid rgba(91,158,110,0.3); background: rgba(91,158,110,0.04); }
.scan-error-card   { border: 2px solid rgba(200,50,50,0.2); background: rgba(200,50,50,0.03); }
.scan-result-icon { font-size: 2.5rem; font-weight: 700; color: #3a6e4a; margin-bottom: 0.5rem; }
.scan-result-icon-err { color: #c83232; }
.scan-result-stats { display: flex; justify-content: center; gap: 2rem; margin: 1rem 0; }
.scan-result-stat { display: flex; flex-direction: column; gap: 0.2rem; }
.scan-result-num { font-family: var(--font-nimbus); font-size: 1.6rem; color: var(--charcoal); }
.scan-result-lbl { font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(44,44,44,0.4); }
.scan-new-reward {
  display: flex; align-items: flex-start; gap: 0.75rem; text-align: left;
  background: rgba(88,18,23,0.06); border: 1px solid rgba(88,18,23,0.15);
  border-radius: var(--radius); padding: 0.9rem; margin-top: 1rem;
}
.scan-reward-icon { font-size: 1.3rem; }
.scan-new-reward strong { color: var(--maroon); display: block; margin-bottom: 0.2rem; font-size: 0.85rem; }
.scan-new-reward p { font-size: 0.8rem; color: rgba(44,44,44,0.7); }

/* ── Forms ── */
.scan-input {
  width: 100%; padding: 0.7rem 0.9rem;
  border: 1.5px solid rgba(44,44,44,0.15);
  border-radius: var(--radius); font-size: 0.92rem;
  font-family: var(--font-body); background: var(--cream);
  /* Pinned, not `normal`: a native <select>'s default line-height is tighter
     than an <input>'s, so at identical padding the dropdowns rendered ~3px
     shorter than the text fields beside them in every admin form. */
  line-height: 1.5;
  transition: border-color var(--transition);
}
/* background-COLOR, not the shorthand — the shorthand would wipe the chevron
   background-image off selects the moment they took focus. */
.scan-input:focus { outline: none; border-color: var(--maroon); background-color: var(--white); }

/* Selects: drop the native control and draw our own chevron, so a dropdown is
   the same box as a text input rather than an OS-styled one. */
select.scan-input {
  appearance: none; -webkit-appearance: none;
  padding-right: 2.1rem;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23581217' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 0.75rem center;
  background-size: 14px;
}
.form-hint { font-size: 0.72rem; color: rgba(44,44,44,0.4); margin-top: 0.25rem; display: block; }

/* ── Alerts ── */
.admin-alert { padding: 0.7rem 1rem; border-radius: var(--radius); margin-bottom: 1rem; font-size: 0.85rem; }
.admin-alert-success { background: rgba(91,158,110,0.1); color: #3a6e4a; border: 1px solid rgba(91,158,110,0.2); }
.admin-alert-error   { background: rgba(200,50,50,0.08); color: #c83232; border: 1px solid rgba(200,50,50,0.15); }

/* ── Dashboard two-col ── */
.admin-two-col-dash { display: flex; flex-direction: column; gap: 1rem; }

/* ── Admin drink/pastry rows ── */
.drinks-cat-heading { font-family: var(--font-nimbus); margin-bottom: 0.75rem; margin-top: 0; }
.drinks-cat-cold { margin-top: 1.5rem; }
.admin-drink-row { margin-bottom: 0.75rem; }
.drink-unavailable { opacity: 0.5; }
.admin-drink-row.dragging { opacity: 0.4; box-shadow: 0 8px 20px rgba(0,0,0,0.15); }
.drag-handle {
  cursor: grab; color: rgba(44,44,44,0.35); font-size: 1.1rem;
  flex-shrink: 0; user-select: none; padding: 0 0.15rem;
  touch-action: none;
}
@media (hover: hover) {
  .drag-handle:hover { color: var(--maroon); }
}
.drag-handle:active { cursor: grabbing; }
.drag-handle-hint { color: rgba(44,44,44,0.4); font-weight: 700; }
[data-reorder-group] { min-height: 4px; }
.admin-stats-grid-new {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: auto auto;
    gap: 0.75rem;
    margin-bottom: 1.25rem;}
  .admin-stats-grid-new .admin-stat-card:nth-child(1) { grid-column: 1; grid-row: 1; }
  .admin-stats-grid-new .admin-stat-card:nth-child(2) { grid-column: 2; grid-row: 1; }
  .admin-stats-grid-new .admin-stat-scan { grid-column: 1 / span 2; grid-row: 2; justify-content: center; }

/* ── Desktop upgrades (916px+ — below that the admin nav stays a hamburger drawer) ── */
@media (min-width: 916px) {
  .admin-header-user { display: inline; }
  .admin-nav-toggle { display: none; }
  .admin-nav-drawer {
    display: flex !important;
    flex-direction: row;
    max-height: none;
    border-top: none;
    padding: 0;
    border-top: 1px solid rgba(255,255,255,0.05);
    overflow: visible;
  }
  .admin-nav-item {
    padding: 0.6rem 1rem;
    border-left: none;
    border-bottom: 2px solid transparent;
    font-size: 0.82rem;
  }
  .admin-nav-item.active {
    border-left: none;
    border-bottom-color: var(--maroon);
    background: rgba(88,18,23,0.1);
  }
  .admin-nav-logout { border-top: none; margin-top: 0; margin-left: auto; }
  .admin-main { padding: 2rem 2rem 3rem; }
  .admin-two-col { flex-direction: row; align-items: flex-start; }
  .admin-two-col > * { flex: 1; }
  .admin-two-col-dash { flex-direction: row; }
  .admin-two-col-dash > * { flex: 1; }
  .admin-stats-grid { gap: 1rem; }
  .admin-stat-card { padding: 1.25rem; }
  .admin-stat-number { font-size: 1.8rem; }
  .admin-page-title { font-size: 2rem; }
}


/* ====== BATTLEPASS PAGE — mobile first ====== */
.bp-page { padding-top: 80px; padding-bottom: 3rem; background: var(--cream-dark); min-height: 100vh; }
.bp-container { max-width: 560px; margin: 0 auto; padding: 1rem 1rem 4rem; display: flex; flex-direction: column; gap: 1rem; }

/* QR card */
.bp-qr-card {
  background: var(--black);
  border-radius: var(--radius-lg);
  padding: 1.5rem;
  border: 1px solid rgba(226,201,160,0.15);
  display: flex; flex-direction: column; align-items: center; text-align: center;
}
.bp-tier-chip {
  display: inline-flex; align-items: center; gap: 0.4rem;
  background: rgba(226,201,160,0.12); border: 1px solid rgba(226,201,160,0.4);
  color: var(--accent); padding: 0.25rem 0.7rem;
  border-radius: 50px; font-size: 0.72rem; font-weight: 600;
  margin-bottom: 0.5rem;
}
.bp-name { font-family: var(--font-nimbus); font-size: 1.5rem; color: var(--cream); line-height: 1.1; }
.bp-email { font-size: 0.75rem; color: rgba(253,246,237,0.3); margin-top: 0.2rem; }
.bp-qr-box {
  background: var(--cream); padding: 0.75rem; border-radius: 10px;
  margin-top: 1.25rem; display: block;
  width: fit-content; margin-left: auto; margin-right: auto;
}
.bp-qr-img { width: 200px; height: 200px; display: block; }
.bp-qr-hint { font-size: 0.72rem; color: rgba(253,246,237,0.25); margin-top: 0.75rem; text-align: center; }

/* Stats row */
.bp-stats-row {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem;
}
.bp-stat-box {
  background: var(--white); border-radius: var(--radius);
  padding: 1rem 0.75rem; text-align: center;
  border: 1px solid rgba(44,44,44,0.07);
  display: flex; flex-direction: column; gap: 0.15rem;
}
.bp-stat-num { font-family: var(--font-nimbus); font-size: 1.8rem; color: var(--maroon); line-height: 1; }
.bp-stat-lbl { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.1em; color: rgba(44,44,44,0.4); }

/* Generic section card */
.bp-section-card {
  background: var(--white); border-radius: var(--radius-lg);
  padding: 1.25rem;
  border: 1px solid rgba(44,44,44,0.07);
}
.bp-section-label {
  font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.12em;
  color: rgba(44,44,44,0.4); font-weight: 600; margin-bottom: 0.9rem;
}
.bp-section-hint { font-size: 0.8rem; color: rgba(44,44,44,0.45); margin-top: -0.5rem; margin-bottom: 0.9rem; }

/* 9 lives */
.lives-row { display: flex; gap: 0.4rem; align-items: center; flex-wrap: wrap; }
.life-dot {
  width: 32px; height: 32px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center; font-size: 0.9rem;
}
.life-empty { background: rgba(44,44,44,0.06); border: 1.5px dashed rgba(44,44,44,0.15); }
.life-used  { background: rgba(88,18,23,0.08); border: 1.5px solid rgba(88,18,23,0.2); }
.life-free  { background: var(--maroon); border: none; font-size: 0.85rem; }
.lives-count { font-size: 0.75rem; color: rgba(44,44,44,0.4); margin-top: 0.75rem; }

/* Progress */
.bp-next-reward-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.9rem; }
.bp-next-icon { font-size: 1.6rem; flex-shrink: 0; }
.bp-next-desc { font-size: 0.88rem; font-weight: 600; color: var(--charcoal); }
.bp-next-count { font-size: 0.75rem; color: rgba(44,44,44,0.45); margin-top: 0.1rem; }
.bp-prog-track { height: 8px; background: rgba(44,44,44,0.08); border-radius: 50px; overflow: hidden; }
.bp-prog-fill { height: 100%; background: linear-gradient(90deg, var(--maroon), var(--maroon-light)); border-radius: 50px; transition: width 1s ease; width: 0; }

/* Upcoming milestones */
.bp-ms-list { display: flex; flex-direction: column; gap: 0.6rem; }
.bp-ms-item {
  display: flex; align-items: center; gap: 0.75rem;
  padding: 0.75rem; border-radius: var(--radius);
  background: rgba(44,44,44,0.03);
}
.bp-ms-next { background: rgba(88,18,23,0.05); border: 1px solid rgba(88,18,23,0.12); }
.bp-ms-icon { font-size: 1.2rem; flex-shrink: 0; }
.bp-ms-body { flex: 1; }
.bp-ms-desc { font-size: 0.85rem; font-weight: 500; }
.bp-ms-num  { font-size: 0.7rem; color: rgba(44,44,44,0.4); margin-top: 0.1rem; }
.bp-ms-badge {
  font-size: 0.65rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em;
  background: var(--maroon); color: var(--cream);
  padding: 0.2rem 0.5rem; border-radius: 50px; flex-shrink: 0;
}

/* Claimable */
.bp-claim-list { display: flex; flex-direction: column; gap: 0.75rem; }
.bp-claim-item {
  display: flex; flex-direction: column; align-items: stretch; gap: 0.75rem;
  background: var(--black); border-radius: var(--radius);
  padding: 1rem; border: 1px solid rgba(88,18,23,0.15);
}
.bp-claim-top { display: flex; align-items: center; gap: 0.75rem; }
.bp-claim-icon { font-size: 1.4rem; flex-shrink: 0; }
.bp-claim-body { flex: 1; }
.bp-claim-title { font-size: 0.85rem; font-weight: 600; color: var(--cream); line-height: 1.3; }
.bp-claim-earned { font-size: 0.7rem; color: rgba(253,246,237,0.3); margin-top: 0.15rem; }
.bp-claim-action { width: 100%; }
.bp-claim-action .claim-btn { width: 100%; }
.bp-claim-show { width: 100%; }
.bp-code-display { display: flex; flex-direction: column; align-items: center; }
.bp-code { font-family: monospace; font-size: 1.6rem; font-weight: 700; color: var(--accent); letter-spacing: 0.2em; }
.bp-code-hint { font-size: 0.62rem; color: rgba(253,246,237,0.3); }

/* Vouchers */
.bp-voucher-list { display: flex; flex-direction: column; gap: 0.6rem; }
.bp-voucher-item {
  display: flex; align-items: center; gap: 0.75rem;
  background: rgba(44,44,44,0.03); border-radius: var(--radius); padding: 0.85rem;
}
.voucher-urgent { background: rgba(200,100,50,0.05); border: 1px solid rgba(200,100,50,0.2); }
.bp-item-faded { opacity: 0.4; }
.bp-voucher-icon { font-size: 1.1rem; flex-shrink: 0; }
.bp-voucher-body { flex: 1; }
.bp-voucher-desc { font-size: 0.85rem; font-weight: 500; }
.bp-voucher-sub  { font-size: 0.7rem; color: rgba(44,44,44,0.4); margin-top: 0.1rem; }
.bp-days-left { display: flex; flex-direction: column; align-items: center; flex-shrink: 0; min-width: 36px; }
.bp-days-num { font-family: var(--font-nimbus); font-size: 1.4rem; color: var(--maroon); line-height: 1; }
.bp-days-lbl { font-size: 0.6rem; text-transform: uppercase; color: rgba(44,44,44,0.35); }

.bp-history-card { opacity: 0.65; }

/* ====== ADMIN STATS GRID ====== */
.admin-stats-grid-new {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: auto auto;
  gap: 0.75rem;
  margin-bottom: 1.25rem;
}
.admin-stats-grid-new .admin-stat-card:nth-child(1) { grid-column: 1; grid-row: 1; }
.admin-stats-grid-new .admin-stat-card:nth-child(2) { grid-column: 2; grid-row: 1; }
.admin-stats-grid-new .admin-stat-scan { grid-column: 1 / span 2; grid-row: 2; justify-content: center; }

/* ====== DRINKS PAGE TABS ====== */
.drinks-tabs-wrap {
  background: var(--black);
  border-bottom: 1px solid rgba(253,246,237,0.06);
  position: sticky; top: var(--nav-h); z-index: 50;
}
.drinks-tabs { max-width: 1280px; margin: 0 auto; padding: 0 2rem; display: flex; }
.drinks-tab {
  background: none; border: none; cursor: pointer;
  color: rgba(253,246,237,0.45); font-family: var(--font-body);
  font-size: 0.88rem; font-weight: 600; padding: 1rem 1.5rem;
  border-bottom: 2px solid transparent; transition: all var(--transition);
}
@media (hover: hover) {
  .drinks-tab:hover { color: var(--cream); }
}
.drinks-tab.active { color: var(--cream); border-bottom-color: var(--maroon); }

/* ── Search + filter ── */
.drinks-search-row {
  max-width: 1280px; margin: 0 auto; padding: 0 2rem 0.85rem;
  display: flex; gap: 0.6rem; flex-wrap: wrap;
}
.drinks-search-box {
  flex: 1; min-width: 200px;
  display: flex; align-items: center; gap: 0.5rem;
  background: rgba(255,255,255,0.05); border: 1px solid rgba(253,246,237,0.12);
  border-radius: var(--radius); padding: 0.55rem 0.85rem;
}
.drinks-search-icon { color: rgba(253,246,237,0.4); flex-shrink: 0; }
.drinks-search-box input {
  background: none; border: none; outline: none; width: 100%;
  color: var(--cream); font-family: var(--font-body); font-size: 0.88rem;
}
.drinks-search-box input::placeholder { color: rgba(253,246,237,0.35); }

.drinks-filter-wrap { position: relative; }
.drinks-filter-btn {
  display: flex; align-items: center; gap: 0.45rem;
  background: rgba(255,255,255,0.05); border: 1px solid rgba(253,246,237,0.12);
  border-radius: var(--radius); padding: 0.55rem 0.9rem;
  color: var(--cream); font-family: var(--font-body); font-size: 0.88rem; font-weight: 600;
  cursor: pointer; white-space: nowrap;
}
@media (hover: hover) {
  .drinks-filter-btn:hover { background: rgba(255,255,255,0.09); }
}
.drinks-filter-count {
  background: var(--maroon); color: var(--cream);
  font-size: 0.7rem; font-weight: 700; border-radius: 999px;
  min-width: 18px; height: 18px; display: flex; align-items: center; justify-content: center;
  padding: 0 0.3rem;
}
.drinks-filter-panel {
  display: none;
  position: absolute; top: 100%; right: 0; margin-top: 0.4rem;
  min-width: 220px; z-index: 60;
  background: #1a1a1a; border: 1px solid rgba(253,246,237,0.12);
  border-radius: var(--radius); padding: 0.6rem;
  box-shadow: 0 8px 24px rgba(0,0,0,0.4);
}
.drinks-filter-wrap.open .drinks-filter-panel { display: block; }
.drinks-filter-opt {
  display: flex; align-items: center; gap: 0.55rem;
  padding: 0.4rem 0.3rem; border-radius: 6px;
  color: rgba(253,246,237,0.85); font-size: 0.85rem; cursor: pointer;
}
@media (hover: hover) {
  .drinks-filter-opt:hover { background: rgba(255,255,255,0.06); }
}
.drinks-filter-opt input { width: auto; accent-color: var(--maroon); }
.drinks-filter-clear {
  width: 100%; margin-top: 0.4rem; padding: 0.45rem;
  background: none; border: 1px solid rgba(253,246,237,0.15); border-radius: 6px;
  color: rgba(253,246,237,0.6); font-size: 0.78rem; cursor: pointer;
}
@media (hover: hover) {
  .drinks-filter-clear:hover { color: var(--cream); border-color: rgba(253,246,237,0.3); }
}
.drink-filtered-out { display: none !important; }

.drinks-panel { animation: fadeIn 0.2s ease; }
.drinks-panel.hidden { display: none; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.drink-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; }
.drink-card {
  background: var(--charcoal);
  border: none;
  border-radius: var(--radius);
  padding: 0;
  cursor: pointer;
  display: flex; flex-direction: column;
}
.drink-card-inner-wrap {
  display: flex; flex-direction: column; gap: 0.75rem;
  padding: 1.25rem 1.5rem;
  background: var(--white);
  border-radius: var(--radius);
  border: 2px solid var(--charcoal);
  will-change: transform;
  transition: transform 250ms;
  transform: translateY(-4px) translateX(-4px);
}
@media (hover: hover) {
  .drink-card:hover .drink-card-inner-wrap {
    transform: translateY(-6px) translateX(-6px);
  }
}
.drink-card:active .drink-card-inner-wrap {
  transform: translateY(-2px) translateX(-2px);
}
.drink-card-special .drink-card-inner-wrap {
  background: linear-gradient(135deg, #fdf6ed, #f5e3e4);
  border-color: var(--maroon);
}
.drink-card-special { border-color: rgba(88,18,23,0.2); background: linear-gradient(135deg, #fdf6ed, #f5e3e4); }
.drink-card-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; }
.drink-name { font-weight: 600; font-size: 0.98rem; line-height: 1.3; }
.drink-prices { display: flex; gap: 0.4rem; flex-wrap: wrap; flex-shrink: 0; }
.drink-price-pill {
  background: rgba(88,18,23,0.08); color: var(--maroon);
  padding: 0.2rem 0.55rem; border-radius: 50px;
  font-size: 0.82rem; font-weight: 700; white-space: nowrap;
}
.drink-price-large { background: var(--maroon); color: var(--cream); }
.drink-size-label { font-size: 0.65rem; font-weight: 400; opacity: 0.8; }
.drink-flavours { display: flex; flex-direction: column; gap: 0.2rem; }
.flavours-label { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.1em; color: rgba(44,44,44,0.4); }
.flavours-list { font-size: 0.78rem; color: rgba(44,44,44,0.6); line-height: 1.5; }
.drink-special-tag { font-size: 0.7rem; color: var(--maroon); font-weight: 600; letter-spacing: 0.08em; }
.drinks-empty { color: rgba(44,44,44,0.4); font-style: italic; margin-top: 2rem; }

@media (min-width: 600px) {
  .bp-container { padding: 1.5rem 1.5rem 4rem; }
}

/* ── Quantity selector ── */
.qty-selector { display: flex; align-items: center; border: 1.5px solid rgba(44,44,44,0.15); border-radius: var(--radius); overflow: hidden; }
.qty-btn { background: rgba(44,44,44,0.06); border: none; width: 44px; height: 44px; font-size: 1.2rem; cursor: pointer; font-family: var(--font-body); transition: background var(--transition); flex-shrink: 0; }
@media (hover: hover) {
  .qty-btn:hover { background: var(--maroon); color: var(--cream); }
}
.qty-input { border: none; text-align: center; font-size: 1.1rem; font-weight: 600; width: 100%; padding: 0.6rem; background: var(--white); font-family: var(--font-body); }

/* ── Attendance dashboard ── */
.attendance-day { margin-bottom: 1.25rem; padding-bottom: 1.25rem; border-bottom: 1px solid rgba(44,44,44,0.07); }
.attendance-day:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.attendance-date { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.1em; color: rgba(44,44,44,0.4); font-weight: 600; margin-bottom: 0.6rem; }
.attendance-chips { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.attendance-chip {
  display: flex; align-items: center; gap: 0.4rem;
  background: rgba(88,18,23,0.06); border: 1px solid rgba(88,18,23,0.12);
  border-radius: 50px; padding: 0.3rem 0.75rem;
}
.attendance-name { font-size: 0.82rem; font-weight: 600; color: var(--charcoal); }
.attendance-time { font-size: 0.72rem; color: rgba(44,44,44,0.45); }
.attendance-dur { font-size: 0.68rem; font-weight: 600; color: var(--maroon); background: rgba(88,18,23,0.07); padding: 0.1rem 0.4rem; border-radius: 50px; }
.attendance-method { font-size: 0.75rem; }

/* ── Check-in page ── */
.pin-input {
  width: 100%; text-align: center;
  font-size: 2rem; letter-spacing: 0.5em; font-weight: 700;
  padding: 0.9rem 1rem;
  border: 2px solid rgba(88,18,23,0.2);
  border-radius: var(--radius); background: var(--cream);
  font-family: var(--font-body);
  transition: border-color var(--transition);
}
.pin-input:focus { outline: none; border-color: var(--maroon); }

.checkin-success-card {
  background: rgba(91,158,110,0.08);
  border: 1.5px solid rgba(91,158,110,0.25);
  border-radius: var(--radius-lg);
  padding: 2rem; text-align: center;
  margin-bottom: 1rem;
}
.checkin-success-icon { font-size: 2.5rem; color: #3a6e4a; font-weight: 700; margin-bottom: 0.5rem; }
.checkin-success-title { font-family: var(--font-nimbus); font-size: 1.4rem; margin-bottom: 0.4rem; }
.checkin-success-msg { font-size: 0.9rem; color: rgba(44,44,44,0.6); }

.checkin-table-wrap { overflow-x: auto; }
.checkin-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; }
.checkin-table th {
  text-align: left; padding: 0.5rem 0.75rem;
  font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.1em;
  color: rgba(44,44,44,0.4); border-bottom: 2px solid rgba(44,44,44,0.08);
}
.checkin-table td { padding: 0.75rem; border-bottom: 1px solid rgba(44,44,44,0.05); vertical-align: middle; }
.checkin-table tr:last-child td { border-bottom: none; }
@media (hover: hover) {
  .checkin-table tbody tr:hover { background: rgba(88,18,23,0.03); }
}
.checkin-td-day { font-weight: 600; color: var(--charcoal); }
.checkin-td-date { color: rgba(44,44,44,0.5); font-size: 0.82rem; }
.checkin-td-time { font-weight: 700; color: var(--maroon); font-family: var(--font-nimbus); font-size: 1rem; }
.checkin-badge {
  background: rgba(88,18,23,0.07); color: var(--maroon);
  padding: 0.2rem 0.6rem; border-radius: 50px;
  font-size: 0.72rem; font-weight: 500; white-space: nowrap;
}

/* ── NFC checkin page ── */
.nfc-card {
  border-radius: var(--radius-lg); padding: 2.5rem 2rem;
  border: 1px solid;
}
.nfc-card-in  { background: rgba(91,158,110,0.08);  border-color: rgba(91,158,110,0.25); }
.nfc-card-out { background: rgba(88,18,23,0.1);      border-color: rgba(88,18,23,0.25); }
.nfc-card-done{ background: rgba(44,44,44,0.06);     border-color: rgba(44,44,44,0.15); }
.nfc-card-err { background: rgba(200,50,50,0.08);    border-color: rgba(200,50,50,0.2); }
.nfc-icon  { font-size: 2.5rem; margin-bottom: 0.75rem; }
.nfc-title { font-family: var(--font-nimbus); font-size: 1.8rem; color: var(--cream); margin-bottom: 0.6rem; }
.nfc-msg   { color: rgba(253,246,237,0.65); font-size: 0.92rem; line-height: 1.6; }
.nfc-sub   { color: rgba(253,246,237,0.3); font-size: 0.78rem; margin-top: 0.5rem; }

/* Check-out success variant */
.checkin-success-out {
  background: rgba(88,18,23,0.06);
  border-color: rgba(88,18,23,0.2);
}
.checkin-success-out .checkin-success-icon { color: var(--maroon); }
.checkin-td-absent { color: rgba(44,44,44,0.25) !important; }

/* ── Auth success message ── */
.auth-success {
  background: rgba(91,158,110,0.1);
  border: 1px solid rgba(91,158,110,0.25);
  color: #2d6b3e;
  padding: 0.75rem 1rem;
  border-radius: var(--radius);
  font-size: 0.88rem;
}

/* ── Drink card image placeholder ── */
.drink-img-wrap {
  width: 100%; aspect-ratio: 4/3;
  border-radius: var(--radius);
  overflow: hidden;
  background: linear-gradient(135deg, var(--cream-dark), var(--cream-mid));
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 0.5rem;
  position: relative;
}
.drink-img-wrap img { width: 100%; height: 100%; object-fit: cover; display: block; }
.drink-img-placeholder {
  display: flex; flex-direction: column; align-items: center; gap: 0.35rem;
}
.drink-img-placeholder span:first-child { font-size: 2rem; }
.drink-img-placeholder span:last-child { font-size: 0.7rem; color: rgba(44,44,44,0.3); text-transform: uppercase; letter-spacing: 0.1em; }
.drink-card-special .drink-img-wrap { background: linear-gradient(135deg, #f5e3e4, #edd5d6); }

/* ====== CEO FLOW UPDATES ====== */

/* Glass panel button — matches btn-primary sizing, frosted look */
.btn-hero-glass {
  display: inline-flex; align-items: center;
  padding: 0.85rem 2rem;
  border-radius: var(--radius);
  font-size: 0.9rem; font-weight: 500;
  letter-spacing: 0.03em;
  text-decoration: none;
  transition: all var(--transition);
  cursor: pointer;
  background: rgba(255, 255, 255, 0.1);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1.5px solid rgba(255, 255, 255, 0.25);
  color: var(--cream);
}
@media (hover: hover) {
  .btn-hero-glass:hover {
    background: rgba(255, 255, 255, 0.18);
    border-color: rgba(255, 255, 255, 0.45);
    transform: translateY(-2px);
    box-shadow: 0 8px 24px rgba(0,0,0,0.2);
  }
}

/* Nav Pase de Café badge accent */
.nav-pase {
  background: var(--maroon) !important;
  color: var(--cream) !important;
  border-radius: var(--radius) !important;
  font-weight: 600 !important;
  letter-spacing: 0.01em;
}
@media (hover: hover) {
  .nav-pase:hover { background: var(--maroon-light) !important; }
}

/* Events empty state on home */
.events-empty-home {
  background: var(--cream-dark);
  border-radius: var(--radius);
  padding: 2rem;
  text-align: center;
  color: rgba(44,44,44,0.55);
  font-size: 0.95rem;
  margin-bottom: 1.5rem;
}
.events-empty-home strong { color: var(--maroon); }

/* Footer handle as link */
.footer-handle {
  color: var(--maroon);
  font-weight: 500;
  font-size: 0.95rem;
  text-decoration: none;
  transition: color var(--transition);
}
@media (hover: hover) {
  .footer-handle:hover { color: var(--maroon-light); }
}

/* Battlepass welcome banner */
.bp-welcome-banner {
  display: flex; align-items: flex-start; gap: 1rem;
  background: var(--maroon-pale);
  border: 1px solid rgba(88,18,23,0.15);
  border-radius: var(--radius);
  padding: 1rem 1.25rem;
  margin-bottom: 1.25rem;
}
.bp-welcome-icon { font-size: 1.5rem; flex-shrink: 0; margin-top: 2px; }
.bp-welcome-title { font-weight: 600; font-size: 0.95rem; color: var(--maroon); margin-bottom: 0.25rem; }
.bp-welcome-sub { font-size: 0.85rem; color: rgba(44,44,44,0.65); line-height: 1.5; }

/* Drink cards — equal height within grid rows */
.drink-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1rem;
  align-items: stretch;
}
.drink-card {
  height: 100%;
  display: flex;
  flex-direction: column;
}
.drink-card-inner-wrap {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
/* Push special tag to bottom so all cards align content top */
.drink-special-tag { margin-top: auto; }

/* Pastry cards — uniform height, no wild aspect-ratio variance */
.pastries-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
  align-items: stretch;
}
.pastry-card {
  aspect-ratio: unset;
  min-height: 320px;
}
.pastry-card-wide {
  grid-column: span 2;
  aspect-ratio: unset;
  min-height: 320px;
}
@media (max-width: 900px) {
  .pastries-grid { grid-template-columns: 1fr 1fr; }
  .pastry-card-wide { grid-column: span 2; min-height: 260px; }
}
@media (max-width: 600px) {
  .pastries-grid { grid-template-columns: 1fr; }
  .pastry-card-wide { grid-column: span 1; min-height: 280px; }
}

/* ====== ORDER & CART SYSTEM ====== */

/* Order Now nav link */
.nav-order-link {
  color: rgba(253,246,237,0.9) !important;
  border: 1px solid rgba(201,151,74,0.35);
  border-radius: var(--radius) !important;
  padding: 0.4rem 0.9rem !important;
  transition: all var(--transition);
}
@media (hover: hover) {
  .nav-order-link:hover { border-color: rgba(201,151,74,0.7); background: rgba(201,151,74,0.08) !important; }
}

/* Card tap hint */
.order-item-card { cursor: pointer; }
.order-add-hint {
  font-size: 0.72rem; color: var(--maroon);
  font-weight: 500; letter-spacing: 0.04em;
  margin-top: auto; padding-top: 0.25rem;
  opacity: 0;
  transition: opacity var(--transition);
}
@media (hover: hover) {
  .order-item-card:hover .order-add-hint { opacity: 1; }
}

/* ── Modal overlay ─── */
.modal-overlay {
  position: fixed; inset: 0; z-index: 2000;
  background: rgba(10,10,10,0.6);
  display: flex; align-items: flex-end; justify-content: center;
  opacity: 0; pointer-events: none;
  transition: opacity 0.25s ease;
}
.modal-overlay.open { opacity: 1; pointer-events: all; }

/* ── Modal sheet ─── */
.modal-sheet {
  background: var(--cream);
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  width: 100%; max-width: 640px;
  /* dvh after vh (fallback): at the very top of the page mobile browsers
     still show their full address bar, so the static vh unit budgets for a
     taller viewport than is actually visible — this bottom-anchored sheet
     then grows past the visible top edge and its top gets clipped/covered
     by the browser chrome. dvh tracks the *current* visible viewport, so it
     shrinks to match instead (see .hero's min-height for the same fix). */
  max-height: 92vh; max-height: 92dvh;
  overflow-y: auto; overflow-x: hidden;
  box-sizing: border-box;
  transform: translateY(40px);
  transition: transform 0.3s cubic-bezier(0.34,1.56,0.64,1);
  position: relative;
}
.modal-overlay.open .modal-sheet { transform: translateY(0); }

.modal-close {
  position: absolute; top: 1rem; right: 1rem; z-index: 10;
  background: var(--accent); border: none;
  border-radius: 50%; width: 36px; height: 36px;
  font-size: 0.9rem; cursor: pointer; color: #2c2c2c;
  display: flex; align-items: center; justify-content: center;
  transition: background var(--transition);
  line-height: 1; flex-shrink: 0;
}
@media (hover: hover) {
  .modal-close:hover { background: #c9b08a; }
}

/* Modal image — same dark as the navbar (var(--black), #0a0a0a), not the
   cream card behind it, so the drink-panel texture/photo reads as sitting on
   its own dark stage rather than a plain light card. */
.modal-img-wrap {
  width: 100%; height: 240px; overflow: hidden;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  background: var(--black);
  display: flex; align-items: center; justify-content: center;
}
.modal-img { width: 100%; height: 100%; object-fit: contain; }
/* Specials only: fill the whole image area edge-to-edge (matches the rounded
   top corners of .modal-img-wrap) instead of letterboxing like the drink/
   pastry photos above still do. */
.special-modal-img { object-fit: cover; }
.modal-panel-modal-wrap {
  width: 100%; height: 100%;
  display: block;
}
.modal-panel-modal-wrap .drink-panel-svg { width: 100%; height: 100%; display: block; }
.modal-img-placeholder {
  display: flex; flex-direction: column; align-items: center; gap: 0.5rem;
  font-size: 3.5rem; color: rgba(44,44,44,0.2);
}
.modal-img-placeholder span:last-child { font-size: 1rem; opacity: 0.5; }

/* Modal body */
.modal-body { padding: 1.25rem 1.5rem 2rem; }
.modal-header-row { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; margin-bottom: 1.25rem; }
/* "How it's made" — moved here from under the menu-grid card (see drink-how-made
   base rules further down); this override just adds the top/bottom spacing the
   card version got for free from its position in a flex column. */
.modal-body .drink-how-made { margin: 0 0 1.1rem; }
.modal-title { font-family: var(--font-nimbus); font-size: 1.5rem; color: var(--charcoal); }
.modal-subtitle { font-size: 0.78rem; color: rgba(44,44,44,0.45); margin-top: 0.25rem; text-transform: capitalize; }
.modal-price-badge {
  background: var(--maroon); color: var(--cream);
  padding: 0.3rem 0.8rem; border-radius: 50px;
  font-size: 0.9rem; font-weight: 600; white-space: nowrap; flex-shrink: 0;
}

/* Info chips */
.modal-chips {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: 0.6rem; margin-bottom: 1.25rem;
}
.modal-chip {
  background: var(--white); border: 1px solid rgba(44,44,44,0.07);
  border-radius: var(--radius); padding: 0.6rem 0.75rem;
  display: flex; align-items: center; gap: 0.6rem;
}
.chip-icon { font-size: 1.1rem; flex-shrink: 0; }
.chip-label { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(44,44,44,0.4); display: block; }
.chip-val { font-size: 0.82rem; font-weight: 500; color: var(--charcoal); display: block; }

/* Section labels in modal */
.modal-section-label {
  font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.12em;
  color: rgba(44,44,44,0.4); font-weight: 600;
  margin: 1rem 0 0.5rem;
}

/* ── Size slider ─── */
.size-slider-wrap { margin-bottom: 0.5rem; }
.size-track {
  height: 4px; background: rgba(44,44,44,0.1);
  border-radius: 99px; margin-bottom: 0.75rem;
  position: relative; overflow: visible;
}
.size-track-fill {
  position: absolute; left: 0; top: 0; height: 100%;
  background: var(--maroon); border-radius: 99px;
  transition: width 0.35s cubic-bezier(0.34,1.56,0.64,1);
}
.size-btns { display: flex; gap: 0.75rem; }
.size-btn {
  flex: 1; background: var(--white);
  border: 1.5px solid rgba(44,44,44,0.12);
  border-radius: var(--radius); padding: 0.75rem 0.5rem;
  cursor: pointer; text-align: center;
  transition: all 0.2s ease; font-family: var(--font-body);
}
@media (hover: hover) {
  .size-btn:hover { border-color: rgba(88,18,23,0.3); }
}
.size-btn.active { border-color: var(--maroon); background: rgba(88,18,23,0.04); }
.size-btn-label { display: block; font-size: 0.85rem; font-weight: 600; color: var(--charcoal); }
.size-btn-ml { display: block; font-size: 0.68rem; color: rgba(44,44,44,0.4); margin: 0.1rem 0; }
.size-btn-price { display: block; font-size: 0.82rem; font-weight: 700; color: var(--maroon); }

/* ── Alt pills (milk, flavour, sugar) ─── */
.alt-pills { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 0.25rem; }
.alt-pill {
  background: var(--white); border: 1.5px solid rgba(44,44,44,0.12);
  border-radius: 50px; padding: 0.35rem 0.85rem;
  font-size: 0.8rem; cursor: pointer; font-family: var(--font-body);
  color: var(--charcoal); transition: all 0.15s ease;
}
@media (hover: hover) {
  .alt-pill:hover { border-color: rgba(88,18,23,0.35); }
}
.alt-pill.active { border-color: var(--maroon); background: rgba(88,18,23,0.06); color: var(--maroon); font-weight: 600; }

/* Notes textarea */
.modal-notes {
  width: 100%; background: var(--white);
  border: 1.5px solid rgba(44,44,44,0.1);
  border-radius: var(--radius); padding: 0.65rem 0.85rem;
  font-family: var(--font-body); font-size: 0.85rem; color: var(--charcoal);
  resize: none; line-height: 1.5;
  transition: border-color var(--transition);
}
.modal-notes:focus { outline: none; border-color: rgba(88,18,23,0.4); }

/* Add to cart button */
.modal-add-btn { width: 100%; margin-top: 1.25rem; justify-content: center; font-size: 0.95rem; }

/* ── Pastry qty ─── */
.qty-row { display: flex; align-items: center; gap: 1.25rem; margin-bottom: 0.5rem; }
.qty-circle {
  width: 40px; height: 40px; border-radius: 50%;
  border: 1.5px solid rgba(44,44,44,0.15);
  background: var(--white); font-size: 1.3rem;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  font-family: var(--font-body); transition: all var(--transition);
}
@media (hover: hover) {
  .qty-circle:hover { border-color: var(--maroon); color: var(--maroon); }
}
.qty-display { font-size: 1.4rem; font-weight: 600; min-width: 28px; text-align: center; }

/* ── Floating cart button ─── */
.cart-fab {
  position: fixed; bottom: 2rem; right: 2rem; z-index: 1500;
  background: var(--maroon); color: var(--cream);
  border: none; border-radius: 50px;
  padding: 0.85rem 1.5rem;
  display: flex; align-items: center; gap: 0.6rem;
  cursor: pointer; font-family: var(--font-body);
  box-shadow: 0 8px 32px rgba(88,18,23,0.35);
  transition: all 0.3s cubic-bezier(0.34,1.56,0.64,1);
}
@media (hover: hover) {
  .cart-fab:hover { transform: translateY(-3px); box-shadow: 0 12px 40px rgba(88,18,23,0.45); }
}
.cart-fab.fab-hidden { opacity: 0; pointer-events: none; transform: translateY(20px); }
.cart-fab-icon { font-size: 1.1rem; }
.cart-fab-count {
  background: var(--cream); color: var(--maroon);
  width: 22px; height: 22px; border-radius: 50%;
  font-size: 0.72rem; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.cart-fab-total { font-size: 0.9rem; font-weight: 600; }

/* ── Cart sheet ─── */
.cart-sheet {
  background: var(--cream);
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  width: 100%; max-width: 640px;
  max-height: 88vh; max-height: 88dvh; display: flex; flex-direction: column;
  transform: translateY(40px);
  transition: transform 0.3s cubic-bezier(0.34,1.56,0.64,1);
}
.modal-overlay.open .cart-sheet { transform: translateY(0); }

.cart-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 1.25rem 1.5rem 1rem;
  border-bottom: 1px solid rgba(44,44,44,0.08);
  flex-shrink: 0;
}
.cart-title { font-family: var(--font-nimbus); font-size: 1.3rem; }

.cart-items { flex: 1; overflow-y: auto; padding: 0.75rem 1.5rem; }

.cart-empty {
  text-align: center; padding: 3rem 1rem;
  color: rgba(44,44,44,0.4);
}
.cart-empty span { display: block; font-size: 2.5rem; margin-bottom: 0.75rem; }

/* ── Cart item row ─── */
.cart-item {
  display: flex; align-items: center; gap: 0.85rem;
  padding: 0.85rem 0;
  border-bottom: 1px solid rgba(44,44,44,0.06);
}
.cart-item:last-child { border-bottom: none; }
.cart-item-img {
  width: 52px; height: 52px; border-radius: var(--radius);
  overflow: hidden; background: var(--cream-dark);
  flex-shrink: 0; display: flex; align-items: center; justify-content: center;
  font-size: 1.5rem;
}
.cart-item-img img { width: 100%; height: 100%; object-fit: cover; }
.cart-item-body { flex: 1; min-width: 0; }
.cart-item-name { font-size: 0.9rem; font-weight: 600; color: var(--charcoal); margin-bottom: 0.3rem; }
.cart-item-opts { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.cart-opt-pill {
  background: rgba(88,18,23,0.06); color: var(--maroon);
  border-radius: 50px; font-size: 0.68rem; padding: 0.15rem 0.55rem;
  font-weight: 500;
}
.cart-item-note { font-size: 0.72rem; color: rgba(44,44,44,0.4); font-style: italic; margin-top: 0.25rem; }
.cart-item-right { display: flex; flex-direction: column; align-items: flex-end; gap: 0.4rem; flex-shrink: 0; }
.cart-item-price { font-size: 0.9rem; font-weight: 700; color: var(--charcoal); }
.cart-remove-btn {
  background: none; border: none; cursor: pointer;
  font-size: 0.75rem; color: rgba(44,44,44,0.3);
  padding: 0.1rem 0.2rem; transition: color var(--transition);
}
@media (hover: hover) {
  .cart-remove-btn:hover { color: var(--maroon); }
}

/* Cart footer */
.cart-footer {
  padding: 1rem 1.5rem 1.5rem;
  border-top: 1px solid rgba(44,44,44,0.08);
  flex-shrink: 0; background: var(--cream);
}
.cart-total-row {
  display: flex; justify-content: space-between; align-items: baseline;
  font-size: 1.1rem; font-weight: 700; margin-bottom: 0.5rem;
}
.cart-note { font-size: 0.78rem; color: rgba(44,44,44,0.45); margin-bottom: 1rem; }

/* ── Toast ─── */
.cl-toast {
  position: fixed; bottom: 6.5rem; left: 50%; transform: translateX(-50%) translateY(12px);
  background: var(--charcoal); color: var(--cream);
  padding: 0.6rem 1.25rem; border-radius: 50px;
  font-size: 0.82rem; font-weight: 500;
  z-index: 3000; opacity: 0;
  transition: all 0.25s ease; white-space: nowrap;
  pointer-events: none;
}
.cl-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }

/* ── Order confirm page ─── */
.confirm-layout {
  display: flex; flex-direction: column; gap: 2rem;
  max-width: 900px; margin: 0 auto;
}
@media (min-width: 768px) {
  .confirm-layout { flex-direction: row; align-items: flex-start; }
  .confirm-items-col { flex: 1.1; }
  .confirm-form-col  { flex: 1; }
}
.confirm-section-title {
  font-family: var(--font-nimbus); font-size: 1.2rem;
  margin-bottom: 1rem; color: var(--charcoal);
}
.confirm-card {
  background: var(--white); border-radius: var(--radius-lg);
  padding: 1.5rem; border: 1px solid rgba(44,44,44,0.07);
}
.confirm-input {
  width: 100%; background: var(--cream);
  border: 1.5px solid rgba(44,44,44,0.1);
  border-radius: var(--radius); padding: 0.65rem 0.85rem;
  font-family: var(--font-body); font-size: 0.9rem; color: var(--charcoal);
  transition: border-color var(--transition);
}
.confirm-input:focus { outline: none; border-color: rgba(88,18,23,0.4); }
.confirm-total-box {
  display: flex; justify-content: space-between; align-items: baseline;
  background: rgba(88,18,23,0.05); border-radius: var(--radius);
  padding: 0.85rem 1rem; margin: 1.25rem 0;
  font-size: 1rem; font-weight: 600;
}
.confirm-total-num { font-size: 1.3rem; color: var(--maroon); }
.confirm-disclaimer { font-size: 0.75rem; color: rgba(44,44,44,0.4); text-align: center; margin-top: 0.75rem; }
.confirm-order-num { font-size: 0.82rem; color: rgba(44,44,44,0.5); }
.confirm-empty { color: rgba(44,44,44,0.4); font-size: 0.9rem; }

/* ── Admin orders page ─── */
.orders-page-header { text-align: center; margin-bottom: 2rem; }
.orders-page-header .admin-page-title { font-size: clamp(1.8rem, 3vw, 2.6rem); }
.orders-page-header .admin-page-sub { font-size: 0.88rem; max-width: 480px; margin: 0.4rem auto 0; }
.orders-filter-centered { justify-content: center; }
.orders-filter-row { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem; }
.order-filter-btn {
  background: var(--white); border: 1px solid rgba(44,44,44,0.12);
  border-radius: 50px; padding: 0.3rem 0.9rem;
  font-size: 0.8rem; cursor: pointer; font-family: var(--font-body);
  color: rgba(44,44,44,0.6); transition: all var(--transition);
}
@media (hover: hover) {
  .order-filter-btn:hover { border-color: var(--maroon); color: var(--maroon); }
}
.order-filter-btn.active { background: var(--maroon); color: var(--cream); border-color: var(--maroon); }

.orders-list { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; align-items: start; }
@media (max-width: 768px) {
  .orders-list { grid-template-columns: 1fr; }
}
.order-row {
  background: var(--white); border-radius: var(--radius);
  border: 1px solid rgba(44,44,44,0.07);
  padding: 0.9rem 1rem; display: flex; align-items: center; gap: 1rem;
  cursor: pointer; transition: all var(--transition);
}
@media (hover: hover) {
  .order-row:hover { border-color: rgba(88,18,23,0.2); box-shadow: var(--shadow); transform: translateY(-1px); }
}
.order-row-left { display: flex; flex-direction: column; gap: 0.2rem; flex-shrink: 0; min-width: 90px; }
.order-ref { font-size: 0.7rem; font-weight: 700; color: var(--maroon); letter-spacing: 0.05em; }
.order-time { font-size: 0.72rem; color: rgba(44,44,44,0.4); }
.order-row-mid { flex: 1; min-width: 0; }
.order-customer { font-size: 0.9rem; font-weight: 600; color: var(--charcoal); }
.order-summary { font-size: 0.75rem; color: rgba(44,44,44,0.45); margin-top: 0.15rem; }
.order-row-right { display: flex; align-items: center; gap: 0.6rem; flex-shrink: 0; }
.order-total-pill {
  background: rgba(88,18,23,0.07); color: var(--maroon);
  padding: 0.2rem 0.6rem; border-radius: 50px;
  font-size: 0.78rem; font-weight: 700;
}
.order-status-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.order-status-text { font-size: 0.75rem; font-weight: 500; }

/* Admin order detail modal */
.admin-order-modal { max-width: 560px; border-radius: var(--radius-lg); }
.order-detail-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; margin-bottom: 1.25rem; }
.order-status-badge {
  padding: 0.3rem 0.85rem; border-radius: 50px;
  font-size: 0.78rem; font-weight: 600; flex-shrink: 0;
  color: #fff;
}
.od-section-label {
  font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.12em;
  color: rgba(44,44,44,0.4); font-weight: 600; margin: 0.75rem 0 0.4rem;
}
.od-item {
  display: flex; align-items: center; gap: 0.75rem;
  padding: 0.65rem 0; border-bottom: 1px solid rgba(44,44,44,0.06);
}
.od-item:last-child { border-bottom: none; }
.od-item-img {
  width: 44px; height: 44px; border-radius: var(--radius);
  background: var(--cream-dark); overflow: hidden;
  display: flex; align-items: center; justify-content: center; font-size: 1.3rem; flex-shrink: 0;
}
.od-item-img img { width: 100%; height: 100%; object-fit: cover; }
.od-item-body { flex: 1; min-width: 0; }
.od-item-name { font-size: 0.88rem; font-weight: 600; margin-bottom: 0.25rem; }
.od-total-row {
  display: flex; justify-content: space-between;
  font-size: 1rem; font-weight: 700;
  border-top: 1.5px solid rgba(44,44,44,0.1);
  padding-top: 0.75rem; margin-top: 0.25rem;
}
.od-status-btns { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.od-status-btn {
  background: none; border: 1.5px solid; border-radius: 50px;
  padding: 0.4rem 1rem; font-size: 0.82rem; cursor: pointer;
  font-family: var(--font-body); font-weight: 600;
  transition: all var(--transition);
}
@media (hover: hover) {
  .od-status-btn:hover { opacity: 0.75; }
}

@media (max-width: 600px) {
  .modal-img-wrap { height: 180px; }
  .modal-chips { grid-template-columns: 1fr 1fr; }
  .cart-fab { bottom: 1.25rem; right: 1.25rem; }
}

/* ====== IMAGE UPLOAD ZONE ====== */
.upload-zone {
  width: 100%; height: 140px;
  border: 2px dashed rgba(44,44,44,0.18);
  border-radius: var(--radius);
  display: flex; align-items: center; justify-content: center;
  cursor: pointer; overflow: hidden;
  transition: border-color var(--transition), background var(--transition);
  background: var(--cream); margin-bottom: 0.5rem;
}
@media (hover: hover) {
  .upload-zone:hover { border-color: var(--maroon); background: rgba(88,18,23,0.03); }
}
.upload-zone-sm { height: 80px; }
.upload-zone-inner {
  display: flex; flex-direction: column; align-items: center; gap: 0.3rem;
  pointer-events: none; width: 100%; height: 100%;
  justify-content: center;
}
.upload-icon { font-size: 1.8rem; opacity: 0.5; }
.upload-label { font-size: 0.85rem; font-weight: 500; color: rgba(44,44,44,0.6); }
.upload-hint { font-size: 0.7rem; color: rgba(44,44,44,0.35); }

/* Admin item tags */
.admin-item-tag {
  font-size: 0.65rem; font-weight: 600; padding: 0.1rem 0.45rem;
  border-radius: 50px; display: inline-block;
}
.tag-off { background: rgba(200,50,50,0.1); color: #c83232; }
.tag-special { background: rgba(88,18,23,0.1); color: var(--maroon); }

/* ============================================================
   RECENT CHANGES + REVIEW CHANGES MODAL — shared "diff card" look
   used by both the server-rendered undo panel (recent-changes.ejs)
   and the client-side pre-save confirm modal (admin-review-changes.js).
   Kept in one place so the two features read as one system.
   ============================================================ */
/* Collapsed by default (<details> has no "open" attribute unless set) —
   a boss with a long history of edits doesn't have to scroll past it. */
.recent-changes-summary {
  cursor: pointer; list-style: none;
  display: flex; align-items: center; gap: 0.5rem;
  margin-bottom: 0;
}
.recent-changes[open] .recent-changes-summary { margin-bottom: 1rem; }
.recent-changes-summary::-webkit-details-marker { display: none; }
.recent-changes-summary::before {
  content: '›'; display: inline-block; font-size: 1.1rem; color: rgba(44,44,44,0.4);
  transition: transform var(--transition);
}
.recent-changes[open] .recent-changes-summary::before { transform: rotate(90deg); }
.recent-changes-count {
  font-size: 0.72rem; font-weight: 700; color: var(--maroon);
  background: rgba(88,18,23,0.08); border-radius: 999px; padding: 0.1rem 0.5rem;
}
.recent-changes-sub { font-size: 0.78rem; color: rgba(44,44,44,0.5); margin: -0.5rem 0 1rem; }

.change-card {
  border: 1px solid rgba(44,44,44,0.08); border-radius: var(--radius);
  padding: 0.85rem 1rem; margin-bottom: 0.75rem; background: rgba(253,246,237,0.4);
}
.change-card:last-child { margin-bottom: 0; }

.change-card-head {
  display: flex; align-items: center; flex-wrap: wrap; gap: 0.5rem;
  margin-bottom: 0.6rem;
}
.change-badge {
  font-size: 0.65rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase;
  padding: 0.15rem 0.5rem; border-radius: 50px; flex-shrink: 0;
}
.change-badge-create { background: rgba(46,125,50,0.12); color: #2e7d32; }
.change-badge-update { background: rgba(88,18,23,0.1);   color: var(--maroon); }
.change-badge-delete { background: rgba(200,50,50,0.1);  color: #c83232; }

.change-name { font-weight: 600; font-size: 0.88rem; color: var(--charcoal); }
.change-meta { font-size: 0.72rem; color: rgba(44,44,44,0.45); margin-left: auto; }

.change-undo-form { flex-shrink: 0; }
.change-undo-btn { font-size: 0.72rem; padding: 0.3rem 0.65rem; }

.change-rows { display: flex; flex-direction: column; gap: 0.5rem; }
.change-row { display: flex; align-items: flex-start; gap: 0.6rem; flex-wrap: wrap; font-size: 0.82rem; }
.change-row-label {
  font-weight: 600; color: rgba(44,44,44,0.55); min-width: 6rem; flex-shrink: 0;
}

.change-diff { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; min-width: 0; }
.change-diff-stacked { flex-direction: column; align-items: flex-start; gap: 0.3rem; }
.change-diff-stacked .change-arrow { display: none; }

.change-text-from {
  color: #c83232; text-decoration: line-through; text-decoration-thickness: 1.5px;
  word-break: break-word;
}
.change-text-to { color: #2e7d32; font-weight: 500; word-break: break-word; }
.change-arrow { color: rgba(44,44,44,0.3); flex-shrink: 0; }

.change-color-chip { display: inline-flex; align-items: center; gap: 0.35rem; font-family: ui-monospace, monospace; font-size: 0.78rem; }
.change-color-swatch {
  width: 16px; height: 16px; border-radius: 4px; border: 1px solid rgba(44,44,44,0.15);
  display: inline-block; flex-shrink: 0;
}

.change-image-pair { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; }
.change-image-box { display: flex; flex-direction: column; align-items: flex-start; gap: 0.25rem; }
.change-image-box img {
  width: 64px; height: 64px; object-fit: cover; border-radius: 8px;
  border: 1px solid rgba(44,44,44,0.1);
}
.change-image-none {
  width: 64px; height: 64px; display: flex; align-items: center; justify-content: center;
  border-radius: 8px; border: 1px dashed rgba(44,44,44,0.2);
  font-size: 0.65rem; color: rgba(44,44,44,0.35);
}
.change-image-tag {
  font-size: 0.6rem; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase;
}
.change-image-tag-removed { color: #c83232; }
.change-image-tag-added   { color: #2e7d32; }

@media (max-width: 520px) {
  .change-meta { margin-left: 0; width: 100%; order: 3; }
  .change-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; }
  .change-row-label { min-width: 0; }
}

/* ── Review Changes modal — pre-save confirm gate, built client-side
   by admin-review-changes.js from data already on the page. ── */
.rc-modal-overlay {
  position: fixed; inset: 0; background: rgba(20,14,10,0.55);
  display: flex; align-items: flex-end; justify-content: center;
  z-index: 1000; padding: 0; opacity: 0; pointer-events: none;
  transition: opacity 0.2s ease;
}
.rc-modal-overlay.is-open { opacity: 1; pointer-events: auto; }
.rc-modal {
  background: var(--cream); border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  width: min(560px, 100%); max-height: 85vh; overflow-y: auto;
  padding: 1.25rem 1.25rem 1.5rem; box-shadow: var(--shadow-lg);
  transform: translateY(16px); transition: transform 0.2s ease;
}
.rc-modal-overlay.is-open .rc-modal { transform: translateY(0); }
.rc-modal-title { font-family: var(--font-nimbus); font-size: 1.05rem; color: var(--charcoal); margin-bottom: 0.2rem; }
.rc-modal-sub { font-size: 0.8rem; color: rgba(44,44,44,0.5); margin-bottom: 1rem; }
.rc-modal-empty { font-size: 0.85rem; color: rgba(44,44,44,0.5); padding: 0.5rem 0 1rem; }
.rc-modal-actions { display: flex; gap: 0.6rem; margin-top: 1.25rem; }
.rc-modal-actions .btn { flex: 1; }

@media (min-width: 640px) {
  .rc-modal-overlay { align-items: center; }
  .rc-modal { border-radius: var(--radius-lg); }
}

/* ====== DRINK DETAIL PAGE ====== */
.detail-back-bar {
  background: var(--black); padding: 0.75rem 0;
  border-bottom: 1px solid rgba(255,255,255,0.06);
}
.detail-back-link {
  color: rgba(253,246,237,0.55); font-size: 0.82rem;
  text-decoration: none; transition: color var(--transition);
}
@media (hover: hover) {
  .detail-back-link:hover { color: var(--cream); }
}

.detail-hero {
  padding: 3rem 0 4rem;
}
.detail-hero-hot  { background: var(--cream); }
.detail-hero-cold { background: var(--cream-dark); }

.detail-hero-inner {
  display: flex; flex-direction: column; gap: 2.5rem; align-items: flex-start;
}
@media (min-width: 768px) {
  .detail-hero-inner { flex-direction: row; align-items: flex-start; gap: 4rem; }
  .detail-left-col  { flex: 0 0 360px; }
  .detail-right-col { flex: 1; }
}

/* Image */
.detail-img-frame {
  border-radius: var(--radius-lg);
  overflow: hidden; position: relative;
  background: var(--charcoal);
  aspect-ratio: 4/3;
  box-shadow: var(--shadow-lg);
  border: 2px solid var(--charcoal);
}
.detail-img { width: 100%; height: 100%; object-fit: cover; display: block; }

.detail-identity { margin-top: 1.5rem; }
.detail-description {
  font-size: 0.95rem;
  color: rgba(44,44,44,0.65);
  line-height: 1.6;
  margin: 0.5rem 0 1.25rem;
  max-width: 36ch;
}
.detail-img-placeholder {
  width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
  font-size: 5rem; background: var(--cream-dark);
  min-height: 240px;
}
.detail-special-badge {
  position: absolute; top: 1rem; left: 1rem;
  background: var(--maroon); color: var(--cream);
  font-size: 0.72rem; font-weight: 600; letter-spacing: 0.08em;
  padding: 0.3rem 0.75rem; border-radius: 50px;
}

/* Info column */
.detail-eyebrow {
  font-size: 0.72rem; letter-spacing: 0.15em; text-transform: uppercase;
  color: var(--maroon); margin-bottom: 0.5rem; font-weight: 600;
}
.detail-title {
  font-family: var(--font-nimbus);
  font-size: clamp(2rem, 6vw, 3.5rem);
  color: var(--charcoal); line-height: 1.1;
  margin-bottom: 1.5rem;
}

/* Prices */
.detail-prices { display: flex; gap: 0.75rem; margin-bottom: 1.5rem; flex-wrap: wrap; }
.detail-price-card {
  background: var(--white); border: 1px solid rgba(44,44,44,0.1);
  border-radius: var(--radius); padding: 0.75rem 1.1rem;
  display: flex; flex-direction: column; align-items: center; gap: 0.1rem;
  min-width: 90px;
}
.detail-price-label { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.1em; color: rgba(44,44,44,0.4); }
.detail-price-ml    { font-size: 0.72rem; color: rgba(44,44,44,0.5); }
.detail-price-amount { font-size: 1.25rem; font-weight: 700; color: var(--maroon); }

/* Info chips */
.detail-chips {
  display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem; margin-bottom: 1.5rem;
}
.detail-chip {
  background: var(--white); border: 1px solid rgba(44,44,44,0.07);
  border-radius: var(--radius); padding: 0.6rem 0.75rem;
  display: flex; align-items: center; gap: 0.6rem;
}

/* Sections */
.detail-section { margin-bottom: 1.25rem; }
.detail-section-label {
  font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.12em;
  color: rgba(44,44,44,0.4); font-weight: 600; margin-bottom: 0.5rem;
}
.detail-pills { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.detail-pill {
  background: rgba(44,44,44,0.05); color: rgba(44,44,44,0.65);
  border: 1px solid rgba(44,44,44,0.1);
  border-radius: 50px; padding: 0.3rem 0.85rem; font-size: 0.8rem;
}
.detail-pill-active {
  background: rgba(88,18,23,0.07); color: var(--maroon);
  border-color: rgba(88,18,23,0.2); font-weight: 600;
}

/* CTA row */
.detail-cta-row { display: flex; gap: 0.75rem; flex-wrap: wrap; margin-top: 1.75rem; }
.detail-outline-btn {
  border-color: rgba(44,44,44,0.2) !important;
  color: var(--charcoal) !important;
}
@media (hover: hover) {
  .detail-outline-btn:hover { background: rgba(44,44,44,0.05) !important; }
}

/* Card link style — removes default anchor decoration */
.drink-card-link { text-decoration: none; color: inherit; cursor: pointer; display: flex; flex-direction: column; }
.drink-tap-hint {
  font-size: 0.72rem; color: var(--maroon); font-weight: 500;
  margin-top: auto; padding-top: 0.25rem; letter-spacing: 0.03em;
  opacity: 0; transition: opacity var(--transition);
}
@media (hover: hover) {
  .drink-card-link:hover .drink-tap-hint { opacity: 1; }
}

/* ====== DRINK DETAIL — INTERACTIVE ====== */
.detail-live-price {
  display: flex; align-items: baseline; gap: 0.4rem;
  margin-bottom: 1.5rem;
}
.detail-live-amount {
  font-family: var(--font-nimbus); font-size: 2.2rem;
  color: var(--maroon); line-height: 1;
}
.detail-live-extras {
  font-size: 0.85rem; color: rgba(44,44,44,0.5); font-weight: 500;
}
.detail-extra-note {
  font-size: 0.65rem; background: rgba(88,18,23,0.08);
  color: var(--maroon); border-radius: 50px;
  padding: 0.1rem 0.5rem; font-weight: 600;
  margin-left: 0.4rem; letter-spacing: 0.03em;
  text-transform: none;
}
/* Make detail-pills interactive when they're buttons */
button.detail-pill {
  cursor: pointer; font-family: var(--font-body);
  transition: all 0.15s ease; border: 1px solid rgba(44,44,44,0.12);
}
@media (hover: hover) {
  button.detail-pill:hover { border-color: rgba(88,18,23,0.35); }
}
button.detail-pill.detail-pill-active {
  background: rgba(88,18,23,0.07); color: var(--maroon);
  border-color: rgba(88,18,23,0.25); font-weight: 600;
}
.pill-extra {
  font-size: 0.65rem; opacity: 0.65; margin-left: 0.15rem;
}
.detail-added-bar {
  display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
  margin-top: 0.75rem;
  background: rgba(91,158,110,0.1); border: 1px solid rgba(91,158,110,0.2);
  border-radius: var(--radius); padding: 0.6rem 1rem;
  font-size: 0.85rem; color: #3a6e4a;
}
.detail-added-link {
  color: var(--maroon); font-weight: 600; text-decoration: none;
  font-size: 0.85rem;
}
@media (hover: hover) {
  .detail-added-link:hover { text-decoration: underline; }
}

/* ====== OPT-CARD — unified selector style (detail page + order modal) ====== */
.opt-card-row {
  display: flex;
  flex-wrap: nowrap;
  gap: 0.6rem;
  margin-bottom: 0.25rem;
}
.opt-card-row-wrap { flex-wrap: wrap; }

.opt-card {
  flex: 1;
  min-width: 72px;
  background: var(--white);
  border: 1.5px solid rgba(44,44,44,0.12);
  border-radius: var(--radius);
  padding: 0.6rem 0.75rem;
  cursor: pointer;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.15rem;
  font-family: var(--font-body);
  transition: border-color 0.18s ease, background 0.18s ease, transform 0.15s ease, box-shadow 0.18s ease;
  position: relative;
  overflow: hidden;
}
.opt-card::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(88,18,23,0.04);
  opacity: 0;
  transition: opacity 0.15s ease;
  border-radius: inherit;
}
@media (hover: hover) {
  .opt-card:hover { border-color: rgba(88,18,23,0.3); transform: translateY(-1px); box-shadow: 0 3px 10px rgba(88,18,23,0.1); }
}
@media (hover: hover) {
  .opt-card:hover::after { opacity: 1; }
}
.opt-card:active { transform: translateY(0); }

.opt-card-active {
  border-color: var(--maroon) !important;
  background: rgba(88,18,23,0.05) !important;
  box-shadow: 0 0 0 3px rgba(88,18,23,0.08);
}
.opt-card-active::after { opacity: 0 !important; }

.opt-card-main  { font-size: 0.82rem; font-weight: 600; color: var(--charcoal); display: block; }
.opt-card-sub   { font-size: 0.66rem; color: rgba(44,44,44,0.4); display: block; }
.opt-card-price { font-size: 0.72rem; font-weight: 700; color: var(--maroon); display: block; }

/* Wrap-mode cards don't stretch full width */
.opt-card-row-wrap .opt-card { flex: 0 0 auto; min-width: 80px; }

/* Remove the old track-based size slider now that opt-cards handle sizing */
.size-track, .size-track-fill { display: none; }

/* ====== MY ORDERS / ORDER TRACKING ====== */
.myorders-empty { text-align:center; padding:4rem 1rem; }

.myorder-card {
  background: var(--white);
  border: 1px solid rgba(44,44,44,0.08);
  border-radius: var(--radius-lg);
  padding: 1.25rem 1.5rem;
  margin-bottom: 1.25rem;
  transition: box-shadow var(--transition);
}
@media (hover: hover) {
  .myorder-card:hover { box-shadow: var(--shadow); }
}
.myorder-done { opacity: 0.6; }

.myorder-header {
  display: flex; justify-content: space-between; align-items: flex-start;
  margin-bottom: 1.25rem; gap: 1rem;
}
.myorder-ref  { font-size: 0.75rem; font-weight: 700; color: var(--maroon); letter-spacing:0.08em; }
.myorder-date { font-size: 0.72rem; color: rgba(44,44,44,0.4); margin-top:0.15rem; }
.myorder-total-col { text-align:right; }
.myorder-total { font-size: 1.1rem; font-weight: 700; color: var(--charcoal); display:block; }
.myorder-collection { font-size: 0.72rem; color:rgba(44,44,44,0.4); }

/* Progress tracker */
.order-tracker { margin-bottom: 1rem; }
.tracker-steps {
  display: flex; align-items: center; margin-bottom: 0.6rem;
}
.tracker-step {
  display: flex; flex-direction: column; align-items: center; gap: 0.35rem;
  flex-shrink: 0;
}
.tracker-dot {
  width: 28px; height: 28px; border-radius: 50%;
  border: 2px solid rgba(44,44,44,0.15);
  background: var(--cream-dark);
  display: flex; align-items: center; justify-content: center;
  font-size: 0.7rem; font-weight: 700; color: rgba(44,44,44,0.3);
  transition: all 0.3s ease;
}
.tracker-step.done .tracker-dot  { background: var(--maroon); border-color: var(--maroon); color: #fff; }
.tracker-step.active .tracker-dot { background: #fff; border-color: var(--maroon); color: var(--maroon); box-shadow: 0 0 0 4px rgba(88,18,23,0.1); }
.tracker-label { font-size: 0.62rem; color: rgba(44,44,44,0.4); white-space: nowrap; }
.tracker-step.done .tracker-label  { color: var(--maroon); font-weight: 600; }
.tracker-step.active .tracker-label { color: var(--charcoal); font-weight: 600; }

.tracker-line {
  flex: 1; height: 2px; background: rgba(44,44,44,0.1);
  margin: 0 0.25rem;
  align-self: flex-start; margin-top: 13px;
  transition: background 0.3s ease;
}
.tracker-line.done { background: var(--maroon); }

.tracker-status-text {
  font-size: 0.82rem; padding: 0.5rem 0;
}

/* Virtual slip */
.slip-details { margin-top: 0.75rem; }
.slip-summary {
  font-size: 0.78rem; font-weight: 600; color: var(--maroon);
  cursor: pointer; padding: 0.4rem 0; list-style: none;
  display: flex; align-items: center; gap: 0.4rem;
}
.slip-summary::-webkit-details-marker { display: none; }
.slip-summary::before { content: '🧾'; }

.virtual-slip {
  background: var(--cream);
  border: 1px dashed rgba(44,44,44,0.2);
  border-radius: var(--radius);
  padding: 1.25rem;
  margin-top: 0.75rem;
  font-size: 0.85rem;
}
.slip-header {
  display: flex; align-items: center; gap: 0.75rem;
  margin-bottom: 1rem; padding-bottom: 0.75rem;
  border-bottom: 1px dashed rgba(44,44,44,0.15);
}
.slip-logo { width: 36px; height: 36px; object-fit: contain; }
.slip-ref  { font-weight: 700; font-size: 0.9rem; color: var(--maroon); }
.slip-date { font-size: 0.7rem; color: rgba(44,44,44,0.45); }

.slip-items { margin-bottom: 0.75rem; }
.slip-item {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 0.5rem; padding: 0.5rem 0;
  border-bottom: 1px solid rgba(44,44,44,0.06);
}
.slip-item:last-child { border-bottom: none; }
.slip-item-main { flex: 1; }
.slip-item-main strong { display:block; font-size:0.85rem; margin-bottom:0.2rem; }
.slip-tag {
  display: inline-block;
  background: rgba(88,18,23,0.07); color: var(--maroon);
  font-size: 0.65rem; padding: 0.1rem 0.45rem;
  border-radius: 50px; margin-right: 0.25rem; margin-bottom: 0.2rem;
  font-weight: 500;
}
.slip-note { font-size: 0.7rem; color:rgba(44,44,44,0.45); font-style:italic; margin-top:0.2rem; }
.slip-item-price { font-size: 0.82rem; font-weight: 700; white-space: nowrap; }

.slip-footer {
  display: flex; justify-content: space-between;
  font-size: 0.9rem; font-weight: 700;
  border-top: 1px dashed rgba(44,44,44,0.2);
  padding-top: 0.75rem; margin-bottom: 0.5rem;
}
.slip-collection {
  font-size: 0.72rem; color: rgba(44,44,44,0.5);
}

/* ====== PAYMENT OPTIONS ====== */
.payment-options { margin-top: 0.5rem; }
.payment-options-label {
  font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.12em;
  color: rgba(44,44,44,0.4); font-weight: 600; margin-bottom: 0.75rem;
}
.payment-btns { display: flex; flex-direction: column; gap: 0.6rem; }
.payment-btns .btn {
  display: flex; align-items: center; gap: 0.85rem;
  text-align: left; width: 100%; padding: 0.85rem 1.1rem;
}
.pay-btn-icon { font-size: 1.4rem; flex-shrink: 0; }
.pay-btn-main { display: block; font-size: 0.9rem; font-weight: 600; }
.pay-btn-sub  { display: block; font-size: 0.72rem; opacity: 0.6; font-weight: 400; margin-top: 0.1rem; }
.pay-instore-btn {
  border-color: rgba(44,44,44,0.2) !important;
  color: var(--charcoal) !important;
}
@media (hover: hover) {
  .pay-instore-btn:hover { background: rgba(44,44,44,0.04) !important; }
}

/* ======================================================
   MOBILE & RESPONSIVE — comprehensive pass
   Breakpoints: 768px (tablet), 480px (phone), 380px (small phone)
   ====================================================== */

/* ── Global touch targets ── */
@media (max-width: 768px) {
  /* Ensure tap targets are at least 44px */
  .btn, .nav-link, .nav-cta, .opt-card,
  .alt-pill, .detail-pill, .order-filter-btn,
  .qty-circle, .cart-remove-btn {
    min-height: 44px;
  }
  .modal-close { min-height: unset; min-width: unset; width: 36px; height: 36px; }

  /* Container padding tighter on mobile */
  .container { padding-left: 1.1rem; padding-right: 1.1rem; }

  /* Section spacing */
  .section { padding: 3rem 0; }

  /* ── Hero ── */
  .hero { min-height: 85vh; padding-top: var(--nav-h); }
  .hero-content { padding: 2rem 1.25rem; max-width: 100%; }
  .hero-title { font-size: clamp(2.8rem, 12vw, 5rem); }
  .hero-subtitle { font-size: 1rem; }
  .hero-actions { flex-direction: column; align-items: flex-start; gap: 0.75rem; }
  .hero-secondary-link { padding: 0.5rem 0; }
  .hero-paw { display: none; }

  /* ── Drink grid — one card per row on small screens ── */
  .drink-grid {
    grid-template-columns: 1fr 1fr;
    gap: 0.75rem;
  }
  .drink-card-inner-wrap { gap: 0.5rem; }
  .drink-img-wrap { height: 130px; }
  .drink-name { font-size: 0.85rem; }
  .drink-price-pill { font-size: 0.72rem; padding: 0.2rem 0.5rem; }

  /* ── Tabs ── */
  .drinks-tabs-wrap { padding: 0 1rem; }
  .drinks-tabs { gap: 0.35rem; }
  .drinks-tab, .order-tab {
    font-size: 0.78rem; padding: 0.5rem 0.75rem;
    white-space: nowrap;
  }

  /* ── Modal sheet — full screen on mobile ── */
  .modal-overlay { align-items: flex-end; }
  .modal-sheet {
    max-width: 100%;
    max-height: 95vh; max-height: 95dvh;
    border-radius: 20px 20px 0 0;
  }
  .modal-img-wrap { height: 200px; }
  .modal-body { padding: 1rem 1.1rem 1.5rem; }
  .modal-title { font-size: 1.25rem; }
  .modal-chips { grid-template-columns: 1fr 1fr; gap: 0.5rem; }
  .modal-chip { padding: 0.5rem 0.6rem; }
  .chip-icon { font-size: 1rem; }
  .chip-val { font-size: 0.78rem; }

  /* ── Opt-cards — wrap and shrink on mobile ── */
  .opt-card-row {
    flex-wrap: wrap;
    gap: 0.5rem;
    width: 100%; max-width: 100%;
  }
  .opt-card {
    flex: 1 1 calc(50% - 0.25rem);
    min-width: 0; max-width: 100%;
    padding: 0.55rem 0.6rem;
    word-break: break-word;
  }
  .opt-card-main { font-size: 0.78rem; }
  .opt-card-sub, .opt-card-price { font-size: 0.62rem; }

  /* Milk / flavour pills wrap fine already, just tighten */
  .opt-card-row-wrap .opt-card {
    flex: 0 0 auto;
    min-width: 72px;
    padding: 0.45rem 0.6rem;
  }

  /* ── Size btns ── */
  .size-btns { gap: 0.5rem; }
  .size-btn { padding: 0.6rem 0.4rem; }
  .size-btn-label { font-size: 0.78rem; }

  /* ── Cart sheet ── */
  .cart-sheet { max-height: 92vh; max-height: 92dvh; }
  .cart-header { padding: 1rem 1.1rem 0.75rem; }
  .cart-items  { padding: 0.5rem 1.1rem; }
  .cart-footer { padding: 0.75rem 1.1rem 1.25rem; }
  .cart-item-img { width: 44px; height: 44px; font-size: 1.25rem; }
  .cart-item-name { font-size: 0.82rem; }
  .cart-opt-pill { font-size: 0.62rem; padding: 0.1rem 0.45rem; }

  /* ── Cart FAB — position above bottom safe area ── */
  .cart-fab { bottom: 1.25rem; right: 1.1rem; padding: 0.7rem 1.1rem; }
  .cart-fab-total { font-size: 0.82rem; }

  /* ── Toast ── */
  .cl-toast { bottom: 5.5rem; font-size: 0.78rem; }

  /* ── Confirm page ── */
  .confirm-layout { flex-direction: column; gap: 1.5rem; }
  .confirm-card { padding: 1.1rem; }
  .confirm-input { font-size: 0.9rem; }
  .payment-btns .btn { padding: 0.75rem 0.9rem; gap: 0.65rem; }
  .pay-btn-icon { font-size: 1.1rem; }
  .pay-btn-main { font-size: 0.82rem; }
  .pay-btn-sub  { font-size: 0.66rem; }

  /* ── Drink detail page ── */
  .detail-back-bar { padding: 0.5rem 0; }
  .detail-hero { padding: 2rem 0 3rem; }
  .detail-hero-inner { flex-direction: column; gap: 1.5rem; }
  .detail-left-col { width: 100%; }
  .detail-img-frame { aspect-ratio: 16/9; }
  .detail-title { font-size: clamp(1.6rem, 8vw, 2.5rem); }
  .detail-live-amount { font-size: 1.8rem; }
  .detail-chips { grid-template-columns: 1fr 1fr; gap: 0.5rem; }
  .detail-chip { padding: 0.5rem 0.6rem; }
  .detail-prices { gap: 0.5rem; }
  .detail-price-card { min-width: 80px; padding: 0.6rem 0.75rem; }
  .detail-price-amount { font-size: 1.1rem; }
  .detail-cta-row { flex-direction: column; gap: 0.6rem; }
  .detail-cta-row .btn { width: 100%; text-align: center; justify-content: center; }

  /* ── My Orders tracking page ── */
  .myorder-card { padding: 1rem 1.1rem; }
  .myorder-header { flex-direction: column; gap: 0.5rem; }
  .myorder-total-col { text-align: left; }
  .tracker-label { font-size: 0.55rem; }
  .tracker-dot { width: 24px; height: 24px; font-size: 0.62rem; }
  .tracker-status-text { font-size: 0.78rem; }

  /* Virtual slip */
  .virtual-slip { padding: 1rem; }
  .slip-item { flex-wrap: wrap; }

  /* ── Page heroes ── */
  /* Top padding is nav height + breathing room (not a flat rem value) so the
     hero text always clears the fixed navbar with real space to spare,
     instead of landing right against it. */
  .page-title { font-size: clamp(1.8rem, 8vw, 3rem); }
  .page-hero { padding: calc(var(--nav-h) + 2rem) 0 3rem; }
  .page-hero-short { padding: calc(var(--nav-h) + 1.5rem) 0 2rem; }

  /* ── Battlepass teaser (home) — text first, QR card underneath ── */
  .bp-text { order: 1; }
  .bp-visual { order: 2; width: 100%; display:flex; justify-content:center; }
  .bp-card-preview { max-width: 280px; }

  /* ── Menu cards (home) ── */
  .menu-grid { grid-template-columns: 1fr; gap: 0.75rem; }
  .menu-card { padding: 1.25rem; }

  /* ── Events ── */
  .events-row { flex-direction: column; gap: 0.75rem; }

  /* ── About page ── */
  .about-grid { grid-template-columns: 1fr; }

  /* ── Admin orders modal ── */
  .admin-order-modal { max-width: 100%; }
  .order-detail-header { flex-direction: column; gap: 0.5rem; }
  .od-status-btns { flex-wrap: wrap; }
  .order-row { flex-wrap: wrap; gap: 0.5rem; }
  .order-row-mid { min-width: 0; flex: 1; }

  /* ── Footer ── */
  .footer-inner { grid-template-columns: 1fr 1fr; gap: 1.5rem; }
  .footer-tagline { font-size: 0.85rem; }
}

/* ── Small phones (< 480px) ── */
@media (max-width: 480px) {
  .drink-grid { grid-template-columns: 1fr; }
  .drink-img-wrap { height: 160px; }

  .opt-card { flex: 1 1 100%; }
  .opt-card-row-wrap .opt-card { flex: 0 0 auto; }

  .modal-img-wrap { height: 160px; }

  .detail-chips { grid-template-columns: 1fr 1fr; }

  .tracker-steps { gap: 0; }
  .tracker-line  { margin: 0 0.1rem; margin-top: 11px; }

  .footer-inner { grid-template-columns: 1fr; }

  .nav-inner { padding: 0 1rem; }

  /* Pastries full width */
  .pastries-grid { grid-template-columns: 1fr !important; }
  .pastry-card-wide { grid-column: span 1 !important; }
}

/* ── Very small phones (< 360px) ── */
@media (max-width: 360px) {
  .logo-text { display: none; } /* just show the icon */
  .drink-price-pill { font-size: 0.68rem; }
  .modal-body { padding: 0.85rem 0.9rem 1.25rem; }
  .cart-fab { padding: 0.6rem 0.9rem; gap: 0.4rem; }
}

/* ── Landscape phone — more horizontal space ── */
@media (max-width: 768px) and (orientation: landscape) {
  .modal-sheet { max-height: 98vh; max-height: 98dvh; }
  .modal-img-wrap { height: 120px; }
  .hero { min-height: 100vh; }
}

/* ── Safe area insets (notch phones, home indicator) ── */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
  .cart-fab {
    bottom: calc(1.25rem + env(safe-area-inset-bottom));
  }
  .cart-footer, .modal-body {
    padding-bottom: calc(1.5rem + env(safe-area-inset-bottom));
  }
}

/* ── Hamburger X animation ── */
.nav-toggle.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle.open span:nth-child(2) { opacity: 0; transform: scaleX(0); }
.nav-toggle.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.nav-toggle span { transition: transform 0.25s ease, opacity 0.2s ease; }

/* ── Active nav link ── */
.nav-link-active { color: var(--cream) !important; }

/* ── Scrolled navbar ── */
/* Same var(--black) as the base .navbar (see its note) — only the border
   accent changes on scroll now, so the navbar itself never shifts colour. */
.navbar-scrolled {
  background: var(--black) !important;
  border-bottom-color: rgba(201,151,74,0.25) !important;
}

/* ── Mobile nav full-width links ── */
@media (max-width: 650px) {
  .nav-links .nav-link {
    display: block;
    padding: 0.75rem 1rem;
    font-size: 1rem;
    border-radius: var(--radius);
    width: 100%;
  }
  .nav-links .nav-cta {
    margin-top: 0.5rem;
    text-align: center;
  }
  .nav-links .nav-pase {
    text-align: center;
  }
}

/* ======================================================
   NAVBAR — MIDDLE STATE (914px → 651px)
   Icon-only links, no hamburger, no text
   Modern "icon rail" pattern
   ====================================================== */
/* (removed: 651–914px icon-rail nav — replaced by 915px hamburger collapse) */

/* ====== PASSWORD EYEBALL ====== */
.pw-wrap {
  position: relative; display: flex; align-items: center;
}
.pw-wrap .pw-input {
  flex: 1; padding-right: 2.75rem;
}
.pw-eye {
  position: absolute; right: 0.6rem;
  background: none; border: none; cursor: pointer;
  padding: 0.35rem; color: rgba(44,44,44,0.35);
  display: flex; align-items: center; justify-content: center;
  transition: color var(--transition);
  /* Hold behaviour — prevent text selection while holding */
  user-select: none; -webkit-user-select: none;
  touch-action: none;
}
@media (hover: hover) {
  .pw-eye:hover { color: rgba(44,44,44,0.7); }
}
.pw-eye:active { color: var(--maroon); }
.eye-icon { width: 18px; height: 18px; pointer-events: none; }
/* Only one SVG visible at a time */
.pw-eye .eye-open   { display: none; }
.pw-eye .eye-closed { display: block; }
.pw-eye.revealing .eye-open   { display: block; }
.pw-eye.revealing .eye-closed { display: none; }

/* ====== ADMIN CHECK-IN BUTTON ====== */
.checkin-btn {
  display: flex; align-items: center; gap: 0.45rem;
  padding: 0.35rem 0.85rem; border-radius: 50px;
  border: 1.5px solid; cursor: pointer; font-family: var(--font-body);
  font-size: 0.75rem; font-weight: 600;
  transition: all 0.2s ease;
}
.checkin-dot {
  width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
}
.checkin-in  { background: rgba(29,158,117,0.1); border-color: #1D9E75; color: #1D9E75; }
.checkin-out { background: rgba(44,44,44,0.06);   border-color: rgba(44,44,44,0.25); color: rgba(44,44,44,0.5); }
.checkin-in  .checkin-dot { background: #1D9E75; box-shadow: 0 0 0 3px rgba(29,158,117,0.2); }
.checkin-out .checkin-dot { background: rgba(44,44,44,0.3); }
@media (hover: hover) {
  .checkin-btn:hover { transform: translateY(-1px); }
}

/* ====== BATTLEPASS — QR HINT CENTERED ====== */
.bp-qr-hint {
  text-align: center !important;
  width: 100%;
  display: block;
}

/* ====== BATTLEPASS — DANGER ZONE ====== */
.bp-danger-zone {
  background: var(--white);
  border: 1.5px solid rgba(200,50,50,0.2);
  border-radius: var(--radius-lg);
  padding: 1.25rem 1.5rem;
  text-align: center;
}
.bp-danger-label {
  font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.12em;
  color: #c83232; font-weight: 700; margin-bottom: 0.5rem;
}
.bp-danger-sub {
  font-size: 0.82rem; color: rgba(44,44,44,0.55);
  margin-bottom: 1rem; line-height: 1.5;
}
.bp-delete-btn {
  background: none;
  border: 1.5px solid rgba(200,50,50,0.35);
  color: #c83232;
  font-size: 0.82rem; font-weight: 600;
  padding: 0.5rem 1.25rem;
  border-radius: var(--radius);
  transition: all var(--transition);
}
@media (hover: hover) {
  .bp-delete-btn:hover {
    background: rgba(200,50,50,0.06);
    border-color: #c83232;
  }
}

/* ====== ADMIN USERS — STAMP CONTROLS ====== */
.stamp-cell {
  display: flex; align-items: center; gap: 0.5rem;
  border-radius: var(--radius); padding: 0.2rem 0.4rem;
  transition: background 0.3s ease;
}
.stamp-count {
  font-weight: 700; font-size: 0.95rem;
  min-width: 28px; text-align: center;
}
.stamp-controls { display: flex; gap: 0.25rem; }
.stamp-btn {
  width: 26px; height: 26px; border-radius: 50%;
  border: 1.5px solid rgba(44,44,44,0.15);
  background: var(--white); cursor: pointer;
  font-size: 1rem; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  transition: all 0.15s ease; color: var(--charcoal);
  line-height: 1;
}
@media (hover: hover) {
  .stamp-btn:hover { transform: scale(1.1); }
}
@media (hover: hover) {
  .stamp-minus:hover { border-color: #c83232; color: #c83232; }
}
@media (hover: hover) {
  .stamp-plus:hover  { border-color: #1D9E75; color: #1D9E75; }
}
.stamp-btn:disabled { opacity: 0.4; transform: none; cursor: not-allowed; }

@media (hover: hover) {
  .admin-delete-btn:hover {
    background: rgba(200,50,50,0.06) !important;
  }
}

/* ====== BLOOP IMAGE — absolute positioned img tag ====== */
.section-bloop {
  background-image: url('../images/backgrounds/bloop.png');
  background-size: 100% auto;
  background-repeat: repeat-y;
  background-position: center top;
  background-color: var(--cream);
}

/* pastry panel hidden */
.pastry-panel.hidden { display: none; }
.pastry-panel { animation: fadeIn 0.2s ease; }

/* ====== EVENTS PAGE — horizontal image cards, 2 per row ====== */
.events-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.5rem;
  margin-bottom: 3rem;
}

.event-tile {
  border-radius: var(--radius-lg);
  overflow: hidden;
  background: var(--white);
  box-shadow: var(--shadow);
  border: 1px solid rgba(44,44,44,0.08);
  cursor: pointer;
  display: flex;
  flex-direction: row;        /* permanently horizontal */
  align-items: stretch;
  transition: box-shadow 0.3s ease, transform 0.3s ease;
}
@media (hover: hover) {
  /* Calm hover — just a gentle lift to show where you are */
  .event-tile:hover {
    box-shadow: var(--shadow-lg);
    transform: translateY(-3px);
  }
}

/* Left colour accent per type */
.event-tile-truck_location { border-left: 4px solid var(--maroon); }
.event-tile-run_club       { border-left: 4px solid #5b9e6e; }
.event-tile-painting       { border-left: 4px solid #7b6bc4; }
.event-tile-special,
.event-tile-pop_up         { border-left: 4px solid #c46b5b; }

/* ── Image — fixed left column, fills the card height ── */
.event-tile-img-wrap {
  position: relative;
  flex: 0 0 42%;
  align-self: stretch;
  min-height: 210px;
  overflow: hidden;
  background: var(--charcoal);
}

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

.event-tile-placeholder {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  font-size: 3.5rem;
  background: linear-gradient(135deg, var(--black), var(--charcoal-lt));
}

.event-tile-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(10,10,10,0.55) 0%, transparent 60%);
}

/* Date badge */
.event-tile-date {
  position: absolute; top: 0.75rem; left: 0.75rem;
  background: var(--maroon);
  border-radius: var(--radius);
  padding: 0.4rem 0.6rem;
  display: flex; flex-direction: column; align-items: center;
  min-width: 44px;
}
.event-tile-day   { font-family: var(--font-nimbus); font-size: 1.3rem; color: var(--cream); line-height: 1; }
.event-tile-month { font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.1em; color: rgba(253,246,237,0.75); }

/* ── Body — centered in the right column ── */
.event-tile-body {
  flex: 1;
  padding: 1.25rem 1.5rem;
  display: flex; flex-direction: column; justify-content: center;
}
.event-tile-title {
  font-family: var(--font-nimbus); font-size: 1.15rem;
  margin: 0.4rem 0 0.3rem; color: var(--charcoal);
}
.event-tile-location {
  font-size: 0.82rem; color: rgba(44,44,44,0.5); margin-bottom: 0.25rem;
}
.event-tile-time {
  font-size: 0.78rem; color: rgba(44,44,44,0.4); margin-bottom: 0.5rem;
}
.event-tile-desc {
  font-size: 0.85rem; color: rgba(44,44,44,0.65); line-height: 1.6;
  margin-top: 0.5rem;
  /* Always visible — cards are big enough now. Cap to 3 lines. */
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Empty state */
.events-empty {
  text-align: center; padding: 3rem 1rem;
  color: rgba(44,44,44,0.5); font-size: 0.95rem;
}

/* CTA row at bottom */
.events-cta-row {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; flex-wrap: wrap;
  background: var(--white); border-radius: var(--radius-lg);
  padding: 1.25rem 1.5rem;
  border: 1px solid rgba(44,44,44,0.07);
}
.events-cta-row p { font-size: 0.9rem; color: rgba(44,44,44,0.65); }
.events-cta-row strong { color: var(--maroon); }

@media (max-width: 768px) {
  .events-grid { grid-template-columns: 1fr; }
  .events-cta-row { flex-direction: column; text-align: center; }
}
@media (max-width: 480px) {
  .event-tile { flex-direction: column; }
  .event-tile-img-wrap {
    flex-basis: auto; align-self: auto;
    height: 180px; min-height: 0;
  }
  .event-tile-body { justify-content: flex-start; }
}

/* ====== EVENT MODAL ====== */
/* Image is full-bleed — 100% wide, natural height, no frame/letterbox */
.event-modal-img-wrap {
  height: auto;
  background: transparent;
  display: block;
}
.event-modal-img { width: 100%; height: auto; object-fit: contain; display: block; }

/* Roomier body + magnified text now that the image is full-width */
.event-modal-sheet .modal-body { padding: 1.5rem 1.75rem 2rem; }
.event-modal-tags { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.75rem; }
.event-modal-sheet .modal-title { font-size: 1.7rem; margin-bottom: 0.4rem; }
.event-modal-meta {
  font-size: 0.98rem; color: rgba(44,44,44,0.65);
  margin-bottom: 1.1rem; line-height: 1.55;
}

/* Countdown */
.event-countdown {
  display: flex; align-items: baseline; gap: 0.6rem;
  background: var(--maroon-pale);
  border: 1px dashed rgba(88,18,23,0.25);
  border-radius: var(--radius);
  padding: 0.85rem 1.1rem;
  margin-bottom: 1.1rem;
}
.event-countdown-num {
  font-family: var(--font-nimbus);
  font-size: 2.2rem; line-height: 1; color: var(--maroon);
}
.event-countdown-label { font-size: 1rem; color: rgba(44,44,44,0.65); }

.event-modal-desc {
  font-size: 1.02rem; line-height: 1.7; color: rgba(44,44,44,0.8);
  margin-bottom: 1.25rem;
}

/* Contact / booking */
.event-contact { display: flex; flex-direction: column; gap: 0.7rem; }
.event-contact-namewrap { display: flex; flex-direction: column; gap: 0.3rem; }
.event-contact-label { font-size: 0.82rem; font-weight: 600; color: var(--charcoal); }
.event-contact-label span { opacity: 0.45; font-weight: 400; }
.event-contact-input {
  padding: 0.7rem 0.85rem;
  border: 1.5px solid rgba(44,44,44,0.15);
  border-radius: var(--radius);
  font-family: var(--font-body); font-size: 0.9rem;
}
.event-contact-input:focus { outline: none; border-color: var(--maroon); }

.btn-whatsapp {
  display: flex; align-items: center; justify-content: center; gap: 0.5rem;
  background: #25D366; color: #fff;
  border: none; border-radius: var(--radius);
  padding: 0.85rem 1rem; font-weight: 600; font-size: 0.95rem;
  text-decoration: none; cursor: pointer;
  transition: background var(--transition), transform var(--transition);
}
@media (hover: hover) {
  .btn-whatsapp:hover { background: #1ebe5b; transform: translateY(-1px); }
}
.btn-whatsapp .wa-icon { font-size: 1.1rem; }

.event-book-btn { text-align: center; }

.event-socials-link {
  text-align: center; font-size: 0.85rem; color: var(--maroon);
  text-decoration: none; margin-top: 0.15rem;
}
@media (hover: hover) {
  .event-socials-link:hover { text-decoration: underline; }
}

.event-contact-none {
  font-size: 0.88rem; color: rgba(44,44,44,0.6);
  text-align: center; padding: 0.5rem 0;
}
.event-contact-none strong { color: var(--maroon); }

/* ====== REVIEWS CAROUSEL ====== */
.reviews-carousel { margin-top: 1rem; }
.reviews-track {
  scroll-padding-left: 1.5rem;
  display: flex; gap: 1.5rem;
  overflow-x: auto;
  overflow-y: hidden;   /* overflow-x:auto forces the 'visible' this used to be into 'auto' anyway (spec quirk) — hidden says what actually happens */
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  /* Horizontal padding is set equal to the flex `gap` on purpose: 3 cards + 2 gaps
     then fill the viewport with zero px left over, so no sliver of a 4th card peeks
     in at rest (padding used to be 3rem — bigger than the gap — which is exactly
     what leaked a peek: at rest the leftover space equals padding-right minus gap,
     so anything above the gap size shows through as a partial next card). The mask
     below fades a hovered card's shadow out inside that padding instead of letting
     overflow-x hard-clip it into a seam against the section background. */
  padding: 3rem 1.5rem 3.75rem;
  -webkit-mask-image: linear-gradient(to right, transparent, #000 20px, #000 calc(100% - 20px), transparent);
  mask-image: linear-gradient(to right, transparent, #000 20px, #000 calc(100% - 20px), transparent);
  scrollbar-width: none;
}
.reviews-track::-webkit-scrollbar { display: none; }
.reviews-track .review-card {
  flex: 0 0 calc((100% - 3rem) / 3);   /* 3 cards per view on desktop */
  scroll-snap-align: start;
  height: 280px;   /* fixed, not min — every card is identical so the row ratio is exact */
}
@media (max-width: 915px) {
  .reviews-track .review-card { flex-basis: calc((100% - 1.5rem) / 2); }
}
@media (max-width: 650px) {
  .reviews-track .review-card { flex-basis: 100%; }
}

@media (max-width: 650px) {
  .event-modal-sheet .modal-title { font-size: 1.45rem; }
  .event-modal-sheet .modal-body { padding: 1.25rem 1.25rem 1.75rem; }
}

/* ====== DRINK CUP SVG ICON ====== */
.drink-img-wrap-cup {
  background: linear-gradient(135deg, #f5ede0, #e8d4bc);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
/* When SVG loads as <img> tag — fill card proportionally */
.drink-img-wrap-cup img {
  width: auto;
  height: 88%;
  max-width: 80%;
  object-fit: contain;
  display: block;
}
.drink-cup-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
}
.drink-cup-svg {
  width: 75%;
  height: 75%;
}
/* ====== SPECIALS (home) ====== */
.specials-home { background: var(--cream); }
.specials-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
  margin-top: 2.5rem;
}
.special-card {
  background: var(--white);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow);
  border: 1px solid var(--cream-dark);
  transition: transform var(--transition), box-shadow var(--transition);
}
@media (hover: hover) {
  .special-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
}
.special-card-image {
  height: 220px;
  background-size: cover;
  background-position: center;
  background-color: var(--cream-mid);
  display: flex; align-items: center; justify-content: center;
}
.special-card-body { padding: 1.25rem 1.5rem 1.5rem; }
.special-card-title {
  font-family: var(--font-nimbus);
  font-size: 1.1rem;
  color: var(--maroon);
  margin-bottom: 0.35rem;
}
.special-card-desc {
  font-size: 0.85rem;
  color: rgba(44, 44, 44, 0.6);
  margin-bottom: 0.6rem;
}
.special-card-price {
  display: inline-block;
  background: var(--maroon);
  color: var(--cream);
  font-size: 0.85rem;
  padding: 0.25rem 0.85rem;
  border-radius: 999px;
}
/* Placeholder variants until images are uploaded via admin */
.special-card-placeholder .special-card-image { position: relative; }
.special-ph-img-1 { background: linear-gradient(135deg, var(--maroon) 0%, var(--maroon-light) 100%); }
.special-ph-img-2 { background: linear-gradient(135deg, var(--cream-mid) 0%, var(--cream-dark) 100%); }
.special-ph-img-3 { background: linear-gradient(135deg, var(--charcoal) 0%, var(--charcoal-lt) 100%); }
.special-ph-mark {
  font-size: 2.5rem;
  color: rgba(253, 246, 237, 0.55);
}
.special-ph-img-2 .special-ph-mark { color: rgba(88, 18, 23, 0.35); }

/* ====== GOOGLE REVIEWS (home) ====== */
.reviews-home { background: var(--cream); }

/* ── Pastry category filter — tab style matching drinks bar ── */
.pastry-filter-wrap {
  background: var(--black);
  position: sticky; top: var(--nav-h); z-index: 50;
  overflow-x: auto; -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  border-bottom: 1px solid rgba(253,246,237,0.06);
}
.pastry-filter-wrap::-webkit-scrollbar { display: none; }
.pastry-filter-bar {
  max-width: 1280px; margin: 0 auto; padding: 0 2rem;
  display: flex; width: max-content; min-width: 100%;
}
.pastry-tab {
  background: none; border: none; cursor: pointer;
  color: rgba(253,246,237,0.45); font-family: var(--font-body);
  font-size: 0.88rem; font-weight: 600; padding: 1rem 1.5rem;
  border-bottom: 2px solid transparent; transition: all var(--transition);
  white-space: nowrap; flex-shrink: 0;
}
@media (hover: hover) {
  .pastry-tab:hover { color: var(--cream); }
}
.pastry-tab.active { color: var(--cream); border-bottom-color: var(--maroon); }

/* ── Home page: centre eyebrows, titles, and rating line ── */
.menu-preview .section-title,
.specials-home .section-title,
.reviews-home .section-title,
.events-home .section-title { text-align: center; }

.reviews-rating-line {
  display: flex; align-items: center; justify-content: center; gap: 0.75rem;
  margin-top: 0.75rem;
}
.reviews-stars { color: var(--maroon); font-size: 1.25rem; letter-spacing: 3px; }
.reviews-source { font-size: 0.85rem; color: rgba(44, 44, 44, 0.55); }
.reviews-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
  margin-top: 2.5rem;
}
.review-card {
  border-radius: var(--radius-lg);
  padding: 1.75rem;
  box-shadow: var(--shadow);
  display: flex; flex-direction: column; gap: 0.85rem;
  min-height: 200px;
}
/* Coloured placeholder blocks */
.review-ph-1 { background: var(--maroon); }
.review-ph-2 { background: var(--cream-mid); }
.review-ph-3 { background: var(--charcoal); }
.review-ph-stars { font-size: 1rem; letter-spacing: 2px; }
.review-ph-1 .review-ph-stars, .review-ph-3 .review-ph-stars { color: var(--cream); }
.review-ph-2 .review-ph-stars { color: var(--maroon); }
.review-ph-line { height: 10px; border-radius: 999px; }
.review-ph-1 .review-ph-line, .review-ph-3 .review-ph-line { background: rgba(253, 246, 237, 0.25); }
.review-ph-2 .review-ph-line { background: rgba(88, 18, 23, 0.18); }
.review-ph-line-60 { width: 60%; }
.review-ph-line-70 { width: 70%; }
.review-ph-line-80 { width: 80%; }
.review-ph-line-90 { width: 90%; }
.review-ph-line-100 { width: 100%; }
.review-ph-author { display: flex; align-items: center; gap: 0.6rem; margin-top: auto; }
.review-ph-avatar { width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0; }
.review-ph-name { height: 10px; width: 90px; border-radius: 999px; }
.review-ph-1 .review-ph-avatar, .review-ph-1 .review-ph-name,
.review-ph-3 .review-ph-avatar, .review-ph-3 .review-ph-name { background: rgba(253, 246, 237, 0.3); }
.review-ph-2 .review-ph-avatar, .review-ph-2 .review-ph-name { background: rgba(88, 18, 23, 0.22); }
.reviews-cta {
  margin-top: 3rem;
  text-align: center;
  background: var(--maroon-pale);
  border: 1px dashed rgba(88, 18, 23, 0.25);
  border-radius: var(--radius-lg);
  padding: 2rem 1.5rem;
}
.reviews-cta-text {
  margin-bottom: 1.1rem;
  color: var(--charcoal);
  font-size: 0.95rem;
}

/* Responsive — specials & reviews */
@media (max-width: 915px) {
  .specials-grid, .reviews-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 650px) {
  .specials-grid, .reviews-grid { grid-template-columns: 1fr; }
  .special-card-image { height: 280px; }
}

/* ── Live Google reviews — Con Leche themed cards ── */
.review-live { position: relative; }
.review-live::before {
  content: '';
  position: absolute; top: 0.85rem; right: 1rem;
  width: 58px; height: 40px;
  background: url('/images/Reviews.png') center/contain no-repeat;
  opacity: 0.9;
  pointer-events: none;
}
.review-theme-1 { background: var(--maroon); }
.review-theme-2 { background: var(--white); border: 1px solid var(--cream-dark); }
.review-theme-3 { background: var(--charcoal); }
.review-theme-1, .review-theme-3 { color: var(--cream); }
.review-theme-1::before, .review-theme-3::before { color: var(--cream); }
.review-theme-2 { color: var(--charcoal); }
.review-theme-2::before { color: var(--maroon); }
.review-live-stars { font-size: 1rem; letter-spacing: 2px; }
.review-theme-1 .review-live-stars, .review-theme-3 .review-live-stars { color: rgba(253,246,237,0.9); }
.review-theme-2 .review-live-stars { color: var(--maroon); }
.review-live-text {
  font-size: 0.88rem; line-height: 1.6;
  flex: 1; min-height: 0;
  display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical;
  overflow: hidden;
}
.review-theme-1 .review-live-text, .review-theme-3 .review-live-text { color: rgba(253,246,237,0.85); }
.review-theme-2 .review-live-text { color: rgba(44,44,44,0.75); }
.review-live-author { display: flex; align-items: center; gap: 0.65rem; margin-top: auto; }
.review-live-avatar {
  width: 38px; height: 38px; border-radius: 50%;
  object-fit: cover; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 1rem;
}
.review-live-avatar-fallback { background: var(--maroon-pale); }
.review-theme-1 .review-live-avatar-fallback,
.review-theme-3 .review-live-avatar-fallback { background: rgba(253,246,237,0.15); }
.review-live-name { display: block; font-size: 0.82rem; font-weight: 600; }
.review-live-when { display: block; font-size: 0.7rem; opacity: 0.55; }

/* ── Battlepass internal tabs ── */
.bp-tabs {
  display: flex; gap: 0.4rem;
  background: rgba(44,44,44,0.05);
  padding: 0.3rem; border-radius: 12px;
  position: sticky; top: 76px; z-index: 50;
  backdrop-filter: blur(6px);
}
.bp-tab {
  flex: 1; padding: 0.65rem 0.5rem;
  border: none; border-radius: 9px;
  background: transparent; cursor: pointer;
  font-size: 0.85rem; font-weight: 600;
  color: rgba(44,44,44,0.55);
  transition: all 0.15s ease;
  min-height: 44px;
}
@media (hover: hover) {
  .bp-tab:hover { color: var(--charcoal); }
}
.bp-tab.active {
  background: var(--maroon); color: var(--cream);
  box-shadow: 0 2px 8px rgba(88,18,23,0.25);
}
.bp-tab-panel { display: flex; flex-direction: column; gap: 1rem; }
.bp-tab-panel.hidden { display: none; }

/* ── Add to Google Wallet (QR card) ── */
.bp-wallet-btn {
  margin-top: 0.85rem;
  width: 100%;
  display: flex; align-items: center; justify-content: center; gap: 0.5rem;
  border-color: rgba(253,246,237,0.3) !important;
  color: var(--cream) !important;
  font-size: 0.85rem;
}
@media (hover: hover) {
  .bp-wallet-btn:hover { background: rgba(253,246,237,0.1); }
}
.bp-wallet-btn:disabled { opacity: 0.6; cursor: not-allowed; }

/* ── Voucher redeem ── */
.bp-voucher-side { display: flex; flex-direction: column; align-items: flex-end; gap: 0.4rem; flex-shrink: 0; }
.bp-redeem-btn {
  padding: 0.4rem 0.9rem !important;
  font-size: 0.75rem !important;
  border-color: rgba(88,18,23,0.4) !important;
  color: var(--maroon) !important;
  min-height: 36px;
}
@media (hover: hover) {
  .bp-redeem-btn:hover { background: var(--maroon) !important; color: var(--cream) !important; }
}
.bp-voucher-redeemed { background: rgba(29,158,117,0.08) !important; border-color: rgba(29,158,117,0.3) !important; }
.bp-redeemed-flash { display: flex; align-items: center; gap: 0.85rem; width: 100%; }
.bp-redeemed-check {
  width: 42px; height: 42px; border-radius: 50%;
  background: #1D9E75; color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 1.3rem; flex-shrink: 0;
  animation: qtyPop 0.25s ease;
}
.bp-redeemed-title { font-weight: 800; letter-spacing: 0.12em; color: #1D9E75; font-size: 0.9rem; }
.bp-redeemed-sub { font-size: 0.75rem; color: rgba(44,44,44,0.55); margin-top: 0.1rem; }

/* ── Floating coffee beans (home) ── */
.bean-field {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 0;                 /* behind all content, above the body bg */
  overflow: hidden;
  opacity: 0;                 /* hidden until the hero/strip is scrolled past */
  transition: opacity 0.6s ease;
}
.bean-field.beans-visible { opacity: 1; }
.bean-grogu-img, .bean-img { width: 100%; height: 100%; object-fit: contain; display: block; }

/* Bean field sits ABOVE section backgrounds but BELOW all content (text, cards,
   images), so the sections keep their normal colours and the faint beans simply
   drift over them. Content is lifted to z-index 2; the bean layer is z-index 1. */
/* Bean field sits behind every section's background-color naturally.
   Only hero + strip need explicit z-index in case of stacking edge-cases. */
body.home-page { background: var(--cream); }
body.home-page main { position: relative; }
body.home-page .bean-field { z-index: 0 !important; }
body.home-page .hero { position: relative; z-index: 1; }
.bean {
  position: absolute;
  display: block;
  will-change: transform;
}
.bean svg { width: 100%; height: 100%; display: block; }
.bean-grogu {
  pointer-events: auto;   /* the only clickable bean 🤫 */
  cursor: pointer;
  transition: opacity 0.3s ease;
}
@media (hover: hover) {
  .bean-grogu:hover { opacity: 0.9 !important; }
}
@media (prefers-reduced-motion: reduce) { .bean { display: none; } }
@media (max-width: 650px) { .bean-field .bean:nth-child(odd):not(.bean-grogu) { display: none; } }

/* ── Admin: loyalty disputes (Terms §10.10) ── */
.dsp-lookup-row { display: flex; gap: 0.6rem; }
.dsp-lookup-row .scan-input { flex: 1; }
.dsp-cust {
  display: flex; flex-direction: column; gap: 0.15rem;
  background: rgba(44,44,44,0.03); border: 1px solid rgba(44,44,44,0.08);
  border-radius: 10px; padding: 0.8rem 0.9rem; margin-bottom: 1rem;
}
.dsp-cust strong { font-size: 1rem; color: var(--charcoal); }
.dsp-cust span   { font-size: 0.8rem; color: rgba(44,44,44,0.55); }
.dsp-kind-row { display: flex; flex-wrap: wrap; gap: 0.6rem; }
.dsp-kind {
  display: flex; align-items: center; gap: 0.45rem; cursor: pointer;
  padding: 0.55rem 0.9rem; border-radius: 999px;
  border: 1.5px solid rgba(44,44,44,0.15); font-size: 0.85rem;
}
.dsp-kind:has(input:checked) { border-color: var(--maroon); background: var(--maroon-pale); font-weight: 600; }
.dsp-stamp-row { display: flex; align-items: center; gap: 0.7rem; flex-wrap: wrap; }
.dsp-from { font-size: 0.88rem; color: rgba(44,44,44,0.6); }
.dsp-arrow { color: var(--maroon); font-weight: 700; }
.dsp-num { max-width: 130px; }
.dsp-hint { font-size: 0.76rem; color: rgba(44,44,44,0.5); margin-top: 0.35rem; }
.dsp-err  { font-size: 0.82rem; color: #a52a2a; font-weight: 600; margin-top: 0.4rem; }
.dsp-empty { font-size: 0.9rem; color: rgba(44,44,44,0.55); }
.dsp-count {
  display: inline-block; margin-left: 0.4rem; padding: 0.05rem 0.5rem;
  border-radius: 999px; background: var(--maroon); color: var(--cream);
  font-size: 0.75rem; vertical-align: middle;
}
.dsp-list { display: flex; flex-direction: column; gap: 0.75rem; }
.dsp-item {
  border: 1px solid rgba(44,44,44,0.1); border-radius: 10px;
  padding: 0.85rem 0.95rem; background: #fff;
}
.dsp-item-done { background: rgba(44,44,44,0.02); }
.dsp-item-head { display: flex; align-items: center; gap: 0.55rem; flex-wrap: wrap; margin-bottom: 0.4rem; }
.dsp-when { font-size: 0.72rem; color: rgba(44,44,44,0.45); margin-left: auto; }
.dsp-tag {
  padding: 0.1rem 0.55rem; border-radius: 999px;
  font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em;
  background: rgba(44,44,44,0.1); color: var(--charcoal);
}
.dsp-tag-stamp    { background: rgba(88,18,23,0.12);  color: var(--maroon); }
.dsp-tag-reward   { background: rgba(201,151,74,0.2); color: #7a5a1e; }
.dsp-tag-approved { background: rgba(29,158,117,0.18); color: #147a59; }
.dsp-tag-rejected { background: rgba(200,50,50,0.14); color: #a52a2a; }
.dsp-line { font-size: 0.86rem; color: var(--charcoal); margin-bottom: 0.2rem; }
.dsp-sub  { font-size: 0.78rem; color: rgba(44,44,44,0.58); }
.dsp-locked { font-style: italic; }
.dsp-actions { display: flex; gap: 0.5rem; margin-top: 0.7rem; flex-wrap: wrap; }
.dsp-actions .dsp-note { flex: 1; min-width: 160px; }
.dsp-btn { padding: 0.5rem 1rem !important; font-size: 0.82rem !important; }

/* ── Battlepass: "how your rewards work" explainer (Terms §10.6) ── */
.bp-reward-rules .bp-rule-row {
  display: flex; gap: 0.85rem; align-items: flex-start;
  padding: 0.85rem 0;
  border-bottom: 1px solid rgba(44,44,44,0.07);
}
.bp-reward-rules .bp-rule-row:last-of-type { border-bottom: none; }
.bp-rule-icon { font-size: 1.35rem; line-height: 1.2; flex-shrink: 0; }
.bp-rule-title { font-size: 0.88rem; font-weight: 600; color: var(--charcoal); margin-bottom: 0.15rem; }
.bp-rule-title strong { color: var(--maroon); }
.bp-rule-sub { font-size: 0.78rem; line-height: 1.55; color: rgba(44,44,44,0.6); }
.bp-rule-foot { font-size: 0.75rem; color: rgba(44,44,44,0.5); margin-top: 0.6rem; }
.bp-rule-foot a { color: var(--maroon); }

/* ── Review card 3D tilt ── */
.review-card {
  transition: transform 0.18s ease, box-shadow 0.18s ease;
  transform-style: preserve-3d;
}
@media (hover: hover) {
  .review-card:hover { box-shadow: var(--shadow-lg); }
}

/* ════════ HOME DUO — specials + battlepass share one background ════════ */
.home-duo {
  background-image: url('../images/backgrounds/bloop.png');
  background-size: 100% auto;
  background-repeat: repeat-y;
  background-position: center top;
  background-color: var(--cream);
}
/* Both sections inside home-duo are see-through so the wrapper bloop + bg shows */
.home-duo .specials-home { background: transparent; padding-bottom: 1.5rem; }
.home-duo .battlepass-teaser { background: transparent; padding-top: 1.5rem; padding-bottom: 1.5rem; }
/* Collapse gap: home-duo → reviews-home, reviews-home → events-home */
.reviews-home { padding-top: 1.5rem; padding-bottom: 1.5rem; }
.events-home { padding-top: 1.5rem; }

/* ════════ ABOUT — hero + origin share one background ════════ */
.about-top {
  background-image: url('../images/backgrounds/bloop.png');
  background-size: 100% auto;
  background-repeat: repeat-y;
  background-position: center top;
  background-color: var(--cream);
}
.about-top .page-hero,
.about-top .about-origin { background: none; }
.about-top .page-hero .container { text-align: center; }
.about-top .page-hero-short { padding-bottom: 1.5rem; }
.about-top .about-origin { padding-top: 1.5rem; }
@media (min-width: 769px) {
  .about-top .page-hero .container { transform: translateX(-4rem); }
}
/* Mobile: bloop only covers to bottom of image; text on plain cream */
@media (max-width: 768px) {
  .about-text {
    background: var(--cream);
    box-shadow: 0 0 0 100vmax var(--cream);
    clip-path: inset(0 -100vmax);
    padding-top: 2rem;
  }
  .about-text .section-title { text-align: center; }
  .about-text p { color: var(--charcoal); }
}

/* ── Admin list search & filter bar ── */
.admin-filter-bar {
  display: flex; gap: 0.6rem;
  padding: 0.75rem 1rem;
  margin-bottom: 0.75rem;
  align-items: center;
}
.admin-filter-bar input[type="text"] { flex: 1; min-width: 0; }
.admin-filter-bar select { width: auto; max-width: 45%; }

.media-filter-bar { display: flex; flex-direction: column; gap: 0.65rem; padding: 1rem 1.25rem; }
.media-filter-pills { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.media-filter-pill {
  background: rgba(88,18,23,0.05); border: 1px solid rgba(88,18,23,0.12);
  border-radius: 999px; padding: 0.4rem 0.9rem;
  font-size: 0.82rem; font-weight: 600; color: var(--charcoal);
  cursor: pointer; transition: all var(--transition);
}
@media (hover: hover) {
  .media-filter-pill:hover { background: rgba(88,18,23,0.1); }
}
.media-filter-pill.active { background: var(--maroon); border-color: var(--maroon); color: var(--cream); }

@keyframes beanFloat {
  0%, 100% { translate: 0 0; rotate: 0deg; }
  50%      { translate: var(--fx, 8px) var(--fy, -10px); rotate: var(--fr, 6deg); }
}
.bean > img, .bean > svg {
  animation: beanFloat var(--fd, 9s) ease-in-out infinite;
  animation-delay: var(--fdel, 0s);
}

/* ── Battlepass teaser: text + card always the same overall size ── */
.battlepass-teaser .grid-2 { align-items: stretch; }
.battlepass-teaser .bp-text,
.battlepass-teaser .bp-visual { width: 100%; min-width: 0; }
.battlepass-teaser .bp-visual { display: flex; }
.battlepass-teaser .bp-card-preview { width: 100%; height: 100%; max-width: none; }
@media (max-width: 900px) {
  .battlepass-teaser .bp-card-preview { height: auto; min-height: 340px; }
}

/* ── Orders: count badges + auto-refresh toggle ── */
.ofb-count {
  display: inline-block; min-width: 18px; padding: 0 5px;
  background: var(--maroon); color: var(--cream);
  border-radius: 999px; font-size: 0.68rem; font-weight: 700;
  margin-left: 0.25rem; vertical-align: middle;
}
.order-filter-btn[data-filter="new"] .ofb-count { background: var(--accent); color: #2c2c2c; }
/* Daily revenue bar */
.orders-daily-bar {
  position: sticky; bottom: 0; left: 0; right: 0;
  background: var(--black);
  border-top: 1px solid rgba(226,201,160,0.15);
  display: flex; align-items: center; gap: 1rem;
  padding: 0.65rem 1.25rem;
  font-size: 0.82rem; color: rgba(253,246,237,0.55);
  z-index: 100;
}
.odb-label { flex: 1; }
.odb-total { font-family: var(--font-nimbus); font-size: 1.1rem; color: var(--accent); }
.odb-count { font-size: 0.72rem; color: rgba(253,246,237,0.35); }

/* Past orders total line */
.orders-past-total {
  text-align: center; padding: 1.25rem;
  font-size: 0.85rem; color: rgba(44,44,44,0.55);
  border-top: 1px solid rgba(44,44,44,0.07);
}

/* In-progress grid layout */
.orders-progress-grid { display: flex; flex-direction: column; gap: 0.75rem; width: 100%; }
.order-progress-card { display: flex; flex-direction: column; gap: 0; border-radius: var(--radius); }
.opc-header {
  display: flex; justify-content: space-between; align-items: baseline;
  padding: 0.6rem 0.75rem;
  background: rgba(44,44,44,0.04);
  border-radius: var(--radius) var(--radius) 0 0;
  border-bottom: 1px solid rgba(44,44,44,0.07);
  gap: 0.5rem;
  width: 100%;
}
.opc-body { display: flex; padding: 0.6rem 0.75rem; gap: 0.5rem; flex: 1;
  width: 100%;
}
.opc-left { flex: 1; display: flex; flex-direction: column; gap: 0.15rem; border-right: 1px solid rgba(44,44,44,0.09); padding-right: 0.65rem; margin-right: 0.1rem; }
.opc-right { display: flex; flex-direction: column; align-items: flex-end; gap: 0.25rem; flex-shrink: 0; }
.opc-arriving-badge {
  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.05em;
  background: #1D9E75; color: #fff;
  padding: 0.18rem 0.55rem; border-radius: 50px;
  animation: opc-pulse 1.4s ease-in-out infinite;
}
@keyframes opc-pulse {
  0%,100% { opacity: 1; } 50% { opacity: 0.55; }
}


/* Edit name on battlepass */
.bp-name-row { display: flex; align-items: center; gap: 0.5rem; }
.bp-edit-name-btn {
  background: none; border: none; cursor: pointer;
  color: rgba(253,246,237,0.3); font-size: 0.9rem;
  transition: color 0.2s ease; padding: 0.1rem;
}
@media (hover: hover) {
  .bp-edit-name-btn:hover { color: var(--accent); }
}
.bp-name-form { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.25rem; flex-wrap: wrap; }
.bp-name-input {
  background: rgba(255,255,255,0.06); border: 1px solid rgba(226,201,160,0.3);
  border-radius: var(--radius); padding: 0.4rem 0.75rem;
  color: var(--cream); font-family: var(--font-nimbus); font-size: 1.2rem;
  min-width: 0; flex: 1;
}
.bp-name-input:focus { outline: none; border-color: var(--accent); }

/* ── Orders: cash / trust controls ── */
.order-cash-pill {
  display: inline-block; background: var(--accent); color: #2c2c2c;
  font-size: 0.62rem; font-weight: 700; padding: 0.05rem 0.4rem;
  border-radius: 999px; margin-left: 0.25rem;
}
/* Loyalty stamps already credited on this order (payment-triggered, not a
   counter scan) — tells staff not to scan the customer's QR again at pickup. */
.order-stamped-pill {
  display: inline-block; background: rgba(88,18,23,0.1); color: var(--maroon);
  font-size: 0.62rem; font-weight: 700; padding: 0.05rem 0.4rem;
  border-radius: 999px; margin-left: 0.25rem;
}
.od-cash-box {
  background: rgba(226,201,160,0.08); border: 1px solid rgba(226,201,160,0.3);
  border-radius: 10px; padding: 0.85rem; margin-bottom: 1rem;
}
.od-cash-line { font-size: 0.86rem; margin-bottom: 0.35rem; }
.od-pay-status { text-transform: capitalize; font-weight: 700; }
.od-pay-pending { color: var(--accent); }
.od-pay-paid { color: #1D9E75; }
.od-pay-no_show { color: #c83232; }
.od-trust { font-size: 0.78rem; color: rgba(44,44,44,0.6); margin-bottom: 0.6rem; }
.od-settle-btns { display: flex; gap: 0.5rem; }
.od-settle-btn {
  flex: 1; padding: 0.55rem; border-radius: 8px; cursor: pointer;
  font-size: 0.82rem; font-weight: 600; border: 1.5px solid;
}
.od-settle-paid { background: #fff; border-color: #1D9E75; color: #1D9E75; }
@media (hover: hover) {
  .od-settle-paid:hover { background: #1D9E75; color: #fff; }
}
.od-settle-noshow { background: #fff; border-color: #c83232; color: #c83232; }
@media (hover: hover) {
  .od-settle-noshow:hover { background: #c83232; color: #fff; }
}
.od-settled { font-size: 0.8rem; color: rgba(44,44,44,0.5); text-transform: capitalize; }

/* ── Dashboard tier banner ── */
.dash-tier-card { background: linear-gradient(135deg, var(--maroon), #3d0d11); color: var(--cream); margin-bottom: 1rem; }
.dash-tier-top { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.75rem; }
.dash-tier-chip { background: var(--cream); color: var(--maroon); font-size: 0.7rem; font-weight: 800; padding: 0.2rem 0.6rem; border-radius: 999px; }
.dash-tier-name { font-family: var(--font-nimbus); font-size: 1.3rem; margin-left: 0.5rem; }
.dash-tier-stats { display: flex; gap: 1rem; font-size: 0.82rem; opacity: 0.9; }
.dash-tier-bar { height: 8px; background: rgba(253,246,237,0.2); border-radius: 999px; margin-top: 1rem; overflow: hidden; }
.dash-tier-fill { height: 100%; background: var(--cream); border-radius: 999px; transition: width 0.6s ease; }
.dash-tier-next { font-size: 0.78rem; opacity: 0.8; margin-top: 0.5rem; }

/* ── Admin nav: grouped categories ── */
.admin-nav-group { border-bottom: 1px solid rgba(226,201,160,0.08); }
.admin-nav-group:last-of-type { border-bottom: none; }

.admin-nav-group-label {
  display: flex; align-items: center; justify-content: center; gap: 0.6rem;
  padding: 0.75rem 1.25rem;
  font-size: 0.65rem; font-weight: 700; letter-spacing: 0.1em;
  text-transform: uppercase; color: rgba(226,201,160,0.75);
  cursor: pointer; user-select: none;
  transition: color 0.15s ease;
}
@media (hover: hover) {
  .admin-nav-group-label:hover { color: var(--accent); }
}
.admin-nav-group-arrow {
  font-size: 1rem; font-weight: 400; line-height: 1;
  transition: transform 0.2s ease; color: rgba(226,201,160,0.5);
}
.admin-nav-group.open .admin-nav-group-arrow { transform: rotate(90deg); }

.admin-nav-group-items {
  max-height: 0; overflow: hidden;
  transition: max-height 0.28s cubic-bezier(0.4, 0, 0.2, 1);
}
.admin-nav-group.open .admin-nav-group-items { max-height: 300px; }

.admin-nav-item.admin-nav-sub {
  padding-left: 2rem;
  font-size: 0.82rem;
}

/* ── Register: notification opt-in checkboxes ── */
.notify-optin-group { border-top: 1px solid rgba(44,44,44,0.08); padding-top: 1rem; }
.notify-optin-label { font-size: 0.78rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(44,44,44,0.5); margin: 0 0 0.6rem; }
.notify-optin-sub { font-weight: 400; text-transform: none; letter-spacing: 0; font-size: 0.75rem; }
.notify-check { display: flex; align-items: center; gap: 0.6rem; font-size: 0.88rem; color: var(--charcoal); cursor: pointer; padding: 0.25rem 0; }
.notify-check input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--maroon); flex-shrink: 0; }

/* ── Battlepass: email prefs section ── */
.bp-prefs-card { margin-top: 1rem; }
.bp-prefs-form { display: flex; flex-direction: column; gap: 0; }
.bp-pref-toggle {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: 0.85rem 0; border-bottom: 1px solid rgba(44,44,44,0.06); cursor: pointer;
}
.bp-pref-toggle:last-of-type { border-bottom: none; }
.bp-pref-info { display: flex; flex-direction: column; gap: 0.15rem; }
.bp-pref-name { font-size: 0.9rem; font-weight: 600; color: var(--charcoal); }
.bp-pref-desc { font-size: 0.75rem; color: rgba(44,44,44,0.5); }

/* Toggle switch */
.bp-toggle-input { position: absolute; opacity: 0; width: 0; height: 0; }
.bp-toggle-track {
  flex-shrink: 0; width: 44px; height: 24px; background: rgba(44,44,44,0.15);
  border-radius: 999px; position: relative; transition: background 0.2s ease;
}
.bp-toggle-input:checked ~ .bp-toggle-track { background: var(--maroon); }
.bp-toggle-thumb {
  position: absolute; top: 3px; left: 3px; width: 18px; height: 18px;
  background: #fff; border-radius: 50%; transition: transform 0.2s ease;
  box-shadow: 0 1px 4px rgba(0,0,0,0.2);
}
.bp-toggle-input:checked ~ .bp-toggle-track .bp-toggle-thumb { transform: translateX(20px); }

.bp-prefs-saved { font-size: 0.8rem; color: #1D9E75; font-weight: 600; margin-top: 0.5rem; }
.bp-prefs-saved.hidden { display: none; }

/* ── Edit Profile card ── */
.bp-profile-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.9rem; }
.bp-profile-edit-btn {
  font-size: 0.78rem; font-weight: 600; color: var(--maroon);
  background: none; border: 1px solid rgba(88,18,23,0.25); border-radius: 6px;
  padding: 0.3rem 0.7rem; cursor: pointer; transition: background 0.2s;
}
@media (hover: hover) {
  .bp-profile-edit-btn:hover { background: rgba(88,18,23,0.05); }
}

.bp-profile-display.hidden { display: none; }
.bp-profile-display { display: flex; flex-direction: column; gap: 0.85rem; }
.bp-profile-row { display: flex; flex-direction: column; gap: 0.15rem; }
.bp-profile-lbl { color: rgba(44,44,44,0.45); font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600; }
.bp-profile-val { font-weight: 600; text-align: left; color: var(--charcoal); word-break: break-all; font-size: 0.96rem; }

.bp-profile-form.hidden { display: none; }
.bp-profile-form { display: flex; flex-direction: column; gap: 0.75rem; }
.bp-pf-group { display: flex; flex-direction: column; gap: 0.25rem; }
.bp-pf-label { font-size: 0.78rem; font-weight: 600; color: rgba(44,44,44,0.55); }
.bp-pf-verify-note { font-weight: 400; color: rgba(44,44,44,0.35); }
.bp-pf-input {
  width: 100%; padding: 0.55rem 0.75rem; border: 1.5px solid rgba(44,44,44,0.15);
  border-radius: 8px; font-size: 0.92rem; outline: none; box-sizing: border-box; transition: border-color 0.2s;
}
.bp-pf-input:focus { border-color: var(--maroon); }
.bp-pf-error.hidden { display: none; }
.bp-pf-error { font-size: 0.8rem; color: #c0392b; margin-top: 0.25rem; }
.bp-pf-actions { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.25rem; }
.bp-pf-save { padding: 0.55rem 1.1rem; font-size: 0.88rem; }
.bp-pf-cancel {
  background: none; border: 1px solid rgba(44,44,44,0.2); border-radius: 8px;
  padding: 0.5rem 1rem; font-size: 0.88rem; color: rgba(44,44,44,0.55); cursor: pointer; transition: background 0.2s;
}
@media (hover: hover) {
  .bp-pf-cancel:hover { background: rgba(44,44,44,0.05); }
}

.bp-pw-section.hidden { display: none; }
.bp-pw-section { margin-top: 0.85rem; padding-top: 0.85rem; border-top: 1px solid rgba(44,44,44,0.08); }
.bp-pw-toggle {
  background: none; border: none; padding: 0; font-size: 0.82rem; font-weight: 600;
  color: var(--maroon); cursor: pointer; text-decoration: none;
}
@media (hover: hover) {
  .bp-pw-toggle:hover { text-decoration: underline; }
}
.bp-pw-section .bp-profile-form { margin-top: 0.75rem; }
.bp-pw-forgot-link { align-self: flex-start; font-size: 0.76rem; color: rgba(44,44,44,0.45); text-decoration: underline; }

.bp-otp-step.hidden { display: none; }
.bp-otp-step { display: flex; flex-direction: column; gap: 0.6rem; margin-top: 0.5rem; }
.bp-otp-hint { font-size: 0.82rem; color: rgba(44,44,44,0.6); }
.bp-otp-row { display: flex; gap: 0.6rem; align-items: center; }
.bp-otp-input {
  flex: 1; padding: 0.6rem 0.75rem; border: 1.5px solid rgba(44,44,44,0.15); border-radius: 8px;
  font-family: monospace; font-size: 1.4rem; letter-spacing: 0.2em; text-align: center;
  outline: none; transition: border-color 0.2s; box-sizing: border-box;
}
.bp-otp-input:focus { border-color: var(--maroon); }
.bp-otp-submit { padding: 0.6rem 1rem; font-size: 0.88rem; white-space: nowrap; }
.bp-otp-resend { background: none; border: none; font-size: 0.78rem; color: rgba(44,44,44,0.4); cursor: pointer; text-decoration: underline; padding: 0; }
@media (max-width: 650px) {
  .bp-otp-row { flex-direction: column; align-items: stretch; }
  .bp-otp-submit { width: 100%; justify-content: center; }
}

/* ── Notification channel selector ── */
.bp-channel-row { display: flex; gap: 0.75rem; margin-bottom: 1rem; }
.bp-channel-opt {
  flex: 1; display: flex; flex-direction: column; align-items: center; gap: 0.4rem;
  padding: 0.85rem 0.5rem; border: 2px solid rgba(44,44,44,0.12); border-radius: 10px;
  cursor: pointer; transition: border-color 0.2s, background 0.2s;
  font-size: 0.82rem; font-weight: 600; color: rgba(44,44,44,0.55);
}
.bp-channel-opt input[type="radio"] { display: none; }
.bp-channel-opt.active { border-color: #581217; color: #581217; background: rgba(88,18,23,0.04); }
.bp-channel-icon { font-size: 1.3rem; line-height: 1; display: flex; align-items: center; }
.bp-channel-name { font-size: 0.82rem; }
/* ── Per-notification 3-way channel picker (Email / Off / WhatsApp) ── */
.bp-notify-list { display: flex; flex-direction: column; }
.bp-notify-row {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: 0.85rem 0; border-bottom: 1px solid rgba(44,44,44,0.06);
}
.bp-notify-row:last-child { border-bottom: none; }
.bp-3way {
  flex-shrink: 0; display: flex; gap: 0.3rem;
  background: rgba(44,44,44,0.05); border-radius: 999px; padding: 0.2rem;
}
.bp-3way-opt {
  display: flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 50%;
  color: rgba(44,44,44,0.4); cursor: pointer; transition: all 0.15s ease;
}
.bp-3way-opt input[type="radio"] { display: none; }
@media (hover: hover) {
  .bp-3way-opt:hover { color: var(--charcoal); }
}
.bp-3way-opt.active { background: var(--maroon); color: var(--cream); }
.bp-3way-opt.bp-3way-none.active { background: #6b6b6b; }
.bp-3way-opt svg { width: 15px; height: 15px; }

.bp-wa-phone-row { display: flex; flex-direction: column; gap: 0.3rem; margin-bottom: 0.5rem; }
.bp-wa-label { font-size: 0.8rem; font-weight: 600; color: rgba(44,44,44,0.6); }
.bp-wa-input {
  width: 100%; padding: 0.55rem 0.75rem; border: 1.5px solid rgba(44,44,44,0.15);
  border-radius: 8px; font-size: 0.92rem; outline: none; box-sizing: border-box;
  transition: border-color 0.2s;
}
.bp-wa-input:focus { border-color: #581217; }
.bp-wa-hint { font-size: 0.75rem; color: rgba(44,44,44,0.4); }

/* ── Admin: notifications form layout ── */
.admin-form-grid { display: flex; flex-direction: column; gap: 1rem; }
.admin-form-row { display: flex; gap: 1rem; flex-wrap: wrap; }
.admin-form-row .admin-form-group { flex: 1; min-width: 180px; }
.admin-form-group { display: flex; flex-direction: column; gap: 0.35rem; }
.admin-form-label { font-size: 0.78rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: rgba(44,44,44,0.5); }
.admin-textarea { resize: vertical; min-height: 100px; font-family: inherit; }

/* Admin badge colours for notification status */
.badge-green  { background: rgba(29,158,117,0.12); color: #1D9E75; }
.badge-orange { background: rgba(226,201,160,0.18); color: #7a5c2e; }
.badge-grey   { background: rgba(44,44,44,0.08);  color: rgba(44,44,44,0.5); }
.badge-blue   { background: rgba(59,130,246,0.1); color: #2563eb; }

/* ── Battlepass live "barista is serving you" overlay ── */
.bp-live-overlay {
  position: fixed; inset: 0; z-index: 1000;
  display: none; align-items: center; justify-content: center;
  padding: 1.5rem;
  background: rgba(20,8,9,0.72);
  backdrop-filter: blur(5px);
}
.bp-live-overlay.open { display: flex; }
.bp-live-card {
  background: var(--cream); color: var(--charcoal);
  border-radius: 18px; padding: 2.25rem 1.75rem;
  width: 100%; max-width: 340px; text-align: center;
  box-shadow: 0 18px 50px rgba(0,0,0,0.4);
  animation: bpLivePop 0.22s ease;
}
@keyframes bpLivePop { from { transform: scale(0.9); opacity: 0; } to { transform: scale(1); opacity: 1; } }
.bp-live-spinner {
  width: 64px; height: 64px; margin: 0 auto 1.25rem;
  border: 5px solid rgba(88,18,23,0.15);
  border-top-color: var(--maroon);
  border-radius: 50%;
  animation: bpLiveSpin 0.8s linear infinite;
}
@keyframes bpLiveSpin { to { transform: rotate(360deg); } }
.bp-live-check {
  display: none;
  width: 64px; height: 64px; margin: 0 auto 1.25rem;
  align-items: center; justify-content: center;
  background: #1D9E75; color: #fff;
  border-radius: 50%; font-size: 2rem; font-weight: 700;
  animation: bpLivePop 0.3s ease;
}
.bp-live-title {
  font-family: var(--font-nimbus, serif);
  font-size: 1.2rem; margin-bottom: 0.4rem; color: var(--maroon);
}
.bp-live-sub { font-size: 0.85rem; color: rgba(44,44,44,0.6); }

/* ── Reward claim code display ── */
.bp-claim-show { display: flex; flex-direction: column; align-items: center; gap: 0.6rem; }

/* ====== FIND US / MAP ====== */
.find-us { background: var(--cream); text-align: center; }
.find-us-sub { margin: 0 auto 2.5rem; text-align: center; }
.map-embed {
  position: relative;
  width: 100%;
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
  border: 4px solid var(--white);
  line-height: 0;
}
.map-embed iframe {
  width: 100%;
  height: 460px;
  display: block;
  filter: saturate(1.05);
}
@media (max-width: 640px) {
  .map-embed iframe { height: 340px; }
}

/* ====== CONTACT US ====== */
.contact-section { background: var(--cream); }
.contact-card {
  display: grid;
  grid-template-columns: 1fr 1.1fr;
  gap: 0;
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-lg);
}
.contact-intro {
  background: var(--maroon);
  color: var(--cream);
  padding: 3rem 2.75rem;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.contact-intro .section-eyebrow { color: var(--accent); margin-bottom: 0.75rem; }
.contact-intro .section-title { color: var(--cream); text-align: left; margin-bottom: 1rem; }
.contact-intro .section-title em { color: var(--accent); }
.contact-lead { font-size: 1rem; line-height: 1.7; color: rgba(253,246,237,0.8); margin-bottom: 2rem; }
.contact-details { display: flex; flex-direction: column; gap: 0.9rem; }
.contact-detail {
  display: flex; align-items: center; gap: 0.6rem;
  font-size: 0.92rem; color: rgba(253,246,237,0.9);
  transition: color var(--transition);
}
@media (hover: hover) {
  a.contact-detail:hover { color: var(--accent); }
}
.contact-detail-icon { font-size: 1.05rem; line-height: 1; }

.contact-form {
  background: var(--white);
  padding: 3rem 2.75rem;
  display: flex; flex-direction: column; gap: 1rem;
}
.contact-optional { color: rgba(44,44,44,0.4); font-weight: 400; }
.contact-textarea {
  padding: 0.75rem 1rem;
  border: 1.5px solid rgba(44,44,44,0.15);
  border-radius: var(--radius);
  font-size: 0.95rem;
  font-family: var(--font-body);
  background: var(--cream);
  transition: border-color var(--transition);
  width: 100%;
  resize: vertical;
  min-height: 110px;
  color: var(--charcoal);
}
.contact-textarea:focus { outline: none; border-color: var(--maroon); background: var(--white); }
.contact-submit { margin-top: 0.5rem; width: 100%; }
.contact-submit:disabled { opacity: 0.6; cursor: not-allowed; }
/* Honeypot — hidden from real visitors, visible to bots */
.contact-hp { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; }
.contact-status { display: none; padding: 0.75rem 1rem; border-radius: var(--radius); font-size: 0.88rem; }
.contact-status-ok  { display: block; background: rgba(46,125,50,0.12); color: #1b5e20; border: 1px solid rgba(46,125,50,0.3); }
.contact-status-err { display: block; background: rgba(88,18,23,0.08); color: var(--maroon); border: 1px solid rgba(88,18,23,0.25); }
@media (max-width: 780px) {
  .contact-card { grid-template-columns: 1fr; }
  .contact-intro, .contact-form { padding: 2.25rem 1.5rem; }
}

/* ====== SCROLL REVEAL (fade sections in on view) ====== */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.7s ease, transform 0.7s ease; }
.reveal.is-visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
}

/* ====== DRINK TEXTURE PANELS ====== */
.drink-panel-wrap { width: 100%; height: 100%; }
.drink-panel-svg { display: block; width: 100%; height: 100%; }
.drink-panel-wrap-detail { width: 100%; height: 100%; }

/* Panels rest as a pure cream card; the layers "rise" in horizontally,
   left → right, one after another (espresso first, milk longest, foam last).
   Each <g class="dp-band"> carries its own --dp-dur / --dp-delay. Bands are
   collapsed by default and held filled once triggered (forwards). */
.dp-band { transform-box: fill-box; transform-origin: left center; transform: scaleX(0); }
@keyframes dpRise { from { transform: scaleX(0); } to { transform: scaleX(1); } }
/* Mouse/trackpad: deliberate hover trigger. Scoped to (hover: hover) — on a
   touch device :hover sticks around oddly after a tap (and can fire from a
   scroll-through), which rendered as random cards animating at the wrong
   time. Touch gets its own explicit trigger below instead. */
@media (hover: hover) {
  .drink-card:hover .dp-band,
  .drink-panel-wrap:hover .dp-band {
    animation: dpRise var(--dp-dur, 1s) cubic-bezier(0.4, 0, 0.2, 1) var(--dp-delay, 0s) forwards;
  }
}
/* Touch: drink-panel.js adds .is-pressed on pointerdown (menu grid only —
   the card is about to open the order modal anyway, so this is the "press"
   feedback for that same gesture) and removes/re-adds it per tap so a second
   press on the same card replays the rise from the start. Deliberately NOT
   tied to scroll position — a card animating just because it drifted into
   view read as broken, not deliberate. */
@media (hover: none) {
  .drink-card.is-pressed .dp-band {
    animation: dpRise var(--dp-dur, 1s) cubic-bezier(0.4, 0, 0.2, 1) var(--dp-delay, 0s) forwards;
  }
  /* Standalone detail-page hero panel has no press affordance of its own
     (tapping it does nothing), so it just plays once on load instead. */
  .drink-panel-wrap-detail .dp-band {
    animation: dpRise var(--dp-dur, 1s) cubic-bezier(0.4, 0, 0.2, 1) var(--dp-delay, 0s) forwards;
  }
}
/* In the order popup the panel is freshly inserted each open, so this runs the
   rise-in exactly ONCE per open (no hover trigger, so it never loops). */
.modal-panel-modal-wrap .dp-band {
  animation: dpRise var(--dp-dur, 1s) cubic-bezier(0.4, 0, 0.2, 1) var(--dp-delay, 0s) forwards;
}
/* Admin live preview always shows the drink (still replays on hover). */
.layer-preview .dp-band { transform: none; }
@media (hover: hover) {
  .layer-preview:hover .dp-band {
    animation: dpRise var(--dp-dur, 1s) cubic-bezier(0.4, 0, 0.2, 1) var(--dp-delay, 0s) forwards;
  }
}
/* Reduced motion: no animation — show the full drink at rest everywhere. */
@media (prefers-reduced-motion: reduce) {
  .dp-band { transform: none; }
  .drink-card:hover .dp-band,
  .drink-panel-wrap:hover .dp-band,
  .modal-panel-modal-wrap .dp-band,
  .layer-preview:hover .dp-band,
  .drink-card.is-pressed .dp-band,
  .drink-panel-wrap-detail .dp-band { animation: none; }
}
/* Panel fills the card — override the cup's centered/gradient look */
.drink-img-wrap-cup { background: none; }
.drink-img-wrap-cup .drink-panel-wrap { display: block; }

/* ====== ADMIN: texture library ====== */
.tex-color-row { display: flex; align-items: center; gap: 0.6rem; }
.tex-color-input {
  width: 52px; height: 34px; padding: 0; border: 1px solid rgba(44,44,44,0.15);
  border-radius: 8px; background: none; cursor: pointer;
}
.tex-swatch {
  width: 52px; height: 52px; border-radius: 8px; flex-shrink: 0;
  position: relative; overflow: hidden; border: 1px solid rgba(44,44,44,0.1);
}
.tex-swatch-dots {
  position: absolute; inset: 0;
  background-image: radial-gradient(var(--dc, #9a9a9a) 1.2px, transparent 1.3px);
  background-size: 8px 8px; opacity: 0.55;
}

/* ====== ADMIN: drink layer editor ====== */
.layer-editor { margin-top: 0.5rem; }
.layer-editor-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.4rem; }
.layer-col-title {
  display: block; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.08em;
  color: rgba(44,44,44,0.45); margin-bottom: 0.35rem;
}
.layer-avail {
  display: flex; flex-direction: column; gap: 0.35rem;
  padding: 0.5rem; border: 1px dashed rgba(44,44,44,0.18); border-radius: 10px;
  min-height: 60px; background: rgba(44,44,44,0.02);
}
.layer-chip {
  display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0.5rem;
  background: #fff; border: 1px solid rgba(44,44,44,0.12); border-radius: 8px;
  cursor: grab; font-size: 0.82rem; user-select: none;
}
.layer-chip:active { cursor: grabbing; }
.layer-swatch {
  width: 20px; height: 20px; border-radius: 5px; flex-shrink: 0;
  border: 1px solid rgba(44,44,44,0.12);
}
.layer-stack {
  display: flex; flex-direction: column; gap: 0.35rem;
  padding: 0.5rem; border: 1px dashed rgba(88,18,23,0.3); border-radius: 10px;
  min-height: 60px; background: rgba(88,18,23,0.03);
}
.layer-empty {
  font-size: 0.8rem; color: rgba(44,44,44,0.35); text-align: center; padding: 0.75rem 0;
}
.layer-row {
  display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.5rem;
  background: #fff; border: 1px solid rgba(44,44,44,0.12); border-radius: 8px;
}
.layer-drag { cursor: grab; color: rgba(44,44,44,0.35); font-size: 1rem; flex-shrink: 0; }
.layer-name { font-size: 0.8rem; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.layer-slider { flex: 1.4; min-width: 60px; accent-color: var(--maroon); }
.layer-pct { font-size: 0.75rem; font-weight: 600; width: 34px; text-align: right; }
.layer-ml { font-size: 0.72rem; color: rgba(44,44,44,0.5); width: 46px; text-align: right; }
.layer-remove {
  border: none; background: none; color: #c83232; font-size: 1.1rem; line-height: 1;
  cursor: pointer; flex-shrink: 0; padding: 0 0.2rem;
}
.layer-preview-row {
  display: grid; grid-template-columns: 1fr auto; gap: 0.75rem; align-items: end; margin-top: 0.6rem;
}
.layer-size-toggle { display: flex; gap: 0.35rem; flex-wrap: wrap; }
.layer-size-btn {
  padding: 0.35rem 0.6rem; font-size: 0.75rem; border-radius: 7px; cursor: pointer;
  border: 1px solid rgba(44,44,44,0.15); background: #fff;
}
.layer-size-btn.active { background: var(--maroon); color: var(--cream); border-color: var(--maroon); }
.layer-preview {
  width: 90px; height: 68px; border-radius: 8px; overflow: hidden;
  border: 1px solid rgba(44,44,44,0.12); flex-shrink: 0;
}
.layer-preview .drink-panel-svg { width: 100%; height: 100%; }

/* ====== ADMIN: contact messages ====== */
.msg-card.msg-unread { border-left: 3px solid var(--maroon); }
.msg-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; }
.msg-user { font-weight: 600; }
.msg-body {
  margin-top: 0.6rem; font-size: 0.88rem; line-height: 1.6; color: var(--charcoal);
  white-space: pre-line;
}

@media (max-width: 640px) {
  .layer-editor-cols { grid-template-columns: 1fr; }
  .layer-preview-row { grid-template-columns: 1fr; }
}

/* ====== DRINK CARD REDESIGN (texture fills card, name centered) ====== */
/* Let cards size by their own aspect-ratio, override earlier flex rules */
.drink-grid { align-items: start; }
.drink-card { height: auto; }
.drink-card .drink-card-inner-wrap {
  position: relative;
  display: block;
  aspect-ratio: 3 / 2;
  padding: 0;
  gap: 0;
  overflow: hidden;
  background: var(--cream);
}
.drink-card-special .drink-card-inner-wrap { border-color: var(--maroon); background: var(--cream); }

.drink-card-media {
  position: absolute; inset: 0; z-index: 0;
  animation: texReveal 0.7s cubic-bezier(0.22, 1, 0.36, 1) both;
}
.drink-card-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.drink-card-media .drink-panel-svg { width: 100%; height: 100%; display: block; }
@keyframes texReveal {
  from { clip-path: inset(0 100% 0 0); }
  to   { clip-path: inset(0 0 0 0); }
}
@media (prefers-reduced-motion: reduce) { .drink-card-media { animation: none; } }

/* Scrim only appears once the drink fills in (hover, or the touch press held
   by drinks.ejs's .is-pressed) — at rest the card is pure cream, so no dark
   overlay is needed. Touch mirrors hover exactly (drink-panel.js's own
   .is-pressed timer keeps it in sync — see drinks.ejs) so the card reads the
   same either way, instead of the un-scrimmed raw texture colour showing
   through on touch, which could land anywhere from unreadable to fine
   depending on what colour that particular drink's layers happened to be. */
.drink-card-scrim {
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(to top, rgba(0,0,0,0.5), rgba(0,0,0,0.08) 45%, rgba(0,0,0,0.22));
  opacity: 0; transition: opacity 0.4s ease;
}
@media (hover: hover) {
  .drink-card:hover .drink-card-scrim { opacity: 1; }
}
@media (hover: none) {
  .drink-card.is-pressed .drink-card-scrim { opacity: 1; }
}
.drink-name-center {
  position: absolute; inset: 0; z-index: 2;
  display: flex; align-items: center; justify-content: center; text-align: center;
  padding: 1rem;
  font-family: var(--font-display, var(--font-body));
  font-weight: 700; font-size: 1.35rem; line-height: 1.2;
  color: var(--maroon); text-shadow: none;
  transition: color 0.35s ease, text-shadow 0.35s ease;
}
@media (hover: hover) {
  .drink-card:hover .drink-name-center { color: var(--cream); text-shadow: 0 2px 10px rgba(0,0,0,0.6); }
}
@media (hover: none) {
  .drink-card.is-pressed .drink-name-center { color: var(--cream); text-shadow: 0 2px 10px rgba(0,0,0,0.6); }
}
.drink-card .drink-special-tag {
  position: absolute; top: 0.55rem; left: 0.55rem; z-index: 3; margin: 0;
  background: var(--maroon); color: var(--cream);
  padding: 0.2rem 0.55rem; border-radius: 50px;
  font-size: 0.64rem; font-weight: 700; letter-spacing: 0.04em;
}
.drink-card-foot {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
  display: flex; align-items: center; justify-content: space-between; gap: 0.5rem;
  padding: 0.6rem 0.7rem;
}
.drink-card-foot .drink-prices { flex-wrap: wrap; }
.drink-card-foot .drink-price-pill {
  background: rgba(255,255,255,0.94); color: var(--maroon);
  box-shadow: 0 1px 4px rgba(0,0,0,0.28);
}
.drink-card-foot .drink-price-large  { background: var(--maroon);   color: var(--cream); }
.drink-card-foot .drink-price-grande { background: var(--charcoal); color: var(--cream); }
.drink-card-foot .order-add-hint {
  margin: 0; padding: 0; color: var(--maroon); font-size: 0.66rem;
  text-shadow: none; white-space: nowrap;
  transition: color 0.35s ease, text-shadow 0.35s ease;
}
@media (hover: hover) {
  .drink-card:hover .drink-card-foot .order-add-hint { color: var(--cream); text-shadow: 0 1px 3px rgba(0,0,0,0.6); }
}
@media (hover: none) {
  .drink-card.is-pressed .drink-card-foot .order-add-hint { color: var(--cream); text-shadow: 0 1px 3px rgba(0,0,0,0.6); }
}
/* Reduced motion shows the full drink at rest, so keep the drink-look text. */
@media (prefers-reduced-motion: reduce) {
  .drink-card-scrim { opacity: 1; }
  .drink-name-center { color: var(--cream); text-shadow: 0 2px 10px rgba(0,0,0,0.6); }
  .drink-card-foot .order-add-hint { color: var(--cream); text-shadow: 0 1px 3px rgba(0,0,0,0.6); }
}

/* "How it's made" — a labelled legend below the card, separate from the
   texture-panel graphic above it. The panel is decorative (colour only, no
   labels); this is the informational read: which layer is which, by name. */
.drink-how-made {
  margin-top: 0.65rem; padding: 0.6rem 0.75rem;
  background: var(--white); border: 1px solid rgba(44,44,44,0.08);
  border-radius: var(--radius);
}
.drink-how-made-label {
  display: block; font-size: 0.62rem; font-weight: 700; letter-spacing: 0.08em;
  text-transform: uppercase; color: rgba(44,44,44,0.4); margin-bottom: 0.4rem;
}
.drink-how-made-chips { display: flex; flex-wrap: wrap; gap: 0.4rem 0.7rem; }
.drink-how-made-chip {
  display: inline-flex; align-items: center; gap: 0.35rem;
  font-size: 0.78rem; color: var(--charcoal); line-height: 1;
}
.drink-how-made-swatch {
  width: 14px; height: 14px; border-radius: 50%; flex-shrink: 0;
  background-size: cover; background-position: center;
  border: 1px solid rgba(44,44,44,0.15);
}

/* ====== REVIEWS: arrows + dot peek ====== */
.reviews-carousel { position: relative; }
.reviews-arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 5;
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid rgba(88,18,23,0.15); background: var(--white); color: var(--maroon);
  font-size: 1.4rem; line-height: 1; cursor: pointer;
  box-shadow: var(--shadow); transition: background var(--transition), transform var(--transition);
  display: flex; align-items: center; justify-content: center;
}
@media (hover: hover) {
  .reviews-arrow:hover { background: var(--maroon); color: var(--cream); }
}
.reviews-arrow-prev { left: -6px; }
.reviews-arrow-next { right: -6px; }
@media (max-width: 650px) { .reviews-arrow { display: none; } }

/* ====== SPECIALITY / PROMO ADVERT (drinks + pastry-of-the-month) ====== */
.drinks-ad-section { background: var(--cream); }
.drinks-ad {
  display: block; position: relative;
  border-radius: var(--radius-lg); overflow: hidden;
  box-shadow: var(--shadow-lg);
  /* Fixed aspect-ratio box so the banner always fills edge-to-edge — the
     image (picture>img) uses object-fit:cover to fill it regardless of the
     exact pixel size uploaded, instead of the box just being however tall
     the raw image happened to be. Mobile picks the square mobile image via
     <source media>; desktop switches to the wide desktop image at ≥768px. */
  aspect-ratio: 1 / 1;
}
@media (min-width: 768px) { .drinks-ad { aspect-ratio: 16 / 5; } }
.drinks-ad-img { width: 100%; height: 100%; object-fit: cover; display: block; }
.drinks-ad-caption {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 1rem 1.25rem; color: var(--cream); font-weight: 600;
  background: linear-gradient(to top, rgba(0,0,0,0.6), transparent);
}
.drinks-ad-placeholder {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 0.4rem; text-align: center;
  min-height: 220px; padding: 2rem;
  background: linear-gradient(135deg, var(--cream-dark), var(--cream-mid));
  border: 2px dashed rgba(88,18,23,0.25); box-shadow: none;
}
.drinks-ad-ph-icon { font-size: 2rem; color: var(--maroon); }
.drinks-ad-ph-title { font-weight: 700; color: var(--charcoal); }
.drinks-ad-ph-sub { font-size: 0.82rem; color: rgba(44,44,44,0.5); }

/* ====== SKELETON LOADERS ====== */
/* A cream shimmer used both for auto image placeholders (main.js wires every
   content <img>) and as reusable block skeletons you can drop into any markup:
   <div class="skeleton skeleton-title"></div>, <div class="skeleton skeleton-text"></div>. */
@keyframes clShimmer {
  from { background-position: 200% 0; }
  to   { background-position: -200% 0; }
}
@keyframes clFadeIn { from { opacity: 0; } to { opacity: 1; } }

.skeleton,
.cl-skeleton-img:not(.is-loaded) {
  background-color: var(--cream-dark);
  background-image: linear-gradient(100deg,
    rgba(255,255,255,0) 20%,
    rgba(255,255,255,0.7) 48%,
    rgba(255,255,255,0) 72%);
  background-size: 200% 100%;
  background-repeat: no-repeat;
  animation: clShimmer 1.3s ease-in-out infinite;
}

/* Image placeholders: while loading, hide alt text / broken-icon; fade in once ready. */
.cl-skeleton-img:not(.is-loaded) { color: transparent; font-size: 0; }
.cl-skeleton-img.is-loaded { animation: clFadeIn 0.4s ease; }

/* Reusable block skeletons */
.skeleton { display: block; border-radius: var(--radius, 12px); }
.skeleton-text  { height: 0.8em; margin: 0.45em 0; border-radius: 6px; }
.skeleton-title { height: 1.4em; width: 60%; margin-bottom: 0.7em; border-radius: 6px; }
.skeleton-line-90 { width: 90%; }
.skeleton-line-70 { width: 70%; }
.skeleton-line-50 { width: 50%; }
.skeleton-circle { border-radius: 50%; }
.skeleton-block { width: 100%; height: 100%; }

@media (prefers-reduced-motion: reduce) {
  .skeleton,
  .cl-skeleton-img:not(.is-loaded),
  .cl-skeleton-img.is-loaded { animation: none; }
}

/* ====== ERROR PAGES (404 / 500 / etc.) ====== */
.error-page {
  min-height: 72vh;
  display: flex; align-items: center; justify-content: center;
  padding: 8rem 1.5rem 5rem;
  background: var(--cream);
}
.error-inner { text-align: center; max-width: 540px; }
.error-emoji { font-size: 3.5rem; line-height: 1; margin-bottom: 0.5rem; }
.error-code {
  font-family: var(--font-nimbus);
  font-size: clamp(4.5rem, 20vw, 9rem);
  font-weight: 700; line-height: 0.95; margin: 0;
  color: var(--maroon); letter-spacing: 0.02em;
}
.error-title {
  font-family: var(--font-nimbus);
  font-size: clamp(1.5rem, 5vw, 2.1rem);
  color: var(--charcoal); margin: 0.4rem 0 0.75rem;
}
.error-msg {
  color: rgba(44,44,44,0.6); font-size: 1rem; line-height: 1.65;
  margin: 0 auto 2rem; max-width: 42ch;
}
.error-actions { display: flex; gap: 0.75rem; justify-content: center; flex-wrap: wrap; }
.btn-outline-dark {
  background: transparent; color: var(--maroon);
  border: 1.5px solid rgba(88,18,23,0.3);
}
@media (hover: hover) {
  .btn-outline-dark:hover {
    background: rgba(88,18,23,0.06); border-color: var(--maroon);
    transform: translateY(-2px);
  }
}

/* ============================================================
   LEGAL PAGES — Privacy Policy & Terms & Conditions
   ============================================================ */
.legal-wrap { background: var(--cream); }
.legal-hero {
  background: var(--maroon);
  color: var(--cream);
  padding: 140px 0 3rem;   /* matches the site's standard .page-hero clearance under the fixed navbar */
}
.legal-hero .container { max-width: 820px; }
.legal-hero .page-title { color: var(--cream); margin-bottom: 0.75rem; }
.legal-hero .section-eyebrow { color: var(--cream); opacity: 0.8; }
.legal-hero .legal-updated { font-size: 0.9rem; opacity: 0.85; margin-top: 0.5rem; }

.legal-body { padding: 3rem 0 5rem; }
/* Wide enough for a 260px sidebar plus the same ~820px reading column the
   document had before it gained one — the prose measure must not change. */
.legal-body .container { max-width: 1140px; }

/* Sidebar + document. `align-items: start` is what actually lets the aside be
   sticky: the grid default (stretch) makes the column full-height, and a
   full-height box has nothing to stick within. */
.legal-layout {
  display: grid;
  grid-template-columns: 260px minmax(0, 1fr);
  gap: 3rem;
  align-items: start;
}
.legal-toc-col {
  position: sticky;
  top: calc(var(--nav-h) + 1.25rem);
  /* Its own scrollbar — the T&Cs have 15 sections and every one of them can be
     expanded, which easily outgrows a short viewport. */
  max-height: calc(100vh - var(--nav-h) - 2.5rem);
  overflow-y: auto;
  overscroll-behavior: contain;
}
.legal-doc { min-width: 0; }

.legal-toolbar {
  display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: center;
  justify-content: space-between;
  margin-bottom: 2.5rem; padding-bottom: 1.5rem;
  border-bottom: 1px solid var(--cream-mid);
}
.legal-toolbar .legal-toolbar-note { font-size: 0.85rem; color: var(--charcoal-lt); opacity: 0.8; }
.legal-toolbar-actions { display: flex; flex-wrap: wrap; gap: 0.6rem; }
.legal-toolbar-actions .btn { display: inline-flex; align-items: center; gap: 0.45rem; }

.legal-section { margin-bottom: 2.75rem; scroll-margin-top: 90px; }
.legal-section h2 {
  font-family: var(--font-nimbus, serif);
  font-size: 1.5rem; color: var(--maroon);
  margin: 0 0 0.9rem; padding-top: 0.5rem;
  border-top: 2px solid var(--maroon-pale);
}
.legal-section h3 { font-size: 1.08rem; color: var(--charcoal); margin: 1.4rem 0 0.5rem; scroll-margin-top: 90px; }
.legal-section p, .legal-section li { line-height: 1.7; color: var(--charcoal); }
.legal-section p { margin: 0 0 1rem; }
/* Lists used to carry `margin-left: 1.25rem`, which pushed the whole list box
   1.25rem right of every heading, paragraph and table — the bullets themselves
   then hung outside it. Using padding instead keeps the list box flush at the
   same left edge as the section title, with the marker sitting inside that
   padding: marker aligns to the text column, wrapped lines indent under it. */
.legal-section ul, .legal-section ol { margin: 0 0 1.2rem; padding-left: 1.35rem; }
.legal-section li { margin-bottom: 0.5rem; padding-left: 0.15rem; }
.legal-section strong { color: var(--charcoal); }
.legal-table {
  width: 100%; border-collapse: collapse; margin: 0 0 1.2rem;
  font-size: 0.92rem;
}
.legal-table th, .legal-table td {
  text-align: left; padding: 0.65rem 0.9rem;
  border-bottom: 1px solid var(--cream-mid);
}
.legal-table th { color: var(--maroon); font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.05em; }
.legal-table tr:last-child td { border-bottom: none; }
/* Secondary/"by the way" prose inside a clause — visually quieter than body
   copy without being a full .legal-note callout box. */
.legal-section p.legal-aside {
  font-size: 0.88rem; color: rgba(44,44,44,0.62);
  border-left: 2px solid var(--cream-mid);
  padding-left: 0.9rem; margin-left: 0.1rem;
}

/* A fill-in that needs its own sub-heading + instruction, rather than sitting
   inline in a sentence (e.g. the §10.10 dispute-process write-up). */
.legal-section h4.legal-fill-heading {
  font-size: 0.98rem; color: var(--charcoal);
  margin: 1.5rem 0 0.35rem; font-weight: 700;
}
.legal-section p.legal-fill-prompt {
  font-size: 0.86rem; color: rgba(44,44,44,0.6);
  margin-bottom: 0.5rem;
}

/* Boss fill-in field — an actual editable input, sitting inline in the sentence */
.fill-input {
  font-family: inherit; font-size: inherit; font-weight: 700; color: #5b4600;
  background: #fff3bf;
  padding: 0.05em 0.5em; border-radius: 4px;
  border: 1px dashed #d9b400;
  min-width: 3ch;
}
.fill-input::placeholder { color: #8a7326; font-weight: 500; opacity: 0.85; }
.fill-input:focus {
  outline: none; border-style: solid; border-color: var(--maroon);
  background: #fffbe8; box-shadow: 0 0 0 3px rgba(88,18,23,0.12);
}
.fill-input.has-value { background: #eefbea; border-color: #4a9a4a; border-style: solid; }
.fill-input-multi {
  display: block; width: 100%; resize: vertical;
  line-height: 1.5; margin: 0.4rem 0;
}
/* On the dark hero banner (Last updated / Effective date), swap to a legible dark-bg variant */
.legal-hero .fill-input {
  background: rgba(253,246,237,0.12); color: var(--cream);
  border-color: rgba(253,246,237,0.45);
}
.legal-hero .fill-input::placeholder { color: rgba(253,246,237,0.55); }
.legal-hero .fill-input.has-value { background: rgba(226,201,160,0.22); border-color: var(--accent); }
.legal-hero .fill-input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(226,201,160,0.25); }

/* ---- "Review & Copy My Answers" export panel ---- */
.legal-export-sheet { max-width: 620px; }
.legal-export-textarea {
  width: 100%; min-height: 360px; margin-top: 1rem;
  font-family: 'Courier New', monospace; font-size: 0.85rem; line-height: 1.6;
  padding: 1rem 1.1rem; border-radius: var(--radius);
  border: 1px solid rgba(44,44,44,0.15); background: var(--cream);
  color: var(--charcoal); resize: vertical;
}
.legal-export-actions { display: flex; align-items: center; gap: 1rem; margin-top: 1rem; }
.legal-export-copied {
  display: inline-flex; align-items: center; gap: 0.35rem;
  font-size: 0.85rem; font-weight: 600; color: #2d6b3e;
  opacity: 0; transition: opacity 0.25s;
}
.legal-export-copied.show { opacity: 1; }

/* Callout note (guidance / not-applicable / lawyer flag) */
.legal-note {
  background: #fff; border-left: 4px solid var(--maroon);
  border-radius: 8px; padding: 1rem 1.25rem; margin: 1.25rem 0;
  box-shadow: 0 4px 14px rgba(0,0,0,0.04); font-size: 0.95rem;
}
.legal-note.na { border-left-color: #9a9a9a; }
.legal-note strong.legal-note-label { display: block; color: var(--maroon); margin-bottom: 0.25rem; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.06em; }

/* Table of contents — collapsible, built by partials/legal-toc-script.ejs */
.legal-toc {
  background: #fff; border: 1px solid var(--cream-mid); border-radius: 10px;
  padding: 1.25rem 1.5rem; margin-bottom: 2.5rem;
}
.legal-toc-head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 1rem; margin-bottom: 0.75rem;
}
.legal-toc h4 { margin: 0; color: var(--maroon); font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.06em; }
.legal-toc-expand {
  background: none; border: none; cursor: pointer; padding: 0;
  font-family: var(--font-body); font-size: 0.76rem; font-weight: 600;
  color: var(--maroon); opacity: 0.75;
}
@media (hover: hover) {
  .legal-toc-expand:hover { opacity: 1; text-decoration: underline; }
}

.legal-toc-list, .legal-toc-sublist { list-style: none; margin: 0; padding: 0; }
.legal-toc-item { border-bottom: 1px solid rgba(44,44,44,0.05); }
.legal-toc-item:last-child { border-bottom: none; }

.legal-toc-row { display: flex; align-items: center; gap: 0.5rem; }
.legal-toc-link, .legal-toc-sublink {
  flex: 1; display: flex; gap: 0.6rem; align-items: baseline;
  padding: 0.4rem 0; color: var(--charcoal); text-decoration: none;
  font-size: 0.88rem; line-height: 1.4;
}
@media (hover: hover) {
  .legal-toc-link:hover, .legal-toc-sublink:hover { color: var(--maroon); }
}
/* Fixed-width number column keeps every label on the same left edge */
.legal-toc-num {
  flex-shrink: 0; min-width: 2.6em;
  color: var(--maroon); font-weight: 700; font-variant-numeric: tabular-nums;
}

.legal-toc-toggle {
  flex-shrink: 0; width: 26px; height: 26px; border-radius: 6px;
  border: 1px solid rgba(88,18,23,0.15); background: var(--cream);
  color: var(--maroon); cursor: pointer; line-height: 1;
  display: flex; align-items: center; justify-content: center;
  transition: background var(--transition), border-color var(--transition);
}
@media (hover: hover) {
  .legal-toc-toggle:hover { background: var(--maroon-pale); border-color: var(--maroon); }
}
.legal-toc-chev { display: block; font-size: 1rem; transition: transform 0.2s ease; }
.legal-toc-item.open .legal-toc-chev { transform: rotate(90deg); }

.legal-toc-sublist {
  padding: 0.15rem 0 0.5rem 1.1rem;
  border-left: 2px solid var(--cream-mid); margin-left: 0.55rem;
}
.legal-toc-sublink { font-size: 0.82rem; color: rgba(44,44,44,0.72); padding: 0.28rem 0; }
.legal-toc-sublink .legal-toc-num { min-width: 3.1em; font-weight: 600; opacity: 0.85; }

/* In the sidebar the TOC is the whole column — it carries no bottom margin and
   sits tighter than the full-width card it used to be. */
.legal-toc-col .legal-toc { margin-bottom: 0; padding: 1.1rem 1.15rem; }

/* Scroll-spy: the section currently under the reader (set by legal-toc-script). */
.legal-toc-link.active, .legal-toc-sublink.active { color: var(--maroon); font-weight: 600; }
.legal-toc-item.active > .legal-toc-row { box-shadow: inset 2px 0 0 var(--maroon); }
.legal-toc-item.active > .legal-toc-row .legal-toc-link { padding-left: 0.55rem; }

@media (max-width: 1000px) {
  /* Below the breakpoint the sidebar can't earn its width — the TOC goes back
     above the text and stops being sticky, so it doesn't eat the viewport. */
  .legal-layout { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .legal-toc-col { position: static; max-height: none; overflow: visible; }
  .legal-toc-col .legal-toc { margin-bottom: 2.5rem; }
  .legal-body .container { max-width: 820px; }
}

@media (max-width: 650px) {
  .legal-toc { padding: 1rem 1.1rem; }
  .legal-toc-num { min-width: 2.3em; }
}

/* Consent / privacy-choices panel */
.consent-panel {
  background: #fff; border: 1px solid var(--cream-mid); border-radius: 12px;
  padding: 1.5rem 1.75rem; margin: 1.5rem 0;
}
.consent-row {
  display: flex; gap: 0.9rem; align-items: flex-start;
  padding: 1rem 0; border-bottom: 1px solid var(--cream-dark);
}
.consent-row:last-of-type { border-bottom: none; }
.consent-row input[type="checkbox"] { width: 20px; height: 20px; margin-top: 0.2rem; accent-color: var(--maroon); flex-shrink: 0; cursor: pointer; }
.consent-row .consent-text { flex: 1; }
.consent-row .consent-text strong { display: block; margin-bottom: 0.15rem; color: var(--charcoal); }
.consent-row .consent-text span { font-size: 0.9rem; color: var(--charcoal-lt); line-height: 1.5; }
.consent-row .consent-tag {
  font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em;
  background: var(--maroon-pale); color: var(--maroon); padding: 0.15em 0.6em;
  border-radius: 999px; font-weight: 700; margin-left: 0.5rem; white-space: nowrap;
}
.consent-tag.required { background: #e8e8e8; color: #555; }
.consent-actions { margin-top: 1.25rem; display: flex; gap: 0.75rem; align-items: center; flex-wrap: wrap; }
.consent-saved { font-size: 0.9rem; color: #2e7d32; font-weight: 600; opacity: 0; transition: opacity 0.3s; }
.consent-saved.show { opacity: 1; }

.legal-contact-block { background: #fff; border-radius: 10px; padding: 1.25rem 1.5rem; border: 1px solid var(--cream-mid); }
.legal-contact-block p { margin: 0.3rem 0; }

/* ---- Print / Save-as-PDF ---- */
@media print {
  .navbar, .footer, .legal-toolbar, .nav-toggle,
  .consent-actions, .legal-hero .section-eyebrow { display: none !important; }
  body { background: #fff !important; color: #000 !important; }
  .legal-hero { background: #fff !important; color: #000 !important; padding: 0 0 1rem; border-bottom: 3px solid var(--maroon); }
  .legal-hero .page-title, .legal-hero .legal-updated { color: #000 !important; }
  .legal-body { padding: 1rem 0; }
  .legal-body .container, .legal-hero .container { max-width: 100%; }
  /* Paper has no sticky. Print the TOC once, at the top, full width. */
  .legal-layout { display: block; }
  .legal-toc-col { position: static; max-height: none; overflow: visible; }
  .legal-section { page-break-inside: avoid; }
  .legal-section h2 { color: #000 !important; }
  .legal-toolbar-actions { display: none !important; }
  .fill-input {
    -webkit-appearance: none; appearance: none;
    background: transparent !important; color: #000 !important;
    border: none !important; border-bottom: 1px solid #000 !important;
    border-radius: 0; padding: 0 0.2em; font-weight: 600;
  }
  .fill-input::placeholder { color: #999 !important; }
  .legal-note { box-shadow: none; border: 1px solid #ccc; }
  a { color: #000 !important; text-decoration: none; }
  .consent-panel, .legal-toc, .legal-contact-block { border: 1px solid #999; }
}

/* ============================================================
   AUTH EXTRAS — Google sign-in, divider, register highlight
   ============================================================ */
.auth-card-wide { max-width: 480px; }

/* Google button — Google brand guidelines: white bg, subtle border */
.btn-google {
  display: flex; align-items: center; justify-content: center; gap: 0.65rem;
  width: 100%; padding: 0.8rem 1rem; margin: 0.25rem 0 0.75rem;
  background: #fff; color: #3c4043;
  border: 1px solid #dadce0; border-radius: 10px;
  font-family: inherit; font-size: 0.95rem; font-weight: 600;
  text-decoration: none; cursor: pointer;
  transition: background 0.15s, box-shadow 0.15s, border-color 0.15s;
}
@media (hover: hover) {
  .btn-google:hover { background: #f7f8f8; box-shadow: 0 1px 4px rgba(0,0,0,0.12); border-color: #d2d3d5; }
}
.btn-google-icon { flex-shrink: 0; }
.btn-google-note {
  font-size: 0.78rem; line-height: 1.5; color: rgba(44,44,44,0.6);
  margin: 0 0 0.5rem; text-align: left;
}
.btn-google-note a { color: var(--maroon); }

/* Consent gate above the Google button (see partials/google-auth-button) */
.google-consent {
  display: flex; align-items: flex-start; gap: 0.55rem;
  font-size: 0.78rem; line-height: 1.45; color: rgba(44,44,44,0.7);
  margin: 0 0 0.65rem; cursor: pointer; text-align: left;
  border-radius: 6px;
}
.google-consent input[type="checkbox"] {
  width: 16px; height: 16px; accent-color: var(--maroon); flex-shrink: 0;
  margin-top: 0.15rem; cursor: pointer;
}
.google-consent a { color: var(--maroon); }
@keyframes googleConsentPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(88,18,23,0.3); }
  50%      { box-shadow: 0 0 0 4px rgba(88,18,23,0); }
}
.google-consent.needs-attention { animation: googleConsentPulse 0.5s ease-out 2; }
.btn-google[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; }
@media (hover: hover) {
  .btn-google[aria-disabled="true"]:hover { background: #fff; box-shadow: none; border-color: #dadce0; }
}

/* "or" divider */
.auth-divider {
  display: flex; align-items: center; text-align: center;
  color: rgba(44,44,44,0.45); font-size: 0.8rem; margin: 1rem 0 1.25rem;
}
.auth-divider::before, .auth-divider::after {
  content: ''; flex: 1; height: 1px; background: rgba(88,18,23,0.12);
}
.auth-divider span { padding: 0 0.9rem; white-space: nowrap; }

/* 18+ disclaimer + agreement gate */
.reg-age-disclaimer {
  font-size: 0.85rem; color: rgba(44,44,44,0.7);
  text-align: left; margin: 0.25rem 0 0.75rem;
}
.reg-agree-group { margin-top: 0.25rem; }
.reg-agree-check span { font-size: 0.85rem; line-height: 1.5; }
.reg-agree-check a { color: var(--maroon); font-weight: 600; }
.btn.btn-primary:disabled { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; }

/* ============================================================
   ICONS · PASTRY CARDS · DESKTOP SIZING · SPACING (batch)
   ============================================================ */

/* Inline line-icons sit neatly on the text baseline */
.cl-icon { display: inline-block; vertical-align: -0.15em; flex-shrink: 0; }
.nav-pase .cl-icon, .event-tag .cl-icon, .event-tile-location .cl-icon,
.contact-detail-icon .cl-icon { vertical-align: -0.2em; }

/* ---- Pastry cards: photo fills the panel, thin text strip at the bottom ----
   Scoped to .pastry-item-card so the drinks "texture fill" redesign can't clip
   the image + name/price the way it was doing. */
.pastry-item-card .drink-card-inner-wrap {
  aspect-ratio: 4 / 5;
  display: flex; flex-direction: column;
  padding: 0; gap: 0; overflow: hidden;
  background: var(--white);
}
.pastry-item-card .drink-img-wrap {
  flex: 1 1 auto; min-height: 0;
  aspect-ratio: auto;
  margin: 0; border-radius: 0;
  background: linear-gradient(135deg, var(--cream-dark), var(--cream-mid));
}
.pastry-item-card .drink-img-wrap img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pastry-item-card .drink-card-top {
  flex: 0 0 auto;
  align-items: center;
  padding: 0.6rem 0.85rem;
  background: var(--white);
  border-top: 2px solid var(--charcoal);   /* the clean line where the text starts */
}
.pastry-item-card .drink-name { font-size: 0.95rem; }
.pastry-special-tag {
  position: absolute; top: 0.55rem; left: 0.55rem; z-index: 2;
  background: var(--maroon); color: var(--cream);
  font-size: 0.6rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
  padding: 0.2rem 0.55rem; border-radius: 999px;
}
.pastry-item-card .drink-img-placeholder span:first-child { color: rgba(88,18,23,0.4); }

/* ---- Section spacing nudges (heading pulled halfway up toward the section above) ---- */
.menu-preview   { padding-top: 3rem; }   /* was 6rem — "On the Menu" sits halfway closer to the hero above */
.specials-home  { padding-top: 3rem; }   /* was 6rem — "This Week's Specials" sits halfway closer to the menu-preview above */
.about-cta      { padding-top: 3rem; }   /* was 1.5rem in about.ejs's inline override below — restores the same rhythm as reviews-cta */

/* ============================================================
   ADMIN — Page Images manager
   ============================================================ */
.page-image-thumbs { display: flex; flex-wrap: wrap; gap: 0.85rem; margin-top: 1rem; }
.page-image-thumb {
  position: relative; width: 150px; border-radius: var(--radius);
  overflow: hidden; background: var(--cream-dark); flex-shrink: 0;
}
.page-image-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.page-image-thumb-actions {
  position: absolute; left: 0; right: 0; bottom: 0;
  display: flex; gap: 0.35rem; padding: 0.4rem;
  background: linear-gradient(to top, rgba(0,0,0,0.65), transparent);
}
.page-image-thumb-actions .admin-toggle-btn,
.page-image-replace-confirm .admin-toggle-btn {
  font-size: 0.72rem; padding: 0.3rem 0.55rem;
  background: rgba(255,255,255,0.92);
}
.page-image-add-preview { margin-top: 1rem; display: flex; flex-direction: column; gap: 0.6rem; align-items: flex-start; }
.page-image-add-preview-actions { display: flex; gap: 0.6rem; }

/* ============================================================
   ADMIN-MANAGED IMAGE CYCLE (home hero + about photo/cards)
   ============================================================ */
.cl-cycle { position: relative; width: 100%; height: 100%; }
.cl-cycle-img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; opacity: 0; transition: opacity 1.4s ease;
}
.cl-cycle-img.active { opacity: 1; }
@media (prefers-reduced-motion: reduce) { .cl-cycle-img { transition: none; } }

/* ============================================================
   PASE DE CAFE — the pass track (/battlepass/pass)
   Mobile-first. The strip scrolls INSIDE itself; the page never
   scrolls sideways.
   ============================================================ */
.pass-page { padding-top: calc(var(--nav-h) + 1rem); padding-bottom: 3rem; background: var(--cream-dark); min-height: 100vh; }
.pass-container { max-width: 620px; margin: 0 auto; padding: 1rem 1rem 4rem; }

.pass-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 0.75rem; margin-bottom: 1rem;
}
.pass-head-mid { text-align: center; }
.pass-eyebrow {
  font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.14em;
  color: rgba(44,44,44,0.42); font-weight: 600;
}
.pass-title { font-family: var(--font-nimbus); font-size: 1.35rem; color: var(--maroon); line-height: 1.1; }
.pass-back-link, .pass-viewall-btn {
  flex: 0 0 auto; font-size: 0.75rem; font-weight: 600;
  color: var(--maroon); background: none; border: 1px solid rgba(88,18,23,0.2);
  border-radius: 50px; padding: 0.35rem 0.8rem; cursor: pointer;
  font-family: var(--font-body); white-space: nowrap;
  transition: background var(--transition), border-color var(--transition);
}
@media (hover: hover) {
  .pass-back-link:hover, .pass-viewall-btn:hover { background: var(--maroon-pale); border-color: var(--maroon); }
}

.pass-view.hidden { display: none; }
.pass-view-title { font-family: var(--font-nimbus); font-size: 1.15rem; color: var(--maroon); margin: 1rem 0 0.25rem; }
.pass-view-sub { font-size: 0.8rem; line-height: 1.55; color: rgba(44,44,44,0.55); margin-bottom: 1rem; }
.pass-view-sub a, .pass-list-label a { color: var(--maroon); text-decoration: underline; text-underline-offset: 2px; }

/* ── Rank card ─────────────────────────────────────────────── */
.pass-rank-card {
  background: var(--black); color: var(--cream);
  border: 1px solid rgba(226,201,160,0.18); border-radius: var(--radius-lg);
  padding: 1.25rem; margin-bottom: 1.25rem;
}
.pass-rank-card.is-foreign { border-color: rgba(226,201,160,0.45); }
.pass-rank-eyebrow {
  font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.14em;
  color: var(--accent); font-weight: 600; margin-bottom: 0.3rem;
}
.pass-rank-name { font-family: var(--font-nimbus); font-size: 1.5rem; color: var(--cream); line-height: 1.15; margin-bottom: 0.85rem; }
.pass-rank-facts { display: flex; flex-direction: column; gap: 0.55rem; margin-bottom: 0.85rem; }
.pass-rank-facts dt {
  font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.12em;
  color: rgba(226,201,160,0.65); font-weight: 600; margin-bottom: 0.1rem;
}
.pass-rank-facts dd { font-size: 0.84rem; line-height: 1.5; color: rgba(253,246,237,0.82); }
.pass-rank-blurb { font-size: 0.86rem; line-height: 1.6; color: rgba(253,246,237,0.7); margin-bottom: 1rem; }
.pass-rank-next {
  font-size: 0.75rem; color: rgba(253,246,237,0.5);
  margin-top: 0.9rem; padding-top: 0.75rem;
  border-top: 1px solid rgba(226,201,160,0.14);
}
.pass-rank-next strong { color: var(--accent); }

/* Minimalist by request — a hairline pill, no artwork. */
.pass-learn-more {
  display: inline-flex; align-items: center; gap: 0.35rem;
  font-size: 0.75rem; font-weight: 600; letter-spacing: 0.02em;
  color: var(--accent); border: 1px solid rgba(226,201,160,0.4);
  border-radius: 50px; padding: 0.35rem 0.85rem;
  transition: background var(--transition), border-color var(--transition);
}
@media (hover: hover) {
  .pass-learn-more:hover { background: rgba(226,201,160,0.12); border-color: var(--accent); }
}

.pass-rank-back {
  display: inline-block; margin-bottom: 0.85rem;
  background: none; border: none; cursor: pointer; padding: 0;
  font-family: var(--font-body); font-size: 0.75rem; font-weight: 600;
  color: var(--maroon);
}
.pass-rank-card .pass-rank-back { color: var(--accent); }
@media (hover: hover) {
  .pass-rank-back:hover { text-decoration: underline; }
}
.pass-rank-back.hidden { display: none; }

/* ── The strip ─────────────────────────────────────────────── */
.pass-strip-wrap { position: relative; display: flex; align-items: center; gap: 0.35rem; }
.pass-arrow {
  flex: 0 0 auto; width: 30px; height: 30px; border-radius: 50%;
  border: 1px solid rgba(88,18,23,0.2); background: var(--cream);
  color: var(--maroon); font-size: 1.1rem; line-height: 1; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background var(--transition), opacity var(--transition);
}
@media (hover: hover) {
  .pass-arrow:hover:not(:disabled) { background: var(--maroon-pale); }
}
.pass-arrow:disabled { opacity: 0.25; cursor: default; }

.pass-strip {
  position: relative; flex: 1 1 auto; min-width: 0;
  display: flex; align-items: flex-end; gap: 0;
  /* The only horizontal scroll on the page, and it is contained here. */
  overflow-x: auto; overflow-y: visible;
  scroll-snap-type: x proximity;
  /* A real, visible scrollbar. It was hidden, which left dragging the track as
     an invisible affordance — the arrows were the only discoverable way to
     move. This is the ONLY horizontally scrolling box on the page. */
  scrollbar-width: thin;
  scrollbar-color: rgba(88,18,23,0.35) transparent;
  /* Top room for the rank-up panel and merch flag, which now sit fully ABOVE
     the node rather than on top of it; bottom room for the drink number plus
     the scrollbar. */
  padding: 92px 0 10px;
  background: var(--cream); border: 1px solid var(--cream-mid);
  border-radius: var(--radius);
}
.pass-strip::-webkit-scrollbar { height: 8px; }
.pass-strip::-webkit-scrollbar-track { background: transparent; }
.pass-strip::-webkit-scrollbar-thumb {
  background: rgba(88,18,23,0.28); border-radius: 4px;
}
@media (hover: hover) {
  .pass-strip::-webkit-scrollbar-thumb:hover { background: rgba(88,18,23,0.5); }
}
.pass-strip:focus-visible { outline: 2px solid var(--maroon); outline-offset: 2px; }

/* The baseline every tick stands on. It is absolutely positioned inside a
   scroll container, so `width: 100%` would resolve to the VISIBLE width and
   scroll away with the frame — the script sets its pixel width to the strip's
   full scrollWidth instead. */
.pass-rail {
  position: absolute; left: 0; bottom: 32px; height: 2px; width: 100%;
  background: repeating-linear-gradient(to right, rgba(44,44,44,0.14) 0 6px, transparent 6px 10px);
  pointer-events: none;
}

/* Node widths are all multiples of --pass-unit, which the page sets at runtime
   so that three progressions fill the frame at any viewport width. The literal
   fallback keeps the track sane if the script never runs. */
.pass-node {
  position: relative; flex: 0 0 auto;
  display: flex; flex-direction: column; align-items: center; justify-content: flex-end;
  width: var(--pass-unit, 22px);
}
.pass-node[data-progression] { scroll-snap-align: center; }
.pass-node.size-md { width: calc(var(--pass-unit, 22px) * 2.8); }
.pass-node.size-lg { width: calc(var(--pass-unit, 22px) * 3.5); }

/* The vertical bar itself. Length IS the reward: long free beverage,
   medium discount, short plain drink. */
.pass-mark { display: flex; flex-direction: column; align-items: center; gap: 0.3rem; }
.pass-bar { display: block; width: 2px; border-radius: 2px; background: rgba(44,44,44,0.2); }
.size-sm .pass-bar { height: 14px; }
.size-md .pass-bar { height: 34px; width: 3px; }
.size-lg .pass-bar { height: 58px; width: 4px; }

.pass-mark-icon {
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%; background: var(--cream-dark);
  border: 1px solid rgba(44,44,44,0.12); color: var(--charcoal);
}
.size-md .pass-mark-icon { width: 34px; height: 34px; font-size: 0.68rem; font-weight: 700; }
.size-lg .pass-mark-icon { width: 42px; height: 42px; font-size: 1.15rem; }

.pass-node-n { font-size: 0.58rem; color: rgba(44,44,44,0.32); margin-top: 0.35rem; font-variant-numeric: tabular-nums; }
.size-sm .pass-node-n { visibility: hidden; }        /* keeps every baseline aligned */
.pass-node.size-sm.state-current .pass-node-n { visibility: visible; }

/* Earned / current / locked */
.state-earned .pass-bar { background: var(--maroon); }
.state-earned .pass-mark-icon { background: var(--maroon); border-color: var(--maroon); color: var(--cream); }
.state-earned .pass-node-n { color: rgba(88,18,23,0.55); }
.state-locked .pass-bar { background: rgba(44,44,44,0.18); }
.state-locked .pass-mark-icon { opacity: 0.55; }

/* The live indicator. */
.pass-node.state-current .pass-bar { background: var(--accent); box-shadow: 0 0 0 3px rgba(226,201,160,0.35); }
.pass-you {
  position: absolute; bottom: -2px; left: 50%; transform: translateX(-50%);
  background: var(--maroon); color: var(--cream);
  font-size: 0.55rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
  padding: 0.1rem 0.35rem; border-radius: 50px; white-space: nowrap; z-index: 3;
}
.pass-you::before {
  content: ""; position: absolute; top: -5px; left: 50%; transform: translateX(-50%);
  border: 4px solid transparent; border-bottom-color: var(--maroon);
}

/* Rank-up panel. `bottom: calc(100% + …)` puts it clear ABOVE the node box —
   the earlier `calc(100% - 52px)` measured DOWN from the node's top edge, which
   sat the panel on top of the free-beverage bubble instead of over it. */
.pass-rankup {
  position: absolute; bottom: calc(100% + 12px); left: 50%; transform: translateX(-50%);
  display: flex; flex-direction: column; align-items: center; gap: 0.05rem;
  background: var(--black); color: var(--cream);
  border: 1px solid rgba(226,201,160,0.35); border-radius: 8px;
  padding: 0.3rem 0.5rem; cursor: pointer; font-family: var(--font-body);
  white-space: nowrap; z-index: 2;
  transition: border-color var(--transition), transform var(--transition);
}
@media (hover: hover) {
  .pass-rankup:hover { border-color: var(--accent); transform: translateX(-50%) translateY(-2px); }
}
.pass-rankup::after {
  content: ""; position: absolute; top: 100%; left: 50%; transform: translateX(-50%);
  border: 5px solid transparent; border-top-color: rgba(226,201,160,0.35);
}
.pass-rankup-lbl { font-size: 0.5rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--accent); font-weight: 700; }
.pass-rankup-name { font-size: 0.66rem; font-weight: 600; }
.state-locked .pass-rankup { opacity: 0.7; }

/* Merch stays an emoji (Iwan asked for that one), just given its own air
   above the bubble instead of being laid over it. No merch drink number is
   also a rank boundary today — merch lands on 55/85/105/135/155, boundaries on
   multiples of 10 — but if that ever changes the flag stacks above the panel
   rather than colliding with it. */
.pass-merch-flag {
  position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%);
  font-size: 0.9rem; line-height: 1; z-index: 1;
}
.has-rankup .pass-merch-flag { bottom: calc(100% + 62px); }

.pass-legend {
  display: flex; flex-wrap: wrap; gap: 0.75rem 1.1rem;
  margin-top: 0.85rem; font-size: 0.66rem; color: rgba(44,44,44,0.45);
}
.pass-legend-item { display: inline-flex; align-items: center; gap: 0.35rem; }
.pass-legend-bar { display: inline-block; width: 2px; background: var(--maroon); border-radius: 2px; }
.pass-legend-bar.sm { height: 8px; }
.pass-legend-bar.md { height: 13px; width: 3px; }
.pass-legend-bar.lg { height: 18px; width: 4px; }

.pass-jump-live {
  display: block; margin: 0.75rem auto 0;
  background: var(--maroon); color: var(--cream); border: none;
  border-radius: 50px; padding: 0.4rem 1rem; cursor: pointer;
  font-family: var(--font-body); font-size: 0.72rem; font-weight: 600;
}
.pass-jump-live[hidden] { display: none; }

/* ── View all — categories ─────────────────────────────────── */
.pass-cat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }
.pass-cat {
  display: flex; flex-direction: column; align-items: flex-start; gap: 0.2rem;
  background: var(--cream); border: 1px solid var(--cream-mid);
  border-radius: var(--radius); padding: 1rem; cursor: pointer;
  font-family: var(--font-body); text-align: left;
  transition: border-color var(--transition), transform var(--transition);
}
@media (hover: hover) {
  .pass-cat:hover { border-color: var(--maroon); transform: translateY(-2px); }
}
.pass-cat-icon { font-size: 1.3rem; margin-bottom: 0.15rem; }
.pass-cat-name { font-family: var(--font-nimbus); font-size: 1rem; color: var(--maroon); }
.pass-cat-sub { font-size: 0.68rem; color: rgba(44,44,44,0.45); }

/* ── Category lists (discounts, free coffees) ──────────────── */
.pass-list { display: flex; flex-direction: column; gap: 0.5rem; }
.pass-list-row {
  display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 0.75rem;
  background: var(--cream); border: 1px solid var(--cream-mid);
  border-radius: var(--radius); padding: 0.8rem 0.95rem;
}
.pass-list-row.state-locked { opacity: 0.62; }
.pass-list-value {
  font-family: var(--font-nimbus); font-size: 1.25rem; color: var(--maroon);
  min-width: 2.4em; text-align: center;
}
.pass-list-label { font-size: 0.82rem; line-height: 1.45; color: var(--charcoal); }
.pass-list-meta { font-size: 0.66rem; color: rgba(44,44,44,0.4); white-space: nowrap; }
.pass-list-here {
  display: flex; align-items: center; gap: 0.6rem;
  font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.1em;
  font-weight: 700; color: var(--maroon); margin: 0.15rem 0;
}
.pass-list-here::before, .pass-list-here::after {
  content: ""; flex: 1; height: 1px; background: rgba(88,18,23,0.22);
}

/* ── Merch ─────────────────────────────────────────────────── */
.pass-merch-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }
.pass-merch-card {
  background: var(--cream); border: 1px solid var(--cream-mid);
  border-radius: var(--radius); padding: 0.75rem; text-align: center;
}
.pass-merch-card.state-locked { opacity: 0.62; }
/* Image frame. The photo is a background-image set inline per card, so a file
   that doesn't exist yet simply doesn't paint and the placeholder glyph below
   shows through — no broken-image icon, no code change when the photos land. */
.pass-merch-img {
  position: relative; aspect-ratio: 1 / 1; margin-bottom: 0.6rem;
  border-radius: 8px; background-color: var(--cream-dark);
  background-size: cover; background-position: center; background-repeat: no-repeat;
  display: flex; align-items: center; justify-content: center; overflow: hidden;
}
.pass-merch-placeholder { font-size: 1.6rem; opacity: 0.35; }
.pass-merch-name { font-size: 0.78rem; font-weight: 600; color: var(--charcoal); line-height: 1.35; }
.pass-merch-meta { font-size: 0.64rem; color: rgba(44,44,44,0.42); margin-top: 0.2rem; }

/* ── Ranks list ────────────────────────────────────────────── */
.pass-rank-list { display: flex; flex-direction: column; gap: 0.4rem; }
.pass-rank-row {
  /* Two columns since the rank emoji came out — name/range, then state. */
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 0.75rem;
  width: 100%; text-align: left; cursor: pointer;
  background: var(--cream); border: 1px solid var(--cream-mid);
  border-radius: var(--radius); padding: 0.7rem 0.9rem;
  font-family: var(--font-body);
  transition: border-color var(--transition), background var(--transition);
}
@media (hover: hover) {
  .pass-rank-row:hover { border-color: var(--maroon); }
}
.pass-rank-row.state-locked { opacity: 0.6; }
.pass-rank-row.state-current { border-color: var(--maroon); background: var(--maroon-pale); }
.pass-rank-row-body { display: flex; flex-direction: column; }
.pass-rank-row-name { font-size: 0.88rem; font-weight: 600; color: var(--charcoal); }
.pass-rank-row-range { font-size: 0.66rem; color: rgba(44,44,44,0.42); }
.pass-rank-row-state { font-size: 0.64rem; font-weight: 600; color: var(--maroon); white-space: nowrap; }

@media (min-width: 720px) {
  .pass-container { max-width: 760px; }
  .pass-cat-grid, .pass-merch-grid { grid-template-columns: repeat(3, 1fr); }
}

/* The rank chip is now the doorway to the pass (/battlepass/pass). */
.bp-tier-chip-link { text-decoration: none; transition: background var(--transition), border-color var(--transition); }
@media (hover: hover) {
  .bp-tier-chip-link:hover { background: rgba(226,201,160,0.2); border-color: var(--accent); }
}
.bp-tier-chip-go { opacity: 0.6; font-weight: 700; }

/* ── Battlepass icon alignment ─────────────────────────────────────────────
   The battlepass used to draw its reward glyphs as emoji sized with font-size.
   They are inline SVGs now (partials/icon.ejs), which ignore font-size — so
   the containers that used to size a glyph have to centre a box instead. */
.bp-next-icon, .bp-ms-icon, .bp-claim-icon, .bp-voucher-icon, .bp-rule-icon {
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--maroon);
}
.bp-section-label .cl-icon { vertical-align: -0.2em; margin-right: 0.15rem; }
.life-dot .cl-icon { color: var(--maroon); }
.life-free .cl-icon { color: var(--cream); }
.bp-channel-icon .cl-icon { display: block; }

/* Pass page: same story — the bubble now holds an SVG, not a glyph. */
.pass-mark-icon .cl-icon { display: block; }
.pass-cat-icon { display: inline-flex; color: var(--maroon); }
.pass-list-value .cl-icon { display: inline-block; vertical-align: -0.25em; }
