/* Selbst gehostete Schriften (E-3, 01.08.2026): P052 (OFL 1.1, ohne
   Reserved Font Name) und "Lindner Sans" — ein GPOS-erhaltender Teilsatz
   der IBM Plex Sans, umbenannt nach OFL Nr. 3 (Reserved Font Name "Plex";
   ein Teilsatz ist eine Modified Version). Quellen, Pins, SHA-256:
   AUFTRAEGE.md, A-2026-08-01-1 Stufe 3. `font-display: swap`, weil die
   Typografie betriebssystemunabhängig verlässlich erscheinen muss —
   `optional` dürfte die Schrift beim Erstbesuch unterdrücken, `block`
   versteckte den Text. Kein `local()`: die ausgelieferte Datei ist die
   einzige zulässige Quelle, sonst wäre der Zeilenfall wieder geräteabhängig. */
@font-face {
  font-family: "P052";
  src: url("fonts/p052-regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "P052";
  src: url("fonts/p052-bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "P052";
  src: url("fonts/p052-italic.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: "Lindner Sans";
  src: url("fonts/lindner-sans-400.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Lindner Sans";
  src: url("fonts/lindner-sans-500.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Lindner Sans";
  src: url("fonts/lindner-sans-600.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Lindner Sans";
  src: url("fonts/lindner-sans-700.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

:root {
  --ink: #14233a;
  --muted: #53647a;
  --navy: #0b2648;
  --blue: #075f9f;
  --blue-dark: #034b80;
  --dark-panel: linear-gradient(130deg, var(--navy), var(--blue-dark));
  --gold: #f2a900;
  --gold-ink: #765300;
  --gold-bright: #ffd23f;
  --paper: #f7f2e4;
  --sky: #e8f4fb;
  --mist: #f4f7fa;
  --line: #d8e1e9;
  --white: #fff;
  --sand: #f2eadf;
  --shadow: 0 18px 50px rgb(16 45 73 / 10%);
  --radius: 1.25rem;
  --content: 72rem;
  --display-size: clamp(2rem, 4vw, 3rem);
  --serif: "P052", "Palatino Linotype", Palatino, "URW Palladio L", "Book Antiqua", Georgia, "Times New Roman", serif;
  --sans: "Lindner Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
}

body {
  margin: 0;
  color: var(--ink);
  background: var(--white);
  font-family: var(--sans);
  font-size: 1rem;
  /* 0,5469 ist die in Stufe 1 vorab festgelegte x-Höhen-Ratio des bisherigen
     Fließtexts; Lindner Sans (x-Höhe 0,516) rendert damit in derselben
     optischen Größe wie der bisherige Systemtext. Alle Sans-Messreihen aus
     Stufe 1 und der Codex-Gegenprüfung liefen unter genau diesem Wert.
     Browser ohne font-size-adjust zeigen die Schrift nominal — kleiner,
     nie größer, also ohne Überlaufrisiko. font-synthesis: es gibt nichts
     zu synthetisieren (vier Sans-Gewichte und die P052-Kursive liegen als
     Dateien vor; der Korpus enthält kein <em>/<i>), und Faux-Schnitte
     wären ein stiller Qualitätsdefekt. */
  font-size-adjust: 0.5469;
  font-synthesis: none;
  line-height: 1.65;
  text-rendering: optimizeLegibility;
}

/* Die Serifenbereiche rendern P052 nominal. Die vom Body vererbte
   Sans-Normalisierung würde P052 um +21,8 % vergrößern und den gesamten
   Prüfstand entwerten — das war Instrumentenfehler 2 der Stufe 1. Jede
   Regel, die var(--serif) setzt, steht deshalb auch hier. */
h1,
h2,
h3,
.brand-mark,
.signature,
.statement p,
.specimen-row p,
.stat strong {
  font-size-adjust: none;
}

img,
svg {
  display: block;
  max-width: 100%;
}

a {
  color: var(--blue);
  text-underline-offset: 0.18em;
  transition: color 0.15s ease, background-color 0.15s ease;
}

a:hover {
  color: var(--blue-dark);
}

.skip-link {
  position: fixed;
  z-index: 100;
  top: 0.75rem;
  left: 0.75rem;
  padding: 0.7rem 1rem;
  border-radius: 0.5rem;
  color: var(--white);
  background: var(--navy);
  transform: translateY(-160%);
}

.skip-link:focus {
  transform: translateY(0);
}

.wrap {
  width: min(calc(100% - 2rem), var(--content));
  margin-inline: auto;
}

.site-header {
  position: sticky;
  z-index: 20;
  top: 0;
  border-bottom: 1px solid rgb(216 225 233 / 85%);
  background: rgb(255 255 255 / 94%);
  backdrop-filter: blur(14px);
}

.header-row {
  display: flex;
  min-height: 4.8rem;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 0.7rem;
  color: var(--navy);
  font-weight: 700;
  letter-spacing: -0.02em;
  text-decoration: none;
}

/* B5b · Inhaberentscheidung 27.07.2026: Die Wortmarke im Kopf soll klarer
   präsent sein als die Navigation, ohne mit dem 2,2-rem-Signet zu konkurrieren.
   1,125rem = 18 px bildet diese Zwischenstufe; die kompaktere Wortmarke im
   Footer bleibt unverändert. */
.site-header .brand {
  font-size: 1.125rem;
}

.brand-mark {
  display: grid;
  width: 2.2rem;
  height: 2.2rem;
  place-items: center;
  border-radius: 0.7rem 0.7rem 0.7rem 0.2rem;
  color: var(--gold-bright);
  background: linear-gradient(135deg, var(--navy), var(--blue));
  font-family: var(--serif);
  font-size: 0.95rem;
  font-weight: 700;
}

.nav-list {
  display: flex;
  margin: 0;
  padding: 0;
  align-items: center;
  gap: 0.25rem;
  list-style: none;
}

.nav-list a {
  display: block;
  padding: 0.55rem 0.75rem;
  border-radius: 0.6rem;
  color: var(--ink);
  font-size: 0.94rem;
  font-weight: 600;
  text-decoration: none;
}

.nav-list a:hover,
.nav-list a[aria-current="page"] {
  color: var(--blue-dark);
  background: var(--sky);
}

.nav-list .language-link {
  margin-left: 0.35rem;
  border: 1px solid var(--line);
  background: var(--white);
}

/* A-2026-07-29-4 · Seit der Pharma-Seite trägt die Kopfzeile fünf Bereiche
   plus Sprachumschalter. Unmittelbar oberhalb des 54-rem-Umbruchpunkts steht
   die einreihige Kopfzeile noch, der waagerechte Innenabstand reicht dort
   aber nicht mehr: gemessen 15 px Überstand über die rechte Kante von .wrap
   bei genau 864 px, 14 px bei 865 px, 0 px erst ab 880 px (vier Bereiche:
   überall 0 px). Verengt wird ausschließlich der Abstand; Schriftgröße,
   Farbe und Radius bleiben unverändert, oberhalb von 56 rem gilt wieder der
   reguläre Wert. */
@media (min-width: 54rem) and (max-width: 56rem) {
  .nav-list {
    gap: 0.15rem;
  }

  .nav-list a {
    padding-right: 0.6rem;
    padding-left: 0.6rem;
  }
}

.hero {
  position: relative;
  overflow: hidden;
  padding: clamp(4.5rem, 9vw, 8.5rem) 0 clamp(4.5rem, 8vw, 7rem);
  background:
    radial-gradient(circle at 82% 18%, rgb(201 162 39 / 13%), transparent 20rem),
    linear-gradient(145deg, #f8fbfd 0%, #edf6fb 55%, #f8f3ec 100%);
}

.hero::after {
  position: absolute;
  right: -8rem;
  bottom: -14rem;
  width: 32rem;
  height: 32rem;
  border: 1px solid rgb(7 95 159 / 16%);
  border-radius: 50%;
  box-shadow: 0 0 0 4rem rgb(7 95 159 / 4%), 0 0 0 8rem rgb(201 162 39 / 5%);
  content: "";
}

.hero-grid {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(17rem, 0.55fr);
  align-items: end;
  gap: clamp(2rem, 6vw, 5rem);
}

.eyebrow {
  margin: 0 0 1rem;
  color: var(--gold-ink);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.13em;
  text-transform: uppercase;
}

/* Keine automatische Silbentrennung in Überschriften. `hyphens: auto` hat
   Wörter wie "Sekunden" zu "Se-kunden" zerlegt — in einer Zeile, die als
   Aussage gelesen wird, ist das ein Bruch. Browser ohne deutsche Trennmuster
   zeigten den Fehler nicht, deshalb war er lokal nicht sichtbar.
   Fließtext war nie betroffen; dort steht `hyphens` gar nicht erst. */
h1,
h2,
h3 {
  color: var(--navy);
  font-family: var(--serif);
  line-height: 1.14;
  text-wrap: balance;
  hyphens: manual;
}

h1 {
  max-width: 30ch;
  margin: 0;
  /* Responsive Best-Practice-Skala: 32 px mobil bis 48 px desktopweit.
     Zuvor wuchs die H1 bis 70,4/72 px und dominierte den 16-px-Fließtext
     optisch deutlich stärker als die übrigen Textbausteine. */
  font-size: var(--display-size);
  font-weight: 700;
  letter-spacing: -0.015em;
}

h2 {
  margin: 0 0 1rem;
  /* Folgestufe der gemeinsamen Skala: 24,8–36 px. Zusammen mit H1, H3
     (20,8 px) und 16-px-Fließtext entsteht eine erkennbare Hierarchie ohne
     Displaytypografie für reguläre Seitentitel. */
  font-size: clamp(1.55rem, 3vw, 2.25rem);
  font-weight: 700;
  letter-spacing: -0.012em;
}

h3 {
  margin: 0 0 0.7rem;
  font-size: 1.3rem;
  font-weight: 700;
  letter-spacing: -0.008em;
}

.lead {
  max-width: 66ch;
  margin: 1.5rem 0 0;
  color: #31445b;
  font-size: clamp(1.12rem, 2vw, 1.35rem);
}

.hero-note {
  padding: 1.5rem;
  border: 1px solid rgb(7 95 159 / 15%);
  border-radius: var(--radius);
  background: rgb(255 255 255 / 72%);
  box-shadow: var(--shadow);
}

.hero-note strong {
  display: block;
  margin-bottom: 0.35rem;
  color: var(--navy);
  font-size: 1.1rem;
}

.hero-note p {
  margin: 0;
  color: var(--muted);
}

.signature {
  margin: 1.1rem 0 0;
  color: var(--muted);
  font-family: var(--serif);
  font-size: 1.05rem;
  font-style: italic;
}

.actions {
  display: flex;
  margin-top: 2rem;
  flex-wrap: wrap;
  gap: 0.8rem;
}

.button {
  display: inline-flex;
  min-height: 3rem;
  padding: 0.75rem 1.15rem;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--blue);
  border-radius: 0.7rem;
  color: var(--white);
  background: var(--blue);
  font-weight: 700;
  text-decoration: none;
  box-shadow: 0 8px 24px rgb(7 95 159 / 18%);
  transition: color 0.15s ease, background-color 0.15s ease, box-shadow 0.2s ease, transform 0.2s ease;
}

.button:hover {
  color: var(--white);
  background: var(--blue-dark);
  box-shadow: 0 10px 28px rgb(7 95 159 / 26%);
  transform: translateY(-1px);
}

.button-secondary {
  color: var(--blue-dark);
  background: transparent;
  box-shadow: none;
}

.button-secondary:hover {
  color: var(--navy);
  background: var(--sky);
}

.section {
  padding: clamp(4.5rem, 8vw, 7.5rem) 0;
}

.section-tint {
  background: var(--mist);
}

.section-dark {
  color: #dbe7f2;
  background: var(--navy);
}

.section-dark h2,
.section-dark h3 {
  color: var(--white);
}

.section-dark .eyebrow {
  color: var(--gold-bright);
}

.section-head {
  max-width: 48rem;
  margin-bottom: 2.4rem;
}

.section-head p,
.prose p {
  color: var(--muted);
}

/* Zeilenmaß für Fließtext: 66 Zeichen wie bei .lead.
   Typografisches Optimum 45–75; WCAG 2.2 (1.4.8) begrenzt auf 80.
   Ohne diese Regel laufen Absätze über die volle Wrap-Breite auf 135 Zeichen. */
.prose p,
.section-head > p,
.page-hero > .wrap > p,
.legal p,
.legal li {
  max-width: 66ch;
}

/* Einzelausnahme: ein Absatz, der bei 66ch mit einer Zweiwort-Schlusszeile
   umbricht, obwohl er 724 px braucht und die .section-head 768 px hergibt.
   72ch bleibt im Optimum 45–75 und unter der WCAG-Grenze 80.
   A-2026-08-18-1 Fall 9: zweite Stelle mit derselben Ursache (Abgrenzungsblock
   auf recht-vertraege). Dort hat die erste Zeile bei 66ch zwar 130,4 px
   Restplatz, das Folgewort „Durchsetzbarkeit," braucht aber 138,6 px — kein
   Umbruchzwang durch `text-wrap: pretty`, sondern zu schmaler Satz, gegen den
   keine Wortbindung hilft. 67ch schliesst diese Luecke, verschiebt sie aber nur
   in die vierte Zeile (dort passt dann „Verfahrensausgang" nicht); erst 72ch
   loest den Block auf vier Zeilen ohne Loch auf. Messreihe 67–75ch und der
   Negativbefund zur vierten Zeile in `spec/umbruch_feinabstimmung.md` §9. */
.section-head > p.measure-wide {
  max-width: 72ch;
}

/* A-2026-08-18-1 Fall 22: Referenzenblock der DE-Startseite. Bei 66ch (671 px)
   brechen zwei Fachbegriffe mitten durch — „MDR-/IVDR-Umfeld" am Schraegstrich,
   „In-vitro-Diagnostik" am Bindestrich. Gegen einen Bindestrichumbruch hilft
   keine Wortbindung der Nachbarworte, nur mehr Satzbreite. Gemessene Reihe
   66–82ch: ungebrochen erst ab 70ch, wieder gebrochen 76–80ch
   („Prüfplan-Zusammenfassungen,"). Im verbleibenden Fenster 70–75ch hat 73ch
   den ruhigsten rechten Rand — Versatz der vollen Zeilen 107 px gegen 174 px
   (70/71ch), 194 px (72ch) und 131 px (75ch). 73ch = 743 px bleibt unter der
   Containerbreite .section-head (48rem = 768 px), im Optimum 45–75 Zeichen und
   unter der WCAG-2.2-Grenze 80. Messreihe in
   `spec/umbruch_feinabstimmung.md` §9. */
section[aria-labelledby="referenzen"] .section-head > p {
  max-width: 73ch;
}

/* A-2026-08-18-1 Fall 33: Referenzenblock der EN-Startseite, das Gegenstueck zu
   Fall 22. Bei 66ch (671 px) steht Zeile 6 des mittleren Absatzes bei 564 px
   neben einer Nachbarzeile mit 670 px — Versatz der vollen Zeilen 106 px —, und
   der Absatz endet mit einer 246-px-Zweiwortzeile. Gemessene Reihe 66–80ch
   (je eigener Probebaum), Versatz der vollen Zeilen: 106 px (66/67ch), 49 px
   (68ch), 53 px (69ch), 68 px (70ch), 76 px (71ch), 87 px (72ch), 51 px (73ch),
   84 px (74ch), 67 px (75ch). Ab 76ch deckelt die Containerbreite
   .section-head (48rem = 768 px), die Reihe laeuft dort auf 67 px tot. 68ch ist
   damit das Minimum der ganzen Reihe; es loest den mittleren Absatz zugleich von
   sieben auf sechs Zeilen ohne Kurzschluss auf. Anders als im DE-Fall 22 traegt
   der Block hier keinen Bindestrichbruch, deshalb genuegen 691 px statt 743 px.
   Container bleibt unveraendert; eine Linksverschiebung ist gegenstandslos, der
   Block steht linksbuendig im .wrap (72rem) mit 384 px Restplatz rechts (I-61,
   Sichtfreigabe des Inhabers 19.08.2026). Messreihe in
   `spec/umbruch_feinabstimmung.md` §9.

   A-2026-08-18-1 Fall 44 (21.08.2026): 68ch auf 68.2ch. Derselbe Block, neues
   Kriterium — nicht mehr der Versatz, sondern der Fuellgrad jeder Zeile. Bei
   68ch (692 px) endet Zeile 1 des ersten Absatzes bei 643 px, waehrend Zeile 2
   randvoll steht; das Folgewort „global" braucht 694 px Satzbreite. Es fehlen
   also ZWEI Pixel — kein `pretty`-Effekt, gegen den `.kante-vor-witwe` hilft
   (geprueft, zeichengleich), sondern schlicht zu schmaler Satz. 68.2ch = 694 px
   zieht „global" hinauf: Zeile 1 geht von 643 auf 693 px (Fuellgrad 0,999).

   Der Preis steht in derselben Zeile: Zeile 2 faellt von 692 auf 641 px, der
   Einzug wandert eine Zeile tiefer, und der Versatz der vollen Zeilen steigt von
   49 auf 52 px. Ein Wort kann nicht zugleich oben und unten stehen. Die Wahl
   zwischen beiden Bildern hat der Inhaber nach Ansehen der vollstaendigen Seite
   je Probebaum getroffen (I-64/I-65, 21.08.2026); die Messung hat nur die Menge
   der Kandidaten geliefert.

   Was dabei ausgeschlossen wurde, lueckenlos statt in `ch`-Stufen: Pixelsweep
   600–1152 px, 553 Breiten, 409 zulaessig (Ueberlauf 0, kein Bindestrichbruch).
   Die Zielgroesse „Fuellgrad" ist dort im Wesentlichen monoton mit der Breite —
   ihr Maximum liegt an der Containergrenze `.wrap` bei 1095 px mit 146 Zeichen
   Zeilenmass. Der Inhaber hat 644/688/831/878/1010/1095 px nach Ansehen
   verworfen; die Satzbreite bleibt deshalb, wo sie war. Werkzeug: `__sweep` in
   `tools/zeilengeometrie.js`. */
section[aria-labelledby="references"] .section-head > p {
  max-width: 68.2ch;
}

/* A-2026-08-18-1 Fall 42: Abgrenzungsblock der EN-Pharmaseite („I provide the
   linguistic" bis „distinct throughout."). Bei 66ch (671 px) laeuft die Kante
   ueber sieben Zeilen mit den Fuellgraden 1,000/0,957/0,934/0,930/0,887/0,963
   aus — Versatz der vollen Zeilen 76 px (671 gegen 595 px). Gemessene Reihe
   67–76ch, je eigener Probebaum, Versatz der vollen Zeilen: 53 px (67/68ch),
   72 px (69ch), 51 px (70ch), 47 px (71ch), 52 px (72ch), 63 px (73/74ch),
   82 px (75ch), 26 px (76ch). 76ch = 768 px ist zugleich die Containerbreite
   .section-head (48rem); jeder groessere Wert ergibt dieselbe Zeile. Der Block
   faellt dabei von sieben auf sechs Zeilen (185 auf 158 px), drei Zeilen
   erreichen Fuellgrad ueber 0,99.

   Zum Zeilenmass: die Einheit `ch` trifft die tatsaechliche Zeichenzahl nicht —
   sie misst die Ziffer „0", die in der Hausschrift breiter ist als das
   Durchschnittszeichen. Real gezaehlt traegt schon der Ausgangszustand bei
   66ch **90** Zeichen in der laengsten Zeile, 70/71ch tragen 95, dieser Bau
   bei 76ch **103**. Die Grenze 80 aus WCAG 2.2 (1.4.8) ist damit an diesem
   Block bereits vor dem Bau ueberschritten und taugte hier nicht als
   Ausschlusskriterium; die Wahl unter den gemessenen Kandidaten traf der
   Inhaber nach Ansehen der vollstaendigen Seiten je Probebaum (I-64/I-65).
   Messreihe in `spec/umbruch_feinabstimmung.md` §9.

   Die Regel haengt an einer eigenen Klasse, nicht an
   `section[aria-labelledby="boundary"]`: diesen Anker traegt auch der
   Abgrenzungsblock von `en/legal-contracts` mit derselben Klassenkette
   (`section section-dark`), und eine Selektorregel darauf haette beide Seiten
   getroffen. */
.section-head > p.measure-max {
  max-width: 76ch;
}

/* A-2026-08-18-1 Fall 63: Abgrenzungsblock der DE-Pharmaseite („Ich liefere die
   sprachliche" bis „auseinanderzuhalten."), das Gegenstueck zu Fall 42 (EN).
   Verlangt war nicht ein einzelnes haengendes Wort, sondern der maximale
   Fuellgrad ALLER Zeilen. Bei 66ch (671 px) laeuft die Kante ueber sieben
   Zeilen mit den Fuellgraden 0,975/0,961/0,975/0,982/0,939/0,909 aus, Versatz
   der vollen Zeilen 49 px. Keine Wortbindung greift: die Fehlbreite des
   jeweiligen Folgeworts ist in JEDER Zeile positiv (25/2/134/45/10/60 px), es
   liegt also durchweg echter Umbruchzwang vor und kein `pretty`-Zug, gegen den
   `.kante-vor-witwe` hilft. Wirksam ist allein die Satzbreite.

   Lueckenloser Pixelsweep 600–1152 px (553 Breiten, alle zulaessig: Ueberlauf
   0, kein Bindestrich- oder Schraegstrichbruch; Werkzeug `__sweep`,
   Gegenprobe an 7 Stuetzstellen zeichengleich). Der Fuellgrad steigt im
   Wesentlichen monoton mit der Breite; jedes Zeilenzahlfenster hat sein
   Optimum an seiner unteren Kante: 759 px (6 Zeilen, schwaechste volle Zeile
   0,959, Versatz 30 px), 987 px (5 Zeilen, 0,964, 35 px), 1141 px (4 Zeilen,
   0,996, 3 px). 759 px ist der einzige dieser Kandidaten, der unter der
   Containerbreite `.section-head` (48rem = 768 px) bleibt und damit die
   Ueberschrift unberuehrt laesst; 987 und 1141 px verlangen `max-width: none`
   am Kopf und tragen 116 bzw. 145 Zeichen Zeilenmass. Der Inhaber hat nach
   Ansehen der vollstaendigen Seiten je Probebaum 759 px gewaehlt (I-64/I-65,
   22.08.2026). Messreihe in `spec/umbruch_feinabstimmung.md` §9.

   Zum Zeilenmass gilt der Befund aus Fall 42: `ch` misst die Ziffer „0" und
   trifft die reale Zeichenzahl nicht. Real traegt schon der Ausgangszustand
   bei 66ch rund 83 Zeichen je Zeile, dieser Bau rund 97 — die WCAG-2.2-Grenze
   80 (1.4.8) ist an diesem Block bereits vor dem Bau ueberschritten und taugt
   hier nicht als Ausschlusskriterium.

   Eigene Klasse statt `section[aria-labelledby="abgrenzung"]`: denselben Anker
   mit derselben Klassenkette (`section section-dark`) traegt auch der
   Abgrenzungsblock von `recht-vertraege` (dort `.measure-wide`, Fall 9). Eine
   Selektorregel haette beide Seiten getroffen. */
.section-head > p.measure-fuellgrad {
  max-width: 74.66ch;
}

/* A-2026-08-18-1 Fall 64: Ueberschrift desselben Blocks („Uebersetzung ersetzt
   keine regulatorische Freigabe", DE-Pharma `#abgrenzung`). Verlangt war
   einzeilig. Bei `.section-head` = 48rem (768 px) bricht sie ab 1280 px
   Viewport auf zwei Zeilen (420 + 375 px). Der Grund ist NICHT `text-wrap:
   balance`: einzeilig braucht die Zeile mit `nowrap` gemessen **804 px**, also
   36 px mehr, als der Kopf hergibt — echter Umbruchzwang. `.wrap` haelt bei
   1920 px 1152 px bereit, der Platz ist da.

   51rem = 816 px ist der gebaute Wert: 12 px Reserve ueber dem Bedarf statt der
   1 px, die 804 px liessen. Gemessen an echten Probebaeumen (804, 806, 808,
   816 px; `text-wrap: balance` verbietet den `__sweep`-Weg, §4a), alle vier
   loesen die Ueberschrift auf eine Zeile mit 803 px Textbreite; darunter
   beginnt der Bruch. Kein Ueberlauf bei 360, 768, 1024, 1280, 1920 px.

   Der Absatz bleibt unberuehrt: er traegt seit Fall 63 seine eigene Deckelung
   `.measure-fuellgrad` (74,66 ch = 760 px), die unter 816 px liegt und deshalb
   weiter bindet — sechs Zeilen, Satz 760 px, vorher wie nachher.

   Eigene Klasse aus demselben Grund wie in Fall 63: den Anker `#abgrenzung`
   traegt auch `recht-vertraege`. */
.section-head.kopf-einzeilig {
  max-width: 51rem;
}

/* A-2026-08-18-1 Fall 25: Erlaeuterungsblock der DE-Pharmaseite (Abschnitt 4.8
   bis „klar abgegrenzter Umfang"). Bei 66ch (671 px) faellt die zweite Zeile des
   ersten Absatzes auf 529 px zurueck — 142 px Loch neben einer Nachbarzeile mit
   Fuellgrad 0,99. Keine Wortbindung schliesst das: das Folgewort
   („Kausalzusammenhangs") braucht 713 px Satzbreite. Gemessene Reihe 66–80ch,
   Versatz der vollen Zeilen: 140 px (66ch), 58 px (67/68ch), 78–90 px (69–71ch),
   68 px (72ch), 44 px (73ch), 64–83 px (74/75ch). Ueber 75ch verlaesst das
   Zeilenmass das typografische Optimum. 73ch = 743 px ist damit das Minimum im
   zulaessigen Fenster, deckt sich mit Fall 22 und bleibt unter der
   WCAG-2.2-Grenze 80. Messreihe in `spec/umbruch_feinabstimmung.md` §9.

   A-2026-08-18-1 Fall 28: dieselbe Klasse traegt jetzt auch den
   Terminologiedrift-Block der DE-Unternehmensseite („Drei Benennungen fuer"
   bis „klar abgegrenzter Umfang."). Bei 66ch (671 px) bleiben Zeile 1 bei
   569 px und Zeile 5 bei 488 px stehen, waehrend die Nachbarzeilen 664 px
   erreichen — Versatz der vollen Zeilen 176 px. Keine Wortbindung schliesst
   das: die Folgeworte („Aenderungspruefung", „Terminologiedatenbanken")
   brauchen 715 bzw. 691 px Satzbreite. Gemessene Reihe 66–80ch, Versatz der
   vollen Zeilen: 176 px (66ch), 185 px (67ch), 121 px (68–70ch), 68 px (71ch),
   25 px (72/73ch), 50 px (74ch), 31 px (75ch), 45–87 px (76–80ch). 73ch ist
   das Minimum und deckt sich mit den Faellen 22, 25 und 26.

   A-2026-08-18-1 Fall 34: dieselbe Klasse traegt jetzt auch den
   Vertraulichkeitsblock der EN-Startseite („Client-specific reference" bis
   „without an asterisk."). Bei 66ch (671 px) liegt der Versatz der vollen
   Zeilen bei 64 px (604 gegen 668 px). Gemessene Reihe 66–80ch, je eigener
   Probebaum, Versatz der vollen Zeilen: 64 px (66ch), 69 px (67ch), 83 px
   (68ch), 102 px (69ch), 41 px (70/71ch), 66 px (72ch), 40 px (73ch), 60 px
   (74ch), 65 px (75ch). Ab 76ch verlaesst das Zeilenmass das Optimum 45–75.
   73ch ist damit das Minimum im zulaessigen Fenster und deckt sich mit den
   Faellen 22, 25 und 28; der erste Absatz faellt dabei von vier auf drei
   Zeilen, die Sektion von 1396 auf 1369 px. Die drei Kandidaten 70/71/73ch
   wurden als vollstaendige Seiten je Probebaum vorgelegt, die Wahl traf der
   Inhaber nach Ansehen (I-64, 19.08.2026). Messreihe in
   `spec/umbruch_feinabstimmung.md` §9. */
.prose.prose-weit p {
  max-width: 73ch;
}

/* A-2026-08-18-1 Fall 65: der Erlaeuterungsblock unter dem Beispielkasten der
   DE-MedTech-Seite, Sektion `#risiko` („Inkonsistenzen kosten spaeter Zeit"
   bis „klar abgegrenzter Umfang."). Reiner Deckelungsfall wie Fall 53: kein
   Wort haengt, der Satz stand auf 743 px aus `.prose-weit` (73ch). Verlangt
   war „Fuellgrade aller Zeilen maximieren".

   `__sweep` 440–900 px in 1-px-Schritten (461 Kandidaten, zwei Laeufe),
   Gegenprobe 10/10 zeichengleich gegen `__karte`-Frischlaeufe und 3/3 gegen
   echte Probebaeume, `schriftOffen` 0. Von 77 Umbruchplateaus bleiben im
   zulaessigen Fenster (Ueberlauf 0, kein Bindestrich- oder Schraegstrichbruch,
   Zeilenmass 45–75ch) 34 uebrig. Kein Kandidat der 461 verbessert den
   Fuellgrad ueber ALLE Zeilen und zugleich den Versatz der VOLLEN Zeilen um
   mehr als hier; das Feld hat drei Ecken, die dem Inhaber als vollstaendige
   Seiten je Probebaum vorgelegt wurden (I-64/I-65, 22.08.2026):

     656 px (64,5ch)  Fuellgrad alle 0,892, aber Versatz voll 56 -> 99 px
     695 px (68,3ch)  0,842, Versatz voll 59 px
     724 px (71,1ch)  0,808, Versatz voll 46 px, schwaechste volle Zeile 0,936

   Der Inhaber waehlte nach Ansehen 724 px — die einzige der drei Ecken, die
   die rechte Kante der vollen Zeilen gegenueber dem Ist VERBESSERT (Versatz
   56 -> 46 px, schwaechste volle Zeile 0,913 -> 0,936) und den Fuellgrad ueber
   alle Zeilen zugleich hebt (0,788 -> 0,806). Gebaut ist die
   Plateau-Untergrenze + 2 px Rundungsreserve; das Plateau traegt 724–734 px,
   bei 723 px bricht das Muster.

   Gewirkt hat es an Absatz 2: dessen vierte Zeile waechst 734 -> 693 px bei
   zugleich laengerer Schlusszeile 165 -> 206 px. Zeilenzahl 14, Blockhoehe
   370 px und Seitenhoehe 6859 px unveraendert, Ueberlauf 0, kein Wort und kein
   Zeichen geaendert. 726 px sind 71,3ch und liegen im Optimum 45–75.

   Eigene Klasse statt `section[aria-labelledby="risiko"]`, damit ein spaeter
   gleich benannter Anker auf einer Schwesterseite sie nicht mittraegt — und
   damit die drei uebrigen `.prose-weit`-Bloecke bei 73ch bleiben. Nur im
   deutschen Baum gesetzt; das EN-Gegenstueck traegt `.prose-halbweit`
   (Fall 43). Messreihe in `spec/umbruch_feinabstimmung.md` §9. */
.prose.prose-weitknapp p {
  max-width: 726px;
}

/* A-2026-08-18-1 Fall 43: Erlaeuterungsblock der EN-MedTech-Seite, Sektion
   `#risk` („Inconsistency costs" bis „a clearly defined scope."). Bei 66ch
   (671 px) laeuft der zweite Absatz ueber vier volle Zeilen mit 669/584/575/
   600 px aus und endet auf einem 184-px-Stummel; der dritte steht auf
   630/606/652 px. Versatz der vollen Zeilen 95 px, mittlerer Fuellgrad 0,940.
   Keine Wortbindung schliesst das — es haengt kein Einzelwort, die Spalte ist
   zu schmal.

   Gemessene Reihe 62–80ch, je eigener Probebaum, danach Feinsuche 672–682 px
   in 1-px-Schritten. Versatz der vollen Zeilen: 60 px (62ch), 70 px (63ch),
   73 px (64ch), 87 px (65ch), 95 px (66ch), 37 px (67/68ch), 39 px (69ch),
   43 px (70–72ch), 79 px (73ch), 88 px (74ch), 99 px (75ch). Ueber 75ch
   verlaesst das Zeilenmass das Optimum 45–75 und begradigt zugleich schlechter
   (93–103 px bei 76/77ch, 62–74 px bei 78–80ch). Das Umbruchmuster von 67ch
   steht bereits ab 676 px; 66,5ch = 677 px ist damit das Minimum im
   zulaessigen Fenster und traegt den hoechsten Fuellgrad der Reihe: 0,984
   gegen 0,977 bei 67ch. Absatz 2 faellt von fuenf auf vier Zeilen und verliert
   den Stummel, Absatz 3 steht auf 675/675/675 px, die Seite faellt von 6581
   auf 6555 px.

   Nicht behoben, im Bericht vorgelegt: Absatz 1 bleibt in jeder zulaessigen
   Variante bei 670/663/102 px — sein Folgewort („documentation") braucht
   790 px Satzbreite. Die Wahl unter den vorgelegten Kandidaten (66,5 / 67 /
   73ch) traf der Inhaber nach Ansehen der vollstaendigen Seiten je Probebaum
   (I-64/I-65, 21.08.2026). Messreihe in `spec/umbruch_feinabstimmung.md` §9.

   Die Regel haengt an einer eigenen Klasse statt an
   `section[aria-labelledby="risk"]`, damit ein spaeter gleich benannter Anker
   auf einer Schwesterseite sie nicht mittraegt (dieselbe Erwaegung wie bei
   `.measure-max`, Fall 42). */
.prose.prose-halbweit p {
  max-width: 66.5ch;
}

/* A-2026-08-18-1 Fall 53: der Erlaeuterungsblock unter dem Beispielkasten der
   EN-Legal-Seite, Sektion `#risk` („The same applies to modal verbs" bis
   „a clearly defined scope."). Reiner Deckelungsfall: der Satz stand an allen
   vier Abnahmebreiten auf 671 px, das ist nicht die Spaltenbreite (`.wrap`
   gibt 992–1152 px), sondern `.prose p { max-width: 66ch }`. Kein Wort haengt,
   `__kante` meldete den Block im Ist nicht.

   `__sweep` 440–1000 px in 1-px-Schritten (561 Kandidaten, zwei Laeufe),
   Gegenprobe 9/9 zeichengleich gegen `__karte`-Frischlaeufe, `schriftOffen` 0,
   kein Kandidat mit Ueberlauf. Von 41 Umbruchplateaus ist genau EINES das
   Optimum fuer „Fuellgrade aller Zeilen": **628–653 px** — das einzige, in dem
   alle drei Schlusszeilen lang werden (511/589/388 statt 359/478/347).
   Fuellgrad ueber alle Zeilen 0,863 -> 0,915, kuerzeste Zeile 347 -> 388 px.
   Gebaut ist die Plateau-Untergrenze + 3 px Rundungsreserve.

   Bezahlter Preis, vor der Wahl beziffert und mitfreigegeben: der Versatz der
   VOLLEN Zeilen steigt 24 -> 36 px, die schwaechste volle Zeile faellt
   0,960 -> 0,938. Kein Kandidat der 561 verbessert beides; `__kante` meldet
   danach eine Stelle mehr auf der Seite (6 -> 7), und zwar im Zielblock selbst
   (Absatz 2, „as well", 24 px Ueberstand) — dort wird nicht gegriffen, eine
   Bindung zoege Zeile 2 auf 552 px herunter. Verworfen mit Zahlen: 767 px
   (9 Zeilen, aber Fuellgrad 0,837 und damit unter dem Ist-Zustand), 922 px
   (0,784 und 90,6ch, ueber der WCAG-2.2-Grenze 80), 529 px (0,909 bei Versatz
   81 px und 12 Zeilen).

   631 px sind 62,1ch und liegen damit im Optimum 45–75. Zeilenzahl 10,
   Blockhoehe und Seitenhoehe unveraendert, Ueberlauf 0, kein Wort und kein
   Zeichen geaendert. Die Wahl unter den vollstaendig vorgelegten Seiten traf
   der Inhaber nach Ansehen (I-64/I-65, 22.08.2026).

   Eigene Klasse statt `section[aria-labelledby="risk"]`, damit ein spaeter
   gleich benannter Anker auf einer Schwesterseite sie nicht mittraegt — der
   Anker `#risk` traegt auf EN-MedTech bereits `.prose-halbweit` (Fall 43).
   Nur im englischen Baum gesetzt. */
.prose.prose-enger p {
  max-width: 631px;
}

/* A-2026-08-18-1 Fall 68: der Fliesstextblock unter dem Kartenraster der
   DE-Startseite, Sektion `#leistungen` („Sie haben einen fachlichen
   Ansprechpartner" bis „fachlich verantworten kann."), einschliesslich des
   `.fineprint` darunter. Reiner Deckelungsfall wie Fall 53 und 65: kein Wort
   haengt, die Absaetze standen auf 671 px (`.prose p`, 66ch), der `.fineprint`
   auf 672 px (`42rem`). Verlangt war „Fuellgrade aller Zeilen maximieren".

   `__sweep` 560–840 px in 1-px-Schritten (281 Kandidaten), Gegenprobe 4/4
   zeichengleich gegen `__karte`-Frischlaeufe und 2/2 gegen echte Probebaeume,
   `schriftOffen` 0, Ueberlauf und Bindestrichbruch durchweg 0. Von 24
   Umbruchplateaus liegt das rechnerische Optimum bei 793–807 px (Versatz der
   vollen Zeilen 33 px) — 78,0ch und damit ausserhalb des Optimums 45–75,
   ausgeschlossen wie in Fall 65. Im zulaessigen Fenster (≤ 762 px) blieben
   574–586 px (Versatz 43 px) und 742–746 px (Versatz 56 px). Beide wurden als
   vollstaendige Seiten je Probebaum vorgelegt, die Wahl traf der Inhaber nach
   Ansehen (I-64/I-65); 742 px waere ohne neue Regel aus `.prose-weit` und
   `.measure-weit` gekommen, gewaehlt wurde 574 px.

   574 px sind 56,5ch und liegen im Optimum. Der Versatz der vollen Zeilen
   faellt von 64 auf 43 px, ihr kleinster Fuellgrad steigt von 0,900 auf 0,925.
   Nebenwirkung, vor der Wahl vorgelegt: der Block waechst von acht auf neun
   Zeilen (207 -> 233 px), die Sektion von 1286 auf 1312 px, die Seite von 8898
   auf 8925 px. Kein Wort und kein Zeichen geaendert.

   Eigene Klassen statt `#leistungen ...`, damit ein spaeter gleich benannter
   Anker im englischen Baum sie nicht mittraegt. Der `.fineprint` braucht eine
   eigene Regel, weil `42rem` ihn sonst bei 672 px stehen liesse und nur zwei
   Drittel des Blocks begradigt waeren (dieselbe Lage wie in Fall 34); ein
   px-Wert statt eines ch-Werts, weil seine 0,9rem-Schrift ein anderes ch hat.
   An seiner eigenen Schrift sind 574 px 62,6ch, ebenfalls im Optimum.
   Nur im deutschen Baum gesetzt. */
.prose.prose-schmal p {
  max-width: 574px;
}

p.fineprint.measure-schmal {
  max-width: 574px;
}

/* A-2026-08-18-1 Fall 71: derselbe Fallentyp eine Sektion weiter unten — der
   Fliesstextblock unter dem Kartenraster der DE-Startseite, Sektion
   `#qualitaet` („Kundenspezifische Referenz- und Steuerungsdokumente" bis
   „gilt dafuer ohne Sternchen."), einschliesslich des `.fineprint` darunter.
   Reiner Deckelungsfall: kein Wort haengt, die Absaetze standen auf 671 px
   (`.prose p`, 66ch), der `.fineprint` auf 672 px (`42rem`). Verlangt war
   „Fuellgrade aller Zeilen maximieren".

   `__sweep` 500–992 px in 1-px-Schritten (493 Kandidaten), Gegenprobe 5/5
   zeichengleich gegen `__karte`-Frischlaeufe und 4/4 gegen echte Probebaeume,
   `schriftOffen` 0, Ueberlauf durchweg 0. Unzulaessig ist allein das Band
   681–739 px: dort bricht „KI-Schritte" am Bindestrich. 434 zulaessige
   Kandidaten in 52 Umbruchplateaus. Vorgelegt wurden nach `I-64`/`I-65` das
   Ist, 623 px (einziger Kandidat mit beiden Schriften im Optimum 45–75, aber
   Gesamtfuellung 0,792 unter dem Ist) und 770 px; gewaehlt wurde 740 px.

   740 px sind 72,8ch an der Absatzschrift und liegen im Optimum. Der Versatz
   der vollen Zeilen faellt von 90 auf 43 px, ihr kleinster Fuellgrad steigt
   von 0,854 auf 0,942, die Fuellung ueber ALLE Zeilen von 0,803 auf 0,892.
   Nebenwirkung, vor der Wahl vorgelegt: der Block faellt von elf auf neun
   Zeilen (282 -> 233 px), die Sektion von 1448 auf 1398 px, die Seite von
   8804 auf 8755 px. Kein Wort und kein Zeichen geaendert.

   Der Preis, vor der Wahl beziffert: an der eigenen 0,9rem-Schrift des
   `.fineprint` sind 740 px 80,8ch und damit ein Zaehler ueber der
   WCAG-2.2-Grenze 80 — dieselbe Lage wie in Fall 34 (dort 81ch). Die eigene
   Regel fuer den `.fineprint` ist noetig, weil `42rem` ihn sonst bei 672 px
   stehen liesse und nur zwei Drittel des Blocks begradigt waeren; ein px-Wert
   statt eines ch-Werts, weil seine Schrift ein anderes ch hat.
   Nur im deutschen Baum gesetzt. */
.prose.prose-mittel p {
  max-width: 740px;
}

p.fineprint.measure-mittel {
  max-width: 740px;
}

/* A-2026-08-18-1 Fall 34: der `.fineprint` unter demselben Block muss dieselbe
   rechte Satzkante bekommen, sonst begradigt 73ch nur zwei Drittel des Blocks.
   Ein ch-Wert am Element selbst taugt dafuer nicht: `.fineprint` steht bei
   0,9rem, sein eigenes ch misst 9,164 px statt 10,167 px, und 73ch ergaeben
   669 px statt der verlangten 742 px. 0,6354 ist ch je Schriftgroesse der
   Hausschrift — dieselbe Rechnung wie bei `.measure-lead`, hier gegen die
   16-px-Grundschrift gefuehrt, damit beide Kanten auf demselben Wert stehen.
   Nebenwirkung, im Bericht vorgelegt: gemessen an der EIGENEN Schrift sind
   742 px 81 ch und damit einen Zaehler ueber der WCAG-2.2-Grenze 80; der
   Absatz ist ein dreizeiliger Fussnotentext, und die Alternative 80ch
   (733 px) bricht die erste Zeile neu um und veraendert damit die vom Inhaber
   abgenommene Ansicht. */
p.fineprint.measure-weit {
  max-width: calc(73 * 0.6354rem);
}

/* Einzelausnahme: ein Hero-Absatz, der auf die Breite des .lead über ihm
   angeglichen wird. Der .lead misst 66ch bei seiner eigenen, per clamp
   viewportabhängigen Schriftgröße; ein fester ch-Wert am 16-px-Absatz führte
   das nicht mit (751 px gegen 906 px je nach Fensterbreite). 0.6354 ist ch je
   Schriftgröße der Hausschrift. Ergibt rund 74 Zeichen, unter WCAG-Grenze 80. */
.page-hero > .wrap > p.measure-lead {
  max-width: calc(66 * 0.6354 * clamp(1.12rem, 2vw, 1.35rem));
}

/* A-2026-08-18-1 Fall 40 · Containergriff für den EN-Pharma-Hero: beide
   Hero-Absätze bilden eine gemeinsame rechte Kante, die bei 906 px Satz um
   66 px zackt („into", „the text", „what the" hängen als Zeilenende).
   832 px ist die Mitte des einzigen Fensters (827–836 px), in dem alle drei
   Wörter in die Folgezeile fallen und Absatz 1 zwei gleich lange Zeilen
   bekommt; unter 827 px bricht Absatz 1 ganz anders um, ab 837 px bleibt
   „the" oben. Zeilenzahl 3+3, Blockhöhen und Seitenhöhe unverändert.
   60,6 ch, im Optimum 45–75 und unter der WCAG-2.2-Grenze 80. Der Satz galt für
   den `.lead`; der kleiner gesetzte `.measure-lead` lag bei 832 px auf 81,8 ch
   und damit schon über der Grenze — s. Fall 49.

   A-2026-08-18-1 Fall 49: 832 -> 810 px. Bei 832 px zackt die Kante der vollen
   Zeilen um 32 px (826/826 gegen 807/794/788), schwächste volle Zeile 0,954.
   Pixelsweep 640–1152 px (513 Breiten, Gegenprobe an fünf Stützstellen frisch
   geladen und an drei echten Probebäumen nachgemessen, je zeichengleich). Drei
   Plateaus schlagen den Ausgangszustand: 808–826 px (0,969 / Versatz 22 px),
   836–854 px (0,983 / 14 px) und 1105–1113 px (0,975 / 28 px, fünf statt sechs
   Zeilen). Dem Inhaber am 21.08.2026 als vollständige Seiten vorgelegt
   (I-64/I-65); gewählt hat er 810 px. Zeilenbild dann 787/785/531 | 807/794/788,
   Zeilenzahl 3+3, Blockhöhe 186 px unverändert.

   Der gewählte Kandidat ist der einzige, der zugleich einen Bestandsbefund
   schließt: 810 px sind für den `.measure-lead` 79,7 ch und damit erstmals unter
   der WCAG-2.2-Grenze 80 (832 px waren 81,8 ch). Der `.lead` steht bei 59,0 ch.
   Die beiden anderen Plateaus hätten den Bestandsbefund vergrößert (82,2 bzw.
   108,7 ch). 813 px ist die Plateaugrenze zur 80-ch-Marke; 810 px hält 3 px
   Rundungsreserve. */
.page-hero.hero-enger-satz > .wrap > p.lead,
.page-hero.hero-enger-satz > .wrap > p.measure-lead {
  max-width: 810px;
}

/* A-2026-08-18-1 Fall 50 · Containergriff für den EN-Legal-Hero. Beide
   Hero-Absätze bilden eine gemeinsame rechte Kante; bei 906 px zackt sie um
   44 px (900/887 gegen 879/856), die Schlusszeilen stehen bei 181 und 334 px
   (Füllgrad über alle Zeilen 0,743), und Absatz 2 bricht auf dem
   Halbgeviertstrich in „English–German" um.
   Pixelsweep 600–1152 px (553 Breiten, Gegenprobe an sechs Stützstellen frisch
   geladen und an zwei echten Probebäumen nachgemessen, je zeichengleich).
   Zulässig sind nur Breiten ≤ 762 px: der kleiner gesetzte `.measure-lead`
   reißt ab 813 px die WCAG-2.2-Grenze 80 ch, bei 906 px stand er auf 89,1 ch —
   der Bau schließt diesen Bestandsbefund. Zwei Plateaus bleiben, beide 3+3
   Zeilen und Blockhöhe 186 px unverändert: 709–743 px (Versatz 14 px,
   schwächste volle Zeile 0,975) und 754–760 px (Versatz 11 px, 0,985).
   Dem Inhaber am 21.08.2026 als vollständige Seiten vorgelegt (I-64/I-65);
   gewählt hat er 754 px.

   Nachtrag desselben Tages, Fall 50b: bei 754 px trägt die Bindung
   `.keep-together` um „I handle" das Wort „ambiguities" in die Schlusszeile
   (Zeile 2 endet auf „raise", 662 px). Das war vom Inhaber nicht freigegeben.
   `.kante-vor-witwe` am Absatz ist zeichengleich — es ist kein `pretty`-Zug,
   sondern echter Platzmangel: Zeile 2 hat 92 px Rest, „ambiguities" braucht
   mehr. Die Bindung schiebt den Block um genau EINEN Pixel über die Kippkante;
   ab **755 px** steht „ambiguities" wieder am Zeilenende (743/754/568), und
   Absatz 1 bleibt dabei pixelgleich zu der vom Inhaber gewählten Ansicht.
   Gebaut sind **758 px**: 3 px Rundungsreserve zur Plateaugrenze 755, oberhalb
   ist das Plateau bis 790 px unkritisch. `.lead` steht auf 55,2 ch,
   `.measure-lead` auf 74,6 ch — beide im Optimum 45–75. */
.page-hero.hero-schmaler-satz > .wrap > p.lead,
.page-hero.hero-schmaler-satz > .wrap > p.measure-lead {
  max-width: 758px;
}

/* A-2026-08-17-2 · Einzelausnahme für einen Hero, dessen kleinerer Absatz vier
   Zeichen zu lang für zwei Zeilen ist. Er fällt dadurch auf drei Zeilen, die
   `text-wrap: balance` auf ~600 px angleicht — eine schmale Spalte unter einem
   838 px breiten Absatz (Δ 223 px). Gemessene Schwelle für den Zweizeiler:
   920 px; bis 980 px ändert sich das Ergebnis nicht mehr, der Wert ist die
   Schwelle und kein gewählter Betrag. Beide Absätze behalten dieselbe
   Satzbreite. Rund 75 Zeichen, unter der WCAG-Grenze 80.
   Nur ab 1080 px Viewport: dort steht die clamp-Satzbreite bei ihrem Maximum
   906 px, und der grosse Absatz hat seine volle Breite von 838 px erreicht.
   Zwischen 992 und 1080 px schrumpft er auf 770–815 px, waehrend der kleine
   bei 920 px festliegt; die Regel kehrte den Abstand dort auf +102 bis +147 px
   um, statt ihn zu schliessen. Gemessen mit `min(920px, 100%)` ohne Schranke.
   Unterhalb 1080 px bleibt es deshalb beim bisherigen Zustand (Δ −180 px bei
   1024 px) — das ist ein offener Rest, keine geloeste Stelle.

   A-2026-08-18-1 Fall 47: 920 -> 1038 px. Bei 920 px steht mitten im Block eine
   435-px-Schlusszeile (Fuellgrad 0,47); die vollen Zeilen liegen bei
   892/871/874/872. Pixelsweep 640–1152 px (513 Breiten, Gegenprobe an fuenf
   Stuetzstellen frisch geladen, je zeichengleich): das Fuellgrad-Optimum ist das
   Plateau 1035–1072 px, in dem Absatz 1 auf drei Zeilen faellt und seine kurze
   Schlusszeile ganz verliert. 1038 px liegt 3 px vom Plateaurand entfernt
   (Rundungsreserve). Volle Zeilen dann 1034/1032/1011/1010 — schwaechste volle
   Zeile 0,974 statt 0,947, Versatz 24 statt 21 px, Blockhoehe 196 -> 160 px.
   Unter 813 px — der Schwelle, ab der der kleinere Absatz die 80-Zeichen-Grenze
   reisst — schlaegt KEINE Breite den Ausgangszustand; das beste dortige Plateau
   (742–772 px) kommt auf 0,912 bei Versatz 64 px.

   Nebenwirkung, dem Inhaber vor dem Bau vorgelegt und von ihm gewaehlt
   (I-64/I-65, 21.08.2026): beide Absaetze teilen die Satzbreite, sind aber
   verschieden gross gesetzt (21,6 px gegen 16 px). Dieselbe Satzbreite misst
   fuer `.lead` 75,6 Zeichen, fuer `.measure-lead` 102. Der kleinere Absatz lag
   schon bei 920 px auf 90,4 Zeichen und damit ueber der WCAG-2.2-Grenze 80 —
   der Bau vergroessert einen Bestandsbefund, er erzeugt ihn nicht. Der oben
   stehende Satz „rund 75 Zeichen, unter der WCAG-Grenze 80" galt fuer den
   `.lead` und hat den kleineren Absatz nie beschrieben. */
@media (min-width: 1080px) {
  .hero-weit > .wrap > p.lead,
  .hero-weit > .wrap > p.measure-lead {
    max-width: 1038px;
  }
}

.section-dark .section-head p,
.section-dark .prose p {
  color: #c0cfdd;
}

.cards {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1rem;
}

/* Das feste Dreierraster ließ bei genau vier Karten eine Waisenzeile stehen
   (drei oben, eine allein darunter) — an neun Stellen auf sechs Seiten.
   Vier Karten stehen deshalb als zwei mal zwei; das ist symmetrisch und gibt
   den längeren FAQ-Antworten zugleich mehr Breite. */
.cards:has(> :nth-child(4):last-child) {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

/* Genau fünf Karten (Produktbereiche MedTech) ergäben im Dreierraster drei oben
   und zwei linksbündig darunter — dieselbe Waisenwirkung wie oben, nur milder.
   Über ein Sechserraster mit Doppelspalten je Karte steht die zweite Reihe
   zentriert unter der ersten: 3 + 2, symmetrisch und sichtlich beabsichtigt. */
.cards:has(> :nth-child(5):last-child) {
  grid-template-columns: repeat(6, minmax(0, 1fr));
}

.cards:has(> :nth-child(5):last-child) > .card {
  grid-column: span 2;
}

.cards:has(> :nth-child(5):last-child) > .card:nth-child(4) {
  grid-column: 2 / span 2;
}

/* Erkauft am 13.08.2026 (A-2026-08-11-1): Die neue Karte „Vermögensschaden-
   haftpflicht" trug das Wort zweimal. Als Rasterelement hat `.card` implizit
   `min-width: auto`, also die Min-Content-Breite ihres längsten Wortes; das
   `minmax(0, 1fr)` der Spur half nicht, weil es die Spur betrifft, nicht das
   Element. Ergebnis war Dokumentüberlauf an 106 Breiten (320–425 px), vorher 0.
   `min-width: 0` nimmt den Boden weg, `overflow-wrap: break-word` bricht das
   Wort dann im Fließtext — die Regel auf h1..h3 im 34rem-Block allein reichte
   nicht, weil das Wort auch im Antwortabsatz steht. */
.card {
  min-width: 0;
  overflow-wrap: break-word;
  padding: clamp(1.35rem, 3vw, 2rem);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  background: var(--white);
  box-shadow: 0 8px 28px rgb(16 45 73 / 6%);
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}

.card:hover {
  border-color: rgb(7 95 159 / 35%);
  box-shadow: 0 16px 40px rgb(16 45 73 / 12%);
  transform: translateY(-4px);
}

.card-number {
  display: inline-grid;
  width: 2.35rem;
  height: 2.35rem;
  margin-bottom: 1.2rem;
  place-items: center;
  border-radius: 0.65rem;
  color: var(--blue-dark);
  background: var(--sky);
  font-size: 0.85rem;
  /* 700 statt 800: Lindner Sans endet bei Bold 700, und das
     CSS-Font-Matching wählte ohnehin den 700er-Schnitt (S1C-01).
     Deklaration und vorhandene Datei sind damit deckungsgleich. */
  font-weight: 700;
}

.card p {
  margin: 0;
  color: var(--muted);
}

/* Karten bleiben auch innerhalb dunkler Abschnitte helle Leseflächen.
   Ihre Überschriften dürfen deshalb nicht das dort allgemein gesetzte Weiß
   erben; Navy stellt die übliche Kartenhierarchie und 15,16:1 Kontrast her. */
.section-dark .card h3 {
  color: var(--navy);
}

/* Auswahlkarten mit eigener Schaltfläche bilden einen gemeinsamen Abschluss:
   Überschrift und Text dürfen unterschiedlich lang sein, die Aktionen beginnen
   dennoch auf derselben Höhe. 5rem tragen die längere DE-/EN-Beschriftung auf
   zwei Zeilen; `min-height` lässt bei Zoom zusätzlichen Platz statt Text
   abzuschneiden. Nur diese Aktionskarten werden wieder gleich hoch gezogen. */
.cards:has(> .card > .button) {
  align-items: stretch;
}

.cards > .card:has(> .button) {
  display: grid;
  grid-template-rows: auto 1fr auto;
}

.cards > .card:has(> .button) > .button {
  width: 100%;
  min-height: 5rem;
  margin-top: 1.5rem;
}

.split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(2rem, 7vw, 6rem);
  align-items: center;
}

.statement {
  padding: clamp(1.5rem, 4vw, 2.5rem);
  border-left: 0.35rem solid var(--gold);
  border-radius: 0 var(--radius) var(--radius) 0;
  background: var(--sky);
}

.statement p {
  margin: 0;
  color: var(--navy);
  font-family: var(--serif);
  font-size: clamp(1.25rem, 2vw, 1.5rem);
  font-style: italic;
  font-weight: 400;
  line-height: 1.45;
}

.steps {
  display: grid;
  margin: 0;
  padding: 0;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1rem;
  list-style: none;
  counter-reset: steps;
}

/* Sechs Schritte im Viererraster ergaben 4 + 2. Drei mal zwei ist die
   einzige Aufteilung, die bei sechs Elementen aufgeht. */
.steps:has(> :nth-child(6):last-child) {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.steps li {
  position: relative;
  padding: 3.4rem 1.3rem 1.4rem;
  border: 1px solid rgb(255 255 255 / 15%);
  border-radius: var(--radius);
  background: rgb(255 255 255 / 5%);
  counter-increment: steps;
}

.steps li::before {
  position: absolute;
  top: 1.1rem;
  left: 1.3rem;
  color: var(--gold-bright);
  content: "0" counter(steps);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.12em;
}

.steps p {
  margin: 0;
  color: #c0cfdd;
}

/* Eine Spalte: Überschrift und Begründung oben, Schaltflächen darunter.
   Zweispaltig (`minmax(0, 1.4fr) auto`) ging nicht auf, weil Grid die
   `auto`-Spur zuerst auf ihre max-content-Breite bringt — beide Schaltflächen
   nebeneinander, die wegen `white-space: nowrap` nicht umbrechen dürfen. Das
   waren 54–60 % der Panelbreite; die 1.4fr kamen nie zum Tragen, und die
   Überschrift brach in der Restspalte auf drei bis fünf Zeilen. */
.cta {
  display: grid;
  padding: clamp(2rem, 5vw, 4rem);
  gap: 1.6rem;
  border-radius: calc(var(--radius) + 0.5rem);
  color: var(--white);
  background: var(--dark-panel);
  box-shadow: var(--shadow);
}

.cta h2 {
  color: var(--white);
}

.cta p {
  max-width: 55ch;
  margin-bottom: 0;
  color: #e5f2f5;
}

/* A-2026-08-18-1 Fall 27: Anfrageblock der DE-Rechtsseite („Dokumentart,
   Verwendung, Umfang … Uebertragungsweg vereinbart ist."). Bei 55ch (560 px)
   endet Zeile 1 nach „und" bei 467 px neben einer Zeile mit Fuellgrad 0,97 —
   75 px Versatz. Keine Wortbindung schliesst das: Zeile 1 braeuchte nur 2 px
   mehr Satzbreite fuer „vorhandene". Gemessene Reihe 56–70ch bei 1920 px ueber
   je einen echten Probebaum, Versatz der vollen Zeilen: 26 px (56ch),
   13 px (57–60ch), 58 px (61–63ch), 88 px (64/65ch), 118 px (66/67ch),
   20 px (68–70ch, aber Schlusszeile nur noch zwei Woerter). Gebaut ist die
   kleinste Breite des Minimums, 57ch = 580 px — weit unter dem typografischen
   Optimum 75 und der WCAG-2.2-Grenze 80. Messreihe in
   `spec/umbruch_feinabstimmung.md` §9. */
.cta p.cta-weit {
  max-width: 57ch;
}

/* Der Abstand kommt aus `gap`; die 2rem aus `.actions` kämen sonst obendrauf. */
.cta .actions {
  margin-top: 0;
}

.cta .button {
  justify-self: start;
  border-color: var(--gold);
  color: var(--navy);
  background: var(--gold);
  white-space: nowrap;
}

.cta .button:hover {
  border-color: var(--gold-bright);
  color: var(--navy);
  background: var(--gold-bright);
}

.page-hero {
  padding: clamp(3.5rem, 7vw, 6rem) 0;
  background: linear-gradient(145deg, var(--sky), #faf6f0);
}

.page-hero h1 {
  max-width: 30ch;
}

.contact-grid {
  display: grid;
  grid-template-columns: 1.2fr 0.8fr;
  gap: clamp(2rem, 7vw, 6rem);
  align-items: start;
}

.contact-list {
  display: grid;
  margin: 0;
  gap: 0.8rem;
}

.contact-list div {
  padding: 1.15rem;
  border: 1px solid var(--line);
  border-radius: 0.9rem;
}

.contact-list dt {
  color: var(--muted);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.contact-list dd {
  margin: 0.2rem 0 0;
  color: var(--navy);
  font-size: 1.08rem;
  font-weight: 700;
  overflow-wrap: anywhere;
}

.notice {
  padding: 1.2rem 1.3rem;
  border: 1px solid #ddc796;
  border-radius: 0.8rem;
  background: #fff8e8;
}

.notice strong {
  color: #6b4b00;
}

.legal {
  max-width: 50rem;
}

.legal h2 {
  margin-top: 2.5rem;
  font-size: 1.55rem;
}

.specimen {
  margin: 3rem 0 0;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  background: var(--white);
  box-shadow: 0 8px 28px rgb(16 45 73 / 6%);
}

.specimen-notice {
  max-width: 66ch;
  margin: 2.5rem 0 0;
  padding: 0.85rem 1rem;
  border-left: 0.22rem solid var(--gold);
  color: var(--muted);
  background: var(--mist);
  font-size: 0.9rem;
}

.specimen-notice + .specimen {
  margin-top: 1rem;
}

.specimen figcaption {
  padding: 1rem 1.4rem;
  color: #5c5030;
  background: var(--paper);
  font-size: 0.85rem;
  font-weight: 600;
}

.specimen-row {
  display: grid;
  padding: 1.05rem 1.4rem;
  grid-template-columns: 13rem minmax(0, 1fr) auto;
  gap: 0.35rem 1.5rem;
  align-items: baseline;
  border-top: 1px solid var(--line);
}

.specimen-tag {
  color: var(--muted);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.specimen-row p {
  margin: 0;
  color: var(--navy);
  font-family: var(--serif);
  font-size: 1.18rem;
}

.specimen-flag {
  font-size: 0.8rem;
  font-weight: 700;
}

.specimen-mt {
  background: #fdf4f2;
}

.specimen-mt p {
  color: #8c2f24;
  text-decoration: line-through;
  text-decoration-color: rgb(178 58 45 / 45%);
  text-decoration-thickness: 0.09em;
}

.specimen-mt .specimen-flag {
  color: #a1352a;
}

.specimen-final {
  background: #fbf8ec;
}

.specimen-final .specimen-flag {
  color: var(--gold-ink);
}

.specimen + .specimen {
  margin-top: 1.2rem;
}

/* Einspaltig ist der Grundzustand, drei Spalten erst ab 59rem — siehe die
   Begruendung bei der Medienabfrage am Dateiende. */
.stats {
  display: grid;
  margin-top: 2.4rem;
  grid-template-columns: 1fr;
  gap: 1rem;
}

.stat {
  padding: 1.7rem;
  border: 1px solid var(--line);
  border-radius: var(--radius);
  background: var(--white);
  box-shadow: 0 8px 28px rgb(16 45 73 / 6%);
}

.stat strong {
  display: block;
  margin-bottom: 0.4rem;
  color: var(--navy);
  font-family: var(--serif);
  /* M-1-Endstand (01.08.2026, konvergiert aus zwei unabhängigen Messreihen):
     Deckel 2.75rem = 44 px. Die Kennzahlenreihe soll der H1 optisch nahe
     kommen, ohne Umbruchdefekt. 44 px ist der einzige Wert, der beides
     erfuellt: in 24 Messungen ueber 12 Breiten von 944 bis 2200 px in
     beiden Sprachen kein fuehrender Trenner, keine dritte Zeile, kein
     Ueberlauf; ab 45 px eroeffnet im Englischen der Mittelpunkt die Zeile,
     ab 48 px zusaetzlich dreizeilig. "Optische Gleichheit" ist dabei keine
     einzelne Zahl, sondern metrikabhaengig: nach Buchstaben und Ziffern
     liegt sie bei rund 44,5 px (DE), ueber alle sichtbaren Glyphen bei
     rund 48 px. 44 px kommt beiden Massen naeher als die frueheren 40 px
     und bleibt als einziger Wert baubar. Die Steigung 3.33vw bleibt. */
  font-size: clamp(2rem, 3.33vw, 2.75rem);
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.1;
}

.stat span {
  color: var(--muted);
}

.cards + .prose {
  max-width: 62rem;
  margin-top: 2.6rem;
}

.portrait {
  display: flex;
  margin: 2rem 0 0;
  align-items: flex-end;
  gap: 1.2rem;
}

/* 9,5rem ließ das Porträt neben einer 528px breiten Spalte wie ein
   Vorschaubild wirken. Auf einer Ein-Personen-Website ist das Bild der
   Vertrauensanker der Seite; 14rem füllt die Spalte, ohne das Original
   (360 px) hochzurechnen. */
.portrait img {
  width: 14rem;
  height: auto;
  border: 4px solid var(--white);
  border-radius: 1rem;
  box-shadow: var(--shadow);
}

.portrait figcaption {
  color: var(--navy);
  font-weight: 700;
  line-height: 1.4;
}

.portrait figcaption span {
  color: var(--muted);
  font-size: 0.88rem;
  font-weight: 500;
}

.fineprint {
  max-width: 42rem;
  margin: 1.8rem 0 0;
  color: var(--muted);
  font-size: 0.9rem;
}

.cards + .prose {
  max-width: 62rem;
  margin-top: 2.6rem;
}

.cards + .prose h3 {
  margin-bottom: 0.9rem;
}

.site-footer {
  padding: 3.2rem 0;
  color: #b9c8d8;
  background: #071b32;
}

.footer-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2.25rem;
  align-items: start;
}

.site-footer .brand {
  color: var(--white);
}

.footer-brand p {
  max-width: min(100%, 60ch);
  margin: 1rem 0 0;
}

.footer-nav {
  display: grid;
  grid-template-columns: repeat(2, max-content);
  gap: 1.25rem clamp(2rem, 4vw, 4rem);
  justify-content: start;
}

.footer-link-group {
  min-width: 0;
}

.footer-heading {
  margin: 0 0 0.75rem;
  color: var(--gold-bright);
  font-family: var(--sans);
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.footer-links {
  display: flex;
  margin: 0;
  padding: 0;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.35rem;
  list-style: none;
}

.footer-links a {
  color: #d7e3ef;
}

.footer-bottom {
  display: flex;
  margin-top: 2rem;
  padding-top: 1.5rem;
  border-top: 1px solid rgb(255 255 255 / 12%);
  justify-content: space-between;
  gap: 1rem;
  font-size: 0.88rem;
}

.footer-bottom a {
  color: #d7e3ef;
}

.footer-bottom a:hover {
  color: var(--white);
}

@media (min-width: 62rem) {
  .footer-grid {
    grid-template-columns: minmax(0, 60ch) minmax(0, 1fr);
  }

  .footer-nav {
    justify-content: end;
  }
}

@keyframes rise {
  from {
    opacity: 0;
    transform: translateY(1.1rem);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

/* ==========================================================================
   SATZBILD DER TEXTBAUSTEINE — Variante 27.07.2026
   Farbwelt, Verläufe, Radien, Schatten und Schriftcharakter bleiben unberührt
   (ENTSCHEIDUNGEN.md §6). Geändert wird ausschließlich, wie Text in den
   vorhandenen Flächen sitzt. Jede Regel steht gegen einen gemessenen Befund.
   Diese Block steht vor den Media-Queries, damit die Mobilregeln weiter greifen.
   ========================================================================== */

/* B1 · Karten standen als gleich hohe Rasterzellen mit unterschiedlich langem
   Text. Gemessener toter Innenraum unten: ISO-Karten 33/139/112 px, Leistungs-
   karten 59/59/33 px, Kennzahlen 99/57/31 px, Ablaufschritte 50/23/50/103 px.
   Eine gerahmte Fläche, die zu einem Drittel leer bleibt, liest sich als
   unfertig. Die Zellen bekommen deshalb ihre natürliche Höhe. */
.cards,
.steps {
  align-items: start;
}

/* Die Kennzahlen-Kacheln tragen keine Überschrift, sondern eine Schauzahl mit
   Bildunterschrift. Hier ist die gemeinsame Unterkante das ruhigere Bild, und
   der verbleibende Raum verteilt sich gleichmäßig nach oben und unten, statt
   als Loch unten zu stehen (vorher 99/57/31 px). Bei `.cards` und `.steps`
   wurde dieselbe Fassung verworfen: Dort rücken dadurch die Überschriften
   auf verschiedene Höhen, und das wiegt schwerer als die bündige Unterkante. */
.stats {
  align-items: stretch;
}

.stat {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* B2 · Im Leistungsblock waren zwei von drei Karten-Überschriften blaue
   Standard-Links, die dritte einfacher Text — die Reihe wirkte wie ein
   abgebrochener Umbau. Jetzt tragen alle drei dieselbe Navy-Farbe; die beiden
   verlinkten weisen sich durch eine feine goldene Unterlänge aus. Das hält den
   Unterschied sichtbar (WCAG 1.4.1) und nutzt den Goldakzent statt Browser-Blau. */
.card h3 a {
  color: var(--navy);
  text-decoration-color: var(--gold);
  text-decoration-thickness: 0.08em;
  text-underline-offset: 0.22em;
}

.card h3 a:hover {
  color: var(--blue-dark);
  text-decoration-color: var(--blue-dark);
}

/* B3 · `align-items: center` ließ die kürzere Spalte in der Mitte schweben:
   166 px gegen 381 px, beim Zitatkasten 184 px gegen 601 px. Über und unter der
   Überschrift stand dadurch leere Fläche, die wie fehlender Inhalt aussah. */
.split {
  align-items: start;
}

/* B4 · Der Fließtext unter einem Kartenraster („Für Einkauf und Fachabteilungen",
   „Vertraulichkeit ist ein definierter Prozess") stand ohne jede Trennung unter
   den Karten und wirkte angehängt. Eine Haarlinie macht ihn zum eigenen Baustein. */
.cards + .prose {
  /* `max-width: 62rem` aus der Grundregel ließ die Linie 160 px vor der
     Kartenkante enden (992 gegen 1152 px) — eine Trennlinie, die nicht
     durchläuft, sieht selbst wie ein Fehler aus. Die Absätze bleiben durch
     `.prose p { max-width: 66ch }` weiterhin auf Lesebreite. */
  max-width: none;
  margin-top: 3rem;
  padding-top: 2rem;
  border-top: 1px solid var(--line);
}

/* B5 · Die Hero-Notiz hatte bei 1280 px nur 296 px Boxbreite und 224 px
   Textbreite; die Fettzeile brach auf sechs Zeilen mit drei bis vier Wörtern.
   Zusätzlich klebte sie durch `align-items: end` an der Unterkante, 243 px
   unter dem Textblock. */
.hero-grid {
  align-items: center;
}

/* B5a · Inhaberentscheidung 27.07.2026: Die oberste Kapitelmarke jeder Seite
   soll exakt dasselbe lebendige Gold wie die CTA-Schaltfläche tragen. Direkt
   auf dem hellen Hero erreicht `--gold` nur 1,80:1; deshalb verwendet sie
   dieselbe dunkelblaue Verlaufsfläche (`--dark-panel`) wie das CTA-Panel.
   Der gemeinsame Token verhindert künftige Farbabweichungen. */
.hero .eyebrow,
.page-hero > .wrap > .eyebrow {
  display: inline-block;
  padding: 0.35rem 0.65rem 0.3rem;
  border-radius: 0.5rem;
  color: var(--gold);
  background: var(--dark-panel);
}

/* Historischer Messstand: Die Notiz wurde nur maßvoll und nur ab 75rem breiter.
   Die Grenze wurde damals unter einer H1-Maximalgröße von 70,4 px bei 1425 px
   gemessen. Heute gilt `--display-size` mit höchstens 3rem = 48 px, erreicht
   ab 1200 px; ob 19rem unter dieser Skala weiterhin die beste Wahl ist, bleibt
   ausdrücklich Prüfpunkt der Stufe 5. Die historische Messreihe lautete:

     Spalte     H1-Breite   H1-Zeilen   Notiz    Fettzeilen
     17rem (Master)  777 px      4       295 px      7
     19rem           768 px      4       304 px      6   ← gewählt
     21rem           736 px      5       336 px      5
     23rem           704 px      5       368 px      5

   Unterhalb 75rem griff die Regel nicht: Bei 865 px fiel die H1 schon mit
   19rem auf fünf Zeilen. Die bestehende Spaltenwahl bleibt bis zur Prüfung
   unverändert. */
@media (min-width: 75rem) {
  .hero-grid {
    grid-template-columns: minmax(0, 1.45fr) minmax(19rem, 0.55fr);
    /* A-2026-08-18-1 Fall 35: Der Hero-Lead war nicht durch sein Zeilenmaß
       begrenzt (66ch = 906 px), sondern durch die Spalte: 1152 − 80 (Spalt)
       − 304 (Notiz) = 768 px. Die Umbruchschwelle des zweiten Absatzes liegt
       bei 792 px, also 24 px über dem Ist — erreichbar allein über den Spalt,
       ohne der Notiz ein Pixel zu nehmen. 3,5 statt 5 rem ergibt 792 px:
       Absatz 2 fällt von sechs auf fünf Zeilen, der Versatz der vollen Zeilen
       von 130 auf 57 px. Weiter zu gehen kostet: ab 820 px Satz wächst die
       Fettzeile der Notiz von fünf auf sieben Zeilen, und 2 rem Spalt (812 px)
       treibt den EN-Zwilling von 29 auf 103 px Versatz. */
    gap: 3.5rem;
  }

  /* A-2026-08-20 Fall 36: Nach dem Sichttextwechsel von `I-70` stand der
     zweite Lead-Absatz bei 792 px Satz mit 86 px Versatz der vollen Zeilen
     (756/670/683/722). Zeile 2 brauchte 804 px — 12 px mehr, als der Spalt
     allein hergab. Die Grenze aus Fall 35 („ab 820 px Satz kippt die
     Fettzeile der Notiz auf sieben Zeilen") gilt nur für den Weg über den
     Spalt, bei dem die Notiz durch die `fr`-Verteilung mitwaechst. Bei
     fester Notizspalte haelt sie bis 828 px fuenf Zeilen; erst 832 px kippt
     sie. 288 px ergeben 824 px Satz: Versatz 86 → 44 px, das Minimum des
     zulaessigen Fensters (820 px reicht nicht, 832 px kostet die Notiz).
     Zeilenmass 824 px = 60,0 ch, im Optimum 45–75.
     Auf `html[lang="de"]` begrenzt, weil die EN-Home in ihrem jetzigen
     Zeilenfall abgenommen ist (Inhaber, 20.08.2026): der Griff aus Fall 35
     wirkt global und haette sie mitgezogen. */
  html[lang="de"] .hero-grid {
    grid-template-columns: minmax(0, 1fr) 288px;
    gap: 2.5rem;
  }

  /* A-2026-08-18-1 Fall 46: Der Inhaber hat die EN-Home am 21.08.2026 wieder
     geoeffnet — die Abnahme vom 20.08. (Kommentar oben) ist damit ueberholt.
     Beide Hero-Leads standen auf 792 px Satz und liefen mit 41 px Versatz der
     vollen Zeilen aus. Sweep 700–906 px (104 Kandidaten) laesst nur drei
     Plateaus mit sieben Zeilen zu: 736–748 (Versatz 35), 776–794 (41, Ist),
     842–878 (43). Der Inhaber waehlte nach Ansehen der vollstaendigen Seiten
     das oberste Plateau; gebaut ist dessen Mitte 850 px (262 px Notizspalte,
     2,5 rem Spalt), nicht dessen Untergrenze 842 px, die 0,9 % mehr Fuellgrad
     gaebe, aber 2 px vor der Kippkante liegt. */
  html[lang="en"] .hero-grid {
    grid-template-columns: minmax(0, 1fr) 262px;
    gap: 2.5rem;
  }
}

/* B6 · Die zweizeilige Bildunterschrift saß auf der Unterkante des Porträts
   (241 px Höhenunterschied) und wirkte verrutscht statt gesetzt. */
.portrait {
  align-items: center;
}

/* B7 · Die dritte Spalte der Specimen-Tafeln war `auto`. Dadurch begannen die
   Fahnen („Sinn verkehrt – Patientenrisiko", „Fachlich geprüft und freigegeben")
   an verschiedenen x-Positionen, und die Mittelspalte schwankte zwischen 561 und
   849 px. Eine feste Spalte richtet beides aus. */
.specimen-row {
  grid-template-columns: 13rem minmax(0, 1fr) 19rem;
}

/* B8 · Die Fußzeilen-Linkliste (816 px) war auf die Unterkante eines 304 px
   schmalen Textblocks ausgerichtet und stand dadurch auf halber Höhe im Raum. */
.footer-grid {
  align-items: start;
}

/* B9 · Sechs Absätze endeten mit einer Zeile unter 25 % der Satzbreite —
   einzelne Wörter allein auf der letzten Zeile. `pretty` verteilt den Umbruch
   der letzten Zeilen; wo der Browser es nicht kennt, ändert sich nichts. */
p,
li,
figcaption,
dd {
  text-wrap: pretty;
}

/* A-2026-08-17-3 · Hier standen zwei Regeln, die `text-wrap: balance` ab 62rem
   auf Fliesstext legten: K-19 auf `.balance-lines p`, A-2026-08-16-3 auf jedes
   `p, li, figcaption, dd`. Beide sind zurueckgebaut; auf Fliesstext gilt nur
   noch das `pretty` von B9 (oben). `balance` bleibt allein auf `h1, h2, h3`.

   Grund. `text-wrap: balance` ist nach CSS Text 4 fuer kurze Bloecke gedacht
   (headings, captions, blockquotes) und wird von Chromium nur bis sechs Zeilen
   ausgefuehrt; fuer Fliesstext ist `pretty` vorgesehen. Die Kennzahl, gegen die
   A-2026-08-16-3 abgenommen wurde — Spannweite je Absatz —, hat etwas anderes
   gemessen als ihr Name sagt: rechnet man die typografisch normal kurze
   Schlusszeile heraus, ist der Flatterrand im Absatzinneren unter beiden
   Varianten nahezu gleich (p50 0,105 gegen 0,110; p90 0,284 gegen 0,329). Der
   Gewinn steckte allein darin, dass die vorderen Zeilen gekuerzt wurden, damit
   die letzte laenger wird — bezahlt mit der Stauchung ganzer Absaetze neben
   ungestauchten Nachbarn.

   Gepaarte Probe, 16 Seiten x 1024/1080/1280/1920 px, 2.036 Bloecke,
   6.840 Zeilen, 0 ungueltige Breiten, Ueberlauf 0 in beiden Varianten:

     mit `balance`   Fundstellen d>80px 14 | Kippstellen 10 | Einwort-Schluss 42
     nur `pretty`    Fundstellen d>80px 11 | Kippstellen  6 | Einwort-Schluss 35

   Sechs Kippstellen bleiben; es sind zweizeilige Absaetze bei rund 84 %
   Fuellung, wo Schlusszeile und volle erste Zeile derselbe Zielkonflikt sind.
   Das ist die Textlaenge, kein Umbruchfehler. */

/* Einzelne freigegebene Sätze enden in schmalen Spalten sonst mit einem
   einzelnen Schlusswort. Die sichtbaren Wortlaute bleiben unverändert;
   nur die jeweils letzten zwei Wörter werden zusammengehalten. */
.keep-together {
  white-space: nowrap;
}

/* A-2026-08-18-1 · I-60 · Gegenstueck zu B9 (`text-wrap: pretty`, oben).
   `pretty` zieht das letzte Wort einer vorletzten Zeile herunter, damit die
   Schlusszeile kein Einzelwort wird. Wo der Inhaber beim Durchlesen genau
   diesen Griff als Loch in der rechten Kante beanstandet, hebt diese Klasse
   ihn fuer den einen Absatz auf. Ein Wort kann nicht zugleich oben und unten
   stehen: der Preis ist die Einwort-Schlusszeile, die I-60 hierfuer erlaubt.
   Nie flaechendeckend setzen — je Klasse ein vom Inhaber uebermittelter Fall,
   Register in `spec/umbruch_feinabstimmung.md` §9. */
.kante-vor-witwe {
  text-wrap: wrap;
}

/* A-2026-08-18-2 · Dritter Griff neben `.keep-together` und `.kante-vor-witwe`,
   und der einzige, der nicht am Text, sondern am RASTER ansetzt. `.split` teilt
   1fr/1fr: ab 1280 px sind das je 528 px. Die linke Spalte traegt nur Eyebrow
   und Ueberschrift und braucht die Haelfte nicht; der Inhalt rechts braucht sie.
   Diese Klasse gibt der Kopfspalte feste 370 px und den Rest dem Inhalt (646 px
   Textbreite statt 488).

   Wann sie gilt: wenn gleichartige Geschwisterbloecke UNEINHEITLICH umbrechen —
   eine Liste, deren Punkte teils ein-, teils zweizeilig sind. Das ist kein
   Bindungsfall: kein Einzelwort haengt, der Block ist schlicht zu schmal.
   Messgroesse ist die FEHLBREITE (noetige Breite des laengsten Geschwisters
   minus Satzbreite); traegt der Griff sie nicht, ist es kein Fall fuer ihn.

   370 px ist gemessen, nicht gewaehlt (18.08.2026, Probebaeume je Kopfbreite,
   1440 px). Das Fenster fuer die Einzeiligkeit der Pruefweg-Liste endet bei
   386 px; darunter beginnt die Ueberschrift zu zerfasern (bei 320 px vierzeilig
   mit Fuellgraden 0,42/0,56/0,66/0,99). Bei 370 px:

     Pruefweg DE   Liste 2,2,2,1,1 → 1,1,1,1,1 Zeilen; H2 zweizeilig (0,92/0,71)
                   → dreizeilig (0,88/0,57/0,86); Sektion 569 → 463 px
     Pruefweg EN   Liste 1,2,2,1,1 → 1,1,1,1,1; H2 bleibt zweizeilig und wird
                   dichter (0,68/0,68 → 0,97/0,97); Sektion 516 → 463 px
     Zusammenarbeit DE  Absaetze 4,5,2 → 3,4,2 Zeilen; H2 bleibt zweizeilig und
                   wird dichter (0,61/0,66 → 0,87/0,94); Sektion 585 → 532 px
     Zusammenarbeit EN  Absaetze 3,4,2 → 3,3,2; H2 einzeilig → zweizeilig
                   (0,92 → 0,66/0,64); Sektion 532 → 506 px

   Der deutsche Pruefweg-Titel wird dreizeilig, der englische
   Zusammenarbeits-Titel zweizeilig — beides vom Inhaber am gerenderten Bild
   abgenommen. Seitenhoehe 1440 px: DE 6.279 → 6.120, EN 5.895 → 5.816.

   MESSFALLE: wer die Spaltenbreite per `element.style` variiert und danach
   misst, bekommt fuer jede Breite dieselben H2-Zeilen — `text-wrap: balance`
   rechnet nach nachtraeglicher Stiländerung nicht neu. Je Variante ein echter
   Probebaum, frisch geladen.

   Unter 62rem ist `.split` einspaltig; dort waere eine feste Kopfspalte falsch.
   Nie flaechendeckend setzen — je Vorkommen ein vom Inhaber uebermittelter
   Fall, Register in `spec/umbruch_feinabstimmung.md` §9. */
@media (min-width: 62rem) {
  .split.split-schmalkopf {
    grid-template-columns: 370px minmax(0, 1fr);
  }
}

/* Feiner Grad desselben Griffs (Fall 10, 18.08.2026). Auf Pharma hing im Block
   „Definierte Begriffspaare" das Wort „Deutschen" um 17 px in die naechste
   Zeile: Zeile 3 endete bei 459 px in einem 528er Satz, das Wort misst 81,6 px.
   Die feste 370er Kopfspalte behebt das zwar, ist hier aber zu grob — sie macht
   die H2 vierzeilig (0,68/0,56/0,66/0,83) und die Sektion hoeher (1404 → 1416).
   Das Fenster beginnt bei 545 px Satzbreite: 0,98fr gibt 539 und reicht nicht,
   0,96fr gibt 549 und reicht. H2 bleibt dreizeilig, Sektion 1404 → 1377 px,
   Seite 6242 → 6216 px; der Absatz faellt von 8 auf 7 Zeilen, die Schlusszeile
   von Fuellgrad 0,36 auf 0,87. Anteilig statt fest, damit die Teilung mit dem
   Fenster mitwandert. Vom Inhaber am gerenderten Bild abgenommen.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall.

   ZWEITER GRAD (Fall 58, 22.08.2026), derselbe Block, jetzt ohne Zielwort:
   die Kante als ganze begradigen. `__sweep` ueber die Satzbreite 440–671 px,
   Schritt 1, 281 Kandidaten, Gegenprobe 4/4 zeichengleich, `schriftOffen` 0,
   kein Kandidat mit Ueberlauf oder Bindestrichbruch. Ueber 671 px waechst
   nichts mehr: dort steht die Kopfspalte auf `min-content` (die `66ch`-
   Deckelung von `.prose p` liegt mit ~671 px genau daneben und wird nicht
   wirksam). Zeilenmaß gerechnet aus den sechs vollen Ist-Zeilen: 0,1262
   Zeichen/px, also 80 Zeichen ≈ 634 px Satz.

   Unterhalb dieser 634 px ist NICHTS zu holen — der beste Wert des ganzen
   Fensters ist 0,926 gegen 0,916 im Ist, und der Ist-Zustand liegt damit auf
   Platz 11 von 195 zulaessigen Breiten. Der einzige echte Sprung liegt bei
   667 px (Satz) und damit bei 84 Zeichen, also UEBER der WCAG-2.2-Grenze 80.
   Der Inhaber hat diese vier Zeichen nach Ansicht der Probebaeume ausdruecklich
   in Kauf genommen (22.08.2026); ohne diese Freigabe waere der Fall geschlossen
   geblieben.

   0,7367fr gibt Satz 667 px: Absatz 8 → 6 Zeilen, Fuellgrade
   1,000/0,982/0,985/0,985/0,993 ‖ 0,543, Versatz der VOLLEN Zeilen (§5a)
   42 → 12 px, schwaechste volle Zeile 0,916 → 0,982. Bezahlter Preis, vor der
   Wahl beziffert: die H2 wird von drei auf vier Zeilen laenger.

   Ein 545-px-Kandidat, den der Sweep mit Schlusszeile 0,95 meldete, hat den
   Probebaum NICHT ueberlebt — dort zeichengleich mit dem Ist. Eine
   Sweep-Spitze ohne Probebaum ist kein Kandidat. */
@media (min-width: 62rem) {
  .split.split-kopf-fein {
    grid-template-columns: minmax(0, 0.7367fr) minmax(0, 1.2633fr);
  }
}

/* Dritter Grad desselben Griffs (Fall 12, 18.08.2026), Unternehmen/Drift in
   BEIDEN Sprachen. Nach Fall 11 (0,96fr, Satz 549) hingen dort noch drei
   Woerter am Zeilenanfang: „auf." fehlten 5 px, „Statik:" 1 px, „Uebergaben."
   21 px — gerechnet, nicht geschaetzt (`__karte` meldet seit diesem Fall
   `bedarf`/`fehlbreite` je Zeile). Das Fenster beginnt deshalb bei Satz 570.

   Eigene Klasse statt Aenderung an `.split-kopf-fein`: den 0,96er Wert teilt
   sich der Block mit Pharma (Fall 10), der dort abgenommen ist.

   Gewaehlt wurde nicht der kleinste ausreichende Wert, sondern der
   ZWEISPRACHIGE Kompromiss (vom Inhaber so verlangt). 0,92fr (Satz 570) macht
   die deutsche Kante glatt, laesst aber den englischen Absatz 2 fuenfzeilig
   mit einer Schlusszeile bei Fuellgrad 0,17. Bei Satz 574 kippt dieser Absatz
   auf vier Zeilen — aber mit 0,998 in Zeile 1, also genau auf der Kante. 0,91fr
   gibt Satz 576 und liegt 2 px darueber.

   Ergebnis 1920 px, DE: Absatz 1 0,962/0,840/0,970/0,427, Absatz 2
   0,990/0,974/0,953/0,941/0,306, Absatz 3 0,849/0,856/0,852/0,708/0,434.
   EN: Absatz 2 vierzeilig 0,995/0,962/0,960/0,898, Absatz 3
   0,983/0,955/0,870/0,793. H2 bleibt in beiden Sprachen zweizeilig (82 px);
   Sektion DE 1500 unveraendert, EN 1435 → 1408, Seite EN 6513 → 6486.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall.

   VIERTER GRAD (Fall 13, 18.08.2026). Bei 0,91fr fuellte der dritte Absatz
   („Grosse Sprachdienstleister …") durchgehend nur ~0,85, waehrend die beiden
   darueber bei ~0,95 lagen. Kein haengendes Einzelwort: die Fehlbreiten der
   Zeilen betrugen 9 / 7 / 48 px, die langen Woerter fielen deshalb allesamt
   eine Zeile zu tief. Neun Probebaeume (0,90/0,895/0,89/0,885/0,88/0,86/0,84/
   0,82/0,80). Ab 0,895fr (Satz 583) kippt der Absatz von fuenf auf vier
   Zeilen, wird dort aber in Zeile 1 erst 0,839; unterhalb 0,885 gewinnt er
   nichts mehr, die beiden anderen Absaetze verlieren. 0,89fr (Satz 586) ist
   der kleinste Wert, der ihn wirklich schliesst — und der einzige, der auch
   den englischen Absatz 3 glaettet, ohne den englischen Absatz 2 aus der in
   Fall 12 abgenommenen Form zu heben. Vom Inhaber gewaehlt.

   Ergebnis 1920 px, DE: Absatz 1 0,945/0,983/0,797/0,420, Absatz 2
   0,973/0,957/0,998/0,949/0,215, Absatz 3 0,997/0,993/0,951/0,705.
   EN: Absatz 2 0,978/0,945/0,944/0,882, Absatz 3 0,997/0,990/0,976/0,577.
   H2 bleibt in beiden Sprachen zweizeilig (DE 0,528/0,719, EN 0,651/0,681);
   Sektion DE 1500 → 1474, Seite DE 6878 → 6851, EN unveraendert.

   ZWEITE VERWENDUNGSSTELLE (Fall 14, 18.08.2026). Dieselbe Klasse traegt seit
   Fall 14 auch die Sektion „experte"/„expert" derselben Seite — vom Inhaber
   verlangt war ausdruecklich der GLEICHE Container-Abstand zum linken Rand wie
   im Drift-Block, damit die beiden Textspalten der Seite fluchten. Kein zweiter
   Wert, keine zweite Klasse: wer hier einen anderen Bruch setzt, erzeugt eine
   sichtbare Stufe zwischen den Sektionen.

   Preis, vorab am Bild freigegeben: die englische H2 „One person takes
   responsibility" braucht 512 px und war bei Kopfspalte 528 px EINZEILIG
   (0,970). Bei 470 px wird sie zweizeilig (0,398/0,674). Es gibt kein Fenster,
   das den Satz nennenswert verbreitert und sie einzeilig laesst — schon 16 px
   kippen sie. Ergebnis 1920 px, DE: Absatz 1 0,954/0,928/0,879/0,623, Absatz 2
   0,940/0,932/0,892/0,910/0,954/0,894/0,951/0,990, Absatz 3
   0,968/0,945/0,787/0,952/0,775. EN: Absatz 1 0,959/0,920/0,942, Absatz 2
   0,891/0,940/0,915/0,993/0,886/0,962/0,799, Absatz 3
   0,913/0,964/0,966/0,944/0,109. Sektion DE 832 → 753, EN 753 → 700,
   Seite DE 6851 → 6772, EN 6486 → 6433. */
@media (min-width: 62rem) {
  .split.split-kopf-weit {
    grid-template-columns: minmax(0, 0.89fr) minmax(0, 1.11fr);
  }
}

/* Fuenfter Grad desselben Griffs (Fall 29, 19.08.2026), Home EN, Sektion
   „precision". Begrenzt war dort nicht das Zeilenmass, sondern die SPALTE:
   `.prose p { max-width: 66ch }` gaebe 671 px, das 1fr/1fr-Raster gab 528.

   Neun Probebaeume bei 1920 px. Das Fenster ist nicht monoton — zwischen
   0,96fr und 0,88fr (Satz 549–591) wird die Kante SCHLECHTER als im Ist
   (Nachbarversatz 58/87/87 px gegen 41), weil die Absaetze bei vier Zeilen
   bleiben und nur lockerer laufen. Erst ab 0,86fr kippt Absatz 2 auf drei
   Zeilen. Gemessen (Spanne der vollen Zeilen / groesster Nachbarversatz):
   1,00fr 48/41 · 0,96fr 58/58 · 0,92fr 90/87 · 0,88fr 97/87 · 0,86fr 48/19 ·
   0,84fr 30/16 · 0,82fr 33/16 · 0,80fr 52/19 · 0,76fr 52/19 · 0,73fr 56/44.
   0,73fr ist der 66ch-Deckel; darueber wirkt die Rasteraenderung nicht mehr.

   0,84fr (Satz 612) ist das Optimum und vom Inhaber am gerenderten Bild
   gewaehlt. Kopfspalte 528 → 444 px, Textspalte beginnt 84 px weiter links.
   Volle Zeilen 0,98/1,00/0,99 · 0,98/0,99 · 0,97/0,95; Absatz 2 faellt von
   vier auf drei Zeilen. H2 bleibt zweizeilig und wird dichter (0,61/0,71 →
   0,72/0,84), Hoehe unveraendert 82 px. Sektion 1265 → 1239 px, Seite EN
   8605 → 8579 px. Preis nach I-60: Absatz 1 und 3 enden auf einer
   Zweiwort-Zeile (Fuellgrad 0,30 bzw. 0,20) — kurze Schlusszeile zugunsten
   der rechten Kante, keine Einwortzeile.

   Nur im englischen Baum gesetzt; die deutsche Startseite bleibt auf 1fr/1fr.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-kopf-sehr-weit {
    grid-template-columns: minmax(0, 0.84fr) minmax(0, 1.16fr);
  }
}

/* Sechster Grad desselben Griffs (Fall 31, 19.08.2026), Home EN, Sektion
   „human-review". Begrenzt war wieder die SPALTE, nicht das Zeilenmass: das
   1fr/1fr-Raster gab 528 px Satz, `.prose p { max-width: 66ch }` gaebe 671.

   Zwoelf Probebaeume bei 1920 px, je frisch geladen. Der Zielabsatz „For
   internal e-mails …" faellt erst ab 0,90fr (Satz 581) von fuenf auf vier
   Zeilen; zwischen 0,96fr und 0,92fr bleibt er fuenfzeilig und wird SCHLECHTER
   als im Ist (Nachbarversatz 33 gegen 24, Schlusszeile 88 px). Gemessen
   (volle Zeilen: Spanne / groesster Nachbarversatz / Schlusszeile):
   1,00fr 36/24/197 · 0,96fr 42/33/88 · 0,94fr 42/33/88 · 0,92fr 42/33/88 ·
   0,90fr 79/79/515 · 0,88fr 79/79/515 · 0,86fr 79/79/515 · 0,84fr 37/21/390 ·
   0,82fr 25/25/345 · 0,80fr 55/55/345 · 0,76fr 31/31/281 · 0,73fr 28/14/236.

   0,80fr (Satz 634) ist vom Inhaber am gerenderten Bild gewaehlt — nicht der
   kleinste Kantenwert (das waere 0,82fr mit 25/25). Die Zahl entscheidet diesen
   Fall nicht allein: bei 0,80fr laeuft Zeile 1 fast randvoll (630 von 634) und
   der Absatz beginnt als geschlossene Kante, waehrend der Versatz allein aus
   der kurzen zweiten Zeile stammt.

   MESSFEHLER, der diesen Fall zweimal durchlaufen liess: der erste Sammellauf
   ueber alle Probebaeume lief mit einer aelteren, im Messfenster ueberlebenden
   Fassung von `__karte` und meldete fuer 0,96fr–0,86fr Zeilen, die sich in
   Einzellaeufen nicht reproduzieren (fuer 0,92fr vier Zeilen statt fuenf). Dem
   Inhaber wurde auf dieser Grundlage 0,92fr empfohlen. Belastbar ist nur die
   Reihe, die in VOR- und RUECKWAERTSreihenfolge identisch ist; die Messbank
   wird dazu vor dem Lauf frisch geladen.

   `__karte` gibt seit diesem Fall `gebrochen` je Zeile aus. Anlass war die
   Ruecksprache zu „patient-facing": ein Bruch AM BINDESTRICH ist aus `letzt`
   nicht ablesbar, weil das Worttoken auf beiden Zeilen vollstaendig erscheint.
   Sweep 760–1920 px in 40-px-Schritten: „patient-facing" bricht an KEINER
   Breite. Gebrochen wird „post-editing" im Absatz darunter, im Ist bei 1040 und
   1080 px, hier bei 1000 px — nicht Gegenstand dieses Falls.

   Ergebnis 1920 px: Kopfspalte 528 → 423 px, Textspalte beginnt 105 px weiter
   links. Zielabsatz fuenf → vier Zeilen (630/575/619, Schluss 345 px, 0,54).
   H2 „AI translates in seconds …" drei → zwei Zeilen (123 → 82 px hoch).
   Zitatkasten bleibt zweizeilig. Absatz 3 bleibt fuenfzeilig mit einer
   Zweiwort-Schlusszeile (111 px, 0,18) — Preis nach I-60, kurze Schlusszeile
   zugunsten der rechten Kante, keine Einwortzeile.

   Nur im englischen Baum gesetzt; die deutsche Startseite bleibt auf 1fr/1fr.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-kopf-weitest {
    grid-template-columns: minmax(0, 0.80fr) minmax(0, 1.20fr);
  }
}

/* Siebter Grad des Rastergriffs (Fall 39, 21.08.2026), Home EN, Sektion
   „translator" — und der erste, der die Breite NICHT aus der Kopfspalte nimmt,
   sondern aus dem SPALT. Grund ist eine harte Sperre: die H2 „From law to
   medical technology" braucht zwischen 508 und 528 px. Bei 1fr/1fr steht sie
   mit 528 px genau darueber und ist einzeilig; JEDE Verschmaelerung der
   Kopfspalte macht sie zweizeilig. Die Kopfspalte bleibt deshalb auf ihren
   heutigen 528 px festgenagelt, und die 56 px kommen allein aus dem Spalt
   (`clamp(2rem, 7vw, 6rem)` = 96 px bei 1920 → 40 px). Kopfspalte, Portraet
   (14rem fest), Sektionshoehe 674 px und Seitenhoehe 8539 px bleiben dadurch
   unveraendert; die Textspalte beginnt 56 px weiter links und ist 56 px breiter.

   Gemessenes Fenster, in dem `__kante` den Block nicht mehr meldet:
   Satz 568–587 px (Spalt 56–37 px); die bessere Form von Absatz 2 beginnt bei
   578 px. 2,5 rem = 40 px gibt Satz 584 und liegt in beiden Baendern mittig.
   Der Weg ueber die Kopfspalte wurde als Kandidat B gemessen und vom Inhaber
   verworfen: 0,77fr gibt zwar Satz 649 und einen vierzeiligen Absatz 2
   (Versatz 43 px), macht die H2 aber zweizeilig und meldet im Block zwei
   Reststellen statt keiner.

   `min-width: 75rem` statt der 62rem der Klassen darueber: bei 1024 px ist der
   Wrap zu schmal fuer eine feste 528er Kopfspalte — der Satz faellt dort auf
   432 px und beide Absaetze werden laenger. Der Vier-Breiten-Lauf hat es
   gefangen; 1024 und 1080 px bleiben zeichengleich zum Ist.

   Ergebnis 1920 px (Satz 528 → 584): Absatz 1 493/492/508 + Schluss 198 →
   564/567 + Schluss 563, vier → drei Zeilen, Spanne ueber ALLE Zeilen 4 px.
   Absatz 2 445/512/481/491/477 + Schluss 58 (Einwortzeile) →
   530/578/555/570 + Schluss 235, sechs → fuenf Zeilen, Versatz der vollen
   Zeilen 67 → 48 px. `__kante` meldet den Block vorher mit „to" (1 Wort,
   15 px), nachher gar nicht mehr; seitenweit 8 → 7 Stellen.

   Der Griff macht alle drei Wortbindungen dieses Blocks gegenstandslos —
   `.keep-together` um „has been" (Fall 37) und um „I keep" sowie
   `.kante-vor-witwe` (Fall 38). Mit und ohne gegengemessen: zeichengleich.
   Sie sind im selben Commit zurueckgenommen.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 75rem) {
  .split.split-enger-spalt {
    grid-template-columns: 528px minmax(0, 1fr);
    gap: 2.5rem;
  }
}

/* Feinerer Grad desselben Spalt-Griffs (Fall 41, 21.08.2026), Pharma EN,
   Sektion „risk". Der Block „Medicines terminology …" lief im 1fr/1fr-Raster
   auf 528 px Satz sechszeilig mit einer Schlusszeile bei Fuellgrad 0,31; die
   Fehlbreiten der sechs Zeilen betrugen 14/3/69/70/27 px. Kein haengendes
   Einzelwort — die Spalte war zu schmal, also ein Rasterfall.

   Der Weg ueber die KOPFSPALTE ist hier verworfen und die Verwerfung gemessen:
   0,96fr bis 0,73fr (Satz 549–671) machen die H2 „Adverse event and adverse
   reaction are not interchangeable" bei JEDEM Wert von zwei auf drei Zeilen
   (82 → 123 px) und die Sektion hoeher (1324 → 1348 px). Der Preis ist
   konstant, der Gewinn nicht. Ueber den Spalt bleibt die Kopfspalte auf 528 px
   und die H2 zweizeilig.

   Feinsweep in 4-px-Schritten, Satz 536–568, je ein echter Probebaum, in Vor-
   UND Rueckwaertsreihenfolge identisch. Es gibt genau zwei Optima und nichts
   dazwischen — bei 552 px gilt A, bei 556 px springt ein Wort herauf:
     A  Satz 548 (Spalt 76 px)  0,987/0,991/0,993/0,914/0,965, volle Zeilen
        Spanne 43 px — hoechste Fuellgrade, aber eine Kerbe in Zeile 4
     B  Satz 556 (Spalt 68 px)  0,973/0,977/0,978/0,998/0,856, volle Zeilen
        Spanne 14 px, groesster Nachbarversatz 11 px
   Der Inhaber hat B am gerenderten Bild gewaehlt: die Kante der vollen Zeilen
   steht fast lotrecht, der Preis ist eine Schlusszeile bei 0,856 (13 Woerter,
   keine Einwortzeile, damit von I-60 gedeckt).

   4,25rem = 68 px. `min-width: 75rem` wie beim Grad darueber: darunter ist der
   Wrap zu schmal fuer eine feste 528er Kopfspalte. 1024 und 1080 px bleiben
   zeichengleich zum Ist; Wirkbreiten sind 1280 und 1920 px.

   Ergebnis 1920 px (Satz 528 → 556): sechs → fuenf Zeilen, Schlusszeile 164 px
   (4 Woerter, Fuellgrad 0,31) → 476 px (13 Woerter, 0,856), volle Zeilen
   Spanne 47 → 14 px, Nachbarversatz 46 → 11 px. H2 unveraendert zweizeilig
   (82 px), Sektion 1324 → 1307 px, Seite EN 6005 → 5987 px.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 75rem) {
  .split.split-enger-spalt-fein {
    grid-template-columns: 528px minmax(0, 1fr);
    gap: 4.25rem;
  }
}

/* Achter Grad des Rastergriffs (Fall 45, 21.08.2026), Home EN, Sektion
   „human-review" — der erste, der BEIDE Hebel zugleich zieht (Kopfspalte UND
   Spalt) und der erste, der die `66ch`-Deckelung von `.prose p` aufhebt.

   Uebermittelt war der Textblock „For internal e-mails …" bis „… of the
   document." (beide Fliessabsaetze) mit der Vorgabe, die rechte Kante ueber
   die Containerbreite zu begradigen. Wortbindung war hier ausgeschlossen und
   die Ausschliessung gemessen: alle drei Umbrueche von Absatz 1 sind echte
   Zwaenge (Fehlbreiten 50/11/18 px). Zeile 2 hat zwar 59 px Rest, das naechste
   Wort „meaning" misst aber 70 px — kein `pretty`-Herunterzug, also weder
   `.kante-vor-witwe` noch `.keep-together` wirksam.

   Sweep 560–780 px in 10-px-Schritten, je ein echter Probebaum. Vier Kandidaten
   wurden dem Inhaber als vollstaendige Seite vorgelegt (I-65); er hat nach
   Ansehen K4 = Satz 760 px gewaehlt. Versatz der vollen Zeilen
   Absatz 1: 55 → 12 px, Absatz 2: 15 → 2 px; `__kante` meldet den Block
   vorher mit „full post-editing" (15 px), nachher gar nicht mehr.

   760 px brauchen 126 px mehr, als 1fr/1fr hergibt. 56 px kommen aus dem Spalt
   (`clamp(2rem, 7vw, 6rem)` = 96 px bei 1920 → 2,5rem = 40 px), 70 px aus der
   Kopfspalte (422 → 352 px). Preis dafuer ist der Zitatkasten: zwei → drei
   Zeilen (150 → 184 px hoch), im gerenderten Kandidaten gesehen und
   mitfreigegeben. Die H2 „AI translates in seconds …" bleibt zweizeilig
   (82 px). Sektion 618 → 591 px, Seite EN 8539 → 8512 px.

   `.prose p { max-width: 66ch }` = 671 px haette auf 671 gedeckelt; die
   Aufhebung ist auf diese Klasse beschraenkt. Zeichen je voller Zeile steigen
   damit von 80–89 auf 90–105 — ueber der WCAG-2.2-Orientierung von 80, wie
   schon im Ist und wie in Fall 42 (671 → 768 px). Dem Inhaber vor der Wahl
   beziffert.

   Die Klasse tritt NEBEN `split-kopf-weitest` (Fall 10), sie ersetzt sie
   nicht: jene deckt das Band 62–75 rem ab. Ein erster Bau mit `min-width:
   75rem` allein liess den Satz bei 1024 px von 552 auf 460 px fallen und beide
   Absaetze eine Zeile laenger werden — der Vier-Breiten-Lauf hat es gefangen.
   1024 und 1080 px sind jetzt zeichengleich zum Ist; Wirkbreiten sind 1280 und
   1920 px.

   Die beiden `.keep-together` dieses Blocks („patient-facing", „Someone has")
   sind NICHT gegenstandslos geworden — ohne sie faellt Absatz 1 bei 1080 px auf
   565/554/577/479 statt 500/580/575/516. Sie bleiben stehen.
   Nur im englischen Baum gesetzt.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 75rem) {
  .split.split-satz-weitest {
    grid-template-columns: 352px minmax(0, 1fr);
    gap: 2.5rem;
  }

  .split.split-satz-weitest .prose p {
    max-width: none;
  }
}

/* Neunter Grad des Rastergriffs (Fall 48, 21.08.2026), EN-MedTech, Sektion
   `#risk`, oberster Textblock „In medical device documentation … all the same."

   Uebermittelt war die Vorgabe, die rechte Kante ueber die Containerbreite zu
   begradigen und die Fuellgrade aller Zeilen zu maximieren; kein Zielwort.
   Wortbindung war ausgeschlossen und die Ausschliessung gemessen: der Block
   stand bei 1fr/1fr auf Satz 528 px mit 503/501/486/528 px — die Schlusszeile
   war RANDVOLL (Fuellgrad 1,000), es hing kein Wort.

   155 echte Probebaeume (Messfalle §4a), Satz 520–790 px, 1-px-Schritte in
   521–600 und 655–715. Zwei Befunde:

   1. Innerhalb des zulaessigen Zeilenmasses gibt es nichts Besseres als den
      Ist-Zustand. Gemessen 7,45 px je Zeichen, die 80-Zeichen-Grenze liegt bei
      595 px. Ueber 521–600 px ist 528 px das Maximum jeder Kennzahl (Mittel
      0,956; Minimum 0,920; Versatz der vollen Zeilen 17 px); der naechstbeste
      Wert 560 px faellt auf Mittel 0,901 mit Schlusszeile 0,682.
   2. Jede Verbreiterung bricht die Ueberschrift. „One character is all it
      takes" braucht 430 px; ab Satz 626 px wird die Kopfspalte zu schmal und
      die H2 zweizeilig.

   Der Absatz kippt bei Satz 698 px von vier auf drei Zeilen. Von 698 bis
   779 px ist der Umbruch ZEICHENGLEICH (697/689/636 px) — nur der Kasten
   waechst. Ein Sicherheitsabstand zur Kippkante kostet optisch also nichts;
   gewaehlt wurden 704 px, 7 px oberhalb 697. 352 px Kopfspalte bei
   unveraendertem Spalt (96 px bei 1920) geben genau diese 704 px.

   Vier Kandidaten wurden dem Inhaber als vollstaendige Seite vorgelegt (I-65):
   Ist (528), A (704), B (698, 1 px vor der Kippkante), C (677, Satz wie die
   `.prose-halbweit`-Bloecke darunter, aber Zweiwort-Schlusszeile 75 px). Er hat
   nach Ansehen A gewaehlt. Vorher beziffert war der Preis: Zeilenmass 69 → 91
   Zeichen, ueber der WCAG-2.2-Orientierung von 80 — wie schon im Ist bei den
   `.prose-halbweit`-Bloecken derselben Sektion (677 px, 91 Zeichen) und wie in
   Fall 42 und Fall 45. H2 einzeilig (0,814) → zweizeilig (0,628/0,568).

   Ergebnis 1920 px: 503/501/486/528 → 697/689/636. Versatz der vollen Zeilen
   17 → 8 px, Fuellgrade 0,990/0,979/0,903, Ueberlauf 0. Split 138 → 173 px,
   Sektion 1213 → 1248 px, Seite EN 6519 → 6555 px.

   Breakpoint 62rem, nicht 75rem wie Fall 45: der Vier-Breiten-Lauf zeigt bei
   1024 und 1080 px keine Verschlechterung, sondern eine Verbesserung — 1024 px
   faellt von fuenf auf vier Zeilen (455/439/387/417/316 → 552/550/534/382,
   Versatz der vollen Zeilen 68 → 18 px), 1080 px ebenso (455/472/456/484/148 →
   616/585/590/227, Versatz 29 → 31, Stummel 148 → 227 px). Wirkbreiten sind
   damit alle vier.

   `.prose p { max-width: 66ch }` = 671 px haette auf 671 gedeckelt; die
   Aufhebung ist auf diese Klasse beschraenkt. Nur im englischen Baum gesetzt.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-satz-weit {
    grid-template-columns: 352px minmax(0, 1fr);
  }

  .split.split-satz-weit .prose p {
    max-width: none;
  }
}

/* Zehnter Grad des Rastergriffs (Fall 52, 21.08.2026), EN-Legal, Sektion
   `#collaboration`, Textblock „You communicate … under Enterprise & Quality."

   Uebermittelt war die Vorgabe, die rechte Kante ueber die Containerbreite zu
   begradigen und die Fuellgrade aller Zeilen zu maximieren; kein Zielwort. Der
   Block stand auf `split-schmalkopf` (370 px Kopf) mit Satz 671 px — das ist
   nicht die Spaltenbreite (686 px), sondern die `66ch`-Deckelung von
   `.prose p`. Ausgangskante 1920 px: 639/648/200 · 650/671/386 · 600/156.
   Schwaechste volle Zeile 0,894, Versatz der vollen Zeilen 71 px. Ursache war
   „Enterprise": das Wort braucht 683 px und fiel um 12 px zu knapp herunter.

   Erstmals mit `__sweep` gemessen statt mit Probebaeumen (das Werkzeug ist an
   diesem Fall in Gebrauch genommen worden): 301 Satzbreiten 560–860 px in
   1-px-Schritten, Gegenprobe 5/5 zeichengleich gegen `__karte`-Frischlaeufe.
   Im ganzen Fenster gibt es genau ZWEI Optima, dazwischen liegt der Versatz
   bei 33–100 px:

   A  686 px — nur die `66ch`-Deckelung auf, Raster unberuehrt. 8 Zeilen,
      Versatz 16 px, schwaechste 0,972, aber DREI kurze Ausläufer
      (143/358/73 px).
   B  761 px — Kopfspalte 370 → 295 px. 6 Zeilen, Versatz 19 px, schwaechste
      0,970, nur EINE kurze Zeile (213 px).

   Beide wurden als vollstaendige Seite vorgelegt (I-65), dazu der Ist-Zustand.
   Der Inhaber hat nach Ansehen B gewaehlt: A ist in der schwaechsten Zeile um
   0,002 besser, B in der Blockgestalt deutlich — Absatz 1 wird zweizeilig mit
   randvoller Schlusszeile (749 px), Absatz 3 EINZEILIG (760 px).

   Ergebnis 1920 px: 742/749 · 757/738/213 · 760. Versatz der vollen Zeilen
   71 → 19 px, Fuellgrade 0,975/0,995/0,970. Ueberlauf 0. Seite EN 5883 →
   5830 px. Zeilenmass 66 → 75 Zeichen — innerhalb des Optimums 45–75 und
   unter der WCAG-2.2-Orientierung von 80, anders als in Fall 42, 45 und 48.
   Dem Inhaber vor der Wahl beziffert.

   Die H2 „Direct access to your translator" bleibt in der 295-px-Kopfspalte
   zweizeilig (82 px, kein Ueberlauf) — bei allen vier Breiten.

   Breakpoint 62rem: der Vier-Breiten-Lauf zeigt bei 1024 und 1080 px keine
   Verschlechterung, sondern eine Verbesserung. 1024 px Satz 550 → 625
   (Absatz 1 539/474/474 → 571/623/292), 1080 px Satz 603 → 678 (Absatz 1
   571/569/346 → 677/667/143). Wirkbreiten sind alle vier.

   `__kante` meldet den Block danach weiterhin mit dem Fenster „are agreed"
   (Ueberstand 19 px). Dort wird NICHT gegriffen: die Zeile ist mit Fuellgrad
   0,995 randvoll, es haengt kein Wort, und eine Bindung wuerde beide Worte
   hinunterziehen und den Absatz von zwei auf drei Zeilen bringen — der
   Fall-19-Fehler. Die vom Inhaber gesehene Gestalt ist die Grenze (§5a).

   Im Block stand keine `.keep-together`; es war keine zurueckzunehmen.
   Nur im englischen Baum gesetzt.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-kopf-schmalst {
    grid-template-columns: 295px minmax(0, 1fr);
  }

  .split.split-kopf-schmalst .prose p {
    max-width: none;
  }
}

/* Elfter Grad des Rastergriffs (Fall 56, 22.08.2026), EN-Unternehmen, Sektion
   `#drift`, Block „Terminology drift …" bis „… change hands." Verlangt war
   nicht ein haengendes Einzelwort, sondern der maximale Fuellgrad ALLER
   Zeilen — ein reiner Containerfall.

   Ist bei 1920 px (Satz 586, elf Zeilen): 0,898/0,966/0,534 ·
   0,978/0,945/0,944/0,882 · 0,997/0,990/0,976/0,577. Zeile 1 des ersten
   Absatzes fehlten genau 10 px (`bedarf` 596).

   Pixelsweep ueber 251 Kopfbreiten von 200 bis 700 px (`__sweep`, Gegenprobe
   5/5 zeichengleich), danach fuenf echte Probebaeume. Zulaessig waren nur
   Kandidaten mit Ueberlauf 0, ohne Bindestrichbruch und unter der
   WCAG-2.2-Grenze von 80 Zeichen; das geometrische Optimum (Satz 820, Versatz
   der vollen Zeilen 10 px, schwaechste volle Zeile 0,985) liegt mit 80,7ch
   darueber und ist ausgeschieden. Vorgelegt (Fuellgrad aller Zeilen im Mittel
   / schwaechste volle Zeile / Versatz der vollen Zeilen / H2-Zeilen):
   Ist 586 px 0,881/0,898/58/2 · A 596 px 0,866/0,960/23/2 ·
   B 716 px 0,882/0,953/32/2 · C 774 px 0,919/0,946/42/**3** ·
   D 790 px 0,900/0,954/36/**3**.

   Der Inhaber hat am gerenderten Bild **A** gewaehlt — nicht den hoechsten
   Mittelwert. C und D fuellen die Zeilen staerker, machen aber die H2 „A term
   outlives the project it came from" dreizeilig (82 → 123 px) und das
   Zeilenmass mit 76–78 Zeichen breiter als das Leseoptimum. A verschiebt die
   Spalte um 10 px und laesst Ueberschrift, Sektionshoehe (1408 px) und
   Zeilenzahl (11) unveraendert.

   Anteilig statt fest, damit die Teilung mit dem Fenster mitwandert (wie
   Fall 10): 0,87fr gibt bei 1920 px Satz 596. Eigene Klasse, weil
   `.split-kopf-weit` (0,89fr) sich der Block mit der DEUTSCHEN Seite teilt,
   die dort als zweisprachiger Kompromiss abgenommen ist (Fall 12).

   Ergebnis 1920 px: 0,998/0,983/0,374 · 0,961/0,990/0,988/0,747 ·
   0,980/0,973/0,960/0,567. Nur im englischen Baum gesetzt.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-kopf-weit-fein {
    grid-template-columns: minmax(0, 0.87fr) minmax(0, 1.13fr);
  }
}

/* Zwoelfter Grad des Rastergriffs (Fall 57, 22.08.2026), DE-Recht, Sektion
   `#zusammenarbeit`, Block „Sie stimmen … Unternehmen & Qualitaet." — der
   deutsche Zwilling von Fall 52. Verlangt war nicht ein haengendes Einzelwort,
   sondern der maximale Fuellgrad ALLER Zeilen: ein reiner Containerfall.

   Ist bei 1920 px (`split-schmalkopf`, 370 px Kopf, Satz 671 aus der
   `66ch`-Deckelung, neun Zeilen): 608/638/241 · 628/634/608/202 · 627/81. Die
   Kante selbst war mit 30 px Versatz schon gerade; das Uebel waren DREI kurze
   Auslaeufer, der kleinste „& Qualitaet." mit 81 px (Fuellgrad 0,121).

   Pixelsweep ueber 551 Kopfbreiten 150–700 px (`__sweep`, Gegenprobe 5/5
   zeichengleich). Zulaessig (Ueberlauf 0, kein Bindestrichbruch, ≤ 80 Zeichen)
   waren 348 Breiten in sieben Gestalten. Die reine Oeffnung der
   `66ch`-Deckelung ohne Rasteraenderung (Kopf 370, Satz 686) bringt hier
   NICHTS — anders als in Fall 52 macht sie Absatz 2 schlechter (Schlusszeile
   202 → 132 px). Vorgelegt wurden drei Kandidaten als vollstaendige Seite
   (I-65), dazu der Ist-Zustand:

   A  Kopf 335, Satz 721 (70,9ch) — 7 Zeilen, Versatz 12, schwaechste volle
      0,957, H2 dreizeilig, Sektion 541 → 489, Seite 6160 → 6108.
   B  Kopf 259, Satz 797 (78,4ch) — 6 Zeilen, Versatz 85, H2 VIERZEILIG.
   C  Kopf 247, Satz 809 (79,6ch) — 6 Zeilen, Versatz 33, H2 VIERZEILIG.

   Der Inhaber hat nach Ansehen A gewaehlt. B und C fuellen die Zeilen
   staerker und haben gar keinen kurzen Auslaeufer mehr (kuerzeste 524 px),
   setzen die Ueberschrift „Direkter Kontakt zu Ihrem Fachuebersetzer" aber in
   eine 247–259 px schmale Spalte: vier Zeilen mit Fuellgraden um 0,55. A
   bleibt zudem mit 70,1 Zeichen im Leseoptimum 45–75, B und C liegen mit
   78–80 darueber.

   Ergebnis 1920 px: 699/698/90 · 702/690/685 · 712. Absatz 3 wird EINZEILIG
   und randvoll (0,988), Absatz 2 verliert seine kurze Schlusszeile ganz.
   Fuellgrade 0,969/0,968/0,125 · 0,974/0,957/0,950 · 0,988; Versatz der vollen
   Zeilen 30 → 12 px, schwaechste volle Zeile 0,906 → 0,957, Zeilen 9 → 7.

   Der 90-px-Rest in Absatz 1 („und Pruefweg") bleibt stehen und wird NICHT
   weggebunden: `__kante` meldet den Block nicht mehr, und die vom Inhaber
   gesehene Gestalt ist die Grenze (§5a, Fall-19-Fehler).

   Fest statt anteilig, weil der Kandidat an einer festen Kopfbreite gemessen
   und abgenommen ist. Eigene Klasse, weil `.split-schmalkopf` (370 px) auf
   derselben Seite noch die Sektion `#pruefweg` und im englischen Baum
   `#review-path` traegt. Nur im deutschen Baum, nur an diesem einen Vorkommen.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-kopf-mittelschmal {
    grid-template-columns: 335px minmax(0, 1fr);
  }

  .split.split-kopf-mittelschmal .prose p {
    max-width: none;
  }
}

/* Dreizehnter Grad des Rastergriffs (Fall 59, 22.08.2026), DE-Pharma, Sektion
   `#pruefweg`, fuenfgliedrige Aufzaehlung „Klaeren, fuer wen …" plus
   Schlussabsatz „… schriftlich fest." Verlangt war nicht ein haengendes
   Einzelwort, sondern der maximale Fuellgrad ALLER Zeilen: reiner
   Containerfall.

   Ist bei 1920 px (Kopfspalte 528, Listensatz 488 / Absatzsatz 528, dreizehn
   Zeilen): 467,409 · 350,438 · 482,327 · 469,244 · 487,316 · 518,480,277.
   Alle fuenf Punkte zweizeilig, der Absatz dreizeilig. Die Zacke war Punkt 2
   Zeile 1 mit Fuellgrad 0,717 — ihr fehlten genau 8 px fuer
   „Abschnittsstruktur".

   Pixelsweep ueber 551 Kopfbreiten 200–750 px (`__sweep`, Gegenprobe 5/5
   zeichengleich, `schriftOffen` 0), 65 Gestalten, kein Kandidat mit Ueberlauf
   oder Bindestrichbruch. Zeilenmass nachgerechnet 0,126 Zeichen/px, die
   WCAG-2.2-Grenze von 80 Zeichen liegt damit bei 634 px Satz. Vorgelegt als
   vollstaendige Seiten (I-65) wurden vier Probebaeume plus der Ist-Zustand:
   A Kopf 512 (Satz 544, 68,7ch) · B Kopf 465 (591, 74,6ch) · C Kopf 405
   (651, **82,2ch**) · D Kopf 360 (671, **84,7ch**, Absatz nur noch
   zweizeilig). C und D ueberschreiten die Grenze und waren unzulaessig.

   Anders als in Fall 10 und 58 kostet die schmalere Kopfspalte hier NICHTS:
   die H2 „Pruefkriterien fuer Produktinformationen" bleibt in allen fuenf
   Varianten zweizeilig.

   Der Inhaber hat B gewaehlt, aber unter einer nachgeschobenen Bedingung:
   „deutsche" muss hinter „vorliegende" in die erste Absatzzeile. Bei Kopf 465
   geht das NICHT — die Zeile braucht 593 px Satz, B liefert 591, es fehlen
   zwei Pixel. Gebaut ist deshalb B mit 463 statt 465 px. Der Sweep zeigt
   445–463 als eine einzige Gestalt; 463 ist ihr Rand und damit der Kandidat,
   der B am naechsten liegt.

   Ergebnis 1920 px: 549,327 · 495,293 · 543,267 · 552,161 · 549,254 ·
   592,570,113. Fuellgrade 0,993/0,895/0,982/0,998/0,993 ‖ 0,998/0,961.
   Versatz der vollen Zeilen (§5a) 168 → 97 px, schwaechste volle Zeile
   0,717 → 0,895, Mittel der vollen Zeilen 0,930 → 0,974. Zeilenzahl bleibt
   13, Sektion 391 px und Seite 6228 px unveraendert.

   Bezahlter Preis, vor der Wahl beziffert: die Schlusszeile des Absatzes
   faellt von 277 auf 113 px. Sie bleibt stehen — das Ziel des Inhabers war
   wortgenau benannt und ist damit die Grenze (§5a, Fall-19-Fehler).

   ANTEILIG, nicht fest — und das ist hier gemessen, nicht uebernommen. Der
   Kandidat wurde an 463 px fester Kopfbreite ausgewaehlt; genau so gebaut
   verschlechtert er den Block aber unterhalb von 1920 px, weil die feste
   Spalte am schmalen Fenster die Inhaltsspalte frisst: bei 1024 px Satz 457
   statt 460 im Ist, und Punkt 5 wird dreizeilig. `0,8769fr` gibt bei 1920 px
   dieselben 463 px (zeichengleich mit dem festen Bau) und laesst die Teilung
   darunter mitwandern — bei 1024 px Satz 460 → 517 und 16 → 13 Zeilen, bei
   1080 px 486 → 546 und 14 → 13. Wirkbreiten sind alle vier.

   Eigene Klasse, weil auf derselben Seite `#risiko` bereits
   `.split-kopf-fein` traegt (Fall 58). Kein `max-width: none` noetig: die
   `66ch`-Deckelung liegt bei 671 px und wird bei Satz 593 nicht wirksam.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-kopf-mittelweit {
    grid-template-columns: minmax(0, 0.8769fr) minmax(0, 1.1231fr);
  }
}

/* Vierzehnter Grad des Rastergriffs (Fall 67, 22.08.2026), DE-Startseite,
   Sektion `#praezision`, Textblock „Maschinelle Uebersetzung liefert heute …
   liefere die gepruefte Fassung." Das deutsche Gegenstueck zu Fall 29, wo
   ausdruecklich vermerkt war: „die deutsche Startseite bleibt auf 1fr/1fr".

   Uebermittelt war die Vorgabe, die rechte Kante ueber die Containerbreite zu
   begradigen und die Fuellgrade aller Zeilen zu maximieren; kein Zielwort.
   Begrenzt war nicht das Zeilenmass, sondern die SPALTE: das 1fr/1fr-Raster gab
   528 px Satz (51,9 ch), `.prose p { max-width: 66ch }` gaebe 671.
   Ausgangskante 1920 px, Fuellgrade der drei Absaetze:
   0,953/0,894/0,936/0,879/0,716 · 0,938/0,920/0,951/0,640 · 0,839/0,920/0,642.
   Versatz der vollen Zeilen 60 px, Fuellgrad-Mittel 0,9144, schwaechste volle
   Zeile 0,839.

   `__sweep` ueber Satz 500–700 px, Schritt 1, Viewport 1920 (Kopfspalte
   1056 − px, Spalt 96 px fest) — 201 Kandidaten, 22 Umbruchgestalten,
   Gegenprobe gegen `__karte`-Frischlaeufe bei 500/550/600/650/700 zeichengleich.
   Das Fenster ist NICHT monoton: zwischen Satz 543 und 618 wird die Kante
   durchweg schlechter als im Ist (Versatz 85–125 px), weil die Absaetze
   zwoelfzeilig bleiben und nur lockerer laufen. Erst ab Satz 648 fallen sie auf
   9 Zeilen. Gemessen (Satz / Versatz volle Zeilen / Fuellgrad-Mittel):
   528 (Ist) 60/0,9144 · 619 69/0,9573 · 648 77/0,9666 · 657 29/0,9747 ·
   663 31/0,9748 · 671 (66ch-Deckel) 31/0,9637.

   393 px Kopfspalte (Satz 663) ist vom Inhaber am gerenderten Bild gewaehlt,
   vorgelegt neben 399 px, 370 px (= `.split-schmalkopf`) und dem Ist als
   vollstaendige Seiten. Weiter als 671 px kommt der Satz nicht: der Boden der
   Kopfspalte liegt baumweit bei 370 px, das gaebe 686 — darueber deckelt `66ch`.

   Kein `max-width: none` noetig: 663 liegt unter dem Deckel 671. Eigene Klasse
   statt `.split-schmalkopf`, weil 370 px denselben Zeilenfall in einem 8 px
   breiteren Kasten liefert und damit ein niedrigeres Fuellgrad-Mittel (0,9637).
   Die H2 bleibt zweizeilig bei unveraenderter Hoehe 82 px und wird dichter
   (0,52/0,61 → 0,70/0,82). Die beiden `keep-together`-Spannen im Block bleiben
   stehen: bei 1280/1920 px wirken sie nicht mehr, bei 1024 px aendern sie den
   Zeilenfall weiter.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 62rem) {
  .split.split-kopf-schmal {
    grid-template-columns: 393px minmax(0, 1fr);
  }
}

/* Fuenfzehnter Grad des Rastergriffs (Fall 69, 22.08.2026), DE-Startseite,
   Sektion `#menschlich` — das deutsche Gegenstueck zu Fall 45 (`#human-review`,
   EN). Uebermittelt waren beide Fliessabsaetze („Fuer interne E-Mails …" bis
   „… des Dokuments.") mit der Vorgabe, die rechte Kante ueber die
   Containerbreite zu begradigen und die Fuellgrade aller Zeilen zu maximieren;
   kein Zielwort.

   Wortbindung war ausgeschlossen und die Ausschliessung gemessen: der Block
   stand bei 1fr/1fr auf Satz 528 px mit 418/471/502/444/498 ‖ 158 und
   528/487/414/494 ‖ 441 — Versatz der VOLLEN Zeilen 114 px ueber elf Zeilen.
   Kein haengendes Einzelwort, sondern eine zu schmale Spalte: `.prose p`
   duerfte bis 671 px (66ch), das Raster gab 528.

   `__sweep` 528–820 px in 1-px-Schritten, 293 Kandidaten, 33 Umbruchplateaus,
   Gegenprobe 4/4 zeichengleich, `schriftOffen` 0. Ueberlauf durchweg 0; nur
   590–593 px zeigen einen Bindestrichbruch und sind ausgeschlossen. Vier
   Kandidaten wurden als echte Probebaeume gebaut und dem Inhaber nach I-65 je
   als vollstaendige Seite vorgelegt (Satz / Versatz voll / schwaechste volle
   Zeile / Fuellgrad ueber alle Zeilen):

     K1  619 px  63 px  0,887  0,873   9 Zeilen, Zitatkasten bleibt zweizeilig
     K2  628 px  70 px  0,874  0,860   9 Zeilen, Zitatkasten bleibt zweizeilig
     K3  671 px  74 px  0,875  0,906   8 Zeilen, Zitatkasten wird dreizeilig
     K4  678 px  77 px  0,885  0,897   8 Zeilen, Zitatkasten wird dreizeilig

   Der Inhaber hat K2 = 628 px gewaehlt. Die Zahl allein haette K1 oder K3
   genannt; K2 haelt als einziger Kandidat beide Absaetze bei hohen Fuellgraden
   UND laesst den Zitatkasten links zweizeilig — die Sektion behaelt damit ihre
   Gestalt, waehrend die Kante schliesst.

   628 px sind 61,8 ch, im Optimum 45–75 und unter der WCAG-2.2-Grenze 80.
   Feste Textspalte statt fr-Verhaeltnis, weil der Spalt bei 1280 px 89,6 px
   und bei 1920 px 96 px misst — ein Verhaeltnis gaebe dort zwei verschiedene
   Satzbreiten, die feste Spalte gibt an beiden dieselbe. `max-width` auf
   `.prose p` ist nicht noetig: 628 < 671 px (66ch), der Deckel greift ohnehin
   nicht.

   `min-width: 75rem` wie bei den Spalt-Graden: bei 1024 und 1080 px ist der
   Wrap zu schmal (977 bzw. 1033 px) fuer eine feste 628er Textspalte. Beide
   Breiten bleiben dadurch zeichengleich zum Ist; Wirkbreiten sind 1280 und
   1920 px.

   Ergebnis 1920 px (Satz 528 → 628): Absatz 1 fuenf → vier Zeilen
   (600/549/608/612 ‖ 125), Absatz 2 fuenf → vier Zeilen (619/618/600 ‖ 529).
   Versatz der vollen Zeilen 114 → 70 px, Fuellgrad-Mittel voll 0,896 → 0,957,
   ueber alle Zeilen 0,836 → 0,860, Blockhoehe 290 → 238 px. Die H2 „KI
   uebersetzt in Sekunden …" faellt von drei auf zwei Zeilen (123 → 82 px),
   der Zitatkasten bleibt zweizeilig bei 423 px Breite. Sektion 738 → 644 px,
   Seite DE 8901 → 8807 px. Preis nach I-60: Absatz 1 endet auf einer
   Zweiwort-Zeile (125 px, 0,199) — kurze Schlusszeile zugunsten der rechten
   Kante, keine Einwortzeile.
   Nie flaechendeckend setzen — je Vorkommen ein uebermittelter Fall. */
@media (min-width: 75rem) {
  .split.split-satz-mittel {
    grid-template-columns: minmax(0, 1fr) 628px;
  }
}

/* A-2026-08-18-1 Fall 72 · DE-Startseite, Sektion „Ihr Uebersetzer": der
   Textblock stand im 1fr/1fr-Raster auf 528 px Satz und lief ueber zehn Zeilen
   mit Fuellgrad-Mittel 0,893 (schwaechste volle Zeile 0,830, Versatz 53 px).
   Verlangt war die Begradigung ueber die Containerbreite, nicht ueber
   Wortbindung.

   Gewaehlt aus einem Pixelsweep 500–860 px (`__sweep`, Schritt 1 px, Gegenprobe
   5/5 zeichengleich): 606 px ist innerhalb des Zeilenmass-Optimums 45–75 ch
   (hier 59,6 ch) in ALLEN drei Kennzahlen zugleich das Maximum — Fuellgrad
   Mittel 0,966, schwaechste volle Zeile 0,921, Versatz 45 px. Das globale
   Maximum liegt bei 795 px (0,980), verlaesst aber das Zeilenmass-Optimum
   (78,2 ch) und laesst beide Absaetze auf Stummelzeilen (0,345 / 0,434) enden.

   Kein `max-width` auf `.prose p` noetig: 606 < 671 px (66ch), der Deckel
   greift ohnehin nicht. Preis, dem Inhaber am 22.08.2026 an vier vollstaendigen
   Seiten vorgelegt und freigegeben: die H2 „Vom Recht zur Medizintechnik" faellt
   von einer auf zwei Zeilen. Eine Breite, die sie einzeilig liesse (Satz
   ≤ 546 px), begradigt nichts — das Beste dort ist 539 px mit Versatz 100 px
   und damit schlechter als der Ist. Das Portraet bleibt bei 216 px; erst ab
   725 px Satz schrumpft es.

   `min-width: 75rem` wie bei den uebrigen Satz-Graden: bei 1024 und 1080 px ist
   der Wrap zu schmal fuer eine feste 606er Textspalte.

   Wirkung nur auf der DE-Seite: das EN-Gegenstueck traegt `#translator` und
   bleibt unberuehrt. Nie flaechendeckend setzen — je Vorkommen ein
   uebermittelter Fall. */
@media (min-width: 75rem) {
  .split.split-satz-schmal {
    grid-template-columns: minmax(0, 1fr) 606px;
  }
}

/* Diese Regel muss die LETZTE Regel mit `box-shadow` bleiben. Sie stand früher
   ganz oben; dort schlugen `.button` und `.button-secondary` den weißen Ring
   mit ihrem eigenen `box-shadow` — gleiche Spezifität, spätere Quellposition.
   Auf dem dunklen `.cta`-Panel blieb dann nur die navyfarbene Outline übrig,
   1,00:1 gegen den Hintergrund: der Fokus war für Tastaturnutzer unsichtbar
   (WCAG 2.2 SC 1.4.11 verlangt 3:1). Zweifarbig, weil eine Farbe allein nicht
   auf hellen und dunklen Flächen zugleich trägt: weiß innen (0–3 px, aus dem
   Schatten), navy außen (3–6 px, die Outline liegt darüber). */
:focus-visible {
  outline: 3px solid var(--navy);
  outline-offset: 3px;
  box-shadow: 0 0 0 6px var(--white);
}

@media (prefers-reduced-motion: no-preference) {
  .hero .eyebrow,
  .hero h1,
  .hero .lead,
  .hero .actions,
  .hero-note {
    animation: rise 0.65s ease-out both;
  }

  .hero h1 {
    animation-delay: 0.08s;
  }

  .hero .lead {
    animation-delay: 0.16s;
  }

  .hero .actions {
    animation-delay: 0.24s;
  }

  .hero-note {
    animation-delay: 0.34s;
  }

  @supports (animation-timeline: view()) {
    .card,
    .steps li,
    .stat,
    .specimen,
    .statement {
      animation: rise both;
      animation-timeline: view();
      animation-range: entry 5% entry 45%;
    }
  }
}

@media (max-width: 54rem) {
  .header-row {
    min-height: auto;
    padding-block: 0.85rem;
    align-items: flex-start;
    flex-direction: column;
    gap: 0.65rem;
  }

  .site-header {
    position: static;
  }

  .header-row > nav {
    width: 100%;
    min-width: 0;
  }

  .nav-list {
    width: 100%;
    min-width: 0;
    overflow-x: visible;
    flex-wrap: wrap;
    gap: 0.3rem 0.2rem;
  }

  .nav-list > li {
    flex: 0 1 auto;
  }

  .hero-grid,
  .split,
  .contact-grid,
  .footer-grid {
    grid-template-columns: 1fr;
  }

  /* Match the specificity of the desktop special grids so mobile wins.
     Die Sonderraster stehen bewusst als EIGENE Regel, nicht in derselben
     Selektorliste wie die Grundregel: eine Selektorliste mit einem dem Parser
     unbekannten Selektor wird vollstaendig verworfen. Ohne :has()-Unterstuetzung
     ginge sonst auch das einspaltige Grundraster verloren. */
  .cards {
    grid-template-columns: 1fr;
  }

  .cards:has(> :nth-child(4):last-child) {
    grid-template-columns: 1fr;
  }

  .cards:has(> :nth-child(5):last-child) {
    grid-template-columns: 1fr;
  }

  /* Ohne diese Ruecksetzung behielten die fuenf Karten ihre Doppelspalten aus
     dem Sechserraster und stuenden auf dem Telefon dreispaltig bei 108 px. */
  .cards:has(> :nth-child(5):last-child) > .card,
  .cards:has(> :nth-child(5):last-child) > .card:nth-child(4) {
    grid-column: auto;
  }

  .steps {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .steps:has(> :nth-child(6):last-child) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .stats {
    grid-template-columns: 1fr;
  }

  .specimen-row {
    grid-template-columns: 1fr;
  }

  /* `justify-self: start` steht jetzt in der Grundregel. */
  .cta .button {
    white-space: normal;
  }

}

@media (max-width: 34rem) {
  .wrap {
    width: min(calc(100% - 1.25rem), var(--content));
  }

  .brand {
    font-size: 0.94rem;
  }

  .nav-list a {
    padding: 0.5rem 0.6rem;
    font-size: 0.86rem;
  }

  .footer-nav {
    grid-template-columns: 1fr;
  }

  .hero {
    padding-top: 3.5rem;
  }

  /* Lange Komposita ("Übersetzungsqualität", "Dokumentzusammenhang") passen
     sonst nicht auf ein Telefondisplay. Kleinere Grundgröße ist die eigentliche
     Lösung; break-word bleibt nur als Notnagel, weil hyphens: auto nicht in
     jedem Browser eine Trennung liefert. */
  h1,
  h2,
  h3 {
    overflow-wrap: break-word;
  }

  /* Getrennte Regeln, siehe Begruendung im 54rem-Block. */
  .steps {
    grid-template-columns: 1fr;
  }

  .steps:has(> :nth-child(6):last-child) {
    grid-template-columns: 1fr;
  }

  .footer-bottom {
    flex-direction: column;
  }
}

/* M-1-Endstand: Die Kennzahlen stehen bis 59rem einspaltig und danach im
   unveränderten Dreispaltenraster. Ihre Skala endet bei 44px; sie kommt der
   H1 optisch nahe, ist ihr aber weder nominal noch über alle Breiten exakt
   gleich. */

/* S4-M1-01 — Befund der Stufe 4, in Stufe 5 unabhängig reproduziert.
   Die frühere Zusage an dieser Stelle ("die Messreihen belegen in beiden
   Sprachen ohne Sonderregel unter 24rem keinen führenden Trenner") war
   falsch und ist gestrichen. Am gebauten Stand eröffnet auf der englischen
   Startseite der zweite Mittelpunkt bei 320 und 321px die zweite Zeile
   ("IFU · Labelling" / "· Regulatory"); ab 322px bricht sie sauber um, das
   Deutsche ist über 320-430px durchgehend unauffällig. Die Karte braucht
   dort genau die 1,6px je Seite, die diese Regel freigibt — 25,6 statt
   27,2px —, also 3,2px mehr Textkasten. Schriftgröße (32px), Kartenhöhen
   (150,73/212,31/238,70) und Außenmaße bleiben dabei unverändert; die Regel
   schaltet bei 323px wieder ab. Nachweis: 320-430px in beiden Sprachen,
   222/222 Fälle ohne führenden Trenner und ohne Überlauf.
   Prüfgrenze: Unterhalb des normativen Bereichs (280-319px) besteht der
   englische Defekt fort; die Regel verbessert ihn dort, behebt ihn nicht.
   320px ist die kleinste unterstützte Gerätebreite. */
@media (max-width: 20.125rem) {
  .stat {
    padding-inline: 1.6rem;
  }
}

/* Drei Spalten erst ab 59rem statt ab den urspruenglichen 54rem. Zwischen
   865 und 940 px sind drei Spalten so schmal, dass der Mittelwert selbst bei
   32 px dreizeilig umbricht oder den Trenner an den Zeilenanfang schiebt —
   bei 936 px trat genau das im Englischen noch auf. Spaltenbreiten, Abstand
   und Polsterung bleiben die urspruenglichen: Mit der optisch angeglichenen
   Schriftgroesse oben braucht es keine Sonderwerte mehr. */
@media (min-width: 59rem) {
  .stats {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
}

@media print {
  .site-header,
  .actions,
  .site-footer {
    display: none;
  }

  body {
    color: #000;
  }

  .section,
  .hero,
  .page-hero {
    padding: 2rem 0;
    background: #fff;
  }
}
