@import url("fonts.css");

/* ============================================================
   Plumbing only. Nothing here is a design decision — no colour,
   no typeface, no layout. Each site writes its own visual system
   on top; this file only carries the things that must be right
   on every site and are invisible when they are.
   ============================================================ */

*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  /* A sideways-scrollable page drags position:fixed elements out of view on
     phones. Clip rather than scroll. (clip, not hidden: hidden would make html
     a scroll container and break scroll-padding and sticky.) */
  overflow-x: clip;
}

body { margin: 0; }
/* Lock scrolling on the ROOT, not on body. html already has overflow-x:clip,
   so overflow:hidden on body turns body into its own scroll container — a
   position:sticky header then sticks to body and is thrown off-screen (with
   its close button) when the menu opens after scrolling. site.js puts
   .is-locked on <html> directly; a :has() selector was tried first and its
   style invalidation visibly lagged behind the menu opening. */
html.is-locked { overflow: hidden; }
/* [hidden] must win. A rule like `.gallery-more { display:flex }` outranks the
   browser's own `[hidden] { display:none }`, which left an empty "Show 0 more"
   button on screen whenever a gallery had nothing further to reveal. */
[hidden] { display: none !important; }

img, svg, video { max-width: 100%; height: auto; display: block; }
button { font: inherit; color: inherit; }
/* A <button> inherits the user agent's grey `buttonface` unless something says
   otherwise. An outline/ghost button that sets only border-color and color then
   renders as light-grey with (often white) text on it — invisible. Reset here;
   any variant that wants a fill sets one and wins on specificity. */
button { background: transparent; }
ul, ol { margin: 0; padding: 0; }
h1, h2, h3, h4, h5, h6 { margin: 0; }
p { margin: 0 0 1em; }
p:last-child { margin-bottom: 0; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
}

.visually-hidden {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* Reveal-on-scroll. The JS failsafe shows everything if the observer
   never runs, so content can never be stranded invisible. */
.reveal { opacity: 0; transform: translateY(16px); transition: opacity .7s var(--ease, ease), transform .7s var(--ease, ease); }
.reveal.is-visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .reveal { opacity: 1; transform: none; } }

@media print {
  .site-header, .lightbox, .skip-link, .gallery-more, .filters, .map-consent, .callbar { display: none !important; }
  .reveal { opacity: 1 !important; transform: none !important; }
  body { background: #fff !important; color: #000 !important; }
  a[href^="http"]::after { content: " (" attr(href) ")"; font-size: .75em; color: #555; }
}

/* ============================================================
   Crazy Rooster — "rooster tail"
   ------------------------------------------------------------
   The mark is a rainbow rooster mid-sprint and a wordmark in six
   colours. So the whole site is built from that tail: a night-
   aubergine ground (the logo's white "Crazy" needs a dark header —
   rendered on five backgrounds and compared), six saturated
   colours used as FILLS, tilted sticker cards, a running marquee,
   rainbow stripes, and a fat bubble display face that matches the
   wordmark.

   Colour rule, measured not guessed: every rainbow fill carries INK
   text (all >= 5:1) except purple, which carries WHITE (4.6:1).
   Pink is ink-only: white on pink measures 2.8:1. No
   rainbow colour is ever used as small text on the cream page.
   Bagel Fat One is display-only; everything read at small size is
   Bricolage Grotesque.
   ============================================================ */

:root {
  --ink:    #1b0f2e;
  --ink-2:  #2a1846;
  --paper:  #fff8ec;
  --paper-2:#fdeed3;
  --muted:  #5b4d70;
  --soft:   #cfc3e6;

  --red:    #ff4d4d;
  --orange: #ff8c1a;
  --yellow: #ffd23f;
  --green:  #2fbf71;
  --blue:   #3b8cff;
  --purple: #9d4edd;
  --pink:   #ff5fa2;

  --rainbow: linear-gradient(90deg, var(--red) 0 16.66%, var(--orange) 0 33.33%, var(--yellow) 0 50%, var(--green) 0 66.66%, var(--blue) 0 83.33%, var(--purple) 0);
  --wrap: 1240px;
  --r: 22px;
  --ease: cubic-bezier(.34,1.56,.64,1);   /* a little overshoot: bouncy */
  --ease-soft: cubic-bezier(.2,.7,.2,1);
  --pop: 6px 6px 0 var(--ink);
}

body {
  background: var(--paper); color: var(--ink);
  font: 400 clamp(1.02rem, .98rem + .2vw, 1.14rem)/1.65 "Bricolage Grotesque", "Segoe UI", Helvetica, Arial, sans-serif;
}
h1, h2, .display { font-family: "Bagel Fat One", "Bricolage Grotesque", Impact, sans-serif; font-weight: 400; line-height: 1.02; letter-spacing: .005em; }
h1 { font-size: clamp(2.7rem, 1.6rem + 5vw, 5.6rem); }
h2 { font-size: clamp(2.1rem, 1.4rem + 3vw, 3.8rem); }
h3 { font-family: "Bricolage Grotesque", sans-serif; font-weight: 800; font-size: clamp(1.25rem, 1.1rem + .6vw, 1.6rem); line-height: 1.2; letter-spacing: -.01em; }

a { color: var(--ink); text-decoration-color: var(--purple); text-decoration-thickness: 2px; text-underline-offset: .18em; }
a:hover { text-decoration-color: var(--orange); }
:focus-visible { outline: 3px solid var(--yellow); outline-offset: 3px; box-shadow: 0 0 0 6px var(--ink); border-radius: 8px; }

.wrap { width: min(100% - 2.5rem, var(--wrap)); margin-inline: auto; }
.skip-link { position: absolute; left: 1rem; top: -80px; z-index: 300; background: var(--yellow); color: var(--ink); font-weight: 800; padding: .7rem 1.1rem; border-radius: 999px; }
.skip-link:focus { top: 1rem; }

.stripes { height: 8px; background: var(--rainbow); }

/* Sticker label: a small tilted pill. */
.sticker {
  display: inline-block; font-weight: 800; font-size: .82rem; letter-spacing: .08em; text-transform: uppercase;
  padding: .38rem .85rem; border-radius: 999px; background: var(--yellow); color: var(--ink);
  transform: rotate(-3deg); box-shadow: 3px 3px 0 var(--ink);
}
.sticker--green { background: var(--green); }
.sticker--blue { background: var(--blue); }
.sticker--pink { background: var(--pink); }

/* ---------- Header ------------------------------------------------------ */
.site-header { position: sticky; top: 0; z-index: 100; background: var(--ink); transition: box-shadow .3s; }
.site-header.is-stuck { box-shadow: 0 12px 30px -16px rgba(0,0,0,.6); }
.header-inner { display: flex; align-items: center; justify-content: space-between; gap: 1rem; min-height: 84px; }
.brand img { width: clamp(170px, 20vw, 238px); height: auto; }
.nav { display: flex; align-items: center; gap: .35rem; }
.nav a {
  color: var(--paper); text-decoration: none; font-weight: 700; padding: .55rem 1rem; border-radius: 999px;
  transition: background .25s, color .25s, transform .3s var(--ease);
}
.nav a:hover { background: var(--ink-2); transform: rotate(-2deg) scale(1.05); }
.nav a[aria-current] { background: var(--paper); color: var(--ink); }
.nav a.nav-cta { background: var(--yellow); color: var(--ink); margin-left: .5rem; box-shadow: 3px 3px 0 var(--pink); }
.nav a.nav-cta:hover { background: var(--orange); transform: rotate(2deg) scale(1.06); }
.nav-toggle { display: none; }

@media (max-width: 860px) {
  .nav-toggle {
    display: grid; place-items: center; width: 50px; height: 50px; border-radius: 16px; cursor: pointer;
    background: var(--yellow); border: 0; box-shadow: 3px 3px 0 var(--pink);
  }
  .nav-toggle span, .nav-toggle span::before, .nav-toggle span::after {
    content: ""; display: block; width: 22px; height: 3px; border-radius: 3px; background: var(--ink); position: relative;
    transition: transform .35s var(--ease), background .2s;
  }
  .nav-toggle span::before { position: absolute; top: -7px; }
  .nav-toggle span::after { position: absolute; top: 7px; }
  .site-header.is-open .nav-toggle span { background: transparent; }
  .site-header.is-open .nav-toggle span::before { transform: translateY(7px) rotate(45deg); }
  .site-header.is-open .nav-toggle span::after { transform: translateY(-7px) rotate(-45deg); }
  .nav {
    position: fixed; inset: 84px 0 0; flex-direction: column; justify-content: center; gap: .9rem;
    background: var(--ink); padding: 2rem;
    opacity: 0; visibility: hidden; transition: opacity .25s var(--ease-soft), visibility .25s;
  }
  .nav::before { content: ""; position: absolute; inset: 0 0 auto; height: 8px; background: var(--rainbow); }
  .site-header.is-open .nav { opacity: 1; visibility: visible; }
  .nav a { font-family: "Bagel Fat One", sans-serif; font-weight: 400; font-size: 2rem; padding: .5rem 1.6rem; }
  .nav a.nav-cta { margin: .8rem 0 0; font-size: 1.5rem; }
}

/* ---------- Hero: sticker collage --------------------------------------- */
.hero {
  position: relative; overflow: hidden; background: var(--ink); color: var(--paper);
  padding: clamp(2.5rem, 6vw, 5rem) 0 clamp(4rem, 8vw, 6.5rem);
}
/* Soft colour pools from the tail, static — no motion needed to be loud. */
.hero::before {
  content: ""; position: absolute; inset: -20%;
  background:
    radial-gradient(38% 42% at 12% 18%, rgba(255,77,77,.38), transparent 70%),
    radial-gradient(34% 40% at 88% 12%, rgba(59,140,255,.36), transparent 70%),
    radial-gradient(40% 44% at 78% 88%, rgba(157,78,221,.42), transparent 70%),
    radial-gradient(36% 40% at 20% 92%, rgba(47,191,113,.30), transparent 70%),
    radial-gradient(30% 34% at 50% 50%, rgba(255,210,63,.16), transparent 70%);
  pointer-events: none;
}
.hero-inner { position: relative; display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(2rem, 5vw, 4rem); align-items: center; }
@media (max-width: 960px) { .hero-inner { grid-template-columns: 1fr; } }
.hero h1 { margin: 1rem 0 1.1rem; }
/* Each word of the headline in its own tail colour. */
.hero h1 .c1 { color: var(--yellow); }
.hero h1 .c2 { color: var(--pink); }
.hero h1 .c3 { color: var(--green); }
.hero h1 .c4 { color: var(--blue); }
.hero-lede { color: var(--soft); font-size: clamp(1.08rem, 1rem + .4vw, 1.3rem); max-width: 40ch; }
.hero-actions { display: flex; flex-wrap: wrap; gap: .8rem; margin-top: 1.8rem; }

.collage { position: relative; aspect-ratio: 1 / 1; max-width: 620px; width: 100%; justify-self: center; }
.polaroid {
  position: absolute; margin: 0; background: #fff; padding: 10px 10px 34px; border-radius: 14px;
  box-shadow: 0 30px 50px -24px rgba(0,0,0,.7); transition: transform .5s var(--ease);
}
.polaroid img { width: 100%; height: 100%; object-fit: cover; border-radius: 8px; }
.polaroid figcaption {
  position: absolute; left: 0; right: 0; bottom: 7px; text-align: center; color: var(--ink);
  font-weight: 800; font-size: .88rem;
}
.polaroid:hover { transform: rotate(0deg) scale(1.04); z-index: 5; }
.p1 { width: 62%; aspect-ratio: 4/3.4; left: 0; top: 4%; transform: rotate(-7deg); border: 0; }
.p2 { width: 52%; aspect-ratio: 1/1.08; right: 0; top: 0; transform: rotate(6deg); }
.p3 { width: 58%; aspect-ratio: 4/3.3; right: 6%; bottom: 0; transform: rotate(-3deg); }
.p1 { box-shadow: 10px 10px 0 var(--red), 0 30px 50px -24px rgba(0,0,0,.7); }
.p2 { box-shadow: -10px 10px 0 var(--blue), 0 30px 50px -24px rgba(0,0,0,.7); }
.p3 { box-shadow: 10px 10px 0 var(--green), 0 30px 50px -24px rgba(0,0,0,.7); }
.rooster {
  position: absolute; width: 34%; left: -2%; bottom: 2%; z-index: 4;
  filter: drop-shadow(0 16px 20px rgba(0,0,0,.5));
  animation: strut 3.2s ease-in-out infinite;
}
@keyframes strut { 0%,100% { transform: rotate(-4deg) translateY(0); } 50% { transform: rotate(4deg) translateY(-8px); } }
.award {
  position: absolute; top: -2%; left: 40%; z-index: 6; width: clamp(92px, 12vw, 128px); aspect-ratio: 1;
  border-radius: 50%; background: var(--yellow); color: var(--ink); display: grid; place-content: center; text-align: center;
  transform: rotate(12deg); box-shadow: 4px 4px 0 var(--ink), 0 0 0 5px var(--pink);
  font-weight: 800; line-height: 1.05; font-size: clamp(.66rem, .55rem + .35vw, .82rem); padding: .6rem;
}
.award b { font-family: "Bagel Fat One", sans-serif; font-weight: 400; font-size: 1.55em; display: block; }
@media (max-width: 960px) { .collage { max-width: 520px; margin-top: 1rem; } }

/* ---------- Buttons ----------------------------------------------------- */
.btn {
  display: inline-flex; align-items: center; gap: .55rem; cursor: pointer; text-decoration: none;
  font: 800 1.02rem/1 "Bricolage Grotesque", sans-serif; padding: 1rem 1.5rem; border-radius: 999px;
  background: var(--paper); color: var(--ink); border: 3px solid var(--ink); box-shadow: 4px 4px 0 var(--ink);
  transition: transform .3s var(--ease), box-shadow .3s var(--ease), background .2s;
}
.btn:hover { transform: translate(-2px,-2px) rotate(-1.5deg); box-shadow: 7px 7px 0 var(--ink); }
.btn:active { transform: translate(2px,2px); box-shadow: 1px 1px 0 var(--ink); }
.btn--yellow { background: var(--yellow); }
.btn--pink { background: var(--pink); }
.btn--green { background: var(--green); }
.btn--ghost { background: transparent; color: var(--paper); border-color: var(--paper); box-shadow: 4px 4px 0 var(--pink); }
.btn--ghost:hover { box-shadow: 7px 7px 0 var(--pink); }
.btn svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }

/* ---------- Marquee ----------------------------------------------------- */
/* The tilt pushes the band's corners past the viewport edge; the clip box
   swallows them so the page never scrolls sideways. */
.marquee-clip { overflow: hidden; margin-top: -2.2rem; padding: .9rem 0; position: relative; z-index: 2; }
.marquee { background: var(--yellow); color: var(--ink); overflow: hidden; border-block: 3px solid var(--ink); transform: rotate(-1.2deg) scale(1.03); }
.marquee-track { display: flex; width: max-content; animation: marquee 38s linear infinite; }
.marquee-track span { font-family: "Bagel Fat One", sans-serif; font-size: clamp(1.4rem, 1.1rem + 1.4vw, 2.3rem); padding: .6rem 0; white-space: nowrap; }
.marquee-track i { font-style: normal; display: inline-block; margin: 0 1.1rem; }
.marquee:hover .marquee-track { animation-play-state: paused; }
@keyframes marquee { to { transform: translateX(-50%); } }

/* ---------- Sections ---------------------------------------------------- */
.section { padding: clamp(4rem, 9vw, 7rem) 0; position: relative; }
.section--ink { background: var(--ink); color: var(--paper); }
.section--ink p { color: var(--soft); }
.section--cream { background: var(--paper-2); }
.section-head { max-width: 46rem; margin-bottom: clamp(2rem, 4vw, 3rem); }
.section-head .sticker { margin-bottom: 1rem; }
.section-head p { color: var(--muted); font-size: 1.12rem; }
.section--ink .section-head p { color: var(--soft); }

/* Welcome: text + stacked crew photos */
.welcome { display: grid; grid-template-columns: 1.1fr .9fr; gap: clamp(2rem, 5vw, 4.5rem); align-items: center; }
@media (max-width: 900px) { .welcome { grid-template-columns: 1fr; } }
.welcome .lede { font-size: clamp(1.2rem, 1.05rem + .6vw, 1.5rem); font-weight: 700; line-height: 1.45; }
.welcome p { color: var(--muted); }
.stack { position: relative; min-height: 460px; }
.stack figure { position: absolute; margin: 0; width: 66%; border: 5px solid var(--ink); border-radius: var(--r); overflow: hidden; background: var(--ink); }
.stack img { width: 100%; height: 100%; object-fit: cover; }
.stack .s1 { left: 0; top: 0; aspect-ratio: 3/4; transform: rotate(-4deg); box-shadow: 10px 10px 0 var(--orange); }
.stack .s2 { right: 0; bottom: 0; aspect-ratio: 4/3; transform: rotate(5deg); box-shadow: -10px 10px 0 var(--purple); }
@media (max-width: 900px) { .stack { min-height: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .stack figure { position: static; width: 100%; } }

/* Weekly "gig posters" */
.posters { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(1rem, 2.5vw, 1.8rem); }
@media (max-width: 900px) { .posters { grid-template-columns: 1fr; } }
.poster {
  position: relative; border-radius: var(--r); overflow: hidden; color: var(--ink); border: 4px solid var(--paper);
  min-height: 420px; display: flex; flex-direction: column; justify-content: flex-end; padding: 1.6rem;
  transition: transform .45s var(--ease);
}
.poster:nth-child(1) { transform: rotate(-2deg); }
.poster:nth-child(2) { transform: rotate(1.5deg); }
.poster:nth-child(3) { transform: rotate(-1deg); }
.poster:hover { transform: rotate(0) scale(1.02); }
.poster > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.poster::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(27,15,46,.25), transparent 30%); }
/* Titles sit on a solid panel: the event photos are bright and busy, and some
   carry Instagram stickers, so text straight on the photo was unreadable. */
.poster-body { background: rgba(27,15,46,.94); border-radius: 16px; padding: 1rem 1.15rem 1.1rem; border: 2px solid rgba(255,248,236,.18); }
.poster-body h3 { margin-top: 0 !important; }
.poster > * { position: relative; z-index: 1; }
.poster .day { align-self: flex-start; margin-bottom: auto; }
.poster h3 { font-family: "Bagel Fat One", sans-serif; font-weight: 400; font-size: clamp(2rem, 1.5rem + 2vw, 2.9rem); line-height: 1; color: var(--yellow); margin-top: 1rem; }
.poster p { color: #fff; margin: .6rem 0 0; font-weight: 500; }
.poster--closed { background: var(--red); border-color: var(--ink); justify-content: center; text-align: center; }
.poster--closed::after { display: none; }
.poster--closed h3 { color: var(--ink); }
.poster--closed p { color: var(--ink); }
.poster--closed .day { align-self: center; margin-bottom: 1rem; }
.poster--closed img.zzz { position: static; width: 58%; margin: 0 auto 1rem; transform: rotate(-8deg) scaleX(-1); filter: drop-shadow(4px 4px 0 var(--ink)); }

.hours { margin-top: clamp(2rem, 4vw, 3rem); display: grid; grid-template-columns: repeat(4, 1fr); gap: .8rem; list-style: none; }
@media (max-width: 900px) { .hours { grid-template-columns: 1fr 1fr; } }
.hours li { border-radius: 18px; padding: 1.1rem 1.2rem; color: var(--ink); font-weight: 600; line-height: 1.3; border: 3px solid var(--ink); }
.hours li b { display: block; font-family: "Bagel Fat One", sans-serif; font-weight: 400; font-size: 1.7rem; line-height: 1.05; margin-bottom: .25rem; }
.hours li:nth-child(1) { background: var(--yellow); }
.hours li:nth-child(2) { background: var(--green); }
.hours li:nth-child(3) { background: var(--orange); }
.hours li:nth-child(4) { background: var(--blue); }

/* Flavour tiles */
.flavours { display: grid; grid-template-columns: repeat(2, 1fr); gap: clamp(1rem, 2.5vw, 1.8rem); }
@media (max-width: 760px) { .flavours { grid-template-columns: 1fr; } }
.flavour {
  display: grid; grid-template-columns: 1fr 1fr; border-radius: var(--r); overflow: hidden;
  border: 4px solid var(--ink); box-shadow: var(--pop); color: var(--ink);
  transition: transform .4s var(--ease), box-shadow .4s var(--ease);
}
.flavour:hover { transform: translate(-3px,-3px) rotate(-.6deg); box-shadow: 10px 10px 0 var(--ink); }
@media (max-width: 520px) { .flavour { grid-template-columns: 1fr; } .flavour img { aspect-ratio: 4/3; } }
.flavour img { width: 100%; height: 100%; object-fit: cover; min-height: 260px; }
.flavour > div { padding: clamp(1.3rem, 3vw, 2rem); display: flex; flex-direction: column; justify-content: center; }
.flavour h3 { font-family: "Bagel Fat One", sans-serif; font-weight: 400; font-size: clamp(1.7rem, 1.3rem + 1.4vw, 2.3rem); line-height: 1.02; margin-bottom: .6rem; }
.flavour p { margin: 0 0 .6rem; font-weight: 500; }
.flavour--orange { background: var(--orange); }
.flavour--green { background: var(--green); }
.flavour--yellow { background: var(--yellow); }
.flavour--purple { background: var(--purple); color: #fff; }

/* ---------- Gallery ----------------------------------------------------- */
.filters { display: flex; flex-wrap: wrap; gap: .6rem; margin-bottom: 1.6rem; }
.filter {
  font: 800 1rem/1 "Bricolage Grotesque", sans-serif; padding: .75rem 1.2rem; border-radius: 999px; cursor: pointer;
  border: 3px solid var(--ink); background: var(--paper); color: var(--ink); transition: transform .3s var(--ease), background .2s;
}
.filter:hover { transform: rotate(-3deg); }
.filter[aria-pressed="true"] { background: var(--ink); color: var(--yellow); box-shadow: 3px 3px 0 var(--pink); }

/* Masonry: photos keep their own shape, frames cycle through the tail. */
.grid { columns: 4 250px; column-gap: clamp(.8rem, 1.6vw, 1.2rem); }
.tile {
  display: block; width: 100%; margin: 0 0 clamp(.8rem, 1.6vw, 1.2rem); break-inside: avoid; padding: 0; cursor: pointer;
  border: 4px solid var(--ink); border-radius: 18px; overflow: hidden; background: var(--ink); position: relative;
  transition: transform .4s var(--ease), box-shadow .4s var(--ease);
}
.tile img { width: 100%; height: auto; display: block; }
.tile:nth-child(6n+1) { box-shadow: 5px 5px 0 var(--red); }
.tile:nth-child(6n+2) { box-shadow: 5px 5px 0 var(--orange); }
.tile:nth-child(6n+3) { box-shadow: 5px 5px 0 var(--yellow); }
.tile:nth-child(6n+4) { box-shadow: 5px 5px 0 var(--green); }
.tile:nth-child(6n+5) { box-shadow: 5px 5px 0 var(--blue); }
.tile:nth-child(6n)   { box-shadow: 5px 5px 0 var(--purple); }
.tile:hover, .tile:focus-visible { transform: rotate(-1.8deg) scale(1.02); z-index: 2; }
.tile.is-entering { animation: pop-in .5s var(--ease) backwards; }
@keyframes pop-in { from { opacity: 0; transform: scale(.85) rotate(-4deg); } }
.gallery-more { display: flex; justify-content: center; margin-top: 2rem; }

/* Teaser row on the homepage */
.teaser { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; }
@media (max-width: 900px) { .teaser { grid-template-columns: repeat(2, 1fr); } }
.teaser .tile { margin: 0; aspect-ratio: 1; }
.teaser .tile img { height: 100%; object-fit: cover; }
.teaser .tile:nth-child(odd) { transform: rotate(-2deg); }
.teaser .tile:nth-child(even) { transform: rotate(2deg); }
.teaser .tile:hover { transform: rotate(0) scale(1.04); }

/* ---------- Reservation band -------------------------------------------- */
.reserve { background: var(--rainbow); padding: clamp(3rem, 7vw, 5rem) 0; }
.reserve-card {
  background: var(--ink); color: var(--paper); border-radius: 30px; padding: clamp(2rem, 5vw, 3.6rem);
  display: grid; grid-template-columns: 1.2fr 1fr; gap: 2rem; align-items: center; box-shadow: 10px 10px 0 rgba(27,15,46,.35);
}
@media (max-width: 860px) { .reserve-card { grid-template-columns: 1fr; } }
.reserve-card p { color: var(--soft); }
.reserve-card h2 { color: var(--yellow); }
.channels { display: grid; gap: .8rem; list-style: none; }
.channels a {
  display: flex; align-items: center; gap: .9rem; text-decoration: none; color: var(--ink); font-weight: 800; font-size: 1.08rem;
  padding: 1rem 1.2rem; border-radius: 18px; border: 3px solid var(--paper); transition: transform .3s var(--ease);
}
.channels a small { display: block; font-weight: 500; font-size: .86rem; }
.channels a:hover { transform: translateX(6px) rotate(-1deg); }
.channels li:nth-child(1) a { background: var(--blue); }
.channels li:nth-child(2) a { background: var(--pink); }
.channels li:nth-child(3) a { background: var(--yellow); }
.channels svg { flex: none; width: 26px; height: 26px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }

/* ---------- Subpage head ------------------------------------------------ */
.page-head { background: var(--ink); color: var(--paper); position: relative; overflow: hidden; padding: clamp(3rem, 8vw, 6rem) 0 clamp(3.5rem, 8vw, 6rem); }
.page-head::before { content: ""; position: absolute; inset: -30%; background: radial-gradient(30% 40% at 85% 30%, rgba(255,95,162,.4), transparent 70%), radial-gradient(30% 40% at 10% 80%, rgba(59,140,255,.35), transparent 70%); }
.page-head .wrap { position: relative; display: grid; grid-template-columns: 1fr auto; gap: 2rem; align-items: center; }
.page-head p { color: var(--soft); max-width: 50ch; font-size: 1.15rem; }
.page-head .mini-rooster { width: clamp(120px, 18vw, 220px); animation: strut 3.2s ease-in-out infinite; filter: drop-shadow(0 14px 18px rgba(0,0,0,.5)); }
@media (max-width: 640px) { .page-head .wrap { grid-template-columns: 1fr; } .page-head .mini-rooster { width: 120px; } }
.crumbs { font-weight: 700; font-size: .92rem; margin-bottom: .8rem; color: var(--soft); }
.crumbs a { color: var(--yellow); }

/* ---------- Contact page ------------------------------------------------ */
.contact-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1.2rem, 3vw, 2.2rem); align-items: start; }
@media (max-width: 860px) { .contact-grid { grid-template-columns: 1fr; } }
.card { border: 4px solid var(--ink); border-radius: var(--r); padding: clamp(1.4rem, 3vw, 2.2rem); box-shadow: var(--pop); background: #fff; }
.card--yellow { background: var(--yellow); }
.card h2 { font-size: clamp(1.8rem, 1.3rem + 2vw, 2.6rem); margin-bottom: .8rem; }
.card .channels a { border-color: var(--ink); }
.week { list-style: none; display: grid; gap: .5rem; margin-top: 1rem; }
.week li { display: flex; justify-content: space-between; gap: 1rem; padding: .7rem .95rem; border-radius: 12px; background: var(--paper); border: 2px solid var(--ink); font-weight: 600; }
.week li b { font-weight: 800; }
.week li.is-event { background: var(--ink); color: var(--yellow); }
.week li.is-closed { background: var(--red); }
.where { margin-top: 1.2rem; font-weight: 600; }
.map-frame { position: relative; width: 100%; aspect-ratio: 16/10; min-height: 300px; border: 4px solid var(--ink); border-radius: var(--r); overflow: hidden; background: var(--paper-2); box-shadow: 8px 8px 0 var(--green); margin-top: clamp(1.5rem, 4vw, 2.5rem); }
.map-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.map-consent { position: absolute; inset: 0; display: grid; place-content: center; gap: 1rem; text-align: center; padding: 1.5rem; }
.map-consent p { color: var(--muted); max-width: 36ch; margin: 0 auto; font-weight: 500; }

/* ---------- Footer ------------------------------------------------------ */
.site-footer { background: var(--ink); color: var(--soft); padding: clamp(3rem, 6vw, 4rem) 0 2rem; }
.footer-grid { display: grid; grid-template-columns: 1.3fr 1fr 1fr; gap: 2rem; align-items: start; }
@media (max-width: 760px) { .footer-grid { grid-template-columns: 1fr; } }
.site-footer img { width: 210px; }
.site-footer h3 { color: var(--yellow); font-size: 1rem; text-transform: uppercase; letter-spacing: .1em; margin-bottom: .7rem; }
.site-footer ul { list-style: none; display: grid; gap: .35rem; }
.site-footer a { color: var(--paper); text-decoration-color: var(--pink); }
.site-footer a:hover { color: var(--yellow); }
.site-footer p { margin: .8rem 0 0; }
.colophon { margin-top: 2.2rem; padding-top: 1.2rem; border-top: 1px solid var(--ink-2); font-size: .9rem; display: flex; flex-wrap: wrap; justify-content: space-between; gap: .5rem; }

/* ---------- Lightbox ---------------------------------------------------- */
.lightbox { position: fixed; inset: 0; z-index: 400; display: none; background: rgba(20,10,34,.96); opacity: 0; transition: opacity .26s; padding: clamp(1rem, 4vw, 3rem); }
.lightbox::before { content: ""; position: absolute; inset: 0 0 auto; height: 8px; background: var(--rainbow); }
.lightbox.is-open { display: grid; grid-template-rows: 1fr auto; }
.lightbox.is-visible { opacity: 1; }
.lb-stage { display: grid; place-items: center; min-height: 0; }
.lb-figure { margin: 0; display: grid; place-items: center; gap: .9rem; max-height: 100%; }
.lb-img { max-width: 100%; max-height: 76vh; width: auto; height: auto; object-fit: contain; border: 5px solid #fff; border-radius: 16px; transition: opacity .2s; }
.lb-img.is-loading { opacity: .3; }
.lb-caption { color: var(--paper); text-align: center; max-width: 60ch; font-weight: 500; }
.lb-counter { margin: .6rem 0 0; text-align: center; color: var(--yellow); font-weight: 800; }
.lb-btn { position: absolute; width: 54px; height: 54px; border-radius: 50%; border: 3px solid var(--ink); background: var(--yellow); color: var(--ink); cursor: pointer; display: grid; place-items: center; box-shadow: 3px 3px 0 var(--pink); transition: transform .3s var(--ease); }
.lb-btn:hover:not(:disabled) { transform: scale(1.1) rotate(-6deg); }
.lb-btn:disabled { opacity: .35; cursor: default; }
.lb-btn svg { width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 3; }
.lb-prev { left: clamp(.5rem, 2vw, 1.5rem); top: 50%; transform: translateY(-50%); }
.lb-next { right: clamp(.5rem, 2vw, 1.5rem); top: 50%; transform: translateY(-50%); }
.lb-prev:hover:not(:disabled), .lb-next:hover:not(:disabled) { transform: translateY(-50%) scale(1.1); }
.lb-close { right: clamp(.5rem, 2vw, 1.5rem); top: clamp(1rem, 2.5vw, 1.8rem); background: var(--pink); color: var(--ink); box-shadow: 3px 3px 0 var(--yellow); }

/* Motion off: keep every tilt, stop anything that moves by itself. */
@media (prefers-reduced-motion: reduce) {
  .marquee-track, .rooster, .page-head .mini-rooster { animation: none !important; }
}

/* E-mail channel: site.js replaces the element with an <a>, so its icon is a
   background rather than a child SVG (data: images are allowed by the CSP). */
.channels .mail-slot, .channels li:nth-child(3) > a {
  padding-left: 3.4rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231b0f2e' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='3'/%3E%3Cpath d='m3 8 9 6 9-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-size: 26px; background-position: 1.2rem center;
}
.channels li:nth-child(3) > .mail-slot { display: flex; align-items: center; min-height: 3.6rem; border-radius: 18px; border: 3px solid var(--paper); background-color: var(--yellow); color: var(--ink); font-weight: 800; }
.card .channels li:nth-child(3) > .mail-slot { border-color: var(--ink); }
