:root {
  /* Verhindert die automatische Zwangs-Abdunklung durch Browser und
     Hersteller-Oberflaechen (Chrome "Auto Dark Theme", MIUI). Die greift nur
     bei Seiten, die kein eigenes Farbschema deklarieren — unsere Seite bringt
     ihren Dark Mode selbst mit und wuerde sonst doppelt gedimmt, inklusive
     Bildern.
     "only light" sagt dem Browser ausdruecklich: nicht nachtraeglich
     einfaerben. Gilt fuer alle hellen Themes (classic, blue, brown, gold,
     green, mauve, purple, rose, slate). */
  color-scheme: only light;
}

/* Das einzige dunkle Theme meldet sich sauber als dunkel an — dadurch passen
   auch Scrollbalken und Formularelemente zum Seitenhintergrund. */
[data-theme^="dark"] {
  color-scheme: dark;
  /* Auf dem dunklen Untergrund brauchen die Statusfarben mehr Helligkeit,
     sonst verschwimmen sie mit dem Hintergrund. */
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}

/* ═══════════════════════════════════════════════
   BABAJEWO – Gemeinsame Styles
   ═══════════════════════════════════════════════ */

/* ── RESET & ROOT ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ── ARTIKEL-BILDER (Ratgeber, Tipps, Rassestandard) ── */
/* Platzhalter sind per hidden-Attribut unsichtbar und werden clientseitig
   aus settings.articleImages befüllt. Kein Bild im Admin = kein Loch im Layout. */
.article-figure {
  margin: 1.75rem auto;
  max-width: 640px;
}
.article-figure img {
  width: 100%;
  max-height: 420px;
  object-fit: cover;
  display: block;
  border-radius: 4px;
}
.article-figure figcaption {
  font-size: 0.78rem;
  color: var(--text-muted, #888);
  margin-top: 0.45rem;
  font-style: italic;
  text-align: center;
}
/* Kopfbild: dasselbe Foto, das die Ratgeber-Kachel zeigt, steht jetzt oben
   im Artikel statt mitten im Text. Breiter und flacher als die Inline-Figur,
   damit es den Text ankündigt statt ihn zu unterbrechen. */
.article-hero-img {
  margin: 0 auto 2.5rem;
  max-width: 100%;
}
.article-hero-img img {
  max-height: 340px;
  border-radius: 6px;
}
@media (max-width: 640px) {
  .article-hero-img { margin-bottom: 1.75rem; }
  .article-hero-img img { max-height: 220px; }
}
/* Vorschaubild oben in Ratgeber-Karten (Übersicht + Weiterlesen-Boxen) */
.rc-thumb {
  margin: -0.25rem 0 0.9rem;
}
.rc-thumb img {
  width: 100%;
  height: 150px;
  object-fit: cover;
  display: block;
  border-radius: 4px;
}

/* ── GLOBALER BILD-RAHMEN ── */
/* Dünner Rahmen in der Rose-Gold-Akzentfarbe um alle Fotos site-weit — passt sich automatisch
   jedem Farbthema an, da --rose-gold als CSS-Variable pro Theme neu definiert ist.
   Ausnahmen (Logos, Icons, UI-Elemente) über die Klasse .no-frame. */
img:not(.no-frame) {
  border: 2px solid var(--rose-gold);
}

html {
  scroll-behavior: smooth;
  scrollbar-gutter: stable;
}
/* A-1384: wer am Geraet „Bewegung reduzieren" eingestellt hat, springt
   ueberall direkt, auch innerhalb einer Seite. */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

:root {
  --amber: #7A7670;
  --amber-dark: #4A4845;
  --amber-light: #A8A4A0;
  /* A-1164: die Schriftfarbe auf dem Akzent, nach Mehrheit der 29 Themen
     gesetzt (mess-akzentschrift.mjs). Die Ausnahmen stehen bei den Themen. */
  --auf-amber: #1a1a1a;
  --auf-amber-dark: #ffffff;
  --rose: #9B8F85;
  --rose-gold: #9B8F85;
  --cream: #F5F3F1;
  --cream-dark: #ECEAE8;
  --warm-white: #FAFAFA;
  --card-bg: #FFFFFF;
  --card-bg-alt: #F5F3F1;
  --card-border: #DDDBD9;
  --text: #1E1E1E;
  --text-soft: #5A5755;
  --text-muted: #8A8785;
  --border: #DDDBD9;
  --shadow: rgba(74,72,69,0.12);
  /* A-300: Diese beiden standen bisher NUR in den Vorlagen und im dunklen
     Thema. Sobald die Vorlagen ihre Theme-Token abgeben, muessen sie hier
     stehen — sonst fallen sie ins Leere. Der Verlauf wird aus den
     Akzent-Token gebaut und folgt damit dem gewaehlten Farbthema, statt
     eine feste Neonspur zu sein. */
  --shadow-deep: rgba(74,72,69,0.22);
  --s-verlauf: linear-gradient(120deg, var(--amber), var(--rose-gold) 55%, var(--amber-light));

  /* Statusfarben. Vorher standen sechs Festwerte verstreut in index.html,
     vermittelt.html, style.css und _worker.js — grelles Orange, Flaschengruen,
     Weinrot. Die passten zu keinem der zehn Farbthemen und stachen aus dem
     warmen Grau heraus. Jetzt einmal definiert und im dunklen Theme aufgehellt. */
  --badge-available: #5F7F5C;
  --badge-reserved: #86656A;
  --badge-home: #A0724A;
  --badge-young: #77875E;
  --badge-guest: #6C7A8B;
  --badge-neutral: var(--rose-gold);
  /* A-1381: „Showkatze", ein warmes Gold wie die Titelplakette. */
  --badge-show: #A8893A;
}

html {
  overflow-x: clip;
}

/* ── LIGHTBOX (geteilt: Galerie + Detailseiten) ── */
.lightbox { display: none; position: fixed; inset: 0; background: rgba(26,26,24,0.96); z-index: 999; align-items: center; justify-content: center; padding: 2rem; }
.lightbox.active { display: flex; }
.lightbox img, .lightbox video { max-width: 90vw; max-height: 90vh; border-radius: 1px; object-fit: contain; }
.lightbox-close { position: absolute; top: 1.5rem; right: 1.5rem; color: rgba(255,255,255,0.5); font-size: 1.8rem; cursor: pointer; transition: color 0.2s; }
.lightbox-close:hover { color: white; }
.lightbox-prev, .lightbox-next { position: absolute; top: 50%; transform: translateY(-50%); background: rgba(255,255,255,0.1); border: none; color: white; font-size: 2.5rem; width: 52px; height: 72px; cursor: pointer; border-radius: 2px; transition: background 0.2s; display: flex; align-items: center; justify-content: center; }
.lightbox-prev { left: 1rem; }
.lightbox-next { right: 1rem; }
.lightbox-prev:hover, .lightbox-next:hover { background: rgba(255,255,255,0.25); }
.lightbox-counter { position: absolute; top: 1.5rem; left: 50%; transform: translateX(-50%); color: rgba(255,255,255,0.4); font-size: 0.8rem; }
.detail-thumb-row { display: flex; gap: 0.5rem; justify-content: center; flex-wrap: wrap; margin-bottom: 2rem; }
.detail-thumb { width: 64px; height: 64px; object-fit: cover; border-radius: 4px; cursor: pointer; opacity: 0.85; transition: opacity .15s; }
.detail-thumb:hover, .detail-thumb.active { opacity: 1; }
.detail-thumb-wrap { position: relative; display: inline-block; cursor: pointer; line-height: 0; }
.detail-thumb-wrap .detail-thumb { display: block; }
.detail-thumb-wrap::after { content: '▶'; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0,0,0,0.55); color: white; font-size: 0.7rem; border-radius: 50%; width: 26px; height: 26px; display: flex; align-items: center; justify-content: center; padding-left: 2px; pointer-events: none; box-shadow: 0 1px 4px rgba(0,0,0,0.5); }

body {
  font-family: 'Source Sans 3', sans-serif;
  background: var(--cream);
  color: var(--text);
  font-size: 16px;
  line-height: 1.8;
  overflow-x: clip;
  overflow-wrap: break-word;
  word-break: break-word;
}

/* ── NAV ── */
nav:not(.footer-links) {
  /* A-764: war rgba(250,247,242,0.97) — ein fester heller Wert, der auf
     jeder dunklen Farbwelt stehen blieb und den Zuchtname darin
     verschluckte (gemessen 1.83 bis 2.49). Jetzt die Wandfarbe. */
  background: var(--wand);
  border-top: none;
  border-bottom: 1px solid var(--border);
  padding: 0 2rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 68px;
  position: sticky;
  top: 0;
  z-index: 100;
}

/* Medaillon links neben dem Schriftzug. Bild und Logo sitzen zusammen in .nav-brand,
   weil <nav> mit justify-content:space-between sonst beide auseinanderziehen wuerde.
   Das Bild steht ausserhalb des <a id="nav-logo">, dessen innerHTML per JS neu gesetzt
   wird — innen drin wuerde es bei jedem Seitenaufbau ueberschrieben. */
/* flex:none ist hier entscheidend. Mit min-width:0 durfte der Block unter seine
   Inhaltsbreite schrumpfen — beim Verkleinern des Fensters wurde der Schriftzug
   zusammengequetscht und das mittige Menue rutschte nach links. Ohne Schrumpfen
   bleibt die Breite konstant, egal wie breit das Fenster ist. */
.nav-brand { display: flex; align-items: center; gap: 0.55rem; flex: none; }
/* Die Strichzeichnung gibt es in zwei Fassungen: dunkle Tinte fuer die hellen
   Themes, helle fuer das Dark Theme. Auf #1A1816 kaeme die dunkle nur auf 5:1,
   die helle auf 12:1. Umgeschaltet wird per data-theme, nicht per Filter —
   ein invert() wuerde den warmen Ton in einen kalten kippen. */
.nav-med-link { display: inline-flex; align-items: center; line-height: 0; text-decoration: none; flex: none; }
.nav-med { height: 48px; width: auto; flex: none; }
.nav-med-paper { display: none; }
[data-theme^="dark"] .nav-med-ink { display: none; }
[data-theme^="dark"] .nav-med-paper { display: block; }
@media (max-width: 600px) {
  /* ── A-1107: DAS LOGO DARF AM HANDY GRÖSSER WERDEN ───────────────────
     Torsten am 17.09.2026 zum Logo der dritten Kundin, einem runden
     Medaillon mit Rabe, Efeuranken und Schriftband: „auf dem Handy ist es
     reicht klein, aber voll schön. Also ggf bisschen größer, dass man es
     gut erkennt."

     Gemessen an ihrer Seite: 36 px hoch in einer 68 px hohen Leiste. Von
     einem runden Logo bleibt bei 36 px nichts Erkennbares übrig, und
     zwei Drittel der Leistenhöhe lagen brach. 48 px füllen sie aus, ohne
     sie wachsen zu lassen.

     Die `max-width` ist der Preis dafür, und sie ist notwendig: ein
     BREITER Schriftzug (5:1 ist üblich) wäre bei 48 px 240 px breit und
     hätte auf einem 360-px-Gerät neben Zuchtname und Hamburger keinen
     Platz mehr. Mit der Grenze schrumpft ein solches Logo über die
     Breite, statt die Leiste zu sprengen — ein rundes bekommt seine
     vollen 48 px. */
  .nav-med { height: 48px; max-width: 42vw; object-fit: contain; }
  /* Hier darf und muss er schrumpfen: das Menue ist eingeklappt, rechts steht nur
     der Hamburger, und der Schriftzug bricht auf zwei Zeilen um. */
  .nav-brand { flex: 1 1 auto; min-width: 0; max-width: calc(100% - 52px); }
  .nav-brand .nav-logo { max-width: 100%; }
}

/* A-764: der Zuchtname stand in --rose-gold, der HELLEN Akzentfassung. Die
   Farbwache (762) verbuergt 3.0 nur fuer --amber-dark; --rose-gold ist
   Flaechenfarbe, nicht Schriftfarbe. Gemessen ueber 19 Farbwelten: 13-mal
   unter der Schwelle, am schlimmsten 1.48. Jetzt die geprueft dunkle. */
.nav-logo {
  font-family: 'Cormorant Garamond', serif;
  font-size: 1.45rem;
  font-weight: 600;
  color: var(--amber-dark);
  text-decoration: none;
  white-space: nowrap;
}
.nav-logo em { font-style: italic; color: var(--amber-light); font-size: 1.08em; }
/* A-756: Markenschrift — der Faktor auf die Grundgroesse. Steht VOR den
   Vorlagen: wer eine eigene Logo-Groesse setzt (Magazin, Wild, ...), gewinnt
   durch die Reihenfolge; Standard nimmt den Faktor. */
html[data-marke] .nav-logo { font-size: calc(1.45rem * var(--marke-faktor, 1)); }
/* Zwischen Hamburger-Breakpoint (900px) und breiten Screens konkurrieren
   Schriftzug und volles Menue um die Breite — hier bleiben die alten Masse,
   sonst bricht das mittige Menue um oder laeuft ueber. */
@media (min-width: 901px) and (max-width: 1250px) {
  .nav-med { height: 38px; }
  .nav-logo { font-size: 1.25rem; }
}

.nav-links {
  list-style: none;
  display: flex;
  align-items: center;
  gap: 1.5rem;
  margin: 0 auto;
  padding: 0 2rem;
  /* A-426 (Torstens Sprachnachricht 19.08., gemessen): 13 Menuepunkte
     brauchen ~1310px in einer Zeile. Der Hamburger kommt erst ab 900px —
     dazwischen liefen FAQ und Kontakt einfach aus dem Bild (bei 950px um
     360 Pixel), auf den meisten Laptops. Umbrechen statt abschneiden; die
     Kopfhoehe misst gemeinsam.js ohnehin nach (A-391), die Anker stimmen
     also weiter. Auf breiten Schirmen aendert sich nichts — gewrappt wird
     nur, wenn es sonst nicht passt. */
  flex-wrap: wrap;
  justify-content: center;
  row-gap: 0.15rem;
}
.nav-links a {
  font-size: 0.73rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--text-muted);
  text-decoration: none;
  transition: color 0.2s;
  white-space: nowrap;
}
.nav-links a:hover { color: var(--amber-dark); }
/* A-1414: am 1366er-Laptop (Torstens Mutter, „ihr Standard sieht scheiße
   aus") brach babajewos Menue mit neun Punkten um, „Kontakt" stand allein in
   der zweiten Zeile. Enger zusammen statt umbrechen; die Vorlagen mit eigenem
   Abstand (Spalten, Atelier) schlagen das durch ihre Spezifitaet. */
@media (min-width: 901px) and (max-width: 1500px) {
  .nav-links { gap: 1rem; padding: 0 1rem; }
  .nav-links a { letter-spacing: 0.06em; }
}
/* A-1430 (Build 1208): Torsten, 06.10.2026, an of-flamingmoon: „das menü
   ist ohne faq spärlich und kann sich dann eigentlich ausbreiten". Drei
   Punkte (Katzen, Kitten, Kontakt) standen mit 1.5rem Abstand winzig in der
   Mitte einer 1800 px breiten Leiste. Bei hoechstens fuenf Punkten: mehr
   Abstand und etwas groesser; bei vielen bleibt alles wie oben. Nur am
   Desktop, der Hamburger darunter ist eine Liste. */
@media (min-width: 901px) {
  .nav-links:not(:has(> li:nth-child(6))) { gap: 2.6rem; }
  .nav-links:not(:has(> li:nth-child(6))) > li > a { font-size: 0.82rem; letter-spacing: 0.12em; }
  .nav-links:not(:has(> li:nth-child(4))) { gap: 3.4rem; }
}
/* A-615: Der selbstgebaute Reiter ist ein <a> ohne href — damit faellt der
   Zeigefinger weg, und er saehe aus wie blosser Text. Er ist aber ein
   Bedienelement. */
.nav-parent-reiter { cursor: pointer; }

/* A-616: Lange Texte raffen — die Regeln dazu stehen in gemeinsam.js.
   Geklappt wird OPTISCH: der volle Text bleibt im HTML, damit ihn Google
   und Strg+F finden. Wie viele Zeilen, sagt die Stelle, die klappt —
   vier fuer einen Familienbrief, zwei fuer eine Tierbeschreibung. */
.txt-klapp {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  /* A-705: Diese Zeile hat sabotage-kuerzen-719 mitgenommen — sie nimmt
     genau diese Deklaration heraus, um zu pruefen, ob es auffaellt, stand
     aber nicht in ihrer eigenen Sicherungsliste und hat sie deshalb nie
     zurueckgelegt. So kam der Stand in Build 719 in den Commit, und drei
     Builds lang standen die Tierbeschreibungen in voller Laenge auf der
     Seite. Die Zeilenzahl setzt die klappende Stelle als --klapp-zeilen. */
  -webkit-line-clamp: var(--klapp-zeilen, 3);
  overflow: hidden;
}
.txt-klapp.txt-offen {
  display: block;
  -webkit-line-clamp: unset;
  overflow: visible;
}
/* ── A-1172: DIE ABSCHNITTSTEXTE, UND SIE WANDERN MIT DER BREITE ─────────
   Torstens Absprache vom 22.09.2026: „sechs, sieben Zeilen auf dem Handy
   und vier auf dem PC."

   Die Zahl steht HIER und nicht im Skript, weil sie sich mit der
   Fensterbreite aendern muss. textKlappen schreibt `--klapp-zeilen`
   normalerweise als Inline-Stil an das Element — und ein Inline-Stil
   schlaegt jede Medienabfrage. Fuer diese Stellen ruft gemeinsam.js die
   Funktion deshalb mit `null` auf: dann schreibt sie nichts, und die zwei
   Regeln hier entscheiden.

   Gemessen wird trotzdem im Browser: der resize-Lauscher in textKlappen
   rechnet beim Drehen neu, der „mehr"-Knopf verschwindet also von selbst,
   sobald quer alles hineinpasst.

   Sieben am Handy, weil ein Absatz darunter nicht mehr als Absatz wirkt.
   Vier ab Tablet, weil eine Zeile dort fast doppelt so viele Woerter
   traegt und sieben Zeilen wieder eine Wand waeren. */
.txt-klapp-abschnitt { --klapp-zeilen: 7; }
/* A-1174: Der Traeger ist ein div um mehrere Absaetze. Ohne diese Zeile
   erbt er den Aussenabstand nicht, und der letzte Absatz darin klebte am
   Knopf. Die Absaetze bringen ihre eigenen Abstaende mit; der Traeger
   selbst braucht keine. */
.txt-klapp-gruppe > *:last-child { margin-bottom: 0; }
@media (min-width: 768px) {
  .txt-klapp-abschnitt { --klapp-zeilen: 4; }
}
/* Klein und unaufdringlich: der Knopf ist ein Angebot, kein Aufruf. Er
   steht direkt unter dem Text, nicht am Kartenrand — er gehoert zu dem
   Absatz, den er aufklappt. */
.txt-mehr {
  display: inline-block; margin-top: 0.25rem; padding: 0;
  background: none; border: 0; cursor: pointer;
  font: inherit; font-size: 0.75rem; font-weight: 700;
  letter-spacing: 0.04em; color: var(--rose-gold);
  border-bottom: 1px dotted currentColor;
}
.txt-mehr:hover { color: var(--amber-dark); }
.nav-links a.nav-current { color: var(--amber); }

/* A-371: Das Admin-Zahnrad ist aus der Navigation entfernt — eine Zuchtseite
   soll nicht verraten, dass dahinter ein Verwaltungsbereich liegt. Die Regeln
   dazu sind mitgegangen, damit kein toter Stil zurueckbleibt.
   A-476: Der Satz nannte danach beide Wege hinein. Das ist derselbe Fehler
   wie ein Disallow in der robots.txt — erst die Absicht erklaeren und dann
   die Adresse dazuschreiben. style.css geht an JEDE Besucherin. */

.nav-hamburger {
  display: none;
  flex-direction: column;
  gap: 5px;
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
  flex-shrink: 0;
}
.nav-hamburger span {
  width: 24px;
  height: 2px;
  background: var(--amber-dark);
  border-radius: 2px;
  transition: all 0.3s;
  display: block;
}

/* ── NAV-DROPDOWN (Tipps + Ratgeber unter einem Menüpunkt) ── */
.nav-has-sub { position: relative; display: flex; align-items: center; gap: 0.15rem; }
.nav-sub-toggle {
  background: none; border: none; cursor: pointer; padding: 0.1rem 0.25rem;
  font-size: 0.6rem; color: var(--text-muted); line-height: 1; transition: color 0.2s;
  /* Kein rotate(180deg) mehr: durch das asymmetrische Padding (mobil 1.5rem
     rechts) sprang der Pfeil beim Drehen nach links, und Android drehte das
     blaue Tap-Highlight-Rechteck sichtbar mit. Offen-Zustand jetzt per Farbe. */
  -webkit-tap-highlight-color: transparent;
}
.nav-sub-toggle:hover { color: var(--amber-dark); }
.nav-sub-toggle.nav-sub-open { color: var(--amber-dark); }
.nav-submenu { list-style: none; margin: 0; padding: 0; }
@media (min-width: 901px) {
  /* Vertikale Ausrichtung vereinheitlichen: ein einfaches <li> erzeugt eine
     Line-Box mit Strut aus der EIGENEN Schriftgroesse (17px, line-height 1.75)
     und ist damit ~30px hoch. Ein <li class="nav-has-sub"> ist ein Flex-Container
     und hat keinen Strut — seine Hoehe kommt allein vom hoechsten Kind, ~22px.
     Zwei verschieden hohe Boxen ergaben die sichtbare Verschiebung der
     Dropdown-Beschriftungen. Gleicher Boxtyp + gleiche line-height loest das. */
  .nav-links > li { display: flex; align-items: center; }
  .nav-links > li > a { display: block; line-height: 1.4; }
  .nav-has-sub { gap: 0.2rem; }
  .nav-sub-toggle { display: block; line-height: 1.4; padding: 0 0.1rem; }

  .nav-submenu {
    display: none; position: absolute; top: calc(100% + 0.5rem); left: 0;
    background: var(--cream); border: 1px solid var(--border); border-radius: 4px;
    box-shadow: 0 6px 20px rgba(0,0,0,0.15); min-width: 190px;
    padding: 0.4rem 0; z-index: 200;
  }
  /* A-425 (Torstens Sprachnachricht 19.08., gemessen 1100-1280px): Die
     Klappe oeffnet linksbuendig unter ihrem Punkt — steht der Punkt weit
     rechts (BARF ist der letzte), ragt sie aus dem Bild: bei 1180px um
     122, bei 1100px um 202 Pixel. Man "sieht die Schrift gar nicht, weil
     sie nach rechts weggeht". gemeinsam.js misst beim Laden und Umbau, ob
     die Klappe passt, und setzt sonst diese Klasse: dann haengt sie
     rechtsbuendig am Punkt und bleibt im Bild. */
  .nav-has-sub.sub-buendig-rechts .nav-submenu { left: auto; right: 0; }
  /* A-1446: Punkte, die gemeinsam.js (mehrAuto) unter das automatische
     „Mehr ▾" gelegt hat. Sie stehen dort als Kopien; das Original wartet
     ausgeblendet, bis die Leiste wieder Platz hat. Die Id schlaegt jede
     Vorlagenregel, ohne Vorrangmarke. */
  #nav-links > li.nav-im-mehr { display: none; }
  /* Unsichtbare Brücke damit Hover nicht abbricht beim Überqueren des Spalts.
     WICHTIG: pointer-events:none im Ruhezustand. Vorher fing dieses unsichtbare
     Element permanent Klicks ab — es liegt 8px unter dem Menüpunkt, also über
     dem Ticker. Da der Ticker durchläuft, war "Klick tut nichts" sporadisch:
     je nachdem, ob gerade ein Ticker-Link unter einer der Brücken stand.
     Nur beim Hovern über dem Menüpunkt wird die Brücke aktiv — dann liegt der
     Mauszeiger ohnehin oben und kein Ticker-Klick ist zu erwarten. */
  .nav-has-sub::after {
    content: ''; position: absolute; top: 100%; left: 0; right: 0; height: 0.5rem;
    pointer-events: none;
  }
  .nav-has-sub:hover::after { pointer-events: auto; }
  .nav-has-sub:hover .nav-submenu { display: block; }
  /* A-615: … und beim Tasten-Weg. Am Schreibtisch oeffnete ein Klappmenue
     bis 662 NUR beim Ueberfahren mit der Maus — wer mit der Tastatur
     unterwegs ist, kam an die Unterpunkte gar nicht heran. Aufgefallen,
     als der selbstgebaute Reiter seine Adresse verlor: vorher fuehrte
     Enter wenigstens irgendwohin (auf eine falsche Seite), jetzt waere es
     eine Sackgasse gewesen. Die Zeile hilft ALLEN Klappmenues. */
  .nav-has-sub:focus-within .nav-submenu { display: block; }
  .nav-submenu li a {
    display: block; padding: 0.6rem 1.1rem; font-size: 0.72rem; font-weight: 700;
    letter-spacing: 0.07em; text-transform: uppercase; color: var(--text-muted); white-space: nowrap;
  }
  .nav-submenu li a:hover { color: var(--amber-dark); background: var(--cream-dark); }
}
[data-theme^="dark"] .nav-submenu { background: #1A1816 !important; border-color: #3A3835 !important; }
[data-theme^="dark"] .nav-submenu li a:hover { background: #2A2825 !important; }

@media (max-width: 900px) {
  .nav-links {
    display: none;
    position: fixed;
    /* A-472: dieselbe abgeschriebene Kopfhoehe wie beim Ticker (A-466).
       Bei Wild, Verspielt und Edel ist die Leiste am Handy 58 bis 63 px hoch —
       das ausgeklappte Menue sass dort genauso falsch wie das Laufband.
       --kopf-hoehe wird von gemeinsam.js aus der ECHTEN Leiste gemessen. */
    top: var(--kopf-hoehe, 68px);
    /* Halbe Breite, rechts verankert (unterm Hamburger) — die linke
       Seitenhaelfte bleibt sichtbar. max() als Untergrenze, damit lange
       Eintraege wie "Regenbogenbrücke" auf schmalen Geraeten nicht umbrechen. */
    left: auto;
    right: 0;
    width: max(50%, 232px);
    max-width: none;
    box-sizing: border-box;
    background: var(--cream);
    border-bottom: 1px solid var(--border);
    border-left: 1px solid var(--border);
    border-right: none;
    border-radius: 0 0 0 6px;
    flex-direction: column;
    /* WICHTIG: die Basisregel setzt align-items:center. Im Spaltenmodus schrumpft
       dadurch jedes <li> auf Textbreite -> zentrierte Einträge und unterschiedlich
       lange Trennlinien. stretch macht alle Zeilen gleich breit. */
    align-items: stretch;
    gap: 0;
    padding: 0;
    z-index: 99;
    margin: 0;
    box-shadow: 0 6px 16px rgba(0,0,0,0.18);
    /* A-472: dritte Abschrift derselben Zahl — die Hoehe des Menues
       rechnet gegen die Leiste, also gegen dieselbe Variable. */
    /* A-579 (Torsten, 24.08.: „der Menuepunkt Kontakt verschwindet immer
       noch sobald man ein Dropdown oeffnet. man muss scrollen um ihn zu
       finden."): Hier stand `min(75vh, …)`. Die 75 Prozent waren der
       einzige Grund zum Scrollen — der Platz war da, der Deckel nahm ihn.
       Gemessen an demo-standard, 13 Punkte mit einem offenen Untermenue:
         Fenster 700 px — Inhalt 571, Platz 632, Deckel 525  → scrollen
         Fenster 640 px — Inhalt 549, Platz 572, Deckel 480  → scrollen
       Ohne Deckel passt beides ohne Bildlauf.
       `dvh` statt `vh`, weil `100vh` am Handy die GROSSE Ansicht meint
       (ohne die eingeblendete Adressleiste) und das Menue damit unter den
       unteren Rand liefe. `dvh` ist der Bereich, den man wirklich sieht.
       Die vh-Zeile davor bleibt als Rueckfall fuer aeltere Browser stehen;
       wer `dvh` kennt, ueberschreibt sie.
       Mehr als ein Untermenue kann nicht offen sein — `toggleSubNav`
       schliesst erst alle. `overflow-y: auto` bleibt als Netz fuer sehr
       kleine Geraete oder sehr lange Menues. */
    max-height: calc(100vh - var(--kopf-hoehe, 68px));
    max-height: calc(100dvh - var(--kopf-hoehe, 68px));
    overflow-y: auto;
    /* A-576 (Torstens Fund, Bilder vom 24.08.): Die Grundregel oben setzt
       `flex-wrap: wrap` — richtig fuer die WAAGERECHTE Leiste, wo 13 Punkte
       sonst aus dem Bild laufen (A-426). Hier ist die Liste eine SPALTE mit
       Hoehenbegrenzung. Dort heisst `wrap` nicht "umbrechen", sondern
       "zweite SPALTE" — und die beginnt an der rechten Bildschirmkante,
       also im Nichts. `overflow-y: auto` darueber kam nie zum Zug: es gab
       nichts zu scrollen, der Ueberschuss stand daneben.
       Gemessen auf babajewo.com, vor dieser Zeile, bei 360 px Breite:
         800 px Fensterhoehe — alle 13 sichtbar
         700 px              — „Kontakt" neben dem Schirm
         640 px              — „FAQ" und „Kontakt"
         560 px              — „BARF", „FAQ" und „Kontakt"
       Ein Handy hat nach Tab- und Adressleiste genau diesen Bereich. Der
       Menuepunkt, ueber den Kaeufer schreiben, war also unerreichbar.
       Dieselbe Einsicht steht seit A-426 weiter unten in dieser Datei
       (Z. 4162) — dort aber nur fuer drei Vorlagen und nur ab 1000 px.
       Repariert wurde, wo es auffiel, nicht wo die Ursache sitzt. */
    flex-wrap: nowrap;
  }
  .nav-links.open { display: flex; }
  .nav-links li {
    line-height: 1;
    width: 100%;
    border-bottom: 1px solid var(--border);
  }
  .nav-links li:last-child { border-bottom: none; }
  .nav-links li a {
    display: block;
    width: 100%;
    box-sizing: border-box;
    padding: 0.85rem 1.1rem;
    font-size: 0.72rem;
    line-height: 1.2;
    letter-spacing: 0.09em;
    text-align: left;
    /* A-1412 (Silke von Ussenka, Torstens Handybild 05.10.2026): eigene
       Seiten mit langen Namen („Der Preis für ein Kitten aus meiner Zucht")
       liefen hier rechts aus dem Menue, abgeschnitten und mit Querbalken.
       Umbrechen statt abschneiden, wie A-426 fuer die waagerechte Leiste.
       Kurze Eintraege bleiben einzeilig, die Breite ist dieselbe. */
    white-space: normal;
    overflow-wrap: break-word;
  }
  .nav-hamburger { display: flex; }

  /* Zeile aus Link + Pfeil: Link nimmt den Platz, Pfeil sitzt rechts am Rand
     mit ausreichend großer Tap-Fläche (vorher hing er frei neben dem Text). */
  /* align-content: flex-start ist wichtig: ohne das streckt sich die erste
     Zeile (Link + Pfeil) ueber die gesamte Hoehe, sobald das Untermenue
     umbricht — der Pfeil-Button lief dann als senkrechte Linie nach unten. */
  .nav-has-sub { flex-wrap: wrap; align-items: center; align-content: flex-start; gap: 0; }
  /* A-1412: Grundbreite 0 und min-width 0, damit ein langer Name neben dem
     Pfeil umbricht, statt den Pfeil in die naechste Zeile zu schieben. */
  .nav-has-sub .nav-parent-link { flex: 1 1 0; min-width: 0; width: auto; }
  .nav-has-sub .nav-sub-toggle {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    align-self: center;
    width: 3.25rem;
    height: 2.6rem;
    padding: 0 1.1rem 0 0;
    font-size: 0.8rem;
    border-left: none;
  }
  .nav-submenu { display: none; width: 100%; background: var(--cream-dark); }
  .nav-submenu.open { display: block; }
  .nav-submenu li a {
    padding: 0.55rem 1.1rem 0.55rem 1.9rem !important;
    font-size: 0.63rem !important;
    color: var(--text-muted);
  }
}

/* ── FOOTER ── */
/* A-090: Fusszeile und Laufschrift standen als einzige Flaechen noch auf
   festen Werten (#1A1A1A und #4A4845). Beim Farbwechsel blieben sie grau,
   waehrend alles dazwischen die Themenfarbe annahm — oben und unten ein
   fremder Rahmen um die eigene Seite. Beide laufen jetzt ueber die
   Hero-Toene. A-093: BEIDE auf --hero-2. Vorher lag die Fusszeile auf
   --hero-1 und war damit sichtbar dunkler als die Laufschrift am Kopf — zwei
   verschieden dunkle Baender um dieselbe Seite. Jetzt derselbe Ton oben und
   unten; --hero-1 bleibt der Anfang des Hero-Verlaufs. */
footer {
  background: var(--hero-2);
  color: rgba(255,255,255,0.5);
  padding: 2rem;
  text-align: center;
  font-size: 0.85rem;
  margin-top: 4rem;
  border-top: 1px solid rgba(255,255,255,0.1);
}
footer a { color: rgba(255,255,255,0.6); text-decoration: none; }
footer a:hover { color: white; }
/* Medaillon über dem Footer-Schriftzug. Dekorativ, daher alt="" und .no-frame
   (sonst greift der globale Rose-Gold-Rahmen aus img:not(.no-frame)). */
/* Der Footer ist in jedem Theme dunkel (#1A1A1A, im Dark Theme #0E0C0A),
   deshalb immer die helle Fassung. Kein drop-shadow: ein schwarzer Schatten
   auf fast schwarzem Grund erzeugt nur einen sichtbaren dunklen Ring. */
.footer-med { display: block; height: 96px; width: auto; margin: 0 auto 0.9rem; }
@media (max-width: 600px) { .footer-med { height: 78px; margin-bottom: 0.7rem; } }
.footer-logo { font-family: 'Cormorant Garamond', serif; font-size: 1.6rem; font-weight: 300; color: rgba(255,255,255,0.7); margin-bottom: 0.5rem; }
.footer-logo em { font-style: italic; color: var(--amber-light); }
/* Fussmenue in Themengruppen. Die frueher punktgetrennte Kette brach auf
   schmalen Handys so um, dass Trennpunkte am Zeilenanfang und -ende standen. */
/* Fussmenue. WICHTIG: Es ist ein <nav> — die globale nav-Regel (sticky,
   height 68px, heller Hintergrund) wuerde hier voll durchschlagen und die
   Spalten auf 68px Hoehe zusammenquetschen. Deshalb schliesst der Selektor
   dort .footer-links aus; hier trotzdem die wichtigsten Werte neutralisieren,
   falls die nav-Regel spaeter mal umgebaut wird. */
.footer-links {
  max-width: 880px; margin: 2.25rem auto 0;
  padding: 2rem 0 0; border-top: 1px solid rgba(255,255,255,0.09);
  display: grid; grid-template-columns: 1fr; gap: 1.5rem 2rem;
  text-align: left; align-items: start;
  height: auto; min-height: 0; position: static; top: auto; z-index: auto;
  background: none;
}
.footer-col-title { font-size: 0.66rem; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; color: var(--rose-gold); opacity: 0.75; margin-bottom: 0.85rem; }
.footer-col ul { list-style: none; margin: 0; padding: 0; }
.footer-col li { margin-bottom: 0.5rem; }
.footer-links a { color: rgba(255,255,255,0.6); font-size: 0.85rem; line-height: 1.4; text-decoration: none; transition: color 0.15s; }
.footer-links a:hover { color: rgba(255,255,255,0.95); }
/* Zwei Spalten schon auf breiteren Handys, vier erst auf dem Desktop —
   bei vier Spalten unter 900px brechen "Vermittelte Katzen" und
   "Was wir selbst benutzen" sonst mitten im Wort um. */
/* A-1274: zwei Spalten auch auf dem Handy, und zwar im ZEITUNGSFLUSS statt
   im Raster. Torsten am 26.09.2026 mit Handybild: „kann man das Menü am
   Handy nicht auch in Spalten nebeneinander packen?" Bis hier stand unter
   520px eine Spalte (der Fuss war drei Bildschirme lang), darueber ein
   2er-Raster - und das legt „Über uns" unter „Die Katzen" und laesst rechts
   eine Luecke, weil „Die Katzen" acht Eintraege hat und die anderen zwei.
   Die erste Gruppe („Die Katzen", die laengste) steht links ueber zwei
   Zeilen, die kurzen Gruppen rechts untereinander; weitere fliessen
   darunter weiter. Erster Versuch war column-count: der Browser verteilte
   selbst und legte „Aktuelles" UNTER „Die Katzen", rechts blieb nur
   „Über uns" - an allen zehn Demos gemessen. Umgebrochen wird nur zwischen
   Woertern: eine Spalte ist auch auf 360px breiter als das laengste Wort
   (die Sorge oben galt VIER Spalten). Ab 900px bleibt alles wie bisher. */
@media (max-width: 899px) {
  .footer-links { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.5rem; }
  .footer-col:first-child { grid-row: span 2; }
}
@media (min-width: 900px) {
  /* A-210: fuenf Spalten seit "Aktuelles" — auto-fit statt fester Vier,
     dann tragen auch Mandanten mit weggefilterten Spalten ein sauberes
     Raster. minmax haelt die Spalten breit genug gegen Wortumbrueche. */
  .footer-links { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 2.25rem; }
}
.footer-legal { margin-top: 0.9rem; }
.footer-member-badge { display: flex; align-items: center; justify-content: center; gap: 0.6rem; margin: 2.25rem auto 0; padding-top: 1.75rem; border-top: 1px solid rgba(255,255,255,0.09); max-width: 880px; }
.footer-member-badge img { width: 42px; height: 42px; border-radius: 4px; }
.footer-member-badge span { font-size: 0.78rem; color: rgba(255,255,255,0.5); }
.footer-member-badge a { color: rgba(255,255,255,0.7); text-decoration: underline; }

/* ── GEMEINSAME ELEMENTE ── */
.divider {
  width: 48px;
  height: 2px;
  background: var(--rose-gold);
  margin: 1.5rem 0 2.5rem;
}
/* A-1363: im Bearbeiten-Modus abschaltbar (settings.kopfStrich === false,
   der Worker setzt das Merkmal). Nur im Seitenkopf der Unterseiten; die
   Zierstriche unter den Abschnitten bleiben. */
html[data-kopfstrich="aus"] .page-hero .divider { display: none; }
/* A-1379 blendete hier Seitentitel und Zierstrich aus, wenn der Kopf einer
   Unterseite das Startbild mit Namen zeigte. A-1413 nimmt das zurueck: das
   Bild steht jetzt als Band ueber dem Kopf, Titel und Strich darunter. Die
   Regeln stehen ganz am Ende dieser Datei. */
/* ── A-1209: DER TRENNER-BAUSTEIN IST NICHT DER ZIERSTRICH ──────────────────
   Bis Build 1062 gab der Worker fuer den Trenner-Baustein `class="divider"`
   aus — dieselbe Klasse wie der Zierstrich unter den Seitenueberschriften.
   Wild und Verspielt blenden den aus (`display: none` weiter unten), und
   damit war ein Baustein unsichtbar, den die Zuechterin selbst eingesetzt
   hat: auf Torstens Seite zwei Bedienzeilen ohne erkennbaren Baustein.

   Eine eigene Klasse, und bewusst ohne Vorlagen-Sonderregeln. Ein Trenner,
   den man einsetzt, soll trennen — auf jeder Vorlage. `currentColor` statt
   einer Farbe aus der Palette: so stimmt er auf hellen wie auf dunklen
   Vorlagen, ohne zehn Ausnahmen. */
.baustein-trenner {
  width: 100%;
  max-width: 34rem;
  height: 1px;
  background: currentColor;
  opacity: 0.22;
  border: 0;
  margin: 2rem auto;
}
.page-hero .divider,
.hero .divider,
.katze-detail-hero .divider,
.kt-hero .divider {
  margin-left: auto;
  margin-right: auto;
}
/* A-1580: alle Unterseiten-Köpfe gleich hoch. Mit Zitat (/sucht-zuhause)
   wuchs der Kopf am Handy auf 372 statt 326 px, weil Strich (3rem) und
   Vorspann (.section-lead 3rem) unten Rand mitbrachten, der im Kopf nur
   Höhe kostet. Das Kopfbild ist „cover", wurde dadurch anders angeschnitten,
   Überschrift und Strich rutschten. Abstände wie auf den eigenen Seiten
   (Strich 1.25rem), der Vorspann schließt ohne Rand ab; so passt das Zitat
   in die Mindesthöhe. `html` davor, damit die Regel die Seitenstile schlägt.
   Die Überschrift erbte auf vielen Seiten Zeilenhöhe 1.8; bricht sie am
   Handy um (/vermittelt), kostet das allein 40 px. Die Vorlagen setzen ihre
   eigene und bleiben dabei. Nur das Gedicht auf /regenbogenbruecke ist
   länger als jede Kopfhöhe und darf ihn strecken. */
html .page-hero h1 { line-height: 1.2; }
html .page-hero .divider { margin-top: 1.25rem; margin-bottom: 1.25rem; }
html .page-hero .section-lead,
html .page-hero > p:last-child { margin-bottom: 0; }

.section-eyebrow {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--rose-gold);
  margin-bottom: 0.75rem;
}

.section-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: clamp(1.8rem, 3vw, 2.5rem);
  font-weight: 400;
  /* Ohne eigene Angabe erbt die Ueberschrift die 1.8 vom body — bei 2.5rem
     sind das 72px Zeilenhoehe. Faellt auf, sobald sie umbricht (Handy). */
  line-height: 1.2;
  color: var(--amber-dark);
  margin-bottom: 1rem;
}

.section-lead {
  color: var(--text-muted);
  max-width: 600px;
  margin-bottom: 3rem;
}

/* ── BUTTONS ── */
.btn {
  display: inline-block;
  padding: 0.85rem 2rem;
  border-radius: 2px;
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  transition: background 0.2s, color 0.2s;
  cursor: pointer;
  border: none;
}
/* ══ A-1164: DIE KNOPFBESCHRIFTUNG RICHTET SICH NACH DEM UNTERGRUND ══════
   Bis hierher stand hier `color: white`, fest, egal wie hell der Akzent
   ist. Gemessen am 21.09.2026 an einer gerenderten Seite:

     „Auf die Warteliste"  weiss auf #b89256  Kontrast 2,9
     „Aktuelle Kitten"     weiss auf #60e960  Kontrast 1,6

   Die Schwellen sind 4,5 fuer normalen Text und 3,0 fuer grosse Schrift —
   beide Knoepfe reissen beide. Und zwar mit UNSERER Standardfarbe, auf
   jeder Kundenseite, seit es die Knoepfe gibt.

   Warum es niemandem auffiel: es gibt Kontrastwachen fuer die Verwaltung
   (524), den Seitenkopf (504) und die Befunde vom 18.08. (484) — aber
   keine fuer Knoepfe auf der oeffentlichen Seite.

   Die Vorgaben stammen aus schaubild/mess-akzentschrift.mjs, das fuer alle
   29 Themen ausrechnet, ob Weiss oder Dunkel besser liegt:
     --auf-amber       24 von 27 Themen wollen DUNKEL (teils 2,0 -> 8,6)
     --auf-amber-dark  13 von 27 wollen Weiss
   Die Ausnahmen stehen einzeln weiter unten. Weiss war also fast ueberall
   die falsche Wahl. */
.btn-primary { background: var(--amber-dark); color: var(--auf-amber-dark, #ffffff); }
.btn-primary:hover { background: var(--amber); color: var(--auf-amber, #1a1a1a); }
.btn-ghost { background: transparent; color: white; border: 1px solid rgba(255,255,255,0.5); }
.btn-ghost:hover { background: rgba(255,255,255,0.1); }
.btn-warm { background: var(--amber); color: var(--auf-amber, #1a1a1a); }
.btn-warm:hover { background: var(--amber-dark); color: var(--auf-amber-dark, #ffffff); }

/* A-079: Das hidden-Attribut wirkte auf diesen beiden Knoepfen NICHT.
   Der Browser setzt fuer [hidden] display:none — aber nur in seinem eigenen
   Stylesheet, und jede Regel des Dokuments schlaegt das. Unten steht
   display:flex, also waren WhatsApp- und Facebook-Knopf IMMER sichtbar, auch
   ohne hinterlegte Nummer und ohne Profil. Ihr href blieb dabei '#' — ein
   Klick lud dieselbe Seite neu.
   Die Regel gilt bewusst fuer alles: derselbe Fehler entsteht bei jedem
   kuenftigen Element, das hidden traegt und ein eigenes display bekommt. */
[hidden] { display: none !important; }

/* ── A-1257: DIE STATUS-PLAKETTE EINES KITTENS, FUER JEDE SEITE ──────────
   Stand bis Build 1084 in startseite.css — und die laedt nur die
   Startseite. Die eigene Seite eines Kittens (/kitten/<wurf>-<name>) setzt
   dieselbe Klasse (seit A-1003 steht dort der Status), bekam aber keine
   Regel dafuer: „VERFÜGBAR" stand in der Textschrift unter dem Namen, ohne
   Flaeche. Torsten am 25.09.2026: „in einer Schrift die nicht passt und
   ohne Button." Dieselbe Fehlerklasse wie A-1105 (die Tierkarte auf
   „Zuhause gesucht"). Die Vorlagen-Regeln weiter unten (html[data-layout]
   .kitten-status) sind spezifischer und gewinnen wie bisher. */
.kitten-status {
  display: inline-block; margin-top: auto; font-size: 0.62rem; font-weight: 400;
  letter-spacing: 0.12em; padding: 0.25rem 0.7rem; border-radius: 3px; color: white;
  align-self: center;
}
.kitten-status.available { background: var(--badge-available); }
.kitten-status.option { background: #B8823D; }
.kitten-status.reserved { background: var(--badge-reserved); }
.kitten-status.placed { background: var(--cream-dark); color: var(--rose-gold); border: 1px solid var(--border); }
.kitten-status.kept { background: var(--badge-young); }

/* ── FACEBOOK & WHATSAPP BUTTONS ── */
.whatsapp-btn {
  position: fixed; bottom: 2rem; right: 2rem; z-index: 500;
  width: 58px; height: 58px; border-radius: 50%;
  background: #25D366; color: white;
  display: flex; align-items: center; justify-content: center;
  text-decoration: none;
  box-shadow: 0 4px 20px rgba(37, 211, 102, 0.4);
  transition: transform 0.2s, box-shadow 0.2s;
}
.whatsapp-btn:hover { transform: scale(1.1); box-shadow: 0 6px 28px rgba(37, 211, 102, 0.6); }
.whatsapp-tooltip, .facebook-tooltip {
  position: absolute; right: 70px; top: 50%; transform: translateY(-50%);
  background: #1E1E1E; color: white; padding: 0.4rem 0.85rem;
  border-radius: 4px; font-size: 0.78rem; font-weight: 600;
  white-space: nowrap; opacity: 0; transition: opacity 0.2s; pointer-events: none;
}
.whatsapp-btn:hover .whatsapp-tooltip { opacity: 1; }
/* A-1530: auf der Kontaktseite hängt der Trenner am WhatsApp-Link. Ohne Link
   (keine Nummer oder „Kein WhatsApp-Knopf") stand sonst „Oder direkt: · E-Mail". */
a[data-whatsapp][hidden] + .wa-trenner { display: none; }

.facebook-btn {
  position: fixed; bottom: 7rem; right: 2rem; z-index: 500;
  width: 58px; height: 58px; border-radius: 50%;
  background: #1877F2; color: white;
  display: flex; align-items: center; justify-content: center;
  text-decoration: none;
  box-shadow: 0 4px 20px rgba(24, 119, 242, 0.4);
  transition: transform 0.2s, box-shadow 0.2s;
}
.facebook-btn:hover { transform: scale(1.1); box-shadow: 0 6px 28px rgba(24, 119, 242, 0.6); }
.facebook-btn:hover .facebook-tooltip { opacity: 1; }

/* A-1475: Instagram ueber Facebook; ohne Facebook auf dessen Platz. Der
   Knopf steht im Markup NACH Facebook (KONTAKTKNOEPFE im Worker). */
.instagram-btn {
  position: fixed; bottom: 12rem; right: 2rem; z-index: 500;
  width: 58px; height: 58px; border-radius: 50%;
  background: radial-gradient(circle at 30% 107%, #fdf497 0%, #fd5949 45%, #d6249f 60%, #285AEB 90%); color: white;
  display: flex; align-items: center; justify-content: center;
  text-decoration: none;
  box-shadow: 0 4px 20px rgba(214, 36, 159, 0.4);
  transition: transform 0.2s, box-shadow 0.2s;
}
.facebook-btn[hidden] ~ .instagram-btn { bottom: 7rem; }
.instagram-btn:hover { transform: scale(1.1); box-shadow: 0 6px 28px rgba(214, 36, 159, 0.6); }
.instagram-tooltip {
  position: absolute; right: 70px; top: 50%; transform: translateY(-50%);
  background: #1E1E1E; color: white; padding: 0.4rem 0.85rem;
  border-radius: 4px; font-size: 0.78rem; font-weight: 600;
  white-space: nowrap; opacity: 0; transition: opacity 0.2s; pointer-events: none;
}
.instagram-btn:hover .instagram-tooltip { opacity: 1; }

/* ── NAV TOGGLE JS ── */

/* ── SCROLL ANCHORING ── */
/* A-391 (Torstens Befund 18.08.2026): Hier stand fest 115px. Die Kopfleiste
   ist aber 58-167px hoch, je nach Vorlage und Breite — und bei Wild,
   Verspielt und Edel am Desktop eine linke Spalte, die oben gar nichts
   verdeckt. --kopf-hoehe wird von gemeinsam.js gemessen; die 68px im calc()
   sind der Rueckfall, falls das Skript nicht laeuft (die Hoehe der fuenf
   Vorlagen mit fester Leiste). */
/* A-1183: das klebende Sprachband kommt dazu, wo es eins gibt. Ohne diese
   Zeile landet jeder Anker 32 px zu hoch und die Ueberschrift steht dahinter. */
section, [id] {
  scroll-margin-top: calc(var(--kopf-hoehe, 68px) + var(--sprachband-hoehe, 0px) + var(--laufband-hoehe, 0px) + 12px);
}
/* A-1366 (Torstens Bild, 02.10.2026: „ein gap im ankerpunkt"): ein ganzer
   ABSCHNITT bringt seinen Innenabstand selbst mit (Startseite ~112px). Die
   12px Luft zeigten dort nur einen Streifen des Abschnitts davor, mit
   dessen Rand als Linie unter dem Laufband. Abschnitte landen deshalb
   bündig unter den klebenden Leisten; Anker im Inneren (Überschriften,
   Würfe) behalten ihre 12px. section[id] schlägt [id] in der Spezifität. */
section[id] {
  scroll-margin-top: calc(var(--kopf-hoehe, 68px) + var(--sprachband-hoehe, 0px) + var(--laufband-hoehe, 0px));
}

/* ── FARBTHEMEN ── */
/* ══════════════════════════════════════════════════════════════════════════
   A-745: DIE VIER ROLLEN
   --------------------------------------------------------------------------
   Bis hierher hatte die Farbe keine Sprache. "--cream" sagt, wie die Farbe
   2024 aussah, nicht wozu sie da ist. Und weil niemand sagen konnte, WOZU
   ein Token da ist, hat auch niemand gemerkt, dass die hellen Themen zwar
   den Akzent umstellen (Delta-E im Mittel 29,9), die Kartenflaeche aber nur
   um 5,3 und die Schriftfarbe ueberhaupt nicht. Genau das ist Torstens
   Befund vom 19.08.2026: "die sind irgendwie alle gleich."

   Die vier Rollen kommen aus dem Entwurf atelier-komplett-2.html:

     --wand     die Flaeche AUSSERHALB des Rahmens (der Seitengrund)
     --flaeche  die Flaeche INNERHALB (Karten, Kaesten, Formulare)
     --text     was darauf steht
     --linie    was trennt

   Dazu genau EINE freie Rolle: der Akzent. Er kann nichts unlesbar machen,
   also darf er frei sein. Die vier oben sind kuratiert und werden gemessen
   (Stufe 3 des Fahrplans, KONZEPT-DESIGNUMBAU.md).

   HIER AENDERT SICH NOCH KEINE EINZIGE FARBE. Die Rollen zeigen auf die
   Token, die es schon gibt — in dieser Richtung, nicht umgekehrt:

     Rolle  ->  var(alter Name)

   Das ist Absicht, und es ist der Grund, warum diese Stufe risikolos ist:
   ein var() in einem Custom Property wird erst BEI DER BENUTZUNG aufgeloest,
   im Geltungsbereich des Elements. Setzt [data-theme="rose"] sein --cream,
   traegt --wand den Rosé-Wert von selbst mit. Kein Thema muss angefasst
   werden, keine der 4661 Zeilen aendert ihr Aussehen, und beide Namen
   funktionieren nebeneinander. Erst wenn alles umgestellt ist, dreht sich
   die Richtung um: dann setzen die Themen die Rollen, und die alten Namen
   zeigen darauf.

   ACHTUNG, DOPPELTER NAME: --linie gibt es im Worker noch einmal, in den
   Betreiberseiten (betreiberDashboardHtml, plattformImpressumHtml, ab
   _worker.js:12397) mit ihrem eigenen Satz --papier/--karte/--tinte/--linie.
   Diese Seiten laden style.css NICHT, es gibt also keine Kollision — aber
   wer eine davon umbaut, hat zwei --linie vor sich, die verschiedene Dinge
   bedeuten.
   ══════════════════════════════════════════════════════════════════════════ */
:root {
  --wand: var(--cream);
  --flaeche: var(--warm-white);
  --linie: var(--border);
  /* Die vierte Rolle heisst schon richtig: --text steht weiter oben. */
}

/* ══════════════════════════════════════════════════════════════════════════
   A-746: SCHRIFT UND LINIEN GEHOEREN JETZT DEM THEMA
   --------------------------------------------------------------------------
   Stufe 2 des Fahrplans. Bis 761 setzte GENAU EIN Thema die Schriftfarbe —
   das dunkle. Alle 16 anderen liessen --text, --text-soft, --text-muted,
   --card-bg, --card-bg-alt und --card-border auf den neutralen Grauwerten
   aus :root stehen. Ein Thema faerbte damit den Rand und den Akzent, aber
   nicht das, worauf man liest. Das ist der Grund fuer Torstens Befund
   "die sind irgendwie alle gleich": gemessen lagen die hellen Themen im
   Akzent im Mittel 29,9 Delta-E auseinander, auf der Kartenflaeche nur 5,3
   und in der Schrift 0,0.

   DIE WERTE SIND ABGELEITET, NICHT AUSGESUCHT. Fuer jedes Thema gilt:

     · Die Tonrichtung kommt aus der EIGENEN Grundflaeche (--cream). So
       gehoeren Schrift, Flaeche und Linie derselben Familie an.
     · Die Schrift uebernimmt die Helligkeit ihres Vorbilds ABSOLUT —
       Kontrast ist eine absolute Groesse, und die Seite soll so lesbar
       bleiben wie bisher.
     · Die Flaechen uebernehmen nicht die Helligkeit, sondern den ABSTAND
       des Vorbilds zu SEINER Flaeche, gelegt auf die eigene. Sonst leitet
       sich die Karte von Weiss ab, klippt bei 255 und verliert den Ton —
       genau das ist beim ersten Rechnen passiert (Delta-E 3,1 statt 4,9).
     · Danach wird gegen die EIGENE Kartenflaeche geprueft und die
       Helligkeit nachgezogen, bis die Hausschwelle haelt: 4,5 fuer Text
       und weiche Schrift, 3,0 fuer die gedaempfte Nebenzeile.

   NUR DIE ACHT HELLEN THEMEN BEKOMMEN DIE WERTE. Beim Nachmessen kam
   heraus, dass die acht getoenten Dunkelfassungen laengst vollstaendig
   sind: sie setzen --cream, --warm-white, --card-bg, --card-bg-alt,
   --card-border und --border alle selbst, und ihre Gruende liegen mehr als
   25 von 255 Stufen auseinander (pruef-dunkeltoene-536). Ihre SCHRIFT holen
   sie bewusst aus "dark" — A-467 hat das ausdruecklich so entschieden,
   "sonst driften die Kontraste auseinander". Diese Entscheidung bleibt
   stehen. Ein erster Anlauf hat sie mitgetoent; das war zweierlei falsch:
   es hat eine begruendete Entscheidung stillschweigend umgedreht, und es
   haette doppelte Deklarationen in dieselben Bloecke geschrieben.

   ZWEI THEMEN BLEIBEN UNANGETASTET: classic (:root) und dark. Sie sind die
   Vorbilder, gegen die alles gerechnet wurde — wer sie mitverschiebt,
   verschiebt den Bezugspunkt. Ausserdem wird "dark" seit Monaten
   ausgeliefert und soll nicht ueber Nacht anders aussehen.

   ERGEBNIS, in derselben Einheit wie der Befund (Delta-E unter den acht
   hellen Themen, vorher ueberall 0,0, weil kein Thema es setzte):

     --text          9,7      --card-bg        4,9
     --text-soft    14,0      --card-bg-alt    8,4
     --text-muted   18,3      --card-border   12,7

   Die Kartenflaeche bleibt der schwaechste Wert, und das ist ehrlich so:
   zwei fast weisse Flaechen KOENNEN nicht weit auseinanderliegen. Dafuer
   sind die neuen Welten aus Stufe 4/5 da, nicht diese Stufe.

   NEBENBEFUND FUER STUFE 4/5: das engste Paar ist durchweg brown/gold —
   in jeder einzelnen Rolle. Die beiden sind fast dasselbe warme Gelb. Wer
   eine Welt streichen will, faengt dort an.
   ══════════════════════════════════════════════════════════════════════════ */

/* A-716 (Torstens A-473-Block, 01.09. angegangen): Die hellen Themen
   unterschieden sich um hoechstens 9/255 — Rosé und Altrosa waren
   BYTEGLEICH, und wer im Farbwaehler etwas anklickte, sah keinen
   Unterschied. Jetzt sind die Grundflaechen SATT statt dunkel getoent
   (jedes Paar >= 10/255, gemessen mit mess-hellthemen.mjs), die
   Helligkeit bleibt fast gleich — deshalb halten alle Akzente WCAG 4,5.
   Die alten drei Themen bekommen erstmals eigene Kartenflaechen
   (--warm-white) und Schatten; vorher blieben ihre Karten reinweiss.
   Die 10 Cream-Schriftstellen in Verspielt/Buehne sind NICHT
   betroffen: helle Themen wirken seit A-429 nur bei Standard. */
[data-theme="rose"] {
  --amber: #9B7B7B;
  --amber-dark: #6B4A4A;
  --amber-light: #C4A8A8;
  --rose-gold: #B08888;
  --cream: #FBEFEC;
  --cream-dark: #F3E1DC;
  --warm-white: #FDF7F5;
  --border: #E8CFC8;
  --shadow: rgba(107,74,74,0.12);
  /* A-746 */
  --text: #271B18;
  --text-soft: #68534E;
  --text-muted: #9E817A;
  --card-bg: #FFFBF8;
  --card-bg-alt: #FEEEEA;
  --card-border: #ECD5CF;
}

[data-theme="green"] {
  --amber: #6B8B6B;
  --amber-dark: #3D5C3D;
  --amber-light: #9BB89B;
  --rose-gold: #7A9B7A;
  --cream: #EAF5E6;
  --cream-dark: #DDEDD6;
  --warm-white: #F5FAF2;
  --border: #C9DEC2;
  --shadow: rgba(61,92,61,0.12);
  /* A-746 */
  --text: #192017;
  --text-soft: #505B4C;
  --text-muted: #7D8C78;
  --card-bg: #FAFFF8;
  --card-bg-alt: #ECF4EA;
  --card-border: #D2DDCE;
}

[data-theme="blue"] {
  --amber: #6B7A9B;
  --amber-dark: #3D4D6B;
  --amber-light: #9BA8C4;
  --rose-gold: #7A8DB0;
  --cream: #E6EEF8;
  --cream-dark: #D6E3F2;
  --warm-white: #F2F6FB;
  --border: #C5D4E8;
  --shadow: rgba(61,77,107,0.12);
  /* A-746 */
  --text: #171F27;
  --text-soft: #4C5967;
  --text-muted: #78899E;
  --card-bg: #F6FBFF;
  --card-bg-alt: #E7F0FA;
  --card-border: #CCD8E8;
}

[data-theme^="dark"] {
  --amber: #C9A87C;
  --amber-dark: #C9A87C;
  --amber-light: #C9A87C;
  --rose-gold: #C9A87C;
  --cream: #1E1C1A;
  --cream-dark: #2A2825;
  --warm-white: #3A3835;
  --card-bg: #3A3835;
  --card-bg-alt: #4A4845;
  --card-border: #5A5755;
  --text: #F0EDE8;
  --text-soft: #C8C4C0;
  --text-muted: #A8A4A0;
  --border: #4A4845;
  --shadow: rgba(0,0,0,0.3);
  --shadow-deep: rgba(0,0,0,0.5);
}

/* A-467: DIE ACHT GETOENTEN DUNKELFLAECHEN */
/* Torsten, 19.08.2026: "bei manchen Seiten greifen die Stile, aber meist
   nur wenig auf den Background, wenn man den switchen koennte waere alles
   optisch abgerundeter. natuerlich jede Background Farbe musste auf jeden
   Schrift und Box abgestimmt werden."

   Der zweite Satz war die Bedingung — und der Grund, warum es bis hierher
   bei EINEM funktionierenden Dunkelmodus geblieben ist. Gemessen: die acht
   HELLEN Themen unterscheiden sich im Grund um hoechstens 7 von 255 Stufen,
   Rose und Altrosa sind sogar bytegleich. Ein Thema war damit ein
   Akzent-Umschalter, kein Hintergrund-Umschalter.

   DER BAUPLAN, der die Arbeit ueberhaupt moeglich macht: am Dunkelmodus
   haengen NEUNZIG Nachziehregeln. Die sind noetig, weil viele Stellen ihre
   Hellwerte fest verdrahtet haben. Sie achtmal zu wiederholen waere
   unwartbar — und die 48 Stellen, die data-theme setzen, einzeln um ein
   zweites Attribut zu erweitern, waere noch schlimmer.
   Deshalb steckt der Ton IM NAMEN: "dark-rose". Die neunzig Regeln pruefen
   seither "beginnt mit dark" (^=) statt "ist dark" — ein einziger
   mechanischer Griff. Alle 48 Setzstellen bleiben unangetastet, und der
   Ton ueberschreibt danach nur die Flaechen-Token.
   Ein neuer Ton kostet damit elf Zeilen statt neunzig.

   Und weil "dark" laut A-424/A-429 die Helligkeit ist und KEIN Farbthema,
   kommt es durch jede der acht Vorlagen durch. Der Farbton also auch —
   das ist genau das, was mit den hellen Themen nie ging.

   NICHT VON HAND GEWAEHLT: die Werte entstehen in
   werkzeug/schaubild/baue-dunkeltoene.mjs durch Toenung der bewaehrten
   Dunkelwerte in Richtung der jeweiligen Themenfarbe, mit anschliessender
   Ruecknahme der Helligkeit (binaere Suche auf der Leuchtdichte). Danach
   rechnet dasselbe Werkzeug JEDE Schrift auf JEDER Flaeche nach WCAG durch
   und gibt nichts aus, was durchfaellt. Gemessene Ergebnisse:
     Fliesstext auf Grund   12,37 bis 12,49   (verlangt: 4,5)
     Fliesstext auf Karte    8,95 bis  9,04
     weiche Schrift/Karte    6,03 bis  6,09
     matte Schrift/Karte     4,22 bis  4,26   (verlangt: 3,0)
     Akzent auf Grund        6,08 bis  7,78
   Zum Vergleich der neutrale Dunkelmodus: 14,55 / 10,01 / 6,74 / 4,72.
   Die Toene sind also etwas heller als er — bewusst, sonst traegt eine so
   dunkle Flaeche die Farbe nicht sichtbar. Abstand zwischen den
   Grundtoenen: 31 von 255 statt der 7 bei den hellen Themen.

   WER HIER ETWAS AENDERT, aendert es im Werkzeug und laesst es neu
   ausgeben. 88 Farbwerte von Hand nachzupflegen geht schief, und ein
   vertippter Wert nimmt einem Thema still den Kontrast. */
[data-theme="dark-rose"] {
  --cream: #302727;
  --cream-dark: #403534;
  --warm-white: #473D3B;
  --card-bg: #473D3B;
  --card-bg-alt: #5A4E4C;
  --card-border: #685B5A;
  --border: #564B49;
  --amber: #C4A8A8;
  --amber-dark: #C4A8A8;
  --amber-light: #C4A8A8;
  --rose-gold: #C4A8A8;
}
[data-theme="dark-green"] {
  --cream: #232B22;
  --cream-dark: #303A2F;
  --warm-white: #394237;
  --card-bg: #394237;
  --card-bg-alt: #495447;
  --card-border: #576054;
  --border: #475044;
  --amber: #9BB89B;
  --amber-dark: #9BB89B;
  --amber-light: #9BB89B;
  --rose-gold: #9BB89B;
}
[data-theme="dark-blue"] {
  --cream: #262932;
  --cream-dark: #333742;
  --warm-white: #3B3F48;
  --card-bg: #3B3F48;
  --card-bg-alt: #4C515B;
  --card-border: #5A5E69;
  --border: #494D57;
  --amber: #9BA8C4;
  --amber-dark: #9BA8C4;
  --amber-light: #9BA8C4;
  --rose-gold: #9BA8C4;
}
[data-theme="dark-purple"] {
  --cream: #2C2733;
  --cream-dark: #3B3543;
  --warm-white: #433D49;
  --card-bg: #433D49;
  --card-bg-alt: #554E5C;
  --card-border: #625B6A;
  --border: #514B58;
  --amber: #B8A8D4;
  --amber-dark: #B8A8D4;
  --amber-light: #B8A8D4;
  --rose-gold: #B8A8D4;
}
[data-theme="dark-brown"] {
  --cream: #31281E;
  --cream-dark: #41352A;
  --warm-white: #483D32;
  --card-bg: #483D32;
  --card-bg-alt: #5B4F42;
  --card-border: #695B4E;
  --border: #574C3F;
  --amber: #C4A882;
  --amber-dark: #C4A882;
  --amber-light: #C4A882;
  --rose-gold: #C4A882;
}
[data-theme="dark-slate"] {
  --cream: #262A2D;
  --cream-dark: #34383B;
  --warm-white: #3C4042;
  --card-bg: #3C4042;
  --card-bg-alt: #4D5154;
  --card-border: #5A5E61;
  --border: #4A4E50;
  --amber: #A8B8C4;
  --amber-dark: #A8B8C4;
  --amber-light: #A8B8C4;
  --rose-gold: #A8B8C4;
}
[data-theme="dark-gold"] {
  --cream: #2F2914;
  --cream-dark: #3F371D;
  --warm-white: #463F26;
  --card-bg: #463F26;
  --card-bg-alt: #595033;
  --card-border: #675D40;
  --border: #554D32;
  --amber: #D4BC78;
  --amber-dark: #D4BC78;
  --amber-light: #D4BC78;
  --rose-gold: #D4BC78;
}
[data-theme="dark-mauve"] {
  --cream: #2F2827;
  --cream-dark: #3F3534;
  --warm-white: #463D3C;
  --card-bg: #463D3C;
  --card-bg-alt: #594E4D;
  --card-border: #675B5A;
  --border: #554B4A;
  --amber: #C8AAAA;
  --amber-dark: #C8AAAA;
  --amber-light: #C8AAAA;
  --rose-gold: #C8AAAA;
}
/* A-467 ENDE */

/* Dark-Theme: hardcodierte weiße Hintergründe in Subpages überschreiben */
[data-theme^="dark"] .standard-table td,
[data-theme^="dark"] .standard-table tr:nth-child(even) td {
  color: var(--text);
}

/* Lila / Violett */
[data-theme="purple"] {
  --amber: #8B7BA8;
  --amber-dark: #5A4A78;
  --amber-light: #B8A8D4;
  --rose-gold: #9B88C4;
  --cream: #F2EAFA;
  --cream-dark: #E7DBF4;
  --warm-white: #F9F5FD;
  --border: #D8C9EE;
  --shadow: rgba(90,74,120,0.12);
  /* A-746 */
  --text: #211C25;
  --text-soft: #5C5564;
  --text-muted: #8E8499;
  --card-bg: #FEFAFF;
  --card-bg-alt: #F3EEF9;
  --card-border: #DDD5E5;
}

/* Warmes Braun */
[data-theme="brown"] {
  --amber: #9B7B5A;
  --amber-dark: #6B4E35;
  --amber-light: #C4A882;
  --rose-gold: #B08B65;
  --cream: #F3E7D6;
  --cream-dark: #EAD8BE;
  --warm-white: #FAF4EA;
  --border: #DCC5A4;
  --shadow: rgba(107,78,53,0.12);
  /* A-746 */
  --text: #231D15;
  --text-soft: #605648;
  --text-muted: #938671;
  --card-bg: #FEF9F2;
  --card-bg-alt: #F5EDE3;
  --card-border: #E0D5C5;
}

/* Slate / Blaugrau */
[data-theme="slate"] {
  --amber: #7A8A96;
  --amber-dark: #4A5C6A;
  --amber-light: #A8B8C4;
  --rose-gold: #8A9EAE;
  --cream: #E4E9EB;
  --cream-dark: #D5DDE0;
  --warm-white: #F2F5F6;
  --border: #C3CFD6;
  --shadow: rgba(74,92,106,0.12);
  /* A-746 */
  --text: #122025;
  --text-soft: #445B64;
  --text-muted: #6C8D98;
  --card-bg: #F1FBFF;
  --card-bg-alt: #E1F0F6;
  --card-border: #C3DAE3;
}

/* Gold / Bernstein */
[data-theme="gold"] {
  --amber: #A8903C;
  --amber-dark: #7A6520;
  --amber-light: #D4BC78;
  --rose-gold: #C4A84A;
  --cream: #FAF4DC;
  --cream-dark: #F2E8C2;
  --warm-white: #FCF9EC;
  --border: #DFD095;
  --shadow: rgba(122,101,32,0.12);
  /* A-746 */
  --text: #201E15;
  --text-soft: #5B5848;
  --text-muted: #8D8871;
  --card-bg: #FFFEF6;
  --card-bg-alt: #F5F2E7;
  --card-border: #DFDAC9;
}

/* Altrosa / Mauve */
[data-theme="mauve"] {
  --amber: #A88A8A;
  --amber-dark: #785A5A;
  --amber-light: #C8AAAA;
  --rose-gold: #B89898;
  --cream: #EFE3EC;
  --cream-dark: #E3D2E0;
  --warm-white: #F9F2F6;
  --border: #D9C3D4;
  --shadow: rgba(120,90,90,0.12);
  /* A-746 */
  --text: #251B22;
  --text-soft: #63535F;
  --text-muted: #978192;
  --card-bg: #FEF7FC;
  --card-bg-alt: #F5EAF3;
  --card-border: #E1D1DD;
}

/* ══════════════════════════════════════════════════════════════════════════
   A-748: ATELIERS SECHS FARBWELTEN
   --------------------------------------------------------------------------
   Stufe 4 des Fahrplans. Die Werte stammen aus dem Entwurf
   werkzeug/entwuerfe/atelier-komplett-2.html vom 18.08.2026 ("gefaellt mir
   persoenlich besser als Magazin"), abgebildet auf unsere Token-Achse und
   nachgerechnet. Erzeugt von werkzeug-Skript, nicht abgetippt.

   ACHTUNG BEIM ABBILDEN — hier steckt die Falle: Ateliers --wand ist ein
   MITTELGRAU (#b9b7b4), nicht der Seitengrund. Es ist die Flaeche
   AUSSERHALB des Rahmens, wie eine Galeriewand. Das gehoert zu Ateliers
   STRUKTUR und kommt erst in Stufe 6. Fuer die FARBEN zaehlen die inneren
   Flaechen:

     Atelier --band      ->  --cream        (Seitengrund)
     Atelier --flaeche   ->  --warm-white   (Karten)
     Atelier --flaeche-2 ->  --cream-dark
     Atelier --text      ->  --text
     Atelier --muted     ->  --text-muted
     Atelier --linie     ->  --border
     Atelier --akzent    ->  alle vier Akzent-Token

   Was Atelier nicht fuehrt, ist abgeleitet: --card-bg-alt und --card-border
   mit derselben Tiefenleiter wie A-746 (der Abstand des Vorbilds zu SEINER
   Flaeche, gelegt auf die eigene), --text-soft als Mitte zwischen Text und
   gedaempfter Schrift.

   NAMEN (Torsten, 02.09.: "Namen kannst du setzen"). Ateliers Namen sind
   gute Namen — Werkstoffe, einsilbig, kein Kitsch. Nur "Beton" passt nicht
   zu einer Katzenzucht; daraus wurde Granit: gleicher Werkstoff, waermerer
   Klang.

   WARUM SIE NICHT "dark-granit" HEISSEN. Das Tor in themaWert() laesst
   heute alles durch, was mit "dark-" anfaengt — mit diesem Namen waeren die
   Welten also gratis in jeder Vorlage verfuegbar gewesen. Trotzdem nicht:
   "dark-" bedeutet im Haus "getoente Dunkelfassung eines hellen Themas",
   und pruef-dunkeltoene-536 zaehlt genau acht davon. Ein siebter Name mit
   demselben Praefix haette die Bedeutung verwaessert und die Suite
   fehlerhaft rot gemacht. Stattdessen fuehrt A-748 eine ausdrueckliche
   Liste WELTEN in themaWert() und in der Wache in gemeinsam.js.

   color-scheme und die aufgehellten Statusfarben muessen hier ausdruecklich
   stehen: die fuenf dunklen Welten treffen [data-theme^="dark"] nicht, und
   ohne sie stuenden Scrollbalken, Formularfelder und die fuenf Abzeichen
   in ihrer Hellfassung auf dunklem Grund.
   ══════════════════════════════════════════════════════════════════════════ */

/* Granit — dunkel */
[data-theme="granit"] {
  --cream: #1E1E1E;
  --cream-dark: #232323;
  --warm-white: #2B2B2B;
  --card-bg: #2B2B2B;
  --card-bg-alt: #3A3A3A;
  --card-border: #494949;
  --border: #3D3D3D;
  --text: #C9C7C3;
  --text-muted: #8D8A86;
  --text-soft: #ABA8A4;
  --amber: #7FA8C9;
  --amber-dark: #7FA8C9;
  --amber-light: #7FA8C9;
  --rose-gold: #7FA8C9;
  --shadow: rgba(30,30,30,0.35);
  --shadow-deep: rgba(30,30,30,0.55);
  color-scheme: dark;
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}

/* Moos — dunkel */
[data-theme="moos"] {
  --cream: #191D18;
  --cream-dark: #1E221D;
  --warm-white: #252A24;
  --card-bg: #252A24;
  --card-bg-alt: #343933;
  --card-border: #434842;
  --border: #3A4036;
  --text: #CCD0C4;
  --text-muted: #868C7D;
  --text-soft: #A8ADA0;
  --amber: #A3BF8A;
  --amber-dark: #A3BF8A;
  --amber-light: #A3BF8A;
  --rose-gold: #A3BF8A;
  --shadow: rgba(25,29,24,0.35);
  --shadow-deep: rgba(25,29,24,0.55);
  color-scheme: dark;
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}

/* Sand — hell */
[data-theme="sand"] {
  --cream: #DDD4C3;
  --cream-dark: #E6DFD2;
  --warm-white: #F2EDE4;
  --card-bg: #F2EDE4;
  --card-bg-alt: #EBE6DD;
  --card-border: #D3CFC6;
  --border: #D5CBBA;
  --text: #3A352D;
  --text-muted: #8A8175;
  --text-soft: #615A50;
  --amber: #8C5A3C;
  --amber-dark: #8C5A3C;
  --amber-light: #8C5A3C;
  --rose-gold: #8C5A3C;
  --shadow: rgba(221,212,195,0.35);
  --shadow-deep: rgba(221,212,195,0.55);
}

/* Tinte — dunkel */
[data-theme="tinte"] {
  --cream: #121722;
  --cream-dark: #161B27;
  --warm-white: #1C2230;
  --card-bg: #1C2230;
  --card-bg-alt: #2B3140;
  --card-border: #3A3F4F;
  --border: #2D3547;
  --text: #C3C9D6;
  --text-muted: #7D849A;
  --text-soft: #9FA6B8;
  --amber: #8BA4D4;
  --amber-dark: #8BA4D4;
  --amber-light: #8BA4D4;
  --rose-gold: #8BA4D4;
  --shadow: rgba(18,23,34,0.35);
  --shadow-deep: rgba(18,23,34,0.55);
  color-scheme: dark;
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}

/* Wein — dunkel */
[data-theme="wein"] {
  --cream: #1C1314;
  --cream-dark: #221819;
  --warm-white: #2A1E20;
  --card-bg: #2A1E20;
  --card-bg-alt: #3A2D2F;
  --card-border: #483B3D;
  --border: #41302F;
  --text: #D4C7C4;
  --text-muted: #96837F;
  --text-soft: #B5A4A1;
  --amber: #C9927E;
  --amber-dark: #C9927E;
  --amber-light: #C9927E;
  --rose-gold: #C9927E;
  --shadow: rgba(28,19,20,0.35);
  --shadow-deep: rgba(28,19,20,0.55);
  color-scheme: dark;
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}

/* Schiefer — dunkel */
[data-theme="schiefer"] {
  --cream: #161618;
  --cream-dark: #1D1D1F;
  --warm-white: #242426;
  --card-bg: #242426;
  --card-bg-alt: #333335;
  --card-border: #424244;
  --border: #363639;
  --text: #C8C8CA;
  --text-muted: #87878A;
  --text-soft: #A7A7A9;
  --amber: #B9B9BD;
  --amber-dark: #B9B9BD;
  --amber-light: #B9B9BD;
  --rose-gold: #B9B9BD;
  --shadow: rgba(22,22,24,0.35);
  --shadow-deep: rgba(22,22,24,0.55);
  color-scheme: dark;
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}
/* Nacht — Wilds Welt als Thema (A-750).
   Das Rot war #C1121F und stand auf seinem Schwarz bei 2,96:1 — seit jeher,
   nur hat es die Farbwache nie gesehen, weil Wild kein Thema war. Gruen von
   18 auf 25 hebt es auf 3,0 (23 ergab noch 2,99 — gerechnet, nicht geschaetzt); Delta-E rund 1, mit dem Auge nicht zu sehen.
   Gesetzt an JEDER Stelle, an der das Rot stand (6), damit Default und
   Thema gleich bleiben. */
[data-theme="nacht"] {
  color-scheme: dark;
  --cream: #0B0B0C;
  --cream-dark: #141416;
  --text: #EDE6DA;
  --text-soft: #C9C2B4;
  --text-muted: #8A8578;
  --border: #2A2A2E;
  --amber: #C1191F;
  --amber-dark: #C1191F;
  --amber-light: #EDE6DA;
  --rose-gold: #C1191F;
  --warm-white: #141416;
  --card-bg: #141416;
  --card-bg-alt: #1B1B1E;
  --card-border: #2A2A2E;
  --shadow: rgba(0,0,0,0.55);
  --shadow-deep: rgba(0,0,0,0.75);
  --hero-1: #0B0B0C; --hero-2: #141416; --hero-3: #0B0B0C;
  --hero-verlauf: linear-gradient(160deg, #141416, #0B0B0C 60%);
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}

/* Neon — Shows Welt als Thema (A-750) */
[data-theme="neon"] {
  color-scheme: dark;
  --cream: #140A26;
  --cream-dark: #0E0719;
  --warm-white: #140A26;
  --card-bg: #1E1240;
  --card-bg-alt: #241650;
  --card-border: #35256B;
  --border: #35256B;
  --text: #F4F1FA;
  --text-soft: #CFC7E6;
  --text-muted: #A79FC4;
  --amber: #FF4D8D;
  --amber-dark: #E63677;
  --amber-light: #FF7FAC;
  --rose-gold: #2CE6C8;
  --s-verlauf: linear-gradient(120deg, #FF4D8D, #8A5CFF 55%, #2CE6C8);
  --shadow: 0 18px 44px -18px rgba(10, 4, 26, 0.8);
  --hero-verlauf: radial-gradient(1200px 600px at 15% 10%, rgba(255, 77, 141, 0.22), transparent 60%), radial-gradient(1000px 700px at 85% 90%, rgba(44, 230, 200, 0.16), transparent 60%), #140A26;
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}
/* ══════════════════════════════════════════════════════════════════════════
   A-751: DIE HELLEN GEGENSTUECKE (Stufe 5)
   --------------------------------------------------------------------------
   Torsten, 21.08.2026: "hell und dunkel auf jeder Seite" — Ziel 10 bis 12
   Welten, etwa zur Haelfte hell. Bis 764 war Sand die einzige helle unter
   acht. Jetzt elf: sieben dunkel, vier hell — dazu die acht alten hellen
   Farbthemen, die seit A-746 ebenfalls ganze Welten sind.

   ABGELEITET, NICHT AUSGESUCHT. Jede helle Welt nimmt von ihrer dunklen
   Schwester die Farbfamilie — die Tonrichtung des Grundes und die des
   Akzents — und dreht die Helligkeit um:

     Moos -> Birke      Tinte -> Porzellan      Wein -> Puder

   Die Helligkeiten kommen vom Grundthema, damit die Seite so lesbar
   bleibt wie heute; die Gruende sind SATT (Chroma 13, wie A-716 die alten
   hellen Themen auf mindestens 10/255 je Paar brachte), Schrift und Akzent
   werden gegen die EIGENE Flaeche nachgezogen, bis die Schwelle haelt
   (Text 4,5 / gedaempft 3,0 / Akzent 4,5 — A-716: "alle Akzente halten
   WCAG 4,5").

   GRANIT UND SCHIEFER BLEIBEN OHNE SCHWESTER. Beide Gruende sind reines
   Neutralgrau; ein helles Gegenstueck muesste seine Richtung vom Akzent
   holen, und das ergab im ersten Lauf "Nebel" 5,3 Delta-E neben Porzellan
   — zwei blaustichige helle Welten, das Paar brown/gold von neuem.
   Neutrales Hell gibt es mit Classic und Sand. Gemessen (Delta-E der
   Gruende, Sand/Birke/Porzellan/Puder/Classic): im Mittel 14,6; die
   engsten Paare sind Classic/Puder 8,4 und Classic/Porzellan 9,4, alle
   uebrigen liegen ueber 12. Ab 10 klar verschieden, ab 5 unterscheidbar —
   Rosa und Hellblau neben Warmweiss sind keine Zwillinge.

   Als Welten (Liste WELTEN in themaWert, Wache, farbthemaSperren) kommen
   sie durch JEDE Vorlage — anders als die acht alten hellen Farbthemen,
   die A-429 auf Standard beschraenkt. Der Unterschied ist historisch:
   A-429 kam, als ein helles Thema nur Akzent und Grund setzte und Wilds
   schwarze Flaechen stehen liess. Seit A-746 setzt jedes Thema alle vier
   Rollen. Ob die Schranke fuer die acht alten damit faellt, ist eine
   Entscheidung, keine Technik.
   ══════════════════════════════════════════════════════════════════════════ */

/* Birke — hell, Schwester von moos (A-751) */
[data-theme="birke"] {
  --cream: #E4F6DF;
  --cream-dark: #DAEDD5;
  --warm-white: #F4FCF2;
  --card-bg: #FCFFFB;
  --card-bg-alt: #E5F5E1;
  --border: #D0E0CC;
  --card-border: #D0E0CC;
  --text: #192018;
  --text-soft: #4F5B4D;
  --text-muted: #7C8C78;
  --amber-dark: #5F7A49;
  --amber: #799461;
  --amber-light: #A4B792;
  --rose-gold: #5F7A49;
  --shadow: rgba(95,122,73,0.12);
  --shadow-deep: rgba(95,122,73,0.22);
}

/* Porzellan — hell, Schwester von tinte (A-751) */
[data-theme="porzellan"] {
  --cream: #E8F0FF;
  --cream-dark: #DEE7FF;
  --warm-white: #F6FAFF;
  --card-bg: #FDFFFF;
  --card-bg-alt: #E8F0FF;
  --border: #D3DBF2;
  --card-border: #D3DBF2;
  --text: #1A1E27;
  --text-soft: #515767;
  --text-muted: #7F879E;
  --amber-dark: #5873A0;
  --amber: #738CBB;
  --amber-light: #A1B1D3;
  --rose-gold: #5873A0;
  --shadow: rgba(88,115,160,0.12);
  --shadow-deep: rgba(88,115,160,0.22);
}

/* Puder — hell, Schwester von wein (A-751) */
[data-theme="puder"] {
  --cream: #FFE8EC;
  --cream-dark: #FFDEE3;
  --warm-white: #FFF6F8;
  --card-bg: #FFFDFE;
  --card-bg-alt: #FFE9EC;
  --border: #F4D4D7;
  --card-border: #F4D4D7;
  --text: #281B1C;
  --text-soft: #685255;
  --text-muted: #9F8083;
  --amber-dark: #986653;
  --amber: #B47F6C;
  --amber-light: #D0A899;
  --rose-gold: #986653;
  --shadow: rgba(152,102,83,0.12);
  --shadow-deep: rgba(152,102,83,0.22);
}




/* ── MOBILE FIXES ── */
@media (max-width: 600px) {
  /* Floating buttons kleiner damit sie nicht überlappen */
  .whatsapp-btn { width: 48px; height: 48px; bottom: 1.25rem; right: 1.25rem; }
  .facebook-btn { width: 48px; height: 48px; bottom: 5.25rem; right: 1.25rem; }
  .instagram-btn { width: 48px; height: 48px; bottom: 9.25rem; right: 1.25rem; }   /* A-1475 */
  .facebook-btn[hidden] ~ .instagram-btn { bottom: 5.25rem; }
  .whatsapp-tooltip, .facebook-tooltip, .instagram-tooltip { display: none; }

  /* Hero CTA Buttons gestapelt */
  .hero-cta { flex-direction: column; align-items: center; gap: 0.75rem; }
  .hero-cta .btn { width: 100%; max-width: 280px; text-align: center; }

  /* Nav Logo kürzer auf sehr kleinen Screens */
  .nav-logo { font-size: 1rem; }

  /* Section titles kleiner */
  .section-title { font-size: 1.6rem; }

  /* Nav Links kompakter — aber weiterhin volle Breite und linksbündig,
     sonst wird der Fix aus dem 900px-Block hier wieder kaputtgemacht. */
  .nav-links { padding: 0; gap: 0; }
  .nav-links li { line-height: 1; }
  .nav-links li a { padding: 0.8rem 1.25rem; font-size: 0.7rem; line-height: 1.2; text-align: left; }
  .nav-has-sub .nav-sub-toggle { padding-right: 1rem; }
}

/* Floating buttons verstecken wenn Nav offen — verhindert Überlappung */
.nav-links.open ~ .whatsapp-btn,
.nav-links.open ~ .facebook-btn,
.nav-links.open ~ .instagram-btn { display: none; }

/* Da floating buttons außerhalb der nav sind, per JS-Klasse steuern */
body.nav-open .whatsapp-btn,
body.nav-open .facebook-btn,
body.nav-open .instagram-btn { display: none; }

/* ── NAV LOGO MOBILE ── */
@media (max-width: 900px) {
  .nav-logo .nav-logo-sub { display: block; font-size: 0.9em; margin-top: 0.1rem; }
  .nav-logo { font-size: 1rem; white-space: normal; max-width: calc(100% - 60px); }
  .nav-hamburger { flex-shrink: 0; margin-left: 1rem; }
}

/* ── A-1186: DAS INHALTSVERZEICHNIS GEHOERT ALLEN ─────────────────────────
   Torsten, 22.09.2026, mit einem Bild von Daisys selbst gebauter Seite: die
   drei Punkte unter „📋 Inhalt" standen blau-violett und unterstrichen da —
   Browser-Standardlinks.

   Der Worker baut das Verzeichnis fuer JEDE Seite gleich (`inhaltsverzeichnisHtml`,
   `<div class="toc">` mit Titel und nummerierter Liste). Die Gestaltung dazu
   stand aber nirgends gemeinsam, sondern ZWEIMAL von Hand in den Seiten
   selbst: in rassestandard.html und in tipps.html, jeweils als eigener
   <style>-Block. In seite.html kam das Wort `toc` null mal vor.

   Die eigene Seite bekam also das Markup und keine einzige Regel dazu. Ein
   <a> ohne Farbangabe ist im Browser blau-violett — genau das stand auf dem
   Bild. Ein Rest griff sogar: die Zeile fuer dunkle Farbwelten weiter unten
   gibt `.toc` einen Hintergrund. Die zaehlt aber nur bei data-theme="dark…",
   und Daisy hat eine eigene Farbwelt.

   Dieselbe Falle wie bei der Laufschrift (A-466/A-1183): eine Regel liegt in
   zwei Fassungen im Baum, und wer die dritte Stelle baut, findet keine davon.
   Deshalb steht sie jetzt hier, und die zwei Ortskopien sind weg.

   Der Radius war in den beiden Kopien verschieden (2px in rassestandard, 4px
   in tipps). Hier gilt 4px fuer alle; zwei Pixel Ecke sind kein Fund, den man
   erhalten muesste, und eine dritte Sonderregel waere wieder eine Abschrift. */
.toc {
  background: var(--warm-white);
  border: 1px solid var(--border);
  border-radius: 4px;
  padding: 1.5rem 2rem;
  margin-bottom: 4rem;
  box-shadow: 0 2px 12px var(--shadow);
}
.toc-title { font-family: 'Cormorant Garamond', serif; font-size: 1.1rem; color: var(--amber-dark); margin-bottom: 1rem; }
.toc ol { padding-left: 1.5rem; }
.toc li { margin-bottom: 0.4rem; }
.toc a { color: var(--amber-dark); text-decoration: none; font-size: 0.9rem; }
.toc a:hover { color: var(--rose-gold); }

/* ── A-1183: DAS SPRACHBAND BLEIBT OBEN ──────────────────────────────────
   Torsten, 22.09.2026: „Wenn man auf Kontakte klickt, verschwindet oben
   rechts die Deutsch-Englisch-Auswahl."

   Stimmt, und zwar nicht nur dort. Gemessen an einer Handy-Ansicht (390x844)
   auf der Startseite: das Band steht bei 68 px, die Laufschrift bei 100.
   Nach `#kontakt` steht das Band bei -6496 — sechseinhalb Bildschirme ueber
   dem Fenster, weil es `position: static` hatte. Die Laufschrift rueckt an
   seine Stelle und verdeckt, dass da eben noch etwas war.

   Der Kommentar bei A-495 im Worker behauptet seit August „Er sitzt fest
   oben rechts unter der Kopfleiste". Gebaut war das nie. Auf einer Seite,
   die fast nur aus Ankern besteht, heisst das: wer einmal ins Menue tippt,
   kommt an die Sprachwahl nur noch durch Hochscrollen.

   Jetzt klebt es zwischen Kopfleiste (z 100) und Laufschrift (z 90). Der
   Hintergrund ist noetig, sobald es klebt — ohne ihn laeuft der Seiteninhalt
   sichtbar dahinter durch. `position`, `top`, `z-index` und `background`
   stehen NICHT im style-Attribut des eingesetzten Blocks, deshalb greifen
   sie hier; alles andere (Ausrichtung, Abstand, untere Linie) kommt von dort
   und bleibt unangetastet.

   Die 32 px kosten Platz, und das gehoert dazugesagt: Leiste, Band und
   Laufschrift belegen am Handy zusammen 129 von 844 px. Die Alternative
   waere, die Sprachwahl in die Kopfleiste zu schieben — dort steht am Handy
   der Zuchtname ueber drei Zeilen neben dem Hamburger, da ist nichts frei. */
#en-band {
  position: sticky;
  top: var(--kopf-hoehe, 68px);
  z-index: 95;
  background: var(--wand);
}

/* ── KITTEN TICKER ── */
/* A-466 (Torsten, ueber den eigenen Melder: "Der Ticker ist viel zu fett und
   das auf allen Seiten ... Und ueber dem Ticker ist ein paar Pixel Luft.")

   Gemessen statt gerechnet, mit schaubild/mess-ticker.mjs ueber die acht
   Demo-Zuchten. Das Band war 57 px hoch fuer 13,6 px Schrift. Zwei Drittel
   davon waren gar kein Text:
     - die vom body geerbte `line-height: 1.8` spannt eine Zeilenbox auf,
       die weit ueber die Glyphen hinausragt (gemessen: Laufband 28 px)
     - das Emoji steht auf 1rem und ist damit GROESSER als die Schrift
       daneben; es allein bestimmte die Bandhoehe (auch gemessen: 28 px)
   Deshalb hier eine eigene, enge Zeilenhoehe. Nicht unter 1.2 gehen — das
   Band hat `overflow: hidden`, es wird also ABGESCHNITTEN statt
   auseinandergeschoben, und zuerst trifft es die runde .ticker-badge und
   Unterlaengen.

   Die "Luft darueber" ist ein eigener Fehler: hier stand `top: 68px`, eine
   Abschrift der Kopfleistenhoehe. Gemessen ist die Leiste aber je nach
   Vorlage und Breite 58 bis 63 px hoch — bei Wild, Verspielt und Edel klaffte
   deshalb eine Luecke von 8 bis 10 px, durch die der Seitenhintergrund
   blitzte. `--kopf-hoehe` wird von gemeinsam.js aus der ECHTEN Leiste
   gemessen; damit stimmt es ueberall von selbst.
   Die drei `top: 0` fuer die Spaltenvorlagen am Rechner bleiben trotzdem
   stehen (Zeilen 1630, 2224, 2604): --kopf-hoehe steht erst ab
   DOMContentLoaded, bis dahin greift der Rueckfall 68px — ohne sie stuende
   das Band beim ersten Anstrich wieder mitten im Bild.

   A-1183: seit das Sprachband klebt, steht es zwischen Leiste und
   Laufschrift. `--sprachband-hoehe` misst gemeinsam.js aus dem ECHTEN Band;
   gibt es keins (die meisten Zuchten haben Englisch aus), bleibt die
   Variable bei 0 und die Zeile rechnet wie vorher. */
/* A-1487 (Torsten, 10.10.2026: „Die Laufschrift BG Farbe ist immer grau,
   das ist ugly"): statt --hero-2 (in jeder Welt ein fast schwarzes Grau)
   die Akzentfarbe der Welt, mit Schwarz abgedunkelt. 45 % Akzent: weisse
   Schrift hat in allen 29 Welten mindestens 7,4 : 1, auch eine knallgelbe
   eigene Akzentfarbe bleibt ueber 4,5 : 1. Edel, Show, Buehne und Minimal
   behalten ihre eigene Laufschrift-Farbe (weiter unten, mit Vorrang). */
.kitten-ticker {
  background: color-mix(in srgb, var(--amber) 45%, #000); color: white;
  padding: 0.25rem 0; overflow: hidden;
  line-height: 1.25;
  position: sticky;
  top: calc(var(--kopf-hoehe, 68px) + var(--sprachband-hoehe, 0px));
  z-index: 90;
  cursor: default;
}
.kitten-ticker-track {
  display: inline-flex; align-items: center;
  white-space: nowrap;
  animation: ticker 36s linear infinite;
  animation-delay: var(--ticker-delay, 0s);
}
.kitten-ticker-track:hover { animation-play-state: paused; }
@media (min-width: 900px) {
  .kitten-ticker-track { animation: ticker 30s linear infinite; animation-delay: var(--ticker-delay, 0s); }
}
@keyframes ticker {
  0% { transform: translateX(100vw); }
  100% { transform: translateX(-100%); }
}
/* A-817 (Torstens Befund 04.09.2026: "der ticker startet immer noch ganz
   rechts und braucht ewig, bis er ins bild kommt, weil die seiten
   eingekuerzt wurden"): 100vw ist der FENSTERrand. Unter dem Deckel
   (A-768) ist das Band 1800 breit, bei Atelier 1120, bei den Spalten-
   vorlagen Fenster minus Spalte - und der Text lief erst unsichtbar durch
   den Rand, ehe er auftauchte (gemessen: Band 713-1833, Start bei 2560).
   Das Band ist jetzt ein Container, und der Start rechnet in cqw - der
   Breite des Bandes selbst. Wer cqw nicht kennt (Chrome vor 105, Safari
   vor 16, Firefox vor 110), behaelt den Start am Fensterrand. */
.kitten-ticker { container-type: inline-size; }
@supports (width: 1cqw) {
  @keyframes ticker {
    0% { transform: translateX(100cqw); }
    100% { transform: translateX(-100%); }
  }
}
.ticker-item {
  display: inline-flex; align-items: center; gap: 0.5rem;
  font-size: 0.85rem; font-weight: 600; letter-spacing: 0.08em;
  text-transform: uppercase; color: rgba(255,255,255,0.9);
  padding: 0 1.5rem; text-decoration: none;
  transition: color 0.2s;
}
.ticker-item:hover { color: #fff; }
a.ticker-item { cursor: pointer; }
a.ticker-item:hover { color: var(--amber-light); }
/* A-466: beides war GROESSER gesetzt als die Schrift daneben (0.85rem) und
   bestimmte damit die Bandhoehe. Das Emoji ist der unberechenbarste Teil —
   es kommt aus einer Systemschrift und faellt auf Android und iOS hoeher aus
   als am Rechner. Deshalb faellt es hier mit. */
.ticker-item .ticker-emoji { font-size: 0.85rem; }
.ticker-sep { color: rgba(255,255,255,0.25); padding: 0 0.25rem; font-size: 0.95rem; }
.ticker-badge {
  background: var(--badge-neutral); color: #fff;
  border-radius: 99px; padding: 0.1em 0.55em;
  font-size: 0.65rem; font-weight: 700; margin-left: 0.3rem;
}
/* Sucht-Zuhause im gleichen Orange wie der Badge auf der Katzenkarte, damit
   die Farbe seitenweit dasselbe bedeutet. */
.ticker-badge-home { background: var(--badge-home); }

/* ── DARK THEME: alle Cards & Boxen ── */
[data-theme^="dark"] .faq-item,
[data-theme^="dark"] .result-card,
[data-theme^="dark"] .parent-card,
[data-theme^="dark"] .faq-cta,
[data-theme^="dark"] .card,
[data-theme^="dark"] .card-body,
[data-theme^="dark"] .card-header,
[data-theme^="dark"] .litter-wrap,
[data-theme^="dark"] .kitten-card,
[data-theme^="dark"] .zuchtkatze-card,
[data-theme^="dark"] .info-section,
[data-theme^="dark"] .tip-box,
[data-theme^="dark"] .standard-table td,
[data-theme^="dark"] .cta-box,
[data-theme^="dark"] .litter-card,
[data-theme^="dark"] .event-card,
[data-theme^="dark"] .date-box,
[data-theme^="dark"] .tip-section,
[data-theme^="dark"] .barf-section,
[data-theme^="dark"] .punkte-item,
[data-theme^="dark"] .toc {
  background: var(--warm-white) !important;
  border-color: var(--border) !important;
  color: var(--text) !important;
  box-shadow: 0 2px 16px rgba(0,0,0,0.5) !important;
}

[data-theme^="dark"] .barf-section {
  padding: 1.75rem 2rem !important;
  border-radius: 6px !important;
}

[data-theme^="dark"] .litter-top {
  background: var(--card-bg) !important;
  color: var(--text) !important;
}

[data-theme^="dark"] .info-item {
  background: var(--cream-dark) !important;
  color: var(--text-soft) !important;
}

[data-theme^="dark"] .faq-question {
  background: #3A3835 !important;
  color: var(--text) !important;
}
[data-theme^="dark"] .faq-question:hover {
  background: #4A4845 !important;
}
[data-theme^="dark"] .faq-answer {
  background: #2E2C29 !important;
  color: var(--text-muted) !important;
  border-top-color: #5A5755 !important;
}
[data-theme^="dark"] .faq-answer strong,
[data-theme^="dark"] .faq-answer a {
  color: var(--text-soft) !important;
}

[data-theme^="dark"] .form-group select,
[data-theme^="dark"] .form-group input {
  background: #2A2825 !important;
  color: var(--text) !important;
  border-color: #5A5755 !important;
}

[data-theme^="dark"] .litter-name,
[data-theme^="dark"] .kitten-name,
[data-theme^="dark"] .zuchtkatze-name,
[data-theme^="dark"] .memorial-name,
[data-theme^="dark"] .result-name,
[data-theme^="dark"] .info-title {
  color: var(--text-soft) !important;
}

[data-theme^="dark"] .kitten-detail,
[data-theme^="dark"] .zuchtkatze-meta,
[data-theme^="dark"] .zuchtkatze-desc,
[data-theme^="dark"] .memorial-dates {
  color: var(--text-muted) !important;
}

[data-theme^="dark"] .memorial-photo-placeholder {
  background: linear-gradient(135deg, #3A3835, #4A4845) !important;
}

[data-theme^="dark"] .warning-box {
  background: #3B3520 !important;
  border-color: #6B5A20 !important;
  color: #C4A84A !important;
}

[data-theme^="dark"] .color-yes {
  background: #1E3B25 !important;
  color: #7DC98A !important;
}
[data-theme^="dark"] .color-no {
  background: #3B1E1E !important;
  color: #C97D7D !important;
}

[data-theme^="dark"] .fg select,
[data-theme^="dark"] .fg input {
  background: #2A2825 !important;
  color: var(--text) !important;
  border-color: #5A5755 !important;
}


/* ── DARK THEME: Nav, Ticker, Footer ── */
/* A-816 (Torstens sechs Menü-Befunde vom 04.09.2026: "menü in dunklen
   themen verändert sich nicht", "unter dem menü ein blauer rahmen, auf
   vielen seiten und designs", "wird nicht bis ganz an den rand gezogen"):
   Hier standen zwei Regeln mit festem Schwarz: die Kopfleiste (nav) auf
   rgba(26,24,22,1) !important und die Menueliste (.nav-links) auf #1A1816
   !important. Beide stammen aus der Zeit, als die Kopfleiste einen
   festen HELLEN Wert trug (rgba(250,247,242,0.97)) und Dunkel ihn
   uebernageln musste. Seit A-764 nimmt die Kopfleiste die Wandfarbe des
   Themas - der Nagel war damit nicht mehr noetig, aber er blieb stehen
   und hat drei Dinge angerichtet (gemessen in mess-menue-816, 1440 px):
     - Standard und Wild sahen in ALLEN vier getoenten Dunkelfassungen
       dieselbe Leiste rgb(26,24,22) - die Toenung aus A-467 kam nie an.
     - Verspielt, Edel und Atelier bekamen unter dem Menue einen eigenen
       schwarzen Kasten, weil ihre Kopfleiste eine andere Farbe traegt
       (Pflaume, Tannengruen, Wand); bei Atelier endete er wegen des
       Leistenrands 22 px vor der Kante. In Verspielt stand die Schrift
       darin bei 1,02:1 - unsichtbar.
     - Das !important schlug Wilds eigene Spaltenfarbe (var(--card)).
   Die Menueliste braucht ueberhaupt nur am Handy einen Grund - dort ist
   sie die Klappleiste (Zeile 396, var(--cream)). Am PC liegt sie IN der
   Kopfleiste und hat keinen eigenen. Beide Nagel-Regeln sind weg; der
   Zuchtname behaelt seine helle Akzentfarbe. */
[data-theme^="dark"] .nav-logo {
  color: var(--rose-gold) !important;
}
[data-theme^="dark"] .kitten-ticker {
  background: color-mix(in srgb, var(--amber) 45%, #000) !important;   /* A-1487 */
  border-top: 1px solid #9B8F85;
  border-bottom: 1px solid #9B8F85;
}
[data-theme^="dark"] footer {
  background: #0E0C0A !important;
  border-top: 1px solid #9B8F85 !important;
}
/* A-1582 (Petra, Of Flaming Moon, Tinte, 17.10.2026; Torsten: „der Footer
   in unserem grau"): zehn Welten haben keinen eigenen --hero-2 (A-083), ihr
   Fuss fiel auf das Grau aus :root (#373634), ein fremdes Band unter
   dunkelblauen oder roséfarbenen Seiten. Dunkle Welten: ein Ton dunkler als
   der eigene Grund, wie fussFarbe es fuer eine eigene dunkle Grundfarbe
   rechnet (A-1529). Helle Welten: die abgedunkelte Akzentfarbe, wie die
   Laufschrift (A-1487). Ohne Vorrangmarke: die Vorlagen (Edel, Minimal, ...)
   und der eigene Regler „Seitenfuß" gewinnen weiter. */
:is([data-theme="tinte"], [data-theme="wein"], [data-theme="moos"], [data-theme="neon"], [data-theme="granit"], [data-theme="schiefer"]) footer {
  background: color-mix(in srgb, var(--cream) 80%, #000);
}
:is([data-theme="birke"], [data-theme="porzellan"], [data-theme="puder"], [data-theme="sand"]) footer {
  background: color-mix(in srgb, var(--amber) 45%, #000);
}

[data-theme^="dark"] .page-hero,
[data-theme^="dark"] .hero,
[data-theme^="dark"] .katze-detail-hero,
[data-theme^="dark"] .kt-hero {
  background: #3A3835 !important;
  border-bottom: 1px solid #9B8F85 !important;
}

[data-theme^="dark"] #rasse,
[data-theme^="dark"] #katzen,
[data-theme^="dark"] #deckkatzen,
[data-theme^="dark"] #welpen,
[data-theme^="dark"] #galerie,
[data-theme^="dark"] #ueber {
  border-bottom: 1px solid #9B8F85;
}

/* ═══════════════════════════════════════════════
   GOOGLE-BEWERTUNG
   ═══════════════════════════════════════════════ */

/* Kasten im Kontaktbereich der Startseite */
.review-box {
  margin-top: 2.5rem;
  padding: 1.5rem;
  border: 1px solid var(--rose-gold);
  border-radius: 4px;
  background: var(--cream-dark);
}
.review-box .review-title {
  font-family: var(--font-display, 'Cormorant Garamond', serif);
  font-size: 1.25rem;
  color: var(--text, #2E2A27);
  margin-bottom: 0.5rem;
}
.review-box p {
  font-size: 0.88rem;
  color: var(--text-soft);
  margin-bottom: 1.1rem;
  line-height: 1.6;
}
.review-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.7rem 1.4rem;
  border: 1px solid var(--rose-gold);
  border-radius: 3px;
  background: transparent;
  color: var(--amber-dark);
  text-decoration: none;
  font-size: 0.9rem;
  letter-spacing: 0.02em;
  transition: background 0.25s ease, color 0.25s ease;
}
.review-btn:hover {
  background: var(--rose-gold);
  color: #fff;
}
.review-btn svg { flex: none; }

/* Zeile im Footer */
.footer-review {
  margin-top: 1rem;
  font-size: 0.8rem;
}
.footer-review a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  padding-bottom: 1px;
  opacity: 0.85;
}
.footer-review a:hover { opacity: 1; }

/* A-744: Die Herkunftszeile ganz unten. Kleiner und blasser als alles
   andere im Fuss — sie soll auffindbar sein, nicht auffallen. Eine
   Zuchtseite gehört der Züchterin; wir stehen darunter, nicht daneben.
   Der Unterstrich kommt erst beim Überfahren: ohne ihn liest sich die
   Zeile als Angabe, mit ihm als Werbung. */
.footer-gemacht {
  margin-top: 0.55rem;
  font-size: 0.7rem;
  opacity: 0.55;
}
.footer-gemacht a {
  color: inherit;
  text-decoration: none;
  border-bottom: 1px solid transparent;
  padding-bottom: 1px;
}
.footer-gemacht a:hover {
  color: #fff;
  border-bottom-color: currentColor;
}

/* ── FILTER AUF DER ADOPTIERT-SEITE ── */
.adopt-filter {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.5rem;
  margin: 0 auto 2rem;
  padding: 0 1rem;
  max-width: 1200px;
}
.adopt-filter-btn {
  padding: 0.5rem 1.1rem;
  border: 1px solid var(--rose-gold);
  border-radius: 3px;
  background: transparent;
  color: var(--text-soft);
  font-family: inherit;
  font-size: 0.82rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease;
}
.adopt-filter-btn:hover { color: var(--text); }
.adopt-filter-btn.is-active {
  background: var(--rose-gold);
  color: #fff;
}

/* ── EINHEITLICHER KONTAKT-BAUSTEIN (Unterseiten, vor dem Footer) ── */
.kontakt-cta {
  max-width: 640px;
  margin: 3.5rem auto 4rem;
  padding: 2rem 1.75rem;
  text-align: center;
  border: 1px solid var(--rose-gold);
  border-radius: 4px;
  background: var(--cream-dark);
}
.kontakt-cta h2 {
  font-family: var(--font-display, 'Cormorant Garamond', serif);
  font-weight: 300;
  font-size: 1.5rem;
  color: var(--text);
  margin: 0 0 0.6rem;
}
.kontakt-cta p {
  font-size: 0.9rem;
  color: var(--text-soft);
  line-height: 1.65;
  margin: 0 auto 1.4rem;
  max-width: 46ch;
}
.kontakt-cta-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
  padding: 0.75rem 1.6rem;
  border: 1px solid var(--rose-gold);
  border-radius: 3px;
  background: var(--rose-gold);
  color: #fff;
  text-decoration: none;
  font-size: 0.88rem;
  letter-spacing: 0.04em;
  transition: background 0.25s ease, color 0.25s ease;
}
.kontakt-cta-btn:hover { background: transparent; color: var(--amber-dark); }
.kontakt-cta-note {
  display: block;
  margin-top: 0.9rem;
  font-size: 0.78rem;
  color: var(--text-muted);
}

/* ── ELTERNPAAR / TIERKACHELN ──────────────────────────────────────────────
   Ein Baustein für mehrere Stellen: Elternpaar auf der geplanten Wurfkarte,
   unter Wurf-News und auf der Kittenseite, dort zusätzlich die Geschwister.
   Bilder werden NICHT beschnitten (contain), weil die Fotos mal hochkant und
   mal quer sind; die Leerfläche füllt eine weichgezeichnete Kopie desselben
   Fotos — dasselbe Prinzip wie in der Galerie. */
.tier-paar {
  display: flex; align-items: center; justify-content: center;
  gap: 1rem; flex-wrap: wrap; margin: 1.5rem 0;
}
.tier-paar-herz {
  font-size: 1.5rem; color: var(--rose-gold); flex-shrink: 0; line-height: 1;
}
/* A-1472: ein eigenes Verpaarungszeichen (Bild) - klein, rund-eckig, mit
   Schatten wie ein Siegel; so stoert ein eigener Bildhintergrund nicht. */
.tier-paar-bild {
  display: block; width: 64px; height: 64px; object-fit: cover; border-radius: 22%;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
}
/* A-1482: ein freigestelltes Zeichen (PNG, WebP, SVG - durchsichtiger Grund,
   paarZeichenHtml setzt .frei) steht ohne Kasten, groesser, und der Schatten
   folgt seiner Form. Torsten, 10.10.2026, an Silkes Herz: „Können wir das
   Herz ausschneiden? … Oder durchsichtig machen und vergrößern." */
.tier-paar-bild.frei {
  width: 96px; height: auto; max-height: 96px; object-fit: contain; border-radius: 0;
  box-shadow: none; filter: drop-shadow(0 3px 8px rgba(0, 0, 0, 0.28));
}
.tier-kachel {
  display: block; text-decoration: none; color: inherit;
  width: 170px; max-width: 42vw;
}
.tier-kachel-bild {
  position: relative; aspect-ratio: 4/3; overflow: hidden;
  border-radius: 4px; background: var(--cream-dark);
}
.tier-kachel-bild img {
  position: relative; z-index: 1;
  width: 100%; height: 100%; object-fit: contain; display: block;
}
.tier-kachel-bild.pf::before {
  content: ''; position: absolute; inset: 0;
  background-image: var(--pf); background-size: cover; background-position: center;
  filter: blur(16px) saturate(1.08); transform: scale(1.15); opacity: 0.85;
}
.tier-kachel-leer {
  width: 100%; height: 100%; display: flex; align-items: center;
  justify-content: center; font-size: 2rem; color: var(--border);
}
.tier-kachel-rolle {
  font-size: 0.62rem; font-weight: 700; letter-spacing: 0.12em;
  text-transform: uppercase; color: var(--text-muted);
  margin-top: 0.55rem; text-align: center;
}
.tier-kachel-name {
  font-family: 'Cormorant Garamond', serif; font-size: 1.05rem; line-height: 1.3;
  color: var(--amber-dark); text-align: center; margin-top: 0.1rem;
}
a.tier-kachel:hover .tier-kachel-name { text-decoration: underline; }
a.tier-kachel:hover .tier-kachel-bild { box-shadow: 0 4px 18px var(--shadow); }
/* Geschwister: mehrere nebeneinander, kleiner */
.tier-reihe {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
  gap: 0.9rem; margin: 1rem 0;
}
.tier-reihe .tier-kachel { width: auto; max-width: none; }
.tier-reihe .tier-kachel-name { font-size: 0.92rem; }
@media (max-width: 480px) {
  .tier-kachel { width: 140px; }
  .tier-paar { gap: 0.6rem; }
}
/* Elternpaar: groesser als die Geschwisterreihe — es ist der Kern der
   Wurfankuendigung und stand vorher in derselben Briefmarkengroesse. */
.tier-paar .tier-kachel { width: 240px; max-width: 40vw; }
.tier-paar .tier-kachel .tier-kachel-name { font-size: 1.2rem; }
/* Auf schmalen Schirmen brach das Herz als drittes Element in eine eigene
   Zeile und stand damit UNTER beiden Tieren. Untereinander gestapelt sitzt
   es wieder dazwischen. */
@media (max-width: 560px) {
  .tier-paar { flex-direction: column; gap: 0.9rem; }
  .tier-paar .tier-kachel { width: 100%; max-width: 300px; }
  .tier-paar-herz { font-size: 1.3rem; }
}

/* ── A-083: HERO-VERLAUF ─────────────────────────────────────────────────
   Der Verlauf stand als fester Wert in 20 statischen Seiten, jedesmal derselbe
   und an den Farbvariablen vorbei. Ein Farbwechsel in den Einstellungen wirkte
   ueberall — nur nicht dort, wo die Seite am groessten ist.

   Die drei Toene sind je Thema aus dessen Akzentfarbe berechnet: Farbton und
   (gedaempfte) Saettigung bleiben, die Helligkeit ist festgelegt. Absichtlich
   dunkel gehalten, auch in hellen Themen — auf dem Hero steht weisser Text mit
   Schatten, ein heller Verlauf machte ihn unlesbar. Feste Werte statt
   color-mix(): faellt das in einem Browser aus, ist die Variable ungueltig und
   der Hero haette gar keinen Hintergrund. */
:root {
  --hero-1: #1D1C1B;
  --hero-2: #373634;
  --hero-3: #5A5754;
}
[data-theme="rose"] {
  --hero-1: #1F1919;
  --hero-2: #3C2F2F;
  --hero-3: #614C4C;
}
[data-theme="green"] {
  --hero-1: #191F19;
  --hero-2: #2F3C2F;
  --hero-3: #4C614C;
}
[data-theme="blue"] {
  --hero-1: #191B1F;
  --hero-2: #2F343C;
  --hero-3: #4C5461;
}
[data-theme^="dark"] {
  --hero-1: #1F1D19;
  --hero-2: #3C362F;
  --hero-3: #61584C;
}
[data-theme="purple"] {
  --hero-1: #1B191F;
  --hero-2: #342F3C;
  --hero-3: #544C61;
}
[data-theme="brown"] {
  --hero-1: #1F1C19;
  --hero-2: #3C352F;
  --hero-3: #61564C;
}
[data-theme="slate"] {
  --hero-1: #191C1F;
  --hero-2: #2F363C;
  --hero-3: #4C5861;
}
[data-theme="gold"] {
  --hero-1: #1F1E19;
  --hero-2: #3C392F;
  --hero-3: #615C4C;
}
[data-theme="mauve"] {
  --hero-1: #1F1919;
  --hero-2: #3C2F2F;
  --hero-3: #614C4C;
}
/* A-1583: die zehn Welten ohne eigene Toene (Tinte, Wein, Moos, Neon, Granit,
   Schiefer, Birke, Porzellan, Puder, Sand) fielen auf das Grau aus :root
   (Petra, Tinte: braungraues Band unter dem Startbild). Gerechnet nach dem
   Muster von Blau: Helligkeit je Stufe wie das Grau, Farbton der
   Akzentfarbe, Saettigung im Verhaeltnis wie bei Blau (hoechstens 25 %).
   Feste Werte wie oben. Neon behaelt seinen eigenen --hero-verlauf. */
[data-theme="tinte"] {
  --hero-1: #151A23;
  --hero-2: #283143;
  --hero-3: #41506D;
}
[data-theme="wein"] {
  --hero-1: #231915;
  --hero-2: #432F28;
  --hero-3: #6D4D41;
}
[data-theme="moos"] {
  --hero-1: #1C2117;
  --hero-2: #353F2C;
  --hero-3: #566747;
}
[data-theme="neon"] {
  --hero-1: #23151A;
  --hero-2: #432832;
  --hero-3: #6D4151;
}
[data-theme="granit"] {
  --hero-1: #151D23;
  --hero-2: #283743;
  --hero-3: #41596D;
}
[data-theme="schiefer"] {
  --hero-1: #1B1B1D;
  --hero-2: #353536;
  --hero-3: #555559;
}
[data-theme="birke"] {
  --hero-1: #1C2018;
  --hero-2: #353C2F;
  --hero-3: #56624C;
}
[data-theme="porzellan"] {
  --hero-1: #161A22;
  --hero-2: #2A3241;
  --hero-3: #44516A;
}
[data-theme="puder"] {
  --hero-1: #221916;
  --hero-2: #40302B;
  --hero-3: #694F45;
}
[data-theme="sand"] {
  --hero-1: #231A15;
  --hero-2: #433228;
  --hero-3: #6D5241;
}

:root {
  /* A-113: Der Verlauf lief bis 291 unter 135 Grad, also diagonal. Ein
     diagonaler Verlauf haengt am Seitenverhaeltnis des Kastens: derselbe
     Verlauf sieht in einem 1280x450-Kasten (Unterseite) und einem
     1280x800-Kasten (Startseite, 100vh) VERSCHIEDEN aus. Auf der Startseite
     liegt der dunkelste Ton ueber dem ganzen sichtbaren Bereich, auf der
     Unterseite laeuft die ganze Spanne durchs Bild. Beide benutzten dieselbe
     Variable und sahen trotzdem deutlich anders aus — das war kein Fehler in
     der Farbe, sondern Geometrie.
     Senkrecht ist das Verhaeltnis egal: jeder Kasten zeigt dieselbe Folge von
     oben nach unten, unabhaengig davon, wie hoch er ist. */
  --hero-verlauf: linear-gradient(180deg, var(--hero-1) 0%, var(--hero-2) 60%, var(--hero-3) 100%);
}

/* Ein Ort fuer den Kopfbereich aller Unterseiten. Die Seiten setzen in ihrem
   eigenen <style> nur noch Groesse und Ausrichtung. */
.page-hero { background: var(--hero-verlauf); }


/* ── A-098: HELLIGKEITSSTUFEN ─────────────────────────────────────────────
   Drei Stufen statt eines stufenlosen Reglers. Auch die hellste Stufe bleibt
   deutlich unter 50 % Helligkeit — auf dem Kopfbereich steht heller Text mit
   Schatten, und ein Regler, mit dem sich das kaputtmachen laesst, ist
   schlimmer als gar keiner. Die Werte sind hier ausgerechnet und nicht zur
   Laufzeit: faellt eine Berechnung im Browser aus, haette der Kopfbereich
   gar keinen Hintergrund. */
[data-hero-hell="dunkler"] {
  --hero-1: #100F0F;
  --hero-2: #222120;
  --hero-3: #3A3836;
}
[data-hero-hell="dunkler"][data-theme="rose"] {
  --hero-1: #110D0D;
  --hero-2: #251D1D;
  --hero-3: #3F3131;
}
[data-hero-hell="dunkler"][data-theme="green"] {
  --hero-1: #0D110D;
  --hero-2: #1D251D;
  --hero-3: #313F31;
}
[data-hero-hell="dunkler"][data-theme="blue"] {
  --hero-1: #0D0F11;
  --hero-2: #1D2025;
  --hero-3: #31363F;
}
[data-hero-hell="dunkler"][data-theme^="dark"] {
  --hero-1: #11100D;
  --hero-2: #25221D;
  --hero-3: #3F3931;
}
[data-hero-hell="dunkler"][data-theme="purple"] {
  --hero-1: #0F0D11;
  --hero-2: #201D25;
  --hero-3: #36313F;
}
[data-hero-hell="dunkler"][data-theme="brown"] {
  --hero-1: #110F0D;
  --hero-2: #25211D;
  --hero-3: #3F3831;
}
[data-hero-hell="dunkler"][data-theme="slate"] {
  --hero-1: #0D1011;
  --hero-2: #1D2225;
  --hero-3: #31393F;
}
[data-hero-hell="dunkler"][data-theme="gold"] {
  --hero-1: #11100D;
  --hero-2: #25231D;
  --hero-3: #3F3C31;
}
[data-hero-hell="dunkler"][data-theme="mauve"] {
  --hero-1: #110D0D;
  --hero-2: #251D1D;
  --hero-3: #3F3131;
}
/* A-1583 */
[data-hero-hell="dunkler"][data-theme="tinte"] {
  --hero-1: #0C0E13;
  --hero-2: #191E29;
  --hero-3: #2A3446;
}
[data-hero-hell="dunkler"][data-theme="wein"] {
  --hero-1: #130E0C;
  --hero-2: #291D19;
  --hero-3: #46312A;
}
[data-hero-hell="dunkler"][data-theme="moos"] {
  --hero-1: #0F120D;
  --hero-2: #21271B;
  --hero-3: #37422E;
}
[data-hero-hell="dunkler"][data-theme="neon"] {
  --hero-1: #130C0E;
  --hero-2: #29191F;
  --hero-3: #462A34;
}
[data-hero-hell="dunkler"][data-theme="granit"] {
  --hero-1: #0C1013;
  --hero-2: #192229;
  --hero-3: #2A3A46;
}
[data-hero-hell="dunkler"][data-theme="schiefer"] {
  --hero-1: #0F0F10;
  --hero-2: #202022;
  --hero-3: #373739;
}
[data-hero-hell="dunkler"][data-theme="birke"] {
  --hero-1: #0F120D;
  --hero-2: #21251D;
  --hero-3: #383F31;
}
[data-hero-hell="dunkler"][data-theme="porzellan"] {
  --hero-1: #0C0E13;
  --hero-2: #1A1F28;
  --hero-3: #2C3444;
}
[data-hero-hell="dunkler"][data-theme="puder"] {
  --hero-1: #130E0C;
  --hero-2: #281E1A;
  --hero-3: #43332D;
}
[data-hero-hell="dunkler"][data-theme="sand"] {
  --hero-1: #130F0C;
  --hero-2: #291F19;
  --hero-3: #46352A;
}
[data-hero-hell="heller"] {
  --hero-1: #302E2C;
  --hero-2: #4F4D4A;
  --hero-3: #74716C;
}
[data-hero-hell="heller"][data-theme="rose"] {
  --hero-1: #332828;
  --hero-2: #564343;
  --hero-3: #7E6363;
}
[data-hero-hell="heller"][data-theme="green"] {
  --hero-1: #283328;
  --hero-2: #435643;
  --hero-3: #637E63;
}
[data-hero-hell="heller"][data-theme="blue"] {
  --hero-1: #282C33;
  --hero-2: #434A56;
  --hero-3: #636C7E;
}
[data-hero-hell="heller"][data-theme^="dark"] {
  --hero-1: #332F28;
  --hero-2: #564E43;
  --hero-3: #7E7263;
}
[data-hero-hell="heller"][data-theme="purple"] {
  --hero-1: #2C2833;
  --hero-2: #4A4356;
  --hero-3: #6C637E;
}
[data-hero-hell="heller"][data-theme="brown"] {
  --hero-1: #332D28;
  --hero-2: #564C43;
  --hero-3: #7E6F63;
}
[data-hero-hell="heller"][data-theme="slate"] {
  --hero-1: #282F33;
  --hero-2: #434E56;
  --hero-3: #63727E;
}
[data-hero-hell="heller"][data-theme="gold"] {
  --hero-1: #333128;
  --hero-2: #565143;
  --hero-3: #7E7763;
}
[data-hero-hell="heller"][data-theme="mauve"] {
  --hero-1: #332828;
  --hero-2: #564343;
  --hero-3: #7E6363;
}
/* A-1583 */
[data-hero-hell="heller"][data-theme="tinte"] {
  --hero-1: #232A3A;
  --hero-2: #394660;
  --hero-3: #54678C;
}
[data-hero-hell="heller"][data-theme="wein"] {
  --hero-1: #3A2923;
  --hero-2: #604439;
  --hero-3: #8C6354;
}
[data-hero-hell="heller"][data-theme="moos"] {
  --hero-1: #2E3626;
  --hero-2: #4C5B3E;
  --hero-3: #6F855B;
}
[data-hero-hell="heller"][data-theme="neon"] {
  --hero-1: #3A232B;
  --hero-2: #603947;
  --hero-3: #8C5468;
}
[data-hero-hell="heller"][data-theme="granit"] {
  --hero-1: #232F3A;
  --hero-2: #394F60;
  --hero-3: #54738C;
}
[data-hero-hell="heller"][data-theme="schiefer"] {
  --hero-1: #2D2D2F;
  --hero-2: #4B4B4E;
  --hero-3: #6E6E72;
}
[data-hero-hell="heller"][data-theme="birke"] {
  --hero-1: #2E3428;
  --hero-2: #4C5643;
  --hero-3: #6F7F61;
}
[data-hero-hell="heller"][data-theme="porzellan"] {
  --hero-1: #242B38;
  --hero-2: #3C475D;
  --hero-3: #586988;
}
[data-hero-hell="heller"][data-theme="puder"] {
  --hero-1: #372A25;
  --hero-2: #5C453D;
  --hero-3: #876559;
}
[data-hero-hell="heller"][data-theme="sand"] {
  --hero-1: #3A2B23;
  --hero-2: #604839;
  --hero-3: #8C6954;
}


/* ── A-040: NACH-OBEN-KNOPF ────────────────────────────────────────────────
   Stand bisher nur in index.html - und dort ohne Wirkung: Markup und Stil
   waren da, aber KEINE Zeile im Skript hat je die Klasse `visible` gesetzt.
   Der Knopf war seit seiner Einfuehrung unsichtbar. Deshalb erinnert sich
   auch niemand an ihn.

   Jetzt hier, weil er auf jede Seite gehoert. Kein Verzeichnis "lange
   Seiten": statische Textlaenge sagt nichts (faq.html hat 296 Zeichen im
   Quelltext und wird per Skript lang). Der Knopf zeigt sich ab einer
   Scrolltiefe - kurze Seiten erreichen sie nie und zeigen ihn nie. */
.back-to-top {
  position: fixed; bottom: 2rem; left: 2rem; z-index: 500;
  width: 46px; height: 46px; border-radius: 50%;
  background: #4A4845; color: white;
  display: flex; align-items: center; justify-content: center;
  font-size: 1.1rem; cursor: pointer; border: none;
  box-shadow: 0 2px 12px rgba(0,0,0,0.2);
  opacity: 0; transform: translateY(10px); pointer-events: none;
  transition: opacity 0.3s, transform 0.3s;
  font-family: 'Source Sans 3', sans-serif;
}
.back-to-top.visible { opacity: 1; transform: translateY(0); pointer-events: auto; }
.back-to-top:hover { background: var(--amber); }
@media (prefers-reduced-motion: reduce) { .back-to-top { transition: none; } }

/* ── A-570: DER KNOPF DARF DEN PFLICHTLINK NICHT ZUDECKEN ─────────────────
   Beim Durchsehen der acht Demos am Handy gemessen (390 px, ganz nach unten
   gescrollt):

     Hoch-Knopf   x  32– 78
     „Impressum"  x  49–110

   Knapp die Halfte des Links liegt unter dem Knopf. Nachgetastet mit
   elementFromPoint: von funf Punkten quer uber den Link treffen die ersten
   zwei den Knopf. Das Impressum ist in Deutschland Pflicht — es muss
   erreichbar sein, nicht nur vorhanden.

   NACH RECHTS SCHIEBEN HILFT NICHT: dort liegt der Nestlinie-Verweis
   (x 195–326), der Knopf laege dann auf dessen Ende. Der Knopf schwebt fest
   im Sichtfeld; ausweichen muss also der Inhalt darunter.

   Deshalb Luft am Fuss der Fusszeile — genug fur Knopf (46 px) und seinen
   Abstand (32 px). Nur am Handy: am Schreibtisch ist die Fusszeile mittig
   und der Knopf steht ohnehin frei. */
@media (max-width: 768px) {
  footer { padding-bottom: calc(2rem + 46px + 32px); }
}


/* ── A-136/A-170: UMBRUCH-HINWEIS IN DER LIGHTBOX ──────────────────────────
   A-136 hat die Bewegung eingebaut - aber nur in index.html. Die Galerie gibt
   es zweimal: auf der Startseite und unter "Vermittelt". Die zweite blieb ohne
   Hinweis, und damit war die Funktion auf der einen Seite da und auf der
   anderen nicht.

   Der Stil steht deshalb jetzt hier statt im Stilblock einer einzelnen Seite:
   eine Kopie fuer beide. Bewegt wird das Bild, nicht der Kasten - der traegt
   die Pfeile, und die sollen stehen bleiben. */
.lightbox img, .lightbox video { will-change: transform; }
@keyframes umbruch-vor {
  0% { transform: translateX(0); }
  35% { transform: translateX(-22px); }
  100% { transform: translateX(0); }
}
@keyframes umbruch-zurueck {
  0% { transform: translateX(0); }
  35% { transform: translateX(22px); }
  100% { transform: translateX(0); }
}
.lightbox.umbruch-vor img, .lightbox.umbruch-vor video { animation: umbruch-vor 0.4s ease; }
.lightbox.umbruch-zurueck img, .lightbox.umbruch-zurueck video { animation: umbruch-zurueck 0.4s ease; }
/* Wer Bewegung abbestellt hat, bekommt keine. Der Zaehler oben zeigt die
   Position ohnehin - der Hinweis geht also nicht verloren. */
@media (prefers-reduced-motion: reduce) {
  .lightbox.umbruch-vor img, .lightbox.umbruch-vor video,
  .lightbox.umbruch-zurueck img, .lightbox.umbruch-zurueck video { animation: none; }
}


/* ══════════════════════════════════════════════════════════════════════════
   VORLAGEN (data-layout)
   --------------------------------------------------------------------------
   Bis Build 319 standen diese Regeln in startseite.css. Damit wirkte eine
   gewaehlte Vorlage NUR auf der Startseite: wer umschaltete und dann auf
   „Rasse" oder „Ratgeber" klickte, sah wieder das Standardaussehen. Aufgefallen
   ist es erst, als A-154 die Datei aufgeteilt hat — vorher lagen die Regeln im
   gemeinsamen Kopf von index.html und der Fehler war unsichtbar.

   Hier stehen sie richtig: style.css laedt jede der 25 Seiten.

   Alle Regeln haengen an `html[data-layout="..."]`. Eine Zucht auf
   `standard` — und das ist Babajewo — wird von keiner einzigen erreicht.
   ══════════════════════════════════════════════════════════════════════════ */
/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „WILD" — Auflage über dem Grundlayout

   Bewusst KEIN zweites Layout. Das Markup der Navigation kommt aus dem Worker,
   und alles, was das Seitenskript erzeugt (Karten, Galerie, Lightbox, Würfe),
   trägt die Klassen von oben. Eine eigene Datei müsste jede davon noch einmal
   gestalten und die 69 KB Logik mitschleppen — hier wird nur überschrieben,
   was die Richtung ausmacht. Aktiv wird sie über `data-layout="wild"` am
   <html>, gesetzt vom Worker aus `settings.layout`.

   SCHRIFTEN: Die Seite lädt keine Google-Fonts — `font-src 'self'` in der CSP
   verbietet es, und das ist Absicht (keine Verbindung zu Google, keine IP der
   Besucherin). Wild benutzt deshalb die vorhandenen lokalen Schriften und
   holt seinen Charakter aus Versalien, Sperrung und Gewicht statt aus einer
   zweiten Schriftfamilie. Sollen Oswald und Archivo dazukommen, müssen sie
   wie die übrigen als woff2 unter /fonts/ liegen.
   ══════════════════════════════════════════════════════════════════════════ */
/* ══════════════════════════════════════════════════════════════════════════
   A-750: WILD UND SHOW GEBEN IHRE FARBWELT AB — UND BEKOMMEN SIE ALS THEMA
   --------------------------------------------------------------------------
   Torstens Entscheidung vom 02.09.2026 (Antwort "2"): die Dreistufung aus
   A-374 faellt fuer die zwei "festen" Vorlagen. Bis 763 setzte
   html[data-layout="wild"] neunzehn Farb-Token selbst — mit Spezifitaet
   (0,1,1) schlug das JEDES Thema (0,1,0), auch Dunkel. Im Browser gemessen
   (schaubild/pruef-weltwache-763): der Grund war mit jedem Thema Byte fuer
   Byte derselbe wie ohne.

   DER UMBAU, in einem Satz: die Farbe wandert aus der Vorlage in ein
   Thema, und die Vorlage behaelt sie nur noch als DEFAULT, wenn niemand
   ein Thema gewaehlt hat.

     Vorlage, gated (:not data-theme)  ->  die Welt
     Vorlage, ungated                  ->  nur Struktur und Ableitungen per var()
     Thema nacht                       ->  dieselbe Welt
   (Ohne Klammern und ohne Selektoren geschrieben: pruef-farbstufen-482
   zaehlt die Klammern des Rohtexts, und mehr als eine Suite hat schon
   einen Selektor aus einem Kommentar fuer eine Regel gehalten.)

   :not([data-theme]) hat (0,2,1) und gewinnt, solange KEIN Thema steht —
   Wild ohne Thema sieht also aus wie immer. Steht eines, ist der Block
   aus, und das Thema faerbt. Der ungated Block darf deshalb KEINEN
   Literalwert mehr tragen: er gewinnt (0,1,1) gegen jedes Thema, also
   nur var()-Ketten, die dem Thema folgen (--card: var(--card-bg)).

   BEIDE BLOECKE — Default und Thema — sind aus demselben Quellblock
   ERZEUGT (werkzeug-Skript a750.cjs), nicht abgetippt; pruef-vorlagenfrei-764
   haelt sie gegeneinander. Wild + Nacht und Wild ohne Thema muessen dieselbe
   Farbe ergeben.

   NAMEN: Nacht (Wilds Welt — "Nacht & Rot" hiess die Kombination schon)
   und Neon (Shows Pink-Tuerkis auf Nachtviolett). Einsilbig, kein Kitsch,
   wie Granit, Moos, Sand, Tinte, Wein, Schiefer.

   BEKANNTE NAHT: Shows Kopfleiste traegt eine halbdurchsichtige
   Violett-Schicht (rgba(14,7,25,.88)). Die bleibt als Literal — mit einem
   fremden Thema sitzt eine leicht violette Leiste auf dessen Grund. Nicht
   kaputt, nur getoent. color-mix() haette es geloest, wird im Haus aber
   bewusst gemieden (siehe A-083: faellt es aus, ist die Variable ungueltig
   und die Leiste haette gar keinen Hintergrund). Ein eigenes Token fuer
   den Schleier waere der naechste Schritt, falls es stoert.
   ══════════════════════════════════════════════════════════════════════════ */
html[data-layout="wild"]:not([data-theme]) {
  color-scheme: dark;
  --cream: #0B0B0C;
  --cream-dark: #141416;
  --text: #EDE6DA;
  --text-soft: #C9C2B4;
  --text-muted: #8A8578;
  --border: #2A2A2E;
  --amber: #C1191F;
  --amber-dark: #C1191F;
  --amber-light: #EDE6DA;
  --rose-gold: #C1191F;
  --warm-white: #141416;
  --card-bg: #141416;
  --card-bg-alt: #1B1B1E;
  --card-border: #2A2A2E;
  --shadow: rgba(0,0,0,0.55);
  --shadow-deep: rgba(0,0,0,0.75);
  --hero-1: #0B0B0C; --hero-2: #141416; --hero-3: #0B0B0C;
  --hero-verlauf: linear-gradient(160deg, #141416, #0B0B0C 60%);
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}
/* Struktur und Ableitungen — gewinnt gegen jedes Thema, traegt deshalb
   keinen einzigen Literalwert. */
html[data-layout="wild"] {
  --w-nav: 272px;
  --card: var(--card-bg);
  --red: var(--amber);
}
html[data-layout="wild"] body { background: var(--cream); color: var(--text); }

/* ── Laufschrift ────────────────────────────────────────────────────────
   Gleicher Ton wie Spalte und Karten, abgegrenzt durch den roten Rand.
   Die Innenfarben der Grundfassung sind fest auf Weiss gesetzt (rgba-Werte
   ab Zeile 757) und muessen deshalb einzeln zurueckgeholt werden — eine
   Farbe am Elternelement erbt dorthin nicht. */
html[data-layout="wild"] .kitten-ticker {
  background: var(--card); color: var(--text);
  /* Kein Rand nach oben: Die Laufschrift sitzt auf Pixel eins, ein Strich
     darueber grenzt gegen nichts ab und wirkt wie ein Fehler. Unten trennt
     er die Laufschrift vom Inhalt — dort hat er eine Aufgabe. */
  border-bottom: 2px solid var(--amber);
}
html[data-layout="wild"] .ticker-item { color: var(--text-soft); }
html[data-layout="wild"] .ticker-item:hover,
html[data-layout="wild"] a.ticker-item:hover { color: var(--amber); }
html[data-layout="wild"] .ticker-sep { color: var(--border); }

/* Überschriften: dieselbe Schrift, andere Haltung — Versalien, eng gesperrt,
   schwer. Das trägt die Richtung auch ohne zweite Schriftfamilie. */
html[data-layout="wild"] .section-title,
html[data-layout="wild"] .hero-title,
html[data-layout="wild"] .cat-name {
  font-family: 'Source Sans 3', system-ui, sans-serif;
  text-transform: uppercase;
  font-weight: 700;
  letter-spacing: 0.01em;
  font-style: normal;
}
html[data-layout="wild"] .section-title em,
html[data-layout="wild"] .hero-title em { color: var(--amber); font-style: normal; }
html[data-layout="wild"] .section-label,
html[data-layout="wild"] .fact-label,
html[data-layout="wild"] .cat-ems,
html[data-layout="wild"] .cat-color {
  letter-spacing: 0.18em; text-transform: uppercase;
}
html[data-layout="wild"] .section-label { color: var(--amber); }

/* ── Menü als linke Spalte ──────────────────────────────────────────────
   Das <nav> kommt unverändert aus dem Worker. Aus der Kopfleiste wird per
   CSS eine feste Spalte — kein Markup angefasst, keine Marke verschoben. */
@media (min-width: 1000px) {
  /* Der Selektor lautete bis 320 `nav` ohne Einschraenkung — und traf damit
     auch das <nav class="footer-links"> in der Fusszeile. Beide wurden zur
     festen linken Spalte, lagen uebereinander, und die Fusszeilenfassung
     gewann. Sichtbar als: Fusszeilenmenue links, Hauptmenue verschwunden,
     Luecke zwischen Ticker und Seitenanfang.
     Der Fehler steckte seit 302 im Layout, war aber auf die Startseite
     begrenzt; der Umzug nach style.css in 320 hat ihn auf alle Seiten
     gebracht. */
  html[data-layout="wild"] nav:not(.footer-links) {
    position: fixed; top: 0; left: 0; bottom: 0; width: var(--w-nav);
    /* Die Grundregel (Zeile 158) setzt `height: 68px` und
       `justify-content: space-between` fuer die waagerechte Kopfleiste. Beides
       muss hier ausdruecklich zurueck: Sind bei einem festpositionierten
       Element top, bottom UND height gesetzt, gewinnt die Hoehe und `bottom`
       wird ignoriert. Die Spalte war deshalb 68 Pixel hoch — sichtbar als
       Menuekasten oben links, in dem wegen `overflow-y: auto` nur die ersten
       zwei Eintraege standen. Der rote Rand rechts war entsprechend kurz. */
    height: auto; justify-content: flex-start;
    display: flex; flex-direction: column; align-items: flex-start;
    padding: 34px 22px 22px; gap: 0;
    background: var(--card); border-right: 2px solid var(--amber);
    border-bottom: none; overflow-y: auto; z-index: 90;
  }
  /* In der waagerechten Kopfleiste steht das Medaillon neben dem Schriftzug
     (Zeile 180, `display: flex`). In der Spalte ist daneben kein Platz — der
     Name musste umbrechen. Uebereinander gestellt bekommt beides seine Breite. */
  html[data-layout="wild"] nav:not(.footer-links) .nav-brand {
    margin-bottom: 26px; flex-direction: column; align-items: flex-start;
    gap: 0.7rem; width: 100%;
  }
  html[data-layout="wild"] nav:not(.footer-links) .nav-med { height: 62px; }
  html[data-layout="wild"] nav:not(.footer-links) .nav-logo { line-height: 1.15; }
  html[data-layout="wild"] nav:not(.footer-links) .nav-links {
    flex-direction: column; align-items: stretch; gap: 0; width: 100%;
  }
  /* `.nav-links > li` ist ab 1000px `display: flex` (Zeile 285), damit
     Beschriftung und Aufklappzeichen in der waagerechten Kopfleiste auf einer
     Grundlinie sitzen. In der Spalte reiht dieselbe Regel das Untermenue
     NEBEN den Menuepunkt statt darunter. `flex-wrap` laesst Beschriftung und
     Zeichen beieinander und schiebt nur das Untermenue in die naechste Zeile. */
  html[data-layout="wild"] nav:not(.footer-links) .nav-links > li {
    width: 100% !important; flex-wrap: wrap;
  }
  html[data-layout="wild"] nav:not(.footer-links) .nav-links > li > a {
    display: block; padding: 10px 13px; border-left: 2px solid transparent;
    text-transform: uppercase; letter-spacing: 0.13em; font-size: 0.82rem; font-weight: 600;
  }
  html[data-layout="wild"] nav:not(.footer-links) .nav-links > li > a:hover {
    background: var(--amber); color: #fff; border-left-color: var(--amber-light);
  }
  html[data-layout="wild"] .nav-submenu {
    position: static; box-shadow: none; background: transparent; border: none;
    /* A-219: Nicht die (schmale) Breite des Menuepunkts erben — das
       Untermenue nimmt sich die Breite seiner Woerter und darf bis an
       den Spaltenrand. So bricht "Regenbogenbruecke" nie mitten im Wort. */
    width: max-content; min-width: 100%;
    max-width: calc(var(--w-nav) - 58px);
    padding: 0 0 0.3rem;
  }
  /* Eingerueckt, damit die Zugehoerigkeit ohne Rahmen erkennbar bleibt.
     A-219 (Torstens Hinweis): Versalien mit Sperrung passten nicht in die
     Spalte — "Regenbogenbruecke" brach mitten im Wort. Untermenuepunkte
     sind jetzt getippte Kleinzeilen (Special Elite, keine Versalien) —
     schmal genug fuer jedes Wort, und stilistisch die Randnotiz zum
     Oswald-Hauptpunkt. */
  html[data-layout="wild"] .nav-submenu li a {
    padding: 0.4rem 13px 0.4rem 22px; white-space: nowrap;
    font-family: 'Special Elite', 'Courier New', monospace;
    text-transform: none; letter-spacing: 0.03em; font-size: 0.78rem;
    font-weight: 400; color: var(--text-muted);
  }
  html[data-layout="wild"] .nav-submenu li a:hover {
    background: transparent; color: var(--amber);
  }
  /* A-435 (Torstens Befund C3, gemessen bei 1600px): Hier stand
     "body > *:not(nav) { margin-left: var(--w-nav) }". Das schob jede Seite an
     die Menuespalte — und ueberschrieb dabei das "margin: 0 auto" der
     Inhaltsspalte (.page, max-width 780px). Folge: der Text klebte links an
     der Spalte statt in der Restbreite zu stehen; gemessen 274 bis 285 px
     daneben, bei allen drei Spalten-Vorlagen. Torstens Wort: "Bei FAQs ist
     das irgendwie nicht mittig ausgerichtet. Das ist ganz nach links.
     Ratgeber auch."
     Als Innenabstand am body wirkt derselbe Versatz — nur bleibt die
     Zentrierung der Kinder erhalten, weil ihr Platz schmaler wird statt
     verschoben. Nebenbei laufen "width: 100%"-Kinder nicht mehr ueber. */
  html[data-layout="wild"] body { padding-left: var(--w-nav); }

  /* Die Laufschrift klebt mit `top: 68px` unter der waagerechten Kopfleiste
     (Zeile 737). In der Spaltenfassung gibt es diese Leiste nicht — die 68
     Pixel wurden zur Luecke, und die Laufschrift stand mitten im Bild.
     Dazu die Farbe: `--hero-2` ist der Farbverlaufston der Standardvorlage
     und passte hier zu nichts. Wild nimmt denselben Kartenton wie die Spalte,
     abgesetzt durch den roten Rand statt durch eine eigene Farbe. */
  html[data-layout="wild"] .kitten-ticker { top: var(--sprachband-hoehe, 0px); }
}

/* ── Der rote Schrägbalken: das Erkennungszeichen ───────────────────────
   Nur an Abschnittsüberschriften. An drei Stellen wäre er Tapete, an einer
   ist er eine Aussage. */
html[data-layout="wild"] .section-title { position: relative; padding-left: 26px; }
html[data-layout="wild"] .section-title::before {
  content: ""; position: absolute; left: 0; top: 0.15em; bottom: 0.15em; width: 12px;
  background: var(--amber);
  clip-path: polygon(100% 0, 64% 0, 0 100%, 36% 100%);
}
html[data-layout="wild"] .divider { background: var(--amber); height: 2px; width: 74px; }

/* ── Tierkachel: harter Schatten statt weicher ──────────────────────────── */
html[data-layout="wild"] .cat-card {
  background: var(--card); border: 1px solid var(--border); border-radius: 0;
  box-shadow: none; transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;
}
html[data-layout="wild"] .cat-card:hover {
  transform: translateY(-4px); box-shadow: -6px 6px 0 var(--amber); border-color: var(--amber);
}
html[data-layout="wild"] .cat-photo { border-bottom: 2px solid var(--amber); border-radius: 0; }

/* ── Knöpfe: kantig, mit Versatz beim Überfahren ────────────────────────── */
html[data-layout="wild"] .btn,
html[data-layout="wild"] .btn-warm,
html[data-layout="wild"] .btn-waitlist,
html[data-layout="wild"] .btn-waitlist-open {
  border-radius: 0; letter-spacing: 0.16em; text-transform: uppercase; font-weight: 700;
  transition: transform .18s ease, box-shadow .18s ease;
}
html[data-layout="wild"] .btn-warm:hover,
html[data-layout="wild"] .btn-waitlist:hover,
html[data-layout="wild"] .btn-waitlist-open:hover {
  transform: translate(-2px, -2px); box-shadow: 4px 4px 0 var(--amber-light);
}

/* Keine weichen Ecken — die Richtung kennt keine. */
html[data-layout="wild"] .card,
html[data-layout="wild"] .gallery-item,
html[data-layout="wild"] .litter-card,
html[data-layout="wild"] .cert-item-img,
html[data-layout="wild"] input,
html[data-layout="wild"] textarea,
html[data-layout="wild"] select { border-radius: 0; }

/* Auf dem Handy bleibt die Kopfleiste, wo sie ist — eine feste Spalte hätte
   dort keinen Platz. Farben, Versalien und der Schrägbalken gelten trotzdem. */
@media (max-width: 999px) {
  html[data-layout="wild"] nav:not(.footer-links) { border-bottom: 2px solid var(--amber); }
}

/* ── A-216: DIE VORLAGEN-TYPOGRAFIE (Torstens Black-Skulls-Entwurf) ─────────
   Bis 360 holte Wild seinen Charakter aus Versalien der vorhandenen
   Schriften. Jetzt liegen Oswald (Titel), Archivo (Text) und Special Elite
   (Schreibmaschine fuer Etiketten, Daten, Meta) als woff2 unter /fonts/ —
   die Schicht hier zieht die Seite auf den Entwurf. Reihenfolge im Block:
   Schrift, Held, Abschnittskoepfe, Karten, Kleinkram. */
html[data-layout="wild"] body,
html[data-layout="wild"] input,
html[data-layout="wild"] textarea,
html[data-layout="wild"] select,
html[data-layout="wild"] button {
  font-family: 'Archivo', system-ui, sans-serif;
}
html[data-layout="wild"] p { line-height: 1.8; }

html[data-layout="wild"] .section-title,
html[data-layout="wild"] .hero-title,
html[data-layout="wild"] .cat-name,
html[data-layout="wild"] .kitten-name,
html[data-layout="wild"] .litter-name,
html[data-layout="wild"] .nav-logo,
html[data-layout="wild"] h1, html[data-layout="wild"] h2, html[data-layout="wild"] h3 {
  font-family: 'Oswald', Impact, sans-serif;
  text-transform: uppercase;
  font-style: normal;
}

/* Die Schreibmaschine: alles, was Etikett, Datum oder Randnotiz ist. */
html[data-layout="wild"] .section-label,
html[data-layout="wild"] .hero-eyebrow,
html[data-layout="wild"] .cat-ems,
html[data-layout="wild"] .cat-color,
html[data-layout="wild"] .cat-desc,
html[data-layout="wild"] .kitten-ems,
html[data-layout="wild"] .kitten-detail,
html[data-layout="wild"] .fact-label,
html[data-layout="wild"] .ticker-item,
html[data-layout="wild"] .footer-legal,
html[data-layout="wild"] .footer-copy,
html[data-layout="wild"] .kontakt-label {
  font-family: 'Special Elite', 'Courier New', monospace;
}

/* ── Der Held: Balken links, Zeile daruber in Rot, Riesentitel ───────────
   Die Grundvorlage zentriert den Helden in einer schmalen Mitte; der
   Entwurf setzt ihn linksbuendig mit dem roten Schraegbalken davor. */
/* Der Grund direkt, nicht ueber die Verlaufs-Variablen: Helligkeitsstufe
   (A-098) und Farbthema kombinieren sich zu Selektoren mit hoeherer
   Spezifitaet und wuerden jede Variablen-Ueberschreibung ausstechen. Wild
   IST die Flaeche — ohne Hero-Bild schlicht schwarz (Torstens Ansage:
   oben schwarz, kein hellerer Verlauf). */
/* !important, weil die Dunkel-Theme-Regel (Zeile ~946) ihrerseits mit
   !important auf Warmgrau zwingt — Wild + Theme dark ist Annettes echte
   Kombination, und Wild gewinnt. */
html[data-layout="wild"] .hero,
html[data-layout="wild"] .page-hero {
  background: var(--cream) !important;
  border-bottom: none !important;
}
html[data-layout="wild"] .hero { justify-content: flex-start; min-height: 72vh; }
/* Das Logo der Zucht als Wasserzeichen rechts im Helden — wie im Entwurf.
   Die Adresse kommt clientseitig als --wz-logo (startseite.js, aus
   settings.logoImage); ohne Logo bleibt das Element leer und unsichtbar. */
html[data-layout="wild"].hat-zuchtlogo .hero::after {
  content: ""; position: absolute; right: 2vw; top: 14vh;
  width: min(24vw, 300px); height: min(28vw, 340px);
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background-color: var(--amber);
  opacity: 0.12; pointer-events: none; z-index: 1;
}

/* ── A-218: Das Logo in der Spalte als ROTE MASKE (Torstens Zuruf) ────────
   Wie im Entwurf: die Form des Zucht-Logos, eingefaerbt in Akzentrot —
   egal welche Farben das Original hat. Die <img>-Fassungen bleiben als
   Klickflaeche, werden aber unsichtbar; die Maske malt darueber. Ohne
   Logo (kein .hat-zuchtlogo) bleibt alles beim Alten. */
html[data-layout="wild"].hat-zuchtlogo .nav-med-link {
  position: relative; display: block; width: 64px; height: 72px;
}
html[data-layout="wild"].hat-zuchtlogo .nav-med-link .nav-med {
  opacity: 0; width: 64px; height: 72px; object-fit: contain;
}
html[data-layout="wild"].hat-zuchtlogo .nav-med-link::before {
  content: ""; position: absolute; inset: 0;
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background-color: var(--amber);
}
html[data-layout="wild"] .hero-content {
  position: relative; padding-left: 34px; text-align: left;
  max-width: 900px; margin-left: clamp(1rem, 5vw, 4rem);
}
html[data-layout="wild"] .hero-eyebrow { justify-content: flex-start; }
html[data-layout="wild"] .hero-eyebrow::before,
html[data-layout="wild"] .hero-eyebrow::after { display: none; }
html[data-layout="wild"] .hero-cta { justify-content: flex-start; display: flex; gap: 0.8rem; }
html[data-layout="wild"] .hero-content::before {
  content: ""; position: absolute; left: 0; top: 6px; bottom: 34px; width: 14px;
  background: var(--amber);
  clip-path: polygon(100% 0, 64% 0, 0 100%, 36% 100%);
}
html[data-layout="wild"] .hero-eyebrow {
  font-size: 12px; letter-spacing: 0.24em; text-transform: uppercase;
  color: var(--amber); font-weight: 400;
}
html[data-layout="wild"] .hero-title {
  font-weight: 700; letter-spacing: -0.01em; line-height: 0.98;
  font-size: clamp(36px, 5.4vw, 62px);
}
html[data-layout="wild"] .hero-title em { color: var(--amber); }
html[data-layout="wild"] .hero-tagline,
html[data-layout="wild"] .hero-quote {
  color: var(--text-soft); font-size: 15px; line-height: 1.85; letter-spacing: 0.01em;
  font-family: 'Archivo', system-ui, sans-serif; font-style: normal;
}
/* Der Entwurf ist FLACH — die schweren Schatten und die Kontur der
   Grundvorlage (fuer Fotohintergruende gedacht) machen aus Oswald einen
   3D-Stempel. Alles aus. */
html[data-layout="wild"] .hero-eyebrow,
html[data-layout="wild"] .hero-title,
html[data-layout="wild"] .hero-tagline,
html[data-layout="wild"] .hero-quote {
  text-shadow: none; -webkit-text-stroke: 0;
}
/* Ortszeile auf dem Startfoto: Wild legt keinen Kasten hinter den Text (wie
   Edel, Minimal, Buehne), die Zeile steht direkt auf dem abgedunkelten
   Foto. --text-soft ist in hellen Themen dunkel (sand rgb 97,90,80, gold
   91,88,72, slate 68,91,100) und war dort kaum zu lesen. Mit sichtbarem
   Schleier ist der Grund immer dunkel, also eine feste helle Farbe. Ohne
   Foto und beim Startbild mit Namen (Schleier aus) bleibt --text-soft. */
html[data-layout="wild"] .hero:has(.hero-overlay:not([hidden])) .hero-tagline,
html[data-layout="wild"] .hero:has(.hero-overlay:not([hidden])) .hero-quote {
  color: rgba(245, 240, 232, 0.86);
}

/* ── Abschnittskoepfe: rote Linie statt Schraegbalken ───────────────────
   Der Balken gehoert im Entwurf allein dem Helden; die Abschnitte tragen
   eine 2px-Linie unter der ganzen Kopfzeile. Das Etikett steht klein und
   getippt darueber. */
html[data-layout="wild"] .section-title { padding-left: 0; }
html[data-layout="wild"] .section-title::before { display: none; }
html[data-layout="wild"] .section-title {
  font-weight: 500; letter-spacing: 0.1em; font-size: clamp(22px, 2.4vw, 27px);
  border-bottom: 2px solid var(--amber); padding-bottom: 12px;
}
html[data-layout="wild"] .section-label {
  color: var(--amber); font-size: 12px; letter-spacing: 0.2em; font-weight: 400;
}
html[data-layout="wild"] .divider { display: none; }
html[data-layout="wild"] .section-lead { color: var(--text-muted); }

/* ── Karten: quadratisches Foto, getippte Meta, Versal-Namen ───────────── */
html[data-layout="wild"] .cat-photo,
html[data-layout="wild"] .kitten-photo { aspect-ratio: 1 / 1; height: auto; }
html[data-layout="wild"] .cat-name,
html[data-layout="wild"] .kitten-name { font-weight: 500; letter-spacing: 0.03em; }
html[data-layout="wild"] .cat-ems,
html[data-layout="wild"] .cat-color,
html[data-layout="wild"] .kitten-ems { font-size: 12px; color: var(--text-muted); letter-spacing: 0.04em; }
html[data-layout="wild"] .cat-home-badge,
html[data-layout="wild"] .cat-young-badge,
html[data-layout="wild"] .cat-guest-badge,
html[data-layout="wild"] .cat-neutral-badge,
html[data-layout="wild"] .kitten-status {
  background: var(--amber); color: #fff; border-radius: 0; font-weight: 700;
  letter-spacing: 0.18em; text-transform: uppercase;
  font-family: 'Special Elite', 'Courier New', monospace;
}
html[data-layout="wild"] .kitten-card {
  background: var(--card); border: 1px solid var(--border); border-radius: 0;
}
html[data-layout="wild"] .kitten-card:hover { box-shadow: -6px 6px 0 var(--amber); border-color: var(--amber); }

/* ── Menue und Marke in der Spalte ──────────────────────────────────────── */
html[data-layout="wild"] .nav-logo { font-weight: 700; letter-spacing: 0.02em; font-size: 1.5rem; line-height: 1.1; }
html[data-layout="wild"] .nav-logo-sub {
  font-family: 'Special Elite', 'Courier New', monospace;
  text-transform: none; letter-spacing: 0.06em; font-size: 12px; color: var(--text-muted);
  font-weight: 400; font-style: normal;
}
@media (min-width: 1000px) {
  html[data-layout="wild"] nav:not(.footer-links) .nav-links > li > a {
    font-family: 'Oswald', Impact, sans-serif;
    font-weight: 500; font-size: 14px; letter-spacing: 0.14em; padding: 11px 16px;
  }
}

/* ── Farb-Nachzuegler: Namen und Marke sind KNOCHEN, nicht rot ───────────
   Die Grundvorlage faerbt Tiernamen und den Schriftzug in Akzentfarbe —
   im Entwurf ist Rot fuer Flaechen und Linien reserviert, die Worte sind
   hell. Rahmen sind neutral und roeten sich erst beim Ueberfahren. */
html[data-layout="wild"] .cat-name,
html[data-layout="wild"] .kitten-name,
html[data-layout="wild"] .litter-name { color: var(--text); }
html[data-layout="wild"] .nav-logo { color: var(--text); }
html[data-layout="wild"] .gallery-item,
html[data-layout="wild"] .litter-card { border: 1px solid var(--border); }
html[data-layout="wild"] .gallery-item:hover { border-color: var(--amber); }
/* Geschlechts-Etikett auf dem Foto und die Fusszeilen-Marke: der Entwurf
   kennt nur Rot und Knochen — kein Gold, keine Kursive. */
html[data-layout="wild"] .cat-gender {
  background: var(--amber); color: #fff; border-radius: 0;
  font-family: 'Special Elite', 'Courier New', monospace; letter-spacing: 0.14em;
}
html[data-layout="wild"] .footer-logo {
  font-family: 'Oswald', Impact, sans-serif; text-transform: uppercase;
  font-weight: 500; letter-spacing: 0.03em; color: var(--text);
}
html[data-layout="wild"] .footer-logo em { font-style: normal; color: var(--amber); }

/* ── A-217: Champion-Titel als Marke ueber dem Namen ───────────────────────
   Grundfassung dezent (Goldlinie), damit die Standard-Vorlage nicht rot
   schreit — die Wild-Fassung weiter unten fuellt sie. */
.cat-title-badge {
  display: inline-block; font-size: 0.62rem; font-weight: 700;
  letter-spacing: 0.16em; text-transform: uppercase; color: var(--amber-dark);
  border: 1px solid var(--amber-dark); padding: 3px 8px; border-radius: 2px;
  margin-bottom: 0.45rem;
}
/* A-1381: das Abzeichen „Showkatze" auf der Tierseite (die Karten der
   Startseite holen sich dieselbe Klasse aus tierkarte.css). Es haengt am
   Haken, nicht am Stand, und steht deshalb neben jedem anderen Abzeichen. */
.cat-show-badge {
  display: inline-block; background: var(--badge-show, #A8893A); color: #fff;
  font-size: 0.65rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  padding: 0.3rem 0.7rem; border-radius: 20px; margin: 0 0.3rem 0.45rem 0;
}
html[data-layout="wild"] .cat-title-badge {
  background: var(--amber); color: #fff; border: none; border-radius: 0;
  font-family: 'Special Elite', 'Courier New', monospace; font-weight: 400;
  letter-spacing: 0.18em; padding: 4px 9px;
}

/* ── Die Marke in der Spalte: weiss, mehrzeilig, ohne Rot ────────────────
   !important, weil die Dunkel-Theme-Regel (~Zeile 929) den Schriftzug
   ihrerseits mit !important auf Rotgold zwingt — Annettes Kombination ist
   Wild + dark, und Wild gewinnt. */
@media (min-width: 1000px) {
  html[data-layout="wild"] nav:not(.footer-links) .nav-logo {
    white-space: normal; color: var(--text) !important;
    font-size: 1.6rem; line-height: 1.15;
  }
  html[data-layout="wild"] nav:not(.footer-links) .nav-logo em,
  html[data-layout="wild"] nav:not(.footer-links) .nav-logo .nav-logo-sub {
    display: inline; font-family: 'Oswald', Impact, sans-serif;
    font-size: 1em; color: var(--text); letter-spacing: 0.02em;
    text-transform: uppercase; font-style: normal;
  }
}

/* ── Ausstellungen (Termine-Seite): Zeilenliste mit getipptem Rot-Datum ── */
html[data-layout="wild"] .termin-card {
  background: transparent; border: none; border-bottom: 1px solid var(--border);
  border-radius: 0; box-shadow: none;
}
html[data-layout="wild"] .termin-date-box {
  background: transparent; border: none; color: var(--amber);
}
html[data-layout="wild"] .termin-date-day,
html[data-layout="wild"] .termin-date-mon,
html[data-layout="wild"] .termin-date-year,
html[data-layout="wild"] .termin-date-bis {
  font-family: 'Special Elite', 'Courier New', monospace; color: var(--amber);
}
/* A-1052: Hier stand `html[data-layout="wild"] .termin-dabei { color:
   var(--text-muted); }` — eine nackte Farbkorrektur ohne Design-Absicht. Sie
   war der Grund, warum ausgerechnet wild funktionierte, waehrend der Chip in
   sieben anderen Vorlagen weiss auf weiss stand: der Fehler war hier schon
   einmal aufgefallen und an genau EINER Stelle geflickt worden, statt die
   Grundregel in termine.html zu reparieren. Kevins Beobachtung „nur bei wild
   und show sind die Termine lesbar" ist der Fingerabdruck davon.

   Seit Build 993 stimmt die Grundregel (Kontur statt Fuellung, Schrift in
   --text), also braucht wild keine Ausnahme mehr. Die Regel darueber bleibt:
   sie setzt die Schreibmaschinenschrift und ist Design, kein Notbehelf. */

/* ── Im Ruhestand: Namens-Chips statt grosser Karten (der Entwurf) ─────── */
html[data-layout="wild"] #ruhestand .cats-grid {
  display: flex; flex-wrap: wrap; gap: 12px;
}
html[data-layout="wild"] #ruhestand .cat-card {
  display: flex; align-items: baseline; gap: 0.5rem;
  border: 1px solid var(--border); background: var(--card);
  padding: 9px 15px; width: auto;
}
html[data-layout="wild"] #ruhestand .cat-card:hover { transform: none; box-shadow: none; border-color: var(--amber); }
html[data-layout="wild"] #ruhestand .cat-photo,
html[data-layout="wild"] #ruhestand .cat-desc,
html[data-layout="wild"] #ruhestand .cat-gender,
html[data-layout="wild"] #ruhestand .kitten-dots { display: none; }
html[data-layout="wild"] #ruhestand .cat-info { padding: 0; display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; }
html[data-layout="wild"] #ruhestand .cat-name { font-size: 0.95rem; }
html[data-layout="wild"] #ruhestand .cat-title-badge { background: transparent; color: var(--text-muted); padding: 0; margin: 0; }
html[data-layout="wild"] #ruhestand .cat-color,
html[data-layout="wild"] #ruhestand .cat-ems { margin: 0; }

/* ── Termine und Fusszeile: getippte Daten, rote Akzente ────────────────── */
html[data-layout="wild"] .termin-datum,
html[data-layout="wild"] .termin-date {
  font-family: 'Special Elite', 'Courier New', monospace;
  color: var(--amber); font-weight: 700; letter-spacing: 0.1em;
}
html[data-layout="wild"] .footer-col-title { color: var(--amber); opacity: 1; }
html[data-layout="wild"] .footer-legal,
html[data-layout="wild"] .footer-copy { font-size: 12px; letter-spacing: 0.04em; }


/* ── A-224: WILD AUF DEN UNTERSEITEN ─────────────────────────────────────
   A-216 hat die Startseite auf den Black-Skulls-Entwurf gezogen; die
   Unterseiten liefen noch mit der Grundvorlage (Torstens Fund am Handy):
   warmgraue Koepfe (.katze-detail-hero/.kt-hero fehlten in der
   Schwarz-Regel), Serifenschrift und 3D-Schatten auf den Ueberschriften.
   Die Seiten bringen ihre Kopf-Styles im eigenen <style> mit — die
   Selektoren hier sind durch das html[data-layout]-Praefix spezifischer
   und gewinnen ohne !important; nur der Hintergrund braucht es wegen der
   Dunkel-Theme-Regel (~Zeile 946), wie bei A-216 begruendet. */
html[data-layout="wild"] .katze-detail-hero,
html[data-layout="wild"] .kt-hero {
  background: var(--cream) !important;
  border-bottom: 2px solid var(--amber) !important;
}
html[data-layout="wild"] .page-hero h1,
html[data-layout="wild"] .katze-detail-hero h1,
html[data-layout="wild"] .kt-hero h1 {
  font-family: 'Oswald', Impact, sans-serif;
  font-weight: 700; letter-spacing: 0.01em; line-height: 1.08;
  color: var(--text); text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="wild"] .page-hero h1 em { color: var(--amber); font-style: normal; }
html[data-layout="wild"] .page-hero .section-eyebrow,
html[data-layout="wild"] .katze-detail-hero .section-eyebrow,
html[data-layout="wild"] .kt-hero .section-eyebrow {
  font-family: 'Special Elite', 'Courier New', monospace;
  color: var(--amber); font-weight: 400; letter-spacing: 0.24em;
  text-shadow: none; -webkit-text-stroke: 0;
}

/* ── A-229: Unterseiten-Koepfe wie der Held der Startseite ──────────────
   Torstens Ansage: "bei vermittelt und den ganzen anderen Headern zieh
   auch den schraegen Strich". Also dieselbe Sprache wie .hero-content —
   linksbuendig, roter Schraegbalken (gleiches clip-path-Polygon) links
   neben Etikett und Titel. Die Seiten zentrieren ihre Koepfe im eigenen
   <style>; die praefixierten Selektoren hier sind spezifischer. */
html[data-layout="wild"] .page-hero,
html[data-layout="wild"] .katze-detail-hero,
html[data-layout="wild"] .kt-hero {
  text-align: left;
  position: relative;
  padding-left: clamp(3.2rem, 10vw, 7rem);
  padding-right: clamp(1.2rem, 4vw, 3rem);
  /* Manche Koepfe sind Flex-Spalten mit zentrierten Kindern (gemessen:
     das Etikett sass als schmales Flex-Kind in der Mitte, obwohl
     text-align laengst links stand) — deshalb auch die Flex-Achse links. */
  align-items: flex-start;
  justify-content: center;
}
/* Die 760px-Zentrierung der Tierseiten-Koepfe aufheben — sonst bleibt der
   Text trotz text-align:left in der Mitte stehen. */
html[data-layout="wild"] .katze-detail-hero > *,
html[data-layout="wild"] .kt-hero > *,
html[data-layout="wild"] .page-hero > * {
  margin-left: 0; margin-right: 0; max-width: 900px;
}
html[data-layout="wild"] .page-hero::before,
html[data-layout="wild"] .katze-detail-hero::before,
html[data-layout="wild"] .kt-hero::before {
  content: ""; position: absolute;
  left: clamp(1.4rem, 5vw, 3.6rem);
  top: 50%; height: min(62%, 150px); transform: translateY(-50%);
  width: 14px; background: var(--amber);
  clip-path: polygon(100% 0, 64% 0, 0 100%, 36% 100%);
}
/* Der Trenner der Grundvorlage (mittige Goldlinie) passt nicht zum
   linksbuendigen Kopf — im Wild-Layout ist er ohnehin abgeschaltet
   (.divider display:none), hier nur die Zentrierungs-Reste. */
html[data-layout="wild"] .page-hero .divider,
html[data-layout="wild"] .katze-detail-hero .divider,
html[data-layout="wild"] .kt-hero .divider { display: none; }
/* Auch Etikett und Titel selbst linksbuendig — manche Seiten zentrieren
   sie mit eigener Regel direkt am Element, nicht nur am Container. */
html[data-layout="wild"] .page-hero .section-eyebrow,
html[data-layout="wild"] .page-hero h1,
html[data-layout="wild"] .katze-detail-hero .section-eyebrow,
html[data-layout="wild"] .katze-detail-hero h1,
html[data-layout="wild"] .kt-hero .section-eyebrow,
html[data-layout="wild"] .kt-hero h1 {
  text-align: left; justify-content: flex-start;
}
html[data-layout="wild"] .page-hero .section-eyebrow::before,
html[data-layout="wild"] .page-hero .section-eyebrow::after,
html[data-layout="wild"] .katze-detail-hero .section-eyebrow::before,
html[data-layout="wild"] .katze-detail-hero .section-eyebrow::after,
html[data-layout="wild"] .kt-hero .section-eyebrow::before,
html[data-layout="wild"] .kt-hero .section-eyebrow::after { display: none; }

/* ── A-225: WILD-KOPFLEISTE AM HANDY ─────────────────────────────────────
   Unter 1000px gibt es keine Menuespalte — es gilt die waagerechte
   Kopfleiste der Grundvorlage mit fester Hoehe 68px. Der lange Zuchtname
   lief in Oswald 1.5rem ueber vier Zeilen und ragte oben und unten aus
   der Leiste (Torstens Screenshot). Die Leiste waechst jetzt mit, der
   Schriftzug wird kleiner und einheitlich cremeweiss — dieselbe Marke wie
   in der Spalte, nur kompakt. Das rote Masken-Logo schrumpft mit. */
@media (max-width: 999px) {
  html[data-layout="wild"] nav:not(.footer-links) {
    height: auto; min-height: 60px; padding: 10px 1rem;
    /* A-261: Ohne diese Zeile stellte ein HELLES Farbthema die Kopfleiste
       weiss auf die schwarze Wild-Seite — die Vorlage IST die Flaeche. */
    background: var(--card) !important; border-bottom-color: var(--amber) !important;
  }
  html[data-layout="wild"] nav:not(.footer-links) .nav-logo {
    white-space: normal; color: var(--text) !important;
    font-size: 1.02rem; line-height: 1.25; letter-spacing: 0.02em;
  }
  html[data-layout="wild"] nav:not(.footer-links) .nav-logo em,
  html[data-layout="wild"] nav:not(.footer-links) .nav-logo .nav-logo-sub {
    display: inline; font-family: 'Oswald', Impact, sans-serif;
    font-size: 1em; color: var(--text); letter-spacing: 0.02em;
    text-transform: uppercase; font-style: normal;
  }
  html[data-layout="wild"].hat-zuchtlogo .nav-med-link,
  html[data-layout="wild"].hat-zuchtlogo .nav-med-link .nav-med {
    width: 44px; height: 50px;
  }
  /* Das aufgeklappte Handy-Menue lag als schmale Spalte rechts (Grundvorlage);
     im Wild-Look kommt es als volle Flaeche unter der Leiste. */
  html[data-layout="wild"] .nav-links {
    background: var(--card) !important;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „VERSPIELT" (A-231)
   --------------------------------------------------------------------------
   Dritte Richtung neben Standard und Wild, jetzt exakt nach Torstens
   Kundenentwurf (ZIP vom 15.08.2026, laeuft live als eigener
   Worker): Creme-Grund, dunkle Pflaumen-Spalte mit Bogenkante,
   Baloo-2-Rundschrift, Orange/Pink/Himmelblau/Gelb, 3D-Knoepfe, getippte
   Mono-Etiketten. Wie bei Wild wird nur ueberschrieben, was die Richtung
   ausmacht — kein eigenes Markup. Aktiv ueber data-layout="verspielt".

   Schriften: Baloo 2, Nunito Sans, JetBrains Mono — selbst gehostet
   (fonts.css, A-231), die CSP erlaubt nur font-src 'self'.

   !important nur dort, wo die Dunkel-Theme-Regeln (~Zeile 929/946) selbst
   mit !important zwingen — dieselbe Begruendung wie bei Wild (A-216). */
/* A-764: WER SEINEN GRUND FESTHAELT, MUSS AUCH SEINE SCHRIFT FESTHALTEN.
   Drei Vorlagen behalten ihren hellen Grund, egal welche Farbwelt gewaehlt
   ist (A-750: sie halten ihren Grund fest, das ist ihr Charakter). Die
   SCHRIFT folgte bis 774 trotzdem dem Thema: auf einer dunklen Welt wurde
   sie hell — helle Schrift auf hellem Grund. Gemessen ueber 19 Welten:
   Zuchtname und Abschnittsueberschrift bis herab zu 1.04. Jetzt bleibt der
   ganze Schriftsatz stehen; das Thema wirkt hier ueber den Akzent. */
html[data-layout="verspielt"] {
  color-scheme: only light;   /* A-1493: „only", sonst dunkelt Chrome/Opera (Auto Dark) die helle Vorlage nach */
  --text: #1E1E1E;
  --text-soft: #5A5755;
  --text-muted: #8A8785;
  --cream: #FFF9F0;
  --cream-dark: #FFF1DC;
  /* A-1480 (Build 1235): die zweite Abschnittsfarbe. Fehlte - in dunklen
     Welten blieb sie dunkel, und Abschnitte mit hellweissem Grund (seit
     dem Farbwechsel jeder zweite) standen dunkel unter dunkler Schrift. */
  --warm-white: #FFFFFF;
  --card: #FFFFFF;
  --rose: #FF6F9C;
  --v-himmel: #4FB6E8;
  --v-pflaume: #2E1B26;
  --v-gelb: #FFD166;
  --hero-verlauf: #FFF9F0;
  --v-nav: 260px;
  --v-rund: 28px;
  --v-rund-klein: 18px;
}
html[data-layout="verspielt"] body { background: var(--cream) !important; color: var(--text); }

/* ── Schriftfuehrung ──────────────────────────────────────────────────── */
html[data-layout="verspielt"] body,
html[data-layout="verspielt"] input,
html[data-layout="verspielt"] textarea,
html[data-layout="verspielt"] select,
html[data-layout="verspielt"] button {
  font-family: 'Nunito Sans', system-ui, sans-serif;
}
html[data-layout="verspielt"] body { font-weight: 600; }
html[data-layout="verspielt"] .section-title,
html[data-layout="verspielt"] .hero-title,
html[data-layout="verspielt"] .cat-name,
html[data-layout="verspielt"] .kitten-name,
html[data-layout="verspielt"] .litter-name,
html[data-layout="verspielt"] .nav-logo,
html[data-layout="verspielt"] .footer-logo,
html[data-layout="verspielt"] h1, html[data-layout="verspielt"] h2, html[data-layout="verspielt"] h3 {
  font-family: 'Baloo 2', 'Comic Sans MS', sans-serif;
  text-transform: none; letter-spacing: 0;
  text-shadow: none; -webkit-text-stroke: 0;
}
/* Getippte Etiketten — JetBrains Mono, orange, VERSAL */
html[data-layout="verspielt"] .section-label,
html[data-layout="verspielt"] .fact-label,
html[data-layout="verspielt"] .kontakt-label,
html[data-layout="verspielt"] .footer-col-title,
html[data-layout="verspielt"] .cat-ems,
html[data-layout="verspielt"] .kitten-ems {
  font-family: 'JetBrains Mono', 'Courier New', monospace;
  text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700;
}
html[data-layout="verspielt"] .section-label { color: var(--amber); font-size: 0.72rem; }

/* ── Menue als Pflaumen-Spalte mit Bogenkante ─────────────────────────── */
@media (min-width: 1000px) {
  html[data-layout="verspielt"] nav:not(.footer-links) {
    position: fixed; top: 0; left: 0; bottom: 0; width: var(--v-nav);
    height: auto; justify-content: flex-start;
    display: flex; flex-direction: column; align-items: flex-start;
    padding: 32px 24px 24px; gap: 0;
    background: var(--v-pflaume) !important; border-right: none !important;
    border-bottom: none; overflow-y: auto;
    /* A-437 (Torstens Befund 19.08.): "bei verspielt muss die Tickerleiste
       unter der Navi verschwinden, da das Wellenmuster von dem Ticker
       gebrochen wird." Die Bogenkante ist ein ::after der Spalte mit
       z-index 91 — der half aber nichts: die Spalte selbst stand auf 90 und
       oeffnet damit einen eigenen Stapelkontext, in dem die 91 gefangen
       bleibt. Die Laufschrift steht ebenfalls auf 90 und kommt spaeter im
       Dokument, malte also darueber und schnitt die Noppen ab. Die Spalte
       liegt jetzt hoeher als die Laufschrift; das Wellenmuster laeuft
       durch, und die Leiste verschwindet dahinter. */
    z-index: 95;
  }
  /* Die Bogenkante des Entwurfs: halbrunde Noppen, senkrecht wiederholt. */
  html[data-layout="verspielt"] nav:not(.footer-links)::after {
    content: ""; position: fixed; top: 0; bottom: 0;
    left: calc(var(--v-nav) - 9px); width: 18px; z-index: 91;
    background-image: radial-gradient(circle at 9px 9px, var(--v-pflaume) 9px, transparent 9.5px);
    background-size: 18px 18px; background-repeat: repeat-y;
    pointer-events: none;
  }
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-brand {
    margin-bottom: 30px; flex-direction: row; align-items: center;
    gap: 0.6rem; width: 100%;
  }
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-links {
    flex-direction: column; align-items: stretch; gap: 6px; width: 100%;
  }
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-links > li { width: 100%; }
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-links > li > a {
    display: flex; align-items: center; gap: 12px; width: 100%;
    font-family: 'Baloo 2', sans-serif; font-weight: 600; font-size: 1rem;
    /* A-816: hier stand var(--cream) als "helle Schrift auf der Pflaume".
       In den Dunkelfassungen ist Verspielts --cream aber selbst die
       Pflaume (#221721, Zeile ~5216) - gemessen 1,02:1, das Menue war weg.
       Die Spalte bleibt in jeder Fassung dunkel, also fester heller Wert. */
    color: #FFF9F0; padding: 7px 12px; border-radius: 999px;
    text-transform: none; letter-spacing: 0;
    transition: transform 0.15s ease, background 0.15s ease;
  }
  /* Die bunten Punkt-Abzeichen des Entwurfs — vier Farben im Wechsel. */
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-links > li > a::before {
    content: "🐾"; width: 30px; height: 30px; border-radius: 50%; flex: none;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: 13px; background: rgba(255, 255, 255, 0.08);
  }
  html[data-layout="verspielt"] .nav-links > li:nth-child(4n+1) > a::before { background: rgba(255, 138, 76, 0.22); }
  html[data-layout="verspielt"] .nav-links > li:nth-child(4n+2) > a::before { background: rgba(255, 111, 156, 0.22); }
  html[data-layout="verspielt"] .nav-links > li:nth-child(4n+3) > a::before { background: rgba(79, 182, 232, 0.22); }
  html[data-layout="verspielt"] .nav-links > li:nth-child(4n+4) > a::before { background: rgba(255, 209, 102, 0.22); }
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-links > li > a:hover {
    background: rgba(255, 255, 255, 0.06); transform: translateX(4px); color: #FFF9F0;   /* A-816 */
  }
  html[data-layout="verspielt"] .nav-links a.nav-current {
    background: var(--amber); color: var(--v-pflaume);
  }
  /* A-435 (Torstens Befund C3, gemessen bei 1600px): Hier stand
     "body > *:not(nav) { margin-left: var(--v-nav) }". Das schob jede Seite an
     die Menuespalte — und ueberschrieb dabei das "margin: 0 auto" der
     Inhaltsspalte (.page, max-width 780px). Folge: der Text klebte links an
     der Spalte statt in der Restbreite zu stehen; gemessen 274 bis 285 px
     daneben, bei allen drei Spalten-Vorlagen. Torstens Wort: "Bei FAQs ist
     das irgendwie nicht mittig ausgerichtet. Das ist ganz nach links.
     Ratgeber auch."
     Als Innenabstand am body wirkt derselbe Versatz — nur bleibt die
     Zentrierung der Kinder erhalten, weil ihr Platz schmaler wird statt
     verschoben. Nebenbei laufen "width: 100%"-Kinder nicht mehr ueber. */
  html[data-layout="verspielt"] body { padding-left: var(--v-nav); }
  html[data-layout="verspielt"] .kitten-ticker { top: var(--sprachband-hoehe, 0px); }
  html[data-layout="verspielt"] .nav-submenu {
    position: static; box-shadow: none; border: none; background: transparent;
    width: 100%; min-width: 0; padding-left: 42px;
  }
  html[data-layout="verspielt"] .nav-submenu li a {
    color: #caa8b6; font-family: 'Nunito Sans', sans-serif; font-size: 0.82rem;
    padding: 4px 10px; border-radius: 999px;
  }
  html[data-layout="verspielt"] .nav-submenu li a:hover { color: var(--cream); background: rgba(255,255,255,0.06); }
  html[data-layout="verspielt"] .nav-sub-toggle { color: #caa8b6; }
}
/* Marke in der Spalte: Gelb in Baloo, Unterzeile gedeckt */
html[data-layout="verspielt"] nav:not(.footer-links) .nav-logo {
  color: var(--v-gelb) !important; font-size: 1.3rem; font-weight: 700;
  line-height: 1.15; white-space: normal;
}
html[data-layout="verspielt"] nav:not(.footer-links) .nav-logo em,
html[data-layout="verspielt"] nav:not(.footer-links) .nav-logo .nav-logo-sub {
  display: block; font-family: 'Nunito Sans', sans-serif; font-size: 0.7rem;
  color: #caa8b6; font-style: normal; letter-spacing: 0; text-transform: none;
}
/* Zucht-Logo (Maskenmodus wie Wild, A-227): in Gelb statt Rot */
html[data-layout="verspielt"].hat-zuchtlogo .nav-med-link {
  position: relative; display: block; width: 44px; height: 48px;
}
html[data-layout="verspielt"].hat-zuchtlogo .nav-med-link .nav-med {
  opacity: 0; width: 44px; height: 48px; object-fit: contain;
}
html[data-layout="verspielt"].hat-zuchtlogo .nav-med-link::before {
  content: ""; position: absolute; inset: 0;
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background-color: var(--v-gelb);
}

/* ── Held: Creme mit weichem Farbklecks, rosa Pillen-Etikett, 3D-Knoepfe ── */
html[data-layout="verspielt"] .hero,
html[data-layout="verspielt"] .page-hero,
html[data-layout="verspielt"] .katze-detail-hero,
html[data-layout="verspielt"] .kt-hero {
  background: var(--cream) !important;
  border-bottom: none !important;
  color: var(--text);
}
html[data-layout="verspielt"] .hero { justify-content: flex-start; min-height: 68vh; overflow: hidden; position: relative; }
html[data-layout="verspielt"] .hero::after {
  content: ""; position: absolute; top: -120px; right: -160px;
  width: 560px; height: 560px; z-index: 0; opacity: 0.5;
  background: radial-gradient(circle at 30% 30%, var(--v-gelb), var(--amber) 70%);
  border-radius: 42% 58% 65% 35% / 45% 40% 60% 55%;
  animation: v-klecks 14s ease-in-out infinite;
}
@keyframes v-klecks {
  0%, 100% { border-radius: 42% 58% 65% 35% / 45% 40% 60% 55%; }
  50% { border-radius: 60% 40% 35% 65% / 55% 60% 40% 45%; }
}
@media (prefers-reduced-motion: reduce) {
  html[data-layout="verspielt"] .hero::after { animation: none !important; }
}
html[data-layout="verspielt"] .hero-content {
  position: relative; z-index: 1; text-align: left;
  max-width: 900px; margin-left: clamp(1rem, 5vw, 4rem); padding-left: 0;
}
html[data-layout="verspielt"] .hero-content::before { display: none; }
html[data-layout="verspielt"] .hero-eyebrow {
  display: inline-flex; align-items: center; justify-content: flex-start;
  background: var(--rose); color: #fff; padding: 6px 14px; border-radius: 999px;
  font-family: 'JetBrains Mono', monospace; font-size: 0.72rem;
  letter-spacing: 0.08em; text-transform: uppercase; font-weight: 700;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="verspielt"] .hero-eyebrow::before,
html[data-layout="verspielt"] .hero-eyebrow::after { display: none; }
html[data-layout="verspielt"] .hero-title {
  color: var(--text); font-weight: 800; line-height: 1.05;
  font-size: clamp(2.6rem, 5vw, 4.2rem);
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="verspielt"] .hero-title em,
html[data-layout="verspielt"] .section-title em { color: var(--amber); font-style: normal; }
html[data-layout="verspielt"] .hero-tagline,
html[data-layout="verspielt"] .hero-quote {
  color: var(--text-soft); font-size: 1.05rem; line-height: 1.7;
  font-family: 'Nunito Sans', sans-serif; font-style: normal;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="verspielt"] .hero-cta { justify-content: flex-start; display: flex; gap: 14px; }

/* 3D-Knoepfe: Pille, satte Farbe, dunkle Unterkante, federt beim Klick */
html[data-layout="verspielt"] .btn,
html[data-layout="verspielt"] .btn-warm,
html[data-layout="verspielt"] .btn-waitlist,
html[data-layout="verspielt"] .btn-waitlist-open {
  font-family: 'Baloo 2', sans-serif; font-weight: 700;
  border-radius: 999px; text-transform: none; letter-spacing: 0;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
html[data-layout="verspielt"] .btn-warm,
html[data-layout="verspielt"] .btn-waitlist,
html[data-layout="verspielt"] .btn-waitlist-open {
  background: var(--amber); color: var(--auf-amber, #1a1a1a); border: none;
  box-shadow: 0 8px 0 var(--amber-dark);
}
html[data-layout="verspielt"] .btn-warm:hover,
html[data-layout="verspielt"] .btn-waitlist:hover,
html[data-layout="verspielt"] .btn-waitlist-open:hover {
  background: var(--amber); transform: translateY(-2px);
  box-shadow: 0 10px 0 var(--amber-dark);
}
html[data-layout="verspielt"] .btn-warm:active {
  transform: translateY(4px); box-shadow: 0 4px 0 var(--amber-dark);
}
html[data-layout="verspielt"] .btn-ghost {
  border: 2.5px solid var(--text); color: var(--text); border-radius: 999px;
  background: transparent;
}
html[data-layout="verspielt"] .btn-ghost:hover { background: var(--text); color: var(--cream); }

/* ── Abschnitte und Karten ────────────────────────────────────────────── */
html[data-layout="verspielt"] .section-title {
  padding-left: 0; border-bottom: none; font-weight: 700;
  font-size: clamp(1.6rem, 2.6vw, 2.1rem); color: var(--text);
}
html[data-layout="verspielt"] .section-title::before { display: none; }
html[data-layout="verspielt"] .divider { display: none; }
html[data-layout="verspielt"] .section-lead { color: var(--text-soft); }

html[data-layout="verspielt"] .cat-card,
html[data-layout="verspielt"] .kitten-card,
html[data-layout="verspielt"] .card,
html[data-layout="verspielt"] .litter-card {
  background: var(--card); border: none; border-radius: var(--v-rund);
  box-shadow: var(--shadow);
}
html[data-layout="verspielt"] .cat-card:hover,
html[data-layout="verspielt"] .kitten-card:hover {
  transform: translateY(-4px) rotate(-1deg);
  box-shadow: 0 26px 48px -16px rgba(46, 27, 38, 0.28);
  border-color: transparent;
}
html[data-layout="verspielt"] .cat-photo,
html[data-layout="verspielt"] .kitten-photo {
  border-radius: var(--v-rund) var(--v-rund) 0 0; border-bottom: none;
}
html[data-layout="verspielt"] .gallery-item {
  border-radius: var(--v-rund-klein); border: none; box-shadow: var(--shadow);
}
html[data-layout="verspielt"] .cat-name,
html[data-layout="verspielt"] .kitten-name,
html[data-layout="verspielt"] .litter-name { color: var(--text); font-weight: 700; }

/* Abzeichen als bunte Mono-Chips */
html[data-layout="verspielt"] .cat-gender,
html[data-layout="verspielt"] .kitten-status,
html[data-layout="verspielt"] .cat-home-badge,
html[data-layout="verspielt"] .cat-young-badge,
html[data-layout="verspielt"] .cat-guest-badge,
html[data-layout="verspielt"] .cat-neutral-badge {
  font-family: 'JetBrains Mono', monospace; font-weight: 700;
  border-radius: 8px; letter-spacing: 0.06em;
}
html[data-layout="verspielt"] .cat-title-badge {
  background: #FFE3EC; color: #B23A63; border: none; border-radius: 8px;
  font-family: 'JetBrains Mono', monospace; font-weight: 700; letter-spacing: 0.06em;
}

/* Laufschrift und Formulare */
html[data-layout="verspielt"] .kitten-ticker {
  background: var(--cream-dark) !important;
  border-top: none; border-bottom: none;
}
html[data-layout="verspielt"] .ticker-item { color: var(--text-soft); }
html[data-layout="verspielt"] .ticker-item:hover,
html[data-layout="verspielt"] a.ticker-item:hover { color: var(--amber); }
html[data-layout="verspielt"] input,
html[data-layout="verspielt"] textarea,
html[data-layout="verspielt"] select {
  border-radius: var(--v-rund-klein); border: 1.5px solid var(--border);
  background: #fff; color: var(--text);
}

/* ── Unterseiten-Koepfe: Creme, Baloo, Mono-Etikett ───────────────────── */
html[data-layout="verspielt"] .page-hero h1,
html[data-layout="verspielt"] .katze-detail-hero h1,
html[data-layout="verspielt"] .kt-hero h1 {
  font-family: 'Baloo 2', sans-serif; font-weight: 800; color: var(--text);
  text-shadow: none; -webkit-text-stroke: 0; line-height: 1.08;
}
html[data-layout="verspielt"] .page-hero .section-eyebrow,
html[data-layout="verspielt"] .katze-detail-hero .section-eyebrow,
html[data-layout="verspielt"] .kt-hero .section-eyebrow {
  display: inline-flex; align-items: center; align-self: center;
  background: var(--rose); color: #fff; padding: 5px 13px; border-radius: 999px;
  font-family: 'JetBrains Mono', monospace; font-size: 0.7rem;
  letter-spacing: 0.08em; text-transform: uppercase; font-weight: 700;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="verspielt"] .page-hero .section-eyebrow::before,
html[data-layout="verspielt"] .page-hero .section-eyebrow::after,
html[data-layout="verspielt"] .katze-detail-hero .section-eyebrow::before,
html[data-layout="verspielt"] .katze-detail-hero .section-eyebrow::after,
html[data-layout="verspielt"] .kt-hero .section-eyebrow::before,
html[data-layout="verspielt"] .kt-hero .section-eyebrow::after { display: none; }

/* ── Fusszeile: Pflaume, Gelb fuer die Marke, Mono-Spaltentitel ───────── */
html[data-layout="verspielt"] footer {
  background: var(--v-pflaume) !important;
  border-top: none !important; color: var(--cream);
  /* A-821: die Noppen sitzen auch oberhalb der Fusszeile (siehe ::before);
     die Grundregel gibt der Fusszeile 4rem Luft nach oben, darin haben sie
     Platz. */
  position: relative;
}
/* A-821 (Torsten, 04.09.2026: "die Linien, die am Menü sitzen, waren auch
   unten oberhalb des Footers angebracht"): dieselbe Bogenkante wie an der
   Spalte (Zeile ~3128), nur waagerecht - halbrunde Noppen in Pflaume, die
   aus der Fusszeile nach oben in den Seitengrund ragen (in die 4rem Luft
   der Grundregel). Kein Zusatz-Element im Markup: ein ::before, wie bei
   der Spalte ein ::after. */
html[data-layout="verspielt"] footer::before {
  content: ""; position: absolute; left: 0; right: 0; top: -9px; height: 18px;
  background-image: radial-gradient(circle at 9px 9px, var(--v-pflaume) 9px, transparent 9.5px);
  background-size: 18px 18px; background-repeat: repeat-x;
  pointer-events: none;
}
html[data-layout="verspielt"] .footer-logo { color: var(--v-gelb); font-weight: 700; }
html[data-layout="verspielt"] .footer-logo em { font-style: normal; color: var(--v-gelb); }
html[data-layout="verspielt"] .footer-col-title { color: #caa8b6; opacity: 1; font-size: 0.7rem; }
html[data-layout="verspielt"] footer a { color: var(--cream); }
html[data-layout="verspielt"] footer a:hover { color: var(--v-gelb); }
html[data-layout="verspielt"] .footer-legal,
html[data-layout="verspielt"] .footer-copy { color: #caa8b6; }

/* ── Handy-Kopfleiste: Pflaume, Gelb, wachsend wie bei Wild (A-225) ───── */
@media (max-width: 999px) {
  html[data-layout="verspielt"] nav:not(.footer-links) {
    height: auto; min-height: 60px; padding: 10px 1rem;
    background: var(--v-pflaume) !important; border-bottom: none !important;
  }
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-logo {
    white-space: normal; color: var(--v-gelb) !important;
    font-size: 1.05rem; line-height: 1.25;
  }
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-logo em,
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-logo .nav-logo-sub {
    display: inline; font-family: 'Baloo 2', sans-serif; font-size: 1em;
    color: var(--v-gelb); font-style: normal;
  }
  html[data-layout="verspielt"].hat-zuchtlogo .nav-med-link,
  html[data-layout="verspielt"].hat-zuchtlogo .nav-med-link .nav-med {
    width: 40px; height: 44px;
  }
  html[data-layout="verspielt"] .nav-links {
    background: var(--v-pflaume) !important;
  }
  html[data-layout="verspielt"] .nav-links a { color: #FFF9F0; font-family: 'Baloo 2', sans-serif; }   /* A-816: s. o. */
  html[data-layout="verspielt"] .nav-hamburger span { background: var(--v-gelb); }
}

/* Nachmessungen (A-231): die Bilderrahmen der Grundvorlage (rosegoldene
   2px-Linie an img) und der orange Galerie-Titel (ID-Regel #galerie schlaegt
   die Klassen-Regel) passen nicht zur Formensprache dieser Vorlage. */
html[data-layout="verspielt"] .cat-photo img,
html[data-layout="verspielt"] .kitten-photo img,
html[data-layout="verspielt"] .gallery-item img,
html[data-layout="verspielt"] .zuchtkatze-photo img {
  border: none;
}
html[data-layout="verspielt"] #galerie .section-title { color: var(--text); }

/* Nachfasser (A-231/373): Der Entwurf kennt KEIN Foto im Helden — Creme
   plus Farbklecks ist die Flaeche. Mit gesetztem heroImage (erster echter
   Mandant) lag das Foto vollflaechig unter dem pflaumenfarbenen Titel,
   unlesbar. Das Bild bleibt in den Einstellungen erhalten und gilt wieder,
   sobald die Zucht eine andere Vorlage waehlt. */
html[data-layout="verspielt"] .hero-bg,
html[data-layout="verspielt"] .hero-overlay { display: none !important; }

/* A-239 (Torstens Handy-Sichtung): Der Ticker wirkte in Verspielt wie ein
   leeres Loch zwischen Kopfleiste und Held — fast farbgleich mit der
   Flaeche, ohne Abschluss. Jetzt: getippte Kleinschrift, kompakte Zeile,
   gestrichelte Trennlinie unten (das Linienmotiv des Entwurfs). Dazu am
   Handy weniger Leerlauf ueber dem Helden. */
html[data-layout="verspielt"] .kitten-ticker {
  /* A-466: eigene Polsterung mit hoeherer Spezifitaet — die Grundregel
     erreicht diese Vorlage NICHT. Ohne diese Zeile waere Verspielt die
     einzige Vorlage, die fett geblieben waere. */
  padding: 0.25rem 0;
  border-bottom: 1.5px dashed #E7D7C4 !important;
}
html[data-layout="verspielt"] .ticker-item {
  font-family: 'JetBrains Mono', 'Courier New', monospace;
  font-size: 0.72rem; letter-spacing: 0.05em; color: var(--text-soft);
}
html[data-layout="verspielt"] .ticker-sep { color: var(--amber); }
@media (max-width: 999px) {
  html[data-layout="verspielt"] .hero {
    min-height: auto;
    padding-top: 2.4rem; padding-bottom: 2.6rem;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „EDEL" (A-254, Liste D2)
   --------------------------------------------------------------------------
   Vierte Richtung: tiefes Gruen, Papierweiss, Gold, Cormorant-Serifen —
   ruhiger Luxus. Gleiches Muster wie Wild/Verspielt: reine CSS-Schicht,
   Menue als Spalte ab 1000px, mitwachsende Handy-Kopfleiste, Logo-Maske
   (A-227) in Gold. Schriften: die vorhandenen (Cormorant 300/400/600,
   Archivo variabel) — kein neuer Download noetig.
   ══════════════════════════════════════════════════════════════════════════ */
html[data-layout="edel"] {
  color-scheme: only light;   /* A-1493: „only", sonst dunkelt Chrome/Opera (Auto Dark) die helle Vorlage nach */
  --card: #FFFFFF;
  --rose: #B99256;
  /* A-431 (510er-Nachmessung): "Gruen & Gold" zeigte kein Gold. Saemtliche
     Goldstellen der Vorlage (Menuespalten-Linie, divider, section-label,
     Titel-em, btn-ghost) referenzieren var(--amber) — definiert hat Edel
     sein --amber aber nie, also fiel alles aufs :root-Warmgrau #7A7670
     zurueck. Wild und Show setzen ihr --amber selbst; jetzt tut Edel das
     auch: das Gold ist --rose (#B99256), die dunkle und helle Stufe sind
     daraus gezogen. Eine gewaehlte Eigenfarbe gewinnt weiter (der
     custom-accent-override erzwingt sie). */
  --amber: #B99256;
  --amber-dark: #8F6F3B;
  --amber-light: #D3B67E;
  --e-gruen: #1C2B24;
  --hero-verlauf: #F7F4ED;
  --e-nav: 250px;
}
html[data-layout="edel"] body { background: var(--cream) !important; color: var(--text); }
html[data-layout="edel"] body,
html[data-layout="edel"] input,
html[data-layout="edel"] textarea,
html[data-layout="edel"] select,
html[data-layout="edel"] button { font-family: 'Archivo', system-ui, sans-serif; }
html[data-layout="edel"] .section-title,
html[data-layout="edel"] .hero-title,
html[data-layout="edel"] .cat-name,
html[data-layout="edel"] .kitten-name,
html[data-layout="edel"] .litter-name,
html[data-layout="edel"] .nav-logo,
html[data-layout="edel"] .footer-logo,
html[data-layout="edel"] h1, html[data-layout="edel"] h2, html[data-layout="edel"] h3 {
  font-family: 'Cormorant Garamond', Georgia, serif;
  font-weight: 600; letter-spacing: 0.01em; text-transform: none;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="edel"] .section-label,
html[data-layout="edel"] .hero-eyebrow,
html[data-layout="edel"] .fact-label,
html[data-layout="edel"] .kontakt-label,
html[data-layout="edel"] .footer-col-title,
html[data-layout="edel"] .cat-ems,
html[data-layout="edel"] .kitten-ems {
  font-family: 'Archivo', sans-serif; text-transform: uppercase;
  letter-spacing: 0.22em; font-weight: 500; font-size: 11px;
}
html[data-layout="edel"] .section-label { color: var(--amber); }

/* Menue als gruene Spalte mit Goldlinie */
@media (min-width: 1000px) {
  html[data-layout="edel"] nav:not(.footer-links) {
    position: fixed; top: 0; left: 0; bottom: 0; width: var(--e-nav);
    height: auto; justify-content: flex-start;
    display: flex; flex-direction: column; align-items: flex-start;
    padding: 36px 26px 24px; gap: 0;
    background: var(--e-gruen) !important; border-right: 1px solid var(--amber) !important;
    border-bottom: none; overflow-y: auto; z-index: 90;
  }
  html[data-layout="edel"] nav:not(.footer-links) .nav-brand {
    margin-bottom: 30px; flex-direction: column; align-items: flex-start; gap: 0.8rem; width: 100%;
  }
  html[data-layout="edel"] nav:not(.footer-links) .nav-links {
    flex-direction: column; align-items: stretch; gap: 0.15rem; width: 100%;
  }
  html[data-layout="edel"] nav:not(.footer-links) .nav-links > li { width: 100%; }
  html[data-layout="edel"] nav:not(.footer-links) .nav-links > li > a {
    display: block; width: 100%; color: #D9D4C7; padding: 7px 2px;
    font-family: 'Archivo', sans-serif; font-size: 12px; font-weight: 500;
    text-transform: uppercase; letter-spacing: 0.2em;
    border-bottom: 1px solid rgba(185, 146, 86, 0.18);
  }
  html[data-layout="edel"] nav:not(.footer-links) .nav-links > li > a:hover { color: var(--amber-light); }
  html[data-layout="edel"] .nav-links a.nav-current { color: var(--amber-light); }
  /* A-435 (Torstens Befund C3, gemessen bei 1600px): Hier stand
     "body > *:not(nav) { margin-left: var(--e-nav) }". Das schob jede Seite an
     die Menuespalte — und ueberschrieb dabei das "margin: 0 auto" der
     Inhaltsspalte (.page, max-width 780px). Folge: der Text klebte links an
     der Spalte statt in der Restbreite zu stehen; gemessen 274 bis 285 px
     daneben, bei allen drei Spalten-Vorlagen. Torstens Wort: "Bei FAQs ist
     das irgendwie nicht mittig ausgerichtet. Das ist ganz nach links.
     Ratgeber auch."
     Als Innenabstand am body wirkt derselbe Versatz — nur bleibt die
     Zentrierung der Kinder erhalten, weil ihr Platz schmaler wird statt
     verschoben. Nebenbei laufen "width: 100%"-Kinder nicht mehr ueber. */
  html[data-layout="edel"] body { padding-left: var(--e-nav); }
  html[data-layout="edel"] .kitten-ticker { top: var(--sprachband-hoehe, 0px); }
  html[data-layout="edel"] .nav-submenu {
    position: static; box-shadow: none; border: none; background: transparent;
    width: 100%; min-width: 0; padding-left: 12px;
  }
  html[data-layout="edel"] .nav-submenu li a { color: #A9A493; font-size: 11px; letter-spacing: 0.14em; }
  html[data-layout="edel"] .nav-sub-toggle { color: #A9A493; }
}
html[data-layout="edel"] nav:not(.footer-links) .nav-logo {
  color: #F1EDE2 !important; font-size: 1.45rem; line-height: 1.2; white-space: normal;
}
html[data-layout="edel"] nav:not(.footer-links) .nav-logo em,
html[data-layout="edel"] nav:not(.footer-links) .nav-logo .nav-logo-sub {
  display: block; font-family: 'Archivo', sans-serif; font-size: 10px;
  color: var(--amber-light); letter-spacing: 0.24em; text-transform: uppercase; font-style: normal;
}
html[data-layout="edel"].hat-zuchtlogo .nav-med-link { position: relative; display: block; width: 54px; height: 60px; }
html[data-layout="edel"].hat-zuchtlogo .nav-med-link .nav-med { opacity: 0; width: 54px; height: 60px; object-fit: contain; }
html[data-layout="edel"].hat-zuchtlogo .nav-med-link::before {
  content: ""; position: absolute; inset: 0;
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background-color: var(--amber);
}

/* Held: Papier, Serifentitel, Goldlinie */
html[data-layout="edel"] .hero,
html[data-layout="edel"] .page-hero,
html[data-layout="edel"] .katze-detail-hero,
html[data-layout="edel"] .kt-hero {
  background: var(--cream) !important; border-bottom: 1px solid var(--amber) !important; color: var(--text);
}
html[data-layout="edel"] .hero { justify-content: center; min-height: 62vh; }
html[data-layout="edel"] .hero-content { text-align: center; max-width: 780px; margin: 0 auto; padding-left: 0; }
html[data-layout="edel"] .hero-content::before { display: none; }
html[data-layout="edel"] .hero-eyebrow { color: var(--amber); justify-content: center; text-shadow: none; -webkit-text-stroke: 0; }
html[data-layout="edel"] .hero-eyebrow::before,
html[data-layout="edel"] .hero-eyebrow::after {
  content: ""; display: inline-block; width: 44px; height: 1px; background: var(--amber);
  margin: 0 12px; vertical-align: middle;
}
html[data-layout="edel"] .hero-title {
  color: var(--text); font-weight: 600; line-height: 1.12;
  font-size: clamp(2.3rem, 5vw, 3.6rem); text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="edel"] .hero-title em { color: var(--amber-dark); font-style: italic; }
html[data-layout="edel"] .hero-tagline,
html[data-layout="edel"] .hero-quote {
  color: var(--text-soft); font-family: 'Archivo', sans-serif; font-size: 14px;
  letter-spacing: 0.06em; text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="edel"] .hero-cta { justify-content: center; display: flex; gap: 0.9rem; }
html[data-layout="edel"] .btn,
html[data-layout="edel"] .btn-warm,
html[data-layout="edel"] .btn-waitlist,
html[data-layout="edel"] .btn-waitlist-open {
  border-radius: 0; font-family: 'Archivo', sans-serif; font-weight: 500;
  letter-spacing: 0.18em; text-transform: uppercase; font-size: 11px;
}
html[data-layout="edel"] .btn-warm,
html[data-layout="edel"] .btn-waitlist,
html[data-layout="edel"] .btn-waitlist-open { background: var(--e-gruen); color: #F1EDE2; border: 1px solid var(--e-gruen); }
html[data-layout="edel"] .btn-warm:hover { background: var(--amber-dark); border-color: var(--amber-dark); }
html[data-layout="edel"] .btn-ghost { border: 1px solid var(--amber); color: var(--text); border-radius: 0; }
html[data-layout="edel"] .btn-ghost:hover { background: var(--amber); color: #fff; }

/* Abschnitte, Karten, Rahmenbilder */
html[data-layout="edel"] .section-title {
  padding-left: 0; border-bottom: none; text-align: inherit;
  font-size: clamp(1.6rem, 3vw, 2.1rem); color: var(--text);
}
html[data-layout="edel"] .section-title::before { display: none; }
html[data-layout="edel"] .section-title em { color: var(--amber-dark); font-style: italic; }
html[data-layout="edel"] .divider { background: var(--amber); height: 1px; width: 64px; }
html[data-layout="edel"] .cat-card,
html[data-layout="edel"] .kitten-card,
html[data-layout="edel"] .card,
html[data-layout="edel"] .litter-card {
  background: var(--card); border: 1px solid var(--border); border-radius: 2px; box-shadow: none;
}
html[data-layout="edel"] .cat-card:hover,
html[data-layout="edel"] .kitten-card:hover { border-color: var(--amber); box-shadow: var(--shadow); transform: none; }
html[data-layout="edel"] .cat-photo,
html[data-layout="edel"] .kitten-photo { border-radius: 0; border-bottom: 1px solid var(--amber); }
html[data-layout="edel"] .cat-photo img,
html[data-layout="edel"] .kitten-photo img,
html[data-layout="edel"] .gallery-item img { border: none; }
html[data-layout="edel"] .gallery-item { border-radius: 0; border: 1px solid var(--border); }
html[data-layout="edel"] .gallery-item:hover { border-color: var(--amber); }
html[data-layout="edel"] .cat-name,
html[data-layout="edel"] .kitten-name,
html[data-layout="edel"] .litter-name { color: var(--text); }
html[data-layout="edel"] .cat-gender,
html[data-layout="edel"] .kitten-status,
html[data-layout="edel"] .cat-title-badge {
  border-radius: 0; font-family: 'Archivo', sans-serif; letter-spacing: 0.16em; font-weight: 500;
}
html[data-layout="edel"] .cat-title-badge { background: transparent; color: var(--amber-dark); border: 1px solid var(--amber); }
html[data-layout="edel"] .kitten-ticker { background: var(--e-gruen) !important; border: none; }
html[data-layout="edel"] .ticker-item { color: #D9D4C7; letter-spacing: 0.08em; font-size: 12px; }
html[data-layout="edel"] .ticker-item:hover, html[data-layout="edel"] a.ticker-item:hover { color: var(--amber-light); }
html[data-layout="edel"] .ticker-sep { color: var(--amber); }
html[data-layout="edel"] input, html[data-layout="edel"] textarea, html[data-layout="edel"] select {
  border-radius: 0; border: 1px solid var(--border); background: #fff; color: var(--text);
}
html[data-layout="edel"] .page-hero h1,
html[data-layout="edel"] .katze-detail-hero h1,
html[data-layout="edel"] .kt-hero h1 {
  font-family: 'Cormorant Garamond', Georgia, serif; font-weight: 600; color: var(--text);
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="edel"] .page-hero .section-eyebrow,
html[data-layout="edel"] .katze-detail-hero .section-eyebrow,
html[data-layout="edel"] .kt-hero .section-eyebrow {
  color: var(--amber); letter-spacing: 0.24em; text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="edel"] footer { background: var(--e-gruen) !important; border-top: 1px solid var(--amber) !important; color: #D9D4C7; }
html[data-layout="edel"] .footer-logo { color: #F1EDE2; }
html[data-layout="edel"] .footer-logo em { color: var(--amber-light); font-style: italic; }
html[data-layout="edel"] .footer-col-title { color: var(--amber-light); opacity: 1; }
html[data-layout="edel"] footer a { color: #D9D4C7; }
html[data-layout="edel"] footer a:hover { color: var(--amber-light); }
@media (max-width: 999px) {
  html[data-layout="edel"] nav:not(.footer-links) {
    height: auto; min-height: 58px; padding: 10px 1rem;
    background: var(--e-gruen) !important; border-bottom: 1px solid var(--amber) !important;
  }
  html[data-layout="edel"] nav:not(.footer-links) .nav-logo {
    white-space: normal; color: #F1EDE2 !important; font-size: 1.15rem; line-height: 1.25;
  }
  html[data-layout="edel"] nav:not(.footer-links) .nav-logo em,
  html[data-layout="edel"] nav:not(.footer-links) .nav-logo .nav-logo-sub {
    display: inline; font-family: 'Cormorant Garamond', serif; font-size: 1em;
    color: #F1EDE2; font-style: normal; letter-spacing: 0.01em; text-transform: none;
  }
  html[data-layout="edel"].hat-zuchtlogo .nav-med-link,
  html[data-layout="edel"].hat-zuchtlogo .nav-med-link .nav-med { width: 40px; height: 44px; }
  html[data-layout="edel"] .nav-links { background: var(--e-gruen) !important; }
  html[data-layout="edel"] .nav-links a { color: #D9D4C7; }
  html[data-layout="edel"] .nav-hamburger span { background: var(--amber); }
}

/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „MINIMAL" (A-255, Liste D2)
   --------------------------------------------------------------------------
   Fuenfte Richtung: Weiss, Fast-Schwarz, Haarlinien, viel Luft, Archivo
   durchgehend — die Fotos tragen die Seite. BEWUSST OHNE Menuespalte:
   die schlichte obere Leiste der Grundvorlage bleibt, nur reduziert.
   ══════════════════════════════════════════════════════════════════════════ */
html[data-layout="minimal"] {
  color-scheme: only light;   /* A-1493: „only", sonst dunkelt Chrome/Opera (Auto Dark) die helle Vorlage nach */
  /* A-764: der Body war fest weiss, die Abschnittsflaechen folgten dem
     Thema — ein schwarzer Streifen im weissen Blatt, mit schwarzer
     Schrift darauf (1.00). Wer den Grund festhaelt, haelt alle Flaechen. */
  --cream: #FFFFFF;
  --cream-dark: #F4F4F4;
  --warm-white: #FFFFFF;
  --card-bg: #FFFFFF;
  --text: #1E1E1E;
  --text-soft: #5A5755;
  --text-muted: #8A8785;
  --card: #FFFFFF;
  --rose: #141414;
  --hero-verlauf: #FFFFFF;
}
html[data-layout="minimal"] body { background: #FFFFFF !important; color: var(--text); }
html[data-layout="minimal"] body,
html[data-layout="minimal"] input,
html[data-layout="minimal"] textarea,
html[data-layout="minimal"] select,
html[data-layout="minimal"] button,
html[data-layout="minimal"] .section-title,
html[data-layout="minimal"] .hero-title,
html[data-layout="minimal"] .cat-name,
html[data-layout="minimal"] .kitten-name,
html[data-layout="minimal"] .litter-name,
html[data-layout="minimal"] .nav-logo,
html[data-layout="minimal"] .footer-logo,
html[data-layout="minimal"] h1, html[data-layout="minimal"] h2, html[data-layout="minimal"] h3 {
  font-family: 'Archivo', system-ui, sans-serif;
}
html[data-layout="minimal"] .hero,
html[data-layout="minimal"] .page-hero,
html[data-layout="minimal"] .katze-detail-hero,
html[data-layout="minimal"] .kt-hero {
  background: #FFFFFF !important; border-bottom: 1px solid var(--border) !important; color: var(--text);
}
html[data-layout="minimal"] .hero { min-height: 56vh; }
html[data-layout="minimal"] .hero-content { text-align: left; max-width: 880px; margin-left: clamp(1rem, 6vw, 5rem); padding-left: 0; }
html[data-layout="minimal"] .hero-content::before { display: none; }
html[data-layout="minimal"] .hero-eyebrow {
  color: var(--text-muted); justify-content: flex-start; letter-spacing: 0.3em;
  text-transform: uppercase; font-size: 11px; font-weight: 500;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="minimal"] .hero-eyebrow::before, html[data-layout="minimal"] .hero-eyebrow::after { display: none; }
html[data-layout="minimal"] .hero-title {
  color: var(--text); font-weight: 800; letter-spacing: -0.02em; line-height: 1.02;
  font-size: clamp(2.4rem, 6vw, 4rem); text-transform: uppercase;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="minimal"] .hero-title em { color: var(--text); font-style: normal; }
html[data-layout="minimal"] .hero-tagline,
html[data-layout="minimal"] .hero-quote {
  font-family: 'Archivo', system-ui, sans-serif;
  color: var(--text-muted); font-size: 14px; letter-spacing: 0.02em; font-style: normal;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="minimal"] .hero-cta { justify-content: flex-start; display: flex; gap: 0.8rem; }
html[data-layout="minimal"] nav:not(.footer-links) {
  background: #FFFFFF !important; border-bottom: 1px solid var(--border) !important;
}
html[data-layout="minimal"] .nav-logo {
  color: var(--text) !important; font-weight: 800; letter-spacing: -0.01em; font-size: 1.15rem;
}
html[data-layout="minimal"] .nav-logo em,
html[data-layout="minimal"] .nav-logo .nav-logo-sub {
  font-style: normal; color: var(--text-muted); font-size: 0.72em; letter-spacing: 0.02em;
}
/* A-816: der Grund der Menueliste gilt nur der Klappleiste am Handy. Am PC
   liegt die Liste in der Kopfleiste und hat keinen eigenen Kasten. */
@media (max-width: 900px) {
  html[data-layout="minimal"] .nav-links { background: #FFFFFF !important; }
}
html[data-layout="minimal"] .nav-links a {
  color: var(--text); font-size: 11px; letter-spacing: 0.22em; text-transform: uppercase; font-weight: 500;
}
html[data-layout="minimal"] .nav-links a:hover { color: var(--text-muted); }
html[data-layout="minimal"] .nav-hamburger span { background: var(--text); }
html[data-layout="minimal"] .kitten-ticker { background: #FFFFFF !important; border-top: none; border-bottom: 1px solid var(--border); }
html[data-layout="minimal"] .ticker-item { color: var(--text-muted); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; }
html[data-layout="minimal"] .ticker-item:hover, html[data-layout="minimal"] a.ticker-item:hover { color: var(--text); }
html[data-layout="minimal"] .ticker-sep { color: var(--border); }
html[data-layout="minimal"] .section-label {
  color: var(--text-muted); letter-spacing: 0.3em; font-size: 11px; font-weight: 500;
}
html[data-layout="minimal"] .section-title {
  padding-left: 0; border-bottom: none; color: var(--text);
  font-weight: 800; text-transform: uppercase; letter-spacing: -0.01em;
  font-size: clamp(1.5rem, 3vw, 2rem);
}
html[data-layout="minimal"] .section-title::before { display: none; }
html[data-layout="minimal"] .section-title em { color: var(--text); font-style: normal; }
html[data-layout="minimal"] .divider { background: var(--text); height: 2px; width: 40px; }
html[data-layout="minimal"] .btn,
html[data-layout="minimal"] .btn-warm,
html[data-layout="minimal"] .btn-waitlist,
html[data-layout="minimal"] .btn-waitlist-open {
  border-radius: 0; font-weight: 600; letter-spacing: 0.2em; text-transform: uppercase; font-size: 11px;
}
html[data-layout="minimal"] .btn-warm,
html[data-layout="minimal"] .btn-waitlist,
html[data-layout="minimal"] .btn-waitlist-open { background: var(--text); color: #fff; border: 1px solid var(--text); }
html[data-layout="minimal"] .btn-warm:hover { background: #000; }
html[data-layout="minimal"] .btn-ghost { border: 1px solid var(--text); color: var(--text); border-radius: 0; }
html[data-layout="minimal"] .btn-ghost:hover { background: var(--text); color: #fff; }
html[data-layout="minimal"] .cat-card,
html[data-layout="minimal"] .kitten-card,
html[data-layout="minimal"] .card,
html[data-layout="minimal"] .litter-card {
  background: #fff; border: 1px solid var(--border); border-radius: 0; box-shadow: none;
}
html[data-layout="minimal"] .cat-card:hover,
html[data-layout="minimal"] .kitten-card:hover { transform: none; box-shadow: none; border-color: var(--text); }
html[data-layout="minimal"] .cat-photo,
html[data-layout="minimal"] .kitten-photo { border-radius: 0; border-bottom: 1px solid var(--border); }
html[data-layout="minimal"] .cat-photo img,
html[data-layout="minimal"] .kitten-photo img,
html[data-layout="minimal"] .gallery-item img { border: none; filter: none; }
html[data-layout="minimal"] .gallery-item { border-radius: 0; border: 1px solid var(--border); box-shadow: none; }
html[data-layout="minimal"] .gallery-item:hover { border-color: var(--text); }
html[data-layout="minimal"] .cat-name,
html[data-layout="minimal"] .kitten-name,
html[data-layout="minimal"] .litter-name { color: var(--text); font-weight: 700; }
html[data-layout="minimal"] .cat-gender,
html[data-layout="minimal"] .kitten-status,
html[data-layout="minimal"] .cat-title-badge {
  border-radius: 0; background: #fff; color: var(--text); border: 1px solid var(--text);
  letter-spacing: 0.16em; font-weight: 600; backdrop-filter: none;
}
html[data-layout="minimal"] input, html[data-layout="minimal"] textarea, html[data-layout="minimal"] select {
  border-radius: 0; border: 1px solid var(--border); background: #fff; color: var(--text);
}
html[data-layout="minimal"] .page-hero h1,
html[data-layout="minimal"] .katze-detail-hero h1,
html[data-layout="minimal"] .kt-hero h1 {
  font-weight: 800; text-transform: uppercase; letter-spacing: -0.01em; color: var(--text);
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="minimal"] .page-hero .section-eyebrow,
html[data-layout="minimal"] .katze-detail-hero .section-eyebrow,
html[data-layout="minimal"] .kt-hero .section-eyebrow {
  color: var(--text-muted); letter-spacing: 0.3em; text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="minimal"] footer { background: #FFFFFF !important; border-top: 1px solid var(--border) !important; color: var(--text-muted); }
html[data-layout="minimal"] .footer-logo { color: var(--text); font-weight: 800; }
html[data-layout="minimal"] .footer-logo em { color: var(--text-muted); font-style: normal; }
html[data-layout="minimal"] .footer-col-title { color: var(--text); opacity: 1; letter-spacing: 0.24em; }
html[data-layout="minimal"] footer a { color: var(--text-soft); }
html[data-layout="minimal"] footer a:hover { color: var(--text); }
/* A-1490: solange gemeinsam.js prueft, ob das Logo eingefaerbt wird
   (data-logo-probe vom Server), bleibt das Original unsichtbar - sonst
   blitzte es gross und in Originalfarbe auf. Gilt fuer alle Maskenvorlagen. */
html[data-logo-probe]:not(.hat-zuchtlogo) .nav-med-link .nav-med { visibility: hidden; }
html[data-layout="minimal"].hat-zuchtlogo .nav-med-link { position: relative; display: inline-block; width: 34px; height: 38px; }
html[data-layout="minimal"].hat-zuchtlogo .nav-med-link .nav-med { opacity: 0; width: 34px; height: 38px; object-fit: contain; }
html[data-layout="minimal"].hat-zuchtlogo .nav-med-link::before {
  content: ""; position: absolute; inset: 0;
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background-color: var(--text);
}

/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „MAGAZIN" (A-265, Torstens Wunsch 15.08.2026)
   --------------------------------------------------------------------------
   Sechste Richtung: Editorial wie ein Print-Magazin — Papierweiss, Tinte,
   Bordeaux, riesige Cormorant-Serifen, Haarlinien, viel Luft. Fuer grosse
   Bildschirme gedacht (Widescreen), die Fotos stehen randlos in Figuren.
   Gleiches Muster wie Edel/Minimal: reine CSS-Schicht, obere Leiste bleibt.
   ══════════════════════════════════════════════════════════════════════════ */
/* A-764: Magazins Tinte folgt dem Thema. Bis 774 stand hier ein fester
   fast schwarzer Wert — er traegt Schrift, Linien UND den Fussgrund. Auf
   einer dunklen Farbwelt verschwand damit der Zuchtname (gemessen 1.01
   gegen 1.05 gefordert 3.0). Der Fussgrund bleibt fest, er ist Flaeche. */
html[data-layout="magazin"] {
  --card: #FBF9F4;
  --rose: #8E3B46;
  --m-ink: var(--text);
  --m-fuss: #1B1B1F;
  --hero-verlauf: #FBF9F4;
}
html[data-layout="magazin"]:not([data-theme]) {
  color-scheme: only light;   /* A-1493: „only", sonst dunkelt Chrome/Opera (Auto Dark) die helle Vorlage nach */
  --card: #FBF9F4;
  --hero-verlauf: #FBF9F4;
}
html[data-layout="magazin"] body { background: var(--cream) !important; color: var(--text); }
html[data-layout="magazin"] body,
html[data-layout="magazin"] input,
html[data-layout="magazin"] textarea,
html[data-layout="magazin"] select,
html[data-layout="magazin"] button { font-family: 'Archivo', system-ui, sans-serif; }
html[data-layout="magazin"] .section-title,
html[data-layout="magazin"] .hero-title,
html[data-layout="magazin"] .cat-name,
html[data-layout="magazin"] .kitten-name,
html[data-layout="magazin"] .litter-name,
html[data-layout="magazin"] .nav-logo,
html[data-layout="magazin"] .footer-logo,
html[data-layout="magazin"] h1, html[data-layout="magazin"] h2, html[data-layout="magazin"] h3 {
  font-family: 'Cormorant Garamond', Georgia, serif;
  font-weight: 500; text-transform: none;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="magazin"] .section-label,
html[data-layout="magazin"] .hero-eyebrow,
html[data-layout="magazin"] .fact-label,
html[data-layout="magazin"] .kontakt-label,
html[data-layout="magazin"] .footer-col-title,
html[data-layout="magazin"] .cat-ems,
html[data-layout="magazin"] .kitten-ems {
  font-family: 'Archivo', sans-serif; text-transform: uppercase;
  letter-spacing: 0.28em; font-weight: 500; font-size: 10.5px;
}

/* Kopfleiste: Papier mit doppelter Haarlinie, Serifen-Marke */
html[data-layout="magazin"] nav:not(.footer-links) {
  background: var(--cream) !important;
  border-bottom: 3px double var(--m-ink) !important;
}
html[data-layout="magazin"] .nav-logo { color: var(--m-ink) !important; font-size: 1.5rem; font-weight: 600; }
html[data-layout="magazin"] .nav-logo em { color: var(--amber); font-style: italic; }
html[data-layout="magazin"] .nav-logo .nav-logo-sub {
  font-family: 'Archivo', sans-serif; font-size: 9px; color: var(--text-muted);
  letter-spacing: 0.3em; text-transform: uppercase; font-style: normal;
}
/* A-816: Grund nur fuer die Klappleiste am Handy (siehe Minimal). */
@media (max-width: 900px) {
  html[data-layout="magazin"] .nav-links { background: var(--cream) !important; }
}
html[data-layout="magazin"] .nav-links a {
  color: var(--m-ink); font-size: 11px; letter-spacing: 0.24em; text-transform: uppercase; font-weight: 500;
  border-bottom: 1px solid transparent; padding-bottom: 2px;
}
html[data-layout="magazin"] .nav-links a:hover,
html[data-layout="magazin"] .nav-links a.nav-current { color: var(--amber); border-bottom-color: var(--amber); }
html[data-layout="magazin"] .nav-hamburger span { background: var(--m-ink); }
html[data-layout="magazin"].hat-zuchtlogo .nav-med-link { position: relative; display: inline-block; width: 40px; height: 44px; }
html[data-layout="magazin"].hat-zuchtlogo .nav-med-link .nav-med { opacity: 0; width: 40px; height: 44px; object-fit: contain; }
html[data-layout="magazin"].hat-zuchtlogo .nav-med-link::before {
  content: ""; position: absolute; inset: 0;
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background-color: var(--m-ink);
}

/* Laufschrift: Papier, Haarlinien, Bordeaux-Trenner */
html[data-layout="magazin"] .kitten-ticker {
  background: var(--cream) !important; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
}
html[data-layout="magazin"] .ticker-item {
  color: var(--text-soft); font-size: 11px; letter-spacing: 0.2em; text-transform: uppercase;
}
html[data-layout="magazin"] .ticker-item:hover, html[data-layout="magazin"] a.ticker-item:hover { color: var(--amber); }
html[data-layout="magazin"] .ticker-sep { color: var(--amber); }

/* Held: die grosse Schlagzeile — links, riesig, kursives em in Bordeaux */
html[data-layout="magazin"] .hero,
html[data-layout="magazin"] .page-hero,
html[data-layout="magazin"] .katze-detail-hero,
html[data-layout="magazin"] .kt-hero {
  background: var(--cream) !important; border-bottom: 1px solid var(--m-ink) !important; color: var(--text);
}
html[data-layout="magazin"] .hero { min-height: 78vh; justify-content: center; }
html[data-layout="magazin"] .hero-content {
  text-align: left; max-width: 1160px; width: 100%;
  margin: 0 auto; padding: clamp(1.4rem, 4vw, 3rem) clamp(1rem, 5vw, 4rem);
  /* Die Papier-Platte: liegt ein Kopfbild dahinter, steht die Schlagzeile
     auf Papier wie ein aufgeklebter Titel — ohne Bild verschmilzt sie mit
     dem Papier des Helden und nur die Haarlinie bleibt sichtbar. */
  background: var(--cream); border: 1px solid var(--m-ink);
}
html[data-layout="magazin"] .hero-content::before { display: none; }
html[data-layout="magazin"] .hero-eyebrow {
  color: var(--amber); justify-content: flex-start; text-shadow: none; -webkit-text-stroke: 0;
  border-top: 1px solid var(--m-ink); border-bottom: 1px solid var(--m-ink);
  display: inline-flex; padding: 6px 0; margin-bottom: 1.4rem;
}
html[data-layout="magazin"] .hero-eyebrow::before, html[data-layout="magazin"] .hero-eyebrow::after { display: none; }
html[data-layout="magazin"] .hero-title {
  color: var(--m-ink); font-weight: 500; line-height: 1.02; letter-spacing: -0.01em;
  font-size: clamp(2.8rem, 8vw, 6.2rem); text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="magazin"] .hero-title em { color: var(--amber); font-style: italic; }
html[data-layout="magazin"] .hero-tagline,
html[data-layout="magazin"] .hero-quote {
  color: var(--text-soft); font-family: 'Cormorant Garamond', Georgia, serif;
  font-style: italic; font-size: clamp(1.05rem, 1.6vw, 1.3rem); letter-spacing: 0.01em;
  max-width: 640px; text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="magazin"] .hero-cta { justify-content: flex-start; display: flex; gap: 1.4rem; }

/* Knoepfe: Textzeilen mit Linie statt Kaesten — wie Verweise im Heft */
html[data-layout="magazin"] .btn,
html[data-layout="magazin"] .btn-warm,
html[data-layout="magazin"] .btn-ghost,
html[data-layout="magazin"] .btn-waitlist,
html[data-layout="magazin"] .btn-waitlist-open {
  background: transparent; border: none; border-bottom: 1px solid var(--m-ink); border-radius: 0;
  color: var(--m-ink); font-family: 'Archivo', sans-serif; font-weight: 600;
  letter-spacing: 0.22em; text-transform: uppercase; font-size: 11px;
  padding: 0.55rem 0.15rem; box-shadow: none;
}
html[data-layout="magazin"] .btn:hover,
html[data-layout="magazin"] .btn-warm:hover,
html[data-layout="magazin"] .btn-ghost:hover { color: var(--amber); border-bottom-color: var(--amber); background: transparent; }
html[data-layout="magazin"] .btn-warm,
html[data-layout="magazin"] .btn-waitlist,
html[data-layout="magazin"] .btn-waitlist-open { color: var(--amber); border-bottom-color: var(--amber); }
html[data-layout="magazin"] .btn-warm:hover { color: var(--amber-dark); border-bottom-color: var(--amber-dark); }

/* Abschnitte: Haarlinien, riesige Serifentitel */
html[data-layout="magazin"] .section-label { color: var(--amber); }
html[data-layout="magazin"] .section-title {
  padding-left: 0; border-bottom: none; color: var(--m-ink);
  font-size: clamp(2rem, 4.5vw, 3.2rem); line-height: 1.05;
}
html[data-layout="magazin"] .section-title::before { display: none; }
html[data-layout="magazin"] .section-title em { color: var(--amber); font-style: italic; }
html[data-layout="magazin"] .divider { background: var(--m-ink); height: 1px; width: 88px; }

/* Karten als Bildfiguren: randlos, Unterschrift statt Kachel */
html[data-layout="magazin"] .cat-card,
html[data-layout="magazin"] .kitten-card,
html[data-layout="magazin"] .card,
html[data-layout="magazin"] .litter-card {
  background: transparent; border: none; border-radius: 0; box-shadow: none;
}
html[data-layout="magazin"] .cat-card:hover,
html[data-layout="magazin"] .kitten-card:hover { transform: none; box-shadow: none; }
html[data-layout="magazin"] .cat-photo,
html[data-layout="magazin"] .kitten-photo { border-radius: 0; border-bottom: 1px solid var(--m-ink); overflow: hidden; }
html[data-layout="magazin"] .cat-photo img,
html[data-layout="magazin"] .kitten-photo img,
html[data-layout="magazin"] .gallery-item img { border: none; transition: transform 0.6s ease; }
html[data-layout="magazin"] .cat-card:hover .cat-photo img,
html[data-layout="magazin"] .kitten-card:hover .kitten-photo img { transform: scale(1.03); }
html[data-layout="magazin"] .gallery-item { border-radius: 0; border: none; box-shadow: none; }
html[data-layout="magazin"] .cat-name,
html[data-layout="magazin"] .kitten-name,
html[data-layout="magazin"] .litter-name { color: var(--m-ink); font-size: 1.45rem; }
html[data-layout="magazin"] .cat-gender,
html[data-layout="magazin"] .kitten-status,
html[data-layout="magazin"] .cat-title-badge {
  border-radius: 0; background: var(--cream); color: var(--m-ink); border: 1px solid var(--m-ink);
  font-family: 'Archivo', sans-serif; letter-spacing: 0.18em; font-weight: 500; backdrop-filter: none;
}
html[data-layout="magazin"] input, html[data-layout="magazin"] textarea, html[data-layout="magazin"] select {
  border-radius: 0; border: none; border-bottom: 1px solid var(--m-ink); background: transparent; color: var(--text);
}

/* Unterseitenkoepfe */
html[data-layout="magazin"] .page-hero h1,
html[data-layout="magazin"] .katze-detail-hero h1,
html[data-layout="magazin"] .kt-hero h1 {
  font-family: 'Cormorant Garamond', Georgia, serif; font-weight: 500; color: var(--m-ink);
  font-size: clamp(2.4rem, 6vw, 4.6rem); text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="magazin"] .page-hero h1 em { color: var(--amber); }
html[data-layout="magazin"] .page-hero .section-eyebrow,
html[data-layout="magazin"] .katze-detail-hero .section-eyebrow,
html[data-layout="magazin"] .kt-hero .section-eyebrow {
  color: var(--amber); letter-spacing: 0.28em; text-shadow: none; -webkit-text-stroke: 0;
}

/* Fusszeile: Tinte, Serifen-Marke, Bordeaux-Akzente */
html[data-layout="magazin"] footer { background: var(--m-fuss) !important; border-top: none !important; color: #B9B6AE; }
html[data-layout="magazin"] .footer-logo { color: #FBF9F4; }
/* A-433 (510er-Nachmessung, Torstens "Reine Tinte laesst alles weiss"):
   Spaltentitel und Logo-em hingen an var(--amber-light) — bei der Kombi
   Reine Tinte ist der Akzent #1B1B1F und damit EXAKT der Fusszeilengrund
   (--m-ink): Tinte auf Tinte, unsichtbar. Auf einem immer-dunklen Grund
   gehoert eine feste helle Farbe hin (Lesbarkeit schlaegt Deko, die
   A-415/A-416-Linie); das Papierweiss ist der Ton, den die Fusszeile fuer
   den Logonamen ohnehin traegt. */
html[data-layout="magazin"] .footer-logo em { color: rgba(251, 249, 244, 0.72); font-style: italic; }
html[data-layout="magazin"] .footer-col-title { color: rgba(251, 249, 244, 0.9); opacity: 1; }
html[data-layout="magazin"] footer a { color: #B9B6AE; }
/* A-433: Der "Entdecken"-Hinweis ist in startseite.css fuer den DUNKLEN
   Standard-Helden gedacht (weiss, 30% Deckung) — auf Magazins Papier-Held
   war er praktisch unsichtbar. Hier in Tinte, gleiche Zurueckhaltung. */
html[data-layout="magazin"] .hero-scroll { color: rgba(27, 27, 31, 0.55); }
html[data-layout="magazin"] footer a:hover { color: #FBF9F4; }
@media (max-width: 999px) {
  html[data-layout="magazin"] nav:not(.footer-links) {
    background: var(--cream) !important; border-bottom: 3px double var(--m-ink) !important;
  }
  html[data-layout="magazin"] .hero { min-height: 62vh; }
  html[data-layout="magazin"] .hero-title { font-size: clamp(2.3rem, 11vw, 3.4rem); }
}

/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „SHOW" (A-266, Torstens Wunsch 15.08.2026)
   --------------------------------------------------------------------------
   Siebte Richtung: immersiv und mutig — tiefes Violett, Pink- und
   Tuerkis-Verlaeufe, runde Baloo-Schrift, weiche Bewegung. Animationen nur
   bei prefers-reduced-motion: no-preference; alles bleibt reine CSS-Schicht.
   ══════════════════════════════════════════════════════════════════════════ */
/* A-750: siehe den Block bei Wild — dieselbe Zerlegung. Shows Tuerkis
   (--s-tuerkis) hoert weiter auf die Eigenfarbe (A-432) und faellt sonst
   auf --rose-gold zurueck: in Neon ist das das Tuerkis, in jedem anderen
   Thema dessen Akzent. */
html[data-layout="show"]:not([data-theme]) {
  color-scheme: dark;
  --cream: #140A26;
  --cream-dark: #0E0719;
  --warm-white: #140A26;
  --card-bg: #1E1240;
  --card-bg-alt: #241650;
  --card-border: #35256B;
  --border: #35256B;
  --text: #F4F1FA;
  --text-soft: #CFC7E6;
  --text-muted: #A79FC4;
  --amber: #FF4D8D;
  --amber-dark: #E63677;
  --amber-light: #FF7FAC;
  --rose-gold: #2CE6C8;
  --s-verlauf: linear-gradient(120deg, #FF4D8D, #8A5CFF 55%, #2CE6C8);
  --shadow: 0 18px 44px -18px rgba(10, 4, 26, 0.8);
  --hero-verlauf: radial-gradient(1200px 600px at 15% 10%, rgba(255, 77, 141, 0.22), transparent 60%), radial-gradient(1000px 700px at 85% 90%, rgba(44, 230, 200, 0.16), transparent 60%), #140A26;
  --badge-available: #6E9169;
  --badge-reserved: #9B767C;
  --badge-home: #B98254;
  --badge-young: #8A9B6C;
  --badge-guest: #7E8DA0;
}
html[data-layout="show"] {
  --card: var(--card-bg);
  --rose: var(--amber);
  --s-tuerkis: var(--akzent, var(--rose-gold));
}
html[data-layout="show"] body { background: var(--cream) !important; color: var(--text); }
html[data-layout="show"] body,
html[data-layout="show"] input,
html[data-layout="show"] textarea,
html[data-layout="show"] select,
html[data-layout="show"] button { font-family: 'Nunito Sans', system-ui, sans-serif; }
html[data-layout="show"] .section-title,
html[data-layout="show"] .hero-title,
html[data-layout="show"] .cat-name,
html[data-layout="show"] .kitten-name,
html[data-layout="show"] .litter-name,
html[data-layout="show"] .nav-logo,
html[data-layout="show"] .footer-logo,
html[data-layout="show"] h1, html[data-layout="show"] h2, html[data-layout="show"] h3 {
  font-family: 'Baloo 2', 'Nunito Sans', sans-serif;
  font-weight: 700; text-transform: none; text-shadow: none; -webkit-text-stroke: 0;
}

/* Kopfleiste: dunkel, leicht durchscheinend, Verlaufs-Marke */
html[data-layout="show"] nav:not(.footer-links) {
  background: rgba(14, 7, 25, 0.88) !important;
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border) !important;
}
html[data-layout="show"] .nav-logo {
  background: var(--s-verlauf); -webkit-background-clip: text; background-clip: text;
  color: transparent !important; font-size: 1.35rem;
}
html[data-layout="show"] .nav-logo em { color: transparent; font-style: normal; }
html[data-layout="show"] .nav-logo .nav-logo-sub {
  background: none; -webkit-background-clip: initial; background-clip: initial;
  color: var(--text-muted); font-family: 'Nunito Sans', sans-serif; font-size: 10px;
  letter-spacing: 0.22em; text-transform: uppercase; font-style: normal;
}
/* A-816: Grund nur fuer die Klappleiste am Handy. Am PC lag die Liste mit
   0,96 Deckkraft auf der Leiste mit 0,88 - ueber einem Kopfbild ein
   sichtbarer Kasten um das Menue. */
@media (max-width: 900px) {
  html[data-layout="show"] .nav-links { background: rgba(14, 7, 25, 0.96) !important; }
}
html[data-layout="show"] .nav-links a {
  /* A-816: hier stand var(--text-soft). Shows Leiste ist in jeder Welt
     fest dunkel (rgba(14,7,25)), die Schrift folgte aber der Welt - mit
     Rosé oder Birke stand sie dunkel auf dunkel (gemessen 2,1:1). Fester
     heller Wert, Shows eigene weiche Schrift aus Neon. */
  color: #CFC7E6; font-weight: 700; font-size: 13px;
  border-radius: 999px; padding: 6px 12px;
}
/* A-1414: am 1366er-Laptop brach Shows Menue um (gemessen zwei Zeilen,
   „Kontakt" allein). Die Pillen tragen ihren Abstand selbst. */
@media (min-width: 901px) and (max-width: 1500px) {
  html[data-layout="show"] .nav-links { gap: 0.2rem; }
  html[data-layout="show"] .nav-links a { padding: 6px 9px; }
}
html[data-layout="show"] .nav-links a:hover,
html[data-layout="show"] .nav-links a.nav-current { color: #0E0719; background: var(--s-tuerkis); }
html[data-layout="show"] .nav-hamburger span { background: var(--s-tuerkis); }
html[data-layout="show"].hat-zuchtlogo .nav-med-link { position: relative; display: inline-block; width: 40px; height: 44px; }
html[data-layout="show"].hat-zuchtlogo .nav-med-link .nav-med { opacity: 0; width: 40px; height: 44px; object-fit: contain; }
html[data-layout="show"].hat-zuchtlogo .nav-med-link::before {
  content: ""; position: absolute; inset: 0;
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background: var(--s-verlauf);
}

/* Laufschrift: Verlaufsband */
html[data-layout="show"] .kitten-ticker { background: var(--s-verlauf) !important; border: none; }
html[data-layout="show"] .ticker-item { color: #10061F; font-weight: 800; font-size: 12.5px; }
html[data-layout="show"] .ticker-item:hover, html[data-layout="show"] a.ticker-item:hover { color: #fff; }
html[data-layout="show"] .ticker-sep { color: rgba(16, 6, 31, 0.55); }

/* Held: Farbnebel, grosser Baloo-Titel mit Verlaufs-em, sanfter Auftritt */
html[data-layout="show"] .hero,
html[data-layout="show"] .page-hero,
html[data-layout="show"] .katze-detail-hero,
html[data-layout="show"] .kt-hero {
  background: var(--hero-verlauf) !important; border-bottom: 1px solid var(--border) !important; color: var(--text);
}
html[data-layout="show"] .hero { min-height: 74vh; }
html[data-layout="show"] .hero-content::before { display: none; }
html[data-layout="show"] .hero-eyebrow {
  color: var(--s-tuerkis); letter-spacing: 0.3em; font-weight: 800;
  text-shadow: none; -webkit-text-stroke: 0; transform: rotate(-1.2deg);
}
html[data-layout="show"] .hero-eyebrow::before, html[data-layout="show"] .hero-eyebrow::after { display: none; }
html[data-layout="show"] .hero-title {
  color: var(--text); line-height: 1.04; letter-spacing: -0.01em;
  font-size: clamp(2.6rem, 7vw, 5.4rem); text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="show"] .hero-title em {
  background: var(--s-verlauf); -webkit-background-clip: text; background-clip: text;
  color: transparent; font-style: normal;
}
html[data-layout="show"] .hero-tagline,
html[data-layout="show"] .hero-quote {
  color: var(--text-soft); font-family: 'Nunito Sans', sans-serif; font-style: normal;
  font-size: clamp(1rem, 1.5vw, 1.2rem); text-shadow: none; -webkit-text-stroke: 0;
}
@media (prefers-reduced-motion: no-preference) {
  html[data-layout="show"] .hero-eyebrow,
  html[data-layout="show"] .hero-title,
  html[data-layout="show"] .hero-tagline,
  html[data-layout="show"] .hero-quote,
  html[data-layout="show"] .hero-cta {
    animation: show-auftritt 0.9s cubic-bezier(0.16, 1, 0.3, 1) backwards;
  }
  html[data-layout="show"] .hero-title { animation-delay: 0.12s; }
  html[data-layout="show"] .hero-tagline, html[data-layout="show"] .hero-quote { animation-delay: 0.24s; }
  html[data-layout="show"] .hero-cta { animation-delay: 0.36s; }
}
@keyframes show-auftritt {
  from { opacity: 0; transform: translateY(26px); }
  to { opacity: 1; transform: none; }
}

/* Knoepfe: Pillen mit Verlauf */
html[data-layout="show"] .btn,
html[data-layout="show"] .btn-warm,
html[data-layout="show"] .btn-ghost,
html[data-layout="show"] .btn-waitlist,
html[data-layout="show"] .btn-waitlist-open {
  border-radius: 999px; font-weight: 800; letter-spacing: 0.04em; text-transform: none; font-size: 14px;
}
html[data-layout="show"] .btn-warm,
html[data-layout="show"] .btn-waitlist,
html[data-layout="show"] .btn-waitlist-open {
  background: var(--s-verlauf); color: #10061F; border: none;
}
html[data-layout="show"] .btn-warm:hover { filter: brightness(1.12); }
html[data-layout="show"] .btn-ghost { border: 2px solid var(--s-tuerkis); color: var(--s-tuerkis); background: transparent; }
html[data-layout="show"] .btn-ghost:hover { background: var(--s-tuerkis); color: #10061F; }

/* Abschnitte: gekippte Marken, Verlaufsbalken */
html[data-layout="show"] .section-label {
  color: var(--s-tuerkis); letter-spacing: 0.3em; font-weight: 800; text-transform: uppercase;
  transform: rotate(-1.2deg); display: inline-block;
}
html[data-layout="show"] .section-title {
  padding-left: 0; border-bottom: none; color: var(--text);
  font-size: clamp(1.8rem, 4vw, 2.8rem);
}
html[data-layout="show"] .section-title::before { display: none; }
html[data-layout="show"] .section-title em {
  background: var(--s-verlauf); -webkit-background-clip: text; background-clip: text;
  color: transparent; font-style: normal;
}
html[data-layout="show"] .divider { background: var(--s-verlauf); height: 4px; width: 72px; border-radius: 999px; }

/* Karten: dunkle Kacheln, Kipp-Hover, Tuerkis-Kante */
html[data-layout="show"] .cat-card,
html[data-layout="show"] .kitten-card,
html[data-layout="show"] .card,
html[data-layout="show"] .litter-card {
  background: var(--card); border: 1px solid var(--border); border-radius: 18px; box-shadow: var(--shadow);
}
html[data-layout="show"] .cat-card:hover,
html[data-layout="show"] .kitten-card:hover {
  transform: translateY(-6px) rotate(-0.6deg); border-color: var(--s-tuerkis); box-shadow: var(--shadow);
}
@media (prefers-reduced-motion: reduce) {
  html[data-layout="show"] .cat-card:hover,
  html[data-layout="show"] .kitten-card:hover { transform: none; }
}
html[data-layout="show"] .cat-photo,
html[data-layout="show"] .kitten-photo { border-radius: 18px 18px 0 0; border-bottom: 2px solid var(--s-tuerkis); }
html[data-layout="show"] .cat-photo img,
html[data-layout="show"] .kitten-photo img,
html[data-layout="show"] .gallery-item img { border: none; }
html[data-layout="show"] .gallery-item { border-radius: 14px; border: 1px solid var(--border); }
html[data-layout="show"] .gallery-item:hover { border-color: var(--amber); }
html[data-layout="show"] .cat-name,
html[data-layout="show"] .kitten-name,
html[data-layout="show"] .litter-name { color: var(--text); }
html[data-layout="show"] .cat-gender,
html[data-layout="show"] .kitten-status,
html[data-layout="show"] .cat-title-badge {
  border-radius: 999px; background: var(--s-verlauf); color: #10061F; border: none;
  font-weight: 800; letter-spacing: 0.03em; backdrop-filter: none;
}
html[data-layout="show"] input, html[data-layout="show"] textarea, html[data-layout="show"] select {
  border-radius: 12px; border: 1px solid var(--border); background: var(--card-bg); color: var(--text);
}
html[data-layout="show"] input:focus, html[data-layout="show"] textarea:focus { border-color: var(--s-tuerkis); }

/* Unterseitenkoepfe */
html[data-layout="show"] .page-hero h1,
html[data-layout="show"] .katze-detail-hero h1,
html[data-layout="show"] .kt-hero h1 {
  font-family: 'Baloo 2', sans-serif; color: var(--text); font-weight: 700;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="show"] .page-hero h1 em {
  background: var(--s-verlauf); -webkit-background-clip: text; background-clip: text;
  color: transparent; font-style: normal;
}
html[data-layout="show"] .page-hero .section-eyebrow,
html[data-layout="show"] .katze-detail-hero .section-eyebrow,
html[data-layout="show"] .kt-hero .section-eyebrow {
  color: var(--s-tuerkis); letter-spacing: 0.3em; font-weight: 800;
  text-shadow: none; -webkit-text-stroke: 0;
}

/* Fusszeile: dunkles Panel mit Verlaufskante */
html[data-layout="show"] footer {
  background: var(--cream-dark) !important; border-top: none !important; color: var(--text-muted);
  position: relative;
}
html[data-layout="show"] footer::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--s-verlauf);
}
html[data-layout="show"] .footer-logo {
  background: var(--s-verlauf); -webkit-background-clip: text; background-clip: text; color: transparent;
}
html[data-layout="show"] .footer-logo em { color: transparent; font-style: normal; }
html[data-layout="show"] .footer-col-title { color: var(--s-tuerkis); opacity: 1; }
/* A-764: --text-soft ist gegen --warm-white geprueft, die Fusszeile
   steht aber auf --cream-dark; dort fiel sie auf 1.22. */
html[data-layout="show"] footer a { color: var(--text); }
html[data-layout="show"] footer a:hover { color: var(--s-tuerkis); }
@media (max-width: 999px) {
  html[data-layout="show"] nav:not(.footer-links) {
    background: rgba(14, 7, 25, 0.94) !important; border-bottom: 1px solid var(--border) !important;
  }
  html[data-layout="show"] .nav-logo { font-size: 1.1rem; }
}

/* ══════════════════════════════════════════════════════════════════════════
   SCHRIFTPAARE (A-273, Liste D3) — der Schriften-Regler
   --------------------------------------------------------------------------
   Vier kuratierte Paare aus den VORHANDENEN Schriften (kein neuer Download):
   serifen  = Cormorant Garamond + Archivo   („Elegant")
   rund     = Baloo 2 + Nunito Sans          („Freundlich")
   gerade   = Archivo + Archivo              („Klar")
   gemischt = Cormorant Garamond + Nunito    („Editorial")
   Ohne Eintrag gilt die Schrift der Vorlage. Die Schicht steht am ENDE der
   Datei und gewinnt damit gegen die Vorlagen-Bloecke (keine der Vorlagen
   setzt font-family mit !important — gemessen vor dem Bau).
   ══════════════════════════════════════════════════════════════════════════ */
html[data-schrift="serifen"] .hero-title,
html[data-schrift="serifen"] .section-title,
html[data-schrift="serifen"] .cat-name,
html[data-schrift="serifen"] .kitten-name,
html[data-schrift="serifen"] .litter-name,
html[data-schrift="serifen"] .nav-logo,
html[data-schrift="serifen"] .footer-logo,
html[data-schrift="serifen"] h1, html[data-schrift="serifen"] h2, html[data-schrift="serifen"] h3 {
  font-family: 'Cormorant Garamond', Georgia, serif;
}
html[data-schrift="serifen"] body,
html[data-schrift="serifen"] input,
html[data-schrift="serifen"] textarea,
html[data-schrift="serifen"] select,
html[data-schrift="serifen"] button {
  font-family: 'Archivo', system-ui, sans-serif;
}

html[data-schrift="rund"] .hero-title,
html[data-schrift="rund"] .section-title,
html[data-schrift="rund"] .cat-name,
html[data-schrift="rund"] .kitten-name,
html[data-schrift="rund"] .litter-name,
html[data-schrift="rund"] .nav-logo,
html[data-schrift="rund"] .footer-logo,
html[data-schrift="rund"] h1, html[data-schrift="rund"] h2, html[data-schrift="rund"] h3 {
  font-family: 'Baloo 2', 'Nunito Sans', sans-serif;
}
html[data-schrift="rund"] body,
html[data-schrift="rund"] input,
html[data-schrift="rund"] textarea,
html[data-schrift="rund"] select,
html[data-schrift="rund"] button {
  font-family: 'Nunito Sans', system-ui, sans-serif;
}

html[data-schrift="gerade"] .hero-title,
html[data-schrift="gerade"] .section-title,
html[data-schrift="gerade"] .cat-name,
html[data-schrift="gerade"] .kitten-name,
html[data-schrift="gerade"] .litter-name,
html[data-schrift="gerade"] .nav-logo,
html[data-schrift="gerade"] .footer-logo,
html[data-schrift="gerade"] h1, html[data-schrift="gerade"] h2, html[data-schrift="gerade"] h3 {
  font-family: 'Archivo', system-ui, sans-serif;
}
html[data-schrift="gerade"] body,
html[data-schrift="gerade"] input,
html[data-schrift="gerade"] textarea,
html[data-schrift="gerade"] select,
html[data-schrift="gerade"] button {
  font-family: 'Archivo', system-ui, sans-serif;
}

html[data-schrift="gemischt"] .hero-title,
html[data-schrift="gemischt"] .section-title,
html[data-schrift="gemischt"] .cat-name,
html[data-schrift="gemischt"] .kitten-name,
html[data-schrift="gemischt"] .litter-name,
html[data-schrift="gemischt"] .nav-logo,
html[data-schrift="gemischt"] .footer-logo,
html[data-schrift="gemischt"] h1, html[data-schrift="gemischt"] h2, html[data-schrift="gemischt"] h3 {
  font-family: 'Cormorant Garamond', Georgia, serif;
}
html[data-schrift="gemischt"] body,
html[data-schrift="gemischt"] input,
html[data-schrift="gemischt"] textarea,
html[data-schrift="gemischt"] select,
html[data-schrift="gemischt"] button {
  font-family: 'Nunito Sans', system-ui, sans-serif;
}

/* A-1466: „Schwungvoll" - Lobster fuer die Ueberschriften (Silke, 09.10.2026:
   ihr Logo traegt den Zuchtnamen in Lobster, die Seite soll dazu passen).
   Nur Ueberschriften: nicht die Versalzeilen (.section-eyebrow), nicht das
   Menue, nicht die Knoepfe, nicht der Zuchtname in Kopf und Fuss (den regelt
   die Markenschrift, A-756). Lobster gibt es in einem Schnitt: kein Fett,
   kein Kursiv, keine Versalien - sonst zeichnet der Browser Ersatz, und
   Wild/Verspielt setzen Ueberschriften gross. Text: Nunito Sans. */
html[data-schrift="lobster"] .hero-title,
html[data-schrift="lobster"] .section-title,
html[data-schrift="lobster"] .cat-name,
html[data-schrift="lobster"] .kitten-name,
html[data-schrift="lobster"] .litter-name,
html[data-schrift="lobster"] h1, html[data-schrift="lobster"] h2, html[data-schrift="lobster"] h3 {
  font-family: 'Lobster', 'Cormorant Garamond', cursive;
  font-weight: 400; font-style: normal; text-transform: none; letter-spacing: 0.01em;
}
html[data-schrift="lobster"] :is(h1, h2, h3, .hero-title, .section-title) em { font-style: normal; font-weight: 400; }
/* A-1499 (Silke, 10.10.2026 im Telefonat: „Schrift kursiv farblich
   unterschiedlich"): der Name im Fuss stand zweigeteilt - erstes Wort
   gerade, der Rest kursiv in der Zweitfarbe (ein Rest aus Babajewos Namen).
   Mit „Schwungvoll" steht er wie ihr Logo: ganz in Lobster, eine Farbe,
   nicht kursiv. Eine eigene Markenschrift (A-756) geht weiter vor. Der
   Fuss steht als Elternteil davor, damit die Vorlagenregeln
   (html[data-layout=…] .footer-logo em, 0,2,2) darunter liegen. */
html[data-schrift="lobster"]:not([data-marke]) footer .footer-logo,
html[data-schrift="lobster"]:not([data-marke]) footer .footer-logo em {
  font-family: 'Lobster', 'Cormorant Garamond', cursive; font-weight: 400; font-style: normal;
}
html[data-schrift="lobster"] footer .footer-logo em { color: inherit; -webkit-text-fill-color: currentColor; }
/* A-1503 (Torsten, 10.10.2026, nach dem Fuss: „und kopf ist immer noch
   kursiv"): derselbe Name oben im Kopf, dieselbe Regel. Die Vorlagen setzen
   den kursiven Teil mit bis zu 0,4,2 (wild/verspielt/edel: html[…] nav:not(…)
   .nav-logo .nav-logo-sub) - das doppelte [data-schrift] hebt diese Regel
   auf 0,5,2 darueber, ganz ohne Vorrangmarke. Lobster ist von sich aus eine
   schraege Schreibschrift; kursiv gesetzt wird nichts mehr. */
/* A-1504 (Torsten, 10.10.2026, Silkes Kopf live: „das K und alles ist
   kursiv!"): Silke hat dazu die Markenschrift Lobster gewaehlt - die Regeln
   oben liessen jede Markenschrift aus, und der kursive Teil blieb. Lobster
   als Markenschrift ist dieselbe Schrift: dort gilt die Regel mit. */
html[data-schrift="lobster"][data-schrift]:is(:not([data-marke]), [data-marke="lobster"]) nav .nav-logo,
html[data-schrift="lobster"][data-schrift]:is(:not([data-marke]), [data-marke="lobster"]) nav .nav-logo em,
html[data-schrift="lobster"][data-schrift]:is(:not([data-marke]), [data-marke="lobster"]) nav .nav-logo .nav-logo-sub {
  font-family: 'Lobster', 'Cormorant Garamond', cursive; font-weight: 400; font-style: normal;
}
html[data-schrift="lobster"][data-schrift]:is(:not([data-marke]), [data-marke="lobster"]) nav .nav-logo em,
html[data-schrift="lobster"][data-schrift]:is(:not([data-marke]), [data-marke="lobster"]) nav .nav-logo .nav-logo-sub { color: inherit; -webkit-text-fill-color: currentColor; font-size: 1em; }
/* A-1504: und allgemein. Von den 25 Markenschriften hat nur Cormorant einen
   Kursivschnitt (fonts/fonts.css). Bei allen anderen kippte der Browser die
   Buchstaben fuer den kursiven Namensteil kuenstlich - bei Schreibschriften
   wie Lobster, Great Vibes oder Allura sieht man das sofort. Dort steht der
   Teil jetzt aufrecht; Farbe und Groesse bleiben, wie die Vorlage sie setzt. */
html[data-marke]:not([data-marke="cormorant"]) :is(nav .nav-logo em, nav .nav-logo .nav-logo-sub, footer .footer-logo em) { font-style: normal; }
html[data-schrift="lobster"] body,
html[data-schrift="lobster"] input,
html[data-schrift="lobster"] textarea,
html[data-schrift="lobster"] select,
html[data-schrift="lobster"] button {
  font-family: 'Nunito Sans', system-ui, sans-serif;
}

/* A-274: Helle Vorlagen + Kopfbild = dunkle Schrift auf Foto (Design-QS-Fund
   bei den Schriftproben). Die Platte aus der Magazin-Vorlage, aber NUR wenn
   wirklich ein Kopfbild liegt — erkannt am Hero-Schleier, der ohne Bild
   `hidden` traegt (A-094). Ohne Bild bleibt alles exakt wie bisher. */
html[data-layout="edel"] .hero:has(.hero-overlay:not([hidden])) .hero-content {
  background: var(--cream); border: 1px solid var(--amber);
  padding: clamp(1.4rem, 4vw, 2.6rem) clamp(1.2rem, 4vw, 3rem);
}
html[data-layout="minimal"] .hero:has(.hero-overlay:not([hidden])) .hero-content {
  background: #FFFFFF;
  padding: clamp(1.4rem, 4vw, 2.6rem) clamp(1.2rem, 4vw, 3rem);
}

/* ══════════════════════════════════════════════════════════════════════════
   A-280 (Stufe 1): DIE VORLAGEN UNTERSCHEIDEN SICH AUCH IM KOERPER
   --------------------------------------------------------------------------
   Torstens Befund 15.08.2026: "die Templates muessen sich mehr
   unterscheiden". Bisher trugen die Vorlagen eigene Koepfe, Menues und
   Farben — Karten und Raster waren ueberall gleich. Jetzt bekommt jede
   ihren eigenen Rhythmus. Abnahme: Torsten am PC (Montag).
   ══════════════════════════════════════════════════════════════════════════ */

/* WILD: dichtes Plakat-Mosaik — Kacheln fast ohne Fugen, Namen wie gestanzt */
html[data-layout="wild"] .cats-grid { gap: 6px; }
html[data-layout="wild"] .cat-name,
html[data-layout="wild"] .kitten-name {
  text-transform: uppercase; letter-spacing: 0.08em; font-size: 1.15rem; font-weight: 700;
}
html[data-layout="wild"] .gallery-item { border-radius: 0; }

/* VERSPIELT: gekippte Polaroids — jede zweite Karte lehnt sich anders */
html[data-layout="verspielt"] .cats-grid { gap: 2.4rem 2rem; }
html[data-layout="verspielt"] .cat-card,
html[data-layout="verspielt"] .kitten-card { border-radius: 26px; }
@media (min-width: 700px) and (prefers-reduced-motion: no-preference) {
  html[data-layout="verspielt"] .cat-card:nth-child(odd),
  html[data-layout="verspielt"] .kitten-card:nth-child(odd) { transform: rotate(-1.1deg); }
  html[data-layout="verspielt"] .cat-card:nth-child(even),
  html[data-layout="verspielt"] .kitten-card:nth-child(even) { transform: rotate(1.1deg); }
  html[data-layout="verspielt"] .cat-card:hover,
  html[data-layout="verspielt"] .kitten-card:hover { transform: rotate(0deg) translateY(-4px); }
}

/* EDEL: Galerie-Haengung — viel Luft, Passepartout-Doppelrahmen */
html[data-layout="edel"] .cats-grid { gap: 3rem 2.4rem; }
html[data-layout="edel"] .cat-card,
html[data-layout="edel"] .kitten-card {
  outline: 1px solid var(--amber); outline-offset: 6px;
  margin: 7px;   /* Platz fuer den Aussenrahmen, sonst schneidet das Raster */
}
html[data-layout="edel"] .cat-name,
html[data-layout="edel"] .kitten-name { text-align: center; }
html[data-layout="edel"] .cat-gender { left: 50%; transform: translateX(-50%); right: auto; }

/* MINIMAL: strenge Ordnung — grosse Fugen, kleine Namen unter Haarlinie */
html[data-layout="minimal"] .cats-grid { gap: 3.2rem 2.6rem; }
html[data-layout="minimal"] .cat-name,
html[data-layout="minimal"] .kitten-name {
  font-size: 0.95rem; text-transform: uppercase; letter-spacing: 0.18em; font-weight: 700;
  border-top: 1px solid var(--text); padding-top: 0.6rem; margin-top: 0.2rem;
}

/* MAGAZIN: Editorial-Versatz — jede zweite Spalte haengt tiefer,
   Namen als grosse Serifen-Bildunterschriften */
@media (min-width: 1000px) and (prefers-reduced-motion: no-preference) {
  html[data-layout="magazin"] .cats-grid > *:nth-child(even) { transform: translateY(2.4rem); }
  html[data-layout="magazin"] .cats-grid { padding-bottom: 2.4rem; }
}
html[data-layout="magazin"] .cats-grid { gap: 3rem 2.6rem; }
html[data-layout="magazin"] .cat-name,
html[data-layout="magazin"] .kitten-name { font-size: 1.7rem; font-style: italic; }

/* SHOW: Buehnenlicht — Karten lehnen sich leicht, Glow beim Anfassen */
@media (min-width: 700px) and (prefers-reduced-motion: no-preference) {
  html[data-layout="show"] .cat-card:nth-child(odd),
  html[data-layout="show"] .kitten-card:nth-child(odd) { transform: rotate(-0.7deg); }
  html[data-layout="show"] .cat-card:nth-child(even),
  html[data-layout="show"] .kitten-card:nth-child(even) { transform: rotate(0.7deg); }
}
html[data-layout="show"] .cat-card:hover,
html[data-layout="show"] .kitten-card:hover {
  box-shadow: 0 0 0 2px var(--s-tuerkis), 0 22px 50px -18px rgba(255, 77, 141, 0.45);
}

/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „BÜHNE" (A-281, Torstens Demo-Vorlagen 15.08.2026)
   --------------------------------------------------------------------------
   Achte Richtung, nach Torstens hochgeladenen Demos: Schnee, Tinte,
   Tannengrün, Bernstein — Riesen-Typografie mit Zeilen-Auftritt,
   Magnet-Knöpfe, Haarlinien, weiche Enthüllungen. Die Bewegung liefert
   buehne.js als ZUSATZSCHICHT (nur bei dieser Vorlage geladen, reine
   Verzierung des vorhandenen Markups — die A-154-Sorge, Seitenlogik zu
   verdoppeln, bleibt gewahrt). Ohne Skript und bei reduzierter Bewegung
   steht alles sofort lesbar da.
   ══════════════════════════════════════════════════════════════════════════ */
html[data-layout="buehne"] {
  color-scheme: only light;   /* A-1493: „only", sonst dunkelt Chrome/Opera (Auto Dark) die helle Vorlage nach */
  --text: #1E1E1E;
  --text-soft: #5A5755;
  --text-muted: #8A8785;
  --cream: #EDEEE9;
  --cream-dark: #E3E5DE;
  /* A-1480 (Build 1235): wie bei Verspielt - die zweite Abschnittsfarbe
     haelt den hellen Grund fest, statt dem Thema zu folgen. */
  --warm-white: #F5F6F2;
  --card: #E3E5DE;
  --rose: #C8892B;
  --b-tann: #26372F;
  --hero-verlauf: #EDEEE9;
}
html[data-layout="buehne"] body { background: var(--cream) !important; color: var(--text); }
html[data-layout="buehne"] body,
html[data-layout="buehne"] input,
html[data-layout="buehne"] textarea,
html[data-layout="buehne"] select,
html[data-layout="buehne"] button { font-family: 'Archivo', system-ui, sans-serif; }
html[data-layout="buehne"] .section-title,
html[data-layout="buehne"] .hero-title,
html[data-layout="buehne"] .cat-name,
html[data-layout="buehne"] .kitten-name,
html[data-layout="buehne"] .litter-name,
html[data-layout="buehne"] .nav-logo,
html[data-layout="buehne"] .footer-logo,
html[data-layout="buehne"] h1, html[data-layout="buehne"] h2, html[data-layout="buehne"] h3 {
  font-family: 'Archivo', system-ui, sans-serif;
  font-weight: 800; letter-spacing: -0.035em; text-transform: none;
  text-shadow: none; -webkit-text-stroke: 0;
}

/* Kopfleiste: Schnee mit Blur, Haarlinie erst beim Scrollen (buehne.js) */
html[data-layout="buehne"] nav:not(.footer-links) {
  background: rgba(237, 238, 233, 0.82) !important;
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid transparent !important;
  transition: border-color 0.3s;
}
html[data-layout="buehne"] nav.gescrollt:not(.footer-links) { border-bottom-color: var(--border) !important; }
html[data-layout="buehne"] .nav-logo { color: var(--text) !important; font-size: 1.2rem; }
html[data-layout="buehne"] .nav-logo em { color: var(--amber); font-style: normal; }
html[data-layout="buehne"] .nav-logo .nav-logo-sub {
  font-size: 10px; color: var(--text-muted); letter-spacing: 0.2em;
  text-transform: uppercase; font-style: normal; font-weight: 500;
}
/* A-816 (Torsten: "hier ebenso das menü wie bei dem letzten", Bild mit
   Buehne ueber dem Kopfbild): Grund nur fuer die Klappleiste am Handy.
   Am PC lag die Liste mit 0,96 auf der Leiste mit 0,82 - ueber dem Foto
   ein heller Kasten um das Menue (gerechnet: 30 von 255 Stufen heller). */
@media (max-width: 900px) {
  html[data-layout="buehne"] .nav-links { background: rgba(237, 238, 233, 0.96) !important; }
}
html[data-layout="buehne"] .nav-links a {
  color: var(--text); font-size: 13px; font-weight: 500;
  position: relative; padding-bottom: 2px;
}
html[data-layout="buehne"] .nav-links a:hover,
html[data-layout="buehne"] .nav-links a.nav-current { color: var(--amber-dark); }
html[data-layout="buehne"] .nav-hamburger span { background: var(--text); }
html[data-layout="buehne"].hat-zuchtlogo .nav-med-link { position: relative; display: inline-block; width: 38px; height: 42px; }
html[data-layout="buehne"].hat-zuchtlogo .nav-med-link .nav-med { opacity: 0; width: 38px; height: 42px; object-fit: contain; }
html[data-layout="buehne"].hat-zuchtlogo .nav-med-link::before {
  content: ""; position: absolute; inset: 0;
  -webkit-mask-image: var(--wz-logo); mask-image: var(--wz-logo);
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain;
  background-color: var(--b-tann);
}

/* Laufschrift: Tannengrün, Bernstein-Trenner */
html[data-layout="buehne"] .kitten-ticker { background: var(--b-tann) !important; border: none; }
html[data-layout="buehne"] .ticker-item { color: #EDEEE9; font-size: 12px; letter-spacing: 0.1em; }
html[data-layout="buehne"] .ticker-item:hover, html[data-layout="buehne"] a.ticker-item:hover { color: var(--amber-light); }
html[data-layout="buehne"] .ticker-sep { color: var(--amber); }

/* Held: die Riesen-Typo — eng, schwer, fast randlos */
html[data-layout="buehne"] .hero,
html[data-layout="buehne"] .page-hero,
html[data-layout="buehne"] .katze-detail-hero,
html[data-layout="buehne"] .kt-hero {
  background: var(--cream) !important; border-bottom: 1px solid var(--border) !important; color: var(--text);
}
html[data-layout="buehne"] .hero { min-height: 86vh; justify-content: center; }
html[data-layout="buehne"] .hero-content {
  text-align: left; max-width: 1240px; width: 100%; margin: 0 auto;
  padding-left: clamp(1rem, 4vw, 4rem); padding-right: clamp(1rem, 4vw, 4rem);
}
html[data-layout="buehne"] .hero-content::before { display: none; }
html[data-layout="buehne"] .hero-eyebrow {
  color: var(--text-muted); justify-content: flex-start; letter-spacing: 0.28em;
  text-transform: uppercase; font-size: 11px; font-weight: 600;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="buehne"] .hero-eyebrow::before, html[data-layout="buehne"] .hero-eyebrow::after { display: none; }
html[data-layout="buehne"] .hero-title {
  color: var(--text); font-weight: 800; line-height: 0.95; letter-spacing: -0.045em;
  font-size: clamp(2.9rem, 9.5vw, 7.5rem); text-shadow: none; -webkit-text-stroke: 0;
  text-wrap: balance;
}
html[data-layout="buehne"] .hero-title em { color: var(--amber); font-style: normal; }
html[data-layout="buehne"] .hero-tagline,
html[data-layout="buehne"] .hero-quote {
  /* A-434 (510er-Nachmessung): var(--text-muted) stand mit 3,06:1 auf dem
     hellen Buehne-Grund — zu blass. Das loeste auf JEDER hellen
     Buehne-Startseite die A-416-Notfarbe aus, und die loeschte als
     Nebenwirkung den Gold-Akzent im Titel-em. Dunkler gestellt (=>5:1)
     ist die Zeile lesbar UND der Akzent bleibt. */
  color: #5C5852; font-family: 'Archivo', system-ui, sans-serif; font-style: normal;
  font-size: clamp(0.98rem, 1.4vw, 1.15rem); max-width: 38ch;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="buehne"] .hero-cta { justify-content: flex-start; display: flex; gap: 0.9rem; }
/* Mit Kopfbild: die Schnee-Platte, gleiche Logik wie Magazin/Edel (A-274) */
html[data-layout="buehne"] .hero:has(.hero-overlay:not([hidden])) .hero-content {
  background: var(--cream); padding-top: clamp(1.4rem, 4vw, 2.6rem); padding-bottom: clamp(1.4rem, 4vw, 2.6rem);
}

/* Magnet-Knöpfe: dunkle Pillen mit Bernstein-Punkt (Punkt via ::before) */
html[data-layout="buehne"] .btn,
html[data-layout="buehne"] .btn-warm,
html[data-layout="buehne"] .btn-ghost,
html[data-layout="buehne"] .btn-waitlist,
html[data-layout="buehne"] .btn-waitlist-open {
  border-radius: 999px; font-weight: 600; letter-spacing: 0; text-transform: none; font-size: 14px;
  will-change: transform;
}
html[data-layout="buehne"] .btn-warm,
html[data-layout="buehne"] .btn-waitlist,
html[data-layout="buehne"] .btn-waitlist-open {
  background: var(--text); color: var(--cream); border: none;
}
html[data-layout="buehne"] .btn-warm::before,
html[data-layout="buehne"] .btn-waitlist::before {
  content: ""; display: inline-block; width: 7px; height: 7px; border-radius: 50%;
  background: var(--amber); margin-right: 9px; vertical-align: 1px;
}
html[data-layout="buehne"] .btn-warm:hover { background: var(--b-tann); }
html[data-layout="buehne"] .btn-ghost { border: 1px solid var(--text); color: var(--text); background: transparent; }
html[data-layout="buehne"] .btn-ghost:hover { background: var(--text); color: var(--cream); }

/* Abschnitte: Zahlen-lose Strenge, Haarlinien, Eyebrow-Sprache */
html[data-layout="buehne"] .section-label {
  color: var(--text-muted); letter-spacing: 0.28em; font-size: 11px; font-weight: 600; text-transform: uppercase;
}
html[data-layout="buehne"] .section-title {
  padding-left: 0; border-bottom: none; color: var(--text);
  font-size: clamp(1.9rem, 4.6vw, 3.4rem); line-height: 1.02;
}
html[data-layout="buehne"] .section-title::before { display: none; }
html[data-layout="buehne"] .section-title em { color: var(--amber); font-style: normal; }
html[data-layout="buehne"] .divider { background: var(--text); height: 1px; width: 56px; }

/* Karten: flache Schnee-Kacheln, Bild trägt, Meta-Zeile wie im Demo-Raster */
html[data-layout="buehne"] .cats-grid { gap: 14px; }
html[data-layout="buehne"] .cat-card,
html[data-layout="buehne"] .kitten-card,
html[data-layout="buehne"] .card,
html[data-layout="buehne"] .litter-card {
  background: transparent; border: none; border-radius: 8px; box-shadow: none; overflow: hidden;
}
html[data-layout="buehne"] .cat-card:hover,
html[data-layout="buehne"] .kitten-card:hover { transform: none; box-shadow: none; }
html[data-layout="buehne"] .cat-photo,
html[data-layout="buehne"] .kitten-photo { border-radius: 8px; border-bottom: none; overflow: hidden; }
html[data-layout="buehne"] .cat-photo img,
html[data-layout="buehne"] .kitten-photo img,
html[data-layout="buehne"] .gallery-item img { border: none; transition: transform 0.5s cubic-bezier(0.2, 0.6, 0.2, 1); }
html[data-layout="buehne"] .cat-card:hover .cat-photo img,
html[data-layout="buehne"] .kitten-card:hover .kitten-photo img { transform: scale(1.04); }
html[data-layout="buehne"] .gallery-item { border-radius: 8px; border: none; box-shadow: none; }
html[data-layout="buehne"] .cat-name,
html[data-layout="buehne"] .kitten-name { color: var(--text); font-size: 1.05rem; font-weight: 600; letter-spacing: -0.01em; }
html[data-layout="buehne"] .cat-gender,
html[data-layout="buehne"] .kitten-status,
html[data-layout="buehne"] .cat-title-badge {
  border-radius: 999px; background: rgba(18, 21, 26, 0.72); color: #EDEEE9; border: none;
  font-weight: 600; letter-spacing: 0.04em; backdrop-filter: blur(4px);
}
html[data-layout="buehne"] input, html[data-layout="buehne"] textarea, html[data-layout="buehne"] select {
  border-radius: 10px; border: 1px solid var(--border); background: #FFFFFF; color: var(--text);
}
html[data-layout="buehne"] input:focus, html[data-layout="buehne"] textarea:focus { border-color: var(--amber); }

/* Unterseitenköpfe */
html[data-layout="buehne"] .page-hero h1,
html[data-layout="buehne"] .katze-detail-hero h1,
html[data-layout="buehne"] .kt-hero h1 {
  font-weight: 800; letter-spacing: -0.04em; color: var(--text);
  font-size: clamp(2.3rem, 6.5vw, 4.8rem); line-height: 0.98;
  text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="buehne"] .page-hero h1 em { color: var(--amber); font-style: normal; }
html[data-layout="buehne"] .page-hero .section-eyebrow,
html[data-layout="buehne"] .katze-detail-hero .section-eyebrow,
html[data-layout="buehne"] .kt-hero .section-eyebrow {
  color: var(--text-muted); letter-spacing: 0.28em; text-shadow: none; -webkit-text-stroke: 0;
}

/* Fußzeile: Tannengrün */
html[data-layout="buehne"] footer { background: var(--b-tann) !important; border-top: none !important; color: #B9C4BD; }
html[data-layout="buehne"] .footer-logo { color: #EDEEE9; }
html[data-layout="buehne"] .footer-logo em { color: var(--amber-light); font-style: normal; }
html[data-layout="buehne"] .footer-col-title { color: var(--amber-light); opacity: 1; }
html[data-layout="buehne"] footer a { color: #B9C4BD; }
html[data-layout="buehne"] footer a:hover { color: #EDEEE9; }

/* ── Bausteine für buehne.js (ohne Skript unsichtbar/harmlos) ── */
/* Zeilen-Auftritt des Hero-Titels */
html[data-layout="buehne"] .b-zeile { display: block; overflow: hidden; }
html[data-layout="buehne"] .b-zeile > span { display: block; }
@media (prefers-reduced-motion: no-preference) {
  html[data-layout="buehne"]:not([data-motion="sparsam"]) .b-zeile > span {
    transform: translateY(108%); transition: transform 0.9s cubic-bezier(0.7, 0, 0.2, 1);
  }
  html[data-layout="buehne"]:not([data-motion="sparsam"]) body.b-bereit .b-zeile > span { transform: none; }
  html[data-layout="buehne"]:not([data-motion="sparsam"]) body.b-bereit .b-zeile:nth-child(2) > span { transition-delay: 0.08s; }
  html[data-layout="buehne"]:not([data-motion="sparsam"]) body.b-bereit .b-zeile:nth-child(3) > span { transition-delay: 0.16s; }
  /* Enthüllung beim Scrollen */
  html[data-layout="buehne"]:not([data-motion="sparsam"]) .b-auf {
    opacity: 0; transform: translateY(26px);
    transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.7, 0, 0.2, 1);
  }
  html[data-layout="buehne"]:not([data-motion="sparsam"]) .b-auf.b-da { opacity: 1; transform: none; }
}
/* Filter-Pillen über den Tier-Gittern */
html[data-layout="buehne"] .b-filter { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 1.1rem; }
html[data-layout="buehne"] .b-pille {
  border: 1px solid var(--border); border-radius: 999px; padding: 6px 14px; font-size: 13px;
  background: #FFFFFF; color: var(--text); cursor: pointer; font-family: inherit;
  display: inline-flex; gap: 7px; align-items: center; transition: 0.18s;
}
html[data-layout="buehne"] .b-pille small { color: var(--text-muted); font-variant-numeric: tabular-nums; }
html[data-layout="buehne"] .b-pille[aria-pressed="true"] { background: var(--text); color: var(--cream); border-color: var(--text); }
html[data-layout="buehne"] .b-pille[aria-pressed="true"] small { color: rgba(237, 238, 233, 0.6); }
/* Energie-Widget */
/* A-434: buehne.js haengt Energie-Widget und Mauszeiger-Kreis an <body>.
   Wechselt die Vorschau die Vorlage (Buehne -> Show), blieben sie als
   nackter Text im Seitenfluss stehen — ihre Styles gelten nur unter
   Buehne. Ohne Buehne sind sie schlicht weg. */
html:not([data-layout="buehne"]) .b-energie,
html:not([data-layout="buehne"]) .b-zeiger { display: none !important; }
html[data-layout="buehne"] .b-energie {
  position: fixed; right: clamp(12px, 3vw, 40px); bottom: 20px; z-index: 70; width: 260px;
  background: var(--card); border: 1px solid var(--border); border-radius: 14px; padding: 13px;
  box-shadow: var(--shadow); font-size: 13px; color: var(--text);
}
html[data-layout="buehne"] .b-energie.b-zu .b-inhalt { display: none; }
html[data-layout="buehne"] .b-energie h4 {
  margin: 0; font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--text-muted); font-weight: 600; cursor: pointer;
}
html[data-layout="buehne"] .b-inhalt { margin-top: 10px; display: grid; gap: 10px; }
html[data-layout="buehne"] .b-inhalt p { margin: 0; color: var(--text-muted); font-size: 12px; line-height: 1.45; }
html[data-layout="buehne"] .b-schalter { display: flex; align-items: center; justify-content: space-between; gap: 10px; border-top: 1px solid var(--border); padding-top: 9px; }
html[data-layout="buehne"] .b-schalter strong { font-weight: 600; font-size: 13px; }
html[data-layout="buehne"] .b-knopf {
  width: 44px; height: 24px; border-radius: 999px; background: var(--border);
  position: relative; flex: 0 0 auto; transition: background 0.25s; border: none; cursor: pointer;
}
html[data-layout="buehne"] .b-knopf::after {
  content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px;
  border-radius: 50%; background: var(--cream); transition: transform 0.25s;
}
html[data-layout="buehne"] .b-knopf[aria-pressed="true"] { background: var(--amber); }
html[data-layout="buehne"] .b-knopf[aria-pressed="true"]::after { transform: translateX(20px); }
@media (max-width: 640px) { html[data-layout="buehne"] .b-energie { width: auto; left: 12px; right: 12px; bottom: 10px; } }
/* Eigener Zeiger nur auf feinen Zeigern */
html[data-layout="buehne"] .b-zeiger {
  position: fixed; top: 0; left: 0; width: 32px; height: 32px; border: 1px solid var(--text);
  border-radius: 50%; pointer-events: none; z-index: 110; display: none;
  transform: translate(-50%, -50%); transition: width 0.22s, height 0.22s, background 0.22s;
}
html[data-layout="buehne"] .b-zeiger.b-gross { width: 64px; height: 64px; background: rgba(200, 137, 43, 0.35); border-color: transparent; }
@media (hover: hover) and (pointer: fine) {
  html[data-layout="buehne"]:not([data-motion="sparsam"]) .b-zeiger { display: block; }
}
/* Dunkle Fassung (Energie-Widget-Schalter) */
html[data-layout="buehne"][data-buehne-dunkel] {
  --cream: #0D1013; --cream-dark: #12171B; --warm-white: #0D1013;
  --card: #161B1E; --card-bg: #161B1E; --card-bg-alt: #1B2125;
  --card-border: rgba(232, 234, 229, 0.16); --border: rgba(232, 234, 229, 0.16);
  --text: #E8EAE5; --text-soft: #C2C8C2; --text-muted: #98A39E;
  --hero-verlauf: #0D1013;
  color-scheme: dark;
}
html[data-layout="buehne"][data-buehne-dunkel] nav:not(.footer-links) { background: rgba(13, 16, 19, 0.82) !important; }
@media (max-width: 900px) {   /* A-816: nur die Klappleiste */
  html[data-layout="buehne"][data-buehne-dunkel] .nav-links { background: rgba(13, 16, 19, 0.96) !important; }
}
html[data-layout="buehne"][data-buehne-dunkel] input,
html[data-layout="buehne"][data-buehne-dunkel] textarea,
html[data-layout="buehne"][data-buehne-dunkel] select { background: #161B1E; }
html[data-layout="buehne"][data-buehne-dunkel] .b-pille { background: #161B1E; }
html[data-layout="buehne"][data-buehne-dunkel] .btn-warm,
html[data-layout="buehne"][data-buehne-dunkel] .btn-waitlist,
html[data-layout="buehne"][data-buehne-dunkel] .btn-waitlist-open { background: #E8EAE5; color: #12151A; }

/* ══════════════════════════════════════════════════════════════════════════
   A-463: HIER STAND DER AKZENT-DURCHGRIFF AUS A-285 — UND ER IST WEG
   --------------------------------------------------------------------------
   A-285 (16.08.2026) sollte Torstens Befund beheben: "nur eine Vorlage
   laesst sich wirklich ueber das Farbthema veraendern." Neun Regeln
   (html[data-layout][data-theme="rose"] … "mauve" plus der Show-Verlauf)
   drehten die vier Akzent-Rollen zurueck, damit ein gewaehltes Farbthema
   ueber den Vorlagen-Akzent gewinnt.

   Drei Tage spaeter kam der Gegenbefund (A-429, Sprachnachricht vom 19.08.:
   "Nachtrot ist einfach komplett blau"). Ein helles Farbthema, das in JEDER
   Vorlage durchschlaegt, macht Wild und Minimal blaeulich. Seitdem gilt:
   Farbthemen wirken nur in der Standard-Vorlage, "dark" und seine
   getoenten Fassungen ueberall (A-424/A-467). Durchgesetzt wird das an drei
   Stellen — themaWert() im Worker, die Wache in gemeinsam.js, und seit
   A-463 auch auf der Familienseite.

   Damit koennen data-layout und ein HELLES data-theme nicht mehr am selben
   <html> stehen, und die neun Regeln waren nicht mehr erreichbar.
   Nachgemessen am 20.08.2026 vor dem Loeschen: 256 Kombinationen aus acht
   Vorlagen, acht Farbthemen und vier Wegen — kein einziger Treffer. Die
   EINE Ausnahme war /familie/<zeichen>, die als einzige Seite weder
   serverseitig filterte noch gemeinsam.js laedt; sie lieferte
   <html data-theme="blue" data-layout="wild">. Das war kein Grund, die
   Regeln zu behalten, sondern der Fehler selbst: eine Wild-Zucht schickte
   ihre Familien auf eine Seite, die als einzige anders aussah als der Rest
   der Zucht. Behoben in A-463, danach war der Durchgriff wirklich tot.

   Das Anliegen von A-285 ist nicht fallengelassen, es ist anders geloest:
   A-467 laesst die getoenten Dunkelfassungen durch jede Vorlage — damit
   laesst sich der Hintergrund ueberall umstellen, ohne dass ein helles
   Thema die Identitaet der Vorlage ueberschreibt.
   ══════════════════════════════════════════════════════════════════════════ */

/* ══════════════════════════════════════════════════════════════════════════
   VORLAGE „ATELIER" (A-754, Stufe 6 des Fahrplans — Torstens Entwurf vom
   18.08.2026, atelier-komplett-2.html: "gefaellt mir persoenlich besser als
   Magazin")
   --------------------------------------------------------------------------
   Neunte Richtung: eine gerahmte Seite auf einer grauen Wand, wie ein Blatt
   in einer Galerie. Oben ein Markenband mit dem Zuchtnamen in grosser
   Serife, darunter eine schmale Leiste, ruhige Serifen-Ueberschriften,
   Jost im Fliesstext, Karten mit Haarlinie statt Schatten.

   NUR STRUKTUR, KEINE FARBE. Das ist der ganze Unterschied zu den acht
   aelteren Vorlagen: Atelier setzt kein einziges Farb-Token. Es nimmt die
   vier Rollen aus dem Thema (A-745) — Wand ist --text-muted (das gedaempfte
   Grau, das jedes der 30 Themen fuehrt), Rahmen ist --cream, Karte ist
   --warm-white, Linie ist --border. Damit wirken alle 30 Themen in Atelier,
   ohne dass hier jemand nachrechnen muss; die Farbwache (A-747) hat es
   schon getan. Einzige Literale: die zwei neutralen Texturen auf der Wand
   (rgba schwarz/weiss), die in jedem Thema stimmen.

   REINE CSS-SCHICHT wie Magazin: dasselbe Markup, dieselbe obere Leiste.
   Der Rahmen entsteht ohne Huelle — jedes Kind von <body> bekommt dieselbe
   Breite, denselben Grund und eine Haarlinie links und rechts; aneinander
   gesetzt lesen sie sich als ein Blatt. Ein Wrapper haette das Markup aller
   Seiten angefasst.

   Das Markenband ist die bestehende Kopfleiste, nur umgestellt: <nav> wird
   zur Spalte, .nav-brand zentriert und gross, .nav-links darunter als
   Leiste. Am Handy (bis 900px, die Hamburger-Grenze der Grundvorlage)
   bleibt alles wie in Standard — dort tragen Hamburger und Klappmenue, und
   die brauchen die Zeile.

   Schriften: Jost fuer den Text, Cormorant Garamond fuer Ueberschriften und
   das Markenband — das Paket "fein" des Entwurfs. Beide liegen seit A-752
   lokal; die Suite pruef-schriften-766 haelt das fest.
   ══════════════════════════════════════════════════════════════════════════ */
html[data-layout="atelier"] {
  --a-breite: 1120px;
  --hero-verlauf: var(--cream);
}
html[data-layout="atelier"] body {
  background-color: var(--text-muted) !important;
  background-image:
    repeating-linear-gradient(93deg, rgba(0,0,0,0.035) 0 2px, transparent 2px 7px),
    repeating-linear-gradient(178deg, rgba(255,255,255,0.045) 0 1px, transparent 1px 9px);
  background-attachment: fixed;
  color: var(--text);
  padding: 28px 18px 48px;
  font-family: 'Jost', system-ui, sans-serif;
}
html[data-layout="atelier"] input,
html[data-layout="atelier"] textarea,
html[data-layout="atelier"] select,
html[data-layout="atelier"] button { font-family: 'Jost', system-ui, sans-serif; }

/* Der Rahmen: jedes Kind von body auf Blattbreite, mit Grund und Haarlinie.
   Schwebende Knoepfe (WhatsApp, Hoch) sind fixed und stehen ausserhalb.

   A-767 (Build 776): `div` FEHLTE — und damit jede Unterseite. Torstens
   Befund vom 03.09. mit Bildschirmfoto seiner FAQ-Seite: der Kopf lief ueber
   die volle Fensterbreite, waehrend das Markenband darueber im Blatt stand.
   Gemessen bei 1440px: Band 1120 breit ab 153, Kopfbild 1389 ab 18.
   Der Grund stand hier: die Startseite baut aus `section`, jede Unterseite
   aus `div` (`.page-hero`, `.faq-wrap`, `.kontakt-cta`, …) — die Liste kannte
   nur die erste Bauweise. Ausgenommen bleibt die Lichtbox: sie ist ein
   Vollbild-Vorhang und gehoert nicht ins Blatt. */
html[data-layout="atelier"] body > nav:not(.footer-links),
html[data-layout="atelier"] body > .kitten-ticker,
html[data-layout="atelier"] body > section,
html[data-layout="atelier"] body > main,
html[data-layout="atelier"] body > article,
html[data-layout="atelier"] body > div:not(#lightbox):not(.lightbox),
html[data-layout="atelier"] body > footer {
  max-width: var(--a-breite);
  margin-left: auto !important;
  margin-right: auto !important;
  background-color: var(--cream);
  border-left: 1px solid var(--border);
  border-right: 1px solid var(--border);
}
html[data-layout="atelier"] body > footer { border-bottom: 1px solid var(--border); margin-top: 0 !important; }

/* Markenband: die Kopfleiste als Spalte — Zuchtname gross und mittig,
   darunter die Leiste. Ab 901px, darunter bleibt die Standard-Zeile. */
@media (min-width: 901px) {
  html[data-layout="atelier"] nav:not(.footer-links) {
    flex-direction: column; align-items: stretch; height: auto;
    padding: 26px 22px 0; background: var(--cream) !important;
    border-bottom: 1px solid var(--border) !important;
  }
  html[data-layout="atelier"] .nav-brand { justify-content: center; width: 100%; gap: 0.8rem; }
  html[data-layout="atelier"] .nav-logo {
    font-family: 'Cormorant Garamond', Georgia, serif;
    font-size: clamp(1.9rem, 3.4vw, 2.9rem); font-weight: 600; line-height: 1.05;
    color: var(--amber-dark); white-space: normal; text-align: center;
  }
  html[data-layout="atelier"] .nav-logo em { color: var(--amber); font-size: 1em; }
  /* A-756: das Markenband nimmt den Faktor der Markenschrift. */
  html[data-layout="atelier"][data-marke] .nav-logo { font-size: calc(clamp(1.9rem, 3.4vw, 2.9rem) * var(--marke-faktor, 1)); }
  html[data-layout="atelier"] .nav-links {
    width: 100%; margin: 18px 0 0; padding: 0; justify-content: center; gap: 0;
    border-top: 1px solid var(--border);
  }
  html[data-layout="atelier"] .nav-links a {
    display: block; padding: 14px 17px; font-size: 13.5px; font-weight: 600;
    letter-spacing: 0.01em; text-transform: none; color: var(--text);
  }
  html[data-layout="atelier"] .nav-links a:hover { color: var(--amber-dark); }
  html[data-layout="atelier"] .nav-links a.nav-current {
    color: var(--amber-dark); box-shadow: inset 0 -2px 0 var(--amber-dark);
  }
}
@media (max-width: 900px) {
  html[data-layout="atelier"] body { padding: 0; }
  html[data-layout="atelier"] body > nav:not(.footer-links),
  html[data-layout="atelier"] body > .kitten-ticker,
  html[data-layout="atelier"] body > section,
  html[data-layout="atelier"] body > main,
  html[data-layout="atelier"] body > article,
  html[data-layout="atelier"] body > div:not(#lightbox):not(.lightbox),
  html[data-layout="atelier"] body > footer { border-left: 0; border-right: 0; }
  html[data-layout="atelier"] nav:not(.footer-links) { background: var(--cream) !important; }
  html[data-layout="atelier"] .nav-logo { font-family: 'Cormorant Garamond', Georgia, serif; color: var(--amber-dark); }
  html[data-layout="atelier"] .nav-links { background: var(--cream) !important; }
  html[data-layout="atelier"] .nav-links a { color: var(--text); }
  html[data-layout="atelier"] .nav-hamburger span { background: var(--text); }
}

/* Laufschrift: leise, im Rahmen */
html[data-layout="atelier"] .kitten-ticker {
  background: var(--cream-dark) !important; color: var(--text-soft);
  border-top: 1px solid var(--border); border-bottom: 1px solid var(--border);
}
html[data-layout="atelier"] .ticker-item { color: var(--text-soft); font-size: 12px; letter-spacing: 0.08em; }
html[data-layout="atelier"] .ticker-item:hover, html[data-layout="atelier"] a.ticker-item:hover { color: var(--amber-dark); }
html[data-layout="atelier"] .ticker-sep { color: var(--amber-dark); }

/* Held: kein Foto-Vorhang, ein ruhiger Kopf im Blatt. Das Kopfbild bleibt
   als leiser Hauch dahinter, die Schrift steht dunkel auf dem Grund — deshalb
   weg mit dem weissen Schatten der Grundvorlage. */
html[data-layout="atelier"] .hero,
html[data-layout="atelier"] .page-hero,
html[data-layout="atelier"] .katze-detail-hero,
html[data-layout="atelier"] .kt-hero {
  background: var(--cream) !important; color: var(--text);
  border-bottom: 1px solid var(--border);
}
html[data-layout="atelier"] .hero { min-height: 52vh; }
html[data-layout="atelier"] .hero-bg { opacity: 0.16; }
html[data-layout="atelier"] .hero-overlay { background: linear-gradient(180deg, var(--cream) 0%, transparent 45%, var(--cream) 100%); }
html[data-layout="atelier"] .hero-title,
html[data-layout="atelier"] .hero-eyebrow,
html[data-layout="atelier"] .hero-content,
html[data-layout="atelier"] .hero-content p,
html[data-layout="atelier"] .page-hero .section-title,
html[data-layout="atelier"] .page-hero .section-eyebrow,
html[data-layout="atelier"] .katze-detail-hero .section-title,
html[data-layout="atelier"] .katze-detail-hero .section-eyebrow,
html[data-layout="atelier"] .kt-hero .section-title,
html[data-layout="atelier"] .kt-hero .section-eyebrow { color: var(--text); text-shadow: none; -webkit-text-stroke: 0; }
html[data-layout="atelier"] .hero-title,
html[data-layout="atelier"] .page-hero .section-title,
html[data-layout="atelier"] .katze-detail-hero .section-title,
html[data-layout="atelier"] .kt-hero .section-title { color: var(--amber-dark); }
html[data-layout="atelier"] .hero-scroll { display: none; }

/* Ueberschriften und Marken */
html[data-layout="atelier"] .section-title,
html[data-layout="atelier"] .hero-title,
html[data-layout="atelier"] .cat-name,
html[data-layout="atelier"] .kitten-name,
html[data-layout="atelier"] .litter-name,
html[data-layout="atelier"] .footer-logo,
html[data-layout="atelier"] h1, html[data-layout="atelier"] h2, html[data-layout="atelier"] h3 {
  font-family: 'Cormorant Garamond', Georgia, serif; font-weight: 600;
  letter-spacing: 0.01em; text-transform: none; text-shadow: none; -webkit-text-stroke: 0;
}
html[data-layout="atelier"] .section-title { color: var(--amber-dark); }
html[data-layout="atelier"] .section-label,
html[data-layout="atelier"] .hero-eyebrow,
html[data-layout="atelier"] .fact-label,
html[data-layout="atelier"] .kontakt-label,
html[data-layout="atelier"] .footer-col-title,
html[data-layout="atelier"] .cat-ems,
html[data-layout="atelier"] .kitten-ems {
  font-family: 'Jost', system-ui, sans-serif; text-transform: uppercase;
  letter-spacing: 0.16em; font-weight: 600; font-size: 11px; color: var(--text-muted);
}
html[data-layout="atelier"] .divider { background: var(--border); height: 1px; width: 48px; }

/* Karten: Haarlinie statt Schatten, ein Hauch Hebung beim Zeigen */
html[data-layout="atelier"] .cat-card,
html[data-layout="atelier"] .kitten-card,
html[data-layout="atelier"] .litter-card {
  background: var(--warm-white); border: 1px solid var(--border); border-radius: 0;
  box-shadow: none; transition: border-color .2s, transform .2s;
}
html[data-layout="atelier"] .cat-card:hover,
html[data-layout="atelier"] .kitten-card:hover { border-color: var(--amber-dark); transform: translateY(-3px); box-shadow: none; }
html[data-layout="atelier"] .cat-photo, html[data-layout="atelier"] .kitten-photo { border-radius: 0; }
html[data-layout="atelier"] .cat-name { color: var(--text); font-size: 1.15rem; }

/* Knoepfe: fest, eckig, im Akzent.
   OHNE Ersatzwert hinter dem Komma, anders als die vier Grundregeln oben:
   Atelier setzt kein einziges Farbliteral (A-754), und ein „, #ffffff"
   waere eines. :root gibt --auf-amber-dark ohnehin immer vor, der Ersatz
   traege also nie. Gefunden von pruef-atelier-768. */
html[data-layout="atelier"] .btn-warm,
html[data-layout="atelier"] .btn-waitlist,
html[data-layout="atelier"] .btn-waitlist-open {
  background: var(--amber-dark); color: var(--auf-amber-dark); border-radius: 0; border: none;
  font-family: 'Jost', system-ui, sans-serif; font-weight: 600; letter-spacing: 0.06em;
}
html[data-layout="atelier"] .btn-ghost { border-radius: 0; border-color: var(--border); color: var(--text); }

/* Fuss: ein Band am unteren Blattrand */
html[data-layout="atelier"] footer {
  background: var(--cream-dark) !important; color: var(--text-muted);
  border-top: 1px solid var(--border); padding: 1.6rem 2rem;
}
html[data-layout="atelier"] .footer-logo { color: var(--text); }
html[data-layout="atelier"] .footer-logo em { color: var(--amber-dark); font-style: italic; }
html[data-layout="atelier"] footer a { color: var(--text); }   /* A-764: 2.55 auf Granit */
html[data-layout="atelier"] footer a:hover { color: var(--text); }
html[data-layout="atelier"] .footer-col-title { color: var(--text-soft); opacity: 1; }

@media (prefers-reduced-motion: reduce) {
  html[data-layout="atelier"] .cat-card, html[data-layout="atelier"] .kitten-card { transition: none; }
  html[data-layout="atelier"] .cat-card:hover, html[data-layout="atelier"] .kitten-card:hover { transform: none; }
}

/* ══════════════════════════════════════════════════════════════════════════
   A-1351: DIE BREITE GEHOERT ZUM CHARAKTER DES DESIGNS
   ══════════════════════════════════════════════════════════════════════════
   Torsten, 02.10.2026: „alle cut ist lame". Gemessen bei 1920px endete der
   Inhalt in JEDEM Design bei 1160px (.container), nur Kopfbild und Flaechen
   liefen durch. Seine Antwort auf „alle breit?": „nicht alle breit machen
   … Variation", Schalter ja.

   Drei Breiten, je Design:
     BREIT   bis min(92vw, 1600px) - show, buehne, magazin, wild
     MITTEL  1360px               - standard (auch demo-farbe), verspielt
     SCHMAL  1160px wie bisher    - edel, minimal, atelier
   Gilt NUR fuer Karten- und Bildraster (Katzen, Kitten, Wuerfe, Galerie,
   Vermittelt, Preise); die Rahmen dort lesen --raster-breite (startseite.css,
   vermittelt.html). Fliesstext bleibt ueberall schmal: Abschnittstexte haben
   ihr eigenes Mass (.section-lead 540px, .litter-note 46rem), „Ueber uns" und
   „Kontakt" behalten 1160px.

   Der Schalter unter Website → Design (settings.seitenbreite) setzt
   data-breite am <html> (setzeSeitenbreite im Worker) und schlaegt das
   Design - deshalb stehen seine zwei Regeln HINTER den Design-Regeln
   (gleiche Spezifitaet, die spaetere gewinnt).

   Vorlagen mit fester Menuespalte (wild, verspielt, edel) bekommen nie mehr
   als den Platz neben der Spalte: max-width deckelt nur, es dehnt nicht.
   Atelier traegt sein eigenes Blatt (A-754, --a-breite) und bleibt darin. */
:root { --raster-breite: 1360px; --galerie-spalten: 4; }
html[data-layout="show"], html[data-layout="buehne"],
html[data-layout="magazin"], html[data-layout="wild"] { --raster-breite: min(92vw, 1600px); }
html[data-layout="edel"], html[data-layout="minimal"], html[data-layout="atelier"] { --raster-breite: 1160px; }
html[data-breite="schmal"] { --raster-breite: 1160px; }
html[data-breite="breit"] { --raster-breite: min(92vw, 1600px); }
/* A-1414 (Torsten, 06.10.2026: „würde schon gerne wieder Fullscreen …
   machen wir mal einen Schalter rein"): VOLLBILD als vierte Stufe. Breit
   brachte am 1920er nur 240px mehr. Hier nehmen Raster und Galerie den
   ganzen Platz, den das Design hat (Abschnitt ohne Innenabstand, neben einer
   Menuespalte nur neben ihr, bei Atelier das Blatt). Die Texte wachsen mit,
   aber lesbar: Regeln dafuer in startseite.css. Deckel siehe unten. */
html[data-breite="voll"] { --raster-breite: 100%; }
/* Breit heisst auch mehr Spalten in der Galerie - erst ab 1700px Fenster,
   darunter waeren fuenf Kacheln zu klein. Katzen-, Kitten- und Newsraster
   fuellen sich mit auto-fill von selbst. */
@media (min-width: 1700px) {
  html[data-layout="show"], html[data-layout="buehne"],
  html[data-layout="magazin"], html[data-layout="wild"] { --galerie-spalten: 5; }
  html[data-breite="schmal"] { --galerie-spalten: 4; }
  html[data-breite="breit"], html[data-breite="voll"] { --galerie-spalten: 5; }
}
/* A-1414: Vollbild ab 2200px sechs Galeriespalten, sonst wird jede Kachel
   ueber 400px breit. */
@media (min-width: 2200px) {
  html[data-breite="voll"] { --galerie-spalten: 6; }
}

/* ══════════════════════════════════════════════════════════════════════════
   A-768: DER DECKEL — auf sehr breiten Bildschirmen bekommt die Seite einen
   Rand statt sich zu strecken.
   ══════════════════════════════════════════════════════════════════════════
   Torsten, 03.09.2026, an seinem 28-Zoll-Vierfach-Bildschirm: „die Bilder
   ziehen sich ja ueber meine gaaaaaaanzen Monitor und werden nur noch zu so
   kleinen Sehschlitzen, wo ich vllt noch ein Auge oder die Nasenspitze
   sehe."

   GEMESSEN bei 3840px auf babajewo.com:
     Startseite, Kopfbild      1,8 zu 1   (waechst mit der Fensterhoehe)
     Unterseite, Kopfbild      6,9 zu 1   der Sehschlitz
     Textspalte                1160 von 3840, je 1340 leer

   Der Kopf einer Unterseite ist auf 556px Hoehe festgenagelt. Bei 1920px ist
   das ein Panorama, bei 3840px ein Briefschlitz. Und der Text steht in einer
   Spalte, um die herum zwei Drittel des Bildschirms leer bleiben.

   ZWEI ENTSCHEIDUNGEN, beide bewusst:
     · 1800px, nicht 1600. Bei 1600 wirkt ein gewoehnlicher 1920er-Schirm
       schon eingeengt, obwohl er kein Problem hat.
     · Erst ab 2040px Fensterbreite: 1800 plus zweimal 120. Darunter aendert
       sich fuer NIEMANDEN etwas, und wo der Deckel greift, ist der Rand von
       Anfang an breit genug, um wie Absicht auszusehen. Bei 1900 als
       Schwelle blieb auf einem 1920er-Schirm ein 53px-Streifen stehen —
       gemessen, und es sah nach Versehen aus.

   Der Rand traegt eine gedaempfte Fassung der Grundfarbe: bei jedem Thema
   sichtbar, nirgends laut. Atelier bleibt aussen vor, es hat seit A-754 sein
   eigenes Blatt (1120px auf getoenter Wand) — zwei Deckel uebereinander
   ergaeben einen doppelten Rahmen.

   DREI VORLAGEN BRAUCHEN EINEN ZWEITEN GRIFF. Wild, Edel und Verspielt
   haengen ihre Menuespalte mit `position: fixed` an den FENSTERrand; sie
   wuerde als Einzige draussen kleben bleiben. Sie wandert deshalb um
   dieselbe Randbreite nach innen. Dasselbe gilt fuer die schwebenden
   Knoepfe rechts unten.

   Warum hier und nicht am Dateiende: hinter dem letzten Vorlagenblock darf
   keine weitere `html[data-layout]`-Regel stehen (pruef-kontrast-484 haengt
   daran). */
/* A-817: der Raum fuer den Tafel-Ausbruch (A-730, weiter unten). Ohne
   Rahmen ist es das Fenster; Spaltenvorlagen ziehen ihre Spalte ab und
   2rem Luft (darin steckt die Bildlaufleiste - 100vw zaehlt sie mit,
   gemessen 7px unter der Spalte und 8px ueber den rechten Rand hinaus);
   Atelier nimmt sein Blatt (--a-breite) oder das Fenster minus 2 x 18px
   Rand. Unter dem Deckel setzt der Block darunter nach. */
:root { --tafel-raum: 100vw; }
@media (min-width: 1000px) {
  html[data-layout="wild"] { --tafel-raum: calc(100vw - var(--w-nav) - 2rem); }
  html[data-layout="verspielt"] { --tafel-raum: calc(100vw - var(--v-nav) - 2rem); }
  html[data-layout="edel"] { --tafel-raum: calc(100vw - var(--e-nav) - 2rem); }
}
html[data-layout="atelier"] { --tafel-raum: min(100vw - 36px, var(--a-breite)); }

@media (min-width: 2040px) {
  :root {
    --deckel: 1800px;
    --rand: calc((100vw - var(--deckel)) / 2);
  }
  html:not([data-layout="atelier"]) {
    background-color: color-mix(in srgb, var(--text) 16%, var(--cream));
  }
  html:not([data-layout="atelier"]) body {
    max-width: var(--deckel);
    margin-left: auto;
    margin-right: auto;
  }
  /* Die drei Menuespalten am Fensterrand nach innen holen. */
  html[data-layout="wild"] nav:not(.footer-links),
  html[data-layout="edel"] nav:not(.footer-links),
  html[data-layout="verspielt"] nav:not(.footer-links) { left: var(--rand); }
  /* A-817 (Torstens Befund 04.09.2026, Bild: Verspielt am breiten Schirm,
     "durch das begrenzen der seite ist die welle stehen geblieben"): die
     Noppenkante ist ein ::after der Spalte mit position: fixed und rechnete
     ihr left vom FENSTERrand. Die Spalte wanderte mit dem Deckel nach innen,
     die Kante blieb bei 251px stehen (gemessen: Spalte 380-640, Kante 251).
     Jetzt derselbe Versatz wie die Spalte. */
  html[data-layout="verspielt"] nav:not(.footer-links)::after { left: calc(var(--rand) + var(--v-nav) - 9px); }
  /* A-817: der Raum fuer den Tafel-Ausbruch ist unter dem Deckel der Deckel,
     bei den Spaltenvorlagen der Deckel ohne die Spalte. */
  html:not([data-layout="atelier"]) { --tafel-raum: var(--deckel); }
  html[data-layout="wild"] { --tafel-raum: calc(var(--deckel) - var(--w-nav)); }
  html[data-layout="verspielt"] { --tafel-raum: calc(var(--deckel) - var(--v-nav)); }
  html[data-layout="edel"] { --tafel-raum: calc(var(--deckel) - var(--e-nav)); }
  /* Und die schwebenden Knoepfe an den Blattrand statt an den Fensterrand. */
  html:not([data-layout="atelier"]) .whatsapp-btn,
  html:not([data-layout="atelier"]) .facebook-btn,
  html:not([data-layout="atelier"]) .instagram-btn { right: calc(var(--rand) + 2rem); }
  html:not([data-layout="atelier"]) .back-to-top { left: calc(var(--rand) + 2rem); }
}
/* A-1414: Vollbild schiebt den Deckel hinaus. Torsten: „macht ja keinen
   Sinn, wenn die Seite 2500 Pixel ist und der Text hat nur 200" - aber der
   Deckel fuer sehr breite Monitore (sein Vierfach-Schirm, A-768) bleibt.
   Bis 2720px (2560 plus zweimal 80) kein Deckel: 100vw ist breiter als der
   Platz neben der Bildlaufleiste, also deckelt max-width nichts und --rand
   wird 0 (Spalten und Knoepfe bleiben am Fensterrand). Darueber 2560px. */
@media (min-width: 2040px) and (max-width: 2719.98px) {
  html[data-breite="voll"] { --deckel: 100vw; }
}
@media (min-width: 2720px) {
  html[data-breite="voll"] { --deckel: 2560px; }
}
/* A-1445: DER RAHMEN UM DIE GEDECKELTE SEITE. Torsten, 06.10.2026: wo links
   und rechts Rand bleibt, stossen Aussen- und Seitenfarbe hart aneinander
   („grau und Lila … fehlt so ein Trenner, so ein Glow-Frame"). Drei
   Fassungen als Tafel gezeigt, am 07.10.: „die Varianten sind eigentlich
   alle ziemlich geil ... Ich kann mich da gar nicht entscheiden". Also eine
   WAHL unter Website → Design (settings.seitenrahmen, setzeSeitenrahmen im
   Worker setzt data-rahmen), mit Vorgabe je Vorlage: Schein fuer Show, Wild,
   Buehne; Doppelkante fuer Edel, Magazin; Schatten fuer Standard, Verspielt,
   Minimal. Atelier traegt sein eigenes Blatt und bleibt ohne, auch bei
   eigener Wahl (zwei Rahmen uebereinander).
   Nur wo der Deckel greift (ab 2040px). Die drei Fassungen stehen als
   Variablen am body, damit --amber, --text und --cream dort aufgeloest
   werden, wo das Design sie setzt; bei Atelier fehlen sie, var() ohne Wert
   heisst dort kein Schatten. Die Wahl steht HINTER den Vorlagen (gleiche
   Spezifitaet, die spaetere gewinnt). */
@media (min-width: 2040px) {
  html:not([data-layout="atelier"]) body {
    --rahmen-schatten: 0 0 0 1px color-mix(in srgb, var(--text) 18%, transparent), 0 0 80px 14px rgba(0,0,0,0.45);
    --rahmen-doppel: 0 0 0 1px color-mix(in srgb, var(--amber) 80%, transparent),
      0 0 0 9px color-mix(in srgb, var(--text) 16%, var(--cream)),
      0 0 0 10px color-mix(in srgb, var(--amber) 55%, transparent),
      0 0 50px 12px rgba(0,0,0,0.35);
    --rahmen-schein: 0 0 0 1px color-mix(in srgb, var(--amber) 70%, transparent), 0 0 70px 10px color-mix(in srgb, var(--amber) 45%, transparent);
    box-shadow: var(--rahmen-schatten);
  }
  html[data-layout="show"] body, html[data-layout="wild"] body, html[data-layout="buehne"] body { box-shadow: var(--rahmen-schein); }
  html[data-layout="edel"] body, html[data-layout="magazin"] body { box-shadow: var(--rahmen-doppel); }
  html[data-rahmen="aus"] body { box-shadow: none; }
  html[data-rahmen="schatten"] body { box-shadow: var(--rahmen-schatten); }
  html[data-rahmen="doppel"] body { box-shadow: var(--rahmen-doppel); }
  html[data-rahmen="schein"] body { box-shadow: var(--rahmen-schein); }
}
/* A-1445: Vollbild deckelt unter 2720px nicht (--deckel 100vw, siehe oben),
   dort ist kein Rand, also auch kein Rahmen. */
@media (min-width: 2040px) and (max-width: 2719.98px) {
  html[data-breite="voll"] body { box-shadow: none; }
}

/* Der folgende Block steht VOR A-430: die Dunkelfassungen von Verspielt
   und Minimal muessen ihn ueberschreiben koennen, und pruef-dunkel-511
   laesst hinter A-430 keine Regel mehr zu, die eine der beiden Vorlagen
   ohne [data-theme^="dark"] anfasst. */
/* ══════════════════════════════════════════════════════════════════════════
   A-769: MILCHGLAS — der Kasten im Kopf verdeckt das Foto nicht mehr.
   ══════════════════════════════════════════════════════════════════════════
   Torsten, 03.09.2026, zu einer Magazin-Vorschau: „sieht ja toll aus, aber
   der Kasten ist genau ueber der Katze … die Frage, alle transparent
   machen?"

   GEMESSEN bei 1920px, Anteil des undurchsichtigen Kastens an der Kopfflaeche:
     Buehne   40 %        Magazin  38 %
     Minimal  32 %        Edel     30 %

   Der Kasten sitzt mittig — also genau dort, wo auf einem Tierfoto das Tier
   steht. Vier Vorlagen verdecken damit ein Drittel ihres eigenen Kopfbildes,
   und zwar die Mitte.

   NICHT DIE ANTWORT: den Kasten weglassen. Er ist Charakter (die Papierplatte
   des Magazins, der Block der Buehne) und er traegt den Text auf einem Foto,
   dessen Helligkeit niemand kennt.

   DIE ANTWORT: Milchglas. Der Kasten wird durchscheinend und zeichnet weich,
   was hinter ihm liegt. Das Motiv bleibt sichtbar, der Text bleibt lesbar,
   der Charakter bleibt.

   UND DER SCHLEIER darf dort zurueckgenommen werden, wo ein Kasten den Text
   traegt: von 0,75 auf 0,5. Bei den Vorlagen OHNE Kasten (Standard, Wild,
   Show) bleibt er, wie er ist — dort steht die Schrift blank auf dem Foto,
   und die Helligkeit eines fremden Fotos ist nicht vorhersehbar.

   Wer keinen Weichzeichner kann (aeltere Browser), sieht den Kasten
   durchscheinend ohne Unschaerfe. Auch dann bleibt der Text lesbar: die
   Deckkraft allein reicht. */
/* A-783 (Torstens Meldung 03.09.: „die Seite meiner Mutter hat jetzt auch
   Milchglas“): Der Weichzeichner stand OHNE Vorlagenbedingung — und damit
   auch dort, wo es gar keinen Kasten gibt. Bei Standard, Wild und Show
   traegt .hero-content keinen Hintergrund; blur() zeichnet trotzdem alles
   weich, was in seinem Rechteck liegt. Ergebnis bei data-layout="standard":
   ein unscharfes Band mitten durch das Katzenfoto, ohne Rahmen, der es
   erklaert. Torsten hat es an der Seite seiner Mutter gesehen.

   Der Absatz darueber sagt es selbst: „Bei den Vorlagen OHNE Kasten
   (Standard, Wild, Show) bleibt er, wie er ist.“ Genau das stand in der
   Regel nicht. Jetzt tragen die vier Vorlagen MIT Kasten den Weichzeichner,
   und nur sie. */
/* NACHTRAG zu A-783, beim Messen gefunden: Weichzeichner und Kasten hingen
   an VERSCHIEDENEN Bedingungen. Den Hintergrund bekommen edel, minimal und
   buehne nur bei sichtbarem Schleier — und den blendet die Startseite selbst
   aus, wenn kein Kopfbild hinterlegt ist. Der Weichzeichner kam unbedingt.
   Ohne Kopfbild also wieder blur() ohne Kasten.

   Deshalb steht der Weichzeichner jetzt in DENSELBEN Regeln wie der
   Hintergrund. Zwei getrennte Regeln fuer eine Sache laufen auseinander —
   das ist keine Vermutung, sondern genau der Fehler, der hier zweimal
   dasselbe verursacht hat. */
html[data-layout="magazin"] .hero-content {
  background: color-mix(in srgb, var(--cream) 72%, transparent);
  backdrop-filter: blur(14px) saturate(1.08);
  -webkit-backdrop-filter: blur(14px) saturate(1.08);
}
html[data-layout="edel"] .hero:has(.hero-overlay:not([hidden])) .hero-content {
  background: color-mix(in srgb, var(--cream) 70%, transparent);
  backdrop-filter: blur(14px) saturate(1.08);
  -webkit-backdrop-filter: blur(14px) saturate(1.08);
}
html[data-layout="minimal"] .hero:has(.hero-overlay:not([hidden])) .hero-content {
  background: color-mix(in srgb, #FFFFFF 72%, transparent);
  backdrop-filter: blur(14px) saturate(1.08);
  -webkit-backdrop-filter: blur(14px) saturate(1.08);
}
html[data-layout="buehne"] .hero:has(.hero-overlay:not([hidden])) .hero-content {
  background: color-mix(in srgb, var(--cream) 72%, transparent);
  backdrop-filter: blur(14px) saturate(1.08);
  -webkit-backdrop-filter: blur(14px) saturate(1.08);
}
html[data-layout="magazin"] .hero .hero-overlay,
html[data-layout="edel"] .hero .hero-overlay,
html[data-layout="minimal"] .hero .hero-overlay,
html[data-layout="buehne"] .hero .hero-overlay {
  background: rgba(20, 18, 17, 0.5);
}

/* ── A-430: DUNKEL WIRKT AUCH IN VERSPIELT UND MINIMAL ────────────────────
   Beim flaechigen Nachmessen zu A-429 gefunden (Build 510): Beide Vorlagen
   halten ihren hellen Grund fest — Verspielt per Token-Spezifitaet
   (html[data-layout] schlaegt [data-theme=dark] am selben Element),
   Minimal nagelt Weiss mit !important fest. Die DUNKEL-SCHRIFT der
   globalen Regeln kam aber trotzdem an: weisse Schrift auf weissem Grund,
   fuer jede Besucherin mit dunklem Thema. Gemessen: Verspielt-Grund blieb
   #FFF9F0, Minimal rgb(255,255,255) bei --text #F0EDE8.

   Diese Bloecke stehen BEWUSST am Dateiende: gleiche !important-Staerke,
   hoehere Spezifitaet, spaetere Reihenfolge — sie gewinnen genau dann,
   wenn BEIDE Attribute stehen. Ohne dunkles Thema aendert sich nichts. */

/* Verspielt: die Flaechen dunkeln zur Pflaume ab (der Ton der Vorlage,
   --v-pflaume traegt schon Menue und Karten-Schatten), die bunten Akzente
   bleiben — sie sind auf dunklem Grund sogar kraeftiger. */
html[data-layout="verspielt"][data-theme^="dark"] {
  color-scheme: dark;
  --cream: #221721;
  --cream-dark: #2B1D29;
  --card: #2E2030;
  --hero-verlauf: #221721;
}
html[data-layout="verspielt"][data-theme^="dark"] body { background: var(--cream) !important; }

/* Minimal: Schwarzweiss, nur eben andersherum. Die Vorlage lebt vom
   Verzicht — dunkel heisst hier fast-schwarze Flaechen, sonst nichts. */
html[data-layout="minimal"][data-theme^="dark"] {
  color-scheme: dark;
  --card: #1D1D1D;
  --rose: #EAEAEA;
  --hero-verlauf: #161616;
  /* A-816 (Torsten: "menü in dunklen themen verändert sich nicht", Bild:
     Minimal, schwarze Leiste, schwarze Schrift darin): Seit A-764 haelt
     Minimals Grundblock ALLE Flaechen- und Schrift-Token fest (--cream
     #FFFFFF, --text #1E1E1E ...), und dieser Block hier - hoeher in der
     Spezifitaet - hat nur drei davon umgedreht. Ergebnis gemessen:
     Zuchtname und Menuepunkte 1,09:1 auf der schwarzen Leiste, weisse
     Abschnitte im schwarzen Blatt. "Schwarzweiss, nur eben andersherum"
     heisst: der ganze Satz dreht sich. Kontraste: --text auf #161616
     15,4:1, --text-muted auf #1D1D1D 5,3:1. */
  --cream: #161616;
  --cream-dark: #1D1D1D;
  --warm-white: #1D1D1D;
  --card-bg: #1D1D1D;
  --card-bg-alt: #262626;
  --card-border: #363636;
  --border: #2E2E2E;
  --text: #EAEAEA;
  --text-soft: #BDBDBD;
  --text-muted: #8F8F8F;
}
html[data-layout="minimal"][data-theme^="dark"] body,
html[data-layout="minimal"][data-theme^="dark"] input,
html[data-layout="minimal"][data-theme^="dark"] textarea,
html[data-layout="minimal"][data-theme^="dark"] select,
html[data-layout="minimal"][data-theme^="dark"] button,
html[data-layout="minimal"][data-theme^="dark"] .katze-detail-hero,
html[data-layout="minimal"][data-theme^="dark"] .kt-hero,
html[data-layout="minimal"][data-theme^="dark"] .hero,
html[data-layout="minimal"][data-theme^="dark"] .page-hero,
html[data-layout="minimal"][data-theme^="dark"] nav:not(.footer-links),
html[data-layout="minimal"][data-theme^="dark"] .nav-links,
html[data-layout="minimal"][data-theme^="dark"] .kitten-ticker,
html[data-layout="minimal"][data-theme^="dark"] footer {
  background: #161616 !important;
}

/* ── A-436: UNTERMENUES IN DEN SPALTEN-VORLAGEN ───────────────────────────
   Torstens Befund (19.08.): "bei verspielt klappt das Menue nach rechts
   anstatt nach unten aus" — und im Bildschirmfoto dazu: "der kleine Pfeil
   sollte an British Shorthair haengen, aber es ist ne Zeile tiefer".
   Zwei Symptome, eine Ursache.

   Wild, Verspielt und Edel stellen ihr Untermenue auf position: static —
   die Absicht ist ein Aufklappen INNERHALB der Spalte. Der Menuepunkt ist
   aber ein Flex-Container in Zeilenrichtung (Zeile 278), also reihte sich
   das Untermenue als dritter Nachbar NEBEN Link und Pfeil ein. Gemessen
   bei 1440 px: Verspielt 42 px breit rechts vom Punkt, Edel 60 px.

   Mit Flex und Umbruch ist das nicht sauber zu loesen: sobald ein Name lang
   ist ("British Shorthair"), reisst der Pfeil in die naechste Zeile — genau
   Torstens zweiter Befund. Ein Raster sagt die Aufteilung dagegen zu:
   Link und Pfeil teilen sich die erste Zeile (Link nimmt den Rest, Pfeil
   seine natuerliche Breite), das Untermenue bekommt IMMER die volle zweite.
   Unabhaengig von der Textlaenge.

   Nur ab 1000 px — darunter ist das Menue eine Klappleiste, keine Spalte. */
@media (min-width: 1000px) {
  /* A-426 (Build 509) gab der Menueliste flex-wrap: wrap, damit 13 Punkte in
     der WAAGERECHTEN Leiste umbrechen statt aus dem Bild zu laufen. Hier ist
     die Liste eine SPALTE — dort heisst wrap: sie bricht in mehrere Spalten
     um, und jeder Punkt wird nur so breit wie sein Text (148 px gemessen).
     Senkrecht braucht es keinen Umbruch. */
  html[data-layout="wild"] .nav-links,
  html[data-layout="verspielt"] .nav-links,
  html[data-layout="edel"] .nav-links {
    flex-wrap: nowrap;
  }
  html[data-layout="wild"] .nav-links > li.nav-has-sub,
  html[data-layout="verspielt"] .nav-links > li.nav-has-sub,
  html[data-layout="edel"] .nav-links > li.nav-has-sub {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    align-self: stretch;
  }
  /* Der Menuelink dieser Vorlagen traegt width: 100% (Verspielt Z. 2179,
     Wild/Edel ueber display:block im 100%-Punkt). Im Raster ist das
     unschaedlich — die Spalte begrenzt ihn —, aber min-width: 0 muss sein,
     sonst sprengt ein langes Wort die Spalte. */
  html[data-layout="wild"] nav:not(.footer-links) .nav-has-sub > .nav-parent-link,
  html[data-layout="verspielt"] nav:not(.footer-links) .nav-has-sub > .nav-parent-link,
  html[data-layout="edel"] nav:not(.footer-links) .nav-has-sub > .nav-parent-link {
    grid-column: 1;
    min-width: 0;
  }
  html[data-layout="wild"] .nav-has-sub > .nav-sub-toggle,
  html[data-layout="verspielt"] .nav-has-sub > .nav-sub-toggle,
  html[data-layout="edel"] .nav-has-sub > .nav-sub-toggle {
    grid-column: 2;
  }
  html[data-layout="wild"] .nav-has-sub > .nav-submenu,
  html[data-layout="verspielt"] .nav-has-sub > .nav-submenu,
  html[data-layout="edel"] .nav-has-sub > .nav-submenu {
    grid-column: 1 / -1;
  }
}
/* ── A-376: Die Schrift im Wurf-Band gehoert dem Band ──────────────────────
   Torstens Befund 1.1 vom 18.08.2026: Wurfname und Datum im Kopfband eines
   Wurfs waren dunkel auf fast schwarzem Grund — das Datum gar nicht mehr zu
   lesen, der gruene Knopf daneben einwandfrei.

   Ursache: Das Band (.litter-top) ist in jedem Thema dunkel (--hero-2) und
   setzt deshalb color:white. Vier Vorlagen faerben .litter-name aber wie
   einen Namen auf heller Kartenflaeche (zusammen mit .cat-name und
   .kitten-name, wo das richtig ist) und sind dabei spezifischer:

     html[data-layout="verspielt|edel|minimal|magazin"] .litter-name
       -> color: var(--text)

   Im Browser gemessen (messung-kontrast-484.mjs): 24 von 56 Kombinationen
   aus Vorlage und Thema lagen unter 3.0:1, die schlechtesten bei 1.8:1 —
   das Datum mit seiner opacity 0.7 sogar bei 1.5:1. Zum Vergleich: bei
   Standard, Wild, Show und Buehne sind es 6.4 bis 14.8:1.

   Die Regel steht bewusst am Dateiende und ist mit drei Klassen
   spezifischer als jeder Vorlagenblock — damit gilt sie fuer alle acht
   Vorlagen, auch fuer spaeter dazukommende. Das dunkle Thema behaelt seine
   eigene Regel mit Vorrang-Zusatz (gemessen 6.7:1) und wird hier nicht
   angefasst. */
.litter-card .litter-top .litter-name,
.litter-card .litter-top .litter-datum { color: #fff; }

/* ── A-415: LESBARKEIT ÜBER DEM KOPFBILD ──────────────────────────────────
   Gehört zu der Erkennung in gemeinsam.js (dort steht die Begründung und
   die Messung). Kurz: Liegt ein Foto im Kopfbereich, bekommt der Text eine
   verlässliche Unterlage — in JEDER Vorlage, auch in denen, die den
   Textschatten der Grundvorlage abschalten.

   Der Schleier ist ein eigenes Blatt (::after) und nicht Teil des
   Hintergrundbildes: Die Unterseiten setzen `background-image` per Skript
   mit `!important`, jede Änderung am Verlauf dort wäre 78-mal zu pflegen.
   Das Wild-Layout benutzt bereits ::before für seinen Winkel — deshalb
   ::after. */
html[data-kopfbild] .page-hero { position: relative; isolation: isolate; }
html[data-kopfbild] .page-hero::after {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  /* Oben etwas heller, unten dichter: die Überschrift steht mittig, der
     Fließtext darunter — und Fotos sind unten meist unruhiger. */
  background: linear-gradient(180deg, rgba(14, 13, 12, 0.42) 0%, rgba(14, 13, 12, 0.52) 55%, rgba(14, 13, 12, 0.62) 100%);
}
html[data-kopfbild] .page-hero > * { position: relative; z-index: 1; }
/* Der Schatten kommt zurück — er ist die zweite Sicherung, wenn ein Foto
   ausgerechnet an der Stelle hell ist, an der ein Buchstabe steht. Mit
   !important, weil die Vorlagen ihn ihrerseits mit !important abschalten. */
html[data-kopfbild] .page-hero h1,
html[data-kopfbild] .page-hero h1 em,
html[data-kopfbild] .page-hero .section-eyebrow,
html[data-kopfbild] .page-hero p {
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.85), 0 2px 12px rgba(0, 0, 0, 0.65) !important;
}
/* Farben, die auf einfarbigem Grund gut sitzen, verschwinden auf einem
   dunklen Foto (gemessen: Warmgrau 1,56:1, Bühnen-Grau 1,00:1). Über dem
   Bild schreibt jede Vorlage hell — die Akzentfarbe bleibt der Zeile
   darüber vorbehalten, die dafür kräftig genug ist. */
html[data-kopfbild] .page-hero h1,
html[data-kopfbild] .page-hero h1 em { color: #FFFFFF !important; }
html[data-kopfbild] .page-hero p { color: rgba(255, 255, 255, 0.92) !important; }
html[data-kopfbild] .page-hero .divider { opacity: 0.9; }
/* Auch die Zeile über der Überschrift: Bühne schreibt sie in Türkis (2,96:1),
   Wild in Rot (1,25:1) — hübsch auf einfarbigem Grund, unlesbar auf einem
   Foto. Über dem Bild schreibt sie hell; die Vorlage erkennt man weiter an
   Schrift, Anordnung und allem unterhalb des Kopfes. */
html[data-kopfbild] .page-hero .section-eyebrow {
  color: rgba(255, 255, 255, 0.9) !important;
}

/* ── A-416: NOTFARBE FÜR DEN KOPFBEREICH ──────────────────────────────────
   Gehört zur Messung in gemeinsam.js (dort steht die Begründung). Der
   Merker wird NUR gesetzt, wenn der Abstand tatsächlich zu klein ist —
   wo eine Vorlage gut aussieht, greift hier nichts.
   !important, weil die Vorlagen ihre Kopffarben ihrerseits mit !important
   setzen; ohne das gewönne die kaputte Kombination.
   Gefärbt wird die SCHRIFT, nicht der Kopf: Überschrift, die Zeile darüber
   und der Absatz. */
/* A-1413: nur die Zeilen, die gemessen unlesbar sind (data-notfarbe, von
   gemeinsam.js gesetzt) - eine gut lesbare Goldueberschrift bleibt Gold. */
html[data-kopf-notfarbe="dunkel"] .page-hero [data-notfarbe],
html[data-kopf-notfarbe="dunkel"] .page-hero [data-notfarbe] em,
html[data-kopf-notfarbe="dunkel"] .hero [data-notfarbe],
html[data-kopf-notfarbe="dunkel"] .hero [data-notfarbe] em { color: #1A1816 !important; }
html[data-kopf-notfarbe="hell"] .page-hero [data-notfarbe],
html[data-kopf-notfarbe="hell"] .page-hero [data-notfarbe] em,
html[data-kopf-notfarbe="hell"] .hero [data-notfarbe],
html[data-kopf-notfarbe="hell"] .hero [data-notfarbe] em { color: #F5F2EE !important; }

/* ── A-579 (Nachschlag): NIEDRIGE FENSTER ────────────────────────────────
   Nach dem Wegfall des 75-vh-Deckels passten 13 Menuepunkte mit offenem
   Untermenue bei 740, 700 und 640 Pixeln Fensterhoehe ohne Bildlauf. Bei
   560 fehlten noch 27 Pixel — gemessen live auf babajewo.com und
   demo-standard: „Kontakt" war dort weiterhin nur per Bildlauf zu finden.
   Und 560 ist keine Ausnahme: ein 800 Pixel hohes Handy hat nach Tab-,
   Adress- und Systemleiste ungefaehr diesen Bereich.

   Statt die Schrift zu verkleinern (die soll lesbar bleiben) wird das
   POLSTER kleiner: 0.85rem -> 0.62rem oben und unten spart rund 7 Pixel je
   Zeile. Bei 16 Zeilen sind das ueber 100 — mehr als genug, und die
   Tippflaeche bleibt mit knapp 34 Pixeln ueber der Daumengrenze.

   Nur wo es noetig ist: ab 640 Pixel Fensterhoehe abwaerts, und nur im
   Klappmenue (max-width: 900px). Auf normalen Geraeten aendert sich
   nichts. */
@media (max-width: 900px) and (max-height: 640px) {
  .nav-links li a { padding: 0.62rem 1.1rem; }
  .nav-submenu li a { padding: 0.5rem 1.1rem; }
}

/* A-581: Die zweite Verengung (0.44rem, Zeilen 29 Pixel) ist wieder
   heraus. Sie war noetig, solange DREIZEHN Punkte auf der obersten Ebene
   standen. Mit zehn reicht die erste Stufe: gemessen bei 560 Pixel
   Fensterhoehe sind es 354 Pixel Inhalt bei 491 verfuegbaren — reichlich
   Luft. Und 34 Pixel liest sich besser als 29.

   Das ist der Unterschied zwischen einer Reparatur an der Ursache und
   einer am Symptom: die Struktur hat den Platz geschaffen, den vorher
   die Schriftgroesse hergeben musste. */

/* ── A-684: DIE EMPFEHLUNGEN ALS BAUSTEIN ───────────────────────────────────
   „Was wir selbst benutzen" ist seit Build 712 ein Baustein, den jede Zucht
   auf ihre eigenen Seiten setzen kann (Torsten, 31.08.2026: „Empfehlung
   bleibt drin und soll Baustein der Seite werden").

   Die Regeln standen bis dahin NUR in empfehlungen.html, also auf genau
   einer Seite. `/seite/<slug>` lädt style.css und sonst nichts Eigenes —
   ohne diesen Umzug stünden die Karten dort nackt. Sie sind unverändert
   übernommen; empfehlungen.html trägt sie nicht mehr doppelt, sonst liefen
   zwei Fassungen desselben Aussehens auseinander.

   `.empf-copy` ist NICHT mitgekommen: der Kopierknopf braucht
   `copyEmpfCode`, und das gibt es nur auf der Empfehlungsseite. Auf einer
   selbst gebauten Seite steht der Code zum Markieren da. */
.empf-card { background: var(--warm-white); border-radius: 4px; padding: 1.5rem; margin-bottom: 1rem; display: flex; gap: 1.25rem; align-items: flex-start; flex-wrap: wrap; }
.empf-logo { max-height: 60px; max-width: 130px; object-fit: contain; border-radius: 4px; flex-shrink: 0; }
.empf-body { flex: 1; min-width: 220px; }
.empf-name { font-family: 'Cormorant Garamond', serif; font-size: 1.35rem; color: var(--amber-dark); margin-bottom: 0.3rem; }
.empf-ad { background: #8A6A4A; color: #fff; font-size: 0.6rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; padding: 0.15rem 0.45rem; border-radius: 20px; vertical-align: middle; margin-left: 0.4rem; }
.empf-text { font-size: 0.9rem; line-height: 1.65; color: var(--text); margin-bottom: 0.9rem; }
.empf-code-row { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 0.9rem; }
.empf-code { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 1rem; letter-spacing: 0.08em; background: var(--cream, #F3F0EC); border: 1px dashed var(--rose-gold); border-radius: 4px; padding: 0.4rem 0.8rem; color: var(--amber-dark); }
.empf-benefit { font-size: 0.85rem; color: var(--text-muted); }
.empf-link { display: inline-block; font-size: 0.8rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--amber-dark); text-decoration: none; border-bottom: 1px solid var(--rose-gold); }
.empf-disclosure { font-size: 0.78rem; color: var(--text-muted); line-height: 1.6; margin: 1.25rem 0 2.5rem; }
.empf-baustein { margin: 1.5rem 0; }

/* ══ A-718: DIE AHNENTAFEL — EINE HEIMAT FUER BEIDE SEITEN ═══════════
   Diese Regeln standen im eingebetteten Stilblock der KITTENSEITE.
   Die Tierseite (/katze/…) zeigt seit A-687 dieselbe Tafel — und hatte
   KEINE dieser Regeln: der Baum stand dort als nackte Einzelzeilen-
   Liste, an jedem Bildschirm. Gefunden von Torsten am PC, 01.09.
   Beide Seiten laden style.css; hier drift nichts auseinander. */
  .kt-section-label { font-size: 0.9rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: var(--rose-gold); text-align: center; margin: 2.5rem 0 1rem; }
  /* AHNENTAFEL: drei Generationen nebeneinander. Auf schmalen Schirmen bleibt
     das Raster in voller Breite und wird waagerecht geschoben — gestapelt
     verliert eine Ahnentafel ihren Sinn. */
  .ahnen-rahmen { overflow-x: auto; margin: 0.5rem 0 2rem; -webkit-overflow-scrolling: touch; }
  .ahnen { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; min-width: 560px; }
  .ahnen-kopf { font-size: 0.62rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-muted); padding-bottom: 0.35rem; text-align: center; }
  .ahnen-zelle {
    display: flex; align-items: center; justify-content: center; text-align: center;
    padding: 0.45rem 0.55rem; border-radius: 3px; background: var(--warm-white);
    border-left: 2px solid var(--rose-gold); font-size: 0.82rem; line-height: 1.25;
    min-height: 40px;
  }
  .ahnen-g1 { font-size: 0.98rem; font-family: 'Cormorant Garamond', serif; }
  .ahnen-g3 { font-size: 0.72rem; }
  .ahnen-leer { opacity: 0.3; font-style: italic; border-left-color: var(--border); }
  /* A-687: dieselbe Tafel, aber mit --ag Spalten statt fest drei. */
  /* A-730: 150px je Spalte war der Kompromiss fuer einen 760px-Rahmen.
     Mit dem Ausbruch ist Platz fuer 180px — Namen wie „CH (TICA), CH
     (FIFé) Voevoda Onix Gloria" brauchen ihn. */
  .ahnen-voll { grid-template-columns: repeat(var(--ag, 3), 1fr); min-width: calc(var(--ag, 3) * 180px); }
  .ahnen-zelle a { color: var(--amber-dark); text-decoration: none; border-bottom: 1px dotted currentColor; }
  .ahnen-zelle a:hover { border-bottom-style: solid; }
  .ahnen-hinweis { font-size: 0.75rem; color: var(--text-muted); margin-top: -1.4rem; margin-bottom: 2rem; }
  /* A-731: Der Aufklapper. Am Rechner gibt es ihn nicht — dort steht die
     ganze Tafel nebeneinander und nichts ist zu lang. Der Kasten bleibt
     bedienbar (nicht `hidden`, sondern aus dem Bild geschoben), damit die
     Tastatur ihn erreicht; sichtbar wird nur die Beschriftung. */
  .ahnen-schalter { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
  .ahnen-mehr { display: none; }
  /* Schmale Schirme: statt seitlich zu schieben, nach Generationen gestapelt.
     Das waagerechte Schieben funktionierte zwar, zeigte es aber nicht an —
     die Grosseltern sahen abgeschnitten aus. Eine flache Liste waere keine
     Ahnentafel mehr; gruppiert bleibt die Zuordnung lesbar.
     Umgesetzt ueber die order-Eigenschaft, weil im Markup erst alle drei
     Ueberschriften stehen und danach die Zellen. Die Rasterangaben in den
     style-Attributen bleiben unangetastet: in einem Flex-Behaelter sind sie
     wirkungslos. */
  @media (max-width: 620px) {
    .ahnen-rahmen { overflow-x: visible; }
    .ahnen { display: flex; flex-direction: column; min-width: 0; gap: 4px; }
    .ahnen-kopf { text-align: left; margin-top: 1.35rem; padding-bottom: 0.15rem; }
    .ahnen-zelle { justify-content: flex-start; text-align: left; }
    .ahnen-kopf:nth-child(1) { order: 1; margin-top: 0; }
    .ahnen-g1 { order: 2; }
    .ahnen-kopf:nth-child(2) { order: 3; }
    .ahnen-g2 { order: 4; }
    .ahnen-kopf:nth-child(3) { order: 5; }
    .ahnen-g3 { order: 6; }
    /* A-687: Die Reihenfolge-Regeln daruber stammen aus der Zeit, als das
       Gitter erst alle drei Ueberschriften und dann die Zellen ausgab. Die
       grosse Tafel gibt je Generation Ueberschrift UND Zellen zusammen aus
       — sie steht im Quelltext schon richtig und braucht kein Umsortieren.
       Ohne dieses Zuruecksetzen landen die Ueberschriften der 2. bis 6.
       Generation am Handy VOR allem anderen (order 0 gegen order 1). */
    .ahnen-voll .ahnen-kopf, .ahnen-voll .ahnen-zelle { order: 0; }
    /* ── A-731: EINGEKLAPPT BIS ZU DEN GROSSELTERN ──────────────────────
       Befund vom 01.09. aus der eingebauten Zucht: „Sieht super aus, nur
       scrollt man durch 100 Ahnen bis man das Tagebuch usw erreicht."
       (Der Name der Melderin steht bewusst nicht hier — im Stilblatt
       stehen keine Kundinnennamen, pruef-keinenamen-542 wacht darueber.)
       Bei fuenf Generationen
       stehen am Handy 62 Namen untereinander — die Tafel schiebt alles
       weg, was danach kommt (Entwicklung, Tagebuch, Wurfgeschwister).
       Zu sehen sind jetzt Eltern und Grosseltern; der Rest kommt auf
       Tippen. Weggenommen wird nichts: die Namen stehen im Quelltext, nur
       nicht im Bild. */
    .ahnen-schalter:not(:checked) ~ .ahnen-rahmen .ahnen-tief { display: none; }
    .ahnen-mehr {
      display: block; text-align: center; cursor: pointer;
      margin: 0.25rem 0 2rem; padding: 0.65rem 0.9rem;
      background: var(--warm-white); border: 1px solid var(--border);
      border-radius: 6px; color: var(--amber-dark);
      font-size: 0.78rem; letter-spacing: 0.06em;
    }
    .ahnen-mehr-auf { display: none; }
    .ahnen-schalter:checked ~ .ahnen-mehr .ahnen-mehr-zu { display: none; }
    .ahnen-schalter:checked ~ .ahnen-mehr .ahnen-mehr-auf { display: inline; }
    .ahnen-schalter:focus-visible ~ .ahnen-mehr { outline: 2px solid var(--amber-dark); outline-offset: 2px; }
    /* Der Hinweis zieht sich um 1.4rem nach oben — an der Tafel richtig,
       unter dem Schalter faellt er sonst hinein. */
    .ahnen-mehr + .ahnen-hinweis { margin-top: 0; }
  }

/* ══ A-719: DER AHNEN-ERKUNDER (Torstens Entwurf vom 01.09.) ═════════════
   Uebersichtskarte + Fokus-Ansicht am Handy, volle Spalten-Tafel ab 900px.
   Alle Farben haengen an den Theme-Variablen — der Entwurf trug feste
   Hexwerte und haette den Dunkelmodus gebrochen. Vater/Mutter-Blau/Rosa
   bleiben fest: sie sind Bedeutung, kein Thema, und halten auf hell wie
   dunkel. */
.aerk-kopf { padding: .55rem 0 .25rem; font-size: .87rem; font-weight: 700; line-height: 1.35; }
.aerk-brotkrume span[data-gp] { color: var(--amber-dark); cursor: pointer; font-weight: 400; }
.aerk-brotkrume i { color: var(--text-muted); font-style: normal; font-weight: 400; opacity: .6; }
.aerk-karte { display: block; width: 100%; height: 92px; background: var(--cream); border: 1px solid var(--border); border-radius: 8px; cursor: pointer; margin-bottom: .9rem; }
.aerk-fokus { background: var(--warm-white); border-radius: 10px; padding: .9rem 1rem; border-left: 4px solid var(--amber-dark); margin: 0 0 .9rem; }
.aerk-lbl { font-size: .7rem; letter-spacing: .09em; text-transform: uppercase; color: var(--text-muted); margin: 1.05rem 0 .45rem; }
.aerk-k { background: var(--warm-white); border-radius: 9px; padding: .7rem .85rem; margin-bottom: .5rem; border-left: 4px solid var(--border); display: flex; justify-content: space-between; gap: .5rem; cursor: pointer; }
.aerk-k.v { border-left-color: #4a7fc1; }
.aerk-k.m { border-left-color: #c1547c; }
.aerk-k.leer { opacity: .42; cursor: default; }
.aerk-nm { font-weight: 600; }
.aerk-meta { color: var(--text-muted); font-size: .8rem; margin-top: .15rem; }
.aerk-rolle { font-size: .67rem; letter-spacing: .08em; text-transform: uppercase; color: var(--text-muted); }
.aerk-ems { background: var(--cream-dark); padding: .05rem .3rem; border-radius: 3px; font-family: ui-monospace, monospace; font-size: .77rem; }
.aerk-nem { color: #a4560b; font-weight: 700; }
.aerk-pf { color: var(--text-muted); opacity: .5; font-size: 1.25rem; align-self: center; }
.aerk-gg { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }
.aerk-gg .aerk-k { display: block; padding: .55rem .65rem; }
.aerk-gg .aerk-nm { font-size: .84rem; }
.aerk-ende { background: var(--cream-dark); border: 1px dashed var(--border); border-radius: 9px; padding: .8rem .9rem; color: var(--text-muted); font-size: .85rem; }
.aerk-gehe { display: inline-block; margin-top: .4rem; font-size: .78rem; color: var(--amber-dark); text-decoration: none; border-bottom: 1px dotted currentColor; }
.aerk-hinweis { font-size: .75rem; color: var(--text-muted); margin: .6rem 0 2rem; }
#aerk-voll { display: none; }
@media (min-width: 900px) {
  #aerk-handy { display: none; }
  #aerk-voll { display: block; overflow-x: auto; background: var(--warm-white); border-radius: 10px; padding: 1rem; }
  .aerk-sp { display: flex; gap: 6px; }
  /* A-730: min-width:0 ist der entscheidende Zusatz. Ein Flex-Kind hat von
     Haus aus min-width:auto und waechst ueber seinen Anteil hinaus, sobald
     der Inhalt breiter ist — lange Ahnennamen taten genau das, und die
     Tafel wurde breiter als ihr Rahmen, obwohl die Ellipse laengst da war. */
  .aerk-col { display: flex; flex-direction: column; justify-content: space-around; flex: 1; min-width: 0; gap: 2px; }
  .aerk-z { font-size: 10px; line-height: 1.25; padding: 3px 5px; border-radius: 3px; background: var(--cream); border-left: 2px solid var(--border); cursor: pointer; overflow: hidden; }
  .aerk-z.v { border-left-color: #4a7fc1; }
  .aerk-z.m { border-left-color: #c1547c; }
  .aerk-z.pfad { background: var(--cream-dark); border-left-color: var(--amber-dark); font-weight: 600; }
  .aerk-z b { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .aerk-z i { font-style: normal; color: var(--text-muted); }
  .aerk-karte { height: 110px; }
}

/* ══ A-730: DIE AHNENTAFEL BRICHT AUS DEM TEXTRAHMEN AUS ═════════════════
   Torstens Befund vom 02.09., mit zwei Bildschirmfotos: beide Tafeln —
   die statische auf der Kittenseite und der Erkunder auf der Tierseite —
   liefen rechts aus dem Bild.

   Der Grund war nicht die Tafel, sondern ihr Rahmen: .kt-wrap ist 760px
   breit, weil Fliesstext bei etwa 65 Zeichen am besten lesbar ist. Eine
   Tafel ueber sechs Generationen braucht aber ueber 1000px — auf einem
   1900px-Bildschirm stand sie in einem 760px-Fenster und wurde
   abgeschnitten, waehrend links und rechts Platz frei blieb.

   Die Loesung ist der Ausbruch: negative Aussenabstaende ziehen die Tafel
   bis an die Fensterraender, ein Innenabstand haelt sie vom Rand fort.
   Der TEXT bleibt bei 760px — er soll ja lesbar bleiben; nur die Tafel
   nimmt sich, was sie braucht.

   Ab 1280px bekommt die Tafel Luft nach links und rechts, damit sie auf
   sehr breiten Schirmen nicht wie ein Banner wirkt. Am Handy (unter
   860px) bleibt alles wie es war: dort ist der Rahmen ohnehin so breit
   wie das Fenster, und die Tafel klappt auf ihre Spaltenform um. */
/* A-817 (Torstens Befund 04.09.2026, Bild: Atelier, "selbsterklärend :D"):
   Der Ausbruch rechnete mit 100vw - dem FENSTER. Seit A-754 (Atelier: das
   Blatt ist 1120 breit) und A-768 (der Deckel: 1800 ab 2040px) ist das
   Fenster aber nicht mehr der Rahmen, und in Wild, Verspielt und Edel war
   es das nie: dort steht links eine feste Spalte. Gemessen (mess-rahmen-
   817, Kittenseite, 1440px): Atelier 60px links und rechts aus dem Blatt,
   Wild/Verspielt/Edel 36px unter der Spalte begraben.
   Der Raum, der wirklich da ist, steht in --tafel-raum; jede Vorlage,
   die einen Rahmen hat, setzt ihn - die Werte stehen VOR dem Deckel
   (A-768), weil pruef-dunkel-511 hinter A-430 keine Verspielt-Regel ohne
   Dunkel-Attribut zulaesst. Die Zentrierung ueber `50% - Raum/2` traegt
   weiter, weil .kt-wrap in jedem Rahmen mittig steht. Die 1240 aus A-730
   bleiben als Obergrenze. */
@media (min-width: 860px) {
  .ahnen-rahmen,
  #aerk-voll,
  .aerk-karte,
  .aerk-brotkrume,
  .aerk-hinweis {
    /* Halber Raum links und rechts hinaus - der bewaehrte Weg, ohne die
       Breite des Elternteils zu kennen. calc statt fester Werte, weil
       .kt-wrap seinen Innenabstand behaelt. */
    width: min(var(--tafel-raum), 1240px);
    max-width: min(var(--tafel-raum), 1240px);
    margin-left: calc(50% - min(var(--tafel-raum), 1240px) / 2);
    margin-right: calc(50% - min(var(--tafel-raum), 1240px) / 2);
    padding-left: 2rem;
    padding-right: 2rem;
    box-sizing: border-box;
  }
  /* Der Rahmen des Erkunders soll nicht ueber die ganze Breite leuchten —
     nur seine Flaeche wandert mit, die Rundung bleibt. */
  #aerk-voll { border-radius: 0; }
}
@media (min-width: 1280px) {
  #aerk-voll { border-radius: 10px; }
}

/* ── A-1598: DAS SCHRIFT-PAAR GILT AUCH IN DEN SEITENKOEPFEN ──────────────
   Torsten, 18.10.2026, seine Testzucht (Vorlage Wild, „Schwungvoll"): auf
   der Startseite stand der Katzenname in Lobster, auf der Tierseite in
   Oswald. Gemessen: die Regeln der Schrift-Paare (oben, A-273/A-1466)
   wiegen html[data-schrift] h1 = (0,1,2). Die Vorlagen Wild, Verspielt,
   Edel, Magazin und Show legen ihre Schrift fuer `.page-hero h1`,
   `.katze-detail-hero h1` und `.kt-hero h1` mit (0,2,2) fest - der Kopf
   jeder Unterseite und jeder Tierseite blieb in der Vorlagenschrift. Buehne
   und Atelier stehen im CSS NACH den Schrift-Paaren und setzen ihre
   Ueberschriften mit demselben Gewicht: dort griff die Wahl gar nicht.
   Hier gilt die Wahl darum mit :is()/:not() (0,3,1), vor der Markenschrift (die bei Gleichstand gewinnen muss, A-770). Der Zuchtname im Startbild (.hero-title) bleibt aussen vor, wenn
   eine Markenschrift gewaehlt ist (A-1160 geht vor). */
html[data-schrift="serifen"] :is(h1, h2, h3, .section-title, .cat-name, .kitten-name, .litter-name):not(.hero-title),
html[data-schrift="serifen"]:not([data-marke]) .hero-title,
html[data-schrift="gemischt"] :is(h1, h2, h3, .section-title, .cat-name, .kitten-name, .litter-name):not(.hero-title),
html[data-schrift="gemischt"]:not([data-marke]) .hero-title {
  font-family: 'Cormorant Garamond', Georgia, serif;
}
html[data-schrift="rund"] :is(h1, h2, h3, .section-title, .cat-name, .kitten-name, .litter-name):not(.hero-title),
html[data-schrift="rund"]:not([data-marke]) .hero-title {
  font-family: 'Baloo 2', 'Nunito Sans', sans-serif;
}
html[data-schrift="gerade"] :is(h1, h2, h3, .section-title, .cat-name, .kitten-name, .litter-name):not(.hero-title),
html[data-schrift="gerade"]:not([data-marke]) .hero-title {
  font-family: 'Archivo', system-ui, sans-serif;
}
html[data-schrift="lobster"] :is(h1, h2, h3, .section-title, .cat-name, .kitten-name, .litter-name):not(.hero-title),
html[data-schrift="lobster"]:not([data-marke]) .hero-title {
  font-family: 'Lobster', 'Cormorant Garamond', cursive;
  /* Lobster hat nur einen Schnitt: Wild setzt die Seitenkoepfe fett (700),
     Wild und Minimal setzen Namen und Koepfe in Versalien. */
  font-weight: 400; font-style: normal; text-transform: none;
}

/* ══════════════════════════════════════════════════════════════════════════
   MARKENSCHRIFT (A-756) — die vierte Achse
   --------------------------------------------------------------------------
   Im Stand vom 21.08.2026 als "wirklich neu" beschrieben, in Torstens
   Entwurf atelier-komplett-2.html (Abschnitt 3) vorgezeichnet: zehn
   Schriften NUR fuer den Zuchtnamen — Kopfleiste und Fusszeile —, frei
   waehlbar, unabhaengig von Vorlage, Farbthema und Schriftpaar. Eine
   Schreibschrift ueber einer Seite in Jost, ein Cinzel ueber Sand: das ist
   die Handschrift einer Zucht, und die will sie selbst waehlen.

   Jede Schrift bringt ihren Faktor mit: Great Vibes wirkt bei gleicher
   Punktgroesse halb so gross wie Bebas Neue. Der Faktor greift dort, wo die
   Vorlage die Groesse des Schriftzugs kennt (Standard 1.45rem, Ateliers
   Markenband); in den uebrigen Vorlagen wechselt nur die Familie, die
   Groesse bleibt ihre. Alle zehn liegen seit A-752 lokal, font-src 'self'.

   Am ENDE der Datei, wie die Schriftpaare: gleiche Spezifitaet wie
   html[data-schrift] .nav-logo (0,2,1), spaeter im Blatt — die
   Markenschrift gewinnt gegen das Schriftpaar, denn sie ist die speziellere
   Wahl. Ohne data-marke aendert sich nichts.
   ══════════════════════════════════════════════════════════════════════════ */
html[data-marke="vibes"]      { --marke-font: 'Great Vibes', cursive;                 --marke-weight: 400; --marke-faktor: 1.55; }
html[data-marke="parisienne"] { --marke-font: 'Parisienne', cursive;                  --marke-weight: 400; --marke-faktor: 1.5; }
html[data-marke="dancing"]    { --marke-font: 'Dancing Script', cursive;              --marke-weight: 600; --marke-faktor: 1.35; }
html[data-marke="sacramento"] { --marke-font: 'Sacramento', cursive;                  --marke-weight: 400; --marke-faktor: 1.55; }
html[data-marke="playfair"]   { --marke-font: 'Playfair Display', Georgia, serif;     --marke-weight: 500; --marke-faktor: 1.1; }
html[data-marke="marcellus"]  { --marke-font: 'Marcellus', Palatino, serif;           --marke-weight: 400; --marke-faktor: 1.05; --marke-spacing: 0.03em; }
html[data-marke="cinzel"]     { --marke-font: 'Cinzel', Georgia, serif;               --marke-weight: 500; --marke-faktor: 0.85; --marke-spacing: 0.07em; --marke-transform: uppercase; }
html[data-marke="cormorant"]  { --marke-font: 'Cormorant Garamond', Georgia, serif;   --marke-weight: 600; --marke-faktor: 1.2; }
html[data-marke="oswald"]     { --marke-font: 'Oswald', Impact, sans-serif;           --marke-weight: 400; --marke-faktor: 1.0; --marke-spacing: 0.11em; --marke-transform: uppercase; }
html[data-marke="bebas"]      { --marke-font: 'Bebas Neue', Impact, sans-serif;       --marke-weight: 400; --marke-faktor: 1.1; --marke-spacing: 0.13em; --marke-transform: uppercase; }

/* A-1149: fuenfzehn weitere. Die Faktoren sind GEMESSEN, nicht geschaetzt —
   schaubild/mess-markenschriften.mjs, im echten Chrome mit den echten
   woff2-Dateien. Dieselbe Punktgroesse sieht je nach Schrift voellig
   verschieden gross aus; ohne Faktor stuende der Zuchtname einmal wuchtig
   und einmal winzig in derselben Leiste.

   WIE gemessen wurde, in zwei Schritten — der zweite ist der wichtige:

   1. Erster Anlauf: x-Hoehe gegen Cormorant Garamond normiert. Ergebnis:
      die Rechnung widersprach ALLEN ZEHN gewachsenen Faktoren, Bebas waere
      von 1.10 auf 0.55 gefallen. Zehn Werte, die seit einem Monat auf
      Kundenseiten stehen, koennen nicht alle falsch sein — die frisch
      gebaute Messung war es.

   2. Also andersherum geeicht: welches Mass erklaert die zehn? Gemessen
      Faktor x Mass fuer x-Hoehe, Cap-Hoehe und Ink-Hoehe. Die x-Hoehe
      traegt sie mit 16 % Streuung (Cap 23 %, Ink 28 %). Auf DIESER Skala
      bekommen die fuenfzehn ihre Werte.

   Die zehn aus A-756 bleiben unveraendert. Ihre vier Abweichungen von der
   Rechnung (dancing, sacramento, cormorant, bebas) sind kein Rauschen,
   sondern A-759: von Hand heruntergezogen, weil die Namen am Handy aus der
   Leiste wuchsen. Genau deshalb steht in der Messung ein Deckel bei 1.55,
   der hoechsten Schreibschrift im Bestand. Ohne ihn wollte die Rechnung
   fuer Tangerine und Italianno 2.10. */
html[data-marke="eaglelake"]  { --marke-font: 'Eagle Lake', cursive;                  --marke-weight: 400; --marke-faktor: 1.05; }
html[data-marke="kellyslab"]  { --marke-font: 'Kelly Slab', Georgia, serif;           --marke-weight: 400; --marke-faktor: 1.10; }
html[data-marke="allura"]     { --marke-font: 'Allura', cursive;                      --marke-weight: 400; --marke-faktor: 1.55; }
html[data-marke="pinyon"]     { --marke-font: 'Pinyon Script', cursive;               --marke-weight: 400; --marke-faktor: 1.55; }
html[data-marke="tangerine"]  { --marke-font: 'Tangerine', cursive;                   --marke-weight: 700; --marke-faktor: 1.55; }
html[data-marke="alexbrush"]  { --marke-font: 'Alex Brush', cursive;                  --marke-weight: 400; --marke-faktor: 1.30; }
html[data-marke="italianno"]  { --marke-font: 'Italianno', cursive;                   --marke-weight: 400; --marke-faktor: 1.55; }
html[data-marke="yellowtail"] { --marke-font: 'Yellowtail', cursive;                  --marke-weight: 400; --marke-faktor: 1.20; }
html[data-marke="courgette"]  { --marke-font: 'Courgette', cursive;                   --marke-weight: 400; --marke-faktor: 1.05; }
html[data-marke="lobster"]    { --marke-font: 'Lobster', Impact, cursive;             --marke-weight: 400; --marke-faktor: 1.00; }
html[data-marke="abril"]      { --marke-font: 'Abril Fatface', Georgia, serif;        --marke-weight: 400; --marke-faktor: 1.15; }
html[data-marke="prata"]      { --marke-font: 'Prata', Georgia, serif;                --marke-weight: 400; --marke-faktor: 1.05; }
html[data-marke="gilda"]      { --marke-font: 'Gilda Display', Palatino, serif;       --marke-weight: 400; --marke-faktor: 1.15; }
html[data-marke="josefin"]    { --marke-font: 'Josefin Sans', Futura, sans-serif;     --marke-weight: 400; --marke-faktor: 1.30; --marke-spacing: 0.04em; }
html[data-marke="quicksand"]  { --marke-font: 'Quicksand', Verdana, sans-serif;       --marke-weight: 500; --marke-faktor: 1.05; }

/* A-1160: DIE MARKENSCHRIFT GEHOERT AUCH AN DIE GROESSTE STELLE.
   Torsten am 21.09.2026 mit zwei Bildern nebeneinander: „oben auf unserer
   Demo ist die Schrift richtig, aber auf dem Hauptbild will sie die Schrift
   haben."
   Er hat recht. A-756 hat die Markenschrift auf Kopfleiste und Fusszeile
   gelegt — beides Stellen, an denen der Zuchtname klein steht. Der
   Hero-Titel IST derselbe Name, nur gross, und ausgerechnet dort galt sie
   nicht. Wer eine Schreibschrift fuer seine Zucht waehlt, sieht sie damit
   ueberall ausser da, wo man sie sieht.
   NUR .hero-title, NICHT die Titel der Unterseiten (.page-hero h1): dort
   steht „Neuigkeiten" oder „Termine", also ein Seitenname und nicht der
   Zuchtname. Eine Zierschrift macht die schwer lesbar, ohne etwas zu
   gewinnen. */
html[data-marke] .nav-logo,
html[data-marke] .footer-logo,
html[data-marke] .hero-title {
  font-family: var(--marke-font);
  font-weight: var(--marke-weight, 400);
  letter-spacing: var(--marke-spacing, 0);
  text-transform: var(--marke-transform, none);
}
html[data-marke] .nav-logo em,
html[data-marke] .footer-logo em { font-family: inherit; font-size: 1em; }
/* A-759 (Torstens Befund, 02.09. abends: "die Schriften der headline wachsen
   am Handy oben und unten aus der Spalte"). Gemessen bei 760px: Dancing
   Script mit Faktor 1.35 = 31px, geerbte Zeilenhoehe 1.8 = 55px je Zeile,
   und der Name brach in zwei Zeilen — 110px in einer 68px-Leiste, von -21
   bis 88. Unter 901px gibt es kein Markenband, nur die Zeile mit dem
   Hamburger: dort bleibt die Grundgroesse (kein Faktor), und die
   Zeilenhoehe ist eng, damit auch ein Umbruch in der Leiste bleibt. Die
   Schreibschrift ist bei 23px im Kopf gut lesbar; gross wird sie am
   Schreibtisch im Band. */
html[data-marke] .nav-logo { line-height: 1.15; }
@media (max-width: 900px) {
  html[data-marke] .nav-logo { font-size: 1.45rem; line-height: 1.15; }
}
/* Die Groesse steht NICHT hier: der Faktor greift bei der Grundregel von
   .nav-logo (Standard) und im Markenband von Atelier — dort, wo die Groesse
   bekannt ist, und VOR den Vorlagen, damit deren eigene Groesse gewinnt.
   Hinter dem letzten Vorlagenblock darf kein html[data-layout] mehr stehen
   (pruef-kontrast-484), und "standard" darf nirgends ausdruecklich genannt
   werden (pruef-layoutstandard-632). */

/* ══ A-1164: DIE AUSNAHMEN ZUR SCHRIFTFARBE AUF DEM AKZENT ═══════════════
   Gerechnet, nicht gewaehlt: schaubild/mess-akzentschrift.mjs haelt fuer
   jedes Thema Weiss und #1a1a1a gegen --amber und --amber-dark und nimmt,
   was mehr Kontrast bringt. Die Vorgaben stehen in :root, hier stehen die,
   bei denen die Mehrheit nicht passt.

   Ganz unten im Blatt, damit sie gegen die Themenbloecke gewinnen. */
html[data-theme="blue"],
html[data-theme="sand"],
html[data-theme="nacht"] { --auf-amber: #ffffff; }

html[data-theme="dark-rose"],
html[data-theme="dark-green"],
html[data-theme="dark-blue"],
html[data-theme="dark-purple"],
html[data-theme="dark-brown"],
html[data-theme="dark-slate"],
html[data-theme="dark-gold"],
html[data-theme="dark-mauve"],
html[data-theme="granit"],
html[data-theme="moos"],
html[data-theme="tinte"],
html[data-theme="wein"],
html[data-theme="schiefer"],
html[data-theme="neon"] { --auf-amber-dark: #1a1a1a; }

/* A-1164: der Sonderfall „kein Thema gewaehlt" (classic). Dort gilt der
   Akzent aus :root, #7A7670 — und auf DEM gewinnt Weiss (4,5 gegen 3,9).
   Die Vorgabe in :root richtet sich nach der Mehrheit der 29 Themen und
   ist dunkel; hier steht die Ausnahme fuer den Fall ohne Thema.
   Aufgefallen, weil pruef-knopfkontrast-1047 unabhaengig nachgerechnet und
   der Vorgabe widersprochen hat. */
html:not([data-theme]) { --auf-amber: #ffffff; }

/* ── A-1379 / A-1413: DER NAME STEHT IM STARTBILD ─────────────────────────────
   Das Startbild traegt den Zuchtnamen oder ein Logo als Schrift
   (html[data-titel-im-bild], Worker setzeTitelImBild). A-1379 stellte es nur
   am Handy in sein eigenes Seitenverhaeltnis; am PC wurde es bildschirmhoch
   gezogen und beschnitten, in Edel lag der Titelkasten mit dem Namen noch
   einmal darauf (eine Zucht, Torsten 06.10.2026: „klar weil es Scheisse
   aussieht"). Jetzt ueberall gleich, Startseite und Unterseiten:
   - das Bild steht ganz, nie beschnitten, mittig, hoechstens 1,5-fach
     seiner Pixelbreite und hoechstens 85 % der Fensterhoehe hoch (A-1432;
     bis dahin 1,15 und 70 %); links und rechts die Randfarbe des Bildes,
     wenn gemeinsam.js sie ablesen konnte, sonst die Farbe des Kopfs - auf
     einer dunklen Flaeche statt dessen die Buehne (A-1432, weiter unten);
   - seit A-1432 stehen Ueberschrift, Zeile darueber und Satz nur noch im
     Code, sichtbar sind unter dem Bild die Knoepfe (der Worker laesst den
     Schleier der Startseite stumm, damit fallen auch die Titelkaesten weg).
   Masse kommen aus gemeinsam.js (--startbild-seiten, --startbild-quote,
   --startbild-breite, --startbild-rand); bis dahin 16/9.
   Bewusst AM ENDE: die Vorlagen setzen die Hoehe des Kopfs mit derselben
   Spezifitaet (html[data-layout] .hero), die spaetere Regel gewinnt. */
html[data-titel-im-bild] .hero {
  display: block; min-height: 0; height: auto; padding-left: 0; padding-right: 0;
  /* Die Seite schiebt den Kopf schon unter der Leiste hervor; das Polster
     fuer Inhalt UNTER der Leiste waere hier ein leerer Streifen ueber dem Bild. */
  padding-top: 0;
  /* A-1432: unten genauso - unter den Knoepfen standen 80 bis 112 px leer;
     den Abstand gibt jetzt der Inhalt selbst (2,2rem). */
  padding-bottom: 0 !important;
}
html[data-titel-im-bild] .hero-bg {
  /* z-index: ueber dem Zierkreis von Verspielt (.hero::after). */
  position: relative; z-index: 1; inset: auto; margin: 0 auto;
  /* A-1432 (Build 1209): groesser - bis 85 % der Fensterhoehe und 1,5-fach
     (Torsten, 06.10.2026: „warum sind die headbilder alle so klein"). */
  /* 12rem fuer Leiste und Knoepfe: am Laptop (800 hoch) bleiben sie sichtbar. */
  width: min(100%, calc(var(--startbild-breite, 1600px) * 1.5), calc(min(85vh, 100vh - 12rem) * var(--startbild-quote, 1.7778)));
  aspect-ratio: var(--startbild-seiten, 16 / 9);
  background-size: 100% 100%;
  /* Die Randfarbe als Flaeche links und rechts, genau so hoch wie das Bild.
     Auf der Buehne (unten) entfaellt sie. */
  box-shadow: 0 0 0 100vmax var(--startbild-rand, transparent);
  clip-path: inset(0 -100vmax);
}
/* Atelier legt das Kopffoto auf 16 % Deckkraft - als Schmuck gedacht, ein
   Bild mit Namen wurde davon ausgebleicht (A-1432). */
html[data-titel-im-bild] .hero-bg { opacity: 1 !important; }
/* A-1432: der Name steht schon im Bild - Zeile, Ueberschrift und Saetze
   bleiben fuer Google im Code, sind aber nicht zu sehen; unter dem Bild
   stehen gleich die Knoepfe (Torsten, 06.10.2026: „mit den 2 koepfen ...
   sieht alles irgendwie kacke aus"; Edel war der Massstab). Auch der Kasten
   der Vorlage (Magazin: Rahmen, Buehne: Milchglas) faellt weg. */
html[data-titel-im-bild] .hero-content {
  margin-left: auto; margin-right: auto; text-align: center;
  padding: 1.6rem 2rem 2.2rem !important; border: 0 !important; box-shadow: none !important;
  background: transparent !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
}
html[data-titel-im-bild] .hero-content::before, html[data-titel-im-bild] .hero-content::after { display: none !important; }
/* Der Schalter „Mein Name steht im Bild" (bearbeiten.js) sitzt im selben
   Kasten und muss im Bearbeiten-Modus erreichbar bleiben. */
html[data-titel-im-bild] .hero-content > :not(.hero-cta):not(.be-strichknopf):not(.hero-quote) {
  position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important; padding: 0 !important;
  overflow: hidden !important; clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important; white-space: nowrap !important; border: 0 !important;
}
/* A-1467: der Satz unter dem Logo. Silke, 09.10.2026: „Folgender Text war
   bisher direkt beim Logo auf der Homepage … Der Text fehlt mir derzeit."
   Das Startbild-Zitat (hero.zitat, mit dem Stift) steht sichtbar unter dem
   Bild, ueber den Knoepfen - nur wenn es eines gibt (ohne Text traegt das
   Element `hidden`). Der Satz steht hier nicht mehr auf dem Foto, sondern
   auf der Flaeche der Seite: dunkle Schrift ohne Schatten; auf der Buehne
   (A-1432, dunkle Flaeche) hell. !important, weil die Vorlagen die Farbe mit
   hoeherer Spezifitaet setzen (Wild: .hero:has(.hero-overlay) .hero-quote). */
html[data-titel-im-bild] .hero-quote {
  margin: 0 auto 1.4rem; padding-top: 0; border-top: 0; max-width: 640px;
  color: var(--text-soft) !important; text-shadow: none !important;
  font-size: clamp(1.05rem, 2vw, 1.3rem); line-height: 1.6;
}
html[data-titel-im-bild][data-startbild-buehne] .hero-quote {
  color: rgba(255, 255, 255, 0.86) !important; text-shadow: 0 1px 3px rgba(0, 0, 0, 0.6) !important;
}
html[data-titel-im-bild] .hero-quote[hidden] { display: none; }
html[data-titel-im-bild] .hero-cta { justify-content: center; margin-top: 0; }
/* Verspielt zeigt auf der Startseite sonst nie ein Foto (die Vorlage
   blendet es mit Erzwingen aus). Ein Bild mit Namen ist kein Schmuckfoto,
   sondern das Schild der Zucht - es steht wie auf ihren Unterseiten. */
html[data-titel-im-bild][data-layout="verspielt"] .hero-bg { display: block !important; }
html[data-titel-im-bild] .hero-scroll { display: none; }

/* ── A-1432: DIE BUEHNE ───────────────────────────────────────────────────
   Wo die Vorlage dem Kopf eine dunkle oder graue Flaeche gibt, steht das
   Bild mit Namen statt dessen auf einer stark weichgezeichneten, abgedunkelten
   Kopie seiner selbst (Torsten, 06.10.2026, Variante A von sechs). Ob die
   Flaeche dunkel ist, misst gemeinsam.js und setzt html[data-startbild-buehne];
   helle Vorlagen (Edel, Minimal ...) behalten ihr Blatt. Die Kopie ist ein
   eigenes Element (.startbild-buehne), weil ::before und ::after schon von
   Wild und Verspielt belegt sind. */
.startbild-buehne { display: none; }
html[data-startbild-buehne] :is(.hero, .page-hero) { position: relative; overflow: hidden; isolation: isolate; }
html[data-startbild-buehne] .startbild-buehne {
  display: block; position: absolute !important; inset: -80px; z-index: 0 !important; pointer-events: none;
  background-position: center; background-size: cover; background-repeat: no-repeat;
  filter: blur(48px) brightness(0.5) saturate(1.2);
}
html[data-startbild-buehne] .hero > :is(.hero-bg, .hero-content) { position: relative; z-index: 1; }
html[data-startbild-buehne] .hero-bg { box-shadow: none; clip-path: none; }

/* ── A-1432: UNTERSEITEN (Probe 7) ────────────────────────────────────────
   EIN Kopf statt Band und Kopf: das Startbild scharf und ganz in der Mitte
   des Kopfs, darunter Zeile und Seitentitel (Torsten: „okay" zu Probe 7;
   Probe 5, nur weichgezeichnet, lehnte er ab: „man erkennt nur verschwommene
   farben ohne klares bild"). gemeinsam.js setzt das Bild (.kopf-startbild)
   und html[data-kopf-startbild], solange der Kopf kein eigenes, anderes Bild
   hat. Auf der Buehne gilt die helle Schrift von A-415 (data-kopfbild), ohne
   dessen Schleier - die Buehne ist schon abgedunkelt. Ohne Buehne bekommt der
   Kopf die Flaeche, die er ohne Foto haette, als eigenes Blatt (::after): sein
   Foto setzen die Seiten per Skript mit !important am Element. Welche Flaeche
   das ist, misst gemeinsam.js (--kopf-ohne-bild, --kopf-ohne-bild-farbe). */
.kopf-startbild { display: none; }
html[data-kopf-startbild] .page-hero { min-height: 0 !important; padding: 2rem 1.5rem 2.2rem !important; text-align: center; }
html[data-kopf-startbild] .kopf-startbild {
  display: block; margin: 0 auto 1.4rem; width: auto; height: auto;
  max-width: 100%; max-height: min(38vh, 360px);
  /* Kein Rahmen (Probe 7) - die Vorlagen geben Bildern sonst teils einen. */
  border: 0 !important; padding: 0 !important; background: none !important; border-radius: 0;
  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.32);
}
html[data-kopf-startbild] .page-hero > :is(.section-eyebrow, h1, p, .divider) { margin-left: auto; margin-right: auto; text-align: center !important; }
/* Wild setzt den Titel links neben einen roten Schraegstrich (::before) -
   unter einem mittigen Bild stand er dann schief daneben (Vorschau 1209). */
html[data-kopf-startbild][data-layout="wild"] .page-hero::before { display: none; }
html[data-kopf-startbild]:not([data-startbild-buehne]) .page-hero { position: relative; isolation: isolate; }
html[data-kopf-startbild]:not([data-startbild-buehne]) .page-hero::after {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-color: var(--kopf-ohne-bild-farbe, var(--cream));
  background-image: var(--kopf-ohne-bild, none);
}
html[data-kopf-startbild] .page-hero > :not(.startbild-buehne) { position: relative; z-index: 1; }
html[data-kopf-startbild][data-startbild-buehne] .page-hero::after { background: none !important; }
/* Der Winkel der Wild-Vorlage (::before) bleibt ueber der Flaeche. */
html[data-kopf-startbild] .page-hero::before { z-index: 1; }

/* A-1495: die Zertifikatsliste - vorher nur in startseite.css, seit die Zucht
   sie auch auf /gesundheit zeigen kann, hier fuer alle Seiten. */
.certs-list { margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid var(--border); display: flex; flex-direction: column; gap: 1rem; }
.cert-item { font-size: 0.88rem; color: var(--text-soft); line-height: 1.5; display: flex; gap: 0.9rem; align-items: flex-start; }
.cert-item-img { width: 56px; height: 56px; border-radius: 4px; object-fit: contain; background: var(--warm-white); flex-shrink: 0; cursor: pointer; }
.cert-item-icon { width: 56px; height: 56px; border-radius: 4px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; font-size: 1.6rem; background: var(--warm-white); }
.cert-item-body { flex: 1; }
.cert-item-title { font-weight: 600; color: var(--text-soft); }
.cert-year { color: var(--text-muted); font-weight: 400; }
.cert-item-desc { font-size: 0.82rem; color: var(--text-muted); margin-top: 0.2rem; line-height: 1.5; }
.cert-item.cert-hidden { display: none; }
.gesundheit-zertifikate { max-width: 760px; margin: 3rem auto 0; padding: 0 1.5rem; }
.gesundheit-zertifikate .section-title { font-size: 1.6rem; }
/* A-1491 (Torsten, 10.10.2026): „Nur Logo im Kopf" - der Zuchtname neben
   dem Logo faellt weg, das Logo waechst (setzeKopfNurLogo im Worker setzt
   das Merkmal nur, wenn ein Logo da ist). Die Maskenvorlagen geben dem Logo
   feste Masse (.hat-zuchtlogo, Spezifitaet 0,3,1) - die hier liegen darueber. */
html[data-kopf-nur-logo] .nav-logo { display: none; }
html[data-kopf-nur-logo] .nav-med { height: 72px; max-width: 60vw; }
html[data-kopf-nur-logo][data-layout].hat-zuchtlogo .nav-med-link,
html[data-kopf-nur-logo][data-layout].hat-zuchtlogo .nav-med-link .nav-med { width: 70px; height: 72px; }   /* nicht 68px: die Zahl gehoert der Kopfhoehe (pruef-kopfhoehe-537) */
@media (max-width: 600px) {
  html[data-kopf-nur-logo] .nav-med { height: 56px; }
  html[data-kopf-nur-logo][data-layout].hat-zuchtlogo .nav-med-link,
  html[data-kopf-nur-logo][data-layout].hat-zuchtlogo .nav-med-link .nav-med { width: 52px; height: 56px; }
}
/* ── A-1510: HANDYMENÜ JE STIL ──
   Torsten, 07.10.2026: „bei Jimdo ... die machen das auch mit dem
   Handy-Menü irgendwie geiler ... bei uns sieht es immer gleich aus und es
   wirkt halt ein bisschen lame". Am 11.10. die Bildfolgen gesehen
   (demos/handymenue im Werkzeug) und entschieden: „frei wählbar" unter
   Website → Design. settings.handyMenue, der Worker setzt data-handymenue
   nur bei eigener Wahl (setzeHandymenue). Ohne Wahl gilt der Stil des
   Designs: jeder Selektor heißt deshalb
     html:is([data-handymenue="X"], [data-layout="X"]:not([data-handymenue]))
   „standard" hat keine eigenen Regeln (das Grundmenü oben, A-472/A-579),
   „dreh" (Drehtür) gibt es nur als Wahl.
   #nav-links statt .nav-links: die Designs färben das Menü mit !important
   bis (0,3,2) (Bühne: html[data-layout] nav:not(.footer-links) .nav-links);
   die Kennung sticht alle, ohne noch eine Stufe !important dranzuhängen.
   Farben nur aus den Variablen der Seite (--wand, --text, --amber,
   --border, --cream), damit jeder Stil zu jeder Farbwelt passt. Die Schrift
   der Überschriften holt toggleNav (gemeinsam.js) als --hm-schrift, eine
   feste Schrift hier würde das Schriftpaar (A-273) übergehen. */
@media (max-width: 900px) {
  /* Für alle: der Burger wird ✕, das Menü gleitet herein, die Seite
     dahinter scrollt nicht mit. */
  .nav-hamburger span { transform-origin: center; }
  .nav-hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
  .nav-hamburger.open span:nth-child(2) { opacity: 0; transform: scaleX(0); }
  .nav-hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
  /* KEINE Scrollsperre beim offenen Menü (A-1514, Build 1251).
     A-1510 sperrte an body: weil html overflow-x: clip traegt, wurde body
     ein eigener Scrollbereich, die angeheftete Kopfleiste samt ✕ rutschte
     weg (Torstens Handybild 11.10., 22:25, nevermore). A-1513 sperrte am
     html: Kopfleiste stand, aber Torsten am Handy, 12.10.: „Jetzt kann man
     nicht mehr die Seite scrollen" - beim halbbreiten Menü sieht man links
     die Seite und kann sie nicht bewegen. Bis A-1510 gab es keine Sperre
     und keine Klage; die Vollbild-Stile decken die Seite ohnehin ab, die
     Liste scrollt fuer sich (overflow-y: auto oben). Also: keine. */
  /* A-1511 (Torsten, 11.10. abends am Handy, vonderpotterbande): am ✕
     leuchtete Chromes blaue Tipp-Markierung auf. Wie beim Pfeil der
     Untermenüs (oben, .nav-sub-toggle) abgeschaltet. */
  .nav-hamburger, #nav-links a { -webkit-tap-highlight-color: transparent; }
  /* A-1511: „gleitet von rechts" schob die Liste anfangs 40px über den
     rechten Rand (translateX). Danach ließ sich die Seite am Handy seitlich
     schieben. Jetzt deckt ein Ausschnitt die Liste von rechts nach links
     auf, sie verlässt den Bildschirm nie. Gilt für jedes Menü ohne eigene
     Bewegung der Liste, auch Verspielt (dort bewegen sich nur die Pillen). */
  #nav-links.open { animation: hm-rechts .28s ease-out both; }
  @keyframes hm-rechts { from { clip-path: inset(0 0 0 100%); opacity: 0; } to { clip-path: inset(0 0 0 0); } }
  @keyframes hm-auf { from { opacity: 0; } }
  @keyframes hm-fade { from { opacity: 0; transform: translateY(-6px); } }

  /* Vollbild unter der Kopfleiste (das ✕ bleibt erreichbar): Verspielt,
     Show, Bühne, Minimal, Magazin, Drehtür. */
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue]),
          [data-handymenue="show"], [data-layout="show"]:not([data-handymenue]),
          [data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue]),
          [data-handymenue="minimal"], [data-layout="minimal"]:not([data-handymenue]),
          [data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue]),
          [data-handymenue="dreh"]) #nav-links {
    left: 0; right: 0; width: 100%;
    height: calc(100vh - var(--kopf-hoehe, 68px)); height: calc(100dvh - var(--kopf-hoehe, 68px));
    max-height: none; justify-content: flex-start;
    background: var(--wand) !important; border: none; border-radius: 0; box-shadow: none;
  }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue]),
          [data-handymenue="show"], [data-layout="show"]:not([data-handymenue]),
          [data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue]),
          [data-handymenue="minimal"], [data-layout="minimal"]:not([data-handymenue])) #nav-links li { border-bottom: none; }
  /* Die acht Designs einzeln aufgezählt: kein Selektor nennt das Layout
     Standard ausdrücklich oder fragt nach dem Fehlen des Layouts
     (pruef-layoutstandard-632, A-572). */
  html[data-handymenue]:not([data-handymenue="standard"]) #nav-links .nav-submenu,
  html:is([data-layout="edel"], [data-layout="wild"], [data-layout="magazin"], [data-layout="buehne"],
          [data-layout="minimal"], [data-layout="show"], [data-layout="verspielt"], [data-layout="atelier"]):not([data-handymenue]) #nav-links .nav-submenu { background: transparent !important; }

  /* Edel: ein Blatt fällt von oben, mittig, kurze Linien in der Akzentfarbe. */
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links {
    left: 0; right: 0; width: 100%; border: none; border-radius: 0;
    border-bottom: 1px solid var(--amber); padding: 1rem 0 1.6rem; box-shadow: 0 18px 40px rgba(0,0,0,.35);
  }
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links.open { animation: hm-blatt .5s cubic-bezier(.2,.8,.2,1) both; }
  @keyframes hm-blatt { from { transform: translateY(-24px); opacity: 0; clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links li { border-bottom: none; position: relative; }
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links > li + li::before {
    content: ""; position: absolute; top: 0; left: 50%; width: 46px; height: 1px; transform: translateX(-50%); background: var(--amber); opacity: .7;
  }
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links > li > a {
    font-family: var(--hm-schrift, inherit); font-size: 1.35rem; font-weight: 500; letter-spacing: .04em;
    text-transform: none; text-align: center; padding: .9rem 1rem;
  }
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links .nav-parent-link { padding-left: 3.25rem; }
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links .nav-submenu li a { text-align: center; padding-left: 1.1rem !important; }
  html:is([data-handymenue="edel"], [data-layout="edel"]:not([data-handymenue])) #nav-links.open > li { animation: hm-fade .5s ease-out both; animation-delay: calc(.15s + var(--i, 0) * 45ms); }

  /* Wild: von links, schräge Kante, dahinter ein Streifen in der
     Akzentfarbe (clip-path schneidet Schatten mit ab, deshalb eine zweite
     Schräge auf body::after statt eines Schattens). */
  html:is([data-handymenue="wild"], [data-layout="wild"]:not([data-handymenue])) #nav-links {
    left: 0; right: auto; width: 86%; border: none; border-radius: 0; padding: 1rem 0;
    height: calc(100vh - var(--kopf-hoehe, 68px)); height: calc(100dvh - var(--kopf-hoehe, 68px)); max-height: none;
    justify-content: flex-start; box-shadow: none; clip-path: polygon(0 0, 100% 0, 84% 100%, 0 100%);
  }
  html:is([data-handymenue="wild"], [data-layout="wild"]:not([data-handymenue])) body.nav-open::after {
    content: ""; position: fixed; z-index: 98; left: 0; top: var(--kopf-hoehe, 68px); bottom: 0; width: calc(86% + 10px);
    background: var(--amber); clip-path: polygon(0 0, 100% 0, calc(84% + 8px) 100%, 0 100%);
    animation: hm-wild .38s cubic-bezier(.2,.9,.2,1) both;
  }
  html:is([data-handymenue="wild"], [data-layout="wild"]:not([data-handymenue])) #nav-links li { border-bottom: none; }
  html:is([data-handymenue="wild"], [data-layout="wild"]:not([data-handymenue])) #nav-links > li > a {
    font-size: 1.25rem; font-weight: 900; font-style: italic; letter-spacing: .02em; padding: .75rem 1.4rem;
  }
  html:is([data-handymenue="wild"], [data-layout="wild"]:not([data-handymenue])) #nav-links.open { animation: hm-wild .38s cubic-bezier(.2,.9,.2,1) both; }
  @keyframes hm-wild { from { transform: translateX(-105%); } }
  html:is([data-handymenue="wild"], [data-layout="wild"]:not([data-handymenue])) #nav-links.open > li { animation: hm-schraeg .4s ease-out both; animation-delay: calc(.15s + var(--i, 0) * 35ms); }
  @keyframes hm-schraeg { from { opacity: 0; transform: translateX(-30px) skewX(-12deg); } }

  /* Magazin: Inhaltsverzeichnis 01, 02, … */
  html:is([data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue])) #nav-links { padding: 1.4rem; counter-reset: hm; }
  html:is([data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue])) #nav-links > li { counter-increment: hm; border-bottom: 1px solid var(--border); }
  html:is([data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue])) #nav-links > li > a {
    font-family: var(--hm-schrift, inherit); font-size: 1.55rem; letter-spacing: 0; text-transform: none; padding: .7rem 0; border-bottom: none;
  }
  html:is([data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue])) #nav-links > li > a::before {
    content: counter(hm, decimal-leading-zero); display: inline-block; width: 2.6rem;
    font-size: .8rem; letter-spacing: .1em; color: var(--amber); vertical-align: .35em;
  }
  html:is([data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue])) #nav-links.open { animation: hm-auf .3s ease-out both; }
  html:is([data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue])) #nav-links.open > li { animation: hm-links .45s ease-out both; animation-delay: calc(var(--i, 0) * 40ms); }
  @keyframes hm-links { from { opacity: 0; transform: translateX(-18px); } }
  html:is([data-handymenue="magazin"], [data-layout="magazin"]:not([data-handymenue])) #nav-links .nav-submenu li a { padding-left: 2.6rem !important; }

  /* Bühne: der Vorhang fällt, Riesenschrift fährt von unten herein, im
     Wechsel Text- und Akzentfarbe. */
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links { padding: 1.6rem 1.4rem; }
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links.open { animation: hm-vorhang .45s cubic-bezier(.7,0,.2,1) both; }
  @keyframes hm-vorhang { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links > li { overflow: hidden; }
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links > li > a {
    color: var(--text); font-size: 2.1rem; font-weight: 800; letter-spacing: -.02em; text-transform: uppercase; line-height: 1; padding: .35rem 0;
  }
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links > li:nth-child(odd) > a { color: var(--amber); }
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links.open > li > a { animation: hm-hoch .5s cubic-bezier(.2,.8,.2,1) both; animation-delay: calc(.3s + var(--i, 0) * 55ms); }
  @keyframes hm-hoch { from { transform: translateY(110%); } }
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links .nav-sub-toggle { color: var(--text); }
  html:is([data-handymenue="buehne"], [data-layout="buehne"]:not([data-handymenue])) #nav-links .nav-submenu li a { color: var(--text); font-size: .9rem !important; padding-left: 0 !important; }

  /* Minimal: schlichtes Vollbild, große leichte Schrift. */
  html:is([data-handymenue="minimal"], [data-layout="minimal"]:not([data-handymenue])) #nav-links { padding: 2rem 1.8rem; }
  html:is([data-handymenue="minimal"], [data-layout="minimal"]:not([data-handymenue])) #nav-links > li > a {
    font-size: 1.6rem; font-weight: 300; letter-spacing: 0; text-transform: none; padding: .45rem 0;
  }
  html:is([data-handymenue="minimal"], [data-layout="minimal"]:not([data-handymenue])) #nav-links.open { animation: hm-auf .35s ease-out both; }

  /* Show: Schein von oben, die Punkte leuchten nacheinander auf. */
  html:is([data-handymenue="show"], [data-layout="show"]:not([data-handymenue])) #nav-links {
    background: radial-gradient(120% 80% at 50% 0%, color-mix(in srgb, var(--amber) 22%, transparent), transparent 60%), var(--wand) !important;
    justify-content: safe center; padding: 1rem 0;
  }
  html:is([data-handymenue="show"], [data-layout="show"]:not([data-handymenue])) #nav-links > li > a {
    text-align: center; font-size: 1.35rem; letter-spacing: .14em; padding: .75rem 1rem;
  }
  html:is([data-handymenue="show"], [data-layout="show"]:not([data-handymenue])) #nav-links .nav-parent-link { padding-left: 3.25rem; }
  html:is([data-handymenue="show"], [data-layout="show"]:not([data-handymenue])) #nav-links .nav-submenu li a { text-align: center; padding-left: 1.1rem !important; }
  html:is([data-handymenue="show"], [data-layout="show"]:not([data-handymenue])) #nav-links.open { animation: hm-auf .3s ease-out both; }
  html:is([data-handymenue="show"], [data-layout="show"]:not([data-handymenue])) #nav-links.open > li > a { animation: hm-leucht .9s ease-out both; animation-delay: calc(.1s + var(--i, 0) * 70ms); }
  @keyframes hm-leucht {
    0% { opacity: 0; text-shadow: none; }
    40% { opacity: 1; color: var(--amber); text-shadow: 0 0 18px var(--amber), 0 0 40px var(--amber); }
    100% { opacity: 1; text-shadow: 0 0 10px color-mix(in srgb, var(--amber) 35%, transparent); }
  }

  /* Verspielt: helles Vollbild, bunte Pillen hüpfen nacheinander herein.
     Die Pillen sind immer pastell mit dunkler Schrift, egal welche
     Farbwelt (der Grund hinter ihnen ist --cream). */
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links {
    background: var(--cream) !important; padding: 1.4rem 1.6rem; gap: .7rem;
  }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links > li {
    border-radius: 1.6rem; background: var(--hm-pille, #FFE08A); overflow: hidden;
  }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links > li:nth-child(4n+1) { --hm-pille: #FFB38A; }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links > li:nth-child(4n+2) { --hm-pille: #FFA8C5; }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links > li:nth-child(4n+3) { --hm-pille: #9AD6F2; }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links > li > a {
    color: #2E1B26; font-family: var(--hm-schrift, inherit); font-size: 1.05rem; letter-spacing: .02em;
    text-transform: none; text-align: center; padding: .8rem 1.2rem;
  }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links .nav-parent-link { padding-left: 3.25rem; }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links :is(.nav-sub-toggle, .nav-submenu li a) { color: #2E1B26; }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links .nav-submenu li a { text-align: center; padding-left: 1.1rem !important; }
  html:is([data-handymenue="verspielt"], [data-layout="verspielt"]:not([data-handymenue])) #nav-links.open > li { animation: hm-huepf .55s cubic-bezier(.3,1.6,.5,1) both; animation-delay: calc(var(--i, 0) * 60ms); }
  @keyframes hm-huepf { 0% { transform: translateY(30px) scale(.6); opacity: 0; } 100% { transform: none; opacity: 1; } }

  /* Atelier: ein Papierbogen klappt nach unten auf. */
  html:is([data-handymenue="atelier"], [data-layout="atelier"]:not([data-handymenue])) #nav-links {
    left: .8rem; right: .8rem; width: auto; top: calc(var(--kopf-hoehe, 68px) + .5rem);
    max-height: calc(100vh - var(--kopf-hoehe, 68px) - 1rem); max-height: calc(100dvh - var(--kopf-hoehe, 68px) - 1rem);
    border: 1px solid var(--border); border-radius: 3px; padding: .6rem 0; background: var(--wand) !important;
    box-shadow: 0 14px 30px rgba(0,0,0,.18), 3px 3px 0 var(--border); transform-origin: top center;
  }
  html:is([data-handymenue="atelier"], [data-layout="atelier"]:not([data-handymenue])) #nav-links.open { animation: hm-papier .55s cubic-bezier(.2,.8,.25,1) both; }
  @keyframes hm-papier { from { transform: perspective(800px) rotateX(-85deg); opacity: .2; } to { transform: perspective(800px) rotateX(0); opacity: 1; } }
  html:is([data-handymenue="atelier"], [data-layout="atelier"]:not([data-handymenue])) #nav-links li { border-bottom: 1px dashed var(--border); }
  html:is([data-handymenue="atelier"], [data-layout="atelier"]:not([data-handymenue])) #nav-links li:last-child { border-bottom: none; }
  html:is([data-handymenue="atelier"], [data-layout="atelier"]:not([data-handymenue])) #nav-links > li > a {
    font-size: .95rem; letter-spacing: .04em; text-transform: none; padding: .85rem 1.4rem;
  }

  /* Drehtür (nur als Wahl): die Tafel schwenkt um 90 Grad von der rechten
     Kante herein, der Burger dreht sich dabei einmal um 90 Grad. */
  html[data-handymenue="dreh"] #nav-links { padding: 1.4rem 0; transform-origin: right center; }
  html[data-handymenue="dreh"] #nav-links > li > a { font-size: 1.2rem; padding: .9rem 1.6rem; }
  html[data-handymenue="dreh"] #nav-links.open { animation: hm-tuer .6s cubic-bezier(.2,.8,.2,1) both; }
  @keyframes hm-tuer { from { transform: perspective(900px) rotateY(-90deg); } to { transform: perspective(900px) rotateY(0); } }
  html[data-handymenue="dreh"] #nav-links.open > li { animation: hm-fade .4s ease-out both; animation-delay: calc(.3s + var(--i, 0) * 40ms); }
  html[data-handymenue="dreh"] .nav-hamburger { transition: transform .35s ease; }
  html[data-handymenue="dreh"] .nav-hamburger.open { transform: rotate(90deg); }
}
/* Wer weniger Bewegung eingestellt hat, bekommt das Menü ohne Bewegung. */
@media (max-width: 900px) and (prefers-reduced-motion: reduce) {
  #nav-links.open, #nav-links.open > li, #nav-links.open > li > a, body.nav-open::after { animation: none !important; }
  .nav-hamburger, .nav-hamburger span { transition: none !important; }
}

/* ── A-1528: AM HANDY DAS STARTBILD GANZ ZEIGEN ───────────────────────────────
   Torsten, 13.10.2026 (von-marzihaus, breites Winterbild mit Name als Schrift
   darueber): „am Handy sollte man schon das Bild richtig sehen". Ohne den
   Schalter wird der Kopf am Handy bildschirmhoch, ein breites Bild links und
   rechts abgeschnitten und unter dem Schleier abgedunkelt.
   Mit heroHandyGanz (Worker setzeHandyGanz, html[data-startbild-handy-ganz])
   steht das Bild am Handy ganz, scharf und ohne Schleier, in seinem eigenen
   Format (--handy-startbild-seiten aus gemeinsam.js, bis dahin 16/9).
   Zeile, Name, Ort, Satz und Knoepfe stehen darunter auf dem Seitengrund,
   ohne Kasten der Vorlage. Am PC aendert sich nichts. Gilt nicht, wenn der
   Name schon im Bild steht (A-1379 regelt das dann selbst).
   Farben: der Name in der Akzentfarbe (die Kontrastmessung der eigenen
   Farben gilt auf dem Grund), alles andere wie Text auf der Seite. */
@media (max-width: 760px) {
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero {
    display: block !important; min-height: 0 !important; height: auto !important;
    padding: 0 !important; background: var(--cream) !important; overflow: visible;
  }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero::before,
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero::after { display: none !important; }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero-bg {
    position: relative !important; inset: auto !important; display: block !important;
    width: 100% !important; height: auto !important; margin: 0 !important;
    aspect-ratio: var(--handy-startbild-seiten, 16 / 9);
    background-size: cover !important; background-position: center !important;
    opacity: 1 !important; filter: none !important; transform: none !important; animation: none !important;
  }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero-overlay { display: none !important; }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero-content {
    position: relative !important; inset: auto !important; transform: none !important;
    margin: 0 auto !important; max-width: none !important; width: auto !important; text-align: center;
    padding: 1.6rem 1.25rem 2.2rem !important; border: 0 !important; box-shadow: none !important;
    background: transparent !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important;
  }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero-content::before,
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero-content::after { display: none !important; }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero :is(.hero-eyebrow, .hero-title, .hero-title em, .hero-tagline, .hero-quote) {
    text-shadow: none !important; -webkit-text-stroke: 0 !important;
  }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero :is(.hero-title, .hero-title em) { color: var(--amber) !important; }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero :is(.hero-eyebrow, .hero-tagline, .hero-quote) { color: var(--text-soft) !important; }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero .btn-ghost {
    color: var(--text) !important; border-color: var(--text-soft) !important; background: transparent !important;
  }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero-cta { justify-content: center; }
  html[data-startbild-handy-ganz]:not([data-titel-im-bild]) .hero-scroll { display: none !important; }
}

/* ── A-1474: BANNER IM KOPF DER UNTERSEITEN ──────────────────────────────
   Torsten, 09.10.2026, an Silkes Seite (Banner 1376 x 768): „den head an den
   banner anpassen und die schrift drunter". Ist das Startbild ein Banner
   (gemeinsam.js, ab 1,6 : 1: html[data-startbild-format="banner"]), steht es
   ueber die volle Breite des Kopfs, ohne Schatten und ohne Flaeche darum;
   Zeile, Titel und Vorspann stehen darunter auf der Seite, in den Farben
   der Seite (dunkel auf hell), mit dem Stift bearbeitbar wie immer. Ein
   quadratisches Logo bleibt bei Probe 7 oben.
   !important: die Seiten setzen Grund und Polster des Kopfs mit Erzwingen,
   A-415 die helle Schrift. */
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero {
  padding: 0 0 2.2rem !important; background: transparent !important;
}
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero::after,
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero::before,
html[data-kopf-startbild][data-startbild-format="banner"] .startbild-buehne { display: none !important; }
html[data-kopf-startbild][data-startbild-format="banner"] .kopf-startbild {
  width: 100%; max-width: 100%; max-height: none; margin: 0 0 1.8rem; box-shadow: none;
}
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero > :is(.section-eyebrow, h1, p, .divider) { padding-left: 1.5rem; padding-right: 1.5rem; }
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero :is(h1, h1 em, p, .section-eyebrow) {
  text-shadow: none !important; -webkit-text-stroke: 0 !important;
}
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero :is(h1, h1 em) { color: var(--amber-dark) !important; }
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero p { color: var(--text-soft) !important; }
html[data-kopf-startbild][data-startbild-format="banner"] .page-hero .section-eyebrow { color: var(--rose-gold) !important; }

/* ── A-1573: RATGEBER-BAUSTEINE (Schritt, Kasten, Balken, Warnung) ──────────
   Daisy (Nevermore), 15.10.2026, mit ihrem PDF „Katze im Kippfenster
   eingeklemmt": so soll eine eigene Seite aussehen koennen. Hier und nicht in
   seite.html, weil eine eigene Seite auch als Abschnitt der Startseite stehen
   kann (A-1460). Die Regeln mit `.page` davor schlagen die Absatzregel der
   Seitenhuelle (`.page p`, steht dort NACH dieser Datei). */
.page, .eigener-abschnitt-text { counter-reset: schritt; }
/* Der Schritt zaehlt sich selbst. Ein versteckter Schritt ist display:none und
   zaehlt darum nicht mit - die Nummern haben nie eine Luecke. */
.baustein-schritt {
  counter-increment: schritt; display: grid; grid-template-columns: 2.6rem 1fr; gap: 0 1rem;
  padding: 0.9rem 0 1rem; border-bottom: 1px solid var(--rose-gold);
}
.baustein-schritt::before {
  content: counter(schritt); font-family: 'Cormorant Garamond', serif; font-size: 2.3rem;
  font-weight: 600; line-height: 1; color: var(--amber-dark); text-align: center; padding-top: 0.1rem;
}
.baustein-schritt .baustein-titel { display: block; color: var(--text); font-weight: 700; font-size: 1.02rem; margin-bottom: 0.2rem; }
.baustein-schritt p, .page .baustein-schritt p { margin: 0; }
/* A-1574: ohne Nummer - keine Ziffernspalte, und er zaehlt nicht mit. */
.baustein-schritt.ohne-nummer { grid-template-columns: 1fr; counter-increment: none; }
.baustein-schritt.ohne-nummer::before { content: none; }
/* Die Ueberschrift als Balken: Kapitel wie im PDF. */
h2.baustein-balken {
  background: var(--amber-dark); color: var(--auf-amber-dark, #ffffff);
  padding: 0.45rem 1rem; border-radius: 3px; font-weight: 600; margin-top: 2.5rem;
}
h2.baustein-balken:first-child { margin-top: 0; }
/* Der Hinweiskasten als Warnung: rot, Strich links. */
.warning.baustein-warnung {
  background: rgba(176, 42, 36, 0.07); border: 0; border-left: 4px solid #B02A24; border-radius: 0 4px 4px 0;
}
.warning.baustein-warnung strong { color: #B02A24; }
[data-theme^="dark"] .warning.baustein-warnung { background: rgba(229, 115, 108, 0.12); border-left-color: #E5736C; }
[data-theme^="dark"] .warning.baustein-warnung strong { color: #E5736C; }
/* Kaesten, die aufeinander folgen, stehen nebeneinander; am Handy untereinander. */
.baustein-kastenreihe {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 0.75rem; margin: 1.25rem 0 1.5rem;
}
.baustein-kastenreihe > :not(.baustein-kasten):not(.be-bausteinmarke) { grid-column: 1 / -1; }
.baustein-kasten {
  /* Getoent aus der Zuchtfarbe statt einer festen Flaeche: --cream ist bei
     manchen Vorlagen genau der Seitenhintergrund (Nevermore). */
  background: color-mix(in srgb, var(--rose-gold) 12%, transparent);
  border-top: 3px solid var(--rose-gold); border-radius: 4px; padding: 1rem 1.1rem;
}
.baustein-kasten .baustein-titel { display: block; color: var(--amber-dark); font-weight: 700; margin-bottom: 0.35rem; }
.baustein-kasten p, .page .baustein-kasten p { margin: 0; font-size: 0.93rem; line-height: 1.65; }

