/* ══ Gestaltung „Farbregal, blaues Menü" ═══════════════════════════════════
   Das Stylesheet der Website — **das einzige**. Bis zum 2026-08-24 stand daneben
   ein zweiter Entwurf („heutiger Stand"); der Verlag hat entschieden, und er ist
   entfernt (Vorgang #9). Diese Datei hieß bis dahin `design-farbregal.css`.

   ⚠ **Kommentare, die auf `style.css` verweisen, meinen den entfallenen
   Entwurf** — dort stand die jeweils gleichlautende Regel. Wo eine solche
   Fundstelle noch etwas erklärt, steht sie inzwischen in CLAUDE.md; wo sie nur
   Geschichte ist, ist sie stehengeblieben. **Neue Verweise dieser Art gibt es
   nicht mehr:** Es gibt keine zweite Datei, in der man nachsehen könnte.

   Der Gedanke: Die Seite wird von den Buchfarben getragen. Jeder Titel hat eine
   aus seinem Cover abgeleitete Basisfarbe (`Book.accent_color`); die Templates
   geben sie als `--akzent` an jeder Buchkachel mit. Damit die Farben wirken,
   tritt alles andere zurück: ein dunkles Band als Kopf, weißer Grund, keine
   zweite Zierfarbe.

   Erkennbar als Nachfolger von zuklampen.de: Raleway/Open Sans, Versalnavigation,
   Verlagsblau als Akzent. Anders als dort: asymmetrisches Raster statt
   gleichgroßer Kacheln, Farbfläche statt Weißraum.

   ⚠ **Die Klassennamen stammen aus dem abgelösten Entwurf und sind noch nicht
   angeglichen** — `.slider` ist kein Schieber, sondern die Farbwand,
   `.slider__slide` ein Feld darin. Das Umbenennen berührt Vorlagen, Stylesheet
   und die Kommentare, die auf die Namen verweisen; es steht aus.              */

/* ── Schriften (selbst gehostet, keine Google-Fonts-Einbindung) ── */
@font-face { font-family:'Raleway'; font-style:normal; font-weight:400; font-display:swap;
  src:url('../fonts/raleway-regular.woff2') format('woff2'); }
@font-face { font-family:'Raleway'; font-style:normal; font-weight:700; font-display:swap;
  src:url('../fonts/raleway-700.woff2') format('woff2'); }
@font-face { font-family:'Raleway'; font-style:italic; font-weight:400; font-display:swap;
  src:url('../fonts/raleway-italic.woff2') format('woff2'); }
@font-face { font-family:'Open Sans'; font-style:normal; font-weight:400; font-display:swap;
  src:url('../fonts/opensans-regular.woff2') format('woff2'); }
@font-face { font-family:'Open Sans'; font-style:normal; font-weight:700; font-display:swap;
  src:url('../fonts/opensans-700.woff2') format('woff2'); }
@font-face { font-family:'Open Sans'; font-style:italic; font-weight:400; font-display:swap;
  src:url('../fonts/opensans-italic.woff2') format('woff2'); }

:root {
  --blau:   #003D7A;   /* Verlagsblau aus logo-blue.svg – Akzent und Verweise */
  /* Zierlinien und Flächen, die AUF dem Menüband liegen: das Verlagsblau wäre
     dort auf dem blauen Band unsichtbar (Kontrast 1,0). Ein aufgehelltes Weiß
     trägt dagegen auf beiden Bändern. */
  --auf-menue: rgba(255,255,255,.32);

  /* ── Die Kachel der Kachelstreifen (Vorgang #220) ──
     Miriam Hirschauer am 2026-08-26: „Die Cover sind recht groß in der
     Übersicht. Dadurch gehen weniger in eine Zeile und es wird weniger wuselig.
     Wenn sie 10–20 % größer werden, sollte das gut aussehen."

     ⚠ **150 px sind gemessen, nicht die Mitte ihres Fensters.** Entschieden hat
     es das Telefon: Bei 375 px passen heute 2,32 Kacheln ins Bild, bei 143 px
     noch 2,13, bei 150 px 2,05 — und bei 156 px (ihrer Obergrenze) **1,98**.
     Dort kippt die zweite Kachel unter „ganz sichtbar", und mit ihr der
     Anschnitt der dritten, an dem man sieht, dass es weitergeht. Am Schreibtisch
     bringt 150 px genau das Gewünschte: 8 Kacheln werden 7.

     ⚠ **Die Höhe muss mit, sonst passiert nichts.** Die Cover sitzen mit
     `object-fit: contain` in der Box; ihr Verhältnis ist hochkant, es begrenzt
     also die **Höhe**. Eine breitere Box allein ließe sie unverändert — gemessen
     an zwei Umschlägen, die heute 105 und 127 px breit sind, nicht 130.
     180 × 150/130 = 208.

     ⚠ **Ein Token, weil die Zahl vierfach dastand** (`flex`, `width`, zweimal
     `max-width`). Wer eine davon ändert und die anderen übersieht, bekommt eine
     Kachel, die breiter ist als ihr Cover — und sucht den Fehler im Bild. */
  --kachel: 150px;
  --kachel-cover: 208px;
  --dunkel: #0f2132;   /* dunkler Grundton: Überschriften, Rahmen, Menübänder */
  /* Farbe der Menübänder in Kopf und Fuß – ausgelagert, damit die Spielart
     „Farbregal mit blauem Menü" sie allein austauschen kann (siehe Ende dieser
     Datei). Alles außerhalb der Bänder bleibt dadurch unberührt. */
  /* Kopf- und Fußband. ⚠ **Nicht `--dunkel`**: Was daran hängt (Überschriften,
     Rahmen der Kategorieknöpfe, Suchformular) bleibt dunkel, die Bänder tragen
     das Verlagsblau — so hat der Verlag am 2026-08-24 entschieden. Der Ton
     stammt aus `logo-blue.svg`. */
  --menue:  #003D7A;
  --grau:   #f7f7f7;
  --text:   #222222;
  --leise:  #6a7480;
  --raleway:  'Raleway', system-ui, sans-serif;
  --opensans: 'Open Sans', system-ui, sans-serif;
  /* Rückfall, falls eine Kachel ohne --akzent auskommen muss – dasselbe
     Verlagsblau wie oben, damit nirgends ein zweiter Blauton auftaucht. */
  --akzent: #003D7A;

  /* Breite einer Textspalte. ⚠ **Die Zahl ist gemessen, nicht übernommen.**
     Open Sans in 16 px setzt hier 8,97 px je Zeichen (nachgemessen über eine
     Probe aus 59 Zeichen, auf drei Seiten gleich); 39 rem sind 624 px und
     damit **70 Zeichen** je Zeile. Empfohlen sind 45–75; deutsche Prosa mit
     ihren Zusammensetzungen liegt gern am oberen Rand.

     ⚠ **Sie ist eingeführt worden, weil Fließtext ohne eigene Spalte über die
     volle Containerbreite lief.** Gemessen am 2026-08-24: Pressestimme und
     Autorenbiografie **133 Zeichen**, die Vita auf der Buchseite 121, die
     Buchbeschreibung 100. Bei 133 Zeichen verliert das Auge beim Rücksprung
     die Zeile — das ist kein Geschmack, sondern der Grund, aus dem es die
     Empfehlung gibt.

     ⚠ **Wer eine neue Stelle mit Fließtext baut, nimmt dieses Token.** Eine
     zweite hingeschriebene Breite wäre die nächste Stelle, an der es
     auseinanderläuft — `.seite-text` stand auf 46 rem, `.news-detail` auf
     760 px, und beide meinten dasselbe. */
  --textbreite: 39rem;

  /* ── Schriftgrade ─────────────────────────────────────────────────────────
     ⚠ **Eine Skala, seit dem 2026-08-24 — vorher waren es 43 Werte.** Gemessen
     im Stylesheet: 43 verschiedene `font-size`-Angaben in rem, die Schritte
     dazwischen meist 1–5 %. Acht Grade lagen zwischen 11,8 und 13,6 px, vier
     zwischen 15,7 und 16,5; allein auf der Startseite standen 16 verschiedene.
     **Das war keine Skala, sondern ein Kontinuum** — und ein Unterschied von
     0,3 px ist keine Entscheidung, sondern ein Versehen, das sich fortpflanzt.

     Die neun Stufen sind **nicht gerechnet, sondern an den vorhandenen Rollen
     ausgerichtet**: Jede sitzt dort, wo im Bestand ohnehin ein Häufungspunkt
     lag. Deshalb ist die größte Zuordnung nur 5,6 % entfernt — bei einem
     11-px-Label 0,2 px, beim Seitentitel 1,6 px.

     | Stufe | rem | px | Rolle |
     |---|---|---|---|
     | 1 | 0,70 | 11,2 | kleinste Marken: Rollen, Zählungen, Aufschriften |
     | 2 | 0,78 | 12,5 | Kleingedrucktes: Urheber und Preis der Kachel, Daten |
     | 3 | 0,85 | 13,6 | Menüband, Anrisse, kleiner Fließtext |
     | 4 | 0,92 | 14,7 | Sekundärtext neben dem Fließtext |
     | 5 | 1,00 | 16,0 | **Fließtext** |
     | 6 | 1,10 | 17,6 | Kartentitel, Bandüberschriften |
     | 7 | 1,25 | 20,0 | Zwischenüberschriften |
     | 8 | 1,45 | 23,2 | große Zitate |
     | 9 | 1,90 | 30,4 | Seitentitel |

     ⚠ **Eine Größe steht bewusst außerhalb**, weil sie keine Schrift bemisst,
     sondern eine Form: `.buchfahne` (0,52 rem — die Breite des Fähnchens hängt
     über `line-height` an ihr). Bis zum 14.09.2026 war es auch der Platzhalter
     der Rasterkachel. Wer sie in die Skala zwingt, verschiebt keine Schrift,
     sondern eine Geometrie.

     ⚠ **Die vier `clamp()`-Größen der Bühne bleiben ebenfalls außen vor.** Sie
     wachsen mit der Fensterbreite; eine Stufe ist ein fester Wert. Beides
     zusammenzubringen hieße, die eine oder die andere Eigenschaft aufzugeben.

     ⚠ **Wer einen Schriftgrad setzt, nimmt eine Stufe.** Eine hingeschriebene
     Zahl ist die 44. — und in zwei Monaten wieder ein Kontinuum. */
  /* ⚠ **Die ganze Skala ist am 2026-08-31 um 15 % angehoben worden**
     (Vorgang #189). Miriam Hirschauer auf die beiden vorgelegten Fassungen:
     „größer insgesamt ist besser." Gefragt war, ob es reicht, wenn nur die
     großen Stufen wachsen — die Antwort war nein.

     ⚠ **Der Faktor ist nicht gewählt, sondern der des Musters.** Sie hat eine
     Fassung gesehen, in der die drei großen Stufen um rund 15 % standen
     (1,45 / 1,68 / 2,20 rem), und die als zu klein beurteilt — aber nicht die
     Stufen, sondern den Umfang. 1,15 auf alle neun trifft die gesehenen Werte
     wieder (1,44 / 1,67 / 2,19) und zieht den Rest nach. Ein neuer Faktor
     hätte ihre Beurteilung entwertet.

     ⚠ **Die Verhältnisse bleiben, weil alle mit demselben Faktor gehen.** Eine
     Skala, bei der die kleinen Stufen stärker wachsen als die großen, wäre eine
     andere Skala — und die hat niemand vorgelegt. */
  --schrift-1: 0.80rem;
  --schrift-2: 0.90rem;
  --schrift-3: 0.98rem;
  --schrift-4: 1.06rem;
  --schrift-5: 1.15rem;
  --schrift-6: 1.27rem;
  --schrift-7: 1.44rem;
  --schrift-8: 1.67rem;
  --schrift-9: 2.19rem;

}

* { box-sizing: border-box; }

/* ⚠ **Der Fließtext hängt an keiner Stufe, sondern hier — und genau das war
   die Frage von Vorgang #189.** „Reicht es, wenn die großen Überschriften
   wachsen, oder soll auch der Fließtext größer werden?" Antwort: auch er.
   16 → 18 px, also dieselben rund 15 % wie die Skala; DuMont, das Vorbild aus
   der Meldung, setzt ihn auf 18.

   ⚠ **In Pixeln, nicht in rem — und das ist der Grund, warum die Seite nicht
   einfach zoomt.** `rem` hängt an der Wurzel, nicht am Body; Abstände, Raster
   und `--textbreite` bleiben also, wo sie sind. Nur die Schrift wächst.

   ⚠ **Die Zeilenlänge wird dadurch besser, nicht schlechter.** `--textbreite`
   ist auf 624 px gerechnet; bei 16 px standen dort gemessene 74 Zeichen je
   Zeile, also über den empfohlenen 75 — bei 18 px sind es rund 65, die Mitte
   des Bereichs 45 bis 75. **Wer die Breite mitwachsen lässt, macht das
   zunichte.** */
body {
  margin: 0;
  font-family: var(--opensans);
  font-size: 18px; line-height: 1.6;
  color: var(--text); background: #fff;
  -webkit-font-smoothing: antialiased;
}

/* ⚠ **`display: block` ist hier kein Schönheitsstrich, sondern die Behebung
   eines sichtbaren Fehlers** (→ Vorgang #87, 14.08.2026). Ohne ihn ist ein Bild
   ein Textzeichen: Es sitzt auf der Schriftlinie, und darunter bleibt der Platz
   für Unterlängen stehen. Der Coverkasten der damaligen Rasterkachel war dadurch **höher als das
   Bild** — gemessen 157,8 gegen 151,2 px, also 6,6 px Überstand —, und weil
   der weiße 1-px-Ring am Behälter hängt, zeichnete er ein Rechteck, das unten
   über den Umschlag hinausstand. Gemeldet als „Rechteck unter dem Cover“.

   ⚠ **`style.css` hatte die Zeile von Anfang an** (dort Zeile 61). Der Fehler
   steckte also nicht in einer Gestaltungsentscheidung, sondern in einer
   fehlenden Zeile beim Nachbauen des Zurücksetzens — und er blieb unsichtbar,
   solange niemand eine farbige Fläche hinter die Bilder legte. */
img { display: block; max-width: 100%; }
h1, h2, h3, h4 { font-family: var(--raleway); font-weight: 400; margin: 0; }
p { margin: 0 0 1rem; }
a { color: var(--blau); }

.container { max-width: 1240px; margin: 0 auto; padding: 0 1.5rem; }

/* ══ Kopf ══
   Der heutige Stand hat drei Bänder übereinander (Servicezeile, weißer
   Logobereich, blaue Navigation). Hier wird daraus ein einziges dunkles Band:
   die Servicezeile entfällt, Logo und Navigation rücken zusammen.             */
.topbar { display: none; }

.site-header {
  /* ⚠ `--band` statt `--menue`: Die Startseite kann den Kopf umfärben, wenn
     ein Bühnenplatz eine eigene Farbe trägt (Vorgang #191). Siehe base.html —
     Kopfleiste und Menüband müssen gemeinsam wechseln, das Logo liegt über
     der Grenze. */
  background: var(--band, var(--menue));
  padding: 1.1rem 0 0.4rem;
}
/* ⚠ **Das Logo steht rechts** (Vorgang #184, Miriam Hirschauer 24.08.2026:
   „Logo an rechten Rand versetzen"). Das kehrt die gewohnte Leserichtung um —
   Marke links, Navigation rechts —, ist aber ausdrücklich gewünscht. Ein
   Zusammenstoß mit dem Klappknopf droht dabei **nicht**: Der sitzt im
   Menüband, und das ist ein eigenes `<nav>` unter diesem Kasten. */
.site-header__inner {
  display: flex; align-items: center; justify-content: flex-end;
  /* Trägt das absolut gesetzte Logo — siehe unten. Die Höhe bleibt erhalten,
     damit das Menüband nicht nach oben rutscht, wenn das Logo aus dem Fluss
     genommen wird. */
  position: relative; min-height: 58px;
}

/* ⚠ **Das Logo hängt am Fuß des blauen Blocks und ragt ins Menüband**
   (2026-08-25, Vorgang #207). Miriam Hirschauer: „Logo auf den Boden der blauen
   Leiste neben die Suche ziehen und noch ein Stück vergrößern. Sodass es dann
   über die Suche ragt quasi."

   Aus dem Fluss genommen, sonst wüchse der Kopfkasten mit der Logohöhe — und
   das Menüband, das dieselbe Farbe trägt, rutschte mit nach unten. Der
   z-index liegt über dem Menüband (das steht auf 20), damit das Logo davor
   liegt und nicht dahinter verschwindet.

   ⚠ **`pointer-events` ist hier keine Feinheit, sondern die Bedingung.** Das
   Logo ist ein Verweis auf die Startseite und liegt jetzt über dem Menüband;
   ohne die Ausnahme finge sein Kasten Klicks ab, die den Menüpunkten oder der
   Suche gelten. Der Kasten lässt sie durch, das Bild darin nimmt sie an. */
.site-logo {
  display: block; line-height: 0; text-decoration: none;
  position: absolute; right: 0; bottom: -34px; z-index: 30;
  pointer-events: none;
}
.site-logo img, .site-logo__fallback { pointer-events: auto; }
/* base.html bindet die blaue Fassung des Logos ein. Auf dem dunklen Band wäre
   sie nicht zu sehen – der Filter macht sie weiß, ohne eine zweite Datei. */
/* 46 → 58 px (Vorgang #184: „Reiter und Logo größer"). Der Kasten wächst damit
   von 70 auf 82 px; das Menüband darunter bleibt unberührt. */
.site-logo img { height: 76px; width: auto; filter: brightness(0) invert(1); }
/* Tritt nur an die Stelle des Logos, wenn die Datei fehlt – base.html blendet ihn
   dann per onerror ein. Ohne das `display: none` stünde er daneben. */
.site-logo__fallback {
  display: none;
  font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-8); color: #fff;
}

.main-nav {
  background: var(--band, var(--menue));
  border-bottom: 3px solid var(--auf-menue);
  position: sticky; top: 0; z-index: 20;
}
.main-nav__inner { display: flex; align-items: center; gap: 2rem; }
.main-nav__list {
  display: flex; align-items: center; gap: 1.3rem; flex-wrap: wrap;
  list-style: none; margin: 0; padding: 0;
}
/* Lesbarkeit der Navigation: der Kontrast war nie das Problem (#cddae6 auf dem
   Band ergibt 7,6:1), wohl aber die Strichstärke. Helle Versalien in 12px mit
   weiter Sperrung wirken auf dunklem Grund dünner, als sie gemessen sind.
   Deshalb eine Spur größer, im fetten Schnitt und näher am Weiß — die Sperrung
   dafür etwas enger, sonst wird die Zeile zu lang. */
/* ⚠ **Größer, aber enger — und die drei Werte gehören zusammen** (Vorgang
   #184). Die Zeile muss bis zur Klappgrenze von 900 px auf **eine** Zeile
   passen; darunter tritt der Schalter an ihre Stelle. Gemessen am 2026-08-24 an
   der engsten Stelle (901 px, Rahmen 886 px) die kleinste Breite, bei der die
   Zeile noch hält:

   | Fassung | hält ab | Luft bei 886 px |
   |---|---|---|
   | vorher (0,85 rem · 0,1 em · gap 1,6) | 870 px | 16 px |
   | **jetzt (0,92 · 0,07 em · gap 1,3)**  | **858 px** | **28 px** |
   | 0,92 rem allein                       | passt nicht | — |
   | 1,0 rem · 0,07 em · gap 1,2           | 886 px | 0 px |

   **Der Schriftgrad allein sprengt die Zeile** — er ist nur zu haben, weil
   Sperrung und Abstand mitgehen; dafür ist die Luft hinterher **größer** als
   vorher. Wer weiter will (1,0 rem), muss die Klappgrenze auf rund 1000 px
   heben — und damit entscheiden, dass Fenster zwischen 901 und 1000 px das
   Klappmenü bekommen. Das ist eine Entscheidung des Verlags, keine Feinarbeit. */
.main-nav__list > li > a {
  display: block; padding: 0.9rem 0 0.75rem;
  font-family: var(--raleway); font-weight: 700;
  font-size: var(--schrift-4); letter-spacing: 0.07em;
  text-transform: uppercase; color: #e8eff7; text-decoration: none;
  border-bottom: 2px solid transparent;
}
.main-nav__list > li > a:hover,
.main-nav__list > li > a.active { color: #fff; border-bottom-color: #fff; }

/* Klappmenü „Bücher" – reines CSS, wie im heutigen Stand. */
.has-dropdown { position: relative; }
.dropdown, .dropdown__sub {
  position: absolute; z-index: 30; display: none;
  margin: 0; padding: 0.9rem 0; list-style: none; min-width: 250px;
  background: var(--band, var(--menue));
  border-top: 3px solid var(--auf-menue);
  box-shadow: 0 16px 34px rgba(0,0,0,.34);
}
.dropdown { top: 100%; left: -1rem; }
.has-dropdown:hover > .dropdown, .has-dropdown:focus-within > .dropdown { display: block; }
.dropdown a {
  display: block; padding: 0.3rem 1.4rem;
  font-family: var(--raleway); font-size: var(--schrift-4); color: #e3ecf4; text-decoration: none;
}
.dropdown a:hover { background: rgba(255,255,255,.09); color: #fff; }
.dropdown__divider { height: 1px; margin: 0.5rem 1.4rem; background: rgba(255,255,255,.16); }
.has-sub { position: relative; }
.dropdown__sub { top: 0; left: 100%; border-top: 0; border-left: 3px solid var(--auf-menue); }
.has-sub:hover > .dropdown__sub, .has-sub:focus-within > .dropdown__sub { display: block; }

/* ⚠ **Der rechte Abstand hält den Platz frei, auf dem das Logo sitzt**
   (Vorgang #207) — und er ist gemessen, nicht geschätzt.

   Der Wunsch lautete: „Suche etwas weiter nach links, Logo … neben die Suche
   ziehen … sodass es dann über die Suche ragt quasi." Der Satz hat zwei
   Lesarten, und die Bedienung entscheidet welche: Mit 8,5 rem lag das Logo
   **auf** dem Suchfeld, und **der Lupenknopf war nicht mehr klickbar** —
   `elementFromPoint` auf seiner Mitte lieferte das Logobild. Gemeint ist
   also „neben", wie es dort auch steht: Das Logo steht rechts daneben und
   ragt in der **Höhe** über die Suche hinaus, ins Menüband hinein.

   ⚠ **`pointer-events` allein rettet das nicht.** Der Kasten des Logos lässt
   Klicks durch, das Bild darin nimmt sie an — und das Bild lag über der Lupe.
   Wer die Logogröße ändert, misst diesen Abstand nach und prüft die Lupe. */
.nav-search { margin-left: auto; margin-right: 15rem; display: flex; align-items: center; }
.nav-search input {
  border: 1px solid rgba(255,255,255,.22); background: rgba(255,255,255,.07);
  color: #fff; padding: 0.4rem 0.7rem; font-family: var(--opensans); font-size: var(--schrift-3);
}
/* ⚠ **Halbdurchsichtiges Weiß, kein fester Grauton** (Vorgang #231, Miriam
   Hirschauer: „das ist bei dieser Hintergrundfarbe nämlich gerade schwer zu
   erkennen"). Der Grund ist seit dem 2026-08-26 **veränderlich**: Setzt die
   Redaktion für einen Bühnenplatz eine eigene Fläche, färbt sich das Menüband
   mit (`--band`). Ein fester Ton ist dann bestenfalls Zufall.

   ⚠ **Und er war schon auf dem Verlagsblau zu blass** — gemessen: `#8EA3B8`
   auf dem Feldgrund `#124B83` ergibt **3,44:1**, das Maß für Text sind 4,5:1
   (WCAG 1.4.3). Die Meldung ist also kein Geschmacksurteil; sie hat einen
   Mangel gefunden, den niemand gemessen hatte. Mit 80 % Weiß: **6,36:1**.

   ⚠ **Nicht volles Weiß.** Dann sähe der Platzhalter aus wie eingegebener Text
   — er trägt dieselbe Farbe wie `input { color: #fff }` eine Zeile höher.

   ⚠ **Auf einer sehr hellen Bandfarbe hilft auch das nicht** (Gelb: 1,53:1).
   Dort ist aber ebenso der eingetippte Text unlesbar, und davor warnt bereits
   die Probefläche im Bühnenformular („zu wenig für weiße Schrift"). Die Frage
   ist dort entschieden und wird hier nicht zum zweiten Mal gestellt. */
.nav-search input::placeholder { color: rgba(255,255,255,.80); }
.nav-search button {
  border: 0; background: rgba(255,255,255,.18); color: #fff;
  padding: 0.47rem 0.7rem; cursor: pointer;
}
/* ✅ **Die Suche als Lupe** (Vorgang #296, gewählt am 15.09.2026). Das Skript
   (`nav.js`) setzt `.nav-search--zu`, solange das Feld leer ist und niemand
   hineinklickt; ohne Skript bleibt alles wie vorher.
   ⚠ **Offen legt sich das Feld über die Menüpunkte links daneben**, statt die
   Zeile zu verbreitern. Im Fluss schöbe es die Lupe unter das Logo oder in eine
   zweite Zeile — genau das, was die Lupe vermeiden soll. Deshalb deckend: Der
   Grund des Bandes ist veränderlich (`--band`), das halbdurchsichtige Weiß
   liegt darüber.

   ✅ **Seit dem 25.09.2026 klappt es unter dem Band auf, nicht mehr über die
   Menüpunkte** (Vorgang #336, Lennart: „verdeckt den Reiter Verlag"). Gemessen
   bei 1280 px: zwischen „Verlag" (endet bei 738) und der Lupe (950) liegen
   212 px, das Feld war 256 breit — es deckte „Verlag" zur Hälfte. Bei 1160 px
   sind es rund 90 px; ein Feld dazwischen wäre unbrauchbar schmal. Unter dem
   Band steht es wie die Klappmenüs daneben: gleiche Fläche, gleicher Strich
   oben, gleicher Schatten, rechtsbündig unter der Lupe.
   ⚠ **`align-self: stretch` trägt die Lage.** Damit ist der Kasten so hoch wie
   die Menüzeile, und `top: 100%` landet genau an der Unterkante des Bandes —
   dort, wo auch `.dropdown` ansetzt. */
.nav-search { position: relative; align-self: stretch; }
.js-nav .nav-search--zu input { display: none; }
.js-nav .nav-search:not(.nav-search--zu) input {
  position: absolute; right: 0; top: 100%;
  width: 18rem; z-index: 30; padding: 0.6rem 0.8rem;
  border: 0; border-top: 3px solid var(--auf-menue);
  box-shadow: 0 16px 34px rgba(0,0,0,.34);
  background-color: var(--band, var(--menue));
  background-image: linear-gradient(rgba(255,255,255,.07), rgba(255,255,255,.07));
}

/* ══ Inhalt ══ */
.site-main { padding-bottom: 3rem; }

/* Jede Seite beginnt mit demselben Abstand zum Menüband – sonst klebt der Inhalt
   dort an, wo der erste Baustein zufällig keinen eigenen mitbringt. Das war bei
   der News- und der Termindetailseite sowie der Autorenseite der Fall, während
   Buchseite und Startseite ihren Abstand selbst setzten.

   Die Regel ist spezifischer als die der einzelnen Bausteine und ersetzt deren
   `margin-top` deshalb bewusst; wer einen abweichenden Abstand braucht, muss ihn
   hier ausnehmen. */
.site-main > .container > :first-child { margin-top: 2rem; }
/* ⚠ **`hyphens: auto` ist hier keine Kosmetik, sondern die Folge der größeren
   Schrift** (Vorgang #189). Bei 2,19 rem passt „Neuerscheinungen" auf einem
   320 px breiten Schirm nicht mehr in eine Zeile und lässt sich als **ein Wort**
   auch nicht umbrechen: Gemessen ragte der Titel 14 px über den Rand, und die
   Rollprobe bestätigte es (die Seite rollte waagerecht um 29 px). Mit der alten
   Skala trat das nicht auf.

   ⚠ **Trennung, nicht `overflow-wrap: anywhere`.** Das zweite bräche das Wort
   ohne Zeichen, mitten in der Silbe — dieselbe Abwägung wie bei den Fächern der
   Regalseite. `lang="de"` steht am `<html>`, sonst täte die Trennung nichts.

   ⚠ **`display: inline-block` bleibt** — die Unterstreichung soll so breit sein
   wie der Titel, nicht wie die Spalte. */
.page-title {
  font-family: var(--raleway); font-size: var(--schrift-9); color: var(--text);
  margin: 2.2rem 0 1.6rem; padding-bottom: 0.5rem;
  border-bottom: 3px solid var(--blau); display: inline-block;
  hyphens: auto; max-width: 100%;
}

/* ══ Die Wand ══
   Im heutigen Stand ist das ein Schieber mit einem Titel zur Zeit. Hier wird
   daraus ein Raster: das erste Feld groß, die übrigen daneben. Pfeile, Punkte
   und das Skript des Schiebers sind am 2026-08-24 mit dem heutigen Stand
   entfallen; die Wand steht still und wird auf dem Telefon gewischt.          */
/* Der Abstand nach oben kommt aus der gemeinsamen Regel für den Seitenanfang
   (siehe „Inhalt"): ohne ihn läse sich die Wand als Fortsetzung des Menübands
   statt als eigener Block. */
.slider { margin: 0; }
.slider__track {
  display: grid; grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: minmax(176px, auto); gap: 2px;
}

.slider__slide { background: var(--akzent); overflow: hidden; }
/* Zwei Zeilen hoch, nicht drei: bei drei klafft zwischen Umschlag und Textblock
   eine leere Fläche, weil der Text unten sitzt (margin-top: auto). Die Zahl der
   Felder hängt daran — siehe Kommentar in index.html. */
.slider__slide:first-child { grid-column: span 2; grid-row: span 2; }

.slider__inner {
  display: flex; flex-direction: column; gap: 0.9rem;
  height: 100%; padding: 1.2rem;
  color: #fff; text-decoration: none;
  transition: filter 0.18s ease;
}
.slider__slide:hover .slider__inner { filter: brightness(1.09); }
/* Dieselbe Haarlinie und derselbe Hof wie an den Kacheln — Begründung dort.
   ⚠ **Beides muss hier mitgeändert werden**, sonst stünde die Farbwand der
   Startseite anders da als die Kachelbänder: dieselbe Sache, zwei Antworten.
   Der Hof ist eine Spur größer, weil die erste Folie einen 190 px breiten
   Umschlag trägt und ein Hof mit der Fläche mitwachsen muss. */
.slider__cover {
  width: 74px; height: auto; align-self: flex-start;
  box-shadow: 0 0 0 1px rgba(0,0,0,.28),
              0 0 16px 3px rgba(0,0,0,.22),
              0 8px 22px rgba(0,0,0,.34);
}
/* ── Die große Kachel: Umschlag links, Text rechts ────────────────────────────
   Gemeldet am 2026-08-16, in zwei Anläufen. Zuerst „sieht etwas leer aus" —
   darauf kam der Anrisstext, und ich hatte die Lücke **unter** dem Umschlag
   gemessen (136 px, danach 31). Der zweite Hinweis traf die eigentliche Stelle:
   **Die leere Fläche liegt rechts daneben.** Ein 190 px breiter Umschlag in
   einem 595 px breiten Feld lässt gut 370 px Farbe stehen, und die sieht man,
   nicht die Zeile darunter. ⚠ **Wer eine Lücke misst, muss zuerst wissen,
   welche gemeint ist.**

   ⚠ **Der Textblock behält `margin-top: auto`** und steht damit unten — bündig
   mit dem Fuß des Umschlags, nicht neben seinem Kopf. Oben ausgerichtet klaffte
   es unten (gemessen ~340 px), und mit den Angaben am Fuß der rechten Spalte
   riss es in der Mitte auf (325 px). Von den vier durchprobierten Anordnungen
   ist diese die einzige, bei der die freie Fläche **oben neben dem Umschlag**
   liegt, wo sie als Luft liest statt als Loch.

   ⚠ **Mehr Text hilft nicht**, das ist gemessen: Die Kürzungsgrenze
   versuchsweise von 230 auf 460 Zeichen gesetzt ergab **251** — so lang ist der
   Kurztext dieses Titels, und der Median über alle liegt bei 174. Die Lücke ist
   eine Frage der Feldgröße, nicht der Textmenge, und damit eine Frage von
   Vorgang #32.

   ⚠ **Nur hier, nicht im Streifen** — unter 700 px gibt es keine große Kachel
   mehr, und dort ist auch der Anrisstext aus. */
.slider__slide:first-child .slider__cover { width: 220px; }
/* ⚠ **Raster statt Flex, weil zwei Aufteilungen gleichzeitig gelten sollen**
   (2026-08-16, zweite Fassung nach „Titel und Autoren unter dem Cover, aber den
   Kurztext daneben"). Der Anriss steht **neben** dem Umschlag, Titel, Urheber
   und Preis **darunter und über die volle Breite** — als Flexspalte oder
   Flexzeile ist das eines von beiden, nie beides.

   Die mittlere Zeile (`1fr`) schluckt den freien Platz und drückt den Textblock
   an den Fuß. Das ersetzt das `margin-top: auto`, das im Raster nichts
   ausrichtet.

   ⚠ **Die erste Fassung stellte den ganzen Textblock neben den Umschlag.** Das
   war nicht gewünscht und liest sich auch anders: Ein Titel neben dem Umschlag
   gehört zu einer Buchseite, ein Titel darunter zu einer Kachel — und die Wand
   besteht aus Kacheln. */
.slider__slide:first-child .slider__inner {
  display: grid;
  grid-template-columns: 220px 1fr;
  grid-template-rows: auto 1fr auto;
  column-gap: 1.6rem;
}
.slider__slide:first-child .slider__cover { grid-column: 1; grid-row: 1; }
.slider__slide:first-child .slider__text { grid-column: 2; grid-row: 1; margin: 0; }
.slider__slide:first-child .slider__caption { grid-column: 1 / -1; grid-row: 3; }
.slider__caption { margin-top: auto; }
.slider__title {
  font-family: var(--raleway); font-size: var(--schrift-5); line-height: 1.25;
  margin: 0 0 0.2em; color: #fff;
}
.slider__slide:first-child .slider__title { font-size: var(--schrift-9); }
.slider__subtitle, .slider__author {
  margin: 0 0 0.15em; font-size: var(--schrift-2); color: rgba(255,255,255,.86);
}
.slider__slide:first-child .slider__subtitle { font-size: var(--schrift-5); }

/* Der Anrisstext füllt die Fläche zwischen Umschlag und Textblock — gemessen
   136 px reine Farbe, gemeldet als „sieht etwas leer aus" (2026-08-16).
   ⚠ **Nur in der großen Kachel.** Die kleinen sind 297 × 289 px und tragen
   Titel, Untertitel und Urheber bereits bis an den Rand; dort wäre er kein
   Anriss mehr, sondern eine Textwand. Deshalb steht die Regel am
   `:first-child` und nicht an `.slider__text` — ein Anrisstext, der in jedem
   Feld erschiene, müsste an acht Stellen wieder weggenommen werden. */
.slider__text { display: none; }
.slider__slide:first-child .slider__text {
  display: block;
  margin: 0.5rem 0 0.7rem;
  font-size: var(--schrift-4); line-height: 1.5;
  color: rgba(255,255,255,.92);
  max-width: 34em;
}
.slider__author { text-transform: uppercase; letter-spacing: 0.08em; font-size: var(--schrift-1); }

/* ══ Abschnitte der Startseite ══ */
.home-sections { display: grid; gap: 2.5rem; margin-top: 2.5rem; }
/* ⚠ **Ohne Trennstrich, seit dem 2026-08-26** (Vorgang #215, Miriam
   Hirschauer: „mir ist der Cut da irgendwie zu scharf mit dem Strich. Das geht
   ja auch ganz ohne, wie zB hier: fischerverlage.de"). Was die Abschnitte
   trennt, ist seither allein der Abstand — `.home-sections { gap: 2.5rem }`.

   ⚠ **Der Kopf behält seinen Innenabstand nach unten.** Ohne ihn klebte die
   erste Kachelreihe an der Überschrift, und aus „weniger Abgrenzung" würde
   „keine Gliederung". */
.home-section__header {
  display: flex; align-items: baseline; justify-content: space-between;
  padding-bottom: 0.5rem; margin-bottom: 1rem;
}
.home-section__heading {
  font-family: var(--raleway); font-size: var(--schrift-6); letter-spacing: 0.04em;
  text-transform: uppercase;
}
.home-section__more { font-size: var(--schrift-3); text-decoration: none; }
.home-section__more:hover { text-decoration: underline; }

.home-event-list, .home-link-list { list-style: none; margin: 0; padding: 0; }
.home-event-item, .home-link-item { border-bottom: 1px solid #ececec; }
.home-event-item__link, .home-link-item__link {
  display: flex; gap: 1.2rem; padding: 0.7rem 0; text-decoration: none; color: inherit;
}
.home-event-item__date { flex-shrink: 0; width: 8rem; color: var(--blau); font-size: var(--schrift-3); }
/* Der Titel nimmt den Raum, die Angabe dahinter steht in einer festen Spalte.
   Ohne das klebte sie am Titel und sprang mit dessen Länge von Zeile zu Zeile –
   bei „Presse & Links" besonders auffällig, weil dort die Datumsspalte fehlt,
   die der Terminliste sonst Halt gibt. */
.home-event-item__title, .home-link-item__title { font-family: var(--raleway); flex: 1; }
.home-event-item__location, .home-link-item__book {
  flex-shrink: 0; width: 12rem;
  color: var(--leise); font-size: var(--schrift-3);
}

/* ══ Buchkacheln ══
   ✅ **Die Rasterkachel (`.book-card`, `.book-grid`) ist am 14.09.2026
   ausgebaut** — seit Vorgang #254 tragen alle Titellisten die Karte
   (`.buchkarte`, weiter unten). Die Begründungen zu Haarlinie, Hof und
   Coverzone stehen in der Geschichte dieser Datei und in CLAUDE.md. */

/* ══ Listen: News und Termine ══
   Bleiben ruhig – die Farbe gehört den Büchern, nicht jeder Zeile.            */
.news-list, .event-list { list-style: none; margin: 0; padding: 0; }
.news-card, .event-card { border-bottom: 1px solid #ececec; }
.news-card__link, .event-card__link {
  display: flex; gap: 1.5rem; padding: 1.1rem 0; text-decoration: none; color: inherit;
}
.news-card__image { width: 10rem; height: 6.7rem; object-fit: cover; flex-shrink: 0; }
/* 52 der 265 Meldungen haben kein Beitragsbild. Der Platz bleibt trotzdem frei,
   damit die Textkante über die Liste hinweg steht – aber ohne graue Fläche: die
   sah nach fehlendem Bild aus, nicht nach einer Meldung ohne Bild. */
.news-card__image--leer { width: 10rem; display: block; }
/* ⚠ **Zwei Stufen größer** (Vorgang #232, Miriam Hirschauer zu `/termine`:
   „Datum und Uhrzeit ein bis zwei Punkt größer (oder fett)"). `--schrift-2` →
   `--schrift-4` sind 12,5 px → 14,7 px, also die obere Hälfte ihrer Spanne.
   Genommen ist die Größe und nicht der Fettdruck: Das Datum ist der Schlüssel,
   nach dem man eine Terminliste absucht, und fett stünde es gegen den Titel
   daneben an, der ohnehin Raleway trägt.

   ⚠ **Die Newsliste geht mit, und das ist eine Entscheidung.** Gemeldet sind
   die Termine; die Regel gilt beiden, weil es dieselbe Angabe in derselben
   Rolle ist — das Datum über einer Kachel. Zwei Größen dafür wären Willkür,
   und die Sonderregel müsste jemand begründen können. Wer sie doch will,
   trennt die Regel; es ist eine Zeile. */
.news-card__date, .event-card__date { color: var(--blau); font-size: var(--schrift-4); display: block; }
.event-card__date { flex-shrink: 0; width: 10rem; }
/* ── Umschlag in der Terminliste (Vorgang #177) ──
   ⚠ **Zwischen Datum und Text, nicht davor.** Das Datum ist der Schlüssel, nach
   dem man eine Terminliste absucht; ein Bild davor bräche diesen Blick. So
   beginnt die Zeile außerdem auf `/termine` und im Archiv an derselben Kante —
   und das Archiv trägt kein Bild.

   ⚠ **Feste Breite, Höhe aus dem Umschlag.** Umschläge sind unterschiedlich
   hoch (gemessen 2:3 bis 1:1,45); eine feste Höhe schnitte oder verzerrte. Die
   Breite hält dagegen die Textkante über die Liste hinweg gerade. */
.event-card__cover { flex-shrink: 0; width: 4rem; align-self: flex-start; }
.event-card__cover-bild { display: block; width: 100%; height: auto;
  box-shadow: 0 2px 8px rgba(0,0,0,.18); }
/* Ohne verknüpftes Buch bleibt der Platz frei, aber leer — dieselbe Überlegung
   wie bei `.news-card__image--leer`: Eine graue Fläche sähe nach einem
   fehlenden Bild aus, nicht nach einem Termin ohne Buch. */
.event-card__cover--leer { display: block; }
.news-card__title, .event-card__title {
  font-family: var(--raleway); font-size: var(--schrift-6); margin: 0.25em 0 0.3em;
}
.news-card__teaser, .event-card__desc, .event-card__location {
  font-size: var(--schrift-3); color: var(--leise); display: block;
}
.events-section__heading {
  font-family: var(--raleway); font-size: var(--schrift-6); text-transform: uppercase;
  letter-spacing: 0.04em; border-bottom: 2px solid var(--dunkel);
  padding-bottom: 0.5rem; margin: 2rem 0 1rem;
}
.events-empty { color: var(--leise); }

.pager { display: flex; flex-wrap: wrap; gap: 0.6rem 1.5rem; justify-content: center; margin-top: 2rem; font-size: var(--schrift-3); }
.pager__link { text-decoration: none; }
.pager__status { color: var(--leise); }
/* Die Leiste oben (Vorgang #335): links die Seitengröße, rechts dieselben
   Blätterverweise wie unten. Wer 20 Meldungen gelesen hat, soll nicht erst
   hinunterrollen müssen, um weiterzukommen. */
.blaettern-kopf {
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;
  gap: 0.6rem 1.5rem; margin-bottom: 1.5rem; font-size: var(--schrift-3);
}
.blaettern-kopf .pager { margin-top: 0; }
.blaettern-groesse { margin: 0; color: var(--leise); }
.blaettern-groesse a, .blaettern-groesse__aktiv { margin-left: 0.5rem; }
.blaettern-groesse a { text-decoration: none; }
.blaettern-groesse__aktiv { color: var(--text); font-weight: 700; }

/* ══ Detailseiten ══ */
.news-detail, .event-detail { max-width: var(--textbreite); }
/* Luft zwischen der Kopfzeile (Datum, Ort) und dem Fließtext. Bisher hielt die
   Kurzbeschreibung die beiden auseinander – die entfällt jetzt bei 857 der 877
   Termine, weil sie dort nur den Titel wiederholte. */
.event-detail__short, .event-detail__desc { margin-top: 1.1rem; }
/* Der Rückweg stand ohne Abstand direkt unter dem Fließtext und las sich wie
   dessen letzte Zeile. `style.css` hatte die Regel längst, hier fehlte sie.
   Beide Detailseiten – Termin und News – teilen sich die Klasse. */
.event-detail__back { margin-top: 2rem; font-size: var(--schrift-4); }
.event-detail__back a { color: var(--blau); text-decoration: none; }
.event-detail__back a:hover { text-decoration: underline; }
.news-detail__date, .event-detail__date { color: var(--blau); font-size: var(--schrift-3); }
.news-detail__image { max-width: 100%; max-height: 420px; width: auto; }
.news-detail__credit { font-size: var(--schrift-2); color: var(--leise); }
.news-detail__heading, .event-detail__books-heading {
  font-family: var(--raleway); font-size: var(--schrift-6); text-transform: uppercase;
  letter-spacing: 0.04em; border-bottom: 2px solid var(--dunkel);
  padding-bottom: 0.5rem; margin: 2.5rem 0 1rem;
}
.news-detail__people-list, .news-detail__more-list { list-style: none; margin: 0; padding: 0; }
.news-detail__more-list li { padding: 0.4rem 0; border-bottom: 1px solid #f0f0f0; }
.news-detail__more-date { font-size: var(--schrift-2); color: var(--leise); margin-left: 0.6em; }

/* ══ Fuß ══ */
/* Dieselbe Überlegung wie in der Navigation: heller und eine Spur größer, damit
   die Fußzeile nicht ins Band absäuft. */
/* ⚠ **Der Strich unten ist ein Versuch, keine Festlegung** (Vorgang #219,
   Miriam Hirschauer am 2026-08-26: „Und mal testen: einen solchen Strich unter
   dem letzten blauen Balken."). Der letzte blaue Balken der Startseite ist
   dieser Fuß — der Dreier-Band steht seit dem 26.08. oben unter der Bühne.
   Derselbe `border` und derselbe Wert wie zwischen den Bühnenplätzen und unter
   dem Menüband: auf dem Blau ergibt er rgb(82,123,165).

   ⚠ **Er gilt jeder Seite, nicht nur der Startseite** — der Fuß steht überall.
   Wird er wieder abgeschafft, ist es diese eine Zeile. */
.site-footer {
  background: var(--menue); color: #dbe5ef; margin-top: 4rem; padding-top: 2.5rem;
  border-bottom: 3px solid var(--auf-menue);
}
.site-footer__inner { display: flex; gap: 4rem; flex-wrap: wrap; padding-bottom: 2rem; }
.site-footer h2 {
  font-family: var(--raleway); font-size: var(--schrift-2); letter-spacing: 0.13em;
  text-transform: uppercase; color: #fff; margin-bottom: 0.8rem;
}
.site-footer ul { list-style: none; margin: 0; padding: 0; }
.site-footer li { padding: 0.2rem 0; }
.site-footer a { color: #dbe5ef; text-decoration: none; font-size: var(--schrift-4); }
.site-footer a:hover { color: #fff; }
/* Die beiden Preissiegel (Vorgang #37).

   ⚠ **36 px hoch, nicht 50 wie auf zuklampen.de.** Die Zahl stammt aus der
   Zeit, als die 2019er Datei nur 143×51 px hatte: Bei 50 px Höhe lag ihr
   Faktor bei 1,02 und sie wäre auf einem Bildschirm mit doppelter Punktdichte
   unscharf gewesen — genau der Mangel, der bei den Covern als „Cover ist
   unscharf" gemeldet wurde (Vorgang #143).

   ✅ **Seit dem 22.09.2026 tragen beide 123 px Höhe**, also bei 36 px Anzeige
   den Faktor 3,4. Miriam hatte das 2019er Siegel als „irgendwie etwas
   schwammig" gemeldet und die Vorlage geschickt; sie ist aus dem 2484×1338
   großen JPEG gerechnet (siehe CLAUDE.md, „Das Verlagspreis-Logo 2019").
   **Die Höhe ließe sich damit anheben** — 50 px wären Faktor 2,5 —, das ist
   aber eine Gestaltungsfrage und keine Folge dieser Datei.

   ⚠ **Wer eine der Dateien austauscht, zieht `width`/`height` in `base.html`
   nach.** Sie stehen dort fest, damit der Browser den Platz vorab kennt; eine
   falsche Angabe verschiebt beim Laden das halbe Fußende.

   ⚠ **`gap`, kein `margin` am Bild.** Beide Dateien sind randabfallend
   geschnitten (null Pixel Rand, gemessen) — ohne Abstand klebten sie
   aneinander. */
.site-footer__preise {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 1.25rem; margin: 0;
}
.site-footer__preise img { height: 36px; width: auto; display: block; }

.site-footer__bottom {
  border-top: 1px solid rgba(255,255,255,.12); padding: 1rem 0; font-size: var(--schrift-2);
}
.site-footer__bottom p { margin: 0; }
/* Der ausgelieferte Stand. Er stand vom 2026-08-09 bis zum 2026-08-24 in der
   Umschaltleiste und ist mit ihr hierher zurückgekehrt.

   ⚠ **Abgeblendet, aber lesbar.** Er geht niemanden außer dem Verlag etwas an;
   zugleich ist er die erste Frage bei jeder Meldung („welchen Stand siehst
   du?"). `tabular-nums`, damit die Ziffern nicht springen. */
.site-footer__version {
  margin-left: .75rem; color: rgba(255,255,255,.45);
  font-variant-numeric: tabular-nums; font-size: .92em;
}

/* ══ Buchempfehlungen ══
   Redaktionell gesetzte zuerst, danach aus der Kategorie aufgefüllt — siehe
   `_empfehlungen()` in app/main.py. */
/* Der Kommentar der Redaktion ist der Unterschied zur bloßen Kategorieliste —
   deshalb sichtbar ausgezeichnet und nicht als Kleingedrucktes. Er steht in einer
   130 px schmalen Spalte des Bandes, muss also mit wenig Platz auskommen.
   ⚠ Auf hellem Grund, nicht auf `--akzent`: Das Band steht anders als die
   Buchkacheln auf der Seitenfarbe. */
.empfehlungen__kommentar {
  font-size: var(--schrift-1); line-height: 1.4; color: var(--leise); font-style: italic;
  margin: 0.15rem 0 0; padding-left: 0.45rem;
  border-left: 2px solid var(--akzent, var(--blau));
}

/* ══ Teilen-Symbole ══
   Auszeichnung in app/templates/_teilen.html. Es sind Links, keine Knöpfe. */
.teilen {
  display: flex; align-items: center; flex-wrap: wrap; gap: 1rem;
  margin: 2.5rem 0 0.5rem; padding-top: 1.3rem;
  border-top: 2px solid var(--akzent, var(--blau));
}
.teilen__wort {
  font-family: var(--raleway); font-weight: 700;
  font-size: var(--schrift-2); letter-spacing: .12em; text-transform: uppercase;
  color: var(--leise);
}
.teilen__liste { display: flex; flex-wrap: wrap; gap: 0.45rem; list-style: none; margin: 0; padding: 0; }
.teilen__link {
  display: inline-flex; align-items: center; justify-content: center;
  /* 44 px – dieselbe Mindestgröße für Berührungsziele wie beim Klappmenü. */
  width: 44px; height: 44px;
  /* Auf Seiten, die zu einem Titel gehören, trägt die Farbe des Covers auch
     diese Zeile; sonst greift das Verlagsblau. Wie bei Kante und Knöpfen. */
  background: var(--akzent, var(--blau)); color: #fff;
  transition: filter .15s, transform .15s;
}
.teilen__link:hover { filter: brightness(1.15); transform: translateY(-2px); }
.teilen__link:focus-visible { outline: 2px solid var(--dunkel); outline-offset: 2px; }
/* Für vorlesende Geräte da, für Augen unsichtbar — `display: none` nähme es
   auch der Sprachausgabe.

   ⚠ **Als Klasse zum Wiederverwenden, seit es die zweite Stelle gibt.** Das
   Muster stand hier fest an `.teilen__name`; die Startseite braucht es für ihre
   Überschrift. Eine zweite Abschrift wäre die Stelle, an der eine Korrektur nur
   bei einer ankommt. */
/* ══ Tastaturfokus (Grundprüfung Barrierefreiheit, 2026-09-16) ══
   Bis dahin galt fast überall der Rahmen des Browsers. Auf dem Verlagsblau
   (Kopf, Menü, Fuß, Bühne, dunkles Band) war er kaum zu sehen — in Safari ist
   er selbst blau. Jetzt ein Rahmen, der auf beiden Gründen trägt: dunkel auf
   Weiß, weiß auf den farbigen Flächen. Die eigenen Regeln einzelner Knöpfe
   (Teilen, Galerie, Klappmenü) gehen vor, sie sind spezifischer. */
:focus-visible { outline: 2px solid var(--dunkel); outline-offset: 2px; }
.site-header :focus-visible, .main-nav :focus-visible, .site-footer :focus-visible,
.buehne :focus-visible, .dreierband :focus-visible, .stimme :focus-visible {
  outline-color: #fff;
}
/* `main` bekommt beim Sprung den Fokus (tabindex=-1); ein Rahmen um die ganze
   Seite wäre dort nur Lärm. */
#inhalt:focus { outline: none; }

.sprunglink {
  position: absolute; left: 0.5rem; top: -4rem; z-index: 1000;
  padding: 0.6rem 1rem; background: var(--dunkel); color: #fff;
  font-size: var(--schrift-4); text-decoration: none;
}
.sprunglink:focus { top: 0.5rem; outline: 2px solid #fff; outline-offset: 2px; }

.nur-vorlesen, .teilen__name {
  position: absolute; width: 1px; height: 1px; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap;
}

/* ══ Klappmenü für schmale Schirme ══
   Dieselbe Auszeichnung wie oben, nur anders gesetzt. Der Schalter tritt
   unterhalb der Grenze an die Stelle der Menüzeile, die darunter aus dem Bild
   lief.

   ⚠ Alles hier hängt an `html.js-nav` — die Klasse setzt `static/js/nav.js`.
   Ohne Skript bleibt die Menüzeile stehen, statt dass ein Menü verschwindet,
   das sich dann nicht mehr aufklappen ließe. */
.nav-schalter {
  display: none; align-items: center; gap: 0.6rem;
  background: none; border: 0; cursor: pointer;
  font-family: var(--raleway); font-weight: 700;
  font-size: var(--schrift-3); letter-spacing: 0.1em; text-transform: uppercase;
  color: #e8eff7; padding: 0.9rem 0 0.75rem;
}
/* Die drei Striche: der mittlere ist das Element selbst, die äußeren sind seine
   Pseudoelemente. Das Wort steht daneben — das Zeichen allein ist geläufig,
   aber nicht für alle. */
.nav-schalter__balken,
.nav-schalter__balken::before,
.nav-schalter__balken::after {
  display: block; width: 22px; height: 2px; background: currentColor;
}
.nav-schalter__balken { position: relative; }
.nav-schalter__balken::before,
.nav-schalter__balken::after { content: ""; position: absolute; left: 0; }
.nav-schalter__balken::before { top: -7px; }
.nav-schalter__balken::after  { top: 7px; }
/* Der Fokus ist im Projekt sonst nirgends eigens gestaltet (offener Punkt unter
   Barrierefreiheit). Bei diesen beiden Knöpfen aber schon: Auf dem dunklen Band
   ist der voreingestellte Ring des Browsers kaum auszumachen. */
.nav-schalter:focus-visible,
.nav-auf:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* Erzeugt `nav.js`; auf breiten Schirmen klappt `:hover` auf, dort weg damit. */
.nav-auf { display: none; }

/* ⚠ **Die Klappgrenze bleibt bei 900 px — und der Weg dahin ist der
   Merkposten** (Vorgang #189). Nach dem Anheben der Skala brach die Menüzeile
   bei 901 px um; ich habe die Grenze daraufhin auf 960 und dann auf 1000 px
   gehoben. **Beides war eine Reparatur an einem Zustand, den es schon gab.**

   ⚠ **Gemessen, indem der Rahmen verengt und die Zeile beobachtet wurde**
   (nicht am Fenster, das die Pane skaliert):

       alte Skala   Zeile hält ab  1163 px Fensterbreite
       neue Skala   Zeile hält ab  1253 px

   Die Menüzeile war also **schon vorher** bei allem zwischen 901 und 1163 px
   zweizeilig — das Suchfeld rutscht unter die Links, `flex-wrap: wrap` fängt es
   auf, und es sieht ordentlich aus. Die Skala verschiebt diese Grenze um 90 px
   nach oben; sie erzeugt den Umbruch nicht.

   ⚠ **Damit ist die Klappgrenze der falsche Hebel.** Sie auf 1250 zu setzen
   hieße, dass die meisten Laptops das Klappmenü bekommen; sie auf 1000 zu
   setzen löst nichts (bei 1001 bis 1253 bricht es weiterhin) und stellt für
   100 px Fensterbreite ein Verhalten um, nach dem niemand gefragt hat.

   ⚠ **Die Angabe „die Zeile hält bis 858 px" in der Beschreibung zu Vorgang
   #184 ist falsch** — sie misst die Liste ohne das Suchfeld. Wer sie glaubt,
   sucht den Fehler an der falschen Stelle; genau das ist hier passiert. */
/* 🛑 **Seit dem 15.09.2026 liegt die Grenze höher** (Vorgang #296). Mit
   „Ankündigungen" und „Neuheiten" ist die Menüzeile auch ohne „News" 781 px
   breit, und das Logo ragt rechts auf rund 220 px Breite 28 px ins Band. Unter
   der Grenze liefe die Zeile samt Lupe unter das Logo. **Diesmal ist die
   Klappgrenze der richtige Hebel**, anders als bei Vorgang #189: Es geht nicht
   um ein Suchfeld, das umbricht, sondern um Menüpunkte, die das Logo
   überdecken. Die Zahl ist gemessen (ohne „News": einzeilig bei 1160 px, bei
   1145 px rutscht die Lupe in eine zweite Zeile); wer Menüpunkte ergänzt,
   misst sie neu. */
@media (max-width: 1160px) {
  .js-nav .nav-schalter { display: flex; }
  .js-nav .main-nav__inner { flex-wrap: wrap; gap: 1rem; }

  .js-nav .main-nav__list {
    display: none; order: 3; width: 100%;
    flex-direction: column; align-items: stretch; gap: 0;
    border-top: 1px solid rgba(255,255,255,.18);
  }
  .js-nav .main-nav.nav-offen .main-nav__list { display: flex; }
  .js-nav .main-nav__list > li {
    display: flex; flex-wrap: wrap; align-items: center;
    border-bottom: 1px solid rgba(255,255,255,.12);
  }
  /* ⚠ Schriftgrad eigens gesetzt: Weiter unten verkleinert die Regel für 700 px
     die Menüzeile auf 0,7 rem. Das ist für eine gedrängte Zeile richtig, für
     eine Fläche mit einem Eintrag je Zeile aber unnötig klein. */
  .js-nav .main-nav__list > li > a {
    flex: 1; padding: 0.85rem 0; border-bottom: 0; font-size: var(--schrift-3);
  }
  .js-nav .main-nav__list > li > a.active { border-bottom: 0; }

  .js-nav .nav-auf {
    display: block; background: none; border: 0; cursor: pointer;
    color: #e8eff7; font-size: var(--schrift-5); line-height: 1;
    /* Fingerbreite Fläche — 44 px sind das übliche Mindestmaß für
       Berührungsziele; ein Pfeil von 16 px ist nicht zu treffen. */
    min-width: 44px; min-height: 44px;
  }
  .js-nav .nav-auf[aria-expanded="true"] span { display: block; transform: rotate(180deg); }

  /* Das Untermenü steht im Fluss statt darüber: aufgeklappt schiebt es die
     folgenden Punkte nach unten, statt sie zu verdecken. */
  .js-nav .main-nav__list .dropdown {
    display: none; position: static; width: 100%; min-width: 0;
    border: 0; box-shadow: none; padding: 0;
    background: rgba(0,0,0,.16);
  }
  .js-nav .main-nav__list > li.offen > .dropdown { display: block; }
  .js-nav .main-nav__list .dropdown a { padding: 0.55rem 1.2rem; }
  .js-nav .main-nav__list .dropdown__divider { display: none; }

  /* Dritte Ebene eingerückt und immer sichtbar: elf Einträge unter zwei
     Punkten — dafür lohnt keine weitere Klappstufe. */
  .js-nav .main-nav__list .dropdown__sub {
    display: block; position: static; border: 0; box-shadow: none;
    background: none; padding: 0;
  }
  .js-nav .main-nav__list .dropdown__sub a {
    padding-left: 2.4rem; font-size: var(--schrift-3); color: #c8d8e8;
  }

  /* Die Suche bleibt sichtbar, auch wenn das Menü zu ist — auf dem Telefon der
     kürzeste Weg zu einem Titel. */
  .js-nav .nav-search { margin-left: auto; }
  /* Im Klappmenü steht das Feld im Fluss, nicht über den Menüpunkten. */
  .js-nav .nav-search input,
  .js-nav .nav-search:not(.nav-search--zu) input {
    width: 8rem; position: static; transform: none; background-image: none;
    background-color: rgba(255,255,255,.07);
    padding: 0.4rem 0.7rem; box-shadow: none;
    border: 1px solid rgba(255,255,255,.22);
  }
}

/* ══ Schmale Schirme ══ */
@media (max-width: 900px) {
  .slider__track { grid-template-columns: repeat(2, 1fr); }
  .slider__slide:first-child { grid-column: span 2; grid-row: span 2; }
}
@media (max-width: 700px) {
  .main-nav__list { gap: 1rem; }
  .main-nav__list > li > a { font-size: var(--schrift-1); }

  /* ── Die Wand wird zum Streifen ───────────────────────────────────────────
     ⚠ **Hier stand `grid-template-columns: 1fr`** — und damit wurde aus neun
     Kacheln ein Turm von rechnerisch 1600 px. Man wischte an neun Büchern
     vorbei, bevor irgendetwas anderes kam. Miriam hat es am 2026-08-13 auf dem
     Telefon gesehen und richtig beschrieben: „im Slider wechselt es rasch und
     man bleibt dran" — die Gestaltung war nicht das Problem, ihr Umbruch war es.

     Jetzt: waagerecht wischbar, gleich große Kacheln, Rastpunkte. Das ist
     **dasselbe Muster wie `.author-books__track`** — Flex, `overflow-x: auto`,
     `scroll-snap`. Kein Skript: Wischen kann der Browser selbst.                    */
  .slider__track {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    /* ⚠ Bis an die Bildschirmkante, ohne die Seite zu verbreitern: Das negative
       Außenmaß hebt die Polsterung von `.container` auf, das eigene Innenmaß
       setzt sie für den Inhalt wieder. Die Kacheln beginnen dadurch bündig mit
       dem Text, der Streifen läuft aber sichtbar über den Rand hinaus. Ohne
       `scroll-padding` rastete die erste Kachel unter den linken Rand. */
    margin-inline: -1.5rem;
    padding-inline: 1.5rem;
    scroll-padding-inline: 1.5rem;
  }
  .slider__track::-webkit-scrollbar { height: 4px; }
  .slider__track::-webkit-scrollbar-thumb {
    background: rgba(255,255,255,.45); border-radius: 2px;
  }
  /* ⚠ **Die Leitkachel gibt ihren 2×2-Platz ab.** „Gleiche Größe" heißt auch
     gleiche Schrift — sonst stünde eine Kachel mit 1,8-rem-Titel neben acht
     mit 1 rem, und der Streifen wirkte kaputt statt gestaffelt. */
  /* ⚠ **Kein Anrisstext im Streifen** — hier ist die erste Kachel keine große
     mehr, sondern eine von neun gleichen (18 rem hoch). Gemessen am
     2026-08-16: Mit dem Text braucht ihr Inhalt **467 px** bei 320 px Breite
     und **445** bei 375 — die Kachel hat 288 und `overflow: hidden`, also
     verschwindet der Urhebername lautlos unter der Kante.

     **Das ist derselbe Fehler, vor dem der Kommentar an der Kachelhöhe
     ausdrücklich warnt** („der Urhebername fiel unter die Kante … der Text
     sitzt über `margin-top: auto` am Fuß, also verschwand er lautlos"), und
     ich habe ihn beim Einbauen des Anrisstextes prompt wiederholt. Gefunden
     hat es nicht das Lesen dieses Kommentars, sondern die Messung. Ohne den
     Text: Inhalt 288, Kachel 288, nichts abgeschnitten.

     ⚠ **Der Selektor muss den von oben treffen, nicht nur die Klasse.** Der
     erste Bau schrieb hier `.slider__text { display: none }` — folgenlos: Eine
     Media Query **erhöht die Spezifität nicht**, und `.slider__slide:first-child
     .slider__text` weiter oben ist spezifischer, gleichgültig in welcher
     Reihenfolge die Regeln stehen. Gemessen war der Text bei 320, 375 und 700
     px weiterhin sichtbar. */
  .slider__slide:first-child .slider__text { display: none; }

  .slider__slide,
  .slider__slide:first-child {
    flex: 0 0 min(78vw, 320px);
    grid-column: auto; grid-row: auto;
    height: 18rem;
    scroll-snap-align: start;
  }
  /* ⚠ **Die Höhe ist gemessen, nicht gewählt.** Der erste Versuch stand auf
     15 rem, und der Urhebername wurde unten abgeschnitten — die Kachel hat
     `overflow: hidden`, der Text sitzt am Fuß, also verschwindet er lautlos.
     Mit 80-px-Umschlag und zwei Titelzeilen braucht die höchste der neun
     Kacheln 280 px; 18 rem sind 288. **Wer Umschlag oder Schriftgrad ändert,
     misst nach** — sichtbar wird der Fehler erst bei dem einen langen Titel. */
  .slider__title { -webkit-line-clamp: 2; }
  .slider__subtitle { -webkit-line-clamp: 1; }
  .slider__title, .slider__subtitle {
    display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden;
  }
  /* ⚠ **78 vw ist die Bedienhilfe, nicht der Geschmack.** Die nächste Kachel
     wird angeschnitten — daran sieht man, dass es weitergeht. Pfeile bräuchten
     ein Skript und wären eine zweite Bedienart neben dem Wischen.
     ⚠ **Kein Verlaufsschleier am Rand**, anders als bei `.author-books__slider`:
     Dort liegen Cover auf Weiß, hier Farbflächen nebeneinander — ein Weißverlauf
     trübte genau die Farbe, um die es geht. */
  .slider__cover,
  .slider__slide:first-child .slider__cover { width: 80px; }
  .slider__slide:first-child .slider__title { font-size: var(--schrift-5); }
  .slider__slide:first-child .slider__subtitle { font-size: var(--schrift-2); }
  /* ⚠ **Das Raster muss hier zurückgenommen werden**, sonst stünde die erste
     Kachel im Streifen zweispaltig da — anders als die acht daneben, ohne dass
     es einen Grund gäbe. Dieselbe Stelle, an der schon der Anrisstext
     auszuschalten war. */
  .slider__slide:first-child .slider__inner {
    display: flex; flex-direction: column; gap: 0.9rem;
  }

  .news-card__link, .event-card__link { flex-direction: column; gap: 0.7rem; }
  /* ⚠ **Der Kasten muss zum Bild passen, nicht zur Zeile.** Auf dem Telefon war
     er 327 × 107 px — Verhältnis 3.05 —, die Beitragsbilder liegen dagegen bei
     1.28 bis 1.77 (170 von 173 sind querformatig, Median 3:2). Mit
     `object-fit: cover` blieb davon **42 bis 58 Prozent** übrig, mittig
     beschnitten: Von einem Buchstapel sah man einen Streifen (Vorgang #144,
     gemeldet nach der Schulung). `aspect-ratio` statt fester Höhe schneidet nur
     noch die Abweichung vom Median weg. */
  .news-card__image, .news-card__image--leer, .event-card__date { width: 100%; }
  /* ⚠ **Der Umschlag wächst hier nicht mit.** Die Kachel stapelt auf dem
     Telefon; mit `width: 100%` stünde ein 327 px breiter Umschlag über jedem
     Termin und schöbe den Titel aus dem Bild. Er bleibt klein und steht über
     dem Text — und der leere Platz entfällt ganz, weil es hier keine Spalte
     mehr auszurichten gibt. */
  .event-card__cover { width: 3.5rem; }
  .event-card__cover--leer { display: none; }
  .news-card__image { height: auto; aspect-ratio: 3 / 2; }

  .news-card__image--leer { display: none; }
  .site-footer__inner { flex-direction: column; gap: 2rem; }
}

/* ══ Buchseite ══
   Der Umschlag steht links, daneben Angaben und Text. Anders als heute trägt die
   Seite oben eine Kante in der Buchfarbe — derselbe Gedanke wie in der Wand,
   nur zurückgenommen, weil hier der Text im Vordergrund steht. Die Farbe gibt
   book.html als `--akzent` mit.                                               */
.book-detail {
  display: grid; grid-template-columns: 250px 1fr; gap: 3rem;
  align-items: start; margin-top: 2rem;
  border-top: 6px solid var(--akzent); padding-top: 2rem;
}
.book-detail__cover img { width: 100%; box-shadow: 0 14px 34px rgba(0,0,0,.26); }
.book-detail__info h1 {
  font-family: var(--raleway); font-size: var(--schrift-9); line-height: 1.2;
  color: var(--dunkel); margin-bottom: 0.3rem;
}
.book-detail__subtitle {
  font-family: var(--raleway); font-size: var(--schrift-6); color: var(--leise); margin-bottom: 0.9rem;
}
/* Urhebername über dem Titel — Begründung in CLAUDE.md (→ Vorgang #43).
   ⚠ **Hier ohne Versalien und Sperrung**, anders als `.book-detail__role`
   daneben: Ein Personenname in gesperrten Großbuchstaben liest sich als Marke,
   nicht als Mensch. */
.book-detail__urheber {
  font-size: var(--schrift-6);
  line-height: 1.3;
  color: var(--leise);
  margin-bottom: 0.25rem;
}
.book-detail__urheber a { color: var(--leise); text-decoration: none; }
.book-detail__urheber a:hover { color: var(--blau); text-decoration: underline; }
.book-detail__hrsg { font-size: var(--schrift-3); color: var(--leise); }
.book-detail__contributor { font-size: var(--schrift-4); margin-bottom: 0.35rem; }
.book-detail__role {
  font-size: var(--schrift-1); text-transform: uppercase; letter-spacing: 0.09em;
  color: var(--leise); margin-right: 0.4rem;
}
.book-detail__contributor a { color: var(--blau); text-decoration: none; }
.book-detail__contributor a:hover { text-decoration: underline; }
/* ⚠ **Der graue Kasten ist weg** (→ Vorgang #42), die Farblinie bleibt.
   Miriam hat „ohne Kasten“ gesagt — eine Linie ist keiner, und sie ist im
   Farbregal das Band zwischen Seite und Buchfarbe. Fiele sie mit, verlöre die
   Gestaltung genau das Merkmal, über das noch entschieden wird (→ Vorgang #9).
   Ein Wort von ihr, und sie ist ebenfalls weg. */
.book-detail__meta {
  border-left: 4px solid var(--akzent);
  padding: 0.2rem 0 0.2rem 1rem; margin: 1.4rem 0;
}
.book-detail__price { font-size: var(--schrift-6); font-weight: 700; color: var(--dunkel); display: block; }
.book-detail__price--small { font-size: var(--schrift-4); font-weight: 700; color: var(--dunkel); }
.book-detail__digital { font-size: var(--schrift-3); color: var(--leise); }
/* Buchdaten untereinander — dieselbe Bauart wie im heutigen Stand, nur mit den
   Farben des Farbregals; Begründung der beiden Feinheiten steht dort. */
.book-detail__daten {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 0.35rem 1.25rem;
  margin: 0;
  font-size: var(--schrift-3);
  line-height: 1.5;
}
.book-detail__daten dt { color: var(--leise); }
.book-detail__daten dd { margin: 0; color: var(--text); }
/* ⚠ **Auf dem schmalsten Telefon Einzug und Spalte enger — sonst bricht die
   ISBN mitten in der Zahl um.** Gemessen bei 320 px: Die Farblinie und ihr
   Einzug kosten 20 px, damit blieben der Angabe 105 px, die ISBN braucht 118.
   Der heutige Stand hat die Linie nicht und kommt ohne diese Regel aus — die
   beiden Gestaltungen haben schon beim Klappmenü verschiedene Grenzen. Eine
   umbrechende ISBN ist kein Schönheitsfehler: Sie wird abgeschrieben. */
@media (max-width: 380px) {
  .book-detail__meta { padding-left: 0.5rem; }
  .book-detail__daten { column-gap: 0.75rem; }
}
.book-detail__digital { display: flex; flex-wrap: wrap; gap: 0.25rem 1rem; align-items: baseline; margin-top: 0.7rem; }
.book-detail__digital-heading {
  width: 100%; font-size: var(--schrift-1); text-transform: uppercase;
  letter-spacing: 0.09em; color: var(--leise);
}
.book-detail__digital-item { display: flex; gap: 0.4rem; align-items: baseline; }
.book-detail__digital-form { font-weight: 700; color: var(--text); }
/* Die Kurzbeschreibung als Vorspann über dem Haupttext (Vorgang #188).
   Miriam Hirschauer am 2026-08-31: „Über dem Haupttext, aber in der Akzentfarbe
   und evtl. fett."

   ⚠ **Die Farbe ist die des Buches, nicht das Verlagsblau.** `--akzent` setzt
   `book.html` am `<main>` aus dem Umschlag; damit trägt der Vorspann auf jeder
   Seite denselben Ton wie ihre Knöpfe und ihre Kante.

   ⚠ **Und sie ist als Textfarbe lesbar, weil `farbe.py` jede abgeleitete Farbe
   auf 5,0:1 gegen Weiß normiert.** Gemessen über alle 396 sichtbaren Werke am
   2026-08-31: min 4,97, Median 5,00 — nötig sind 4,5:1 (WCAG 1.4.3). **Wer eine
   Farbe von Hand setzt, ist damit erstmals nicht mehr nur für die Kachel
   verantwortlich, sondern für einen Fließtext**; die Warnung im Farbwähler
   („zu wenig für kleine Schrift") steht auf derselben Schwelle und greift.

   ⚠ **Nicht fett, und das ist gemessen statt entschieden.** Miriams „evtl."
   ist ein Vorbehalt; über den Bestand gerechnet trägt der Kurztext im Median
   179 Zeichen, im äußersten Fall **713** — das sind elf Zeilen. Elf Zeilen
   fett und farbig sind keine Auszeichnung mehr, sondern eine Wand. Farbe
   allein hebt ihn ab, ohne den Lesefluss zu brechen; wer es doch fett will,
   ändert eine Zeile.

   ⚠ **Fließtextgröße, nicht mehr eine Stufe kleiner.** Die 0,92 rem waren für
   die schmale Spalte gedacht — dort ist klein richtig. In der Hauptspalte über
   dem Haupttext liest sich kleiner Text wie eine Fußnote, und der Vorspann ist
   das Gegenteil davon. */
.book-detail__short-description {
  line-height: 1.75;
  color: var(--akzent);
  padding-top: 0.25rem;
}
.book-detail__description {
  line-height: 1.75;
  color: var(--text);
  padding-top: 0.25rem;
  max-width: var(--textbreite);
}
.book-detail__short-description p + p, .book-detail__description p + p { margin-top: 0.75rem; }

/* ⚠ **In der Hauptspalte braucht auch der Kurztext seine Zeilenbreite.**
   Gemessen beim Bauen des Musters zu Vorgang #188: Ohne diese Regel steht er
   dort **894 px = 100 Zeichen** breit, weil die Begrenzung an
   `.book-detail__description` hängt und nicht an ihm. Die Fassung tauschte
   damit „zu schmal" (27 Zeichen) gegen „zu breit" — und hätte ihr eigenes Ziel
   verfehlt, ohne dass es jemandem aufgefallen wäre.

   ⚠ **Der Selektor greift über den Ort, nicht über die Klasse allein.** Er
   stammt aus der Zeit, als beide Fassungen nebeneinander bestanden; seit dem
   2026-08-31 steht der Kurztext nur noch dort. Er bleibt trotzdem so
   geschrieben: Er sagt, **warum** die Breite gilt — weil der Text im Textblock
   steht und damit Fließtext ist. */
.book-detail__text > .book-detail__short-description { max-width: var(--textbreite); }

/* Knöpfe: gefüllt in der Buchfarbe statt im Teal des heutigen Standes. */
.book-detail__actions { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-top: 1.5rem; }
.book-detail__actions--spalte { flex-direction: column; align-items: stretch; margin-top: 0.25rem; }

/* Fetter Schnitt wie in der Navigation: gesperrte Versalien in 13px wirken mager
   zu dünn – besonders beim unbelegten Knopf, der seine Farbe nur als Kontur und
   Schrift hat. Beide Knöpfe tragen ihn, sonst spränge die Schrift beim
   Überfahren, wenn der eine fett wird und der andere nicht. */
/* ⚠ **Drei Knöpfe, eine Form.** Der dritte kam am 2026-08-31 dazu (Vorgang
   #239, der Weg in die Buchhandlung). Er hatte zuerst eine eigene Regel — und
   stand damit 68 px hoch neben zwei 50-px-Knöpfen, weil sein Text umbrach und
   seine Polsterung eine andere war. **Genau davor warnt der Kommentar zwanzig
   Zeilen weiter unten**, seit demselben Vormittag: Wer eine Sonderregel für
   eine Umgebung schreibt, gibt sie allen Geschwistern, die dort stehen. Die
   Form steht deshalb hier, und unten steht nur noch die Farbe. */
.btn-leseprobe, .btn-pressinfo {
  display: inline-block; padding: 12px 24px; min-width: 240px; text-align: center;
  font-family: var(--raleway); font-weight: 700;
  font-size: var(--schrift-3); letter-spacing: 0.08em;
  text-transform: uppercase; text-decoration: none; border: 2px solid var(--akzent);
}
.btn-leseprobe { background: var(--akzent); color: #fff; --pdf-aussparung: var(--akzent); }
.btn-leseprobe:hover { filter: brightness(1.1); }
.btn-pressinfo { background: transparent; color: var(--akzent); }
.btn-pressinfo:hover { background: var(--akzent); color: #fff; --pdf-aussparung: var(--akzent); }
/* ⚠ **Beide Knöpfe, nicht nur der eine.** Die Regel galt bis zum 2026-08-31
   allein `.btn-leseprobe`; der Presseinfo-Knopf behielt daneben `min-width:
   240px`, die größere Polsterung und die größere Schrift. Untereinander in der
   250-px-Spalte standen sie dadurch **verschieden hoch — 50 px gegen 44** und
   in zwei Schriftgraden. Gefunden beim Nachsehen zu Vorgang #229, gemeldet war
   etwas anderes. **Wer eine Sonderregel für eine Umgebung schreibt, gibt sie
   allen Geschwistern, die dort stehen.** */
.book-detail__actions--spalte .btn-leseprobe,
.book-detail__actions--spalte .btn-pressinfo {
  min-width: 0; width: 100%; padding: 10px 16px; font-size: var(--schrift-2);
}

/* Zusatzmaterial — eigenes Band seit 2026-08-14; `.book-detail__links` entfällt. */
.zusatzmaterial { margin: 2.5rem 0; }
.extlink-list { list-style: none; margin: 0; padding: 0; }
.extlink-item { border-bottom: 1px solid #ececec; }
.extlink-item__link { display: flex; gap: 1.2rem; padding: 0.6rem 0; text-decoration: none; color: inherit; }
.extlink-item__icon { flex-shrink: 0; width: 1.5rem; color: var(--blau); }
.extlink-item__link:hover .extlink-item__title { color: var(--blau); }

.page-events, .page-news { margin: 2.5rem 0; }
.page-events__heading, .page-news__heading, .zusatzmaterial__heading {
  font-family: var(--raleway); font-size: var(--schrift-6); text-transform: uppercase;
  letter-spacing: 0.04em; border-bottom: 2px solid var(--dunkel);
  padding-bottom: 0.5rem; margin-bottom: 1rem;
}

/* Meldungen zu einem Buch oder einer Person — dieselbe Aufteilung wie die
   Terminliste auf der Startseite: Datum in fester Spalte, Titel daneben. */
.page-news__list { list-style: none; margin: 0; padding: 0; }
.page-news__item { border-bottom: 1px solid #ececec; }
.page-news__item:last-child { border-bottom: none; }
.page-news__link {
  display: flex; gap: 1.2rem; padding: 0.7rem 0;
  text-decoration: none; color: inherit;
}
.page-news__date { flex-shrink: 0; width: 8rem; color: var(--blau); font-size: var(--schrift-3); }
.page-news__title { font-family: var(--raleway); }
.page-news__link:hover .page-news__title { color: var(--blau); }

/* ══ Pressestimmen ══
   Hier trägt die Buchfarbe auch die Zitate: eine Kante links in `--akzent`,
   sonst nichts. Das Zitat steht größer und kursiv als der Fließtext, die Quelle
   klein und in Versalien darunter – dasselbe Paar aus Aussage und Beleg wie in
   den Metadaten oben („Auch lieferbar als").                                   */
.press-quotes { margin: 2.5rem 0; }
.press-quotes__heading {
  font-family: var(--raleway); font-size: var(--schrift-6); text-transform: uppercase;
  letter-spacing: 0.04em; border-bottom: 2px solid var(--dunkel);
  padding-bottom: 0.5rem; margin-bottom: 1.2rem;
}
/* Ruhige Reihe statt gerahmter Blöcke. Zuvor trug jedes Zitat einen farbigen
   Balken links, stand kursiv und trug seine Quelle in gesperrten Versalien —
   drei Auffälligkeiten je Eintrag. Weil die Zitate zwischen einem Halbsatz und
   vier Zeilen lang sind, sprang der Balken zudem in der Höhe und bildete eine
   flackernde linke Kante.

   Jetzt trennt eine feine Linie, der Text steht aufrecht in Fließtextgröße, und
   die Zitate fluchten mit der Überschrift. Auf Farbe wird hier bewusst
   verzichtet: die Seite trägt sie schon in Kante, Metablock und Knöpfen. */
/* `figure` und `blockquote` bringen vom Browser je 40px Seitenrand mit. `style.css`
   fängt das mit einem Reset ab, diese Datei hat keines — ohne das `margin: 0`
   stünden Zitate und Trennlinien eingerückt neben der Überschrift. */
.press-quote {
  margin: 0;
  padding: 1rem 0;
  border-bottom: 1px solid #e8e8e8;
}
.press-quote:last-child { border-bottom: none; }
.press-quote__text {
  margin: 0;
  font-size: var(--schrift-5); line-height: 1.75; color: var(--text);
  max-width: var(--textbreite);
}
/* Anführungszeichen aus dem Stylesheet: die Zitate stehen in der Datenbank
   nackt. **Guillemets seit dem 22.09.2026** (Vorgang #307, Fassung A) — die
   Begründung steht bei `.stimme__zitat`, und dort steht auch, dass es vier
   Stellen im Haus sind. */
/* ⚠ **Die Anführungszeichen hängen am ersten und letzten Absatz, nicht am
   `<blockquote>`.** Seit die Zitate HTML sind (Absätze statt reinem Text),
   stünde ein `::before` am Blockelement in einer **eigenen Zeile** darüber —
   genau so gemeldet: ein einsames „ über dem Text und ein zweites darunter.
   Am Absatz stehen sie wieder im Satz. */
.press-quote__text > p:first-child::before { content: '»'; }
.press-quote__text > p:last-child::after   { content: '«'; }
/* Rückfall für Zitate, die (noch) kein Absatzelement führen. */
.press-quote__text:not(:has(> p))::before { content: '»'; }
.press-quote__text:not(:has(> p))::after  { content: '«'; }

/* ⚠ Der Absatz im Zitat darf keinen eigenen Abstand mitbringen — sonst
   klaffte zwischen Zitat und Quellenangabe plötzlich eine Leerzeile, wo vorher
   reiner Text stand. Mehrere Absätze in einem Zitat bekommen ihn ausdrücklich. */
.press-quote__text > p { margin: 0; }
.press-quote__text > p + p { margin-top: 0.6rem; }

/* Die Quelle nennt oft Rezensent, Medium und Datum in einer Zeile — als gesperrte
   Versalien wurde daraus ein zweiter lauter Reiz neben dem Zitat. Klein und grau
   genügt; sie soll belegen, nicht rufen. */
.press-quote__source {
  margin-top: 0.4rem;
  font-size: var(--schrift-3); color: var(--leise);
}
.press-quotes__more { margin-top: 0.2rem; }
/* Beschriftung in der Textfarbe, nicht in der Buchfarbe: die Basisfarben sind auf
   5,0:1 gegen Weiß normiert (siehe app/farbe.py) und damit für Fließtext gerade
   ausreichend — als gesperrte Versalien in 13px war das zu wenig. Die Buchfarbe
   trägt jetzt Rahmen und Hoverfläche, den Text trägt sie nicht. Fetter Schnitt
   wie bei den übrigen Knöpfen. */
.press-quotes__toggle {
  cursor: pointer; list-style: none;
  font-family: var(--raleway); font-weight: 700;
  font-size: var(--schrift-3); letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--text);
  display: inline-block; padding: 0.32rem 0.85rem;
  border: 2px solid var(--akzent); margin-bottom: 1.2rem;
}
.press-quotes__toggle::-webkit-details-marker { display: none; }
.press-quotes__toggle:hover { background: var(--akzent); color: #fff; }

/* Welche der beiden Beschriftungen gilt, entscheidet der Zustand des <details>. */
.press-quotes__weniger { display: none; }
.press-quotes__more[open] .press-quotes__mehr { display: none; }
.press-quotes__more[open] .press-quotes__weniger { display: inline; }

/* ══ Kategorie- und Suchseiten ══ */
.kat-pfad { font-size: var(--schrift-3); color: var(--leise); margin-bottom: 0.3rem; }
.kat-pfad a { text-decoration: none; }
.kat-unterliste, .category-nav, .autoren-alpha {
  list-style: none; display: flex; flex-wrap: wrap; gap: 0.4rem 0.5rem;
  padding: 0; margin: 0 0 2rem;
}
.kat-unterliste a, .category-nav a, .autoren-alpha a {
  display: inline-block; padding: 0.32rem 0.85rem;
  border: 1px solid var(--dunkel); color: var(--dunkel);
  font-family: var(--raleway); font-size: var(--schrift-2); letter-spacing: 0.06em;
  text-transform: uppercase; text-decoration: none;
}
.kat-unterliste a:hover, .category-nav a:hover, .autoren-alpha a:hover {
  background: var(--dunkel); color: #fff;
}

/* ── Die Fächer eines Regals (Vorgang #175) ──
   Auf der Regalseite sind sie die eigentliche Navigation, nicht der Nachtrag:
   „Wenn dort stattdessen prominent die jeweiligen Unterkategorien stehen, kann
   man sich besser orientieren" (Miriam Hirschauer, 2026-08-20).

   ⚠ **Sie tragen die Farbe des Menübands** (`--menue`), nicht die der Kacheln:
   Ein Fach führt woandershin, eine Kachel zeigt ein Buch. In der Spielart
   „Farbregal, blaues Menü" werden sie damit von selbst blau, ohne eine zweite
   Regel.

   ⚠ **Die Zahl steht daneben, nicht darunter** — sie ist eine Nebenangabe zum
   Namen und soll die Zeile nicht in zwei Zeilen teilen. `tabular-nums`, damit
   die Ziffern über die Reihe fluchten. */
.kat-faecher {
  list-style: none; display: flex; flex-wrap: wrap; gap: 2px;
  padding: 0; margin: 1.5rem 0 2.5rem;
}
.kat-faecher a {
  display: flex; align-items: baseline; gap: 0.55rem;
  padding: 0.85rem 1.15rem;
  background: var(--menue); color: #fff; text-decoration: none;
  font-family: var(--raleway); font-size: var(--schrift-4); letter-spacing: 0.05em;
  text-transform: uppercase;
}
.kat-faecher a:hover { filter: brightness(1.35); }
.kat-faecher__zahl {
  font-size: var(--schrift-2); opacity: 0.72; font-variant-numeric: tabular-nums;
}
/* ⚠ **Auf dem Telefon zwei Spalten — sonst ist die Fächerleiste eine Wand.**
   Gemessen am 2026-08-24 bei 375 px: 18 Fächer zu je 51 px ergaben **842 px**,
   und das erste Buch begann bei y = 1277, also **nach anderthalb
   Bildschirmen**. Der Verlag wollte die Fächer „prominent" (Vorgang #175) —
   prominent heißt sichtbar, nicht: allein auf dem Schirm.

   ⚠ **Zwei Spalten, nicht kleinere Knöpfe.** Der naheliegende Weg wäre weniger
   Polsterung; er spart aber fast nichts, weil bei 375 px ohnehin nur **ein**
   Knopf in die Zeile passt — die Zahl der Zeilen bleibt. Und er stünde gegen
   die Berührungsziele: Das Projekt hebt sie unter `pointer: coarse`
   ausdrücklich auf 44 px. Zwei Spalten halbieren die Zeilen und lassen die
   Höhe, wo sie ist.

   ⚠ **Die langen Namen brechen dann um** („Gegenwartsliteratur (ab 1945)"), und
   `align-items: stretch` des Rasters gibt allen Knöpfen einer Zeile dieselbe
   Höhe — die Leiste bleibt eine Ordnung und wird kein Treppenmuster. */
@media (max-width: 560px) {
  /* ⚠ **`minmax(0, 1fr)`, nicht `1fr`.** `1fr` ist `minmax(auto, 1fr)`, und das
     `auto` ist die Breite des längsten **unteilbaren** Wortes. Mit `1fr 1fr`
     kamen deshalb **214 px gegen 170 px** heraus — „Kriminalromane" drückte die
     eine Spalte breiter, und die andere wurde eng. Zwei Spalten, die man als
     zwei gleiche liest, müssen auch zwei gleiche sein. */
  .kat-faecher { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* ⚠ **44 px hoch, und die Zahl ist gemessen.** Das Projekt hebt
     Berührungsziele unter `pointer: coarse` ausdrücklich auf 44 px; kleinere
     Polsterung spart hier zwar weitere 43 px, unterschritte sie aber. Mit
     0,78 rem und 0,75 rem Polsterung kommen genau 44 heraus (zweizeilige
     Knöpfe 64). */
  .kat-faecher a {
    align-items: center; padding: 0.75rem 0.7rem;
    font-size: var(--schrift-2); letter-spacing: 0.03em;
    /* ⚠ **Silbentrennung, kein harter Schnitt.** „Gegenwartsliteratur" ist
       19 Zeichen und passt in keine halbe Telefonbreite; ohne Trennung stand es
       über die Kante hinaus und wurde abgeschnitten. `overflow-wrap: anywhere`
       bräche irgendwo — „GEGENWARTSLITERAT / UR". `hyphens: auto` trennt nach
       den Regeln der Sprache; `lang="de"` steht am `<html>`, sonst täte es
       nichts. Der harte Umbruch bleibt als Rückfall für Browser ohne
       Trennmuster. */
    hyphens: auto; overflow-wrap: break-word; min-width: 0;
  }
}

/* Überschrift über der gekürzten Titelwand — an der Stelle, an der sonst die
   Sortierleiste steht, und in derselben Zurückhaltung. */
.regal-neu {
  font-family: var(--raleway); font-size: var(--schrift-3); font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase; color: var(--dunkel);
  margin: 0 0 0.2rem;
}
.regal-alle { margin: 1.5rem 0 0; }
.regal-alle a {
  font-family: var(--raleway); font-size: var(--schrift-3); letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--dunkel);
  border-bottom: 1px solid currentColor; text-decoration: none;
  padding-bottom: 2px;
}
.regal-alle a:hover { color: var(--menue); }

/* ── Sortierung der Bücherseiten (Vorgang #89) ──
   Ohne Rahmen, anders als die Kategorieknöpfe darüber: Die führen woandershin,
   diese Zeile ordnet nur um. Gesperrte Versalien wie dort, damit sie zur
   Gestaltung gehört — aber eine Nummer kleiner. */
.sortierleiste {
  display: flex; flex-wrap: wrap; align-items: baseline;
  gap: 0.2rem 1rem; margin: 0 0 1.5rem;
  font-family: var(--raleway); font-size: var(--schrift-1);
  letter-spacing: 0.08em; text-transform: uppercase;
}
.sortierleiste__wort { color: var(--leise); }
.sortierleiste__liste {
  list-style: none; display: flex; flex-wrap: wrap;
  gap: 0.2rem 1rem; padding: 0; margin: 0;
}
.sortierleiste a {
  color: var(--leise); text-decoration: none;
  border-bottom: 1px solid transparent; padding-bottom: 2px;
}
.sortierleiste a:hover { color: var(--dunkel); border-bottom-color: var(--dunkel); }
.sortierleiste__aktiv {
  color: var(--dunkel); border-bottom: 2px solid var(--dunkel); padding-bottom: 1px;
}
@media (pointer: coarse) {
  .sortierleiste a, .sortierleiste__aktiv {
    display: inline-block; padding-top: 0.3rem; padding-bottom: 0.3rem;
  }
}

.search-form { margin-bottom: 2rem; }
.search-form__row { display: flex; max-width: 560px; }
/* ⚠ `min-width: 0` — sonst schrumpft das Feld nie unter seine Inhaltsbreite
   (Vorgabe rund 20 Zeichen) und die Zeile steht bei 320 px über. Dieselbe Falle
   wie beim Suchfeld im Menüband. */
.search-form__row input[type="search"] {
  flex: 1; min-width: 0; padding: 0.65rem 1rem; font-size: var(--schrift-5);
  border: 2px solid var(--dunkel); border-right: none; outline: none;
}
/* Das `outline: none` darüber nahm dem Feld jeden sichtbaren Fokus (2026-09-16).
   ⚠ **Der Fokus färbt den vorhandenen Rahmen, statt einen zweiten zu ziehen**
   (Vorgang #339). Die Fassung vom 16.09. setzte einen Umriss mit Abstand neben
   den Rahmen — zwei Rahmen um ein Feld, und weil die Suchseite das Feld mit
   `autofocus` öffnet, stand der doppelte bei jedem Wechsel der Sortierung da.
   Sichtbar bleibt der Fokus trotzdem: Der Rahmen wird blau und innen um 1 px
   dicker — die Farbe allein wäre zu leise, Dunkel und Verlagsblau liegen nah
   beieinander. */
.search-form__row input[type="search"]:focus-visible {
  outline: none; border-color: var(--blau); box-shadow: inset 0 0 0 1px var(--blau);
}
.search-form__row button {
  padding: 0.65rem 1.4rem; background: var(--dunkel); color: #fff;
  border: 2px solid var(--dunkel); font-family: var(--raleway);
  letter-spacing: 0.08em; text-transform: uppercase; font-size: var(--schrift-2); cursor: pointer;
}
.search-form__row button:hover { background: var(--blau); border-color: var(--blau); }
.search-meta { margin-bottom: 1.5rem; color: var(--leise); font-size: var(--schrift-4); }

/* ══ Autorenseiten ══ */
.autoren-section { margin-bottom: 2.5rem; }
.autoren-section__letter {
  font-family: var(--raleway); font-size: var(--schrift-7); color: var(--dunkel);
  border-bottom: 2px solid var(--dunkel); padding-bottom: 0.3rem; margin-bottom: 0.8rem;
}
.autoren-section__list { list-style: none; margin: 0; padding: 0; columns: 2; gap: 1.5rem; }
.autoren-section__list li { margin-bottom: 0.35rem; break-inside: avoid; }
.autoren-section__list a { color: var(--text); text-decoration: none; }
.autoren-section__list a:hover { color: var(--blau); text-decoration: underline; }

.autor-name { margin-bottom: 1.5rem; }
.autor-bio { margin-bottom: 2.5em; max-width: var(--textbreite); }
.autor-bio__figure { float: right; margin: 0 0 1em 2em; max-width: 180px; }
.autor-bio__photo { display: block; width: 100%; }
.autor-bio__credit { margin-top: 0.4em; font-size: var(--schrift-2); line-height: 1.3; color: var(--leise); }

.author-books { margin: 3rem 0 2rem; }
.author-books__heading {
  font-family: var(--raleway); font-size: var(--schrift-6); text-transform: uppercase;
  letter-spacing: 0.04em; border-bottom: 2px solid var(--dunkel);
  padding-bottom: 0.5rem; margin-bottom: 1rem;
}
.author-books__slider { position: relative; }
/* ⚠ **Der Rollbalken ist unsichtbar, der Streifen bleibt rollbar** (Vorgang
   #215, 2026-08-26: „Außerdem gefällt mir dieser horizontale Weiterscrollbalken
   nicht, das sieht so technisch und wenig smooth aus. Der könnte ja einfach
   weg."). `scrollbar-width: none` verbirgt nur die Anzeige — Wischen,
   Trackpad, Pfeiltasten und die Knöpfe von `baender.js` wirken unverändert.

   ⚠ **Er sagte allerdings auch, dass es weitergeht.** Was das übernimmt, ist
   die **angeschnittene nächste Kachel** und die beiden Pfeile, die seit dem
   2026-08-20 von Anfang an dastehen (Vorgang #140) — ohne beides wäre die
   Änderung ein Verlust.

   ⚠ **Sie gilt allen Streifen, nicht nur dem der Startseite.** Buchseite,
   Leseprobe und Reihenseite benutzen dieselbe Klasse; eine Sonderregel für
   eine Seite wäre die Stelle, an der die nächste Verbesserung nur bei einer
   ankommt — derselbe Grund, aus dem `baender.js` alle Bänder bedient. */
/* 🛑 **`padding-top` samt gleich großem negativem Rand gibt dem Fähnchen oben
   Platz** (Vorgang #298, gemeldet am 15.09.2026: „Das selbst erstellte Fähnchen
   … ragt nicht über das Cover hinaus"). `overflow-x: auto` setzt auch
   `overflow-y` auf `auto` — ein Kasten, der waagerecht rollt, beschneidet
   senkrecht mit. Das Fähnchen steht mit `top: -6px` über der Umschlagkante und
   verlor genau diese 6 px (gemessen auf einer Buchseite: 6 px abgeschnitten).
   Betroffen war **jedes** Fähnchen in einem Streifen; aufgefallen ist es am
   eigenen, weil die Streifen der Startseite die abgeleiteten gar nicht zeigen.
   Der negative Rand hebt den Streifen wieder an, die Seite verschiebt sich
   nicht. **Wer die Überragung des Fähnchens ändert, zieht beide Werte nach.** */
.author-books__track {
  display: flex; gap: 1.2rem; overflow-x: auto;
  scroll-snap-type: x mandatory; padding-bottom: 0.75rem;
  padding-top: 6px; margin-top: -6px;
  scrollbar-width: none;
}
.author-books__track::-webkit-scrollbar { display: none; }
.author-books__item {
  flex: 0 0 var(--kachel); scroll-snap-align: start; text-decoration: none;
  color: var(--text); display: flex; flex-direction: column; gap: 0.4rem;
}
.author-books__cover {
  width: var(--kachel); height: var(--kachel-cover); object-fit: contain; object-position: top;
  box-shadow: 0 6px 16px rgba(0,0,0,.2);
}
.author-books__title { font-size: var(--schrift-2); line-height: 1.3; font-weight: 700; }
.author-books__subtitle { font-size: var(--schrift-1); color: var(--leise); line-height: 1.3; }
.author-books__arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 2rem; height: 2rem; border: 0; background: var(--dunkel); color: #fff; cursor: pointer;
}
.author-books__arrow--prev { left: -1rem; }
.author-books__arrow--next { right: -1rem; }
.author-books__arrow[hidden] { display: none; }
/* Der Pfeil, der gerade nicht weiterführt, bleibt stehen und blendet ab —
   er sagt damit, dass es eine Blätteransicht ist (Vorgang #140). `disabled`
   nimmt ihm den Klick, `cursor: default` den Greifzeiger.

   🛑 **Kein `pointer-events: none`** (Vorgang #266, 2026-09-12). Hier stand es,
   „für den Greifzeiger" — den regelt aber schon `cursor`. Die Wirkung war eine
   andere: Der Klick fiel **durch** den abgeblendeten Pfeil hindurch. Beide Pfeile
   ragen mit einer Hälfte über den Streifen (`left/right: -1rem`), und darunter
   liegt die erste bzw. letzte Kachel — gemeldet mit „Klick auf den inaktiven
   Vorwärts-Button öffnet die Buchseite". Gemessen: unter der inneren Hälfte des
   Pfeils lag der Link der Kachel, unter der äußeren nur der Seitenrahmen,
   deshalb geschah es nicht bei jedem Klick. Ein `disabled`-Knopf, der Klicks
   annimmt, schluckt sie; einer, der sie durchlässt, gibt sie weiter. */
.author-books__arrow:disabled { opacity: .35; cursor: default; }

/* Berührungsziele ohne Maus: 2 rem sind 32 px — mit dem Daumen zu wenig.
   Mindestmaß 24 px (WCAG 2.2, 2.5.8); 44 px sind die bequeme Größe. */
@media (pointer: coarse) {
  .author-books__arrow { width: 2.75rem; height: 2.75rem; }
}

/* ══ Vorschauen ══ */
.preview-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.75rem; }
.preview-link {
  display: flex; align-items: center; gap: 1.25rem; padding: 1rem 1.25rem;
  border: 1px solid #e2e2e2; text-decoration: none; color: inherit; background: #fff;
}
.preview-link:hover { border-color: var(--dunkel); }
.preview-thumb { flex-shrink: 0; width: 90px; }
.preview-thumb img { display: block; width: 100%; height: auto; box-shadow: 0 4px 12px rgba(0,0,0,.16); }
.preview-info { display: flex; flex-direction: column; gap: 0.35rem; }
.preview-title { font-family: var(--raleway); font-weight: 700; }
.preview-download { font-size: var(--schrift-3); color: var(--blau); }

@media (max-width: 800px) {
  .book-detail { grid-template-columns: 1fr; gap: 1.5rem; }
  .book-detail__cover { max-width: 220px; }
  .autoren-section__list { columns: 1; }
}

/* ══ Spielart „Farbregal mit blauem Menü" ═══════════════════════════════════
   Dieselbe Gestaltung, nur tragen Kopf- und Fußband das Verlagsblau statt des
   dunklen Grundtons. Anlass: der Verleger hängt am zuKlampen-Blau, das die
   heutige Website im Kopfbalken führt.

   #003D7A ist genau die Farbe aus `logo-blue.svg` — dieselbe, die `style.css`
   als `--blue` benutzt. Kein neuer Ton, sondern der vorhandene.

   Bewusst nur eine Zeile: die Spielart soll sich nie vom Farbregal fortbewegen.
   Alles andere kommt aus derselben Datei, nicht aus einer Kopie. Was nicht
   umschlagen soll — Überschriften, Rahmen der Kategorieknöpfe, Suchformular —
   hängt weiter an `--dunkel` und bleibt deshalb unberührt.                    */
/* ⚠ **Hier stand die einzige Zeile, die „Farbregal" von „Farbregal, blaues
   Menü" unterschied** — `[data-gestaltung="farbregal-blau"] { --menue: … }`.
   Der Verlag hat sich am 2026-08-24 für die blaue Spielart entschieden; der
   Wert steht seither oben in der Palette, und das Attribut am <html> gibt es
   nicht mehr. Der Ton ist der aus `logo-blue.svg`, kein neuer. */

/* Redaktionelle Textseiten -------------------------------------------------
   Dieselbe Auszeichnung wie im heutigen Stand, andere Anmutung: Überschriften
   in Raleway auf --dunkel, Kanten statt Rahmen, Farbe aus --akzent. */

.seite-lead { font-size: var(--schrift-6); color: var(--leise); margin: -0.5rem 0 1.75rem; max-width: 46rem; }
.seite-bild { display: block; width: 100%; max-width: 24rem; height: auto; margin: 0 0 1.75rem; box-shadow: 0 6px 18px rgba(0,0,0,.14); }
/* ⚠ `overflow-wrap`: siehe style.css — deutsche Bandwurmwörter im
   redaktionellen Text schieben sonst bei 320 px die ganze Seite nach rechts. */
.seite-text { max-width: var(--textbreite); line-height: 1.75; overflow-wrap: break-word; }
.seite-text h2 { font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-7);
  letter-spacing: .04em; text-transform: uppercase; margin: 2.25rem 0 0.6rem; color: var(--dunkel); }
.seite-text h3 { font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-5); margin: 1.5rem 0 0.4rem; color: var(--dunkel); }
.seite-text p { margin: 0 0 1rem; }
.seite-text ul, .seite-text ol { margin: 0 0 1rem 1.2rem; }
.seite-text li { margin-bottom: 0.35rem; }
.seite-text a { color: var(--blau); }
.seite-text table { border-collapse: collapse; margin: 0 0 1.75rem; width: 100%; max-width: 34rem; }
.seite-text th, .seite-text td { border-bottom: 1px solid #e3e3e3; padding: 0.55rem 0.7rem; text-align: left; }
.seite-text th { font-family: var(--raleway); font-weight: 700; letter-spacing: .03em;
  text-transform: uppercase; font-size: var(--schrift-2); border-bottom: 2px solid var(--dunkel); }
.seite-hinweis { font-size: var(--schrift-4); color: var(--leise); margin: 0 0 1.5rem; }
.seite-hinweis a { color: var(--blau); }

/* Kachelübersicht /verlag – die Bildkante trägt die Farbe */
.verlag-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1.75rem; }
.verlag-card { display: flex; flex-direction: column; text-decoration: none; color: inherit;
  background: #fff; box-shadow: 0 4px 14px rgba(0,0,0,.10); transition: transform .15s, box-shadow .15s; }
.verlag-card:hover { transform: translateY(-3px); box-shadow: 0 10px 24px rgba(0,0,0,.16); }
.verlag-card__bild { display: block; aspect-ratio: 4 / 3; overflow: hidden; background: var(--grau);
  border-bottom: 4px solid var(--akzent); }
.verlag-card__bild img { width: 100%; height: 100%; object-fit: cover; display: block; }
.verlag-card__text { display: flex; flex-direction: column; gap: 0.45rem; padding: 1rem 1.1rem 1.2rem; }
.verlag-card__titel { font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-5); color: var(--dunkel); }
.verlag-card__teaser { font-size: var(--schrift-4); color: var(--leise); line-height: 1.55; }
.verlag-card__mehr { font-size: var(--schrift-2); letter-spacing: .06em; text-transform: uppercase;
  font-family: var(--raleway); font-weight: 700; color: var(--blau); margin-top: auto; padding-top: 0.5rem; }

/* Ansprechpartner, Haus und Auslieferungen */
.personen__heading { font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-6);
  letter-spacing: .05em; text-transform: uppercase; margin: 2.75rem 0 1.1rem; color: var(--dunkel); }
.personen__list { list-style: none; margin: 0; padding: 0;
  /* ⚠ **300 px, nicht 260 — die Zahl kommt von der längsten Mailadresse.**
     Bei 260 px blieben der Textspalte neben dem Foto **142 px**; die Adresse
     `veranstaltungen@zuklampen.de` misst 141 und brach trotzdem um. Gemeldet
     wurde sie (Vorgang #134), betroffen waren **6 von 10** Adressen auf der
     Kontaktseite. Mit 300 px bleiben rund 235 px — Luft für die längste Adresse
     und für Schriftrundungen.

     ⚠ **`min(300px, 100%)`, nicht nackte 300 px.** Eine Mindestbreite, die
     breiter ist als das Fenster, läuft über: Bei 320 px Bildschirm bleiben nach
     den Seitenrändern rund 272 px. Ohne das `min()` entstünde an der Stelle,
     an der der alte Fehler behoben wird, ein neuer. */
  display: grid; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); gap: 1.4rem; }
.personen__card { display: flex; gap: 0.9rem; background: #fff; padding: 1rem;
  box-shadow: 0 3px 12px rgba(0,0,0,.09); border-left: 3px solid var(--akzent); }
.personen__foto {
  width: 76px; height: 76px; object-fit: cover; flex-shrink: 0;
  /* Ausschnitt oben statt mittig — Begründung in style.css. */
  object-position: 50% 20%;
}
.personen__text { min-width: 0; }
.personen__name { font-family: var(--raleway); font-weight: 700; margin: 0 0 0.15rem; color: var(--dunkel); }
.personen__rolle { font-size: var(--schrift-3); color: var(--leise); margin: 0 0 0.15rem; }
.personen__hinweis { font-size: var(--schrift-3); color: var(--leise); font-style: italic; margin: 0.2rem 0; }
.personen__adresse { font-size: var(--schrift-3); color: var(--leise); margin: 0.4rem 0; line-height: 1.45; }
.personen__kontakt { list-style: none; margin: 0.4rem 0 0; padding: 0; font-size: var(--schrift-3); }
.personen__kontakt li { margin-bottom: 0.15rem; overflow-wrap: anywhere; }
.personen__kontakt a { color: var(--blau); }

/* Presseservice */
.presse-block { margin-top: 1rem; }
.presse-titel { list-style: none; margin: 0 0 1.25rem; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1.25rem; }
.presse-titel__item { display: flex; gap: 0.9rem; background: #fff; padding: 0.9rem;
  box-shadow: 0 3px 12px rgba(0,0,0,.09); border-left: 3px solid var(--akzent); }
.presse-titel__cover { flex-shrink: 0; width: 62px; }
.presse-titel__cover img { width: 100%; height: auto; display: block; box-shadow: 0 3px 10px rgba(0,0,0,.2); }
.presse-titel__name { font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-4); margin: 0 0 0.2rem; line-height: 1.3; }
.presse-titel__name a { color: var(--dunkel); text-decoration: none; }
.presse-titel__name a:hover { text-decoration: underline; }
.presse-titel__autor { font-size: var(--schrift-3); color: var(--leise); margin: 0 0 0.5rem; }
.presse-titel__links { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0; font-size: var(--schrift-2); }
.presse-titel__links a { font-family: var(--raleway); font-weight: 700; letter-spacing: .03em;
  color: #fff; background: var(--akzent); padding: 0.22rem 0.55rem; text-decoration: none; }
.presse-titel__links a:hover { filter: brightness(1.12); }

/* „Weitere Informationen“ – die Geschwisterseiten */
.seite-mehr { margin-top: 3.25rem; border-top: 2px solid var(--dunkel); padding-top: 1.25rem; }
.seite-mehr__heading { font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-3);
  letter-spacing: .06em; text-transform: uppercase; margin: 0 0 0.8rem; color: var(--dunkel); }
.seite-mehr__list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; font-size: var(--schrift-4); }
.seite-mehr__list a { color: var(--blau); }
.seite-mehr__list span[aria-current] { color: var(--leise); }
.verlag-card__bild--leer { background: repeating-linear-gradient(135deg, #f2f2f2 0 12px, #ececec 12px 24px); }

/* Balken über einer Seite, die aus dem Backend heraus angesehen wird.
   Siehe app/templates/_vorschau_hinweis.html. */
.vorschau-hinweis {
  background: #fff4d6; border-left: 4px solid #e0b64a;
  padding: 0.75rem 1rem; margin: 0 0 2rem; font-size: var(--schrift-4); line-height: 1.5;
  box-shadow: 0 2px 8px rgba(0,0,0,.07);
}
.vorschau-hinweis code { background: #fff; padding: 0.05em 0.35em; }
.vorschau-hinweis a { color: var(--blau); }
.vorschau-hinweis__zurueck { display: inline-block; margin-left: 0.5rem; white-space: nowrap; }

/* Reihen ------------------------------------------------------------------ */
.reihen-liste { list-style: none; margin: 0; padding: 0; }
.reihen-item {
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
  background: #fff; box-shadow: 0 3px 12px rgba(0,0,0,.09);
  border-left: 3px solid #e3e3e3; padding: 1rem 1.2rem; margin-bottom: 0.9rem;
  transition: transform .15s, box-shadow .15s;
}
.reihen-item:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0,0,0,.14); }
.reihen-link { text-decoration: none; color: inherit; display: flex; flex-direction: column; gap: 0.25rem; min-width: 0; }
.reihen-name { font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-5); color: var(--dunkel); }
.reihen-untertitel { font-size: var(--schrift-3); color: var(--leise); }
.reihen-anzahl { font-size: var(--schrift-2); letter-spacing: .05em; text-transform: uppercase;
  font-family: var(--raleway); font-weight: 700; color: var(--blau); }
.reihen-cover { display: flex; gap: 0.4rem; flex-shrink: 0; }
.reihen-cover img { height: 58px; width: auto; box-shadow: 0 4px 12px rgba(0,0,0,.2); }

/* Der Hinweis am Titel: „Erscheint im Oktober 2026" (Vorgang #52). Auf der
   Karte und auf den Bändern steht er in dieser Grundform. Die weiße Marke mit
   der Kachelfarbe als Schrift, samt der `order`-Regeln, die sie unter den
   Titel schoben, gehörte der Rasterkachel und ist mit ihr am 14.09.2026
   entfallen (Vorgang #254). */
.buchmarke {
  font-family: var(--raleway); font-weight: 700;
  font-size: var(--schrift-1); letter-spacing: .08em; text-transform: uppercase;
  line-height: 1.3; margin: 0;
}

/* ⚠ **Auf den Bändern der Buchseite gibt es nur das Fähnchen, keine Zeile.**
   Bis zum 17.08.2026 stand hier ein Aufkleber mit weißem Grund auf dem Umschlag;
   er schob den Titel der markierten Kachel 20 px aus der Flucht seiner
   Nachbarn. Begründung in CLAUDE.md, „Was gerade erschienen ist“. */
.author-books__item { position: relative; }
.author-books__item > .buchcover { width: fit-content; max-width: var(--kachel); margin: 0 auto; }
.author-books__cover { width: auto; max-width: var(--kachel); }

/* ── Das Fähnchen (Vorgang #52) ──
   Begründung, Farbwahl und die Kontrastmessung stehen in CLAUDE.md, „Was gerade
   erschienen ist oder erscheint“.
   ⚠ **Klein, und das ist gemessen.** Auf der damaligen Rasterkachel (Umschlag
   92 px breit) nahm ein Fähnchen von 24 px fast ein Viertel davon ein und legte
   sich bei „NachtTaxi“ quer über den Titel.

   ⚠ **Die enge Rechnung gilt seit dem 14.09.2026 dem Kachelstreifen.** Die
   Rasterkachel ist entfallen (Vorgang #254). Im Streifen steht der Umschlag in
   einem 150 × 208 px großen Kasten (`--kachel`, `--kachel-cover`), bei 2:3 also
   139 × 208 px; die Karte ist mit 150 px breiten und 207 bis 258 px hohen
   Umschlägen größer. Das Fähnchen ist in beiden gleich groß. **Wer den Streifen
   verkleinert, zieht `.fahnenprobe__cover` in `admin.css` nach** — die
   Vorschau im Fähnchenformular bildet dieses Maß nach. */
.buchcover { position: relative; display: block; }
/* ✅ **Fassung a, gewählt am 14.09.2026** (Vorgang #185). Miriam Hirschauer
   hatte am 08.09. drei Dinge bemängelt: der weiße Rahmen zu dick, in der Kerbe
   fehlt er, und das Dunkle über der Buchkante ergibt keinen Sinn. Vorgelegt
   wurden a (dünner Rand ringsum, oben dieselbe Farbe, leichterer Schatten) und
   b (dazu ein umgeschlagenes Dreieck); die Antwort: „ach, ist das cool! Ich
   nehme Fassung a."

   🛑 **Rand und Fläche sind zwei Pseudo-Elemente mit derselben Form, nicht ein
   `border`.** `clip-path` beschneidet das ganze Element samt Rand und Schatten;
   ein `border` fehlte deshalb genau in der Kerbe (der zweite Befund). Jetzt
   liegt eine weiße Form unten und die farbige, 1 px kleiner, darüber — der
   Rand läuft ringsum, auch um die Kerbe. Das Element selbst trägt keinen Clip,
   und der Schlagschatten des `filter` umfasst beide.

   ⚠ **Die Farbe steht in `--fahne`, nicht in `background`.** Das Makro gibt die
   Farbe aus der Datenbank als `style="--fahne: …"` mit; ein `background` am
   Element läge hinter beiden Formen und wäre ein Rechteck ohne Kerbe.

   ⚠ **Wer hier etwas ändert, ändert `.fahnenprobe__fahne` in `admin.css`
   mit** — die Vorschau im Fähnchenformular misst dieselbe Geometrie. */
.buchfahne {
  position: absolute; top: -6px; right: 8px; z-index: 3;
  --breite: 17px;
  /* 1 px Rand auf jeder Seite — die Schreibfläche bleibt `--breite` breit. */
  width: calc(var(--breite) + 2px); padding: 8px 0 15px;
  isolation: isolate;
  writing-mode: vertical-rl;
  /* `line-height` = Zeilenbreite, siehe die Begründung in `style.css`. */
  line-height: var(--breite);
  font-family: var(--raleway);
  font-size: .52rem; font-weight: 700; letter-spacing: .1em;
  text-transform: uppercase; text-align: center; color: #fff;
  filter: drop-shadow(1px 2px 2px rgba(0,0,0,.4));
}
.buchfahne::before, .buchfahne::after {
  content: ""; position: absolute; z-index: -1;
  clip-path: polygon(0 0, 100% 0, 100% 100%, 50% calc(100% - 6px), 0 100%);
}
.buchfahne::before { inset: 0; background: #fff; }
.buchfahne::after  { inset: 1px; background: var(--fahne, #d8382f); }
/* Rückfall, solange die Zeile in `fahnen` fehlt — die Farbe kommt sonst aus
   der Datenbank (Vorgang #199) und steht als `--fahne` im `style` des Makros.
   **Wer die Farben ändern will, ändert sie im Backend, nicht hier.** */
.buchfahne--neu   { --fahne: #d8382f; }
.buchfahne--kommt { --fahne: #1f6b2f; }

/* ⚠ **Auf der Buchseite selbst, über dem Preis** (Vorgang #45). Dieselbe Marke
   wie an der Kachel, nur größer — sie steht dort allein und muss den Blick vor
   dem Preis abfangen.

   ⚠ **Nicht `var(--akzent)`, sondern das Verlagsblau.** Im Farbregal trägt die
   Buchseite die aus dem Cover abgeleitete Farbe am `<main>`, und die ist auf
   einen Kontrast von 5,0:1 gegen **Weiß** normiert — ein Rahmen in dieser Farbe
   um Text in derselben Farbe wäre bei den hellen Tönen kaum zu sehen. Auf der
   Kachel ist es umgekehrt richtig: Dort steht die Marke *auf* der Akzentfläche
   und braucht sie als Schrift. */
.buchmarke--gross {
  display: inline-block;
  font-size: var(--schrift-3);
  color: var(--blau);
  border: 1px solid currentColor;
  padding: 0.2rem 0.55rem;
  margin: 0 0 0.6rem;
}

.reihe-text { margin-bottom: 1.75rem; }

/* Die eigenen Textseiten einer Reihe (Über die Zeitschrift, Redaktion …).
   Steht über dem Reihentext, damit sie nicht hinter 96 Heften verschwindet —
   sie ist der einzige Weg dorthin, das Hauptmenü führt sie bewusst nicht. */
.reihe-seiten { margin: 0 0 1.75rem; }
.reihe-seiten__list {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: 0.5rem;
}
.reihe-seiten__list a {
  display: inline-block; padding: 0.45rem 1rem;
  font-family: var(--raleway); font-weight: 600; font-size: var(--schrift-2);
  letter-spacing: .05em; text-transform: uppercase;
  background: #fff; color: var(--dunkel); box-shadow: 0 2px 8px rgba(0,0,0,.09);
  transition: transform .15s, box-shadow .15s;
}
.reihe-seiten__list a:hover {
  transform: translateY(-1px); box-shadow: 0 4px 14px rgba(0,0,0,.13);
  text-decoration: none;
}

@media (max-width: 560px) {
  .reihen-item { flex-direction: column; align-items: flex-start; gap: 0.8rem; }
}

/* Wer bei einem Termin liest — siehe style.css. */
.event-detail__urheber { margin: 0 0 1.1rem; font-size: var(--schrift-6); }
.event-detail__urheber a { color: var(--blau); }

/* Bilder aus dem VLB im Band „Zusatzmaterial" — siehe style.css. */
.buchmedien {
  display: flex; gap: .8rem; overflow-x: auto; padding-bottom: .6rem;
  scroll-snap-type: x proximity; margin-bottom: 1.2rem;
}
.buchmedien::-webkit-scrollbar { height: 4px; }
.buchmedien::-webkit-scrollbar-thumb { background: #ccc; border-radius: 2px; }
.buchmedien__bild {
  flex: 0 0 auto; scroll-snap-align: start; text-decoration: none;
  color: inherit; display: flex; flex-direction: column; gap: .3rem;
}
.buchmedien__bild img {
  height: 150px; width: auto; display: block; background: #f4f4f4;
  border: 1px solid #e6e6e6;
}
.buchmedien__bild span {
  font-size: var(--schrift-2); color: #777; text-transform: uppercase;
  letter-spacing: .04em;
}
.buchmedien__bild:hover span { color: var(--blau); }

/* ── Fehlerseite (404) ──────────────────────────────────────────────────────
   ⚠ **Nur die 404 wird hier gestaltet, nicht die 500.** Die 500er-Seite bringt
   ihre paar Regeln selbst mit und lädt bewusst kein Stylesheet: Sie muss auch
   dann stehen, wenn nichts anderes mehr geht. Begründung in `500.html`.

   ⚠ **Die Suche steht oben, groß und mit Beschriftung.** Wer hier landet, hat
   genau eine Frage — „wo ist das, was ich gesucht habe?" —, und ein Suchfeld
   ist die Antwort darauf. Eine Linkliste allein wäre eine Sackgasse mit
   Ausgängen in fünf falsche Richtungen. */
.fehlerseite { max-width: 40rem; }
.fehlerseite h1 { margin-bottom: 1rem; }
.fehlerseite__text { line-height: 1.7; margin-bottom: 1.2rem; }
.fehlerseite__suche { display: flex; flex-wrap: wrap; gap: 0.5rem;
                      align-items: center; margin: 1.5rem 0 2rem; }
.fehlerseite__suche label { flex: 1 0 100%; font-size: var(--schrift-4); }
.fehlerseite__suche input { flex: 1 1 16rem; padding: 0.6rem 0.75rem;
                            font-size: var(--schrift-5); border: 1px solid #bbb;
                            border-radius: 3px; }
.fehlerseite__suche button { padding: 0.6rem 1.2rem; font-size: var(--schrift-5);
                             border: 0; border-radius: 3px; cursor: pointer; }
.fehlerseite__wege { list-style: none; padding: 0; margin: 0;
                     line-height: 2; }
/* ⚠ Hier `--dunkel` und nicht `--akzent`: Die Fehlerseite gehört zu keinem
   Titel, hat also keine Coverfarbe. `--akzent` fiele auf das Rückfallblau
   zurück und sähe aus wie eine Farbe, die etwas bedeutet. */
.fehlerseite h1 { color: var(--dunkel); }
.fehlerseite__suche button { background: var(--dunkel); color: #fff; }
.fehlerseite__wege a { color: var(--dunkel); }

/* ⚠ **Die Menüzeile muss umbrechen dürfen — sonst läuft sie bei vergrößerter
   Schrift aus dem Bild.** Gemessen am 2026-08-16 (Vorgang #28): Bei 200 %
   Textgröße und 1280 px Fenster endete das Suchfeld bei 1464 px, die Seite
   ließ sich also auf **jeder** Seitenart waagerecht schieben. Der Grund war
   `flex-wrap: nowrap` (die Voreinstellung): Die Menüpunkte wachsen mit der
   Schrift, das Suchfeld wird nach rechts hinausgedrückt.

   ⚠ **Die Klappmenü-Grenze half hier nicht**, und das ist der Merkposten: Sie
   steht in Pixeln (860 bzw. 900 px) und fragt nach der **Fensterbreite**. Wer
   nur die Schrift vergrößert — Firefox „Nur Text zoomen", die
   Mindestschriftgröße im Browser, eine Systemeinstellung —, ändert das Fenster
   nicht, und das Klappmenü springt nie an. Der Umbruch greift dagegen immer.

   Betrifft WCAG 2.1, Erfolgskriterium 1.4.4 (Textgröße ändern, Stufe AA). */
.main-nav__inner { flex-wrap: wrap; }
/* `min-width: 0` erlaubt dem Suchfeld zu schrumpfen, statt seine Breite als
   Mindestmaß durchzusetzen; `max-width` hält es im Fenster. */
.nav-search { min-width: 0; max-width: 100%; }

/* Siehe style.css — die Gesamtzahl neben der Archiv-Überschrift. */
.events-section__zahl { color: #6b6b6b; font-weight: 400; font-size: 0.75em; }

/* ⚠ Terminkacheln liefen bei 320 px um bis zu 55 px über den Rand — gefunden
   am 2026-08-16 beim Blättern der Terminübersicht (Vorgang #51), aber älter als
   diese Änderung: Es trifft die Kachel einer *kommenden* Veranstaltung, die
   vorher wie nachher oben steht. Schuld sind lange, ungebrochene Wörter in
   Titel und Ortsangabe („KulturKaffee Rautenkranz", »Grimm des Lebens«).
   Dieselbe Regel wie bei .seite-text und in der Bandliste des Backends. */
.event-card__title,
.event-card__location { overflow-wrap: break-word; }
/* ⚠ **Ohne `min-width: 0` half das Umbrechen nichts**, und das ist die
   eigentliche Ursache: `.event-card__body` ist ein Flex-Kind, und Flex-Kinder
   schrumpfen von sich aus **nicht** unter ihre Mindestbreite aus dem Inhalt
   (`min-width: auto`). Der Kasten blieb also breit, und der Umbruch drinnen
   kam gar nicht zum Zuge. Gemessen: Der Titel war 74 px breit und reichte
   trotzdem bis 329 px auf einem 320er Schirm — er stand schlicht zu weit
   rechts. Dieselbe Falle wie beim Suchfeld im Menüband. */
.event-card__body { min-width: 0; }

/* Der Weg ins Terminarchiv (Vorgang #51). */
.events-archiv-link { margin: 2rem 0 1rem; }
.events-archiv-link__zahl { color: #6b6b6b; font-size: 0.9em; }

/* ── Leseprobe blättern (Vorgang #105) ──
   Wie im heutigen Stand, nur mit den Schriften und Abständen des Farbregals. */
.leseprobe-titel { margin-bottom: 0.2rem; }
.leseprobe-buch { color: var(--leise); margin-bottom: 1.75rem; }
.leseprobe-buch a { color: var(--dunkel); font-weight: 700; }
.leseprobe-anzahl { color: var(--leise); font-weight: 400; }
.leseprobe-anzahl::before { content: " · "; }

.leseprobe-track { gap: 1.5rem; align-items: flex-start; }
.leseprobe-seite {
  flex: 0 0 auto; margin: 0; scroll-snap-align: center; text-align: center;
  /* ⚠ **Gemessen, nicht gesetzt:** Kopfband, Menüband, Seitentitel und
     Blätterleiste über dem Streifen stehen über dem Bild. Wer am Kopfbereich
     etwas ändert, misst diese Zahl nach; sonst ragt die Leseprobe unten aus dem
     Bild oder lässt einen Streifen Weiß stehen.

     Zweimal nachgezogen, und beide Male hat die Messung es gezeigt:
       2026-08-24  Logo 46 → 58 px          23,50 → 24,25 rem
       2026-08-31  Schriftskala +15 % (#189) 24,25 → 25,25 rem

     Beim zweiten Mal begann das Seitenbild 16 px tiefer (358 statt 342 bei einem
     900 px hohen Fenster), und die Bildunterschrift rückte von 840 auf 859. */
  --kopf: 25.25rem;
}
body:has(.bearbeiten-balken) .leseprobe-seite { --balken: 2.5rem; }
.leseprobe-seite img {
  display: block;
  height: min(calc(100vh - var(--kopf) - var(--balken, 0rem)), 880px);
  /* ⚠ Unter dieser Grenze gilt Lesbarkeit vor Scrollfreiheit: Eine Seite, die
     ganz ins Bild passt und dabei unlesbar ist, hilft niemandem. */
  min-height: 400px; width: auto; max-width: 86vw; background: #fff;
  box-shadow: 0 0 0 1px rgba(0,0,0,.18), 0 8px 22px rgba(0,0,0,.18);
}
.leseprobe-seite figcaption {
  font-family: var(--raleway); font-size: var(--schrift-1); letter-spacing: .08em;
  color: var(--leise); margin-top: 0.5rem;
}
.leseprobe-fuss { margin-top: 2rem; display: flex; align-items: center; gap: 0.4rem; }

/* Bezugshinweis einer Reihe — bei den Zeitschriften der Abo-Satz (Vorgang #139).
   Er steht auf der Reihenseite und auf jeder Heftseite. Abgesetzt, aber ohne
   Signalfarbe: Es ist ein Angebot, keine Warnung. */
.abo-hinweis {
  margin: 1.2rem 0 0;
  padding: 0.75rem 1rem;
  border-left: 3px solid var(--akzent, var(--dunkel));
  background: var(--grau);
  font-size: var(--schrift-4);
  line-height: 1.5;
}
.abo-hinweis p { margin: 0; }
.abo-hinweis p + p { margin-top: 0.5em; }


/* ⚠ **Auf dem Telefon nimmt das Porträt drei Pixel zu viel.** Gemessen bei 375 px:
   Die Textspalte ist 202 px breit, `veranstaltungen@zuklampen.de` braucht **205**
   — es fehlten genau drei (Vorgang #134). Ein kleineres Foto gibt zwölf, also
   Reserve statt Punktlandung. Am Schreibtisch bleibt es bei 76 px.

   ⚠ **Diese Regel muss hinter der Basisregel stehen, nicht in der Media-Query
   weiter oben.** Genau dort stand sie zuerst — gleiche Spezifität, aber früher
   in der Datei, also gewann die 76 px darunter, und gemessen änderte sich
   nichts.

   ⚠ Bei 320 px bricht die längste Adresse weiterhin um: Die Karte ist dort
   272 px breit, das ist ohne Layoutwechsel nicht zu retten. `overflow-wrap`
   sorgt dafür, dass sie bricht statt überzulaufen. */
@media (max-width: 700px) {
  .personen__foto { width: 64px; height: 64px; }
}

/* Download des Autorenfotos für die Presse (Vorgang #135). Zurückhaltend: Es ist
   ein Angebot an wenige, nicht die Hauptsache der Seite. */
.autor-bio__download {
  display: inline-block;
  margin-top: 0.5rem;
  font-size: var(--schrift-3);
  color: var(--akzent, var(--blau));
  text-decoration: none;
  border-bottom: 1px solid currentColor;
}
.autor-bio__download:hover { text-decoration: none; }
.autor-bio__download-info {
  display: block;
  font-size: var(--schrift-2);
  color: var(--leise);
  border: 0;
}

/* ── Vita der Urheber auf der Buchseite (Vorgang #137) ────────────────────── */
.autorenvita-band { margin: 2.5rem 0; }
.autorenvita-band__heading {
  font-family: var(--raleway); font-size: var(--schrift-6); text-transform: uppercase;
  letter-spacing: 0.04em; border-bottom: 2px solid var(--dunkel);
  padding-bottom: 0.5rem; margin-bottom: 1.2rem;
}
.autorenvita-liste { display: flex; flex-direction: column; gap: 1.6rem; }
.autorenvita { display: flex; gap: 1.1rem; align-items: flex-start; }
.autorenvita__foto {
  width: 92px; flex-shrink: 0; height: auto;
  box-shadow: 0 4px 12px rgba(0,0,0,.16);
}
/* ⚠ `min-width: 0`, siehe style.css — sonst kein Umbruch bei 320 px. */
.autorenvita__text { min-width: 0; }
.autorenvita__name {
  font-family: var(--raleway); font-size: var(--schrift-5); margin: 0 0 0.3rem;
}
.autorenvita__name a { color: var(--akzent, var(--blau)); text-decoration: none; }
.autorenvita__name a:hover { text-decoration: underline; }
.autorenvita__bio { margin: 0; line-height: 1.6; overflow-wrap: break-word;
  max-width: var(--textbreite); }
.autorenvita-band__more { margin-top: 0.2rem; }
.autorenvita-band__toggle {
  cursor: pointer; font-family: var(--raleway); font-size: var(--schrift-3);
  text-transform: uppercase; letter-spacing: 0.04em;
  color: var(--akzent, var(--blau)); padding: 0.5rem 0;
}
.autorenvita-band__toggle:hover { text-decoration: underline; }
.autorenvita-band__more[open] .autorenvita-band__toggle { margin-bottom: 1.2rem; }
.autorenvita-band__weniger { display: none; }
.autorenvita-band__more[open] .autorenvita-band__mehr { display: none; }
.autorenvita-band__more[open] .autorenvita-band__weniger { display: inline; }
.autorenvita-band__more[open] { display: flex; flex-direction: column; gap: 1.6rem; }

/* ⚠ **Auf dem Telefon steht das Foto über dem Text, nicht daneben.** Gemessen
   bei 320 px: Neben einem 92-px-Foto blieben dem Fließtext **162 px, also 17
   Zeichen je Zeile** — eine Säule aus 43 Zeilen. Die Grenze ist gerechnet: Für
   rund 40 Zeichen braucht der Text 310 px, dazu Foto und Ränder. Untereinander
   hat er bei 320 px die vollen 272 px. */
@media (max-width: 560px) {
  .autorenvita { flex-direction: column; gap: 0.7rem; }
  /* Etwas größer, wenn es allein in der Zeile steht — 92 px wirken dort verloren. */
  .autorenvita__foto { width: 110px; }
}

/* ── Reihen: „Abgeschlossen" statt des blauen Balkens (Vorgang #142) ──────── */
.reihen-marke {
  display: inline-block; margin-left: 0.6em;
  font-family: var(--raleway); font-weight: 700;
  font-size: var(--schrift-1); letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--leise); border: 1px solid var(--leise); border-radius: 2px;
  padding: 0.05em 0.45em;
}
.reihen-abgeschlossen {
  font-family: var(--raleway); font-size: var(--schrift-4); color: var(--leise);
  margin: 0 0 1.4rem;
}

/* ⚠ Der engere Abstand gilt nur unter einem Untertitel — und der ist der
   Sonderfall: Nur 2 der 15 Reihen haben einen (gemessen, nicht vermutet;
   ich hatte es umgekehrt angenommen). Ohne ihn folgt der Satz dem
   normalen Abstand des Titels. */
.seite-lead + .reihen-abgeschlossen { margin-top: -0.4rem; }

/* ══════════════════════════════════════════════════════════════════════════
   Der Umschlag als Galerie (Vorgang #157)

   ⚠ **Die Spalte ist 250 px breit** — gemessen, nicht angenommen. Danach
   richten sich Bühne und Kleinansichten: vier Kacheln zu 52 px plus Abstände
   füllen sie genau; was darüber hinausgeht, wird gewischt.
   ══════════════════════════════════════════════════════════════════════════ */
.buchgalerie { display: block; position: relative; }

/* ── Vor und Zurück auf der Bühne (Vorgang #186) ──
   ⚠ **Die Pfeile liegen über dem Bild, nicht darunter.** Die Spalte ist 250 px
   breit; eine Zeile darunter nähme dem Streifen der Kleinansichten den Platz,
   und der bricht dort schon heute auf zwei Zeilen um.

   ⚠ **`pointer-events` am Kasten aus, an den Knöpfen an.** Der Kasten liegt
   über der ganzen Bühne — ohne das schluckte er den Klick auf das Bild, und
   der führt seit demselben Vorgang auf die große Ansicht.

   ⚠ **Beide stehen von Anfang an, der nicht nutzbare ist abgeblendet** — die
   Bedienung der Kachelbänder (Vorgang #140). Ein Pfeil, der erst nach dem
   ersten Blättern erscheint, sagt nicht, dass es eine Galerie ist. */
.buchgalerie__blaettern {
  position: absolute; inset: 0 0 auto; z-index: 2;
  display: flex; align-items: center; justify-content: space-between;
  height: 100%; pointer-events: none;
}
.buchgalerie__pfeil {
  pointer-events: auto;
  border: 0; cursor: pointer;
  width: 30px; height: 46px; padding: 0;
  display: flex; align-items: center; justify-content: center;
  background: rgba(15,33,50,.62); color: #fff;
  font-size: var(--schrift-7); line-height: 1;
}
.buchgalerie__pfeil:hover { background: rgba(15,33,50,.82); }
.buchgalerie__pfeil:disabled { background: rgba(15,33,50,.22); cursor: default; }
.buchgalerie__pfeil:focus-visible { outline: 2px solid var(--akzent, var(--blau)); outline-offset: 2px; }
/* ⚠ **Auf Berührungsgeräten stehen sie gar nicht** — und das ist die Ausnahme
   von der 44-px-Regel, nicht ihre Missachtung. Gemessen bei 320 px: Die Bühne
   ist dort 220 px breit; zwei fingerbreite Ziele nähmen **40 % davon** ein und
   lägen mitten auf dem Umschlag. Auf den Kachelbändern ist dieselbe Regel
   unbedenklich, weil der Streifen dort die volle Breite hat — 88 von 1200 px.
   Und der Ersatz ist da: **Die Bühne ist wischbar**, die Kleinansichten stehen
   darunter. Ein Knopf, der 40 % des Bildes verdeckt, um eine Geste zu ersetzen,
   die es ohnehin gibt, ist kein Gewinn. */
@media (pointer: coarse) {
  .buchgalerie__blaettern { display: none; }
}

/* Die Bühne: ein waagerecht rollbarer Streifen mit Rastpunkten. Ohne Skript
   wischbar — dasselbe Muster wie bei den Kachelbändern und der Farbwand. */
.buchgalerie__buehne {
  display: flex; overflow-x: auto; scroll-snap-type: x mandatory;
  scroll-behavior: smooth; gap: 0;
  /* Die Rollleiste würde unter dem Umschlag als graue Kante stehen und sähe
     aus, als gehörte sie zum Bild. Gewischt wird trotzdem. */
  scrollbar-width: none;
}
.buchgalerie__buehne::-webkit-scrollbar { display: none; }
/* ⚠ **Der helle Grund nur, wo es eine Galerie gibt.** Die Bühne ist so hoch wie
   die höchste Folie — der Umschlag; eine quer liegende Doppelseite füllt sie
   nicht, und ohne Grund stand sie in einem weißen Loch. Im Vorbild (Suhrkamp)
   ist die Fläche ebenso hell hinterlegt. Bei den 174 Titeln ohne Bilder und
   ohne Leseprobe bleibt es beim weißen Grund: Dort füllt der Umschlag die
   Fläche vollständig, und ein Kasten um ihn herum wäre eine Behauptung, dass
   es dort etwas zu sehen gäbe. */
.buchgalerie:not(.buchgalerie--einfach) .buchgalerie__buehne { background: #f4f5f7; }
/* ⚠ **Mittig, nicht oben.** Die Höhe der Bühne bestimmt die höchste Folie —
   das ist der Umschlag. Eine Doppelseite aus dem VLB ist quer und damit
   flacher; oben ausgerichtet stand sie mit einer handbreiten weißen Fläche
   darunter, als sei das Bild abgeschnitten. Gemessen an *Hafen oder Tod*:
   Umschlag 405 px, Innenansicht 130. */
.buchgalerie__bild {
  flex: 0 0 100%; scroll-snap-align: start;
  display: flex; align-items: center; justify-content: center;
}
.buchgalerie__bild img, .buchgalerie__bild a { display: block; max-width: 100%; }
.buchgalerie__bild img { width: 100%; height: auto; }

/* Der Streifen der Kleinansichten.

   ⚠ **Er bricht um, er rollt nicht.** Der erste Bau ließ ihn waagerecht rollen
   wie die Kachelbänder — und damit lag ausgerechnet die Leseprobe-Kachel
   außerhalb der 250 px breiten Spalte, also die einzige mit einem Wort darauf
   und die, um die es beim Wunsch ging. Bei vier Bildern plus Umschlag plus
   Leseprobe sind es 312 px in einer Reihe; **eine versteckte Kachel ist
   schlechter als eine zweite Zeile.** */
.buchgalerie__streifen {
  display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .55rem;
}
.buchgalerie__kachel {
  flex: 0 0 52px; height: 52px; display: flex; align-items: center;
  justify-content: center; overflow: hidden; text-decoration: none;
  border: 1px solid #e2e5e9; background: #fff;
  /* ⚠ Der aktive Rahmen ist eine **Innenlinie**, kein zweiter Rand: Ein
     dickerer Rand verschöbe die Nachbarn um zwei Pixel, und der Streifen
     zuckte bei jedem Klick. */
  box-shadow: inset 0 0 0 0 var(--akzent, var(--blau));
  transition: box-shadow .12s;
}
.buchgalerie__kachel img { width: 100%; height: 100%; object-fit: cover; display: block; }
.buchgalerie__kachel[aria-current="true"] {
  box-shadow: inset 0 0 0 2px var(--akzent, var(--blau));
  border-color: var(--akzent, var(--blau));
}
.buchgalerie__kachel:hover { border-color: var(--akzent, var(--blau)); }
.buchgalerie__kachel:focus-visible { outline: 2px solid var(--akzent, var(--blau)); outline-offset: 2px; }

/* Die Leseprobe ist eine eigene Kachel mit Symbol — wie im Vorbild, nur über
   die volle Breite: Sie trägt als einzige ein Wort, und ein Wort braucht Platz.
   So steht sie am Ende des Streifens und ist trotzdem ganz zu sehen. */
.buchgalerie__kachel--leseprobe {
  flex: 1 0 100%; height: 38px; justify-content: flex-start;
  padding: 0 .6rem; gap: .4rem;
  color: var(--akzent, var(--blau));
  font-family: var(--raleway); font-size: var(--schrift-1); font-weight: 700;
  letter-spacing: .05em; text-transform: uppercase; white-space: nowrap;
}
.buchgalerie__symbol { display: flex; }
.buchgalerie__kachel--leseprobe:hover { background: var(--grau); }

@media (max-width: 780px) {
  /* Auf dem Telefon steht der Umschlag ohnehin über dem Text; die Bühne nimmt
     die volle Breite, die Kleinansichten dürfen etwas größer sein. */
  .buchgalerie__kachel { flex-basis: 60px; height: 60px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   Die neuen Abschnitte der Startseite (Vorgang #172)

   ⚠ **Jeder Abschnitt steht über die ganze Breite, gestapelt.** Vorher lagen
   Termine und Presse in einem zweispaltigen `.home-sections`-Raster; mit neun
   Abschnitten wäre das keine Ordnung mehr, sondern ein Schachbrett. Der
   Behälter ist deshalb entfallen, den Abstand trägt jetzt `.home-section`
   selbst — sonst klebten zwei aufeinanderfolgende Abschnitte zusammen.
   ══════════════════════════════════════════════════════════════════════════ */
.home-section { margin-top: 2.75rem; }
.home-section:first-child { margin-top: 1.5rem; }

/* ── Bühne: ein Buch groß, in seiner eigenen Farbe ───────────────────────── */
/* ── Das Dreier-Band unter der Bühne (Vorgang #172) ──
   „Darunter diese drei Themen, dunkel hinterlegt, wie bei Arlt" — Verlag,
   2026-08-24. Der Ton ist `--dunkel` (#0F2132) und trifft den der Vorlage
   genau; die Fläche geht über die ganze Breite, der Inhalt hält sich an
   `.container` wie alles andere. */
/* ⚠ **Verlagsblau statt des dunklen Tons, seit dem 2026-08-26** (Vorgang
   #212). Miriam Hirschauer: „Blauen Balken unten über ganze Breite ziehen –
   und vllt besser im Verlagsblau. Auch wenn das Dunkelblau so viel schöner
   ist. Aber man braucht ja ein wenig Einheitlichkeit." Damit trägt die Seite
   oben und unten denselben Ton; dazwischen steht der Inhalt auf Weiß. */
/* ⚠ **Der Abschluss des blauen Blocks, bevor das Weiß kommt** (Vorgang #219,
   Miriam Hirschauer am 2026-08-27: „ich meinte aber tatsächlich oben unter der
   Präsentation den blauen Balken, also als Abschluss, bevor das Weiß kommt").

   ⚠ **Ihr Satz vom 26.08. war zweideutig, und ich habe die falsche Hälfte
   gelesen.** „Einen solchen Strich unter dem letzten blauen Balken" hatte ich
   auf den Seitenfuß bezogen und ihn dort gesetzt; gemeint war die Unterkante
   des oberen Blocks. Der Fuß-Strich bleibt — „ist zwar auch gut und darf
   bleiben" —, dieser kommt hinzu.

   ⚠ **`border-bottom` am Band, nicht `border-top` am Rahmen darunter.** Der
   Strich ist halbdurchsichtiges Weiß und trägt nur auf der Farbe: auf dem
   weißen Grund der Seite ergäbe dieselbe Angabe **reines Weiß**, also nichts.
   Genau daran ist der Spalt zwischen den Bühnenplätzen am 26.08. schon einmal
   gescheitert. Innerhalb des Elements liegt er auf dem Blau.

   ⚠ **Er sitzt richtig, wo immer das Band steht.** `startseite.VOLLBREIT` kennt
   zwei Abschnitte, Bühne und Band; das Band ist also entweder der letzte oben
   (dann folgt Weiß) oder der letzte unten (dann folgt der Fuß, ebenfalls blau —
   und dort ist der Strich genau die Fassung, die sie am 26.08. gewählt hat). */
.dreierband {
  background: var(--menue); color: #fff;
  border-bottom: 3px solid var(--auf-menue);
}
/* ⚠ **Der helle Strich, wenn das Band unmittelbar auf die Bühne folgt**
   (Vorgang #219, Miriam Hirschauer am 2026-08-26: „Blauen Balken von unten
   unter die Präsentation (unabgegrenzt oder mit dem hellen Strich (nicht
   weiß)) setzen"). Sie lässt beides zu; genommen ist der Strich, weil er im
   Haus schon zweimal steht — unter dem Menüband und zwischen den beiden
   Bühnenplätzen. Dieselbe Farbe, dieselbe Stärke.

   ⚠ **Ohne ihn liefe die Bühne ohne Kante ins Band**, und die drei Spalten
   sähen aus wie ein dritter Bühnenplatz: Seit dem 2026-08-26 tragen beide
   dasselbe Verlagsblau (Vorgänge #191 und #212).

   ⚠ **`+`, kein `.dreierband--oben`.** Ob das Band oben steht, entscheidet die
   Redaktion im Backend; eine Klasse müsste die Vorlage aus der Abschnittsfolge
   ableiten und liefe mit ihr auseinander. Der Nachbarschaftsselektor liest sie
   ab, wo sie steht. */
/* ⚠ **Und der Abstand der Bühne muss weg.** `.buehne` trägt `margin-bottom:
   3rem` für den Inhalt, der sonst darunter beginnt; folgt das Band, klaffte
   dort ein 48 px breiter weißer Streifen — gemessen, und im ersten Bau genau so
   erschienen. Der negative Rand hebt ihn auf, statt die Bühne umzubauen: So
   bleibt ihr Abstand für alle anderen Folgen erhalten. */
.buehne + .dreierband {
  border-top: 3px solid var(--auf-menue);
  margin-top: -3rem;
}
/* ⚠ **`grid-auto-flow: column`, nicht `repeat(3, 1fr)`** (2026-08-25). Das Band
   hat nicht immer drei Spalten: Steht „Demnächst" auf der Seite, entfällt die
   Ankündigung (sie stünde sonst zweimal untereinander), und fehlt eine der
   Quellen, entfällt sie ohnehin. Mit einem festen Dreierraster bliebe rechts ein
   leeres Drittel stehen — das sähe nach einem Fehler aus. So entstehen so viele
   gleich breite Spalten, wie Inhalt da ist. */
.dreierband__inhalt {
  display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr);
  gap: 0; padding-top: 2.6rem; padding-bottom: 2.6rem;
}
/* ⚠ Die Trennlinien stehen **zwischen** den Spalten, nicht an jeder: Ein
   Strich am äußeren Rand sähe nach einer abgeschnittenen vierten Spalte aus. */
.dreierband__spalte { padding: 0 2rem; }
.dreierband__spalte:first-child { padding-left: 0; }
.dreierband__spalte:last-child { padding-right: 0; }
.dreierband__spalte + .dreierband__spalte {
  border-left: 1px solid rgba(255,255,255,.18);
}
.dreierband__kopf {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 1rem; margin-bottom: 1.1rem;
}
.dreierband__marke {
  font-family: var(--raleway); font-size: var(--schrift-2); font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase;
}
/* Der Weg in die Liste — kleiner als die Marke, damit er sie nicht überstimmt.
   Er beantwortet die andere Frage: nicht «dieses hier», sondern «mehr davon». */
.dreierband__mehr {
  font-family: var(--raleway); font-size: var(--schrift-2); letter-spacing: .06em;
  color: rgba(255,255,255,.72); text-decoration: none; white-space: nowrap;
}
.dreierband__mehr::before { content: "› "; }
.dreierband__mehr:hover { color: #fff; }
.dreierband__zeile {
  font-size: var(--schrift-3); color: rgba(255,255,255,.72); margin: 0 0 .5rem;
}
.dreierband__zeile--urheber { margin: .5rem 0 0; }
.dreierband__titel {
  font-family: var(--raleway); font-weight: 700; font-size: var(--schrift-7);
  line-height: 1.24; margin: 0; text-wrap: balance;
}
.dreierband__titel a { color: #fff; text-decoration: none; }
.dreierband__titel a:hover { text-decoration: underline; }
.dreierband__knopf {
  display: inline-block; margin-top: 1.1rem;
  font-family: var(--raleway); font-size: var(--schrift-2); letter-spacing: .08em;
  text-transform: uppercase; color: #fff; text-decoration: none;
  border-bottom: 1px solid rgba(255,255,255,.5); padding-bottom: 2px;
}
.dreierband__knopf:hover { border-bottom-color: #fff; }

/* ⚠ **Auf Berührungsgeräten größere Ziele.** Gemessen: Die Verweise des Bandes
   sind 19 px hoch — unter dem Mindestmaß von 24 px (WCAG 2.2, 2.5.8). Am
   Schreibtisch bleibt die Gestaltung unangetastet; dieselbe Aufteilung wie bei
   den Schieberpunkten und den Kachelpfeilen. */
@media (pointer: coarse) {
  .dreierband__mehr, .dreierband__knopf {
    min-height: 24px; display: inline-flex; align-items: center;
  }
}

/* ── Die Bühne (Vorgang #172) ──
   „statt Slider ein breites Band oben …, statisch nur mit einem oder zwei
   Themen (zweigeteilt), die man selbst festlegt. … Bühnenartig, 3-D-mäßig
   aufgebaut (Hahn im Hintergrund, farbiger Hintergrund geht über die gesamte
   Breite)" — Verlag, 2026-08-24.

   ⚠ **Die volle Breite kommt aus der Auszeichnung, nicht aus `100vw`.** Die
   Bühne steht im Block `vollbreit`, also außerhalb von `.container`. Der
   naheliegende Weg (`width: 100vw` plus negativer Rand) zählt die Rollleiste
   mit und ließe die Seite am Schreibtisch über den Rand ragen. */
.buehne { display: grid; grid-template-columns: 1fr; margin: 0 0 3rem; }
/* ⚠ **Der Strich ist ein `border` am ersten Platz, kein `gap`** (Vorgang #214,
   Miriam Hirschauer: „Kleinen Weißraum zwischen den beiden Bühnenseiten oben
   einfügen … Oder in der Farbe, die der Strich unter dem Menüband hat, dann
   ist das einheitlich."). Genommen ist die zweite Fassung.

   🛑 **Der erste Bau nahm `gap: 3px` und färbte den Container mit
   `--auf-menue` — dieselbe Deklaration wie die beiden Nachbarstriche, und
   trotzdem eine andere Farbe.** `--auf-menue` ist `rgba(255,255,255,.32)`,
   also ein Rezept und kein Wert: Was herauskommt, entscheidet der Grund
   dahinter. Als `gap` lag der Strich auf dem **Seitengrund** und ergab
   **reines Weiß**; der Strich unter dem Menüband liegt als `border` auf dem
   Blau und ergibt rgb(82,123,165). Gemeldet am 2026-08-26 („hellblau statt
   weiß, wie auch die Striche darüber und darunter es sind"), nachgerechnet,
   zutreffend.

   ⚠ **Als `border` am Platz wandert er mit.** Er liegt jetzt auf `--flaeche`;
   überschreibt die Redaktion die Bühnenfarbe, ergibt er bei Rot
   rgb(214,124,148), bei Grün rgb(103,154,114) — genau wie der Strich unter
   dem Menüband, der über `var(--band, …)` liegt. Das konnte der `gap` nicht,
   und es beantwortet zugleich Miriams Frage vom selben Tag („Welche Farbe hat
   der helle Strich unter dem Menü, wenn die Hintergrundfarbe vom linken Buch
   überschrieben wird?").

   ⚠ **Der Preis sind 3 px, und sie sind gemessen.** `box-sizing: border-box`
   gilt global, der Border geht also von der Breite des ersten Platzes ab: bei
   1265 px 629,5 px Farbe gegen 632,5 des zweiten. Der Handel ist trotzdem
   richtig — die Alternative wäre eine zweite Farbquelle am Container gewesen,
   die bei zwei verschiedenen Flächen raten müsste, welche von beiden gilt.

   ⚠ **Weiß wäre der naheliegende Weg und der schlechtere.** Die Bühne geht
   randlos über die volle Breite; ein weißer Spalt darin sähe aus, als schaute
   die Seite durch. Der halbdurchsichtige Strich gehört zur Fläche. */
.buehne--2 { grid-template-columns: 1fr 1fr; }
.buehne--2 .buehne__platz:first-child { border-right: 3px solid var(--auf-menue); }

/* Jeder Platz trägt seine eigene Fläche — bei zwei Themen stoßen zwei Farben
   aneinander, und das ist gewollt: Es sind zwei Dinge, nicht ein geteiltes. */
.buehne__platz {
  position: relative; overflow: hidden;
  display: grid; grid-template-columns: 1fr auto; align-items: center;
  gap: 2rem; min-height: 24rem; padding: 3rem 0;
  background: var(--flaeche, var(--menue)); color: #fff; text-decoration: none;
}
/* ⚠ Der Text hält sich an dieselbe Mitte wie der Rest der Seite — sonst stünde
   er am Bildschirmrand, während alles darunter bei 1240 px endet. Gerechnet,
   nicht geraten: `.container` ist 1240 px breit mit 1.5rem Innenrand. */
.buehne__platz { padding-left: max(1.5rem, calc((100% - 1240px) / 2 + 1.5rem)); }
.buehne--2 .buehne__platz { padding-left: 2.5rem; padding-right: 2.5rem; }
.buehne--2 .buehne__platz:first-child {
  padding-left: max(1.5rem, calc((200% - 1240px) / 2 + 1.5rem));
}
.buehne__text { position: relative; z-index: 2; max-width: 34ch; }
/* ⚠ **Weißes Kästchen, Schrift in der Flächenfarbe** — dasselbe Muster wie auf
   der Kachel, und aus demselben Grund: Über 446 Umschläge gemessen trägt keine
   Volltonfarbe zuverlässig; was trägt, ist der Wechsel auf Weiß. Die Fläche
   der Bühne ist Verlagsblau (10,78:1) oder eine Handauswahl, und die warnt im
   Formular schon, wenn sie für weiße Schrift zu hell ist — dieselbe Schwelle.

   ⚠ **`margin-bottom` kleiner als beim Urheber.** Marke und Urheber gehören
   optisch zusammen; mit demselben Abstand stünde die Marke für sich allein und
   sähe aus, als gehöre sie zur Kopfzeile. */
.buehne .buchmarke {
  align-self: flex-start; display: inline-block;
  background: transparent; color: #fff;
  padding: 0.2rem 0.55rem; margin: 0 0 0.6rem;
  /* ⚠ **Rahmen statt Kasten** (Vorgang #291, Miriam Hirschauer am 15.09.2026:
     „finde den Rahmen sehr schick"). `inset`-Schatten statt `border`, damit
     die Marke genau so groß bleibt wie der Kasten vorher — ein Rahmen
     verschöbe Urheber und Titel darunter. */
  box-shadow: inset 0 0 0 2px #fff;
}

.buehne__urheber {
  font-family: var(--raleway); font-size: var(--schrift-3); letter-spacing: .12em;
  text-transform: uppercase; opacity: .88; margin: 0 0 .9rem;
}
/* Groß — „insgesamt die erste Präsentation größere Schrift". Über `clamp`,
   damit dieselbe Regel vom Telefon bis zum breiten Schirm trägt.

   ⚠ **Die Bühne hängt an keiner Stufe und muss eigens mitgehen** (Vorgang
   #189). Ihre vier Größen stehen auf `clamp`; eine Anhebung der Skala ginge an
   ihnen vorbei — und damit an der ersten Präsentation, also ausgerechnet an
   dem, wovon der Wunsch handelt. Beim Bauen des Musters war genau das
   passiert: Die Abschnittsköpfe wuchsen, der Bühnentitel blieb.

   ⚠ **Angehoben sind alle drei Werte jedes `clamp`, nicht nur der größte.**
   Sonst verschöbe sich der Punkt, an dem die Schrift zu wachsen beginnt, und
   die Bühne wüchse auf dem Telefon gar nicht. */
.buehne__titel {
  font-family: var(--raleway); font-weight: 700; line-height: 1.08;
  font-size: clamp(2.2rem, 4.1vw, 3.7rem); margin: 0; text-wrap: balance;
}
.buehne__untertitel {
  font-size: clamp(1.15rem, 1.5vw, 1.45rem); line-height: 1.45;
  opacity: .92; margin: .8rem 0 0;
}
/* ⚠ **Bei zwei Themen eine Nummer kleiner.** Gemessen mit 46 px in der halben
   Spalte: „Ursula Krechel erhält den Georg-Büchner-Preis 2025" brach auf
   **sieben** Zeilen und machte den Platz 398 px hoch — das war keine große
   Schrift mehr, sondern eine Wand. `vw` allein hilft nicht: Es kennt die
   Fensterbreite, nicht die halbe Spalte. */
.buehne--2 .buehne__titel { font-size: clamp(1.7rem, 2.4vw, 2.4rem); }
.buehne--2 .buehne__untertitel { font-size: clamp(1.1rem, 1.2vw, 1.2rem); }
/* Der Anriss einer Meldung ist beliebig lang. Drei Zeilen, dann Auslassung —
   gekürzt wird in der Anzeige, nicht im Text: Wie lang er sein darf, hängt von
   der Spaltenbreite ab und nicht vom Inhalt. */
.buehne__platz--news .buehne__untertitel {
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;
  overflow: hidden;
}
.buehne__knopf {
  display: inline-block; margin-top: 2rem; padding: .7rem 1.6rem;
  background: #fff; color: var(--flaeche, var(--menue));
  font-family: var(--raleway); font-size: var(--schrift-3); font-weight: 700;
  letter-spacing: .1em; text-transform: uppercase;
}
.buehne__platz:hover .buehne__knopf { background: rgba(255,255,255,.86); }

/* ⚠ Der Hahn ist blass und **hinter** allem — er soll die Fläche beleben, nicht
   mit dem Titel um Aufmerksamkeit ringen. `pointer-events: none`, sonst finge
   er Klicks ab, die dem Verweis gelten. */
.buehne__hahn {
  position: absolute; right: -6%; top: 50%; transform: translateY(-50%);
  height: 104%; width: auto; color: #fff; opacity: .16;
  pointer-events: none; z-index: 1;
}
/* ⚠ Gemessen und zurückgenommen: Mit 118 % Höhe maß der Hahn 744 × 770 px und
   füllte mehr als die halbe Fläche — er las sich als Muster, nicht als
   Hintergrund, und der Titel stand darin. Er soll die Fläche beleben, nicht
   mit ihr um Aufmerksamkeit ringen.

   ⚠ **Und dann war er ganz weg — der zweite Fehler, gemeldet am 2026-08-24.**
   Er stand auf `right: -26%`, hing damit 164 seiner 259 px über die Kante des
   Platzes hinaus, und `overflow: hidden` schnitt sie ab: sichtbar blieb ein
   95 px breiter Streifen bei 9 % Weiß, also nichts. **Ein Hintergrundbild, das
   zu zwei Dritteln außerhalb liegt, ist kein Anschnitt mehr, sondern ein
   Fleck.** Er steht jetzt ganz im Bild, hinter dem Umschlag, und mit 16 %
   Weiß — auf dem Verlagsblau sind das 29 Stufen je Kanal, genug, um ihn zu
   sehen, und zu wenig, um mit dem Titel zu streiten. */
/* ⚠ **Größer und rechts angeschnitten** (2026-08-25, Vorgang #196, Wunsch des
   Verlags). Der Anschnitt ist genau die Geste, an der der Hahn am 24.08. schon
   einmal gescheitert ist — deshalb steht die Grenze hier als Zahl und nicht
   als Gefühl: **höchstens ein Viertel der Breite darf hinausragen.** Darüber
   ist es kein Anschnitt mehr, sondern ein Fleck; bei `right: -26%` lagen 63 %
   draußen, und sichtbar blieb nichts.

   Gemessen am 2026-08-25 bei 1280 px: Hahn 409 × 423 px auf einem Platz von
   633 px, davon 38 px draußen — 9,3 % der Hahnbreite, 6 % des Platzes.
   ⚠ Im ersten Entwurf standen hier 424 × 424 — gerechnet, nicht gemessen.

   ✅ Seit dem 17.09.2026 entfallen: Statt je eines Hahns je Platz steht ein
   Doppelhahn über der ganzen oberen Fläche (`.hahnblock`, weiter unten). */

/* Der Umschlag steht vor dem Hahn und wirft einen Schatten: das „3-D-mäßig". */
.buehne__cover {
  position: relative; z-index: 2;
  padding-right: max(1.5rem, calc((100% - 1240px) / 2 + 1.5rem));
}
.buehne--2 .buehne__cover { padding-right: 2.5rem; }
.buehne__cover img {
  width: clamp(120px, 15vw, 220px); height: auto;
  box-shadow: 0 1.4rem 2.6rem rgba(0,0,0,.38), 0 .2rem .5rem rgba(0,0,0,.22);
  transform: perspective(900px) rotateY(-9deg);
  transform-origin: right center;
}
/* ⚠ **Eine Meldung steht auf dem dunklen Grund, nicht auf dem Menüblau.**
   Mit `--menue` stand sie neben einem blauen Umschlag in fast derselben Farbe —
   die Teilung war dann nicht zu sehen, und zwei Themen lasen sich als eines.
   `--dunkel` ist zufällig genau der Ton, auf dem auch zuklampen.de sein
   Dreier-Band setzt (#0F2132); die Vorlage des Verlags und unsere Palette
   treffen sich hier von selbst. */
/* ⚠ **Seit dem 2026-08-26 dieselbe Vorgabe wie der Buchplatz** (Vorgang #212,
   Miriam Hirschauer: „Auch wenn das Dunkelblau so viel schöner ist. Aber man
   braucht ja ein wenig Einheitlichkeit."). Der dunkle Ton hatte die Meldung
   vom Buch abgesetzt — seit auch das Buch Verlagsblau trägt, wäre er der
   einzige Fremdton auf der Seite. Was die beiden Plätze trennt, ist jetzt der
   Spalt dazwischen (`.buehne--2 { gap }`). */
.buehne__platz--news { background: var(--flaeche, var(--menue)); }
.buehne__platz--news .buehne__knopf { color: var(--flaeche, var(--menue)); }

.buehne__cover--news img {
  width: clamp(140px, 20vw, 300px); transform: none; border-radius: 2px;
}

/* ── Das Newsbild füllt den Platz (Vorgang #197) ──
   Nur, wenn `NewsItem.buehnenbild` es zulässt: mindestens 1600 px breit und
   Querformat zwischen 1,3:1 und 2:1 — dieselben Grenzwerte wie die Prüfung im
   Newsformular. Sonst bleibt es beim kleinen Bild auf der Fläche.

   ⚠ **Der Verlauf ist kein Schmuck, sondern die Lesbarkeit.** Weiße Schrift
   steht auf einem Foto, dessen Helligkeit niemand kennt; der Verlauf von unten
   dunkelt die Zone ab, in der der Text steht. Oben bleibt das Bild unberührt.
   `text-shadow` fängt die hellen Kanten einzelner Buchstaben ab.

   ⚠ **Die Fläche bleibt dahinter stehen.** Lädt das Bild nicht, steht der
   Platz auf dem Verlagsblau und ist weiterhin lesbar — kein weißes Loch. */
.buehne__platz--bild {
  grid-template-columns: 1fr; align-items: end;
  min-height: 26rem; padding-top: 5rem; padding-bottom: 2.5rem;
  isolation: isolate;
}
.buehne__bild {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%; object-fit: cover;
  /* ⚠ **Oben ausgerichtet, nicht mittig** (29.09.2026, Miriam Hirschauer).
     Die Bühne geht über die volle Fensterbreite, ihre Höhe bleibt fast gleich;
     im breiten Fenster ist ein Platz flacher als das Bild (bei 1920 px rund
     2,3:1 gegen höchstens 2:1), und mittig beschnitten fiel oben weg, was dort
     steht — beim Verlagspreis das Logo. Unten liegt ohnehin der Verlauf unter
     dem Text. In schmalen Fenstern wird seitlich beschnitten, dort ändert die
     Ausrichtung nichts. */
  object-position: center top;
}
.buehne__platz--bild::after {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(to top,
    rgba(0,0,0,.78) 0%, rgba(0,0,0,.55) 35%, rgba(0,0,0,.12) 70%, rgba(0,0,0,0) 100%);
}
.buehne__platz--bild .buehne__text { z-index: 2; text-shadow: 0 1px 3px rgba(0,0,0,.5); }
.buehne__platz--bild .buehne__knopf { text-shadow: none; }
/* ⚠ **Die Ecke der Schrift ist wählbar** (`Buehnenplatz.textecke`, Vorgang
   #197, gewünscht am 14.09.2026). Der Verlauf kommt von der Seite der Schrift;
   rechts hält sich der Text an dieselbe Mitte wie links. Die Klassen setzt
   `buehne.html` nur am flächigen Newsbild. */
.buehne__platz--bild.buehne__platz--oben {
  align-items: start; padding-top: 2.5rem; padding-bottom: 5rem;
}
.buehne__platz--bild.buehne__platz--oben::after {
  background: linear-gradient(to bottom,
    rgba(0,0,0,.78) 0%, rgba(0,0,0,.55) 35%, rgba(0,0,0,.12) 70%, rgba(0,0,0,0) 100%);
}
.buehne__platz--bild.buehne__platz--rechts .buehne__text { justify-self: end; text-align: right; }
.buehne--1 .buehne__platz--bild.buehne__platz--rechts {
  padding-right: max(1.5rem, calc((100% - 1240px) / 2 + 1.5rem));
}
.buehne--2 .buehne__platz--bild.buehne__platz--rechts:last-child {
  padding-right: max(1.5rem, calc((200% - 1240px) / 2 + 1.5rem));
}

/* ── Pressestimme des Tages ──────────────────────────────────────────────── */
.stimme {
  background: var(--akzent, var(--blau)); color: #fff;
  padding: 2.25rem 2rem; margin-top: 2.75rem;
}
/* ⚠ **Das Raster sitzt am Inhalt, nicht an der Fläche** (Vorgang #297). Über
   die ganze Breite trägt der Inhalt einen `.container` und muss auf die Breite
   des Rahmens kommen; stünde das Raster an der Fläche, liefe das Zitat bis an
   den Bildschirmrand.

   ✅ **Beide Spalten so breit wie ihr Inhalt, der Block zentriert**
   (22.09.2026, Vorgang #327). Vorher war die Textspalte `1fr` und damit so
   breit wie der ganze übrige Rahmen — das Zitat darin aber nur `34ch`.
   Dazwischen klaffte bei 1024 px Fenster eine **Lücke von 374 px**, bei
   breiterem Schirm mehr; Miriam: „dass das doch etwas sehr weit weg ist".
   Mit `auto` steht der Umschlag immer unmittelbar neben dem Text, gleich wie
   kurz das Zitat ist — das hält auch beim nächsten Einzeiler, was eine größere
   `max-width` nur für das heutige Zitat löste.

   ⚠ **Die Textspalte ist gedeckelt, und das ist kein Zierat.** Nur `auto`
   genügte nicht: Quellenangabe und Buchzeile haben keine Breitengrenze, und
   eine lange Quelle („Informationsmittel (IFB) – digitales Rezensionsorgan für
   Bibliothek und Wissenschaft") zog die Spalte wieder auf 785 px — der
   Umschlag stand so weit rechts wie vorher, nur diesmal neben einem
   zweizeiligen Zitat. `fit-content()` heißt: so breit wie der Inhalt,
   **höchstens** 28 rem. Gefunden hat das die Probe über drei Zitatlängen,
   nicht das erste Ergebnis.

   ⚠ **28 rem ist die Zeilenlänge des Zitats** (34ch bei `--schrift-7` sind
   gemessen 448 px). Die beiden Zahlen meinen Verschiedenes — die eine begrenzt
   den Zitatsatz, die andere die Spalte — und stehen deshalb getrennt; wer die
   Schrift des Zitats ändert, sieht hier nach. */
.stimme__inhalt {
  display: grid; grid-template-columns: fit-content(28rem) auto; gap: 2.25rem;
  align-items: center; justify-content: center;
}
/* Über die ganze Breite: Rand nur oben und unten, seitlich hält der Rahmen.
   ⚠ **Kein Abstand nach oben, wenn eine vollbreite Fläche davor steht** —
   sonst klaffte zwischen zwei Farbflächen ein weißer Streifen. Nach der Bühne
   hebt der negative Rand deren `margin-bottom` auf, und der helle Strich trennt
   wie zwischen Bühne und Dreier-Band (Vorgang #219). Unter dem gerahmten Inhalt
   (Block `vollbreit_unten`) bleibt der Abstand. */
.stimme--breit { padding: 2.75rem 0; margin-top: 0; }
.container + .stimme--breit { margin-top: 2.75rem; }
.buehne + .stimme--breit { margin-top: -3rem; border-top: 3px solid var(--auf-menue); }
.stimme__label {
  font-family: var(--raleway); font-size: var(--schrift-1); letter-spacing: .16em;
  text-transform: uppercase; font-weight: 700; color: rgba(255,255,255,.78);
  margin: 0 0 .7rem;
}
/* Vorschau aus dem Backend (Vorgang #304) — auf der Fläche, damit sie mit der
   Stimme zusammen gesehen wird, und deutlich als Hinweis abgesetzt. */
.stimme__vorschau {
  display: inline-block; margin: 0 0 .8rem; padding: .2rem .55rem;
  background: #fff; color: #0f2132; border-radius: 3px;
  font-size: var(--schrift-2); font-weight: 600;
}
/* ⚠ Die **äußeren** Anführungszeichen kommen aus dem Stylesheet, nicht aus den
   Daten: Kein Zitat bringt eigene mit, und zwei übereinander sähen aus wie ein
   Fehler. Was im Zitat steht, ist damit immer die innere Ebene — deshalb stellt
   `migration_anfuehrungen.py` dort jede Anführung auf `›…‹`.

   ✅ **Guillemets »…«** (22.09.2026, Vorgang #307, Fassung A): „hier habe ich
   mich jetzt für die Guillemets in einfach und doppelt entschieden … das Äußere
   bei den Pressestimmen müsste auf »…« geändert werden". Das nimmt die
   deutschen „…" von #306 wieder zurück; die Schriftgröße von dort bleibt
   (`--schrift-7`, 23 px statt vorher 26,7).

   ⚠ **Es sind vier Stellen im Haus, nicht diese eine** — dazu
   `.press-quote__text` (Buchseite, zweimal) und `.buchkarte__stimme`. Wer eine
   davon ändert, ändert alle: Zwei Zeichen für dieselbe Sache auf zwei Seiten
   sind schlechter als ein falsches auf allen. */
.stimme__zitat { font-size: var(--schrift-7); line-height: 1.42; margin: 0; max-width: 34ch; }
.stimme__zitat::before { content: '»'; }
.stimme__zitat::after  { content: '«'; }
.stimme__quelle {
  font-family: var(--raleway); font-size: var(--schrift-1); letter-spacing: .11em;
  text-transform: uppercase; margin: 1rem 0 0; opacity: .85;
}
.stimme__buch { font-size: var(--schrift-4); margin: .55rem 0 0; opacity: .95; }
.stimme__buch a { color: #fff; }
.stimme__bild img { width: 140px; height: auto; display: block; box-shadow: 0 6px 24px rgba(0,0,0,.32); }

/* ── Blättern Sie hinein ─────────────────────────────────────────────────── */
.leseproben { display: grid; grid-template-columns: 1fr 1fr; gap: 1.75rem; }
.leseprobe-karte { text-decoration: none; color: inherit; display: block; }
/* ⚠ Der Umschlag steht **vor** den Seiten und etwas höher: Ohne ihn wüsste
   niemand, aus welchem Buch die Seiten stammen; ohne die Seiten wäre der
   Abschnitt von „Demnächst" nicht zu unterscheiden. */
/* ⚠ **Eigene Rollleiste, sonst schiebt der Streifen die ganze Seite.**
   Gemessen bei 375 px: Umschlag plus drei Seiten sind 468 px breit — die Seite
   ließ sich waagerecht wegschieben, und zwar als **einzige** des Projekts
   (Kategorie, Buch, Termine, Reihen: alle sauber). Gefunden hat das nicht der
   Augenschein, sondern der Rollversuch: `scrollWidth` allein meldet hier
   ohnehin ständig Fehlalarm, weil die Kachelstreifen absichtlich überstehen. */
.leseprobe-karte__seiten {
  display: flex; gap: .45rem; align-items: flex-end;
  overflow-x: auto; scroll-snap-type: x proximity;
  padding-bottom: .3rem;
}
.leseprobe-karte__seiten > * { scroll-snap-align: start; flex: 0 0 auto; }
.leseprobe-karte__seiten img {
  height: 150px; width: auto; display: block; background: #fff;
  box-shadow: 0 2px 9px rgba(0,0,0,.2);
}
.leseprobe-karte__cover { height: 168px; box-shadow: 0 3px 12px rgba(0,0,0,.3); }
.leseprobe-karte__titel {
  display: block; font-family: var(--raleway); font-size: var(--schrift-4); font-weight: 700;
  color: var(--dunkel); margin: .8rem 0 .15rem;
}
.leseprobe-karte__autor {
  display: block; font-size: var(--schrift-1); color: var(--leise);
  letter-spacing: .05em; text-transform: uppercase;
}
.leseprobe-karte:hover .leseprobe-karte__titel { color: var(--akzent, var(--blau)); }

/* ── Die Reihen ──────────────────────────────────────────────────────────── */
.startreihen {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 1.25rem;
}
.startreihe {
  display: block; text-decoration: none; color: inherit;
  border-top: 3px solid var(--akzent, var(--blau)); padding-top: .8rem;
}
.startreihe__stapel { display: flex; gap: .3rem; margin-bottom: .65rem; }
.startreihe__stapel img { width: 42px; height: auto; display: block; box-shadow: 0 1px 3px rgba(0,0,0,.22); }
.startreihe__name {
  display: block; font-family: var(--raleway); font-size: var(--schrift-3); font-weight: 700;
  line-height: 1.25; color: var(--dunkel);
}
.startreihe__zahl { display: block; font-size: var(--schrift-1); color: var(--leise); margin-top: .2rem; }
.startreihe:hover .startreihe__name { color: var(--akzent, var(--blau)); }

/* ── Aus dem Verlag ──────────────────────────────────────────────────────── */
.startmeldungen {
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1.5rem;
}
.startmeldung { display: block; text-decoration: none; color: inherit; }
.startmeldung__bild {
  display: block; width: 100%; aspect-ratio: 16 / 10; object-fit: cover; background: var(--grau);
}
.startmeldung__bild--leer { background: var(--grau); }
.startmeldung__datum {
  display: block; font-family: var(--raleway); font-size: var(--schrift-1); font-weight: 700;
  letter-spacing: .05em; color: var(--akzent, var(--blau)); margin: .7rem 0 .2rem;
}
.startmeldung__titel {
  display: block; font-family: var(--raleway); font-size: var(--schrift-4); font-weight: 700;
  line-height: 1.3; color: var(--dunkel);
}
.startmeldung__anriss { display: block; font-size: var(--schrift-3); color: var(--leise); margin-top: .35rem; line-height: 1.5; }
.startmeldung:hover .startmeldung__titel { color: var(--akzent, var(--blau)); }

/* ── Die Erscheinungsmarke im Streifen „Demnächst" ───────────────────────── */
.author-books__item .buchmarke { margin: .4rem 0 .1rem; }

@media (max-width: 780px) {
  /* ⚠ Umbruch, nicht Verkleinerung: Neben einem 200-px-Umschlag blieben dem
     Text auf dem Telefon rund 17 Zeichen je Zeile — dieselbe Rechnung wie beim
     Autorenfoto im Vita-Band. */
  /* Zwei Themen stehen auf dem Telefon untereinander — nebeneinander blieben
     je 170 px, und der Titel bräche nach zwei Wörtern um. */
  /* Drei Spalten nebeneinander wären auf dem Telefon je 105 px — die
     Überschrift bräche nach einem Wort um. Untereinander, mit Linie dazwischen
     statt daneben. */
  /* ⚠ `grid-auto-flow` zurück auf `row`: Ohne das bliebe das Band auch auf
     dem Telefon dreispaltig — `grid-template-columns` allein greift dort
     nicht, solange der Fluss auf `column` steht. */
  .dreierband__inhalt { grid-auto-flow: row; grid-template-columns: 1fr; gap: 0; }
  .dreierband__spalte { padding: 1.6rem 0; }
  .dreierband__spalte:first-child { padding-top: 0; }
  .dreierband__spalte:last-child { padding-bottom: 0; }
  .dreierband__spalte + .dreierband__spalte {
    border-left: 0; border-top: 1px solid rgba(255,255,255,.18);
  }
  .buehne, .buehne--2 { grid-template-columns: 1fr; }
  /* Gestapelt trennt derselbe Strich waagerecht statt senkrecht. */
  .buehne--2 .buehne__platz:first-child {
    border-right: 0; border-bottom: 3px solid var(--auf-menue);
  }
  .buehne__platz, .buehne--2 .buehne__platz {
    grid-template-columns: 1fr; gap: 1.75rem; min-height: 0;
    padding: 2.5rem 1.5rem;
  }
  .buehne__text { max-width: none; }
  .buehne__cover, .buehne--2 .buehne__cover { padding-right: 0; }
  /* ⚠ **Der Umschlag vor den Text — sonst steht „Zum Buch" über dem Buch.**
     Am Schreibtisch stehen die beiden nebeneinander, und die Frage stellt sich
     nicht; gestapelt folgen sie der Reihenfolge im Quelltext, und der Knopf
     sitzt im Textblock. Gemessen bei 375 px: Autor 233 px, Titel 269,
     Untertitel 308, **Knopf 362, Umschlag 434** — man wurde zum Buch geschickt,
     bevor man es gesehen hatte. Keine Entscheidung, sondern eine Nebenwirkung
     des Umbruchs.
     ⚠ Verschoben wird der **Umschlag**, nicht der Knopf: Der steckt in
     `.buehne__text` und wäre nur über eine Änderung an der Vorlage
     herauszulösen — für beide Bühnenarten, und ohne Gewinn. So steht dort
     Umschlag, Urheber, Titel, Untertitel, Knopf: die Folge, die eine
     Buchkachel überall im Haus hat. */
  .buehne__cover { order: -1; }
  .buehne__cover img { width: 150px; transform: none; }
  /* Das flächige Newsbild auf dem Telefon: Das Bild braucht Höhe, sonst sieht man
     vom Motiv nur den Streifen über dem Text. `padding-top` hält oben einen Teil
     des Bildes frei, der Text bleibt unten. */
  .buehne__platz--bild, .buehne--2 .buehne__platz--bild {
    min-height: 22rem; padding-top: 7rem; padding-bottom: 2rem;
  }
  .buehne__platz--bild.buehne__platz--oben,
  .buehne--2 .buehne__platz--bild.buehne__platz--oben { padding-top: 2rem; padding-bottom: 7rem; }
  .stimme__inhalt { grid-template-columns: 1fr; gap: 1.5rem; }
  .leseproben { grid-template-columns: 1fr; }
  /* Kleinere Seiten auf dem Telefon: So passt bei 375 px der Umschlag und
     wenigstens zwei Seiten ins Bild, statt dass man von der ersten Seite an
     wischen muss. Gewischt werden kann trotzdem. */
  .leseprobe-karte__seiten img { height: 118px; }
  .leseprobe-karte__cover { height: 132px; }
}

/* ⚠ **Bei 320 px stapeln Termin- und Presseverweise.** Die Angabe dahinter
   (Ort bzw. Buchtitel) steht in einer festen Spalte von 12 rem = 192 px; neben
   dem Titel bleiben davon bei 320 px rund 60 px, und der Titel schob die Seite
   um 29 px nach rechts. Gemessen mit dem **Rollversuch**, nicht mit
   `scrollWidth` allein — der meldet auf dieser Seite wegen der wischbaren
   Streifen ohnehin ständig Fehlalarm.

   ⚠ Der Fehler ist älter als der Umbau vom 2026-08-24; die feste Spalte steht
   seit jeher. Er ist hier behoben, weil der Abschnitt mit dem Umbau in einen
   anderen Behälter gewandert ist und sonst niemand mehr danach gesehen hätte. */
@media (max-width: 420px) {
  .home-event-item__link, .home-link-item__link { flex-direction: column; gap: .15rem; }
  .home-event-item__location, .home-link-item__book { width: auto; }
  .home-event-item__date { width: auto; }
}

/* ══ Ein Bild der Buchgalerie groß (Vorgang #186) ═════════════════════════════
   ⚠ **Die Höhe rechnet gegen das Fenster, nicht gegen das Bild.** Die
   Abbildungen aus dem VLB sind bis zu 1400 px hoch; ohne Deckel stünde man vor
   einem Bild, von dem ein Drittel sichtbar ist, und müsste zum Weiterblättern
   erst hinunterrollen. Dieselbe Rechnung wie bei der Leseprobe — dort steht die
   Begründung ausführlich.

   ⚠ **`min-height` als Untergrenze**: Auf einem flachen Fenster (Laptop im
   Querformat, 600 px) bliebe sonst ein Briefmarkenbild übrig. Lieber rollen als
   nichts erkennen. */
.bildseite { max-width: 60rem; margin: 0 auto; }
.bildseite__blatt {
  display: flex; justify-content: center; align-items: center;
  background: #f4f5f7; padding: 1rem;
}
.bildseite__blatt img {
  display: block; max-width: 100%;
  height: min(calc(100vh - 21rem), 900px); min-height: 260px;
  width: auto; object-fit: contain;
}
.bildseite__leiste {
  display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; margin: 0.9rem 0 0;
}
/* Pfeil und abgeblendeter Pfeil sind **dasselbe Element mit und ohne `href`** —
   ein `<span>` an der Stelle des `<a>`. So bleibt die Leiste an den Enden gleich
   breit, und die Zählung in der Mitte springt nicht. */
.bildseite__pfeil {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: center;
  width: 44px; height: 44px;      /* Berührungsziel, wie überall */
  font-size: var(--schrift-9); line-height: 1; text-decoration: none;
  color: #fff; background: var(--dunkel);
}
.bildseite__pfeil[aria-disabled] { background: #c9ced6; color: #fff; cursor: default; }
.bildseite__zaehler {
  margin: 0; text-align: center; font-family: var(--raleway);
}
.bildseite__titel {
  display: block; font-weight: 700; font-size: var(--schrift-6);
}
.bildseite__zahl {
  display: block; font-size: var(--schrift-2); color: var(--leise);
  font-variant-numeric: tabular-nums;
}
.bildseite__zurueck { margin: 1.2rem 0 0; font-size: var(--schrift-3); }

@media (max-width: 560px) {
  .bildseite__blatt { padding: 0.5rem; }
  .bildseite__blatt img { height: min(calc(100vh - 25rem), 900px); }
}



/* ═══ Die Buchkarte — hohe Kachel mit Angaben, ohne Anriss (#254) ═══════════
   Seit dem 14.09.2026 tragen **alle** Titellisten diese Karte, auch die
   Kategorieseiten (Vorgang #254). Bis dahin entschied die Zahl der Titel
   (Vorgänge #195, #218): Kategorieseiten bekamen die dichte, blasse
   Rasterkachel. Die ist seither ausgebaut — `rasterkachel()`, `.book-card`,
   `.book-grid` und `.book-grid--blass` gibt es nicht mehr.

   ⚠ Sie stand bis zum 01.09. in `muster.css` und trug `muster-*`-Klassen —
   dort war sie Entscheidungsgrundlage, hier ist sie Gestaltung. */

/* ── A und B: die Karte nach Miriams Vorbild ─────────────────────────────────
   „so ein leicht hinterlegter Kasten (kann auch eine andere Farbe sein als
   dort, zB ein blasses Verlagsblau) für alle Titel gleich, ein Stück Kurztext
   und sehr klar ein paar kurze Angaben zur Ausstattung."

   ⚠ **Beide Formen stehen zur Wahl, und das war nicht der erste Bau.** Zuerst
   unterschieden sich A und B nur in der Länge des Anrisses und zwei Angaben —
   im Bild kaum auseinanderzuhalten, und die eigentliche Frage fiel darunter
   weg: Ihr Vorbild stellt den Umschlag **über** den Text (drei Spalten, viel
   Höhe), die Zeilenform daneben (halbe Höhe, liest sich wie ein
   Katalogeintrag). **Wer zwei Fassungen vorlegt, die fast gleich aussehen, hat
   die Wahl nicht vorgelegt, sondern schon getroffen.** */
.buchkarten-grid { display: grid; gap: 1.5rem; margin-top: 1.5rem; }
/* ⚠ **`min(…, 100%)` um die Mindestbreite, sonst ragt das Raster über.** Ein
   nacktes `minmax(30rem, 1fr)` heißt: **mindestens 480 px**, auch wenn das
   Fenster nur 375 breit ist — die Spalte schrumpft nicht, die Seite rollt
   waagerecht. Gemessen an genau diesem Bau: 130 px Überstand auf dem Telefon,
   sichtbar erst im Bildschirmfoto. `min()` erlaubt der Spalte, unter die
   Wunschbreite zu gehen, wenn kein Platz ist. */
/* ⚠ **17rem, nicht 19 — und die Zahl ist gemessen, nicht geschätzt.** Gemeldet
   am 01.09.2026: „es stehen immer drei Kacheln nebeneinander, statt dass es bei
   variierender Fensterbreite mehr oder weniger werden."

   🛑 Der Grund war nicht das Raster, sondern `.container { max-width: 1240px }`:
   Das Raster misst damit **immer 1192 px**, gleich wie breit der Bildschirm ist.
   1192 ÷ 304 px (19rem) ergibt 3,9 — also drei Spalten, ab 1240 px Fenster für
   immer. Bei 17rem (272 px) sind es vier à 280 px; darunter wird es wieder
   dynamisch (drei ab ~950 px, zwei ab ~700).

   ⚠ **Der Deckel selbst bleibt** — er gilt dem ganzen Haus und ist eine
   Gestaltungsentscheidung, keine Nebensache. Oberhalb von 1240 px ändert sich
   deshalb weiterhin nichts; wer das will, hebt ihn für die Kachelseiten an. */
.buchkarten-grid  { grid-template-columns: repeat(auto-fill, minmax(min(17rem, 100%), 1fr)); }
.buchkarten-grid--zeile { grid-template-columns: repeat(auto-fill, minmax(min(30rem, 100%), 1fr)); }

.buchkarte {
  display: flex; gap: 1.4rem; padding: 1.4rem;
  background: #eef2f6;              /* blasses Verlagsblau */
  text-decoration: none; color: var(--dunkel);
  transition: background 0.18s ease;
}
.buchkarte:hover { background: #e4eaf1; }

.buchkarte__cover { flex: 0 0 106px; position: relative; }
/* ⚠ Die Bandnummer sitzt am Umschlag, nicht an der Karte — dieselbe Stelle wie
   beim Fähnchen und aus demselben Grund: Der Umschlag ist selten so breit wie
   sein Kasten (gemessen: 313 von 446 sind schmaler als 2:3). */
/* Die Erklärzeile der Suche — „Tutsi" findet Titel, bei denen das Wort nirgends
   sichtbar steht. */
.buchkarte__schlagwort {
  color: var(--leise); font-size: var(--schrift-3); margin: 0;
}
.buchkarte__band {
  position: absolute; top: 6px; left: 6px; z-index: 2;
  background: rgba(0,0,0,.72); color: #fff; border-radius: 3px;
  padding: .1em .45em; font-size: var(--schrift-2); letter-spacing: .04em;
}
.buchkarte__cover img {
  width: 106px; height: auto; display: block;
  box-shadow: 0 2px 10px rgba(0,0,0,.18);
}

/* A — der Umschlag oben, größer, mittig. ⚠ **Nach der Basisregel**, sonst
   gewinnt bei gleicher Spezifität die spätere und die Variante greift nicht. */
.buchkarte--hoch { flex-direction: column; }
.buchkarte--hoch .buchkarte__cover { flex: none; align-self: center; }
.buchkarte--hoch .buchkarte__cover img { width: 150px; }
/* ⚠ `min-width: 0` erlaubt dem Text zu schrumpfen — sonst kein Umbruch bei
   320 px. Dieselbe Falle wie bei den Terminkacheln und beim Suchfeld. */
.buchkarte__text { min-width: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.buchkarte__kopf { display: flex; flex-direction: column; gap: 0.35rem; }

/* ✅ **Drei feste Anfänge je Zeile des Rasters** (18.09.2026, Vorgang #317).
   Miriam Hirschauer nach einem Blick auf Arlt: „die Buchdaten unten immer
   einen vertikalen Ankerpunkt, der Titel hat einen und darüber der Autor
   ebenfalls. Das Cover steht für sich selbst." Bis dahin richtete sich alles
   nach dem Umschlag darüber — und die sind verschieden hoch (gemessen 207 bis
   258 px bei 150 px Breite), der Autor begann also in jeder Karte woanders.

   ⚠ **Subgrid, keine festen Höhen.** Eine Mindesthöhe je Block (etwa drei
   Titelzeilen) hielte nur, bis ein Titel eine vierte braucht, und ließe bei
   kurzen Titeln Luft stehen. Mit `subgrid` teilen sich die Karten einer
   **Zeile** die Höhen ihrer vier Spuren: Umschlag, Autor, Titelblock (samt
   Untertitel und Erscheinungszeile), Angaben. Die nächste Zeile rechnet neu.

   ⚠ **`display: contents` an `.buchkarte__text`**, sonst wären Autor und die
   beiden Hüllen keine Kinder der Karte und könnten keine Spur belegen. Die
   Plätze stehen ausdrücklich da (`grid-row`); fehlt ein Autor, bleibt seine
   Spur leer, statt dass der Titel hinaufrutscht.

   ⚠ **Der Umschlag steht unten in seiner Spur**, also mit gleichem Abstand
   über dem Autor — dieselbe Wahl wie bei der früheren Rasterkachel (#195).

   Ohne Subgrid (Safari vor 16) bleibt die Karte, wie sie war. */
@supports (grid-template-rows: subgrid) {
  .buchkarten-grid > .buchkarte--hoch {
    display: grid; grid-row: span 4; grid-template-rows: subgrid;
    grid-template-columns: minmax(0, 1fr); row-gap: 0;
  }
  .buchkarte--hoch > .buchkarte__text { display: contents; }
  /* Der Abstand gehört an den Umschlag, nicht an den Autor: Steht in einer
     ganzen Zeile kein Autor (Zeitschriftenhefte), bliebe sonst kaum Luft. */
  .buchkarte--hoch .buchkarte__cover  { grid-row: 1; align-self: end; justify-self: center;
                                        margin-bottom: 1.4rem; }
  .buchkarte--hoch .buchkarte__autor  { grid-row: 2; }
  .buchkarte--hoch .buchkarte__kopf   { grid-row: 3; margin-top: 0.35rem; }
  .buchkarte--hoch .buchkarte__fuss   { grid-row: 4; }
}

.buchkarte__autor {
  font-size: var(--schrift-3); color: var(--leise);
  text-transform: uppercase; letter-spacing: 0.06em; margin: 0;
}
.buchkarte__titel {
  font-family: var(--raleway); font-size: var(--schrift-6);
  line-height: 1.2; margin: 0; color: var(--dunkel);
}
.buchkarte__untertitel {
  font-size: var(--schrift-4); color: var(--leise); margin: 0;
}
/* Die Angaben **ohne Bezeichnungen**, zwei Zeilen — Miriams Vorgabe vom
   2026-08-31: „Hardcover, 150 Seiten, 26,00 € / 24.02.2026, ISBN xyz".

   ⚠ **Das zweispaltige Raster ist damit hinfällig.** Es stand hier, um
   Beschriftung und Wert auszurichten (wie auf der Buchseite, Vorgang #42);
   ohne Beschriftung gibt es nichts auszurichten, und ein Raster über einer
   Aufzählung wäre eine Regel ohne Gegenstand. */
/* ⚠ Siehe die Begründung in `_buchkarte.html`: Bei 320 px bricht der Browser
   sonst an einem Bindestrich mitten in der Nummer. Die ISBN allein passt
   (162 von 227 px), die Zeile mit Datum davor nicht — der Umbruch fällt
   deshalb zwischen die beiden Angaben. */
.buchkarte__isbn { white-space: nowrap; }

.buchkarte__daten {
  margin: 0.6rem 0 0; font-size: var(--schrift-2);
  color: var(--leise); line-height: 1.5;
}
/* Zusätze je Titel in eigenen Bändern der Startseite (Vorgang #300). Das Zitat
   bekommt seine Anführungszeichen aus dem Stylesheet, wie überall im Haus — im
   Bestand trägt kein Zitat eigene. */
.buchkarte__stimme {
  margin: 0.6rem 0 0; padding-left: 0.7rem;
  border-left: 2px solid var(--blau); font-size: var(--schrift-3);
}
.buchkarte__stimme p { margin: 0; font-style: italic; line-height: 1.45; }
.buchkarte__stimme p::before { content: '»'; }
.buchkarte__stimme p::after  { content: '«'; }
.buchkarte__stimme footer {
  margin-top: 0.25rem; color: var(--leise); font-size: var(--schrift-2);
}
/* ✅ **Fassung B in der Buchfarbe** (15.09.2026, Vorgang #300): eine Stufe
   größer, fett, in der Farbe des Buches.

   ⚠ **Um ein Zehntel abgedunkelt, und das ist gemessen.** Die Kachelfarben sind
   auf 5,0:1 gegen **Weiß** normiert; auf der blassblauen Karte (#EEF2F6) lagen
   394 von 396 darunter, die schwächste bei 4,42:1 — unter den 4,5:1 für Schrift
   dieser Größe. Mit 90 % Buchfarbe ist die schwächste bei 5,22:1. Ohne
   `color-mix` gilt die Zeile davor, also die unabgedunkelte Farbe. */
.buchkarte__grund {
  margin: 0.6rem 0 0; font-size: var(--schrift-4); font-weight: 600;
  line-height: 1.45;
  color: var(--akzent, var(--dunkel));
  color: color-mix(in srgb, var(--akzent, var(--dunkel)) 90%, #000);
}

.muster-fuss {
  margin: 3rem 0; padding: 1rem 1.2rem; border-left: 3px solid var(--leise);
  color: var(--leise); font-size: var(--schrift-3);
}

/* ── Telefon ────────────────────────────────────────────────────────────────
   Gemessen bei 320 px: Neben einem 106-px-Cover blieben dem Text 138 px, also
   rund 15 Zeichen je Zeile. Gestapelt sind es 41. Dieselbe Rechnung wie bei der
   Autorenvita (Vorgang #137), nur mit anderen Zahlen. */
@media (max-width: 560px) {
  .buchkarte { flex-direction: column; }
  .buchkarte__cover { flex: none; }
}

/* ── Ein Doppelhahn über der ganzen oberen Fläche (Vorgang #196) ──
   Seit dem 17.09.2026 die feste Fassung; vorher Muster mit `?hahn=doppel`.
   Die Regeln für einen Hahn je Bühnenplatz sind damit entfallen.
   Miriam Hirschauer am 27.08.2026: „einen Doppelhahn (also das Logo), der über
   die gesamte obere Blockgestaltung geht (Bühne und Abschnitt darunter) – aber
   stark angeschnitten … nicht so, dass das Buch dann direkt auf dem Kopf des
   Hahns steht … Und wenn rechts ein vollflächiges Foto einer News steht, sollte
   da der Hahn natürlich nicht mehr durchblitzen."

   ⚠ **Die Schichtung trägt das Muster.** Die Hülle bildet einen eigenen
   Stapelkontext; darin liegen die Flächen der Bühnenplätze und des Bandes
   unten (ohne `z-index`), der Hahn darüber (1), Text, Umschlag und Band-Inhalt
   darüber (2). Das Newsbild bekommt als ganzer Platz die 2 — sein Platz ist
   ein eigener Stapelkontext (`isolation: isolate`), und ohne die Zahl läge der
   Hahn über dem Foto. */
.hahnblock { position: relative; overflow: hidden; isolation: isolate; }
/* ⚠ **Zweite Fassung, 14.09.2026** — Miriam: „den Ausschnitt nicht … Geht der
   weiter runter, sodass beide Hähne zu sehen sind? Und noch etwas weiter nach
   links." Die erste Fassung (left 40 %, top −38 %, height 175 %) schnitt die
   beiden Köpfe oben ab. Die Köpfe sitzen oben links in der Figur; der Umschlag
   im linken Platz steht ab etwa 80 px unter dem oberen Rand. Frei bleiben die
   Köpfe nur **links neben** dem Buch — deshalb kleiner und am linken Rand. */
.hahnblock > .buehne__hahn {
  position: absolute; z-index: 1; right: auto; transform: none;
  left: -1%; top: 2%; height: 106%; width: auto;
  color: #fff; opacity: .12; pointer-events: none;
}
.hahnblock .buehne__platz--bild { z-index: 2; }
.hahnblock .dreierband__inhalt { position: relative; z-index: 2; }
@media (max-width: 780px) {
  .hahnblock > .buehne__hahn { left: 30%; top: -10%; height: 70%; }
}

