/* ------------------------------------------------------------
   Ein Wort zu den leisen Toenen in dieser Datei
   ------------------------------------------------------------
   Der Kopfbereich steht auf --cd-flaeche-3 (#E9EEF1). Gegen
   diesen Grund ergibt --cd-text-3 (#5C6F79) nur 4,48:1 und
   reisst damit 1.4.3 — bei 11 und 13 px greift keine Ausnahme
   fuer grosse Schrift. Gemessen an drei Stellen, die axe
   nacheinander gemeldet hat (Vertrauenszeile, Anrufzeile,
   Fusszeile).

   Deshalb traegt der Kopf durchgehend --cd-text-2 (5,53:1).
   Dass diese Zeilen leiser wirken als die Ueberschrift, machen
   Groesse, Laufweite und Versalien bereits.
   ------------------------------------------------------------ */

/* ============================================================
   cd_hero — Seitenkopf
   ============================================================
   Sieben Bauformen einer Bahn. Die gemeinsame Luft und die
   Inhaltsspalte kommen aus bahnen.css (.cd-bahn und
   .cd-bahn__inhalt) — hier steht nur, was den Kopf ausmacht.

   Regeln dieser Datei:
   - Farben, Abstaende und Radien ausschliesslich als Token.
   - Kein !important. Wo eine Regel nicht greift, ist die
     Spezifitaet das Problem und nicht die Wichtigkeit.
   - Im Raster minmax(0, 1fr) statt 1fr: 1fr bedeutet
     minmax(auto, 1fr) und laesst lange Woerter, Codezeilen und
     Bilder die Spalte aufsprengen.
   ============================================================ */

.cd-hero {
  background: var(--cd-flaeche-3);
  border-block-end: 1px solid var(--cd-linie);
}

/* ------------------------------------------------------------
   Grundraster
   ------------------------------------------------------------
   Links der Text, rechts die Nebenspalte. Der Text bekommt den
   groesseren Anteil — er traegt die Antwort.
   ------------------------------------------------------------ */
.cd-hero__raster {
  display: grid;
  grid-template-columns: minmax(0, 1.06fr) minmax(0, .94fr);
  gap: var(--cd-a8);
  align-items: center;
}

/* Ohne Inhalt in der Nebenspalte faellt die zweite Spalte weg.
   Eine leere rechte Spalte wuerde den Text auf die halbe Breite
   quetschen — das passiert, sobald eine Redaktion das Bild
   weglaesst. Die Zeilenlaenge begrenzt dann max-inline-size am
   Text und nicht das Raster. */
.cd-hero--ohneNeben .cd-hero__raster {
  grid-template-columns: minmax(0, 1fr);
}

.cd-hero__haupt { min-inline-size: 0; }
.cd-hero__neben { min-inline-size: 0; position: relative; }

/* ------------------------------------------------------------
   Brotkrumenpfad
   ------------------------------------------------------------
   Kein <nav> ohne Namen und kein Trennzeichen als Textknoten —
   der Schraegstrich kommt aus dem CSS und wird nicht vorgelesen.
   ------------------------------------------------------------ */
.cd-hero__krume ol {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--cd-a3);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--cd-text-2);
  margin-block-end: var(--cd-a6);
}
.cd-hero__krume li { display: flex; align-items: center; gap: var(--cd-a3); }
.cd-hero__krume li:not(:last-child)::after {
  content: "/";
  /* --cd-text-schwach (#7E97A2) ergab auf dem Bahngrund #E9EEF1 nur
     2,63:1 bei 11 px und riss damit 1.4.3. Der Strich ist SICHTBARER
     TEXT und keine Zier — er ist das einzige Merkmal, das die Stufen
     voneinander trennt. --cd-text-2 bringt 5,46:1. Gemessen. */
  color: var(--cd-text-2);
}
.cd-hero__krume a { color: var(--cd-text-2); }
.cd-hero__krume a:hover { color: var(--cd-rot); }
.cd-hero__krume [aria-current="page"] { color: var(--cd-rot); }

.cd-auf-dunkel .cd-hero__krume ol { color: var(--cd-text-auf-dunkel-2); }
.cd-auf-dunkel .cd-hero__krume a { color: var(--cd-text-auf-dunkel-2); }
.cd-auf-dunkel .cd-hero__krume a:hover { color: var(--cd-weiss); }
.cd-auf-dunkel .cd-hero__krume [aria-current="page"] { color: var(--cd-rot-auf-dunkel); }

/* ------------------------------------------------------------
   Kicker mit Strich oder Signalpunkt
   ------------------------------------------------------------ */
.cd-hero__kicker {
  display: flex;
  align-items: center;
  gap: var(--cd-a3);
  margin-block-end: var(--cd-a6);
}
.cd-hero__strich {
  flex: 0 0 auto;
  inline-size: 28px;
  block-size: 1px;
  background: currentColor;
}

/* Der Signalpunkt sagt „jetzt erreichbar". Zwei Lagen: der
   ruhende Kern bleibt sichtbar, wenn die Welle steht. */
.cd-hero__puls {
  position: relative;
  flex: 0 0 auto;
  inline-size: 9px;
  block-size: 9px;
}
.cd-hero__puls > span {
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: currentColor;
}
/* Zwei Durchlaeufe (4,8 s) statt endlos — unter der
   Fuenf-Sekunden-Grenze von WCAG 2.2.2, damit der Punkt ohne
   eigenen Anhalte-Knopf auskommt. Der Endzustand der Keyframes
   ist bereits opacity 0, die Welle verschwindet also sauber. */
.cd-hero__puls > span:last-child { animation: cdHeroPuls 2.4s ease-out 2; }

@keyframes cdHeroPuls {
  0%   { transform: scale(1);   opacity: .7; }
  70%  { transform: scale(2.6); opacity: 0; }
  100% { transform: scale(2.6); opacity: 0; }
}

/* WCAG 2.3.3 — die Bewegung ist Zier und faellt weg, sobald das
   Geraet reduzierte Bewegung meldet. Der Punkt bleibt. */
@media (prefers-reduced-motion: reduce) {
  .cd-hero__puls > span:last-child { animation: none; opacity: .35; }
}

/* ------------------------------------------------------------
   Ueberschrift und Beitext
   ------------------------------------------------------------ */
.cd-hero__titel { max-inline-size: 18ch; }
.cd-hero--fallstudie .cd-hero__titel { max-inline-size: 22ch; }

.cd-hero__unterzeile {
  margin-block-start: var(--cd-a4);
  font-size: var(--cd-gr-gross);
  color: var(--cd-text-2);
}

.cd-hero__text {
  margin-block-start: var(--cd-a5);
  font-size: var(--cd-gr-gross);
  line-height: var(--cd-zeile-text);
  color: var(--cd-text-2);
  max-inline-size: 60ch;
}
.cd-hero__text > * + * { margin-block-start: var(--cd-a4); }
.cd-auf-dunkel .cd-hero__text { color: var(--cd-text-auf-dunkel); }

/* ------------------------------------------------------------
   Vertrauensmerkmale
   ------------------------------------------------------------
   Eine Zeile aus Kurzangaben. Das Trennzeichen kommt aus dem
   CSS — als Textknoten stuende es im Vorlesefluss.
   ------------------------------------------------------------ */
.cd-hero__merkmale {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--cd-a4);
  margin-block-start: var(--cd-a6);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .1em;
  text-transform: uppercase;
  /* --cd-text-3 ergab auf --cd-flaeche-3 nur 4,48:1 bei 11 px und
     riss damit 1.4.3. --cd-text-2 bringt 5,53:1 — gemessen, nicht
     geschaetzt. Groesse und Laufweite bleiben, nur die Farbe wird
     dunkler. */
  color: var(--cd-text-2);
}
.cd-hero__merkmal { display: flex; align-items: center; gap: var(--cd-a2); }
.cd-hero__merkmal:not(:last-child)::after {
  content: "\00b7";
  margin-inline-start: var(--cd-a4);
  color: var(--cd-text-2);
}

/* ------------------------------------------------------------
   Knoepfe
   ------------------------------------------------------------ */
.cd-hero__knoepfe {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--cd-a5);
  margin-block-start: var(--cd-a7);
}

/* Die schlichte Fassung: ein Textverweis neben dem Hauptknopf,
   kein zweiter Knopf. Zwei Flaechen in der Hauptfarbe nebeneinander
   haetten keinen Hauptknopf mehr.

   Die Mindesthoehe von 24px steht ausdruecklich da: der Verweis
   steht allein in einer Knopfreihe und nicht in einem Satz — die
   Ausnahme fuer Verweise im Fliesstext (WCAG 2.5.8) gilt hier
   also nicht. */
.cd-hero__anrufSchlicht {
  display: inline-flex;
  align-items: center;
  min-block-size: 24px;
  padding-block: 6px 3px;
  color: var(--cd-text-2);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .1em;
  text-transform: uppercase;
  border-block-end: 1px solid transparent;
  transition: color var(--cd-zeit) ease, border-color var(--cd-zeit) ease;
}
.cd-hero__anrufSchlicht:hover {
  color: var(--cd-rot);
  border-block-end-color: currentColor;
}

/* Der Anrufweg steht als Block: Erreichbarkeit ueber der Nummer.
   Die Nummer ist Text und keine Grafik — sie muss kopierbar und
   vorlesbar bleiben. */
.cd-hero__anruf {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--cd-a3);
}
.cd-hero__anrufZeile {
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .14em;
  text-transform: uppercase;
  /* wie bei .cd-hero__merkmale: --cd-text-3 ergibt auf
     --cd-flaeche-3 nur 4,48:1 bei 11 px und reisst 1.4.3. */
  color: var(--cd-text-2);
}
.cd-hero__anrufKnopf {
  display: inline-flex;
  align-items: center;
  gap: var(--cd-a4);
  padding: 18px 28px;
  background: var(--cd-rot);
  color: var(--cd-weiss);
  border-radius: var(--cd-r-knopf);
  font-family: var(--cd-schrift-display);
  font-weight: 700;
  font-size: var(--cd-gr-h3);
  letter-spacing: -.01em;
  line-height: 1.1;
  transition: background var(--cd-zeit) ease, transform var(--cd-zeit) ease;
}
.cd-hero__anrufKnopf:hover {
  background: var(--cd-rot-tief);
  color: var(--cd-weiss);
  transform: translateY(-2px);
}
.cd-auf-dunkel .cd-hero__anrufKnopf:hover { background: var(--cd-rot-hell); }

@media (prefers-reduced-motion: reduce) {
  .cd-hero__anrufKnopf:hover { transform: none; }
}

/* ------------------------------------------------------------
   Fusstext und Plaketten
   ------------------------------------------------------------ */
.cd-hero__fuss {
  margin-block-start: var(--cd-a5);
  font-size: var(--cd-gr-klein);
  color: var(--cd-text-2);
}
.cd-auf-dunkel .cd-hero__fuss { color: var(--cd-text-auf-dunkel-2); }

.cd-hero__plaketten {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--cd-a5);
  margin-block-start: var(--cd-a6);
}
.cd-hero__plakette { display: block; block-size: 44px; inline-size: auto; }

/* ------------------------------------------------------------
   Bild
   ------------------------------------------------------------ */
.cd-hero__bildrahmen { margin: 0; }
.cd-hero__bild {
  display: block;
  inline-size: 100%;
  block-size: auto;
}
.cd-hero__bildhinweis {
  margin-block-start: var(--cd-a2);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .1em;
  color: var(--cd-text-2);
}

/* ------------------------------------------------------------
   Bauform: mit Seitenspalte
   ------------------------------------------------------------
   Die dunkle Notiz greift von unten in das Bild. Der Versatz
   kommt aus dem CSS und nicht aus der Reihenfolge im Quelltext —
   im Vorlesefluss steht die Notiz hinter dem Bild.
   ------------------------------------------------------------ */
.cd-hero__notiz {
  position: relative;
  max-inline-size: 22rem;
  margin-block-start: calc(var(--cd-a5) * -1);
  margin-inline-start: var(--cd-a4);
  padding: var(--cd-a5) var(--cd-a6);
  border-inline-start: 3px solid var(--cd-rot);
}
.cd-hero__notizKicker {
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--cd-text-auf-dunkel-2);
  margin-block-end: var(--cd-a2);
}
.cd-hero__notizText { font-size: var(--cd-gr-klein); line-height: 1.55; }

/* Punkte der Seitenspalte in der dunklen Notiz.
   Eingefuehrt am 07.09.2026: Bis dahin kannte die Notiz nur Kicker
   und Text, gepflegte Eintraege standen nirgends. Der Kicker stellt
   die Bedingung ("Zeit fuer einen Relaunch, wenn ..."), die Punkte
   fuehren sie aus — deshalb dieselbe Groesse wie der Notiztext und
   nur eine zurueckhaltende Marke davor.

   list-style bewusst entfernt und die Marke selbst gesetzt: Der
   Standardpunkt sitzt bei dieser Zeilenhoehe zu hoch und der
   Einzug laesst sich nicht sauber auf die Kante der Notiz
   ausrichten.                                                     */
.cd-hero__notizListe {
  list-style: none;
  margin: var(--cd-a2) 0 0;
  padding: 0;
  display: grid;
  gap: var(--cd-a2);
}
.cd-hero__notizPunkt {
  position: relative;
  padding-inline-start: 1.1em;
  font-size: var(--cd-gr-klein);
  line-height: 1.5;
}
.cd-hero__notizPunkt::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: .62em;
  inline-size: .4em;
  block-size: .4em;
  border-radius: 50%;
  background: var(--cd-rot);
}

/* ------------------------------------------------------------
   Bauform: mit Beispielkarte
   ------------------------------------------------------------ */
.cd-hero__karte {
  background: var(--cd-weiss);
  border: 1px solid var(--cd-linie);
  border-radius: var(--cd-r-karte);
  box-shadow: var(--cd-schatten-karte);
  padding: var(--cd-a5) var(--cd-a5) var(--cd-a5);
}
.cd-hero__karteKopf {
  display: flex;
  align-items: center;
  gap: var(--cd-a3);
  padding-block-end: var(--cd-a4);
  border-block-end: 1px solid var(--cd-linie-2);
  margin-block-end: var(--cd-a5);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cd-text-2);
}
.cd-hero__punkt {
  flex: 0 0 auto;
  inline-size: 9px;
  block-size: 9px;
  border-radius: 50%;
  background: var(--cd-rot);
}
.cd-hero__frage {
  padding: var(--cd-a3) var(--cd-a4);
  background: var(--cd-flaeche-2);
  border-radius: var(--cd-r-feld);
  font-size: var(--cd-gr-klein);
  color: var(--cd-text-2);
  margin-block-end: var(--cd-a5);
}
.cd-hero__antwort { color: var(--cd-dunkel-2); }
.cd-hero__antwort p + p { margin-block-start: var(--cd-a3); }

/* DREIMAL DIESELBE URSACHE - 24.08.
   --cd-text-schwach (#7E97A2) ist fuer DUNKLEN Grund gezeichnet.
   Der Seitenkopf ist hell (#E9EEF1, die Karte darin sogar weiss);
   dort kommt der Ton bei 11 px auf 2,6 bis 3,1 zu 1 und reisst
   1.4.3. axe hat "Quellen" mit 3,07 : 1 gemeldet - die anderen
   zwei Stellen (Trennpunkt der Merkmale, Bildhinweis) kamen auf
   der geprueften Seite nur nicht vor. Der Fehler stand da trotzdem.

   Alle drei tragen jetzt --cd-text-2 (#4E626C, 5,46 : 1 auf dem
   Bahngrund) - wie es der Trennstrich der Krume weiter oben seit
   laengerem vormacht. Die Stelle war also schon einmal gefunden
   und nur nicht zu Ende gedacht.

   Keine Ausnahme fuer dunklen Grund: Alle 36 Seitenkoepfe stehen
   auf der hellen Vorgabe, nachgezaehlt. Kommt je ein dunkler dazu,
   gehoert --cd-text-schwach dort wieder hin. */
.cd-hero__quellen {
  margin-block-start: var(--cd-a5);
  padding-block-start: var(--cd-a4);
  border-block-start: 1px solid var(--cd-linie-2);
}
.cd-hero__quellenKopf {
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cd-text-2);
  margin-block-end: var(--cd-a3);
}
.cd-hero__quellenListe { display: grid; gap: var(--cd-a2); }
.cd-hero__quellenListe li {
  display: flex;
  gap: var(--cd-a3);
  align-items: baseline;
  font-size: var(--cd-gr-klein);
  color: var(--cd-text-2);
}
.cd-hero__quellenZahl { color: var(--cd-rot); }

.cd-hero__karteFuss {
  margin-block-start: var(--cd-a5);
  padding-inline-start: var(--cd-a4);
  border-inline-start: 2px solid var(--cd-rot);
  font-size: var(--cd-gr-klein);
  color: var(--cd-text-2);
}

/* ------------------------------------------------------------
   Bauform: Notfall
   ------------------------------------------------------------
   Der Kopf traegt unten eine kraeftige rote Kante — sie ist das
   einzige Element der Seite in dieser Staerke.
   ------------------------------------------------------------ */
.cd-hero--notfall { border-block-end: 4px solid var(--cd-rot); }

.cd-hero__tafel {
  background: var(--cd-weiss);
  border-inline-start: 3px solid var(--cd-rot);
  padding: var(--cd-a6);
}
.cd-hero__tafelKicker {
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--cd-text-2);
  margin-block-end: var(--cd-a5);
}

/* Ein Pixel Abstand auf gefaerbtem Grund erzeugt die Trennlinien —
   so bleibt jede Zeile eine eigene Flaeche. */
.cd-hero__zeilen {
  display: grid;
  gap: 1px;
  background: var(--cd-linie-3);
  border: 1px solid var(--cd-linie-3);
}
.cd-hero__zeile {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--cd-a5);
  padding: var(--cd-a4) var(--cd-a5);
  background: var(--cd-weiss);
}
.cd-hero__zeile dt { color: var(--cd-tinte); }
.cd-hero__zeile dd {
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--cd-text-2);
  white-space: nowrap;
}
.cd-hero__zeile:first-child dd { color: var(--cd-rot); }

.cd-hero__tafelText {
  margin-block-start: var(--cd-a5);
  font-size: var(--cd-gr-klein);
  color: var(--cd-text-2);
}

/* ------------------------------------------------------------
   Bauform: mit Codekasten
   ------------------------------------------------------------ */
.cd-hero__code {
  margin: 0;
  background: var(--cd-weiss);
  border: 1px solid var(--cd-linie-3);
  border-radius: var(--cd-r-feld);
}
.cd-hero__codeLeiste {
  display: flex;
  align-items: center;
  gap: var(--cd-a2);
  padding: var(--cd-a3) var(--cd-a4);
  border-block-end: 1px solid var(--cd-linie-3);
}
.cd-hero__codePunkte { display: flex; gap: var(--cd-a2); }
.cd-hero__codePunkte > span {
  inline-size: 10px;
  block-size: 10px;
  border-radius: 50%;
  background: var(--cd-linie);
}
.cd-hero__codePunkte > span:first-child { background: var(--cd-rot); }
.cd-hero__codeName {
  margin-inline-start: var(--cd-a3);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cd-text-2);
}

/* Quelltext bricht nicht um. Er rollt in seinem eigenen Kasten —
   die Seite selbst darf nie waagerecht rollen (WCAG 1.4.10). */
/* Der Kasten ist ein Tabstopp (tabindex am pre, siehe Vorlage) —
   ein scrollbarer Bereich ohne Tastaturzugang ist ein Verstoss gegen
   2.1.1. Dann braucht er auch einen sichtbaren Fokusring: Der Kasten
   steht auf dunklem Grund, der Ring des Browsers ist dort kaum zu
   sehen. */
.cd-hero__codeText:focus-visible {
  outline: 3px solid var(--cd-rot-auf-dunkel);
  outline-offset: -3px;
}

.cd-hero__codeText {
  margin: 0;
  padding: var(--cd-a5);
  overflow-x: auto;
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-klein);
  line-height: 1.85;
  color: var(--cd-text-2);
}

/* ------------------------------------------------------------
   Bauform: mit Kontaktkarten
   ------------------------------------------------------------ */
.cd-hero__wege {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1px;
  margin-block-start: var(--cd-a7);
  background: var(--cd-linie);
  border: 1px solid var(--cd-linie);
  border-block-end: 0;
}
.cd-hero__weg { background: var(--cd-weiss); }
.cd-hero__weg--dunkel { background: var(--cd-dunkel); }

/* Die ganze Karte ist der Weg — nicht nur ein Wort darin. Der
   Link traegt deshalb die Flaeche und nicht umgekehrt. */
.cd-hero__wegLink {
  display: flex;
  flex-direction: column;
  gap: var(--cd-a3);
  block-size: 100%;
  padding: var(--cd-a6);
  color: var(--cd-tinte);
  transition: background var(--cd-zeit) ease;
}
.cd-hero__weg:not(.cd-hero__weg--dunkel) .cd-hero__wegLink:hover { background: var(--cd-flaeche-1); }
.cd-hero__weg--dunkel .cd-hero__wegLink:hover { background: var(--cd-dunkel-2); }

.cd-hero__wegLabel {
  display: flex;
  align-items: center;
  gap: var(--cd-a3);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .15em;
  text-transform: uppercase;
  color: var(--cd-text-2);
}
.cd-hero__weg--dunkel .cd-hero__wegLabel { color: var(--cd-rot-auf-dunkel); }

/* Der Signalpunkt erbt sonst das Grau der Beschriftung — er soll
   aber die Signalfarbe tragen. */
.cd-hero__wegLabel .cd-hero__puls { color: var(--cd-rot); }
.cd-hero__weg--dunkel .cd-hero__wegLabel .cd-hero__puls { color: var(--cd-rot-auf-dunkel); }

.cd-hero__wegTitel {
  font-family: var(--cd-schrift-display);
  font-weight: 700;
  font-size: var(--cd-gr-h3);
  letter-spacing: -.02em;
  line-height: var(--cd-zeile-kopf);
}
.cd-hero__wegText {
  font-size: var(--cd-gr-klein);
  line-height: 1.6;
  color: var(--cd-text-2);
}
.cd-hero__weg--dunkel .cd-hero__wegText { color: var(--cd-text-auf-dunkel); }

/* ------------------------------------------------------------
   Bauform: Fallstudie
   ------------------------------------------------------------
   Vollflaechiges Bild, darueber ein Verlauf, darueber der Text.
   Alle drei Lagen sind positioniert — es entscheidet also die
   Reihenfolge im Quelltext, nicht ein z-index.
   ------------------------------------------------------------ */
/* Zwei Klassen, damit die Regel die gemeinsame Luft aus
   bahnen.css sticht: .cd-bahn steht dort NACH den @import-Zeilen
   und gewaenne bei gleicher Spezifitaet. */
.cd-hero.cd-hero--fallstudie {
  position: relative;
  overflow: hidden;
  border-block-end: 0;
  padding-block: var(--cd-a6) var(--cd-a8);
}
.cd-hero__grund {
  position: absolute;
  inset: 0;
  background-color: var(--cd-dunkel-2);
  background-image: var(--cd-hero-bild);
  background-size: cover;
  background-position: center;
}
.cd-hero__schleier {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    180deg,
    color-mix(in srgb, var(--cd-tinte) 92%, transparent) 0%,
    color-mix(in srgb, var(--cd-tinte) 55%, transparent) 34%,
    color-mix(in srgb, var(--cd-tinte) 96%, transparent) 100%
  );
}
.cd-hero__fallstudie {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: var(--cd-a9);
  min-block-size: 30rem;
}
.cd-hero__eckdaten {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--cd-a3);
  margin-block-end: var(--cd-a5);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cd-text-auf-dunkel);
}
.cd-hero__art {
  background: var(--cd-rot);
  color: var(--cd-weiss);
  padding: var(--cd-a1) var(--cd-a3);
}

/* ------------------------------------------------------------
   Notebook-Luecke
   ------------------------------------------------------------
   Zwischen 1101 und 1419 px verliert die Inhaltsspalte ihre
   Vollbreite. Die Nebenspalte wird dort zuerst zu schmal.
   ------------------------------------------------------------ */
@media (max-width: 1419px) {
  .cd-hero__raster { gap: var(--cd-a7); }
  .cd-hero__titel { max-inline-size: none; }
}

/* ------------------------------------------------------------
   Unter 900 px laufen alle Bahnen einspaltig
   ------------------------------------------------------------ */
@media (max-width: 900px) {
  .cd-hero__raster {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--cd-a7);
    align-items: start;
  }
  .cd-hero__wege { grid-template-columns: minmax(0, 1fr); }
  .cd-hero__notiz {
    max-inline-size: none;
    margin-inline-start: 0;
  }
  .cd-hero__fallstudie { gap: var(--cd-a7); min-block-size: 0; }
}

/* ------------------------------------------------------------
   Mobilstufe
   ------------------------------------------------------------ */
@media (max-width: 600px) {
  .cd-hero__knoepfe { align-items: stretch; gap: var(--cd-a4); }
  .cd-hero__anruf { align-self: stretch; }
  .cd-hero__anrufKnopf {
    justify-content: center;
    font-size: var(--cd-gr-h4);
    padding: var(--cd-a4) var(--cd-a5);
  }
  .cd-hero__knoepfe .cd-knopf { justify-content: center; }
  .cd-hero__zeile {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--cd-a2);
  }
  .cd-hero__wegLink { padding: var(--cd-a5); }
}

/* ============================================================
   Luft um den Seitenkopf
   ============================================================
   Gemessen: In der Vorlage ist der Hero rund 766 px hoch, hier
   waren es 576. Der Unterschied lag fast vollstaendig oben — die
   Regel "erste Bahn ohne Luft" aus bahnen.css hatte den oberen
   Innenabstand auf 0 gesetzt, und die Schlagzeile klebte an der
   Navigation.

   Der Wert waechst mit der Fensterbreite mit, bleibt aber
   gedeckelt: Auf einem schmalen Geraet ist viel Luft vor der
   Schlagzeile verschwendete Bildschirmhoehe, auf einem breiten
   wirkt zu wenig gedraengt.
   ============================================================ */
/* GESETZT WIRD DER TOKEN und nicht das padding.
   Diese Datei wird von bahnen.css ganz oben eingebunden, der
   gemeinsame Rhythmus steht dort weiter unten. Beide Regeln wiegen
   genau eine Klasse — die spaetere gewinnt. Ein padding an dieser
   Stelle war deshalb wirkungslos, ohne dass es auffiel: der Wert
   war frueher derselbe wie der allgemeine.

   Der Seitenkopf traegt weniger Luft als eine gewoehnliche Bahn
   (88 statt 118 bei 1440px) — ueber ihm steht bereits der
   Kopfbereich, und was hier an Hoehe draufgeht, fehlt unten am
   ersten Bildschirm.

   Der Wert waechst mit der Fensterbreite mit, bleibt aber
   gedeckelt: Auf einem schmalen Geraet ist viel Luft vor der
   Schlagzeile verschwendete Bildschirmhoehe, auf einem breiten
   wirkt zu wenig gedraengt. */
.cd-hero {
  --cd-bahn: clamp(48px, 6.1vw, 88px);
  /* Der Entwurf setzt unten neun Prozent mehr statt der fuenf einer
     gewoehnlichen Bahn — die Schlagzeile oben wiegt schwerer als
     die Knopfreihe unten. */
  --cd-bahn-fuss: 1.09;
}

/* Unter 900 px wird die Bahn einspaltig und die Grafik rutscht
   unter den Text — dann genuegt weniger Luft, sonst muss man
   zweimal wischen, bevor ueberhaupt etwas kommt. */
@media (max-width: 900px) {
  .cd-hero { --cd-bahn: clamp(32px, 5vw, 56px); }
}


/* ============================================================
   Bauform: Kompakt mit Nutzenband
   ============================================================
   Fuer Seiten, deren Kopf viel zu sagen hat und trotzdem kurz
   bleiben soll. Erste Anwendung:
   /leistungen/webseite-erstellen-lassen.

   Zwei Unterschiede zur Seitenspalten-Bauform:

   1. Die vier Vertrauenspunkte stehen NICHT in der Kopfspalte,
      sondern als Band quer unter beiden Spalten. In der
      Kopfspalte draengen sie den Text nach unten; im Band tragen
      sie sich selbst.

   2. Es gibt genau EINE Handlungsflaeche. Der zweite Weg ist ein
      Textverweis (cd_telefonknopf = schlicht) und keine zweite
      rote Flaeche.

   DIESER BLOCK STEHT AM DATEIENDE, UND ZWAR MIT ABSICHT.
   Weiter oben setzt `.cd-hero { --cd-bahn: … }` die Luft der
   Bahn. Eine Regel mit demselben Gewicht, die frueher steht,
   verliert dagegen — die Bahn behaelt dann ihre volle Luft, und
   von der Ersparnis bleibt rund ein Drittel liegen. Gemessen:
   628 statt 589 px. Wer hier etwas ergaenzt, ergaenzt es
   dahinter.
   ============================================================ */

.cd-hero--kompakt {
  --cd-bahn: clamp(40px, 4.8vw, 72px);
  --cd-bahn-fuss: 1;
}

@media (max-width: 900px) {
  .cd-hero--kompakt { --cd-bahn: clamp(28px, 4.4vw, 48px); }
}

/* Die Zeichnung ist flach und breit; der Text darf deshalb den
   groesseren Anteil behalten. */
.cd-hero--kompakt .cd-hero__raster {
  grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);
  gap: var(--cd-a7);
  align-items: center;
}

/* Zwei Klassen, damit die Zeile aus der Notebook-Luecke
   (`.cd-hero__titel { max-inline-size: none }`) sie nicht
   aushebelt — die steht in einer Media-Abfrage und wiegt nur
   eine Klasse, greift aber genau dort, wo der Titel sonst
   vierzeilig bricht. */
.cd-hero--kompakt .cd-hero__titel {
  max-inline-size: 16ch;
  font-size: clamp(32px, 1.7rem + 2.1vw, 52px);
}

.cd-hero--kompakt .cd-hero__text {
  max-inline-size: 46ch;
}

/* GEWICHT SCHLAEGT MEDIA-ABFRAGE.

   Die Regel darueber wiegt zwei Klassen. Die Einspalter-Regel fuer
   schmale Fenster (`.cd-hero__raster` in @media max-width: 900px)
   wiegt nur eine — sie verliert deshalb, und zwar unabhaengig davon,
   wie weit hinten sie steht. Ohne den folgenden Block bleibt der Kopf
   bis 320 px hinunter zweispaltig: gemessen 132 px Textspalte und
   108 x 60 px Zeichnung, die Ueberschrift laeuft aus ihrer Spalte
   heraus und die Rufnummer bricht mitten in der Zahl um.

   Wer oben eine Regel mit zwei Klassen ergaenzt, ergaenzt hier ihr
   Gegenstueck fuer schmale Fenster. */
@media (max-width: 900px) {
  .cd-hero--kompakt .cd-hero__raster {
    grid-template-columns: minmax(0, 1fr);
    align-items: start;
    gap: var(--cd-a7);
  }
}

/* Knopf und Anrufweg bleiben laenger nebeneinander: der kleinere
   Abstand verschiebt den Umbruch um rund 80 px nach unten. */
.cd-hero--kompakt .cd-hero__knoepfe {
  gap: var(--cd-a4) var(--cd-a5);
  margin-block-start: var(--cd-a6);
}

/* ------------------------------------------------------------
   Das Nutzenband
   ------------------------------------------------------------
   Vier Spalten, je eine rote Marke und ein ganzer Satz. Eine
   Haarlinie darueber statt eines Kastens — das Band gehoert zum
   Kopf und ist keine eigene Bahn.

   Der Abstand steht am Band und nicht an der Bahn darueber:
   Beide `.cd-bahn__inhalt` sind Geschwister im selben
   <section>, und ein Aussenabstand am zweiten faellt weg, wenn
   das Band leer bleibt.
   ------------------------------------------------------------ */
.cd-hero__band {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--cd-a5) var(--cd-a6);
  margin: var(--cd-a7) 0 0;
  padding: var(--cd-a6) 0 0;
  border-block-start: 1px solid var(--cd-linie);
}

.cd-hero__bandspalte { min-inline-size: 0; }

/* Die Beschreibungsliste bringt einen eigenen Einzug am dd mit
   (40px im Browser-Standard). Ohne die Ruecknahme stuende der Satz
   eingerueckt unter seiner Marke. */
.cd-hero__bandmarke {
  margin: 0 0 var(--cd-a2);
  font-family: var(--cd-schrift-mono);
  font-size: var(--cd-gr-mikro);
  letter-spacing: .14em;
  text-transform: uppercase;
  /* --cd-rot traegt auf --cd-flaeche-3 5,22:1 und damit 1.4.3 fuer
     Kleintext. Gemessen, nicht geschaetzt. */
  color: var(--cd-rot);
}

.cd-hero__bandtext {
  margin: 0;
  margin-inline-start: 0;
  font-size: var(--cd-gr-klein);
  line-height: 1.5;
  color: var(--cd-text-2);
}

/* Vier Spalten brauchen Breite. Ab der Notebook-Luecke abwaerts
   zwei, am Handy eine — vier Spalten zu je 21 Zeichen sind keine
   Spalten mehr, sondern Silbentrennung. */
@media (max-width: 1100px) {
  .cd-hero__band { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 600px) {
  .cd-hero__band {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--cd-a4);
    margin-block-start: var(--cd-a6);
    padding-block-start: var(--cd-a5);
  }
}


/* ============================================================
   Bauform: Werblich mit Aussagenzeile
   ============================================================
   Fuer die Startseite. Rakete, steigende Kurve, Aufbruch — und
   darunter vier Aussagen quer unter beiden Spalten.

   ZWEI ENTSCHEIDUNGEN, DIE NICHT STILL ZURUECKGEDREHT WERDEN
   SOLLTEN:

   1. Die Dynamik traegt die ZEICHNUNG, die Aussagen traegt der
      TEXT — und dort steht nichts, was nicht belegbar waere.
      "+47 % Umsatz" oder "230 zufriedene Kunden" sind
      Tatsachenbehauptungen ueber erzielte Ergebnisse; wer sie
      aufstellt, muss sie im Streitfall beweisen. Im Projekt sind
      erfundene Zahlen bereits einmal ausdruecklich verworfen
      worden (siehe "5,0 Google-Bewertung").

   2. Die Aussagen stehen in TINTE, nicht in Rot. Rot bleibt im
      Kopfbereich auf genau zwei Stellen: dem Handlungsknopf und
      den kurzen Strichen ueber den Spalten. Vier rote Zeilen plus
      roter Knopf plus rotes Wort in der Ueberschrift waeren mehr
      Rot als sonst irgendwo im Haus, und sie stritten mit dem
      Knopf um die Aufmerksamkeit.

   DIESER BLOCK STEHT AM DATEIENDE, UND ZWAR MIT ABSICHT — siehe
   den Block "Kompakt mit Nutzenband" darueber. Weiter oben setzt
   `.cd-hero { --cd-bahn: … }` die Luft der Bahn; eine Regel mit
   demselben Gewicht, die frueher steht, verliert dagegen.
   ============================================================ */

.cd-hero--umsatz {
  --cd-bahn: clamp(40px, 4.8vw, 76px);
  --cd-bahn-fuss: 1;
}

@media (max-width: 900px) {
  .cd-hero--umsatz { --cd-bahn: clamp(28px, 4.4vw, 48px); }
}

/* Die Zeilen stehen jetzt FEST im Text (Trennzeichen in der
   Ueberschrift), nicht mehr ueber eine Breitengrenze. Der Deckel
   bleibt trotzdem: Eine einzelne zu lange Zeile soll umbrechen
   duerfen statt aus der Spalte zu laufen. */
.cd-hero--umsatz .cd-hero__titel {
  max-inline-size: 20ch;
  font-size: clamp(36px, 1.9rem + 2.6vw, 60px);
  line-height: 1.06;
}

/* ------------------------------------------------------------
   Der Tippeffekt
   ------------------------------------------------------------
   Die Ueberschrift schreibt sich Zeile fuer Zeile von links nach
   rechts auf, in Stufen statt gleitend — das ergibt das Tippen.
   OHNE Schreibstrich.

   DREI DINGE, DIE DARAN NICHT VERHANDELBAR SIND:

   1. Der VOLLE TEXT steht von Anfang an im Dokument. Aufgedeckt
      wird ueber einen Zuschnitt, also rein optisch. Wer den Text
      stattdessen Zeichen fuer Zeichen einfuegt, liefert
      Vorleseprogrammen eine wachsende Ueberschrift und
      Suchmaschinen im schlechtesten Fall ein leeres h1.

   2. Der GRUNDZUSTAND ist die fertige Ueberschrift. Der Lauf nimmt
      sie nur zurueck (from im keyframe, backwards). Ohne
      Animationsunterstuetzung und ohne die Klasse cd-bewegung
      steht damit einfach der Text da.

   3. Alles ENDLICH und deutlich unter fuenf Sekunden: drei Zeilen
      zu 0,95 s mit 0,8 s Versatz, die letzte ist bei 2,55 s fertig.
      Eine Dauerbewegung waere ein Verstoss gegen WCAG 2.2.2.

   WARUM ZUSCHNITT UND NICHT WACHSENDE BREITE:

   Beides deckt auf. Eine wachsende Breite braucht aber
   white-space: nowrap — sie zwingt jede Zeile in EINE Zeile, und
   eine zu lange Ueberschrift laeuft dann auf schmalen Geraeten aus
   der Spalte. Der Zuschnitt kann das nicht: Der Text bricht
   normal um, sichtbar wird nur ein Ausschnitt davon.

   Der Preis war ein Schreibstrich, der am Zeilenende stehen bleibt
   statt mitzulaufen — der ist hier bewusst weggelassen, damit
   entfaellt der Grund fuer die riskantere Technik.
   ------------------------------------------------------------ */
.cd-hero__titelzeile {
  display: block;
}

.cd-hero__titelzeileText {
  display: inline-block;
  max-inline-size: 100%;
}

html.cd-bewegung .cd-hero--umsatz .cd-hero__titelzeileText {
  animation: cdTippen .95s steps(22, end) 1 backwards;
  animation-delay: calc((var(--cdZeile, 1) - 1) * .8s);
}

@keyframes cdTippen {
  from { clip-path: inset(0 100% 0 0); }
  to   { clip-path: inset(0 0 0 0); }
}

/* Wer Bewegung abbestellt hat, bekommt die fertige Ueberschrift
   ohne Lauf (WCAG 2.3.3). */
@media (prefers-reduced-motion: reduce) {
  html.cd-bewegung .cd-hero--umsatz .cd-hero__titelzeileText { animation: none; }
}

/* ------------------------------------------------------------
   Die Aussagenzeile
   ------------------------------------------------------------
   Quer unter beiden Spalten, nicht in der Kopfspalte: dort
   draengte sie den Text nach unten, hier traegt sie sich selbst.

   Sie benutzt dasselbe Markup wie das Nutzenband der Bauform
   "kompakt" (dl mit dt und dd aus titel und text) und nur eine
   andere Gestalt. Wer am Markup etwas aendert, aendert beide.

   Die Striche stehen an den Spalten und nicht als eine Haarlinie
   ueber der ganzen Zeile: Eine durchgehende Linie plus vier
   Striche waere zweimal dieselbe Ansage.
   ------------------------------------------------------------ */
.cd-hero--umsatz .cd-hero__band {
  margin: var(--cd-a7) 0 0;
  padding: 0;
  border-block-start: 0;
  gap: var(--cd-a5) var(--cd-a6);
}

.cd-hero--umsatz .cd-hero__bandspalte {
  padding-block-start: var(--cd-a4);
  border-block-start: 3px solid var(--cd-rot);
}

.cd-hero--umsatz .cd-hero__bandmarke {
  margin: 0 0 var(--cd-a2);
  font-family: var(--cd-schrift-display);
  font-weight: 700;
  font-size: clamp(18px, 1rem + .5vw, 22px);
  letter-spacing: -.022em;
  line-height: var(--cd-zeile-kopf);
  text-transform: none;
  color: var(--cd-tinte);
  /* Ziffern in Spalten brauchen gleiche Laufweite, sonst tanzt die
     Reihe bei "ca. 8-16 Wochen" gegen "seit 2005". */
  font-variant-numeric: tabular-nums;
}

.cd-hero--umsatz .cd-hero__bandtext {
  font-size: var(--cd-gr-klein);
  line-height: 1.5;
  color: var(--cd-text-2);
}

/* Vier Spalten brauchen Breite. Ab der Notebook-Luecke abwaerts
   zwei, unter 520 px eine. Der 1100er-Block des Nutzenbands greift
   hier mit, der 600er nicht — die Aussagen sind laenger als dessen
   Marken und brauchen frueher die volle Breite. */
@media (max-width: 520px) {
  .cd-hero--umsatz .cd-hero__band {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--cd-a5);
  }
}

@media (max-width: 900px) {
  .cd-hero--umsatz .cd-hero__titel { max-inline-size: none; }
  .cd-hero--umsatz .cd-hero__text { max-inline-size: none; }
  .cd-hero--umsatz .cd-hero__band { margin-block-start: var(--cd-a6); }
}
