/* ==========================================================================
   LAYOUT — page skeleton, header/nav, section grids, responsive breakpoints.
   Visual "motif" treatments (panels, keyholes, halftone…) live in
   components.css; this file is only concerned with placement and structure.
   ========================================================================== */

/* ---- header / nav ------------------------------------------------------
   The header is a strip of kraft card laid over the page, the way the album
   cover lays its title bars over the collage:
     - fibrous paper texture, not flat beige
     - a torn, wobbling bottom edge rather than a ruled border
     - nav labels KNOCKED OUT of the paper, so the page behind shows through
       the letterforms (background-clip:text over a fixed backdrop)
   ------------------------------------------------------------------------ */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  color: var(--ink);
  /* kraft base + two turbulence washes = paper fibre */
  background-color: var(--paper);
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='f'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4'/%3E%3CfeColorMatrix values='0 0 0 0 0.42 0 0 0 0 0.35 0 0 0 0 0.24 0 0 0 0.16 0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23f)'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='90'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.02 0.6' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0.35 0 0 0 0 0.29 0 0 0 0 0.19 0 0 0 0.09 0'/%3E%3C/filter%3E%3Crect width='400' height='90' filter='url(%23g)'/%3E%3C/svg%3E");
  /* no bottom border — the torn edge below replaces it */
}

/* torn bottom edge: a kraft strip pushed just past the header and chewed by
   the shared #wobble filter, so the bar ends in a rip instead of a rule. */
.site-header::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -9px;
  height: 16px;
  background: var(--paper);
  filter: url(#wobble-header);
  pointer-events: none;
}
/* a thin ink line riding the tear keeps the cartoon outline reading */
.site-header::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -3px;
  height: 3px;
  background: var(--ink);
  filter: url(#wobble-header);
  opacity: 0.85;
  pointer-events: none;
}

.site-header__inner {
  position: relative;
  z-index: 1;
  max-width: var(--content-max);
  margin-inline: auto;
  padding-inline: var(--gutter);
  height: var(--nav-height);
  display: flex;
  align-items: center;
  justify-content: center;     /* logo removed — nav is the whole bar, centred */
  gap: var(--space-3);
}

.primary-nav ul {
  display: flex;
  align-items: center;
  gap: clamp(0.4rem, 1.6vw, 1.4rem);
}

/* KNOCKOUT LABELS ---------------------------------------------------------
   `background-attachment: fixed` pins the fill to the viewport, so the letters
   act as windows onto the same dark ground the page sits on — the cover's
   cut-out lettering. Falls back to solid ink where background-clip:text is
   unsupported, so the nav is never invisible. */
.primary-nav a {
  display: inline-block;
  font-weight: 800;
  text-transform: uppercase;
  font-size: clamp(0.95rem, 1.1vw + 0.6rem, 1.35rem);
  letter-spacing: 0.01em;
  text-decoration: none;
  padding: var(--space-2) var(--space-2);
  color: var(--ink);
  transition: transform 150ms ease, opacity 150ms ease;
}
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .primary-nav a {
    color: transparent;
    background-color: var(--teal-deep);
    background-image:
      url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='3'/%3E%3CfeColorMatrix values='0 0 0 0 0.04 0 0 0 0 0.19 0 0 0 0 0.21 0 0 0 0.55 0'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)'/%3E%3C/svg%3E");
    background-attachment: fixed, fixed;
    -webkit-background-clip: text;
    background-clip: text;
  }
}
/* each label sits at its own slight angle, like separately cut strips */
.primary-nav li:nth-child(odd)  a { transform: rotate(-1.1deg); }
.primary-nav li:nth-child(even) a { transform: rotate(0.8deg); }
.primary-nav a:hover { transform: rotate(0deg) scale(1.06); }

/* current page: the knockout inverts to a solid cut-out tile */
.primary-nav a[aria-current="page"] {
  color: var(--paper-light);
  background: var(--teal);
  -webkit-background-clip: border-box;
  background-clip: border-box;
  filter: url(#wobble-header);
  padding-inline: var(--space-3);
}

.hamburger {
  display: none;
  flex: 0 0 auto;
  padding: var(--space-2);
  color: var(--ink);
  position: absolute;   /* out of flow so it can't shift the centred nav */
  left: var(--gutter);
}
.hamburger__icon { width: 1.75rem; height: 1.75rem; }

/* mobile nav ---------------------------------------------------------- */
@media (max-width: 760px) {
  .hamburger { display: block; }
  .primary-nav {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background-color: var(--paper);
    background-image: inherit;
    max-height: 0;
    overflow: hidden;
    transition: max-height 220ms ease;
    z-index: 2;
  }
  .primary-nav.is-open { max-height: 24rem; }
  .primary-nav ul {
    flex-direction: column;
    align-items: flex-start;
    padding: var(--space-3) var(--gutter) var(--space-4);
    gap: var(--space-2);
  }
  .primary-nav a { display: block; padding: var(--space-2) var(--space-3); }
  /* knockout text over a moving mobile panel reads badly — go solid */
  .primary-nav a,
  .primary-nav a[aria-current="page"] {
    color: var(--ink);
    background: none;
    -webkit-background-clip: border-box;
    background-clip: border-box;
    filter: none;
    transform: none;
  }
  .primary-nav a[aria-current="page"] { color: var(--teal); text-decoration: underline; }
}

/* ---- app / page shell --------------------------------------------------- */
#app {
  position: relative;
}
.page {
  background: var(--teal);
}
.page[hidden] { display: none; }

.section-inner {
  max-width: var(--content-max);
  margin-inline: auto;
  padding: var(--space-6) var(--gutter);
}
.section-inner--narrow { max-width: 46rem; }

.page-head {
  margin-bottom: var(--space-5);
}
.page-kicker {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: var(--fs-small);
  color: var(--paper);
  margin-bottom: var(--space-2);
}

/* ---- home hero ----------------------------------------------------------- */
.hero {
  position: relative;
  /* The header is sticky but still IN FLOW, so it consumes --nav-height at the
     top of the document. Subtract it, or the hero pushes the page past one
     screen. svh keeps mobile browser chrome from cropping it. */
  min-height: calc(100svh - var(--nav-height));
  display: flex;
  align-items: center;
  overflow: hidden;
  isolation: isolate;
}
.hero__bg {
  position: absolute;
  inset: 0;
  z-index: -3;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 30%;
  filter: grayscale(1) contrast(1.15) brightness(0.75);
}
.hero__tint {
  position: absolute;
  inset: 0;
  z-index: -2;
  background: var(--teal);
  mix-blend-mode: multiply;
}
.hero__scrim {
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(180deg, rgba(10,59,65,0.15) 0%, rgba(10,59,65,0.85) 82%);
}
.hero__content {
  position: relative;
  width: 100%;
  padding: var(--space-3) clamp(0.75rem, 2vw, 1.5rem);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
}
.hero__wordmark {
  position: relative;
  /* with the tagline and buttons gone, the mark carries the page on its own */
  width: min(92vw, 1100px);
  height: auto;
}
.hero__tagline {
  font-weight: 600;
  font-size: clamp(1rem, 2.2vw, 1.4rem);
  color: var(--paper-light);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-2);
}

/* ---- generic content grids ------------------------------------------------ */
.grid {
  display: grid;
  gap: var(--space-4);
}
.grid--3 { grid-template-columns: repeat(3, 1fr); }
.grid--2 { grid-template-columns: repeat(2, 1fr); }
@media (max-width: 900px) {
  .grid--3 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  .grid--3, .grid--2 { grid-template-columns: 1fr; }
}

/* ---- music page ----------------------------------------------------------- */
.embed-stack {
  display: grid;
  gap: var(--space-5);
}

/* ---- live / gigs ----------------------------------------------------------- */
.gigs-block + .gigs-block { margin-top: var(--space-6); }
.gig-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

/* ---- photos / masonry ------------------------------------------------------ */
.masonry {
  column-count: 1;
  column-gap: var(--space-3);
}
@media (min-width: 560px) { .masonry { column-count: 2; } }
@media (min-width: 860px) { .masonry { column-count: 3; } }
@media (min-width: 1200px) { .masonry { column-count: 4; } }
.masonry__item {
  break-inside: avoid;
  margin-bottom: var(--space-3);
}

/* ---- about / members -------------------------------------------------------- */
.member-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--space-4);
}
@media (max-width: 860px) { .member-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .member-grid { grid-template-columns: 1fr; } }

/* ---- contact ----------------------------------------------------------------- */
.social-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}
.doc-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}
.impressum {
  background: var(--paper);
  color: var(--ink);
  padding: var(--space-5);
  font-size: var(--fs-small);
  line-height: 1.7;
}

/* ---- utility spacing --------------------------------------------------------- */
.stack > * + * { margin-top: var(--space-3); }
.mt-5 { margin-top: var(--space-5); }
.mt-6 { margin-top: var(--space-6); }

@media (max-width: 480px) {
  .section-inner { padding-block: var(--space-5); }
}
