@font-face {
  font-family: 'Anton';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/Anton.woff2') format('woff2');
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('../fonts/Manrope.woff2') format('woff2');
}
@font-face {
  font-family: 'Permanent Marker';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/PermanentMarker.woff2') format('woff2');
}

:root {
  --cream: #F4ECDB;
  --cream-warm: #EFE3CB;
  --ink: #1A1410;
  --ink-soft: #2A2018;
  --paper: #FAF5EA;
  --yellow: #FFC43D;
  --yellow-dim: #E6A91E;
  --red: #E63946;
  /* Deep graffiti red — used ONLY as a large background behind small text
     (the events section). #E63946 tops out at 4.17:1 even against pure white,
     so it can never carry body copy at WCAG AA; --red stays the accent token
     for stickers/badges/rules on cream + ink, where it passes fine. */
  --red-deep: #A81E2C;
  --pink: #E5489D;
  --cyan: #4DD0E1;
  --green: #5BA663;
  --grey: #6B6358;
  --display: 'Anton', 'Arial Narrow', sans-serif;
  /* No Comic Sans in the fallback stack — killing that look is the whole point
     of the refresh. If PermanentMarker.woff2 fails, fall back to the display
     face rather than anything handwritten-jokey. */
  --marker: 'Permanent Marker', 'Anton', 'Arial Narrow', sans-serif;
  --body: 'Manrope', system-ui, sans-serif;
  --max: 1240px;
  /* PNG is the declared default so browsers without image-set() still get a
     logo; the @supports block below upgrades to the lossless WebP (half the
     bytes, identical pixels). Never replace this with a bare url(.webp) — a
     CSS background has no <picture>-style fallback. */
  --logo-bg: url("../img/logo.png");
  --logo-ratio: 1210 / 803;
}

/* Upgrade the logo to lossless WebP where image-set() is understood. */
@supports (background-image: image-set(url("../img/logo.webp") type("image/webp"))) {
  :root {
    --logo-bg: image-set(
      url("../img/logo.webp") type("image/webp"),
      url("../img/logo.png")  type("image/png")
    );
  }
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  overflow-x: clip;            /* hard-stop horizontal wobble on iOS */
  /* Block sideways drift but KEEP pinch-zoom — dropping `pinch-zoom` here
     re-breaks WCAG 2.1 SC 1.4.4 even with a clean viewport meta tag. */
  touch-action: pan-y pinch-zoom;
  overscroll-behavior: none;   /* kill iOS rubber-band + pull-to-refresh judder */
}

body {
  font-family: var(--body);
  /* iOS 26+ Safari ignores theme-color and samples the body bg for the URL
     bar tint, so we keep the body dark and let individual sections paint
     their own cream/yellow/red backgrounds on top. */
  background: var(--ink);
  color: var(--ink);
  line-height: 1.5;
  font-weight: 500;
  overflow-x: clip;            /* `clip` (not `hidden`) so sticky header still works */
  touch-action: pan-y;
  overscroll-behavior: none;
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }

/* announcement bar */
.bar {
  background: var(--ink);
  color: var(--paper);
  font-family: var(--display);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-align: center;
  padding: 0.55rem 1rem;
  text-transform: uppercase;
  z-index: 50;
}
.bar .dot { color: var(--yellow); margin: 0 0.5rem; }

/* header */
header {
  position: sticky;
  top: 0;
  background: var(--ink);
  z-index: 40;
  border-bottom: 2px solid var(--yellow);
  box-shadow: 0 2px 0 var(--ink);
}
.nav-wrap {
  max-width: var(--max);
  margin: 0 auto;
  padding: 0.5rem 1.2rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}
.logo-img {
  height: 110px;
  aspect-ratio: var(--logo-ratio);
  background-image: var(--logo-bg);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: left center;
  display: block;
}

nav ul {
  list-style: none;
  display: flex;
  gap: 1.8rem;
  font-family: var(--display);
  font-size: 0.95rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
nav a {
  position: relative;
  padding: 0.3rem 0;
  transition: color 0.2s;
  color: var(--paper);
}
nav a:hover { color: var(--yellow); }
nav a:hover::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: -2px;
  height: 3px;
  background: var(--yellow);
  transform: skewX(-12deg);
}
.nav-cta {
  background: var(--red);
  color: var(--paper) !important;
  padding: 0.55rem 1rem !important;
  font-family: var(--display);
  letter-spacing: 0.1em;
  border: 2px solid var(--paper);
  box-shadow: 3px 3px 0 var(--yellow);
  transition: transform 0.15s, box-shadow 0.15s;
}
.nav-cta:hover {
  transform: translate(-2px, -2px);
  box-shadow: 5px 5px 0 var(--yellow);
  color: var(--paper) !important;
}
.nav-cta:hover::after { display: none; }
.burger {
  display: none;
  width: 44px; height: 44px;
  background: none;
  border: 2px solid var(--paper);
  cursor: pointer;
  position: relative;
}
.burger span {
  position: absolute;
  left: 8px; right: 8px;
  height: 2px;
  background: var(--paper);
  transition: 0.25s;
}
.burger span:nth-child(1) { top: 12px; }
.burger span:nth-child(2) { top: 20px; }
.burger span:nth-child(3) { top: 28px; }
.burger.open span:nth-child(1) { top: 20px; transform: rotate(45deg); }
.burger.open span:nth-child(2) { opacity: 0; }
.burger.open span:nth-child(3) { top: 20px; transform: rotate(-45deg); }

/* HERO - v1 typography style */
.hero {
  background: var(--ink);
  color: var(--paper);
  position: relative;
  overflow: hidden;
  padding: 4.5rem 1.2rem 5rem;
}
.hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.95 0 0 0 0 0.92 0 0 0 0 0.85 0 0 0 0.4 0'/></filter><rect width='200' height='200' filter='url(%23n)' opacity='0.18'/></svg>");
  pointer-events: none;
  mix-blend-mode: overlay;
}
.hero-inner {
  max-width: var(--max);
  margin: 0 auto;
  position: relative;
  z-index: 2;
}
.hero-tag {
  font-family: var(--display);
  font-size: 0.8rem;
  letter-spacing: 0.25em;
  color: var(--yellow);
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: 1.8rem;
}
.hero-tag::before {
  content: '';
  width: 30px; height: 2px;
  background: var(--yellow);
}
.hero h1 {
  font-family: var(--display);
  font-size: clamp(3.2rem, 12vw, 8rem);
  line-height: 0.88;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  margin-bottom: 1.5rem;
  font-weight: 400;
}
.hero h1 .marker {
  font-family: var(--marker);
  color: var(--yellow);
  font-size: 0.78em;
  letter-spacing: 0;
  text-transform: lowercase;
  font-weight: 400;
  display: inline-block;
  transform: rotate(-3deg);
  position: relative;
  padding: 0 0.15em;
}
.hero h1 .marker::before {
  content: '';
  position: absolute;
  inset: -8% -2% -10% -2%;
  background: radial-gradient(ellipse, rgba(255,196,61,0.15), transparent 70%);
  z-index: -1;
}
.hero p.lead {
  font-size: clamp(1.05rem, 1.4vw, 1.25rem);
  max-width: 560px;
  margin-bottom: 2.4rem;
  color: rgba(250,245,234,0.85);
  font-weight: 500;
}
.hero p.lead strong { color: var(--paper); font-weight: 800; }

.hero-ctas {
  display: flex;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 3rem;
}
.cta {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  font-family: var(--display);
  font-size: 1rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 0.95rem 1.6rem;
  border: 2px solid var(--paper);
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.15s;
}
.cta.primary {
  background: var(--yellow);
  color: var(--ink);
  border-color: var(--ink);
  box-shadow: 4px 4px 0 var(--paper);
}
.cta.primary:hover {
  transform: translate(-2px, -2px);
  box-shadow: 6px 6px 0 var(--paper);
}
.cta.secondary {
  background: transparent;
  color: var(--paper);
  box-shadow: 4px 4px 0 var(--yellow);
}
.cta.secondary:hover {
  background: var(--paper);
  color: var(--ink);
  transform: translate(-2px, -2px);
  box-shadow: 6px 6px 0 var(--yellow);
}
.cta .arrow { transition: transform 0.2s; }
.cta:hover .arrow { transform: translateX(4px); }

.loc-chips {
  display: flex;
  gap: 1.4rem;
  flex-wrap: wrap;
  padding-top: 2rem;
  border-top: 1px solid rgba(250,245,234,0.15);
}
.loc-chip {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}
.loc-chip .status-dot {
  width: 10px; height: 10px;
  border-radius: 50%;
  background: var(--green);
  box-shadow: 0 0 0 4px rgba(91,166,99,0.2);
  animation: pulse 2s infinite;
}
.loc-chip.closed .status-dot {
  background: var(--grey);
  box-shadow: 0 0 0 4px rgba(107,99,88,0.2);
  animation: none;
}
@keyframes pulse {
  0%,100% { box-shadow: 0 0 0 4px rgba(91,166,99,0.2); }
  50% { box-shadow: 0 0 0 8px rgba(91,166,99,0.05); }
}

/* tape strip */
.tape-strip {
  background: var(--yellow);
  color: var(--ink);
  font-family: var(--display);
  font-size: 1.1rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  padding: 1.2rem 0;
  overflow: hidden;
  white-space: nowrap;
  border-top: 2px solid var(--ink);
  border-bottom: 2px solid var(--ink);
}
.tape-track {
  display: inline-flex;
  gap: 2.5rem;
  animation: scroll 40s linear infinite;
  padding-left: 2.5rem;
}
.tape-track span { display: inline-block; }
.tape-track .star { color: var(--red); font-family: var(--body); font-weight: 800; }
@keyframes scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* section base */
section.block {
  padding: 5rem 1.2rem;
  background: var(--cream);
  background-image: radial-gradient(circle at 1px 1px, rgba(26,20,16,0.04) 1px, transparent 0);
  background-size: 18px 18px;
  /* CSS-only "centered max-width" — keeps full-bleed bg without an inner wrapper */
  display: grid;
  grid-template-columns: minmax(0, var(--max));
  justify-content: center;
}
.eyebrow {
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 1rem;
  display: inline-flex;
  align-items: center;
  gap: 0.7rem;
}
.eyebrow::before {
  content: '';
  width: 24px; height: 2px;
  background: var(--red);
}
h2.section-h {
  font-family: var(--display);
  font-size: clamp(2.5rem, 6vw, 4.5rem);
  line-height: 0.92;
  text-transform: uppercase;
  letter-spacing: -0.005em;
  font-weight: 400;
  margin-bottom: 1.2rem;
  max-width: 14ch;
}
h2.section-h .marker {
  font-family: var(--marker);
  color: var(--red);
  font-size: 0.7em;
  text-transform: lowercase;
  display: inline-block;
  transform: rotate(-2deg);
}
.section-sub {
  font-size: 1.08rem;
  color: var(--ink-soft);
  max-width: 560px;
  margin-bottom: 2.5rem;
}

/* locations */
.locations { padding-top: 6rem; }
.loc-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.4rem;
  margin-top: 1rem;
}
.loc-card {
  background: var(--paper);
  border: 2px solid var(--ink);
  padding: 2rem 1.6rem;
  position: relative;
  box-shadow: 6px 6px 0 var(--ink);
  transition: transform 0.18s, box-shadow 0.18s;
}
.loc-card:hover {
  transform: translate(-3px, -3px);
  box-shadow: 9px 9px 0 var(--ink);
}
.loc-card.featured { background: var(--yellow); }
.loc-card .shopshot {
  display: block;
  width: calc(100% + 3.2rem);
  max-width: none;            /* override global img{max-width:100%} so it can bleed past the padding */
  margin: -2rem -1.6rem 1.4rem;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  object-position: center;
  border-bottom: 2px solid var(--ink);
}
.loc-card .ribbon {
  position: absolute;
  top: -14px;
  right: 16px;
  background: var(--red);
  color: var(--paper);
  font-family: var(--display);
  font-size: 0.75rem;
  letter-spacing: 0.15em;
  padding: 0.35rem 0.7rem;
  border: 2px solid var(--ink);
  text-transform: uppercase;
  transform: rotate(3deg);
}
.loc-card h3 {
  font-family: var(--display);
  font-size: 2rem;
  text-transform: uppercase;
  line-height: 1;
  margin-bottom: 0.4rem;
  letter-spacing: 0.01em;
  font-weight: 400;
}
.loc-card .city {
  font-family: var(--marker);
  color: var(--red);
  font-size: 1.1rem;
  margin-bottom: 1.3rem;
  display: inline-block;
  transform: rotate(-2deg);
}
.loc-card.featured .city { color: var(--ink); }
.loc-card .addr {
  font-size: 0.95rem;
  margin-bottom: 1.2rem;
  color: var(--ink-soft);
  font-weight: 600;
}
.loc-card .hours {
  font-size: 0.9rem;
  color: var(--ink-soft);
  border-top: 2px dashed rgba(26,20,16,0.2);
  padding-top: 1rem;
  margin-bottom: 1.4rem;
}
.loc-card .hours-row {
  display: flex;
  justify-content: space-between;
  padding: 0.18rem 0;
  font-weight: 600;
}
.loc-card .status-line {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-bottom: 1rem;
}
.loc-card .status-line .status-dot {
  width: 9px; height: 9px;
  border-radius: 50%;
  background: var(--green);
}
.loc-card.closed-now .status-dot { background: var(--grey); }
.loc-card .map-link {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-bottom: 2px solid var(--ink);
  padding-bottom: 2px;
  transition: gap 0.2s;
}
.loc-card .map-link:hover { gap: 0.7rem; }

/* Aungier-St-only Deliveroo badge + actions row */
.loc-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.7rem 1rem;
  margin-top: 0.2rem;
}
.deliveroo-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  background: #00CCBC;            /* Deliveroo teal */
  color: var(--ink);
  font-family: var(--display);
  font-size: 0.78rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 0.45rem 0.8rem 0.45rem 0.55rem;
  border: 2px solid var(--ink);
  box-shadow: 3px 3px 0 var(--ink);
  transition: transform 0.15s, box-shadow 0.15s;
}
.deliveroo-badge:hover {
  transform: translate(-2px, -2px);
  box-shadow: 5px 5px 0 var(--ink);
}
.deliveroo-logo {
  width: 18px;
  height: 18px;
  color: var(--ink);
  flex-shrink: 0;
}

/* "Coming Soon" state for the Online Store more-card */
.more-card { position: relative; }
.more-card .ribbon-soon {
  position: absolute;
  top: -14px;
  right: 16px;
  background: var(--yellow);
  color: var(--ink);
  font-family: var(--display);
  font-size: 0.75rem;
  letter-spacing: 0.15em;
  padding: 0.35rem 0.7rem;
  border: 2px solid var(--ink);
  text-transform: uppercase;
  transform: rotate(-3deg);
  box-shadow: 3px 3px 0 var(--ink);
}
.more-card.soon { opacity: 0.92; }
.more-card .more-link-inert {
  font-family: var(--marker);
  color: var(--grey);
  font-size: 1rem;
  letter-spacing: 0;
  text-transform: none;
  border-bottom: none;
  padding-bottom: 0;
  cursor: default;
  align-self: flex-start;
  transform: rotate(-1deg);
}

/* events POP */
.events {
  background: var(--red-deep);   /* AA: paper 6.7:1, yellow eyebrow 4.6:1 */
  color: var(--paper);
  position: relative;
  overflow: hidden;
  padding: 5.5rem 1.2rem;
  margin-top: 3rem;
  border-top: 3px solid var(--ink);
  border-bottom: 3px solid var(--ink);
}
.events::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>");
  opacity: 0.25;
  pointer-events: none;
}
.events-inner {
  max-width: var(--max);
  margin: 0 auto;
  position: relative;
  z-index: 2;
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 3rem;
  align-items: center;
}
.events .eyebrow { color: var(--yellow); }
.events .eyebrow::before { background: var(--yellow); }
.events h2 {
  font-family: var(--display);
  font-size: clamp(2.6rem, 7vw, 5.5rem);
  line-height: 0.9;
  text-transform: uppercase;
  font-weight: 400;
  margin-bottom: 1.5rem;
  color: var(--paper);
}
.events h2 .scrawl {
  font-family: var(--marker);
  color: var(--yellow);
  font-size: 0.78em;
  text-transform: lowercase;
  display: inline-block;
  transform: rotate(-3deg);
  margin: 0 0.15em;
}
.events p.events-lead {
  font-size: 1.15rem;
  margin-bottom: 2rem;
  color: var(--paper);           /* was rgba(…,0.92) — the fade cost contrast for no visual gain */
  max-width: 480px;
}
.events-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin-bottom: 2rem;
}
.events-tag {
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  padding: 0.5rem 0.95rem;
  border: 2px solid var(--paper);
  background: rgba(250,245,234,0.05);
}
.events-cta {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  background: var(--yellow);
  color: var(--ink);
  font-family: var(--display);
  font-size: 1.2rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 1.1rem 1.8rem;
  border: 3px solid var(--ink);
  box-shadow: 6px 6px 0 var(--ink);
  transition: transform 0.15s, box-shadow 0.15s;
  cursor: pointer;
}
.events-cta:hover {
  transform: translate(-3px, -3px);
  box-shadow: 9px 9px 0 var(--ink);
}
.events-cta[aria-expanded="true"] .cta-arrow { transform: rotate(90deg); }
.events-cta .cta-arrow { transition: transform 0.2s; display: inline-block; }
.events-visual {
  position: relative;
  aspect-ratio: 1 / 1;          /* matches the source image — no letterboxing */
  background: var(--ink);
  border: 3px solid var(--ink);
  box-shadow: 10px 10px 0 var(--yellow);
  overflow: visible;
  contain: paint;              /* clip the protruding sticker without breaking layout */
}
.events-visual img {
  width: 100%; height: 100%;
  object-fit: contain;          /* show the full image — no left/right cropping */
  filter: contrast(1.05) saturate(0.95);
}
.events-visual .sticker {
  position: absolute;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--marker);
  font-size: 1.1rem;
  padding: 0.7rem 1rem;
  border: 2px solid var(--ink);
  transform: rotate(-6deg);
  box-shadow: 4px 4px 0 var(--ink);
  top: 20px;
  right: -10px;
  z-index: 3;
}

/* expandable event-booking form */
.event-panel {
  max-width: var(--max);
  margin: 2.5rem auto 0;
  padding: 0 1.25rem;
}
.event-panel[hidden] { display: none; }
.event-panel-inner {
  background: var(--paper);
  color: var(--ink);
  border: 3px solid var(--ink);
  box-shadow: 10px 10px 0 var(--yellow);
  padding: 2rem 1.5rem 2.2rem;
  position: relative;
}
.event-panel-inner::before {
  content: '';
  position: absolute;
  top: -14px;
  left: 30px;
  width: 0; height: 0;
  border-left: 14px solid transparent;
  border-right: 14px solid transparent;
  border-bottom: 14px solid var(--ink);
}
.event-panel-inner::after {
  content: '';
  position: absolute;
  top: -10px;
  left: 33px;
  width: 0; height: 0;
  border-left: 11px solid transparent;
  border-right: 11px solid transparent;
  border-bottom: 11px solid var(--paper);
}
.event-panel-head {
  margin-bottom: 1.5rem;
}
.event-panel-tag {
  display: inline-block;
  background: var(--ink);
  color: var(--yellow);
  font-family: var(--display);
  font-size: 0.9rem;
  letter-spacing: 0.12em;
  padding: 0.3rem 0.7rem;
  margin-bottom: 0.8rem;
}
.event-panel-head h3 {
  font-family: var(--display);
  font-size: clamp(1.6rem, 4vw, 2.2rem);
  letter-spacing: 0.02em;
  line-height: 1;
  margin-bottom: 0.5rem;
}
.event-panel-head p {
  font-size: 0.95rem;
  color: var(--ink-soft);
  max-width: 50ch;
}

.event-form { display: flex; flex-direction: column; gap: 1rem; }
.ef-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
}
.ef-field { display: flex; flex-direction: column; gap: 0.35rem; }
.ef-field-full { width: 100%; }
.ef-label {
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.event-form input,
.event-form textarea {
  font: inherit;
  font-weight: 600;
  color: var(--ink);
  background: var(--cream);
  border: 2px solid var(--ink);
  padding: 0.7rem 0.85rem;
  width: 100%;
  border-radius: 0;
  appearance: none;
  -webkit-appearance: none;
}
.event-form textarea {
  resize: vertical;
  min-height: 100px;
  line-height: 1.5;
}
.event-form input:focus,
.event-form textarea:focus {
  outline: 3px solid var(--yellow);
  outline-offset: 2px;
}
.event-form input:invalid:not(:placeholder-shown) {
  border-color: var(--red);
}

/* custom dropdown */
.ef-select {
  position: relative;
}
.ef-select-trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.8rem;
  width: 100%;
  font: inherit;
  font-weight: 600;
  color: var(--ink);
  background: var(--cream);
  border: 2px solid var(--ink);
  padding: 0.7rem 0.85rem;
  text-align: left;
  cursor: pointer;
  transition: box-shadow 0.15s, transform 0.15s;
}
.ef-select-trigger:hover {
  box-shadow: 3px 3px 0 var(--ink);
  transform: translate(-1px, -1px);
}
.ef-select-trigger:focus,
.ef-select[data-open="true"] .ef-select-trigger {
  outline: 3px solid var(--yellow);
  outline-offset: 2px;
}
.ef-select-text {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--ink-soft);
  opacity: 0.6;
}
.ef-select-text.selected {
  color: var(--ink);
  opacity: 1;
}
.ef-select-caret {
  width: 0; height: 0;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-top: 8px solid var(--ink);
  transition: transform 0.2s;
  flex-shrink: 0;
}
.ef-select[data-open="true"] .ef-select-caret {
  transform: rotate(180deg);
}
.ef-select-menu {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  right: 0;
  z-index: 50;
  background: var(--paper);
  border: 3px solid var(--ink);
  box-shadow: 6px 6px 0 var(--yellow);
  padding: 0.4rem;
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  animation: efPopIn 0.16s ease-out;
}
.ef-select-menu[hidden] { display: none; }
@keyframes efPopIn {
  from { opacity: 0; transform: translateY(-6px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
.ef-select-opt {
  font: inherit;
  font-weight: 600;
  color: var(--ink);
  background: transparent;
  border: 2px solid transparent;
  padding: 0.6rem 0.9rem;
  text-align: left;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 0.7rem;
  transition: background 0.1s, color 0.1s, transform 0.1s, border-color 0.1s;
}
.ef-opt-icon {
  font-family: var(--display);
  color: var(--red);
  font-size: 1.1rem;
  opacity: 0;
  transform: translateX(-4px);
  transition: opacity 0.15s, transform 0.15s, color 0.15s;
}
.ef-select-opt:hover,
.ef-select-opt:focus {
  background: var(--yellow);
  outline: none;
  border-color: var(--ink);
  transform: translate(-1px, -1px);
  box-shadow: 3px 3px 0 var(--ink);
}
.ef-select-opt:hover .ef-opt-icon,
.ef-select-opt:focus .ef-opt-icon {
  opacity: 1;
  transform: translateX(0);
  color: var(--ink);
}
.ef-select-opt[aria-selected="true"] {
  background: var(--ink);
  color: var(--paper);
  border-color: var(--ink);
}
.ef-select-opt[aria-selected="true"] .ef-opt-icon {
  opacity: 1;
  transform: translateX(0);
  color: var(--yellow);
}
.ef-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.6rem;
  margin-top: 0.4rem;
}
.ef-submit {
  font: inherit;
  font-family: var(--display);
  font-size: 1.1rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  background: var(--red);
  color: var(--paper);
  border: 3px solid var(--ink);
  box-shadow: 6px 6px 0 var(--ink);
  padding: 0.95rem 1.6rem;
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.15s;
}
.ef-submit:hover {
  transform: translate(-3px, -3px);
  box-shadow: 9px 9px 0 var(--ink);
}
.ef-hint {
  font-family: var(--marker);
  color: var(--ink-soft);
  font-size: 0.95rem;
  transform: rotate(-1deg);
}
.ef-status {
  font-family: var(--marker);
  font-size: 1.05rem;
  min-height: 1.2em;
  margin-top: 0.4rem;
}
.ef-status.ok { color: var(--ink); }
.ef-status.err { color: var(--red); }
.event-form input[type="file"] { padding: 0.6rem 0.7rem; cursor: pointer; }
.event-form input[type="file"]::file-selector-button {
  font-family: var(--display);
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  background: var(--ink);
  color: var(--paper);
  border: 2px solid var(--ink);
  padding: 0.45rem 0.85rem;
  margin-right: 0.8rem;
  cursor: pointer;
}
.event-form input[type="file"]::file-selector-button:hover { background: var(--ink-soft); }

@media (max-width: 720px) {
  .ef-row { grid-template-columns: 1fr; }
  .event-panel-inner { padding: 1.6rem 1.2rem 2rem; box-shadow: 6px 6px 0 var(--yellow); }
}

/* menu */
.menu-section { background: var(--cream-warm); border-top: 2px solid var(--ink); }
.menu-inner {
  max-width: var(--max);
  margin: 0 auto;
  padding: 5rem 1.2rem;
}
.menu-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 2rem;
  margin-bottom: 3rem;
  flex-wrap: wrap;
}
.menu-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.4rem;
}
.menu-cat {
  background: var(--paper);
  border: 2px solid var(--ink);
  padding: 1.8rem;
  position: relative;
}
.menu-cat .cat-num {
  position: absolute;
  top: -16px;
  left: 16px;
  background: var(--ink);
  color: var(--yellow);
  font-family: var(--display);
  font-size: 0.95rem;
  letter-spacing: 0.15em;
  padding: 0.4rem 0.8rem;
  border: 2px solid var(--ink);
}
.menu-cat h3 {
  font-family: var(--display);
  font-size: 1.7rem;
  text-transform: uppercase;
  margin: 0.8rem 0 1.4rem;
  font-weight: 400;
}
.menu-cat ul { list-style: none; }
.menu-cat li {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 0.7rem 0;
  border-bottom: 1px dashed rgba(26,20,16,0.18);
  gap: 1rem;
}
.menu-cat li:last-child { border-bottom: 0; }
.menu-cat .item-name { font-weight: 700; font-size: 0.98rem; }
.menu-cat .item-name small {
  display: block;
  font-weight: 500;
  color: var(--ink-soft);
  font-size: 0.82rem;
  margin-top: 2px;
}
.menu-cat .price {
  font-family: var(--display);
  font-size: 1rem;
  letter-spacing: 0.05em;
  color: var(--red);
  white-space: nowrap;
}

.cta-dark {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  background: var(--ink);
  color: var(--paper);
  font-family: var(--display);
  font-size: 1rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 0.95rem 1.8rem;
  border: 2px solid var(--ink);
  box-shadow: 5px 5px 0 var(--yellow);
  transition: transform 0.15s, box-shadow 0.15s;
}
.cta-dark:hover {
  transform: translate(-2px, -2px);
  box-shadow: 7px 7px 0 var(--yellow);
}

/* "What's in the box" serve cards (lighter — no prices, replaces the old priced menu) */
.serve-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.4rem;
}
.menu-cat .blurb {
  color: var(--ink-soft);
  font-size: 0.95rem;
  line-height: 1.55;
  margin-top: 0.2rem;
}

/* full menu — the owner's menu boards, tap to open full-size */
.menu-boards { margin-top: 3.5rem; border-top: 2px dashed rgba(26, 20, 16, 0.25); padding-top: 2.5rem; }
.menu-boards-head {
  font-family: var(--display);
  font-size: 1.7rem;
  text-transform: uppercase;
  text-align: center;
  font-weight: 400;
}
.menu-boards-hint {
  font-family: var(--marker);
  font-size: 1.05rem;
  color: var(--red);
  text-align: center;
  transform: rotate(-1deg);
  margin: 0.3rem 0 0;
}
.menu-boards-grid {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.8rem;
  margin-top: 1.8rem;
}
.menu-board {
  display: block;
  width: 100%;
  max-width: 900px;
  border: 3px solid var(--ink);
  box-shadow: 6px 6px 0 var(--ink);
  transition: transform 0.15s, box-shadow 0.15s;
  line-height: 0;
}
.menu-board:hover { transform: translate(-3px, -3px); box-shadow: 9px 9px 0 var(--ink); }
.menu-board.tall { max-width: 600px; }
.menu-board img { width: 100%; height: auto; display: block; }

/* Lovin Dublin award sticker */
.award-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: var(--yellow);
  color: var(--ink);
  font-family: var(--display);
  font-size: 0.82rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  line-height: 1.1;
  padding: 0.6rem 1rem;
  border: 2px solid var(--ink);
  box-shadow: 4px 4px 0 var(--ink);
  transform: rotate(-2deg);
}
.award-badge .star { color: var(--red); font-size: 0.9em; }
.menu-cat .award-badge { margin-top: 1.1rem; }
/* hero is dark — swap to a red drop shadow so the sticker pops */
.hero .award-badge {
  margin: 0 0 1.6rem;
  box-shadow: 4px 4px 0 var(--red);
}

/* jobs / careers — dark CTA band */
.jobs-section {
  background: var(--ink);
  color: var(--paper);
  padding: 5rem 1.2rem;
  border-top: 3px solid var(--ink);
  text-align: center;
}
.jobs-inner { max-width: 680px; margin: 0 auto; }
.jobs-section .eyebrow { color: var(--yellow); justify-content: center; }
.jobs-section .eyebrow::before { background: var(--yellow); }
.jobs-section .section-h { color: var(--paper); max-width: 100%; margin: 0 auto 1.2rem; }
.jobs-section p {
  color: rgba(250, 245, 234, 0.85);
  font-size: 1.05rem;
  line-height: 1.6;
  max-width: 560px;
  margin: 0 auto 1.8rem;
}
.jobs-section .jobs-note {
  font-family: var(--marker);
  color: var(--yellow);
  font-size: 1.05rem;
  transform: rotate(-1deg);
  margin-top: 1.4rem;
}

/* story - now featuring the logo big */
.story-section {
  padding: 5rem 1.2rem;
  background: var(--cream);
  border-top: 2px solid var(--ink);
}
.story-inner {
  max-width: var(--max);
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 3rem;
  align-items: center;
}
.story-text h2 { margin-bottom: 1.5rem; }
.story-text p {
  font-size: 1.05rem;
  margin-bottom: 1.2rem;
  max-width: 520px;
  color: var(--ink-soft);
}
.story-text p strong { color: var(--ink); }
.story-stats {
  display: flex;
  gap: 2rem;
  margin-top: 2rem;
  padding-top: 2rem;
  border-top: 2px solid var(--ink);
}
.story-stat .stat-num {
  font-family: var(--display);
  font-size: 3rem;
  line-height: 1;
  color: var(--red);
}
.story-stat .stat-lbl {
  font-family: var(--display);
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin-top: 0.3rem;
}

/* big logo feature in story */
.logo-feature {
  position: relative;
  aspect-ratio: var(--logo-ratio);
  width: 100%;
  background-image: var(--logo-bg);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  filter: drop-shadow(8px 8px 0 rgba(26,20,16,0.15));
  animation: gentle-float 6s ease-in-out infinite;
}
@keyframes gentle-float {
  0%, 100% { transform: rotate(-2deg) translateY(0); }
  50% { transform: rotate(-2deg) translateY(-8px); }
}
.logo-feature::after {
  content: 'straight outta the horsebox';
  position: absolute;
  bottom: -20px;
  right: -5%;
  background: var(--yellow);
  color: var(--ink);
  font-family: var(--marker);
  font-size: 1.15rem;
  padding: 0.7rem 1.1rem;
  border: 3px solid var(--ink);
  box-shadow: 4px 4px 0 var(--ink);
  transform: rotate(6deg);
  line-height: 1.1;
  white-space: nowrap;
}

/* feature strip */
.feature-strip {
  background: var(--ink);
  color: var(--paper);
  padding: 4rem 1.2rem;
  border-top: 3px solid var(--ink);
  border-bottom: 3px solid var(--ink);
}
.feature-inner {
  max-width: var(--max);
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.4rem;
}
.feature-card {
  position: relative;
  aspect-ratio: 5/4;
  overflow: hidden;
  border: 3px solid var(--paper);
  display: flex;
  align-items: flex-end;
  padding: 1.8rem;
  isolation: isolate;
}
.feature-card img {
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  z-index: -2;
}
.feature-card::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(26,20,16,0.92) 0%, rgba(26,20,16,0.3) 60%, transparent 100%);
  z-index: -1;
}
.feature-card .tag-pill {
  position: absolute;
  top: 1.2rem;
  left: 1.2rem;
  background: var(--yellow);
  color: var(--ink);
  font-family: var(--display);
  font-size: 0.82rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  padding: 0.4rem 0.8rem;
  border: 2px solid var(--ink);
}
.feature-card .tag-pill.red { background: var(--red); color: var(--paper); }
.feature-card h3 {
  font-family: var(--display);
  font-size: clamp(1.8rem, 3.5vw, 2.6rem);
  text-transform: uppercase;
  line-height: 1;
  font-weight: 400;
  color: var(--paper);
}
.feature-card .sub {
  font-family: var(--marker);
  color: var(--yellow);
  font-size: 1.15rem;
  margin-top: 0.6rem;
  display: inline-block;
  transform: rotate(-2deg);
}

/* more cards */
.more-section { padding: 5rem 1.2rem; background: var(--cream); }
.more-inner { max-width: var(--max); margin: 0 auto; }
.more-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.4rem;
  margin-top: 2.5rem;
}
.more-card {
  background: var(--paper);
  border: 2px solid var(--ink);
  padding: 2rem 1.6rem;
  display: flex;
  flex-direction: column;
  box-shadow: 5px 5px 0 var(--ink);
  transition: transform 0.18s, box-shadow 0.18s;
}
.more-card:hover {
  transform: translate(-3px, -3px);
  box-shadow: 8px 8px 0 var(--ink);
}
.more-card .icon {
  font-family: var(--display);
  font-size: 0.78rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--red);
  margin-bottom: 0.8rem;
}
.more-card h3 {
  font-family: var(--display);
  font-size: 1.8rem;
  text-transform: uppercase;
  margin-bottom: 1rem;
  font-weight: 400;
  line-height: 1;
}
.more-card p {
  font-size: 0.95rem;
  color: var(--ink-soft);
  margin-bottom: 1.5rem;
  flex-grow: 1;
}
.more-card .more-link {
  font-family: var(--display);
  font-size: 0.9rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  /* reset button defaults so <button.more-link> and <a.more-link> look identical */
  background: none;
  border: none;
  border-radius: 0;
  padding: 0 0 2px 0;
  border-bottom: 2px solid var(--ink);
  color: var(--ink);
  cursor: pointer;
  font-weight: 400;
  align-self: flex-start;
  transition: gap 0.2s, color 0.2s;
}
.more-card .more-link:hover,
.more-card .more-link:focus-visible {
  gap: 0.7rem;
  color: var(--red);
}
/* Keyboard users need to see where they are — the previous `outline: none`
   here left the focus ring off entirely on these links. */
.more-card .more-link:focus-visible {
  outline: 3px solid var(--ink);
  outline-offset: 3px;
}

/* modal popups (barista training, franchise) */
.bb-modal {
  /* sized + centered without relying on inset:0/margin:auto, which iOS
     Safari collapses to zero height on <dialog> elements */
  width: min(720px, 92vw);
  max-width: 92vw;
  max-height: 88vh;
  max-height: 88dvh;
  padding: 0;
  background: var(--paper);
  color: var(--ink);
  border: 3px solid var(--ink);
  box-shadow: 12px 12px 0 var(--yellow);
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  margin: 0;
  overflow: hidden;
}
.bb-modal[open] {
  display: block;
  animation: bbPop 0.22s cubic-bezier(0.2, 0.9, 0.3, 1.2);
}
@keyframes bbPop {
  from { opacity: 0; transform: translate(-50%, calc(-50% + 18px)) scale(0.96); }
  to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.bb-modal::backdrop {
  background: rgba(26, 20, 16, 0.78);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.bb-modal-close {
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
  width: 44px;
  height: 44px;
  border: none;
  background: transparent;
  color: var(--ink);
  font-size: 2rem;
  line-height: 1;
  cursor: pointer;
  z-index: 5;
  font-family: var(--display);
  transition: transform 0.15s;
  appearance: none;
  -webkit-appearance: none;
  -webkit-tap-highlight-color: transparent;
  outline: none;
}
.bb-modal-close:hover {
  transform: rotate(90deg);
  color: var(--red);
}
.bb-modal-close:focus-visible {
  outline: 2px solid var(--ink);
  outline-offset: 2px;
  border-radius: 4px;
}
.bb-modal-inner {
  padding: 2.4rem 1.8rem 1.8rem;
  max-height: 88vh;
  max-height: 88dvh;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.bb-modal-tag {
  display: inline-block;
  background: var(--ink);
  color: var(--yellow);
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.14em;
  padding: 0.3rem 0.7rem;
  margin-bottom: 1rem;
}
.bb-modal h2 {
  font-family: var(--display);
  font-size: clamp(1.8rem, 5vw, 2.6rem);
  line-height: 1;
  letter-spacing: 0.01em;
  margin-bottom: 1.2rem;
}
.bb-modal h2 .marker {
  font-family: var(--marker);
  color: var(--red);
  display: inline-block;
  transform: rotate(-2deg);
  font-size: 0.85em;
}
.bb-modal-body p {
  margin-bottom: 1rem;
  line-height: 1.6;
}
.bb-modal-body .bb-note {
  font-family: var(--marker);
  font-size: 1rem;
  color: var(--ink-soft);
  transform: rotate(-0.5deg);
  display: inline-block;
}
.bb-list {
  list-style: none;
  margin: 1.4rem 0 1.6rem;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.9rem;
}
.bb-list li {
  padding: 0.9rem 1rem;
  background: var(--cream);
  border: 2px solid var(--ink);
  box-shadow: 4px 4px 0 var(--ink);
  font-size: 0.95rem;
  line-height: 1.5;
}
.bb-list li strong {
  font-family: var(--display);
  font-size: 1rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.bb-list li span {
  color: var(--ink-soft);
}

.bb-cta-row {
  margin: 1.5rem 0 0.5rem;
}
.bb-cta-primary {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--display);
  font-size: 1.1rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  background: var(--yellow);
  color: var(--ink);
  border: 3px solid var(--ink);
  box-shadow: 6px 6px 0 var(--ink);
  padding: 0.9rem 1.5rem;
  transition: transform 0.15s, box-shadow 0.15s;
}
.bb-cta-primary:hover {
  transform: translate(-2px, -2px);
  box-shadow: 8px 8px 0 var(--ink);
}
.bb-form-intro {
  font-family: var(--marker);
  color: var(--ink-soft);
  font-size: 1rem;
  margin-bottom: 0.2rem;
  transform: rotate(-0.5deg);
  display: inline-block;
}

/* form inside modal — same style language as the event form */
.bb-form {
  margin-top: 1.5rem;
  padding-top: 1.5rem;
  border-top: 2px dashed rgba(26, 20, 16, 0.25);
  display: flex;
  flex-direction: column;
  gap: 1rem;
}
.bb-form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
}
.bb-field { display: flex; flex-direction: column; gap: 0.35rem; }
.bb-field-full { width: 100%; }
.bb-label {
  font-family: var(--display);
  font-size: 0.82rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-soft);
}
.bb-form input,
.bb-form select,
.bb-form textarea {
  font: inherit;
  font-size: 16px;            /* keep iOS from auto-zooming on focus */
  font-weight: 600;
  color: var(--ink);
  background: var(--paper);
  border: 2px solid var(--ink);
  padding: 0.65rem 0.8rem;
  width: 100%;
  border-radius: 0;
  appearance: none;
  -webkit-appearance: none;
}
.bb-form select {
  background-image: linear-gradient(45deg, transparent 50%, var(--ink) 50%),
                    linear-gradient(135deg, var(--ink) 50%, transparent 50%);
  background-position: calc(100% - 18px) center, calc(100% - 12px) center;
  background-size: 6px 6px, 6px 6px;
  background-repeat: no-repeat;
  padding-right: 2.4rem;
}
.bb-form textarea {
  resize: vertical;
  min-height: 90px;
  line-height: 1.5;
}
.bb-form input:focus,
.bb-form select:focus,
.bb-form textarea:focus {
  outline: 3px solid var(--yellow);
  outline-offset: 2px;
}
.bb-form-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.8rem;
  align-items: center;
  margin-top: 0.4rem;
}
.bb-submit {
  font: inherit;
  font-family: var(--display);
  font-size: 1rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  background: var(--red);
  color: var(--paper);
  border: 3px solid var(--ink);
  box-shadow: 5px 5px 0 var(--ink);
  padding: 0.85rem 1.4rem;
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.15s;
}
.bb-submit:hover {
  transform: translate(-2px, -2px);
  box-shadow: 7px 7px 0 var(--ink);
}
.bb-cancel {
  font: inherit;
  font-family: var(--display);
  font-size: 0.9rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  background: transparent;
  color: var(--ink-soft);
  border: none;
  border-bottom: 2px solid var(--ink-soft);
  padding: 0 0 2px;
  cursor: pointer;
}
.bb-cancel:hover { color: var(--ink); border-color: var(--ink); }
.bb-status {
  font-family: var(--marker);
  font-size: 1rem;
  min-height: 1.2em;
  margin-top: 0.3rem;
}
.bb-status.ok  { color: var(--ink); }
.bb-status.err { color: var(--red); }

@media (max-width: 600px) {
  .bb-modal { box-shadow: 6px 6px 0 var(--yellow); }
  .bb-modal-inner { padding: 2rem 1.2rem 1.5rem; }
  .bb-form-row { grid-template-columns: 1fr; }
}

/* prevent body scroll when a modal is open */
html:has(dialog[open]) { overflow: hidden; }

/* social showcase */
.social {
  background: var(--ink);
  color: var(--paper);
  padding: 5rem 1.2rem;
  position: relative;
  border-top: 2px solid var(--yellow);
}
.social::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.06 0'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>");
  pointer-events: none;
}
.social-inner {
  max-width: var(--max);
  margin: 0 auto;
  position: relative;
  z-index: 2;
}
.social-head {
  max-width: 720px;
  margin-bottom: 3rem;
}
.social .eyebrow { color: var(--yellow); }
.social .eyebrow::before { background: var(--yellow); }
.social h2 {
  color: var(--paper);
}
.social h2 .marker {
  color: var(--yellow);
  display: inline-block;
  transform: rotate(-2deg);
}
.social-lead {
  margin-top: 1rem;
  color: rgba(250, 245, 234, 0.8);
  max-width: 60ch;
  font-size: 1.05rem;
}
.social-lead strong { color: var(--yellow); font-weight: 700; }

/* Real Instagram thumbnails grid (above the platform tiles) */
.ig-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 0.8rem;
  margin-bottom: 2.5rem;
}
.ig-tile {
  position: relative;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border: 2px solid var(--paper);
  box-shadow: 4px 4px 0 var(--yellow);
  transition: transform 0.2s, box-shadow 0.2s;
  display: block;
}
.ig-tile img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s ease;
}
.ig-tile:hover {
  transform: translate(-3px, -3px);
  box-shadow: 7px 7px 0 var(--yellow);
}
.ig-tile:hover img {
  transform: scale(1.06);
}
.ig-tile::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, transparent 60%, rgba(254, 44, 85, 0) 100%);
  pointer-events: none;
  transition: background 0.25s;
}
.ig-tile:hover::after {
  background: linear-gradient(135deg, transparent 30%, rgba(214, 41, 118, 0.55) 100%);
}
.ig-badge {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2;
}
.ig-badge.ig-reel::before {
  content: '';
  width: 0;
  height: 0;
  border-left: 9px solid var(--paper);
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  margin-left: 2px;
  filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.5));
}
@media (max-width: 900px) {
  .ig-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 500px) {
  .ig-grid { grid-template-columns: repeat(2, 1fr); gap: 0.55rem; }
  .ig-tile { box-shadow: 3px 3px 0 var(--yellow); }
  .ig-tile:hover { box-shadow: 5px 5px 0 var(--yellow); }
}

.social-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}
.social-tile {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 1.25rem;
  background: var(--paper);
  color: var(--ink);
  border: 3px solid var(--ink);
  box-shadow: 8px 8px 0 var(--yellow);
  padding: 1.5rem 1.5rem 1.4rem;
  transition: transform 0.2s, box-shadow 0.2s;
  overflow: hidden;
  isolation: isolate;
}
.social-tile::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  opacity: 0.92;
  transition: opacity 0.2s;
}
.social-tile > * { position: relative; z-index: 1; }
.social-tile:hover {
  transform: translate(-4px, -4px);
  box-shadow: 12px 12px 0 var(--yellow);
}

/* Instagram — branded gradient */
.social-ig {
  color: var(--paper);
  border-color: var(--paper);
  box-shadow: 8px 8px 0 var(--yellow);
}
.social-ig::before {
  background: linear-gradient(45deg, #feda75 0%, #fa7e1e 25%, #d62976 50%, #962fbf 75%, #4f5bd5 100%);
}

/* TikTok — black with cyan/red glow */
.social-tt {
  color: var(--paper);
  border-color: var(--paper);
  box-shadow: 8px 8px 0 #25F4EE;
}
.social-tt::before {
  background: #000;
}
.social-tt::after {
  content: '';
  position: absolute;
  inset: -2px;
  z-index: 0;
  background:
    radial-gradient(circle at 18% 12%, rgba(254, 44, 85, 0.55), transparent 38%),
    radial-gradient(circle at 88% 88%, rgba(37, 244, 238, 0.45), transparent 42%);
  pointer-events: none;
}

/* Facebook — classic blue */
.social-fb {
  color: var(--paper);
  border-color: var(--paper);
  box-shadow: 8px 8px 0 var(--yellow);
}
.social-fb::before {
  background: linear-gradient(160deg, #1877F2 0%, #0a4ea2 100%);
}

.social-tile-top {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}
.social-icon {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
}
.social-platform {
  font-family: var(--display);
  font-size: 1.05rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.social-tile-body { flex: 1; }
.social-handle {
  font-family: var(--display);
  font-size: 1.4rem;
  letter-spacing: 0.04em;
  display: block;
  margin-bottom: 0.6rem;
  word-break: break-word;
}
.social-teaser {
  font-size: 0.95rem;
  line-height: 1.5;
  opacity: 0.92;
}
.social-teaser strong {
  font-weight: 700;
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 3px;
}
.social-cta {
  font-family: var(--display);
  font-size: 0.95rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-bottom: 2px solid currentColor;
  padding-bottom: 3px;
  align-self: flex-start;
  transition: gap 0.2s, letter-spacing 0.2s;
}
.social-tile:hover .social-cta {
  letter-spacing: 0.18em;
}

@media (max-width: 980px) {
  .social-grid { grid-template-columns: 1fr 1fr; }
  .social-tile:nth-child(3) { grid-column: span 2; }
}
@media (max-width: 600px) {
  .social-grid { grid-template-columns: 1fr; }
  .social-tile:nth-child(3) { grid-column: auto; }
  .social { padding: 4rem 1.2rem; }
}

/* footer */
.footer {
  background: var(--ink);
  color: var(--paper);
  padding: 5rem 1.2rem 1.5rem;
  border-top: 3px solid var(--ink);
}
.footer-inner { max-width: var(--max); margin: 0 auto; }
.footer-top {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  gap: 3rem;
  padding-bottom: 3rem;
  border-bottom: 1px solid rgba(250,245,234,0.15);
}
.footer-logo {
  width: 280px;
  max-width: 100%;
  aspect-ratio: var(--logo-ratio);
  background-image: var(--logo-bg);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: left center;
  margin-bottom: 1.5rem;
}
.footer .footer-tag {
  font-family: var(--marker);
  color: var(--yellow);
  font-size: 1.4rem;
  margin-bottom: 1rem;
  display: inline-block;
  transform: rotate(-2deg);
}
.footer p {
  color: rgba(250,245,234,0.75);
  margin-bottom: 1.5rem;
  max-width: 360px;
}
.footer .footer-col h4 {
  font-family: var(--display);
  font-size: 0.95rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  margin-bottom: 1.2rem;
  color: var(--yellow);
}
.footer .footer-col ul { list-style: none; }
.footer .footer-col li { margin-bottom: 0.6rem; }
.footer .footer-col a {
  color: rgba(250,245,234,0.8);
  transition: color 0.2s;
}
.footer .footer-col a:hover { color: var(--yellow); }
.socials {
  display: flex;
  gap: 0.8rem;
  margin-top: 1rem;
}
.socials a {
  width: 42px; height: 42px;
  border: 2px solid var(--paper);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--display);
  font-size: 0.85rem;
  letter-spacing: 0.1em;
  transition: background 0.2s, color 0.2s;
}
.socials a:hover { background: var(--yellow); color: var(--ink); border-color: var(--yellow); }

.contact-form {
  background: var(--ink-soft);
  border: 2px solid var(--paper);
  padding: 1.6rem;
  margin-top: 1rem;
}
.contact-form .form-row {
  display: flex;
  gap: 0.7rem;
  margin-bottom: 0.7rem;
}
.contact-form .form-row > * { flex: 1; }
.contact-form input, .contact-form textarea {
  width: 100%;
  background: transparent;
  border: 1px solid rgba(250,245,234,0.3);
  color: var(--paper);
  padding: 0.7rem 0.9rem;
  font-family: var(--body);
  font-size: 0.95rem;
}
.contact-form input::placeholder, .contact-form textarea::placeholder {
  color: rgba(250,245,234,0.5);
}
.contact-form input:focus, .contact-form textarea:focus {
  outline: 2px solid var(--yellow);
  border-color: var(--yellow);
}
.contact-form textarea {
  min-height: 90px;
  resize: vertical;
  margin-bottom: 0.9rem;
}
.contact-form button {
  width: 100%;
  background: var(--yellow);
  color: var(--ink);
  border: 2px solid var(--paper);
  padding: 0.85rem;
  font-family: var(--display);
  font-size: 0.95rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background 0.2s;
}
.contact-form button:hover { background: var(--paper); }

.footer-bottom {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 1.5rem;
  font-size: 0.82rem;
  color: rgba(250,245,234,0.5);
  flex-wrap: wrap;
  gap: 1rem;
}

/* floating event CTA (mobile) */
.float-event {
  display: none;
  position: fixed;
  bottom: 16px;
  left: 16px; right: 16px;
  background: var(--red);
  color: var(--paper);
  font-family: var(--display);
  font-size: 1rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 1rem 1.2rem;
  border: 2px solid var(--ink);
  box-shadow: 4px 4px 0 var(--ink);
  z-index: 35;
  text-align: center;
}

/* mobile */
@media (max-width: 900px) {
  .nav-wrap { padding: 0.6rem 1rem; }
  .logo-img { height: 72px; }
  nav { display: none; position: absolute; top: 100%; left: 0; right: 0; background: var(--ink); border-bottom: 2px solid var(--yellow); padding: 1rem; }
  nav.open { display: block; }
  nav ul { flex-direction: column; gap: 0.2rem; font-size: 1.1rem; }
  nav ul li { padding: 0.7rem 0; border-bottom: 1px dashed rgba(250,245,234,0.15); }
  nav ul li:last-child { border-bottom: 0; padding-top: 1rem; }
  .nav-cta { display: inline-block; }
  .burger { display: block; }

  .hero { padding: 3rem 1.2rem 4rem; }
  .hero-ctas .cta { flex: 1; justify-content: center; }
  .loc-chips { gap: 1rem; }
  .loc-chip { font-size: 0.75rem; }

  .loc-grid { grid-template-columns: 1fr; }
  .events-inner { grid-template-columns: 1fr; }
  .events-visual {
    /* keep the 1/1 ratio from the base rule — image fills the box edge-to-edge */
    width: calc(100% - 14px);   /* leave room for the 10px yellow shadow on the right */
    max-width: 460px;
    justify-self: center;
    margin: 0 auto;
  }
  .menu-grid { grid-template-columns: 1fr; }
  .serve-grid { grid-template-columns: repeat(2, 1fr); }
  .story-inner { grid-template-columns: 1fr; }
  .logo-feature { max-width: 450px; margin: 0 auto; }
  .feature-inner { grid-template-columns: 1fr; }
  .more-grid { grid-template-columns: 1fr; }
  .footer-top { grid-template-columns: 1fr; gap: 2rem; }

  .float-event { display: block; }
  body { padding-bottom: 80px; }

  section.block, .menu-inner, .story-section, .feature-strip, .more-section { padding-top: 3.5rem; padding-bottom: 3.5rem; }
  .events { padding: 3.5rem 1.2rem; }
}

@media (max-width: 480px) {
  .nav-cta { padding: 0.45rem 0.7rem !important; font-size: 0.78rem; letter-spacing: 0.05em; }
  .serve-grid { grid-template-columns: 1fr; }
  .logo-img { height: 60px; }
  h2.section-h { font-size: 2.2rem; }
  .hero h1 { font-size: 3rem; }
  .logo-feature::after { font-size: 1rem; padding: 0.5rem 0.8rem; }
}

/* ── Skip link ─────────────────────────────────────────────────────────────
   First tab stop on the page. Sits off-screen until focused, then drops in
   under the announcement bar. */
.skip-link {
  position: absolute;
  left: 50%;
  top: 0;
  transform: translate(-50%, -120%);
  z-index: 10000;
  background: var(--yellow);
  color: var(--ink);
  font-family: var(--display);
  font-size: 0.95rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
  padding: 0.8rem 1.4rem;
  border: 3px solid var(--ink);
  box-shadow: 4px 4px 0 var(--ink);
  transition: transform 0.18s ease;
}
.skip-link:focus-visible {
  transform: translate(-50%, 0.6rem);
  outline: 3px solid var(--ink);
  outline-offset: 3px;
}

/* ── Open / closed status: not colour-alone ────────────────────────────────
   WCAG 1.4.1 — the hero chips signalled state with nothing but a green/grey
   dot. Two fixes: the dot changes *shape* (solid = open, hollow ring = closed),
   which survives greyscale and colour blindness at 10px where a glyph would
   just smudge; and .status-label carries the state as real text for screen
   readers. The location cards already show "Open now"/"Closed" visibly. */
.loc-chip.closed .status-dot,
.loc-card.closed-now .status-dot {
  background: transparent;
  border: 2px solid var(--grey);
}

/* Available to assistive tech, out of the visual layout. */
.visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  margin: -1px; padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* ── Reduced motion ────────────────────────────────────────────────────────
   Honour the OS setting: kill the marquees, the float and the pop-ins. The
   inline splash block in index.html covers the splash itself; everything
   below is the main stylesheet's share. Transitions are shortened rather
   than removed so hover/focus states still read as deliberate. */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  .tape-track,
  .splash-tape-track,
  .bar > span,
  .status-dot {
    animation: none !important;
  }

  .logo-feature,
  .feature-card img,
  .sticker {
    animation: none !important;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }

  /* Marquees are duplicated-content strips that rely on movement to reveal
     the tail; with motion off, let them wrap and show everything at once. */
  .tape-track,
  .splash-tape-track {
    flex-wrap: wrap;
    justify-content: center;
    transform: none !important;
  }
}


/* ── Honeypot ──────────────────────────────────────────────────────────────
   Hidden from people but present in the DOM, so bots that fill every field
   give themselves away. Deliberately NOT display:none or type=hidden — the
   crawlers worth catching skip both. Kept out of the accessibility tree by
   aria-hidden + tabindex="-1" on the markup side. */
.hp-field {
  position: absolute !important;
  left: -9999px !important;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
  opacity: 0;
  pointer-events: none;
}
