/* =========================================================
   Bauhaustag Gera — Stylesheet
   Struktur: 1 Fonts · 2 Tokens · 3 Base · 4 Utilities
             5 Sidebar · 6 Mobile-Nav · 7 Hero · 8 Stationen
             9 Impressionen · 9b Lightbox · 10 Unterstützer · 11 Flyer
             12 Footer · 13 Reduced Motion
   ========================================================= */

/* ---------- 1 · Fonts (selbst gehostet, kein externer Request) ---------- */
@font-face{
  font-family:'Oswald';
  src:url('../assets/fonts/oswald-var-latin.woff2') format('woff2');
  font-weight:200 700; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Titillium Web';
  src:url('../assets/fonts/titillium-400-latin.woff2') format('woff2');
  font-weight:400; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Titillium Web';
  src:url('../assets/fonts/titillium-600-latin.woff2') format('woff2');
  font-weight:600; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Titillium Web';
  src:url('../assets/fonts/titillium-700-latin.woff2') format('woff2');
  font-weight:700; font-style:normal; font-display:swap;
}

/* ---------- 2 · Tokens ---------- */
/* Bewusst nur hell: das Bauhaus-Farbschema ist fest gestaltet, keine
   Dark-Variante vorgesehen. Ohne diese Zeile versuchen manche mobilen
   Browser (Android Chrome, Samsung Internet) bei aktivem System-Dark-Mode,
   die Seite automatisch umzufärben — mit unvorhersehbarem Ergebnis bei
   bewusst gesetzten Primärfarben. Ergänzt das <meta name="color-scheme">
   in jedem <head>, das dieselbe Absicht für Browser-UI-Elemente (Adressleiste,
   Formularfelder etc.) signalisiert. */
:root{
  color-scheme:light only;
  --gelb:#ffcd06;
  --rot:#ff0d0d;
  --blau:#2d41ff;
  --ink:#000000;
  --paper:#ffffff;

  --grau:#ecebe8;
  --grau-2:#dedcd7;
  --text:#141413;
  --muted:#5d5c57;

  --font-d:'Oswald','Oswald Fallback',Impact,'Haettenschweiler','Arial Narrow',sans-serif;
  --font-b:'Titillium Web','Titillium Fallback','Segoe UI',system-ui,sans-serif;

  --sidebar:128px;
  --topbar:64px;
  /* 8.9vw trifft bei 1920px genau die 170px Seitenrand aus dem Entwurf */
  --pad-x:clamp(20px,8.9vw,170px);

  --ease:cubic-bezier(.22,1,.36,1);
  --ease-io:cubic-bezier(.65,0,.35,1);
  --line:2px;
}

/* Fallback-Metriken: verhindern Layout-Sprung beim Font-Swap */
@font-face{
  font-family:'Oswald Fallback'; src:local('Arial Narrow'),local('Arial');
  size-adjust:88%; ascent-override:113%; descent-override:28%; line-gap-override:0%;
}
@font-face{
  font-family:'Titillium Fallback'; src:local('Segoe UI'),local('Arial');
  size-adjust:97%; ascent-override:97%; descent-override:24%; line-gap-override:0%;
}

/* ---------- 3 · Base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
  scroll-padding-top:calc(var(--topbar) + 12px);
}
body{
  margin:0;
  padding-left:var(--sidebar);
  background:var(--paper);
  color:var(--text);
  font-family:var(--font-b);
  font-size:17px;
  line-height:1.62;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}
img,svg{display:block;max-width:100%}
img{height:auto}
h1,h2,h3{
  font-family:var(--font-d);
  font-weight:700;
  line-height:1;
  letter-spacing:-.005em;
  margin:0;
  text-wrap:balance;
}
p{margin:0 0 1em}
p:last-child{margin-bottom:0}
a{color:inherit}
button{font:inherit;color:inherit}
::selection{background:var(--gelb);color:#000}

:focus-visible{
  outline:3px solid var(--blau);
  outline-offset:3px;
}
.sprite{position:absolute;width:0;height:0;overflow:hidden}

/* Gilt auf allen Breiten (anders als .nav-open, das nur mobil sperrt) */
body.lightbox-open{overflow:hidden}

/* ---------- 4 · Utilities ---------- */
.wrap{padding-inline:var(--pad-x)}

.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;
}
.skip{
  position:fixed;top:8px;left:8px;z-index:200;
  transform:translateY(-160%);
  background:var(--ink);color:#fff;padding:12px 20px;
  font-family:var(--font-d);text-transform:uppercase;letter-spacing:.08em;
  text-decoration:none;transition:transform .25s var(--ease);
}
.skip:focus{transform:none}

.sectitle{
  font-size:clamp(38px,6.6vw,104px);
  line-height:.98;
  letter-spacing:-.018em;
  margin-bottom:.42em;
}
.sectitle .thin{font-weight:200}
.sectitle strong{font-weight:700}

.lead{
  font-size:clamp(16px,1.35vw,19px);
  color:var(--muted);
  max-width:58ch;
  margin-bottom:2.6em;
}
.lead em{font-style:normal;color:var(--text);border-bottom:2px solid var(--gelb)}

.btn{
  --bg:var(--ink);--fg:#fff;
  display:inline-flex;align-items:center;gap:.6em;
  min-height:52px;padding:0 26px;
  background:var(--bg);color:var(--fg);
  font-family:var(--font-d);font-weight:600;font-size:15px;
  text-transform:uppercase;letter-spacing:.11em;text-decoration:none;
  border:var(--line) solid var(--ink);
  transition:background .3s var(--ease),color .3s var(--ease),transform .3s var(--ease);
}
.btn svg{width:19px;height:19px;transition:transform .35s var(--ease)}
.btn:hover{transform:translateY(-2px)}
.btn:hover svg{transform:translateX(4px)}
.btn--dark:hover{--bg:var(--rot);border-color:var(--rot)}
.btn--ghost{--bg:transparent;--fg:var(--ink)}
.btn--ghost:hover{--bg:var(--gelb);--fg:#000;border-color:var(--gelb)}
.btn--light{--bg:#fff;--fg:#000;border-color:#fff}
.btn--light:hover{--bg:var(--gelb);border-color:var(--gelb)}
.btn[download] svg{transition:transform .35s var(--ease)}
.btn[download]:hover svg{transform:translateY(3px)}

.rnd{
  display:grid;place-items:center;
  width:52px;height:52px;
  background:transparent;color:var(--ink);
  border:var(--line) solid var(--ink);
  cursor:pointer;
  transition:background .3s var(--ease),color .3s var(--ease),opacity .3s;
}
.rnd svg{width:20px;height:20px}
.rnd:hover:not(:disabled){background:var(--ink);color:#fff}
.rnd:disabled{opacity:.22;cursor:not-allowed}

[data-reveal]{opacity:0;transform:translateY(34px)}
/* „fade": nur einblenden, nicht verschieben — für Elemente, die bündig an einer
   Fläche sitzen und bei denen ein Versatz eine Fuge aufreißen würde */
[data-reveal="fade"]{transform:none}
[data-reveal].in{
  opacity:1;transform:none;
  transition:opacity .7s var(--ease),transform .9s var(--ease);
}

/* ---------- 5 · Sidebar ---------- */
.sidebar{
  position:fixed;inset:0 auto 0 0;z-index:60;
  width:var(--sidebar);
  display:flex;flex-direction:column;
  background:var(--grau);
  border-right:1px solid var(--grau-2);
}
.sidebar__brand{
  display:grid;place-items:center;
  padding:22px 20px 18px;
  border-bottom:1px solid var(--grau-2);
}
.sidebar__brand img{width:64px;height:auto}
.sidebar__list{list-style:none;margin:0;padding:0;flex:1}
.sidebar__list a{
  position:relative;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;
  min-height:96px;padding:14px 8px;
  color:var(--ink);text-decoration:none;
  font-family:var(--font-d);font-weight:600;font-size:11.5px;
  text-transform:uppercase;letter-spacing:.085em;text-align:center;
  transition:color .3s var(--ease);
}
.sidebar__list a svg{width:26px;height:26px;transition:transform .4s var(--ease)}
/* Hintergrund als eigene Ebene: animierbar ohne Layout-Arbeit */
.sidebar__list a::before{
  content:'';position:absolute;inset:0;background:var(--ink);
  transform:scaleY(0);transform-origin:bottom;
  transition:transform .42s var(--ease);
}
.sidebar__list a > *{position:relative;z-index:1}
.sidebar__list a:hover{color:var(--ink)}
.sidebar__list a:hover svg{transform:translateY(-3px)}
.sidebar__list a:hover::before{transform:scaleY(.09);background:var(--gelb)}
.sidebar__list a.is-active{color:#fff}
.sidebar__list a.is-active::before{transform:scaleY(1);background:var(--ink)}
.sidebar__list a.is-active:hover::before{transform:scaleY(1);background:var(--ink)}

.sidebar__foot{display:flex;height:10px;margin-top:auto}
.sidebar__foot i{flex:1}
.sidebar__foot i:nth-child(1){background:var(--gelb)}
.sidebar__foot i:nth-child(2){background:var(--rot)}
.sidebar__foot i:nth-child(3){background:var(--blau)}

/* ---------- 6 · Mobile-Nav ---------- */
.topbar{display:none}
.mobilenav{display:none}

/* Steuerelement für das mobile Menü, unabhängig von der Bildschirmbreite
   unsichtbar — sie ist nur im Bereich unter 768px sichtbar mit dem Burger
   verknüpft, muss aber auch auf breiteren Bildschirmen (Desktop/Tablet, wo
   die Sidebar statt der Topbar greift) versteckt bleiben. Vorher stand diese
   Regel nur in der Media Query unten und ließ die Checkbox auf Desktop/Tablet
   als unstyled natives Element oben im Seitenfluss sichtbar werden. */
.nav-toggle{
  position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0;
}

@media (max-width:767px){
  body{padding-left:0;padding-top:var(--topbar)}
  .sidebar{display:none}

  .topbar{
    position:fixed;top:0;left:0;right:0;z-index:90;
    display:flex;align-items:center;justify-content:space-between;
    height:var(--topbar);padding-left:18px;
    background:var(--paper);
    border-bottom:1px solid var(--grau-2);
  }
  .topbar__logo img{width:60px;height:auto}

  .burger{
    display:grid;place-items:center;
    width:var(--topbar);height:var(--topbar);
    background:var(--ink);border:0;cursor:pointer;
  }
  .burger__box{display:block;width:24px;height:16px;position:relative}
  .burger__box i{
    position:absolute;left:0;width:100%;height:2px;background:#fff;
    transition:transform .4s var(--ease),opacity .2s ease;
  }
  .burger__box i:nth-child(1){top:0}
  .burger__box i:nth-child(2){top:7px}
  .burger__box i:nth-child(3){top:14px}

  /* Alles ab hier von #nav-toggle:checked gesteuert statt von [aria-expanded] —
     die Checkbox ist die eine Zustandsquelle für Optik UND Sichtbarkeit, egal
     ob sie per Maus-Klick auf das <label> (funktioniert ohne JavaScript), per
     Tastatur direkt auf der Checkbox, oder von main.js gesetzt wurde (main.js
     hält .checked explizit synchron, auch wenn das Schließen über einen
     Link-Klick oder Escape ausgelöst wird — siehe dort). Ein einziger
     Mechanismus für beide Fälle, statt getrennter No-JS- und JS-Pfade.
     (Die visually-hidden-Basisregel für .nav-toggle selbst steht jetzt weiter
     oben außerhalb dieser Media Query — siehe Abschnitt 6.) */
  .burger__label-close{display:none}
  #nav-toggle:checked ~ .topbar .burger__label-open{display:none}
  #nav-toggle:checked ~ .topbar .burger__label-close{display:inline}
  #nav-toggle:checked ~ .topbar .burger{background:var(--rot)}
  #nav-toggle:checked ~ .topbar .burger__box i:nth-child(1){transform:translateY(7px) rotate(45deg)}
  #nav-toggle:checked ~ .topbar .burger__box i:nth-child(2){opacity:0}
  #nav-toggle:checked ~ .topbar .burger__box i:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
  /* Ohne JS liegt der Tastaturfokus auf der (unsichtbaren) Checkbox oben im
     Dokument, nicht auf dem sichtbaren Icon in der Kopfzeile — ohne diese
     Regel bekämen sehende Tastaturnutzer dort keinen sichtbaren Fokusring zu
     sehen. Mit JS entzieht main.js der Checkbox den Fokus ohnehin (tabindex
     -1) und macht stattdessen das Label direkt fokussierbar; dann greift die
     normale globale :focus-visible-Regel auf dem Label selbst. */
  #nav-toggle:focus-visible ~ .topbar .burger{outline:3px solid var(--blau);outline-offset:3px}

  .mobilenav{
    position:fixed;inset:var(--topbar) 0 0;z-index:80;
    display:block;background:var(--paper);
    clip-path:inset(0 0 100% 0);
    transition:clip-path .55s var(--ease);
  }
  .mobilenav[hidden]{display:none}
  .mobilenav.is-open{clip-path:inset(0 0 0 0)}
  /* Höhere Spezifität (2 IDs) überschreibt bewusst .mobilenav[hidden] oben,
     damit das Menü auch ohne JavaScript aufklappt. Mit JS bleibt die Checkbox
     synchron zum hidden-Attribut (siehe main.js), beide Mechanismen kommen
     dann zum selben Endzustand und stören sich nicht. */
  #nav-toggle:checked ~ #mobilenav{display:block;clip-path:inset(0 0 0 0)}
  .mobilenav__inner{
    height:100%;display:flex;flex-direction:column;justify-content:center;
    padding:0 24px;
  }
  .mobilenav ol{list-style:none;margin:0;padding:0}
  .mobilenav li{
    border-bottom:1px solid var(--grau-2);
    opacity:0;transform:translateY(20px);
  }
  .mobilenav.is-open li{
    opacity:1;transform:none;
    transition:opacity .5s var(--ease),transform .6s var(--ease);
    transition-delay:calc(var(--d) * 55ms + 120ms);
  }
  .mobilenav a{
    display:flex;align-items:baseline;gap:16px;
    padding:20px 4px;
    font-family:var(--font-d);font-weight:700;font-size:clamp(28px,9vw,42px);
    text-transform:uppercase;letter-spacing:-.01em;text-decoration:none;
  }
  .mobilenav a em{
    font-style:normal;font-weight:200;font-size:.42em;color:var(--muted);
    min-width:2.2em;
  }
  .mobilenav a:active{color:var(--rot)}
  .mobilenav__bar{display:flex;height:12px;margin-top:36px}
  .mobilenav__bar i{flex:1}
  .mobilenav__bar i:nth-child(1){background:var(--gelb)}
  .mobilenav__bar i:nth-child(2){background:var(--rot)}
  .mobilenav__bar i:nth-child(3){background:var(--blau)}
  .mobilenav__bar i:nth-child(4){background:var(--ink)}

  body.nav-open{overflow:hidden}
  /* Zusätzlich zur JS-gesetzten .nav-open-Klasse: reine CSS-Variante für den
     No-JS-Fall. :has() ist in allen aktuellen Browsern unterstützt; auf sehr
     alten Browsern ohne :has()-Support sperrt der Hintergrund beim Öffnen des
     Menüs dann einfach nicht mit — rein kosmetisch, keine Funktionseinbuße. */
  body:has(#nav-toggle:checked){overflow:hidden}
}

/* ---------- 7 · Hero ---------- */
.hero{position:relative}
.hero__grid{
  position:relative; /* Anker für .hero__scroll, siehe dort */
  display:grid;
  grid-template-columns:repeat(12,1fr);
  grid-template-rows:repeat(6,1fr);
  gap:var(--line);
  height:calc(100svh - 8px);
  min-height:660px;
  max-height:1080px;
  background:var(--ink);
  border-bottom:var(--line) solid var(--ink);
}
.cell{position:relative;overflow:hidden;min-width:0;min-height:0}
.cell--type  {grid-column:1/8;  grid-row:1/5; background:var(--paper)}
.cell--red   {grid-column:8/10; grid-row:1/3}
.cell--blue  {grid-column:8/10; grid-row:3/5}
.cell--photo {grid-column:10/13;grid-row:1/7; margin:0}
.cell--date  {grid-column:1/4;  grid-row:5/7}
.cell--hatch {grid-column:4/8;  grid-row:5/7; background:var(--paper)}
.cell--yellow{grid-column:8/10; grid-row:5/7}

/* Wipe-Reveal: nur transform, keine Layoutarbeit */
.wipe{display:block;overflow:hidden;width:100%;height:100%}
.wipe__in{display:block;width:100%;height:100%;transform:translateY(101%)}
.fill{display:flex;flex-direction:column;justify-content:center;position:relative}
.cell--red   .fill{background:var(--rot)}
.cell--blue  .fill{background:var(--blau)}
.cell--yellow .fill{background:var(--gelb)}
.cell--date  .fill{background:var(--ink);color:#fff}
.cell--hatch .fill{background:var(--paper)}

html.ready .cell .wipe__in{
  animation:wipeIn .95s var(--ease) both;
  animation-delay:calc(var(--d) * 85ms + 80ms);
}
@keyframes wipeIn{from{transform:translateY(101%)}to{transform:translateY(0)}}

/* Foto: Gegenbewegung, damit das Bild ruhig steht während die Maske läuft */
.cell--photo .wipe__in{overflow:hidden}
/* scale(1.1) im Endzustand lässt Spielraum für den Parallax-Versatz (±4 %) */
.cell--photo img{
  width:100%;height:100%;object-fit:cover;object-position:50% 42%;
  transform:translateY(0) scale(1.1);
}
html.ready .cell--photo img{
  animation:imgIn .95s var(--ease) both;
  animation-delay:calc(var(--d) * 85ms + 80ms);
}
@keyframes imgIn{from{transform:translateY(-8%) scale(1.2)}to{transform:translateY(0) scale(1.1)}}

/* Typo-Block */
.cell--type .wipe,.cell--type .wipe__in{overflow:visible;transform:none;animation:none!important}
.cell--type .wipe__in{
  display:flex;flex-direction:column;justify-content:center;
  height:100%;padding:clamp(24px,4vw,64px) clamp(24px,4.4vw,72px);
}
/* Enthält die Kooperationslogos statt Text. Bewusst knapp bemessen: die Zelle
   hat bei üblichen Laptop-Höhen (1366×768 etc.) unter den CTA-Buttons nur
   2–8px Luft, jede zusätzliche Höhe über das, was die Zeile vorher als reiner
   Text belegte, würde am overflow:hidden der Zelle anschlagen. */
.hero__kicker{margin:0 0 clamp(10px,1.6vw,18px)}
/* Verschiebung nach oben sitzt am <img>, NICHT an .hero__kicker: die Zeile
   selbst läuft über eine riseIn-Keyframe-Animation, die am Ende transform:none
   setzt und per animation-fill-mode:both dauerhaft hält — das gewinnt immer
   gegen eine normal gesetzte transform-Eigenschaft auf demselben Element,
   jede Verschiebung dort würde also lautlos verpuffen (schon getestet).
   Gedeckelt auf das, was die Zellenhöhe hergibt: .cell--type hat eine feste
   Höhe und zentriert ihren Inhalt vertikal — bei diesem größeren Logo bleibt
   bei üblichen Laptop-Höhen kaum noch Luft nach oben (gemessen ohne
   Verschiebung: 1366×768 → 1px frei, 1440×800 → 3px, 1920×1080 → 67px). Volle
   80px würden auf jedem dieser Bildschirme oben anschneiden. Formel aus den
   Messwerten linear angenähert (Kalibrierpunkte 768px→1px, 1080px→67px
   Freiraum) und mit clamp() nach oben auf 80px gedeckelt: wächst mit der
   Fensterhöhe, schneidet nirgends ab. */
.hero__kicker img{
  height:clamp(53px,6.3vw,80px);width:auto;display:block; /* +75%, dann nochmal +50% */
  /* min(100svh,1080px) statt 100svh: .hero__grid hat max-height:1080px, der
     verfügbare Platz in .cell--type wächst also ab 1080px Fensterhöhe nicht
     mehr weiter — die Formel bezog sich aber weiter auf die volle,
     ungedeckelte svh und wuchs dort munter weiter, bis sie den tatsächlich
     vorhandenen Platz überschritt (gefunden bei 2560×1440: 1px Überstand
     oben). Mit dem Deckel bleibt der Wert ab 1080px Fensterhöhe konstant,
     exakt wie das Hero-Raster selbst. */
  transform:translateY(calc(-1 * clamp(0px, min(100svh,1080px) * 0.2115 - 185.4px, 70px))); /* -14px Sicherheitspuffer, dann -10px auf Kundenwunsch */
}
.hero__title{
  font-size:clamp(52px,8.4vw,152px);
  line-height:.86;
  letter-spacing:-.025em;
  text-transform:uppercase;
  margin:0 0 clamp(18px,2.4vw,32px);
}
.hero__title .ln{display:block;overflow:hidden;padding-block:.05em;margin-block:-.05em}
.hero__title .ln__in{display:block;font-weight:inherit;transform:translateY(105%)}
.hero__title .l1{font-weight:200}
.hero__title .l2{font-weight:700}
.hero__title .l3{font-weight:700}
@supports (-webkit-text-stroke:2px #000){
  .hero__title .l3{
    -webkit-text-stroke:clamp(1.5px,.22vw,3px) var(--ink);
    color:transparent;
  }
}
.hero__lead{
  font-size:clamp(15.5px,1.25vw,19px);
  color:var(--muted);max-width:44ch;
  margin:0 0 clamp(22px,2.6vw,36px);
}
.hero__cta{display:flex;flex-wrap:wrap;gap:12px}

.hero__kicker,.hero__lead,.hero__cta{opacity:0;transform:translateY(24px)}
html.ready .hero__title .ln__in{animation:lineUp .95s var(--ease) both}
html.ready .hero__title .ln:nth-child(1) .ln__in{animation-delay:.18s}
html.ready .hero__title .ln:nth-child(2) .ln__in{animation-delay:.28s}
html.ready .hero__kicker{animation:riseIn .8s var(--ease) .1s both}
html.ready .hero__lead  {animation:riseIn .8s var(--ease) .42s both}
html.ready .hero__cta   {animation:riseIn .8s var(--ease) .52s both}
@keyframes lineUp{from{transform:translateY(105%)}to{transform:translateY(0)}}
@keyframes riseIn{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}

/* Deko-Formen */
.deco{position:absolute;inset:0;width:100%;height:100%}
.cell--yellow .deco{padding:18%;inset:0;width:100%;height:100%}

/* Datums-Block */
.cell--date .fill{padding:clamp(20px,2.6vw,40px);justify-content:flex-end;gap:10px}
.cell--date time{display:flex;align-items:baseline;gap:12px;font-family:var(--font-d)}
.cell--date time b{font-size:clamp(44px,5.4vw,90px);font-weight:700;line-height:.8}
.cell--date time em{
  font-style:normal;font-weight:200;font-size:clamp(14px,1.35vw,21px);
  line-height:1.1;text-transform:uppercase;letter-spacing:.05em;
}
/* Zusatzzeile, solange Uhrzeit und Eintritt nicht feststehen */
.cell--date .date-hint{
  font-family:var(--font-b);font-weight:400;font-size:13px;
  letter-spacing:0;text-transform:none;color:#b3b1ab;line-height:1.4;
}

/* Hatch-Block: Zitat der Linienschraffur aus dem Logo */
.cell--hatch .fill{padding:clamp(20px,2.6vw,40px);justify-content:space-between}
.hatch{display:flex;flex-direction:column;gap:clamp(4px,.65vw,9px);padding-top:4px}
.hatch i{display:block;height:2px;background:var(--ink)}
.hatch i:nth-child(1){width:100%}
.hatch i:nth-child(2){width:88%}
.hatch i:nth-child(3){width:74%}
.hatch i:nth-child(4){width:61%}
.hatch i:nth-child(5){width:47%}
.hatch i:nth-child(6){width:33%}
.hatch i:nth-child(7){width:19%}
.hero__claim{
  font-family:var(--font-d);font-weight:200;
  font-size:clamp(20px,2.5vw,40px);line-height:1;
  text-transform:uppercase;margin:0;
}

.hero__scroll{
  position:absolute;left:50%;bottom:18px;translate:-50% 0;z-index:5;
  display:grid;place-items:center;width:44px;height:44px;
  color:var(--ink);background:var(--gelb);
  animation:bob 2.4s ease-in-out infinite;
}
.hero__scroll svg{width:20px;height:20px}
@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(6px)}}

/* ---------- 8 · Stationen ---------- */
.stationen{padding:0 0 clamp(64px,7vw,110px)}

/* Schwarzes Kopfband: läuft von der Navigation bis zur rechten Bildschirmkante
   und stößt ohne Fuge direkt an die Kachelreihe. */
.stationen__head{
  background:var(--ink);
  color:#fff;
  padding-top:clamp(64px,8vw,140px);
  padding-bottom:clamp(64px,8vw,140px);
}
/* Dieser Titel ist mehrzeilig und bricht je nach Fensterbreite auf 2 oder 3
   Zeilen um (Umbruchpunkt reagiert empfindlich auf Wortlänge — schon 1px
   Breitenunterschied kann eine Zeile mehr oder weniger ergeben). Der
   site-weite .sectitle-Wert (line-height:.98) ist enger als Oswalds eigene
   Ascent/Descent-Box; bei einer einzeiligen Headline lässt sich das mit einem
   einzelnen empirisch ermittelten margin-bottom ausgleichen (siehe die anderen
   .sectitle-Vorkommen), bei wechselnder Zeilenzahl aber nicht mehr: der nötige
   Ausgleich hing zusätzlich davon ab, wie viele Zeilen es gerade wurden, und
   ein Wert pro Breakpoint geriet ständig in Konflikt mit dem tatsächlichen,
   nicht an CSS-Breakpoints gebundenen Umbruchpunkt (siehe Sitzungsverlauf für
   das Trial-and-Error). Lösung: eigene, etwas großzügigere Zeilenhöhe statt
   Kurzform. Ascent+Descent von Oswald passen dann in die Zeilenbox, nichts
   ragt mehr heraus, ein einziges margin-bottom genügt für jede Zeilenzahl.
   Geprüft 320–1920px, jeweils per echter getBoundingClientRect()-Messung
   (NICHT per Zeilen-Simulation über canvas.measureText — die traf den realen
   Browser-Umbruch nicht zuverlässig und lieferte Fantasiewerte): 0–1px Rest. */
.stationen__head .sectitle{line-height:1.15;margin-bottom:.01em}

.slider{margin-top:0}
.slider__viewport{width:100%}
.slider__track{
  display:flex;gap:0;
  /* Links bündig an der Navigation (kein Einzug), rechts bleibt der Seitenrand
     stehen — er bildet zugleich den Anschnitt für die nächste Kachel. */
  padding-left:0;
  padding-right:var(--pad-x);
  scroll-padding-inline-start:0;
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scrollbar-width:none;-ms-overflow-style:none;
  cursor:grab;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior-x:contain;
}
.slider__track::-webkit-scrollbar{display:none}
.slider__track:focus-visible{outline-offset:-3px}
.slider__track.is-dragging{cursor:grabbing;scroll-snap-type:none}
/* Während des Ziehens keine Hover-Panels auslösen */
.slider__track.is-dragging .station{pointer-events:none}

.station{
  position:relative;flex:0 0 25%;
  aspect-ratio:346/616;
  overflow:hidden;background:#0d0d0d;
  scroll-snap-align:start;
  container-type:inline-size;
  isolation:isolate;
  -webkit-user-select:none;user-select:none;
}
.station__img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  transform:scale(1.001);
  transition:transform .9s var(--ease);
}
.station__scrim{
  position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(to top,rgba(0,0,0,.78) 0%,rgba(0,0,0,.42) 26%,rgba(0,0,0,0) 56%);
  transition:opacity .5s ease;
}
.station__panel{
  position:absolute;inset:0;background:var(--c);
  transform:translateY(100%);
  transition:transform .62s var(--ease);
  will-change:transform;
}

.station__name{
  font-size:9.2cqw;line-height:.98;
  text-transform:uppercase;letter-spacing:-.012em;
}
.station__num{
  position:absolute;left:5.2cqw;bottom:-.19em;z-index:3;
  font-family:var(--font-d);font-weight:700;
  font-size:42cqw;line-height:.74;
  color:#fff;pointer-events:none;
  transition:color .45s var(--ease);
}

/* Default-Ansicht */
.station__face{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  padding:0 5.2cqw 30cqw;
  color:#fff;
  transition:opacity .32s ease,transform .5s var(--ease);
}

/* Hover-Ansicht */
.station__info{
  position:absolute;inset:0;z-index:2;
  display:flex;flex-direction:column;
  padding:13cqw 5.2cqw 30cqw;
  color:var(--on);
  /* Kein visibility/display-Wechsel: der Text bleibt für Screenreader lesbar.
     pointer-events reicht, um Klicks im geschlossenen Zustand zu unterbinden. */
  pointer-events:none;
  /* Notbremse: überlange Texte laufen nicht in die Ziffer (siehe CLAUDE.md) */
  overflow:hidden;
}
.station__info > *{opacity:0;transform:translateY(16px)}
.station__body{
  /* War 15cqw — bei den längeren finalen Texten (bis 427 Zeichen) reichte der
     Platz auf schmalen Kacheln nicht, der Text lief in die Ziffer. 9cqw schafft
     Raum, ohne den Abstand auf breiten Kacheln sichtbar zu verkleinern. */
  margin-top:9cqw;
  font-size:clamp(15px,5.2cqw,18px);
  line-height:1.55;
}
.station__body p{margin-bottom:.95em}
/* Sehr schmale Kacheln (unter 300px Container-Breite — etwa 320px-Handys oder
   geteilte Fensteransichten) haben sonst zu wenig Höhe für die längeren finalen
   Texte; hier zusätzlich verdichten, statt in die Ziffer laufen zu lassen. */
@container (max-width: 300px){
  .station__info{padding-bottom:22cqw}
  .station__body{margin-top:5cqw;font-size:14px;line-height:1.45}
  .station__body p{margin-bottom:.7em}
}
/* Offen-Zustand */
.station:is(:hover,:focus-within,.is-open) .station__panel{transform:translateY(0)}
.station:is(:hover,:focus-within,.is-open) .station__img{transform:scale(1.06)}
.station:is(:hover,:focus-within,.is-open) .station__scrim{opacity:0}
.station:is(:hover,:focus-within,.is-open) .station__face{opacity:0;transform:translateY(-14px)}
.station:is(:hover,:focus-within,.is-open) .station__num{color:var(--on)}
.station:is(:hover,:focus-within,.is-open) .station__info{pointer-events:auto}
.station:is(:hover,:focus-within,.is-open) .station__info > *{
  opacity:1;transform:none;
  transition:opacity .42s ease,transform .55s var(--ease);
}
.station:is(:hover,:focus-within,.is-open) .station__info > :nth-child(1){transition-delay:.16s}
.station:is(:hover,:focus-within,.is-open) .station__info > :nth-child(2){transition-delay:.24s}

/* Kacheln mit Blindtext dezent markieren (Fotos sind bereits final) */
.station.is-placeholder::after{
  content:'Text folgt';position:absolute;top:0;left:0;z-index:4;
  padding:6px 10px;background:var(--paper);color:var(--ink);
  font-family:var(--font-d);font-size:10px;font-weight:600;
  text-transform:uppercase;letter-spacing:.12em;
}

/* Slider-Bedienung */
.slider__ui{
  display:flex;align-items:center;gap:clamp(16px,2.4vw,34px);
  margin-top:clamp(22px,2.8vw,40px);
}
.slider__count{
  font-family:var(--font-d);font-size:14px;letter-spacing:.08em;
  margin:0;display:flex;gap:5px;color:var(--muted);flex:none;
  font-variant-numeric:tabular-nums;
}
.slider__count b{color:var(--ink);font-weight:700}
.slider__rail{flex:1;height:2px;background:var(--grau-2);position:relative;overflow:hidden}
.slider__bar{
  position:absolute;inset:0 auto 0 0;width:30%;background:var(--ink);
  transform-origin:left;
  transition:transform .28s var(--ease),width .28s var(--ease);
}
.slider__btns{display:flex;gap:10px;flex:none}

/* ---------- 9 · Impressionen ---------- */
.impressionen{padding:clamp(64px,7vw,120px) 0;background:var(--grau);}

/* Dense Auto-Flow statt fest zugewiesener Zellen: jede Kachel trägt nur ihre
   eigene Spannweite (span-tall / span-xl / Standard 1x1), der Browser packt
   die Reihenfolge aus dem Markup lückenlos. Dadurch lässt sich die Anzahl der
   Kacheln jederzeit ändern, ohne die Grid-Koordinaten neu zu berechnen. */
.bento{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  grid-auto-rows:clamp(120px,13vw,210px);
  grid-auto-flow:dense;
  gap:var(--line);
  background:var(--ink);
  border:var(--line) solid var(--ink);
}
.bento__i{position:relative;overflow:hidden;margin:0;background:var(--paper)}
.bento__i img{width:100%;height:100%;object-fit:cover;transition:transform .9s var(--ease)}
.bento__i:hover img{transform:scale(1.06)}
.bento__i svg{width:100%;height:100%}
.bg-yellow{background:var(--gelb)}
.bg-red{background:var(--rot)}
.bg-blue{background:var(--blau)}

.bento__i.span-tall{grid-row:span 2}
.bento__i.span-xl{grid-column:span 2;grid-row:span 2}

/* Fotokacheln sind <button>-Elemente (öffnen die Lightbox) — Browser-Vorgaben
   zurücksetzen, die dekorativen Farbflächen bleiben unveränderte <div>s. */
button.bento__i{
  display:block;width:100%;height:100%;padding:0;border:0;
  background:var(--paper);cursor:pointer;-webkit-tap-highlight-color:transparent;
}
button.bento__i:focus-visible{outline:3px solid var(--blau);outline-offset:-3px}

.bento__credit{
  margin-top:clamp(16px,2vw,26px);
  font-size:14px;color:var(--muted);text-align:right;
}
.bento__credit a{
  color:var(--text);text-decoration:underline;text-underline-offset:3px;
  text-decoration-thickness:1.5px;
}
.bento__credit a:hover{text-decoration-thickness:3px}

/* ---------- 9b · Lightbox ---------- */
.lightbox{
  position:fixed;inset:0;z-index:300;
  display:grid;place-items:center;
  opacity:0;
  transition:opacity .3s var(--ease);
}
.lightbox[hidden]{display:none}
.lightbox.is-open{opacity:1}
.lightbox__scrim{
  position:absolute;inset:0;width:100%;height:100%;
  background:rgba(10,10,10,.94);border:0;padding:0;cursor:zoom-out;
}
.lightbox__frame{
  position:relative;z-index:1;margin:0;
  max-width:min(92vw,1400px);max-height:88svh;
  display:flex;
  transform:scale(.96);transition:transform .35s var(--ease);
}
.lightbox.is-open .lightbox__frame{transform:scale(1)}
.lightbox__img{
  max-width:min(92vw,1400px);max-height:88svh;
  width:auto;height:auto;object-fit:contain;
  box-shadow:0 30px 80px -20px rgba(0,0,0,.6);
}
.lightbox__close,.lightbox__nav{
  position:absolute;z-index:2;
  display:grid;place-items:center;
  width:52px;height:52px;
  background:rgba(20,20,19,.55);color:#fff;
  border:1.5px solid rgba(255,255,255,.35);border-radius:50%;
  cursor:pointer;
  transition:background .25s var(--ease),border-color .25s var(--ease);
}
.lightbox__close svg,.lightbox__nav svg{width:22px;height:22px}
.lightbox__close:hover,.lightbox__nav:hover{background:var(--gelb);color:#000;border-color:var(--gelb)}
.lightbox__close{top:clamp(14px,2.4vw,32px);right:clamp(14px,2.4vw,32px)}
.lightbox__prev{left:clamp(10px,2vw,32px);top:50%;transform:translateY(-50%)}
.lightbox__next{right:clamp(10px,2vw,32px);top:50%;transform:translateY(-50%)}
.lightbox__nav:disabled{opacity:.3;cursor:not-allowed}
.lightbox__nav:disabled:hover{background:rgba(20,20,19,.55);color:#fff;border-color:rgba(255,255,255,.35)}
.lightbox__count{
  position:absolute;left:50%;bottom:clamp(14px,2.4vw,28px);translate:-50% 0;z-index:2;
  margin:0;color:#fff;font-family:var(--font-d);font-size:13px;letter-spacing:.08em;
  font-variant-numeric:tabular-nums;
}

@media (max-width:600px){
  .lightbox__prev{left:6px}
  .lightbox__next{right:6px}
  .lightbox__close,.lightbox__nav{width:44px;height:44px}
  .lightbox__close{top:10px;right:10px}
}

/* ---------- 10 · Unterstützer ---------- */
.unterstuetzer{padding:clamp(72px,9vw,140px) 0}
.partners{
  list-style:none;margin:0 0 clamp(46px,6vw,86px);padding:0;
  display:grid;grid-template-columns:repeat(4,1fr); /* 8 Logos → 2 volle Reihen */
  gap:var(--line);background:var(--grau-2);
  border:var(--line) solid var(--grau-2);
}
.partners li{
  display:grid;place-items:center;
  /* War 16/7 — bei zwei Spalten (Mobil) füllte das Logo die Zelle bereits exakt
     bis zum Rand aus. Um weiter zu wachsen, muss die Zelle selbst mitwachsen,
     nicht nur die max-height des Logos, sonst gäbe es dort keinen Effekt mehr
     bzw. einen Überstand. Verhältnis um denselben Faktor gestaucht (+20%
     Zellhöhe bei gleicher Breite), damit es auf jeder Rasterbreite wirkt. */
  aspect-ratio:16/8.4;background:var(--paper);
}
.partners img{max-width:94%;max-height:88px;width:auto;height:auto} /* +30%, dann nochmal +20% */
/* Graustufen-Effekt nur bei echtem Hover (Maus) — auf Touch-Geräten bliebe das
   Logo sonst dauerhaft ausgegraut, weil es dort kein Hover gibt, das es auflöst. */
@media (hover:hover){
  .partners img{
    filter:grayscale(1);opacity:.72;
    transition:filter .35s var(--ease),opacity .35s var(--ease);
  }
  .partners li:hover img{filter:grayscale(0);opacity:1}
}
.cta-strip{
  display:flex;align-items:center;justify-content:space-between;
  flex-wrap:wrap;gap:28px;
  padding:clamp(30px,4vw,56px);
  background:var(--ink);color:#fff;
}
.cta-strip h3{font-size:clamp(24px,3vw,42px);text-transform:uppercase;margin-bottom:.35em}
.cta-strip p{color:#b9b8b3;max-width:46ch;margin:0}

/* ---------- 11 · Flyer ---------- */
.flyer{padding:clamp(72px,9vw,140px) 0 clamp(80px,10vw,150px);background:var(--grau)}
.flyer__grid{
  display:grid;grid-template-columns:1fr 1fr;
  gap:clamp(32px,5vw,90px);align-items:center;
}
/* Statuszeile statt Download-Button, solange das PDF noch nicht vorliegt.
   Bewusst kein .btn — keine Umrandung, kein Cursor:pointer, nichts, was
   Klickbarkeit vortäuscht. Farbe ist --ink statt --gelb: der Flyer-Hintergrund
   ist hell (--grau), Gelb auf Hellgrau hätte zu wenig Kontrast (vgl. die
   Coming-Soon-Stellen in Hero/Footer, die beide auf dunklem Grund liegen). */
.flyer__status{
  font-family:var(--font-d);font-weight:700;font-size:clamp(19px,1.8vw,23px);
  text-transform:uppercase;letter-spacing:.03em;color:var(--ink);
  margin:1.4em 0 .3em;
}
.flyer__note{margin:0;font-size:14.5px;color:var(--muted)}
.mock{
  position:relative;aspect-ratio:1/1.414;max-width:420px;margin-inline:auto;
  background:var(--paper);box-shadow:0 30px 70px -30px rgba(0,0,0,.45);
  overflow:hidden;
  transition:transform .7s var(--ease);
}
.flyer__mock:hover .mock{transform:rotate(-1.4deg) scale(1.02)}
.mock__b{position:absolute}
.mock__b--y{inset:0 0 62% 0;background:var(--gelb)}
.mock__b--r{left:0;top:38%;width:38%;height:22%;background:var(--rot)}
.mock__b--k{right:0;top:38%;width:24%;height:22%;background:var(--ink)}
.mock__b--b{left:0;bottom:0;width:100%;height:14%;background:var(--blau)}
.mock__t{
  position:absolute;left:8%;bottom:22%;
  font-family:var(--font-d);font-weight:200;font-size:12%;
  line-height:.92;text-transform:uppercase;
}
.mock__t b{font-weight:700}
.mock__l{
  position:absolute;left:8%;top:8%;width:26%;height:26%;
  border:3px solid var(--ink);border-radius:100% 0 0 0;
}

/* ---------- 12 · Footer ---------- */
.footer{background:var(--ink);color:#e9e8e4}
.footer__grid{
  display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;
  gap:clamp(26px,3.4vw,56px);
  padding-block:clamp(52px,6vw,90px);
}
.footer__brand img{width:96px;height:auto;margin-bottom:20px}
.footer__brand p{color:#a3a19b;font-size:15.5px}
.footer__col h2{
  font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.16em;
  color:var(--gelb);margin-bottom:14px;
}
.footer__col p{font-size:15.5px;color:#c9c7c1}
.footer__col .footer__soon{
  font-family:var(--font-d);font-weight:700;font-size:clamp(21px,2vw,27px);
  line-height:1;text-transform:uppercase;letter-spacing:.02em;
  color:var(--gelb);margin-bottom:.42em;
}
.footer__links{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.footer__links a{display:inline-block;padding-block:9px} /* 44px Tippfläche */
.footer a{
  color:#e9e8e4;text-decoration:none;
  border-bottom:1px solid rgba(255,255,255,.28);
  transition:border-color .3s var(--ease),color .3s var(--ease);
}
.footer a:hover{color:var(--gelb);border-color:var(--gelb)}
.footer__bar{display:flex;height:12px}
.footer__bar i{flex:1}
.footer__bar i:nth-child(1){background:var(--gelb)}
.footer__bar i:nth-child(2){background:var(--rot)}
.footer__bar i:nth-child(3){background:var(--blau)}
.footer__bar i:nth-child(4){background:#fff}

/* ---------- Toast (nur für Platzhalter-Hinweise) ---------- */
.toast{
  position:fixed;left:50%;bottom:26px;z-index:150;
  translate:-50% 0;
  padding:14px 22px;
  background:var(--ink);color:#fff;
  font-family:var(--font-d);font-size:13px;font-weight:600;
  text-transform:uppercase;letter-spacing:.1em;
  border-left:5px solid var(--gelb);
  opacity:0;transform:translateY(14px);pointer-events:none;
  transition:opacity .3s var(--ease),transform .4s var(--ease);
}
.toast.is-on{opacity:1;transform:none}

/* ---------- Rechtstexte (Unterseiten) ---------- */
/* Nur oben/unten setzen — die Kurzform „padding" würde auch links/rechts
   überschreiben und damit den Seitenrand aus .wrap (padding-inline) auf 0
   zurücksetzen. Genau das war der Bug: Text saß bündig an der Sidebar-Kante. */
.legal{padding-top:clamp(72px,9vw,130px);padding-bottom:clamp(60px,7vw,110px);max-width:none}
.legal__body{max-width:74ch}
.legal__body h2{
  font-size:clamp(21px,2.4vw,30px);text-transform:uppercase;
  margin:2.2em 0 .6em;padding-top:.5em;border-top:var(--line) solid var(--ink);
}
.legal__body h3{font-size:19px;margin:1.6em 0 .4em}
.legal__body a{color:var(--text)}
.legal__body ul{margin:0 0 1.3em;padding-left:1.2em}
.legal__body li{margin-bottom:.5em;list-style:square}
.legal__body li::marker{color:var(--gelb)}
.legal__body li:last-child{margin-bottom:0}
.legal__back{
  display:inline-flex;align-items:center;gap:.55em;margin-bottom:2.4em;
  font-family:var(--font-d);font-size:13px;font-weight:600;
  text-transform:uppercase;letter-spacing:.12em;text-decoration:none;
}
.legal__back svg{width:17px;height:17px;transform:rotate(180deg);transition:transform .3s var(--ease)}
.legal__back:hover svg{transform:rotate(180deg) translateX(4px)}

/* ---------- Breakpoints ---------- */
/* Kachelbreite: 4 nebeneinander nur, solange der Mengentext dabei ≥16px bleibt.
   Darunter stufenweise weniger Kacheln, statt die Schrift zu quetschen.
   Die Deckel per min() verhindern, dass eine Kachel höher wird als der Bildschirm. */
@media (max-width:1549px){
  .station{flex:0 0 33.3333%}
}
/* max(320px, …) verhindert, dass die 45svh-Deckelung auf sehr flachen
   Fenstern (Querformat-Handys: schmale svh, aber Breite schon im
   Desktop-Bereich) die Kachel unter die Breite drückt, die der längste
   Stationstext (427 Zeichen, Villa Mazur) noch ohne Überlauf braucht —
   320px ist die kleinste bereits geprüfte sichere Containerbreite
   (siehe „Textlänge" weiter oben). Ohne den Floor lief bei 812×375 der
   Text in 5 von 7 Kacheln über. */
@media (max-width:1199px){
  .station{flex:0 0 max(320px, min(45%,430px,45svh))}
}
@media (max-width:1099px){
  :root{--sidebar:104px}
  .station{flex:0 0 max(320px, min(52%,430px,45svh))}
  .hero__grid{grid-template-columns:repeat(8,1fr);grid-template-rows:repeat(7,1fr)}
  .cell--type  {grid-column:1/6;grid-row:1/5}
  .cell--red   {grid-column:6/7;grid-row:1/3}
  .cell--blue  {grid-column:7/9;grid-row:1/3}
  .cell--photo {grid-column:6/9;grid-row:3/8}
  .cell--date  {grid-column:1/3;grid-row:5/8}
  .cell--hatch {grid-column:3/6;grid-row:5/8}
  .cell--yellow{grid-column:6/7;grid-row:1/3;display:none}
  .footer__grid{grid-template-columns:1fr 1fr}
  .flyer__grid{grid-template-columns:1fr;gap:44px}
  .flyer__mock{order:-1}
}
@media (max-width:767px){
  :root{--line:2px;--pad-x:20px}
  body{font-size:16.5px}
  .hero__grid{
    grid-template-columns:repeat(4,1fr);
    grid-template-rows:auto auto auto;
    height:auto;min-height:0;max-height:none;
  }
  .cell--type  {grid-column:1/5;grid-row:1/2;min-height:74svh}
  /* Kundenwunsch: Kooperationslogo mobil höher, Headline unverändert lassen.
     Die Verschiebung sitzt (wie am Desktop-Gegenstück oben) am <img>, nicht
     an .hero__kicker — verschiebt also nur das Logo, nicht den Rest des
     vertikal zentrierten Blocks (Headline/Lead/CTA bleiben an ihrer Stelle,
     geprüft per direktem Vorher/Nachher-Vergleich der Titel-Position).

     Ursprünglich volle 80px gewünscht; passt aber nicht auf jedem Gerät. Die
     freie Luft zwischen Logo-Oberkante und der Kachel-Clipping-Kante
     (.cell{overflow:hidden}) hängt nicht nur von der Fensterhöhe ab, sondern
     auch von der Breite: schmalere Breiten lassen die Headline in mehr
     Zeilen umbrechen, was zusätzliche Höhe frisst und die freie Luft
     verkleinert — eine reine Höhenformel (wie beim Desktop-Pendant) hätte
     bei z. B. 360×740 real nur ~68px Luft, eine reine 812er-Kalibrierung
     aber ~98px vorhergesagt und damit oben angeschnitten. Deshalb zwei
     Terme: ein Höhenterm (Basiswert, wächst mit 100svh) und ein
     Breitenkorrekturterm, der ab 375px Breite auf 0 geht und darunter
     zusätzlich Luft abzieht. Kalibriert an acht echten Gerätegrößen
     (320×568 bis 412×915).

     Auf Kundenwunsch danach um 40px nach unten korrigiert — Formel-Konstante
     und Deckel gleichermaßen um 40 verschoben (wie schon beim Desktop-Logo
     bei einer vergleichbaren Nachjustierung), damit die Korrektur auf jeder
     Bildschirmgröße gleich wirkt statt nur bei einer. Deckel jetzt bei 40px
     statt 80px; auf sehr schmalen/kurzen Geräten (deren Wert vorher schon
     unter 40px lag) verschiebt sich der Wert 1:1 mit nach unten, geht dort
     aber weiterhin nicht unter 0px (clamp-Untergrenze). */
  .hero__kicker img{
    transform:translateY(calc(-1 * clamp(
      0px,
      100svh * 0.37 - 243.2px - max(0px, (375px - 100vw) * 0.837),
      40px
    )));
  }
  .cell--photo {grid-column:1/4;grid-row:2/3;aspect-ratio:346/380}
  .cell--red   {grid-column:4/5;grid-row:2/3}
  .cell--blue  {display:none}
  /* kein aspect-ratio: die Kachel füllt die Zeilenhöhe des Datumsblocks */
  .cell--yellow{grid-column:1/2;grid-row:3/4;display:block}
  .cell--date  {grid-column:2/5;grid-row:3/4}
  .cell--hatch {display:none}
  .cell--date .fill{padding:22px}
  .hero__scroll{display:none}

  .station{flex:0 0 84%}
  .slider__ui{gap:14px}
  .rnd{width:46px;height:46px}

  /* span-xl belegt bei 2 Spalten automatisch die volle Breite (span 2 von 2) */
  .bento{grid-template-columns:repeat(2,1fr);grid-auto-rows:clamp(110px,30vw,190px)}
  .bento__credit{text-align:left}

  .partners{grid-template-columns:repeat(2,1fr)}
  .footer__grid{grid-template-columns:1fr;gap:34px}
  .cta-strip{flex-direction:column;align-items:flex-start}
}
@media (max-width:400px){
  .station{flex:0 0 88%}
}

/* Touch: kein Hover — Panel per Tap, Hinweis einblenden */
@media (hover:none){
  .station__face::after{
    content:'Tippen für Infos';
    display:block;margin-top:2.6cqw;
    font-family:var(--font-b);font-size:3.4cqw;font-weight:600;
    letter-spacing:.06em;text-transform:uppercase;opacity:.82;
  }
  .btn:hover{transform:none}
}

/* ---------- 13 · Reduced Motion ---------- */
@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;
  }
  [data-reveal]{opacity:1;transform:none}
  .wipe__in,.cell--photo img,.hero__title .ln__in{transform:none!important}
  .hero__kicker,.hero__lead,.hero__cta{opacity:1;transform:none}
  .hero__scroll{animation:none}
}

/* Ohne JS: nichts bleibt unsichtbar */
html.no-js [data-reveal]{opacity:1;transform:none}
html.no-js .wipe__in,
html.no-js .cell--photo img,
html.no-js .hero__title .ln__in{transform:none}
html.no-js .hero__kicker,
html.no-js .hero__lead,
html.no-js .hero__cta{opacity:1;transform:none}
