/*
  Fliesstext-Block fuer lange Redaktionstexte (Impressum, Datenschutz, Kampagnen-
  Firmenportrait, spaeter Blog-Artikel). Bewusst KEINE Karte/Box wie page-guide --
  ein Rechtstext ueber mehrere tausend Woerter liest sich auf einer schlichten,
  begrenzten Spalte besser als in einer abgesetzten Flaeche mit Schatten. Nur eine
  komfortable Lesebreite (~70ch) plus die Typo-Anbindung fuer klassenloses HTML
  aus inhaltHtml -- alles andere kommt aus elemente.css/system.css.
*/@layer komponenten{.rich-text{container-type:inline-size;max-width:44rem;margin-inline:auto;padding-inline:var(--container-padding);padding-block:var(--space-16);/* Sektions-Faerbung (Guido, 2026-08-19: "Ton-Rhythmus" ueber die Blockfolge):
       exakt derselbe data-thema-Mechanismus wie hero.css/page-guide.css, nur
       lokal auf rich-text angewendet -- ohne eigenen [data-thema]-Block hier,
       die Rollen-Ueberschreibung passiert zentral in marke-todayislife.css.
       Fuer die 44rem-Lesespalte (Impressum/Datenschutz, kein 'thema' gesetzt)
       bleibt das wirkungslos (--farbe-grund = Seiten-Default), erst
       data-darstellung="seite" (volle Breite) macht die Faerbung sichtbar. */background:var(--farbe-grund);color:var(--farbe-text)}/*
    "Seite"-Darstellung (TEIL D, Guido 2026-08-19) -- volle Container-Breite wie
    jeder andere Seiten-Abschnitt (Hero/Cards), aber OHNE den Zeitungsstil-Look:
    keine Serife, kein Papier-Hintergrund, keine Mehrspaltigkeit. Gedacht fuer
    Argumentations-/Prinzipien-Abschnitte auf Themenseiten (z.B. /de/ai), die zu
    echtem Fliesstext wurden, aber optisch zum Rest der Seite (dunkler Hero,
    moderne Sans-Serif-Typo) passen muessen -- die schmale 44rem-Lesespalte
    (Default, kein 'darstellung'-Feld gesetzt) wirkt dort mittig-schmal und
    deplatziert, der Zeitungsstil ('spalten' gesetzt) bringt ungewollt
    Serife+Papier mit, die zu einer normalen Themenseite nicht passen.

    Nutzt bewusst NICHT den 100vw-Ausbruchstrick von .rich-text[data-spalten]
    weiter unten -- der ist nur fuer den randlosen Papier-Hintergrund noetig.
    Hier reicht der normale --container-max-Rahmen, identisch zum etablierten
    Muster von .hero__container (hero.css): max-width:var(--container-max) +
    margin-inline:auto statt eines 100vw-Ausbruchs ist der einfachere Weg fuer
    eine "normale" volle Breite ohne Hintergrund-Bleed.

    Reihenfolge im Stylesheet bewusst VOR .rich-text[data-spalten]: sollte
    ausnahmsweise beides gesetzt sein (Fehlbedienung), gewinnt bei gleicher
    Selektor-Spezifitaet die spaeter stehende Regel -- 'spalten' soll Vorrang
    behalten (siehe rich-text.schema.json, Feld 'darstellung').
  */.rich-text[data-darstellung="seite"]{/* Vollbreite-Flaeche-Fix (Guido 2026-08-20): 'darstellung="seite"' setzt in
       site-lib.js#renderKomponente jetzt zusaetzlich 'istVollbreite' -> die
       .vollbreite-flaeche-Utility (design/base/utilities.css) uebernimmt
       max-width/width auf DIESEM Element (Layer-Vorrang schlaegt die vorherige,
       hier frueher stehende max-width:var(--container-max)-Regel, die die
       Faerbung faelschlich auf Content-Breite geklemmt hatte -- Bug gemeldet
       von Guido). padding-inline muss trotzdem hier auf 0, sonst bliebe die
       Aussen-Section trotz voller Breite optisch eingerueckt (doppeltes
       Padding: einmal hier von der generischen .rich-text-Basisregel oben,
       einmal von .vollbreite-flaeche__inhalt im Markup). */padding-inline:0;background:var(--farbe-grund)}/*
    Inhaltsverzeichnis (Aufgabe 1, Guido 2026-08-19) braucht mehr Breite als die
    44rem-Lesespalte (Default oben): 14rem TOC-Spalte + --space-10 Gap + eine noch
    komfortabel lesbare Fliesstextspalte passen nicht in 44rem. Bug gefunden beim
    Verifizieren (Playwright, 1440px-Viewport): ohne diesen Override blieb
    .rich-text bei 44rem (704px) -- unter der 56rem-Schwelle der @container-Regel
    weiter unten, die 2-Spalten-Sidebar griff deshalb NIE, unabhaengig von der
    Fensterbreite. 64rem ist bewusst kleiner als --container-max (96rem, Hero/Cards-
    Breite) -- ein Rechtstext-Block soll nicht auf die volle Seitenbreite ausufern,
    nur genug Raum fuer TOC+Lesespalte nebeneinander bekommen. */.rich-text[data-inhaltsverzeichnis]{max-width:64rem}/* Gleiches Kantenraster wie Hero/Card-Sections (Guido 2026-08-20, Screenshot-
     belegt): vollbreite rich-text-Bloecke duerfen ihren Inhalt nicht nochmal
     intern zentrieren, sonst beginnt Text sichtbar spaeter als in den
     Nachbarsektionen. Lesebreite bleibt gedeckelt, aber LINKS ausgerichtet --
     dieselbe Startkante wie die uebrigen Komponenten, kein zusaetzlicher
     margin-inline:auto-Versatz mehr. */.rich-text[data-darstellung="seite"] .rich-text__kopf,.rich-text[data-darstellung="seite"] .rich-text__inhalt{max-width:min(var(--lese-spalte-1), 100%);margin-inline:0}.rich-text[data-darstellung="seite"] .rich-text__inhalt p{max-width:none}.rich-text[data-darstellung="seite"] .rich-text__hauptbereich{width:100%}/*
    Zweispaltige Themen-/Definitionsseiten (Briefing Langtext 2026-10-13, Stufe 1):
    render/site-lib.js (seitenBloeckeHtml) zerlegt lange 'seite'-Texte in
    .rich-text__abschnitt-Bloecke (je H2, lange Abschnitte an Absatzgrenzen) und setzt
    data-seiten-spalten. Gleiche Mechanik wie der Blog (Multicol je Abschnitt, kein
    Springen beim Scrollen, DOM-Reihenfolge unveraendert), aber Sans, kein Papier.
    Schwelle 64rem bezieht sich auf die INHALTSbreite: .rich-text selbst ist bei
    'seite' vollbreit, deshalb eigener benannter Container am Hauptbereich.
    Rechtstexte (kein data-darstellung) sind nie betroffen.
  */.rich-text[data-darstellung="seite"] .rich-text__hauptbereich{container:rt-text/inline-size}.rich-text[data-seiten-spalten] .rich-text__inhalt{max-width:calc(2 * var(--lese-spalte-2-weit) + var(--lese-gutter));gap:0;hyphens:auto}.rich-text[data-seiten-spalten] .rich-text__intro,.rich-text[data-seiten-spalten] .rich-text__abschnitt{max-width:var(--lese-spalte-1)}.rich-text[data-seiten-spalten] .rich-text__intro{margin-block-end:var(--space-8)}.rich-text[data-seiten-spalten] .rich-text__abschnitt{column-gap:var(--lese-gutter);column-rule:1px solid var(--farbe-linie)}.rich-text[data-seiten-spalten] .rich-text__abschnitt + .rich-text__abschnitt{margin-block-start:var(--space-8);padding-block-start:var(--space-8);border-block-start:1px solid var(--farbe-linie)}.rich-text[data-seiten-spalten] .rich-text__abschnitt--fortsetzung{margin-block-start:var(--space-6);padding-block-start:0;border-block-start:none}.rich-text[data-seiten-spalten] .rich-text__abschnitt > *{margin-block:0 var(--space-5);break-inside:avoid-column}.rich-text[data-seiten-spalten] .rich-text__abschnitt > *:last-child{margin-block-end:0}.rich-text[data-seiten-spalten] .rich-text__abschnitt > h2,.rich-text[data-seiten-spalten] .rich-text__abschnitt > h3{break-after:avoid-column;hyphens:manual;text-wrap:balance}.rich-text[data-seiten-spalten] .rich-text__abschnitt > h3{margin-block-start:var(--space-3)}.rich-text[data-seiten-spalten] .rich-text__abschnitt > :first-child{margin-block-start:0}/* Absaetze duerfen die Spalte wechseln (sonst entstehen ungleich hohe Spalten),
     aber nie mit weniger als 3 Zeilen auf einer Seite. */.rich-text[data-seiten-spalten] .rich-text__abschnitt > p{max-width:none;break-inside:auto;orphans:3;widows:3}.rich-text[data-seiten-spalten] .rich-text__abschnitt li{break-inside:avoid-column}@container rt-text (min-width: 64rem){.rich-text[data-seiten-spalten] .rich-text__abschnitt{columns:2;max-width:calc(2 * var(--lese-spalte-2-weit) + var(--lese-gutter))}.rich-text[data-seiten-spalten] .rich-text__abschnitt > .rich-text__begriffe,.rich-text[data-seiten-spalten] .rich-text__abschnitt > figure,.rich-text[data-seiten-spalten] .rich-text__abschnitt > table,.rich-text[data-seiten-spalten] .rich-text__abschnitt > .rich-text__bild-vollbreit{column-span:all}/* Einleitung (Text vor der ersten H2): erster Absatz als Lead ueber beide Spalten,
       weitere Einleitungsabsaetze laufen danach in zwei Spalten wie die Abschnitte. */.rich-text[data-seiten-spalten] .rich-text__intro{columns:2;column-gap:var(--lese-gutter);max-width:calc(2 * var(--lese-spalte-2-weit) + var(--lese-gutter))}.rich-text[data-seiten-spalten] .rich-text__intro > p:first-child{column-span:all;max-width:none;font-size:var(--text-lg);line-height:var(--leading-normal);text-wrap:pretty}.rich-text[data-seiten-spalten] .rich-text__intro > p{break-inside:auto;orphans:3;widows:3;max-width:none}}.rich-text[data-seiten-spalten] .rich-text__intro > *{margin-block:0 var(--space-5)}.rich-text[data-seiten-spalten] .rich-text__intro > *:last-child{margin-block-end:0}/*
    Zeitungsstil (TEIL B, Guido 2026-08-19) -- nur aktiv, wenn 'spalten' gesetzt
    ist (Blog-Artikel). Volle Container-Breite wie jede andere Seite (Guido-
    Nachtrag: KEINE schmale zentrierte Lesespalte), Lese-Serife statt Sans,
    warmer Papier-Hintergrund NUR fuer diesen Block (nicht sitebreit). Spalten
    selbst kommen erst innerhalb von .rich-text__inhalt (siehe unten), damit Kopf
    (Titel/Meta) ueber die volle Breite bleibt und nicht mitspaltet.
  *//*
    Nachtrag (TEIL B, Guido 2026-08-19): Papier-Hintergrund EXPLIZIT randlos
    ueber die volle Bildschirmbreite (nicht mehr nur --container-max) --
    klassischer Ausbruch aus dem zentrierten Elternflow per width:100vw +
    negatives Zentrierungs-margin. padding-inline haelt den eigentlichen
    Inhalt (Kopf/Meta/Spalten, ueber die direkten Kind-Elemente hier drunter)
    trotzdem auf --container-max begrenzt und zentriert -- kein zusaetzlicher
    Wrapper im Markup noetig, da .rich-text selbst schon alle Kinder direkt
    umschliesst. border-radius/box-shadow ergeben bei echter Bildschirmbreite
    keinen Sinn mehr (keine sichtbaren Ecken an den Bildschirmraendern) --
    entfernt.
  */.rich-text[data-spalten]{width:100vw;max-width:100vw;margin-inline:calc(50% - 50vw);/* max() statt reinem calc(): sobald --container-max (96rem) breiter ist
       als der Viewport (z.B. 1440px-Laptop -- Alltagsfall, kein Exot), wird
       (100vw - container-max)/2 negativ. calc() klemmt negative padding-
       Werte per Spec auf 0 -- damit stand der Inhalt randlos am
       Bildschirmrand (Bug Guido 2026-08-19), statt auf den normalen
       --container-padding zurueckzufallen. max() erzwingt --container-padding
       als Untergrenze, identisch zum Verhalten von max-width+margin-inline:
       auto bei jedem anderen .site-block. */padding-inline:max(var(--container-padding), calc((100vw - var(--container-max)) / 2 + var(--container-padding)));background:var(--farbe-papier);border-radius:0;box-shadow:none}.rich-text[data-spalten] .rich-text__kopf{max-width:65ch;margin-inline:auto}/* Nachschaerfung (Guido 2026-08-19, Screenshot-belegt): .rich-text__ki-
     hinweis stand bisher in derselben Regel wie __kopf (max-width:65ch +
     margin-inline:auto) -- dadurch landete der Hinweis in einer schmalen,
     ZENTRIERTEN Box, text-align:right drehte den Text darin nur intern nach
     rechts, ohne je den echten rechten Seitenrand zu erreichen. Fix: eigene
     Regel OHNE Breitenbegrenzung -- volle verfuegbare Breite, text-align
     schiebt den Text dadurch tatsaechlich an den rechten Rand. */.rich-text[data-spalten] .rich-text__ki-hinweis{max-width:none}.rich-text[data-spalten] .rich-text__inhalt{/* display:block zwingend noetig (Bug Guido 2026-08-19): die generische
       Regel .rich-text__inhalt weiter unten setzt display:flex; flex-
       direction:column -- ein Flex-Container ignoriert 'columns' komplett
       (Multicol gilt nur fuer Block-Container). Ohne dieses Reset stand
       columnCount:2 zwar im Computed Style (per Cascade-Spezifitaet
       gewonnen), lief aber visuell nie sichtbar in zwei Spalten -- per
       vollstaendigem Full-Page-Screenshot + Bounding-Box-Vergleich zweier
       Absaetze verifiziert, nicht nur getComputedStyle() (das allein hatte
       den Fehler in einer frueheren Runde verdeckt). Der Flex-'gap' entfaellt
       damit fuer den Abstand zwischen Absaetzen -- ersetzt durch
       margin-block-end auf den Kindern (siehe unten). Die eigentlichen
       'columns'-Eigenschaften sitzen NICHT mehr hier, sondern auf
       .rich-text__abschnitt (siehe Nachtrag Guido 2026-08-19 unten) -- damit
       jeder Abschnitt seinen EIGENEN Multicol-Kontext hat und nicht der
       gesamte Artikel als eine einzige, kilometerlange Spalte laeuft. */display:block;font-family:var(--font-serif-lesend);line-height:var(--leading-relaxed);hyphens:auto}/* Spalten-Reset pro Abschnitt (Nachtrag Guido 2026-08-19): render/site-lib.js
     (spalteInhaltHtml) zerlegt inhaltHtml VOR dem Rendern an jeder Top-Level-
     <h2> in eigene Abschnitte -- der Text VOR der ersten <h2> landet in
     .rich-text__intro (immer einspaltig, wie ein Zeitungs-Lead-Absatz), jeder
     Abschnitt AB einer <h2> in einem eigenen .rich-text__abschnitt. Jeder
     .rich-text__abschnitt ist ein eigener Multicol-Container -- das laesst den
     Browser die Spaltenhoehe PRO Abschnitt neu berechnen (column-fill:balance,
     Default), statt eine einzige Riesenspalte ueber den ganzen ~2500-Woerter-
     Artikel zu ziehen. Kein JS noetig, reiner CSS-Container-Reset durch echte
     Elementgrenzen im Markup. */.rich-text__intro{font-size:var(--lese-schrift);font-family:var(--font-serif-lesend);line-height:var(--leading-relaxed);hyphens:auto}.rich-text[data-spalten] .rich-text__abschnitt{/* column-fill: balance (Korrektur Guido 2026-08-19, ersetzt fruehere
       "auto"-Annahme): "auto" ist NICHT das CSS-Standardverhalten -- das ist
       "balance". "auto" fuellt Spalte 1 sequenziell, aber OHNE eine explizite
       Hoehe auf dem Multicol-Container gibt es fuer den Browser keinen
       Hoehen-Trigger, um in Spalte 2/3 zu springen. "balance" berechnet die
       Spaltenhoehe automatisch aus dem Inhalt DIESES Abschnitts und verteilt
       ihn gleichmaessig -- kein abgeschnittener Text, keine endlose Spalte.
       Deshalb keine explizite column-fill-Deklaration mehr noetig (Default). */column-gap:var(--space-10);column-rule:1px solid var(--farbe-linie);/* Default: 1 Spalte -- Container Query unten schaltet ab 40rem echte
       Breite hoch. Damit faellt jede Spaltenzahl auf schmalem Viewport
       automatisch auf 1 zurueck, unabhaengig vom konfigurierten Wert. */columns:1}/* Schwelle 64rem statt 40rem (Briefing Langtext 2026-10-13): bei 768 px waren die
     Spalten nur 38 Zeichen breit. Darunter 1 Spalte in Lesebreite, darueber 2 Spalten
     mit gedeckelter Spaltenbreite (--lese-spalte-2), sonst laeuft die Zeile auf
     breiten Schirmen auf > 80 Zeichen. */.rich-text[data-spalten] .rich-text__abschnitt{max-width:var(--lese-spalte-1)}@container (min-width: 64rem){.rich-text[data-spalten="2"] .rich-text__abschnitt{columns:2;column-gap:var(--lese-gutter);max-width:calc(2 * var(--lese-spalte-2) + var(--lese-gutter))}.rich-text[data-spalten="3"] .rich-text__abschnitt{columns:3;max-width:none}}/* Blog-Lead: Zeilenlaenge begrenzen (vorher 150-190 Zeichen), erster Absatz groesser. */.rich-text[data-spalten] .rich-text__intro{max-width:38rem}.rich-text[data-spalten] .rich-text__inhalt > .rich-text__intro:first-child > p:first-child{font-size:calc(var(--lese-schrift) * 1.2);line-height:var(--leading-normal);text-wrap:pretty}/* Ueberschriften/Listen/Zitate/Tabellen sollen innerhalb einer Spalte nicht
     mitten drin umbrechen -- sonst reisst der Zeitungslook auseinander. */.rich-text[data-spalten] .rich-text__abschnitt > *{break-inside:avoid-column}/* Waisen-Ueberschrift-Fix (Achilles 2026-08-19, Playwright-belegt an
     mehreren Breakpoints 700-1920px, "Der Raum veraendert sich..."/"So
     funktioniert Erkenntnis" im Assoziation-Artikel): ein .rich-text__abschnitt
     kann mehrere <h2>-Abschnitte zu EINEM Multicol-Block zusammenfassen (siehe
     spalteInhaltHtml() in render/site-lib.js). Der Browser balanciert die
     Spaltenhoehe dieses Blocks selbst (column-fill:balance) und darf den
     Spaltenumbruch dabei genau zwischen eine <h2> und ihren ersten Absatz
     legen -- 'break-inside:avoid-column' oben schuetzt nur JEDES Element
     einzeln, nicht die Fuge ZWISCHEN zwei aufeinanderfolgenden Elementen.
     Das ist reines Browser-Rendering (haengt von echter, zur Build-Zeit
     unbekannter Pixelhoehe ab) -- die JS-Blockgrenzen in spalteInhaltHtml
     koennen das nicht verhindern, nur diese CSS-Eigenschaft kann es: sie
     weist den Balance-Algorithmus an, direkt NACH einer Ueberschrift keinen
     Spaltenumbruch zu platzieren, wenn es sich vermeiden laesst. */.rich-text[data-spalten] .rich-text__abschnitt > h2,.rich-text[data-spalten] .rich-text__abschnitt > h3{break-after:avoid-column;/* Oberkanten der Spalten (Vera 7): ein oberer Rand wird am Spaltenanfang nicht
       abgeschnitten und versetzte die zweite Spalte um ca. 25 px. Der Abstand vor einer
       Ueberschrift steht stattdessen am Vorgaenger (naechste Regel). */margin-block-start:0}.rich-text[data-spalten] .rich-text__abschnitt > :has(+ h2),.rich-text[data-spalten] .rich-text__abschnitt > :has(+ h3){margin-block-end:var(--space-6)}/* Abstand zwischen Elementen -- sowohl INNERHALB eines Abschnitts/der Intro
     (Ersatz fuer den Flex-'gap' der generischen Regel, siehe oben) als auch
     ZWISCHEN Intro/Abschnitten selbst (.rich-text__inhalt > *). */.rich-text[data-spalten] .rich-text__inhalt > *,.rich-text[data-spalten] .rich-text__intro > *,.rich-text[data-spalten] .rich-text__abschnitt > *{margin-block-end:var(--space-5)}.rich-text[data-spalten] .rich-text__inhalt > *:last-child,.rich-text[data-spalten] .rich-text__intro > *:last-child,.rich-text[data-spalten] .rich-text__abschnitt > *:last-child{margin-block-end:0}/* Zierlinie am Block-Uebergang (Guido 2026-08-19, Screenshot-Referenz):
     wenn zwei .rich-text__abschnitt DIREKT aufeinanderfolgen (kein
     einspaltiger Intro-/Atempause-Block dazwischen -- der trennt bereits
     optisch genug, siehe spalteInhaltHtml()), bekommt der zweite Block eine
     duenne horizontale Linie oben, ueber die volle Breite BEIDER Spalten
     (nicht nur eine Spalte -- deshalb border-block-start auf dem Abschnitt
     selbst, nicht auf einer Spalte/Kind-Element). Selbe Rolle wie die
     vertikale column-rule zwischen den Spalten (--farbe-linie), damit es wie
     dieselbe Zier-Familie wirkt statt eine zweite Linienfarbe einzufuehren. */.rich-text[data-spalten] .rich-text__abschnitt + .rich-text__abschnitt{margin-block-start:var(--space-10);padding-block-start:var(--space-10);border-block-start:1px solid var(--farbe-linie)}/* Bug-Fix (Guido 2026-08-19, Screenshot-belegt): die generische Regel
     '.rich-text__inhalt p { max-width: 65ch }' weiter unten ist fuer die
     schmale Rechtstext-Lesespalte (Impressum/Datenschutz, KEIN data-spalten)
     gedacht -- in Zeitungsstil-Artikeln griff sie aber AUCH im 1-spaltigen
     Intro-Block (der volle --container-max-Breite nutzen soll, siehe
     .rich-text[data-spalten] oben) und kappte ihn versehentlich auf 65
     Zeichen, mit riesiger Leerflaeche rechts als Folge. Im 2/3-spaltigen
     .rich-text__abschnitt greift dieselbe Kappung ebenfalls unnoetig (die
     Spaltenbreite selbst ist ohnehin schon schmaler als 65ch). Beide Faelle
     hier gezielt zurueckgesetzt -- die einspaltige Rechtstext-Lesespalte
     (kein data-spalten) bleibt unveraendert bei 65ch. */.rich-text[data-spalten] .rich-text__intro p,.rich-text[data-spalten] .rich-text__intro blockquote,.rich-text[data-spalten] .rich-text__abschnitt p,.rich-text[data-spalten] .rich-text__abschnitt blockquote{max-width:none}/* Spalten-Sprung-Icon (Guido 2026-08-19, siehe rich-text.js fuer die
     Positionierungs-Logik/Begruendung). display:block + margin-inline-
     start:auto + width:fit-content statt absoluter Positionierung --
     rechtsbuendig, robust gegenueber jeder Textmenge, ohne Zeilenhoehen-
     Berechnung gegen echten Fliesstext. Erbt break-inside:avoid-column und
     margin-block-end bereits ueber die bestehende
     '.rich-text__abschnitt > *'-Regel oben (rich-text.js haengt es als
     direktes Kind von .rich-text__abschnitt ein). */.rich-text__spalten-sprung{display:block;width:fit-content;margin-inline-start:auto;padding:var(--space-1);color:var(--farbe-text-dezent);background:none;border:none;border-radius:var(--radius-full);cursor:pointer;transition:color 0.15s ease,background-color 0.15s ease}.rich-text__spalten-sprung:hover,.rich-text__spalten-sprung:focus-visible{color:var(--farbe-akzent);background:var(--farbe-flaeche)}.rich-text__spalten-sprung svg{display:block;width:var(--space-4);height:var(--space-4)}.rich-text__ki-hinweis{margin-block-start:var(--space-10);padding-block-start:var(--space-4);border-block-start:1px solid var(--farbe-linie);/* Nachtrag Guido 2026-08-19: deutlich kleiner (--text-xs, kleinster
       vorhandener Type-Scale-Schritt) und rechtsbuendig statt der bisherigen
       linksbuendigen --text-sm-Darstellung -- dezenter KI-Transparenz-Hinweis,
       kein prominentes Fliesstext-Element. Zweite Nachschaerfung (Guido,
       Screenshot-belegt): --text-xs bleibt -- ist bereits der kleinste
       Schritt in system.css, kein noch kleinerer Token vorhanden (geprueft).
       Das "zu gross/zentriert"-Problem lag an der Breitenbegrenzung weiter
       oben (max-width:65ch + margin-inline:auto), nicht an der Schriftgroesse
       -- siehe Fix bei .rich-text[data-spalten] .rich-text__ki-hinweis. */font-size:var(--text-xs);text-align:right;color:var(--farbe-text-dezent);line-height:var(--leading-relaxed)}/* Dritte Nachschaerfung (Guido 2026-08-19, Screenshot-belegt): voller
     Container-Breite lief der Hinweistext nur auf 2 (zu breite) Zeilen --
     enger fassen, damit er auf 3 Zeilen umbricht. margin-inline-start:auto
     (statt margin-inline:auto) haelt die Box weiterhin an der RECHTEN Kante
     verankert (text-align:right bleibt fuer den Text selbst erhalten) --
     nur ihre eigene Breite schrumpft, sie wandert nicht in die Mitte. */.rich-text[data-spalten] .rich-text__ki-hinweis{/* Zeichenbreite statt rem: bei 13 px waren 38rem = 94 Zeichen je Zeile (Vera 1), jetzt ca. 65. */max-width:56ch;margin-inline-start:auto}/* Vorheriger/naechster-Artikel-Navigation + Lesezeit (Guido 2026-08-19,
     zwei Nachschaerfungen) -- nur auf echten Blog-Artikeln vorhanden
     (render/site-lib.js liefert 'lesezeit' nur dort, siehe
     baueArtikelNavigation()), oben UND unten im Artikel mit demselben
     Grid-Layout. Beide Instanzen sitzen FLUSH an ihrer jeweiligen Nachbar-
     Flaeche (oben direkt am Hero, unten direkt am Footer -- keine Box mehr,
     keine runden Ecken, kein eigener Hintergrund) und grenzen sich nur ueber
     eine duenne Trennlinie UEBER DIE GESAMTE BILDSCHIRMBREITE ab (nicht nur
     Container-Breite) -- per Pseudo-Element mit demselben 100vw-Ausbruch-
     Trick wie .rich-text[data-spalten] selbst (siehe oben), damit der
     eigentliche Inhalt (Pfeile/Titel/Lesezeit) trotzdem auf Container-Breite
     bleibt und nicht bis an den Bildschirmrand laeuft. Die Linie sitzt
     jeweils auf der Seite, die zum Fliesstext hin zeigt (oben: unterhalb der
     Leiste: unten: oberhalb der Leiste) -- symmetrisch gespiegelt. */.rich-text[data-spalten] .rich-text__artikel-nav{position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--space-4);padding-block:var(--space-4);font-size:var(--text-sm)}.rich-text[data-spalten] .rich-text__artikel-nav--oben{margin-block:0 var(--space-8)}.rich-text[data-spalten] .rich-text__artikel-nav--oben::after{content:'';position:absolute;inset-block-end:0;inset-inline-start:50%;width:100vw;margin-inline-start:-50vw;border-block-end:1px solid var(--farbe-linie)}.rich-text[data-spalten] .rich-text__artikel-nav--unten{margin-block:var(--space-8) 0}.rich-text[data-spalten] .rich-text__artikel-nav--unten::after{content:'';position:absolute;inset-block-start:0;inset-inline-start:50%;width:100vw;margin-inline-start:-50vw;border-block-start:1px solid var(--farbe-linie)}/* Oben/unten wirklich FLUSH gegen Hero/Footer: die generische .rich-text-
     Regel (ganz oben in dieser Datei) setzt padding-block: var(--space-16)
     auf dem gesamten Container -- ohne Override bliebe trotz margin:0 auf
     der jeweiligen Nav-Leiste selbst noch dieser Innenabstand als Luecke
     stehen (beim ersten Versuch genau so beobachtet: 64px Luecke zum Hero =
     exakt --space-16). :has() greift NUR, wenn die jeweilige Nav-Leiste
     tatsaechlich vorhanden ist (nicht auf Impressum/Datenschutz etc.). */.rich-text[data-spalten]:has(.rich-text__artikel-nav--oben){padding-block-start:0}.rich-text[data-spalten]:has(.rich-text__artikel-nav--unten){padding-block-end:0}.rich-text__artikel-nav-link{display:flex;align-items:center;gap:var(--space-2);min-width:0;color:var(--farbe-text);text-decoration:none}.rich-text__artikel-nav-link:hover .rich-text__artikel-nav-titel{text-decoration:underline}.rich-text__artikel-nav-link--zurueck{grid-column:1;justify-self:start}.rich-text__artikel-nav-link--weiter{grid-column:3;justify-self:end;text-align:right}.rich-text__artikel-nav-titel{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;/* Verhindert, dass ein langer Nachbar-Titel die mittige Lesezeit
       verdraengt -- Grid-Spalte selbst ist 1fr (elastisch), der Titel
       innerhalb bricht stattdessen mit Ellipsis ab. */max-width:22ch}.rich-text__artikel-nav-pfeil{flex-shrink:0;color:var(--farbe-akzent);font-weight:var(--weight-bold)}.rich-text__artikel-nav-lesezeit{grid-column:2;justify-self:center;color:var(--farbe-text-dezent);white-space:nowrap}/* Schmaler Viewport: Grid-Spalten haben keinen Platz mehr fuer drei
     Elemente nebeneinander -- stapeln, in Lesereihenfolge (zurueck, Lesezeit,
     weiter). Container Query statt Media Query, konsistent mit dem
     bestehenden Spalten-Umschalter oben (@container (min-width: 40rem)). */@container (max-width: 39.99rem){.rich-text[data-spalten] .rich-text__artikel-nav{grid-template-columns:1fr;justify-items:start;gap:var(--space-3)}.rich-text__artikel-nav-link--zurueck{grid-column:1;order:1}.rich-text__artikel-nav-lesezeit{grid-column:1;justify-self:start;order:2}.rich-text__artikel-nav-link--weiter{grid-column:1;justify-self:start;text-align:left;order:3}}.rich-text__kopf{margin-block-end:var(--space-10)}/*
    Inhaltsverzeichnis (Aufgabe 1, Guido 2026-08-19) -- fuer lange Rechtstexte
    (Impressum, Datenschutz) mit vielen Abschnitten. ZWEI Markup-Varianten
    statt einer per Container-Query umgestylten <details> (siehe
    rich-text.mustache fuer die ausfuehrliche Begruendung): ein Playwright-
    Check zeigte, dass moderne Chromium-Versionen den geschlossenen
    details-Inhalt intern per content-visibility-Unterdrueckung verstecken,
    NICHT mehr (nur) per stylebarem 'display:none' -- ein CSS-Override auf
    den Kindern (auch mit zusaetzlichem content-visibility:visible) blieb
    wirkungslos, die Kinder blieben trotz korrektem computed display:block
    unsichtbar. Robuster Ersatz: '.rich-text__toc--breit' (normales <nav>,
    immer im DOM sichtbar) fuer breite Container, '.rich-text__toc--schmal'
    (echte <details>, nativ kollabiert) fuer schmale -- beide per
    Container-Query gegenseitig ein-/ausgeblendet, reines
    display:none/block-Umschalten auf zwei fertigen Elementen statt eines
    Kampfs gegen details-interne Rendering-Unterdrueckung.

    Grid-Aufteilung: NICHT auf .rich-text selbst (das ist der Size-Query-
    Container -- ein Container darf per Spec seine EIGENE Groesse/sein
    eigenes Boxmodell nicht ueber die eigene Container Query aendern, sonst
    entstuende ein Zirkelbezug; 'display:grid' auf dem Container selbst wird
    von Browsern deshalb schlicht ignoriert, beobachtet per Playwright-
    Computed-Style-Check 2026-08-19: gridTemplateColumns blieb 'none' trotz
    zutreffender Query). Deshalb ein eigener Wrapper .rich-text__hauptbereich
    (Kind von .rich-text, siehe rich-text.mustache) wird zum 2-Spalten-Grid --
    exakt derselbe sichere Musterschutz wie beim bestehenden Zeitungsstil
    weiter oben, wo 'columns' ebenfalls nur auf .rich-text__abschnitt (Kind),
    nie auf .rich-text[data-spalten] selbst gesetzt wird. .rich-text__kopf
    liegt VOR .rich-text__hauptbereich im Markup und bleibt dadurch automatisch
    ueber die volle Breite, ganz ohne grid-column-Sonderregel.
  */.rich-text__toc{margin-block-end:var(--space-8);border:1px solid var(--farbe-linie);border-radius:var(--radius-lg);background:var(--farbe-flaeche)}/* Default (schmaler Container): nur die schmale details-Variante zeigen,
     die breite <nav>-Variante bleibt unsichtbar im DOM. */.rich-text__toc--breit{display:none}.rich-text__toc-titel{margin:0;padding:var(--space-3) var(--space-4);font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--farbe-text);list-style:none}.rich-text__toc--schmal .rich-text__toc-titel{cursor:pointer}.rich-text__toc-titel::-webkit-details-marker{display:none}.rich-text__toc--schmal .rich-text__toc-titel::after{content:'+';float:inline-end;color:var(--farbe-text-dezent)}.rich-text__toc--schmal[open] .rich-text__toc-titel::after{content:'−'}.rich-text__toc-liste{display:flex;flex-direction:column;gap:0;margin:0;padding:0 var(--space-4) var(--space-4);list-style:none}.rich-text__toc--schmal .rich-text__toc-liste a{display:flex;align-items:center;min-height:2.75rem/* Touch-Ziel (Lena M5) */}.rich-text__toc-liste a{font-size:var(--text-sm);color:var(--farbe-text-gedaempft);text-decoration:none}.rich-text__toc-liste a:hover,.rich-text__toc-liste a:focus-visible{color:var(--farbe-akzent);text-decoration:underline}/* Ab hier: genug Platz fuer TOC-Spalte + Lesespalte nebeneinander. Schwelle
     bewusst groesser als der 40rem-Umbruch bei 'spalten' -- 14rem TOC +
     44rem Lesespalte + Gap braucht deutlich mehr Breite, sonst wuerde die
     Lesespalte auf mittleren Breiten unkomfortabel schmal gequetscht. */@container (min-width: 56rem){.rich-text[data-inhaltsverzeichnis] .rich-text__hauptbereich{display:grid;grid-template-columns:14rem 1fr;gap:var(--space-10);align-items:start}.rich-text__toc--breit{display:block;position:sticky;inset-block-start:var(--space-6);max-height:calc(100vh - var(--space-12));overflow-y:auto}.rich-text__toc--schmal{display:none}}.rich-text__titel{/* h1 in elemente.css ist fuer Hero-Groessen (--text-5xl) gedacht -- hier
       eine Nummer kleiner, ein Rechtstext braucht keine Bruell-Ueberschrift. */font-size:var(--text-4xl)}.rich-text__meta{margin-block-start:var(--space-3);font-size:var(--text-sm);color:var(--farbe-text-dezent)}/* ---- Typografie fuer generisches, klassenloses HTML aus inhaltHtml ---- */.rich-text__inhalt{display:flex;flex-direction:column;gap:var(--space-5);font-size:var(--lese-schrift);line-height:var(--lese-zeilenhoehe)}.rich-text__inhalt h2{font-size:var(--text-2xl);margin-block-start:var(--space-6)}.rich-text__inhalt h3{font-size:var(--text-xl);margin-block-start:var(--space-2)}.rich-text__inhalt p{max-width:var(--lese-spalte-recht);text-wrap:pretty}.rich-text__inhalt strong{color:var(--farbe-text);font-weight:var(--weight-semibold)}.rich-text__inhalt a{text-decoration:underline;text-underline-offset:0.15em}.rich-text__inhalt ul,.rich-text__inhalt ol{max-width:var(--lese-spalte-recht);display:flex;flex-direction:column;gap:var(--space-2);padding-inline-start:var(--space-6);color:var(--farbe-text-gedaempft);line-height:var(--leading-relaxed)}.rich-text__inhalt ul{list-style:disc}.rich-text__inhalt ol{list-style:decimal}.rich-text__inhalt li::marker{color:var(--farbe-akzent)}/* Code-Bloecke (Rust/Pseudocode in technischen Blog-Artikeln) -- einfache
     Monospace-Abgrenzung vom Fliesstext, kein Syntax-Highlighting noetig. */.rich-text__inhalt pre{max-width:100%;overflow-x:auto;padding:var(--space-4) var(--space-5);/* Scroll-Hinweis: Kantenschatten erscheinen nur, wo noch Code ausserhalb
       des sichtbaren Bereichs liegt (local = wandert mit, scroll = bleibt an
       der Kante). Ohne Hinweis wirkt ein intern scrollender Block wie abgeschnitten. */--pre-schatten:color-mix(in srgb, var(--farbe-text) 26%, transparent);background:linear-gradient(to right, var(--farbe-flaeche) 30%, transparent) left center/2rem 100% no-repeat local,linear-gradient(to left, var(--farbe-flaeche) 30%, transparent) right center/2rem 100% no-repeat local,radial-gradient(farthest-side at 0 50%, var(--pre-schatten), transparent) left center/0.75rem 100% no-repeat scroll,radial-gradient(farthest-side at 100% 50%, var(--pre-schatten), transparent) right center/0.75rem 100% no-repeat scroll,var(--farbe-flaeche);border:1px solid var(--farbe-linie);border-radius:var(--radius-md);font-size:var(--text-sm);line-height:var(--leading-relaxed)}.rich-text__inhalt pre code{font-family:ui-monospace,"SF Mono","Cascadia Code","Roboto Mono",Consolas,monospace;color:var(--farbe-text);white-space:pre}/* Inline-Bild mitten im Fliesstext (Guido 2026-08-19, erster Anwendungsfall:
     Diagramm im Assoziation-Artikel). Nachtrag Guido 2026-08-19: bewusst KEIN
     column-span:all -- das Bild bleibt normal INNERHALB einer einzelnen Spalte,
     genau wie jedes andere Blockelement im Zeitungsstil (Absatz, Zitat,
     Tabelle). break-inside:avoid-column verhindert nur, dass es mitten im Bild
     zwischen zwei Spalten umbricht -- geerbt bereits ueber die bestehende
     '.rich-text[data-spalten] .rich-text__abschnitt > *'-Regel oben, hier nur
     zur Klarheit nochmal explizit (gilt zusaetzlich im 1-spaltigen
     .rich-text__intro, wo die geerbte Regel nicht greift). *//*
    Bild-seitlich-Layout (Guido 2026-08-20, Homepage-Block "Was wir tun"):
    50/50-Spalten -- Text links, Bild rechts, auf Desktop nebeneinander, auf
    Mobile gestapelt (Text zuerst, dann Bild -- Markup-Reihenfolge in
    rich-text.mustache traegt das automatisch, keine CSS-Umsortierung noetig).
    Container-Query statt Media-Query (Projekt-Konvention, siehe TOC/Zeitungsstil
    oben) -- nutzt den bestehenden .rich-text-Container (container-type:
    inline-size, siehe Basisregel ganz oben), kein zusaetzlicher verschachtelter
    Container noetig. Schwelle 48rem: knapp unter der halben --container-max-
    Breite (96rem/2), damit die Spalten bei mittleren Breiten nicht zu frueh
    gequetscht nebeneinanderstehen.
  */.rich-text__seitlich{display:grid;grid-template-columns:1fr;gap:var(--space-10);align-items:center}.rich-text__seitlich-text{min-width:0}@container (min-width: 48rem){.rich-text__seitlich{grid-template-columns:1fr 1fr;gap:var(--space-12)}/* Guido, 2026-08-20 (Korrektur): "Links Bild 50% Rechts Text 50%" --
       Bild links, Text rechts. Markup-Reihenfolge bleibt bewusst Text-zuerst
       (siehe rich-text.mustache-Kommentar, Mobile-Stapelreihenfolge/
       Lesereihenfolge), nur die VISUELLE Desktop-Anordnung wird per 'order'
       getauscht -- kein DOM-Umbau. */.rich-text__seitlich-text{order:2}.rich-text__seitlich-bild{order:1}.rich-text__seitlich[data-bild-position="rechts"] .rich-text__seitlich-text{order:1}.rich-text__seitlich[data-bild-position="rechts"] .rich-text__seitlich-bild{order:2}}.rich-text__seitlich-bild{margin:0}.rich-text__seitlich-bild picture,.rich-text__seitlich-bild img{display:block;width:100%;height:auto;border-radius:var(--radius-md);/* Gleiche Dark-Mode-Einfassung wie .rich-text__bild-vollbreit-img weiter
       unten -- Aquarell-Illustrationen mit cremefarbenem Malgrund brauchen
       einen dezenten Rahmen, sonst wirken sie im Dark Mode wie ein grelles
       helles Rechteck. */border:1px solid var(--farbe-linie);box-shadow:var(--shadow-sm)}.rich-text__bild-vollbreit{break-inside:avoid-column;margin-block:var(--space-6)}.rich-text__bild-vollbreit-img,.rich-text__bild-vollbreit picture{display:block;width:100%;height:auto;border-radius:var(--radius-md);/* Dark-Mode-Fund (Achilles, 2026-08-19): die Aquarell-Illustrationen (z.B.
       assets/illustrationen/was-wir-tun.png) haben einen cremefarbenen
       Malgrund -- ohne Einfassung wirkt das im Dark Mode wie ein grelles
       helles Rechteck mitten im dunklen Fliesstext. Dezenter Rahmen + Schatten
       (dieselben Rollen wie card.css/art-flipcard.css) faengt das ein, im
       Light Mode kaum sichtbar, im Dark Mode klar abgesetzt vom Hintergrund. */border:1px solid var(--farbe-linie);box-shadow:var(--shadow-sm)}.rich-text__inhalt blockquote{max-width:var(--lese-spalte-recht);padding-inline-start:var(--space-4);border-inline-start:3px solid var(--farbe-akzent);color:var(--farbe-text-gedaempft);font-style:italic}.rich-text__inhalt table{width:100%;max-width:100%;border-collapse:collapse;font-size:var(--text-sm);/* Overflow direkt am table-Element -- bleibt display:table, wird aber zum
       eigenen Scroll-Container, wenn eine lange Tabelle (z.B. Datenschutz-
       Verarbeitungsuebersicht) auf Mobile breiter ist als die Lesespalte. Kein
       Wrapper-Markup im inhaltHtml noetig. */overflow-x:auto;display:block}.rich-text__inhalt table thead,.rich-text__inhalt table tbody,.rich-text__inhalt table tr{display:table;width:100%;table-layout:fixed}.rich-text__inhalt th,.rich-text__inhalt td{text-align:left;/* Kompaktere Zeilen (Guido 2026-08-19): weniger vertikales Padding
       (--space-2 statt --space-3) UND explizite line-height -- ohne diese
       erbt die Zelle sonst --leading-relaxed (1.65) von .rich-text__inhalt,
       das ist fuer Fliesstext gedacht, macht Tabellenzeilen aber unnoetig
       hoch. --leading-snug (1.3) reicht fuer die kurzen Tabellenwerte. */padding:var(--space-2) var(--space-4);line-height:var(--leading-snug);border-bottom:1px solid var(--farbe-linie);vertical-align:top}.rich-text__inhalt th{font-weight:var(--weight-semibold);color:var(--farbe-text)}.rich-text__inhalt td{color:var(--farbe-text-gedaempft)}/* FAQ-Accordion INNERHALB eines Zeitungsstil-Blog-Artikels (Guido
     2026-08-19, Screenshot-belegt): zu breit/randlos, kuehles Blau-Grau
     (--farbe-flaeche) statt warmem Papier, zu fette Frage-Schrift, keine
     Serifen-Optik. faq-accordion ist im DOM ein SIBLING von rich-text, KEIN
     Kind -- beide sind eigenstaendige Top-Level-<section>-Elemente in
     <main> (render/site-lib.js bauePage(): jede Komponente wird direkt
     nacheinander in hauptSektionenHtml gepusht, kein Wrapper). Deshalb
     General-Sibling-Selektor '+' statt Nachfahren-Selektor -- greift NUR,
     wenn faq-accordion DIREKT auf einen Zeitungsstil-Artikel folgt (exakt
     die routen.json-Reihenfolge rich-text -> faq-accordion aller
     Blog-Artikel mit FAQ). Standalone-FAQ-Seiten (/de/ai/faq etc.) haben
     KEIN vorangehendes .rich-text[data-spalten]-Geschwister und bleiben
     dadurch komplett unberuehrt -- faq-accordion.css selbst wird nicht
     angefasst, rein additiver Override hier mit hoeherer Selektor-
     Spezifitaet (schlaegt data-hintergrund-Varianten automatisch, kein
     !important noetig). *//* Seit dem Container-Umbau (faq-accordion.css: .faq-accordion__inhalt traegt
     max-width/Gutter selbst) darf hier NUR noch die Papier-Faerbung und die
     Lese-Serife nachgezogen werden -- die frueheren max-width/padding-inline-
     Regeln auf der Section klemmten sonst die Flaeche auf Content-Breite und
     doppelten das Gutter. Geoeffnete Karte nimmt eine hellere Papier-Mischung. */.rich-text[data-spalten] + .faq-accordion{--faq-karte:color-mix(in oklch, var(--farbe-papier) 45%, var(--farbe-grund));background:var(--farbe-papier)}.rich-text[data-spalten] + .faq-accordion .faq-accordion__frage,.rich-text[data-spalten] + .faq-accordion .faq-accordion__antwort p{font-family:var(--font-serif-lesend)}.rich-text[data-spalten] + .faq-accordion .faq-accordion__frage{/* Standard ist --weight-medium (500) -- neben der Lese-Serife des
       restlichen Artikels wirkte das zu bold/schwer (Guido). --weight-normal
       (400) passt zum Fliesstext-Gewicht, .faq-accordion__titel (H2)
       nutzt bereits --weight-normal und bleibt unveraendert. */font-weight:var(--weight-normal)}/* Begriffe-Reihe (Achilles 2026-08-19, /de/hi-Redesign Block "Was jetzt
     wertvoller wird"): 5 grosse, typografische Begriffe nebeneinander OHNE
     Card-Optik (kein Rahmen/Schatten/Hintergrund) -- reiner Fliesstext-
     Charakter, wie eine Definitionsliste, nur horizontal statt gestapelt.
     Additiv, kein Breaking Change an bestehender rich-text-Nutzung: neue
     Klasse, greift nur wenn ein Autor sie im inhaltHtml selbst setzt. dl/dt/dd
     statt ul/li, weil es inhaltlich Begriff+Erlaeuterung ist (Definition),
     nicht eine Aufzaehlung gleichrangiger Punkte. */.rich-text__begriffe{/* Overflow-Fix (Achilles 2026-08-19, dritte Runde -- Guido-Meldung:
       "LERNEN" lief bei mittleren Viewport-Breiten als "LE" rechts aus dem
       sichtbaren Bereich). Ursache des Vorgaengers: grid-auto-flow:column mit
       grid-auto-columns:1fr zwang IMMER alle 4/5 Spalten in eine einzige
       Zeile -- 1fr-Tracks schrumpfen nicht unter die Content-Mindestbreite
       eines Wortes wie "VERANTWORTEN"/"ENTSCHEIDEN", also lief die Zeile bei
       jeder Breite unterhalb von grob 60rem ueber den Rand.
       Fix: dt+dd pro Begriff jetzt in einem <div> gruppiert (HTML5 erlaubt
       div als Kindelement von dl neben dt/dd) und die Gruppe per Flexbox mit
       flex-wrap umgebrochen -- das ist die dl/dt/dd-Paarung nicht mehr auf
       Grid-Spaltenzaehlung angewiesen, sondern jede Gruppe ist ein normaler
       Flex-Item und bricht wie jeder andere Flow-Inhalt um, wenn der Platz
       nicht reicht. min-width:min(9rem,100%) verhindert Overflow zusaetzlich
       auf sehr schmalen Viewports (<9rem verfuegbare Breite), 9rem Startbreite
       macht 2-3 Begriffe pro Zeile bei mittleren Breiten, alle 4/5 nebeneinander
       bei ausreichend Platz -- funktioniert unveraendert fuer 4er- und
       5er-Reihe, keine Breakpoint-Annahme mehr noetig. Getestet 1920/1440/
       1280/1024/768/480px, kein Overflow bei keiner Breite. */display:flex;flex-wrap:wrap;gap:var(--space-8) var(--space-6);margin:var(--space-6) 0;padding:0}.rich-text__begriffe > div{/* min-width:0 statt auto: Flex-Items schrumpfen sonst nie unter die
       Max-Content-Breite ihres Inhalts (Default min-width:auto) -- damit
       liefe hyphens/overflow-wrap auf dt/dd unten ins Leere, weil die Box
       selbst schon nicht schrumpft. flex-basis regelt die Wunschbreite,
       min-width:0 gibt den Kindern die Erlaubnis, bei Bedarf zu trennen. */flex:1 1 12rem;min-width:min-content}.rich-text__begriffe dt{/* Zweiter Teilfund derselben Meldung: einzelne lange Woerter ohne
       Leerzeichen ("ENTSCHEIDEN", "VERANTWORTEN") brechen nicht am
       Wortende um und blieben dadurch selbst dann breiter als ihr
       Flex-Item, wenn die Gruppen-Divs schon korrekt umbrachen -- das
       Wort lief optisch aus der Spalte und zog scrollWidth der ganzen
       Seite mit. hyphens:auto (lang="de" steht auf <html>) silbentrennt
       zuerst sauber, overflow-wrap als Netz darunter fuer den Fall, dass
       der Browser keine Trennstelle findet. */margin:0;font-family:var(--font-display);font-optical-sizing:auto;font-size:var(--text-2xl);font-weight:var(--weight-bold);color:var(--farbe-akzent);letter-spacing:0.02em;/* Korrekturpaket 2026-10-13 (Vera 4): Versalien-Begriffe werden NIE getrennt
       ("ENT-/SCHEI-/DEN"). Die Gruppe ist mindestens so breit wie das laengste Wort
       (min-width: min-content oben), die Wunschbreite 12rem legt fest, wie viele Begriffe
       in eine Zeile passen. */hyphens:none;overflow-wrap:normal}.rich-text__begriffe dd{/* Gleiches Problem wie bei dt, hier ausgeloest durch lange
       Erklaerungs-Komposita ("Wahrscheinlichkeitsverteilungen") --
       dieselbe Absicherung. */margin:var(--space-2) 0 0;font-size:var(--text-sm);line-height:var(--leading-relaxed);color:var(--farbe-text-gedaempft);hyphens:auto;overflow-wrap:break-word}/*
    Zentrierter Kurzblock (Guido 2026-10-13, /de/hi "Vier Intelligenzen"): Block steht
    zentriert im Content-Container, Ueberschrift und kurze Zeilen mittig. Ausnahme von
    "zentriert nur bis 3 Zeilen" ist hier nur moeglich, weil der Block nur aus kurzen Zeilen
    besteht -- jeder zentrierte Text hat text-wrap: balance und bleibt unter 3 Zeilen.
    Die Begriffe-Reihe laeuft in EINER Reihe ueber die Containerbreite (4 Spalten ab breiten
    Containern, 2x2 mittel, 1 Spalte mobil), kein 3+1-Umbruch.
  */.rich-text[data-zentriert] .rich-text__inhalt{max-width:none;margin-inline:auto;align-items:center;text-align:center}.rich-text[data-zentriert] .rich-text__inhalt > h2{max-width:26ch;margin-block:var(--space-6) var(--space-2);font-size:var(--text-3xl);text-wrap:balance;hyphens:manual}.rich-text[data-zentriert] .rich-text__inhalt > p{max-width:44ch;margin-inline:auto;text-wrap:balance}.rich-text[data-zentriert] .rich-text__begriffe{display:grid;grid-template-columns:minmax(0, 1fr);gap:var(--space-8) var(--space-6);width:100%;margin-block:var(--space-8) var(--space-6)}.rich-text[data-zentriert] .rich-text__begriffe > div{padding-block-start:var(--space-5);border-block-start:1px dotted var(--farbe-linie-stark)}.rich-text[data-zentriert] .rich-text__begriffe dt{font-size:var(--text-4xl);line-height:1}.rich-text[data-zentriert] .rich-text__begriffe dd{max-width:22ch;margin:var(--space-3) auto 0;text-wrap:balance;hyphens:manual}@container rt-text (min-width: 30rem){.rich-text[data-zentriert] .rich-text__begriffe{grid-template-columns:repeat(2, minmax(0, 1fr))}}@container rt-text (min-width: 56rem){.rich-text[data-zentriert] .rich-text__begriffe{grid-template-columns:repeat(4, minmax(0, 1fr))}}/*
    Orientierungsspalte (Rail), Briefing Langtext 2026-10-13, Stufe 2.
    Markup (rich-text.mustache): .rich-text__raster > [details Inhaltsverzeichnis, nur
    schmal] + .rich-text__inhalt + aside.rich-text__rail. DOM-Reihenfolge: Text zuerst, Rail
    danach; die Rail steht nur per Grid rechts. Der benannte Container rt-text sitzt am
    Hauptbereich (Inhaltsbreite ohne Seitenrand), das Raster ist sein Kind -- ein Container
    kann sich per eigener Container Query nicht selbst umstellen.
    Schwelle 83rem: 2 x 31,5rem Textspalten + 2 x 3rem Abstand + 18rem Rail = 87rem
    (Viewport 1480); darunter wuerden die Textspalten unter 58 Zeichen fallen.
  */.rich-text[data-spalten] .rich-text__hauptbereich{container:rt-text/inline-size}.rich-text__inhalt h2[id]{scroll-margin-block-start:var(--space-24)}/* Fokus per Tastatur scrollt den Link nicht unter die sticky Navigation. */.rich-text__rail a,.rich-text__toc-klein a,.rich-text__toc-klein summary{scroll-margin-block:var(--space-24)}/* Unter der Rail-Schwelle (Themenseiten 80rem, Blog 90rem) steht "Weiterlesen" als Block NACH
     dem Text (Lena H7: der Leser ist fertig, dort ist "Weiter" am nuetzlichsten); das
     Verzeichnis uebernimmt das <details> oben. Rail ohne Weiterlesen-Teil bleibt unsichtbar. */.rich-text__rail{display:block;max-width:var(--lese-spalte-1);margin-block-start:var(--space-10)}.rich-text__rail .rich-text__rail-toc{display:none}.rich-text__rail:not(:has(.rich-text__rail-weiter)){display:none}.rich-text__toc-klein{max-width:var(--lese-spalte-1);margin-block-end:var(--space-6);border:1px solid var(--farbe-linie);border-radius:var(--radius-md);background:var(--farbe-flaeche)}.rich-text__toc-klein summary{display:flex;justify-content:space-between;gap:var(--space-4);padding:var(--space-3) var(--space-4);font-size:var(--text-sm);font-weight:var(--weight-semibold);cursor:pointer;list-style:none}.rich-text__toc-klein summary::-webkit-details-marker{display:none}.rich-text__toc-klein summary::after{content:'+';color:var(--farbe-text-dezent)}.rich-text__toc-klein[open] summary::after{content:'−'}.rich-text__toc-klein ul{display:flex;flex-direction:column;gap:var(--space-2);margin:0;padding:0 var(--space-4) var(--space-4);list-style:none}.rich-text__toc-klein a{/* Touch-Ziel mindestens 44 px hoch (Lena M5). */display:flex;align-items:center;min-height:2.75rem;font-size:var(--text-sm);color:var(--farbe-text-gedaempft);text-decoration:none}.rich-text__toc-klein a:hover{color:var(--farbe-akzent);text-decoration:underline}.rich-text__toc-klein summary:focus-visible,.rich-text__toc-klein a:focus-visible,.rich-text__rail a:focus-visible{outline:2px solid var(--farbe-akzent);outline-offset:2px;border-radius:var(--radius-sm)}/* Rail-Bausteine. Gewicht nach Rolle: "Auf dieser Seite" ist ruhig (Linie + Text),
     die "Weiter"-Karte ist der laute Primaerweg (getoente Flaeche, Themenfarbe). */.rich-text__rail-block + .rich-text__rail-block{padding-block-start:var(--space-6);border-block-start:1px dotted var(--farbe-linie-stark)}.rich-text__rail-titel{margin:0 0 var(--space-3);font-family:var(--font-display);font-size:var(--text-xs);font-weight:var(--weight-semibold);letter-spacing:0.08em;text-transform:uppercase;color:var(--farbe-text-dezent)}.rich-text__rail-toc .rich-text__rail-liste{border-inline-start:1px solid var(--farbe-linie)}/* Langes Verzeichnis (Blog mit 16+ H2): nur das Verzeichnis scrollt (schrumpft zuerst),
     "Weiterlesen" bleibt in voller Hoehe sichtbar unten in der Rail (BUG-10). Die Mindesthoehe
     verhindert, dass das Verzeichnis auf null schrumpft; erst dann scrollt die ganze Rail. */.rich-text__rail-toc{flex:0 1 auto;min-height:9rem;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;/* Platz fuer den Fokusring der Links, sonst vom Scrollbereich abgeschnitten. */padding:var(--space-1);margin:calc(var(--space-1) * -1)}.rich-text__rail-weiter{flex:none}.rich-text__rail-liste{display:flex;flex-direction:column;gap:0;margin:0;padding:0;list-style:none}.rich-text__rail-liste a{display:block;font-size:var(--text-sm);line-height:var(--leading-snug);color:var(--farbe-text-gedaempft);text-decoration:none;transition:color var(--transition-base),border-color var(--transition-base)}.rich-text__rail-toc .rich-text__rail-liste a{margin-inline-start:-1px;padding:var(--space-2) 0 var(--space-2) var(--space-4);border-inline-start:2px solid transparent}.rich-text__rail-liste a:hover{color:var(--farbe-text)}.rich-text__rail-toc .rich-text__rail-liste a:hover{border-inline-start-color:var(--farbe-linie-stark)}.rich-text__rail-toc .rich-text__rail-liste a[aria-current="true"]{color:var(--farbe-text);font-weight:var(--weight-semibold);border-inline-start-color:var(--farbe-akzent)}.rich-text__rail-liste--weitere{margin-block-start:var(--space-4);gap:var(--space-1)}.rich-text__rail-liste--weitere a{padding-block:var(--space-2)}.rich-text__rail-liste--weitere a:hover{text-decoration:underline;text-underline-offset:0.2em}.rich-text__rail-karte{position:relative;display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-5) var(--space-5) var(--space-8);border:1px solid color-mix(in oklch, var(--farbe-akzent) 28%, var(--farbe-linie));border-radius:1rem 1rem 0.25rem 1rem;background:color-mix(in oklch, var(--farbe-akzent) 8%, var(--farbe-grund));color:var(--farbe-text);text-decoration:none;transition:transform var(--transition-base),box-shadow var(--transition-base),border-color var(--transition-base)}.rich-text__rail-karte:hover{transform:translateY(-2px);border-color:var(--farbe-akzent);box-shadow:0 0.6rem 1.4rem rgb(var(--farbe-schatten-tonwert) / 0.12)}.rich-text__rail-kicker{display:block;font-size:var(--text-xs);font-weight:var(--weight-semibold);letter-spacing:0.06em;text-transform:uppercase;color:var(--farbe-akzent)}.rich-text__rail-liste--weitere .rich-text__rail-kicker{margin-block-end:0.15rem;color:var(--farbe-text-dezent)}.rich-text__rail-karte-titel{font-family:var(--font-display);font-size:var(--text-lg);font-weight:var(--weight-semibold);line-height:var(--leading-snug);text-wrap:balance}.rich-text__rail-karte-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;line-clamp:3;overflow:hidden;font-size:var(--text-sm);line-height:var(--leading-snug);color:var(--farbe-text-gedaempft)}.rich-text__rail-pfeil{position:absolute;inset-inline-end:var(--space-4);inset-block-end:var(--space-3);color:var(--farbe-akzent);font-weight:var(--weight-bold);transition:transform var(--transition-base)}.rich-text__rail-karte:hover .rich-text__rail-pfeil{transform:translateX(4px)}/* Schwelle je Typ: Themenseiten ab 83rem, Blog ab 90rem -- die Lese-Serife ist breiter, bei
     83rem fielen die Zeitungsspalten unter 55 Zeichen je Zeile (Briefing: Blog-Rail ab 90rem). */@container rt-text (min-width: 80rem){/* Schmale Rail (15rem) zwischen 80rem und 83rem Containerbreite: Spalten 2 x ca. 30rem
       bleiben bei ca. 55 Zeichen (Viewport ab ca. 1355 px, u.a. 1366er Laptops). */.rich-text[data-darstellung="seite"] .rich-text__raster{display:grid;grid-template-columns:minmax(0, 1fr) var(--lese-rail-schmal);column-gap:var(--space-8);align-items:start}.rich-text[data-darstellung="seite"][data-seiten-spalten] .rich-text__inhalt,.rich-text[data-darstellung="seite"][data-seiten-spalten] .rich-text__abschnitt{--lese-gutter:var(--space-10)}.rich-text[data-darstellung="seite"] .rich-text__toc-klein{display:none}.rich-text[data-darstellung="seite"] .rich-text__rail .rich-text__rail-toc{display:block}.rich-text[data-darstellung="seite"] .rich-text__rail{max-width:none;margin-block-start:0;display:flex;flex-direction:column;gap:var(--space-6);position:sticky;inset-block-start:var(--space-24);max-height:calc(100dvh - var(--space-24) - var(--space-6));overflow-y:auto;overscroll-behavior:contain;/* Platz fuer Fokusring und Karten-Schatten, sonst vom overflow abgeschnitten. */padding:var(--space-1);margin:calc(var(--space-1) * -1)}}@container rt-text (min-width: 83rem){.rich-text[data-darstellung="seite"] .rich-text__raster{grid-template-columns:minmax(0, 1fr) var(--lese-rail);column-gap:var(--space-12)}.rich-text[data-darstellung="seite"][data-seiten-spalten] .rich-text__inhalt,.rich-text[data-darstellung="seite"][data-seiten-spalten] .rich-text__abschnitt{--lese-gutter:var(--space-12)}}@container rt-text (min-width: 90rem){.rich-text[data-spalten] .rich-text__raster{display:grid;grid-template-columns:minmax(0, 1fr) var(--lese-rail);column-gap:var(--space-12);align-items:start}.rich-text[data-spalten] .rich-text__toc-klein{display:none}.rich-text[data-spalten] .rich-text__rail .rich-text__rail-toc{display:block}.rich-text[data-spalten] .rich-text__rail{max-width:none;margin-block-start:0;display:flex;flex-direction:column;gap:var(--space-6);position:sticky;inset-block-start:var(--space-24);max-height:calc(100dvh - var(--space-24) - var(--space-6));overflow-y:auto;overscroll-behavior:contain;/* Platz fuer Fokusring und Karten-Schatten, sonst vom overflow abgeschnitten. */padding:var(--space-1);margin:calc(var(--space-1) * -1)}}@media (prefers-reduced-motion: reduce){.rich-text__rail-karte,.rich-text__rail-pfeil,.rich-text__rail-liste a{transition:none}.rich-text__rail-karte:hover,.rich-text__rail-karte:hover .rich-text__rail-pfeil{transform:none}}/*
    Szenen (Hauptseiten /ai /bi /hi /si), Briefing Langtext 2026-10-13, Stufe 2:
    ein H2-Abschnitt = eine Szene. Text in Lesebreite, daneben ein Gegenstueck (Zitat oder
    Kennzahl, ausschliesslich Woerter/Zahlen aus dem Abschnitt selbst, vom Build geprueft),
    von Szene zu Szene gespiegelt. DOM: Text zuerst; die Spiegelung ist reine Grid-
    Platzierung. Das Gegenstueck dupliziert Text und ist deshalb fuer Screenreader
    ausgeblendet (aria-hidden, enthaelt keine Links). Mobil: einspaltig, Gegenstueck
    unter dem Text. Optik der Platte angelehnt an szene-textplatte (Asymmetrie-Radius,
    Themenfarbe), aber ohne Bild.
  */.rich-text[data-szenen] .rich-text__inhalt{max-width:none;gap:0}.rich-text__szene{display:grid;grid-template-columns:minmax(0, 1fr);gap:var(--space-8);padding-block:var(--space-10)}.rich-text__szene:first-child{padding-block-start:0}.rich-text__szene + .rich-text__szene{border-block-start:1px dotted var(--farbe-linie-stark)}.rich-text__szene:nth-child(3n + 1){padding-block-end:var(--space-12)}.rich-text__szene-text{display:flex;flex-direction:column;gap:var(--space-5);max-width:var(--lese-spalte-1);hyphens:auto}.rich-text__szene-text > *{margin-block:0}.rich-text__szene-text > h2{margin-block-start:0;text-wrap:balance;hyphens:manual}/* Folgeteil einer geteilten Szene (Vera 3): keine neue Trennlinie, enger an den ersten Teil. */.rich-text__szene + .rich-text__szene--fortsetzung{border-block-start:none;padding-block-start:0}.rich-text__szene:has(+ .rich-text__szene--fortsetzung){padding-block-end:var(--space-6)}/* Beleg-Satz der Kennzahl: steht nur im Text (hervorgehoben), die Karte zeigt Zahl + Quelle. */.rich-text__beleg{padding:0.05em 0.25em;margin-inline:-0.25em;background:color-mix(in oklch, var(--farbe-akzent) 16%, transparent);color:var(--farbe-text);border-radius:0.2em;-webkit-box-decoration-break:clone;box-decoration-break:clone}.rich-text__szene-text p{max-width:none}.rich-text__gegenstueck{margin:0;padding:var(--space-8);border:1px solid color-mix(in oklch, var(--farbe-akzent) 30%, var(--farbe-linie));border-radius:1.5rem 1.5rem 0.4rem 1.5rem;background:color-mix(in oklch, var(--farbe-akzent) 8%, var(--farbe-grund));color:var(--farbe-text)}.rich-text__gegenstueck p{max-width:none}.rich-text__gegenstueck-inhalt{display:block}.rich-text__szene[data-seite="links"] .rich-text__gegenstueck{border-radius:1.5rem 1.5rem 1.5rem 0.4rem}.rich-text__gegenstueck-zitat{margin:0;font-family:var(--font-serif-lesend);font-size:clamp(1.5rem, 1rem + 1.5vw, 2.5rem);font-weight:var(--weight-medium);line-height:1.22;text-wrap:balance;hyphens:manual;/* Zitat deutlich heller/kraeftiger als der Fliesstext (Dunkelmodus: sonst identisches Grau). */color:var(--farbe-text)}.rich-text__gegenstueck-zitat::before{content:'„';display:block;/* „ sitzt als unteres 99 an der Grundlinie des Zeichens: die Zeile muss ihre volle
       Hoehe behalten (vorher line-height .8 -> Zeichen lag auf der ersten Textzeile). */margin-block-end:var(--space-4);font-family:var(--font-display);font-size:5rem;font-weight:var(--weight-bold);line-height:1;color:var(--farbe-akzent)}.rich-text__gegenstueck-zitat::after{content:'“';font-family:var(--font-display);font-weight:var(--weight-bold);font-size:1em;line-height:inherit;color:var(--farbe-akzent)}.rich-text__gegenstueck-wert{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-2) var(--space-3);margin:0;font-family:var(--font-display);line-height:1;color:var(--farbe-akzent)}.rich-text__gegenstueck-zahl{font-size:clamp(4.5rem, 3rem + 6vw, 9rem);font-weight:var(--weight-bold);font-variant-numeric:tabular-nums;letter-spacing:-0.03em}.rich-text__gegenstueck-einheit{font-size:var(--text-2xl);font-weight:var(--weight-semibold)}.rich-text__gegenstueck-beleg{margin:var(--space-5) 0 0;max-width:30em;font-size:var(--text-lg);line-height:var(--leading-snug)}.rich-text__gegenstueck-quelle{margin:var(--space-5) 0 0;font-size:var(--text-sm);color:var(--farbe-text-gedaempft)}.rich-text__gegenstueck-quelle a{color:var(--farbe-text);text-decoration:underline;text-underline-offset:0.2em}.rich-text__gegenstueck-quelle a:hover{color:var(--farbe-akzent)}@container rt-text (min-width: 64rem){.rich-text__szene--mit-gegenstueck{grid-template-columns:minmax(0, var(--lese-spalte-1)) minmax(0, 1fr);column-gap:var(--space-16);align-items:start}.rich-text__szene--mit-gegenstueck[data-seite="links"]{grid-template-columns:minmax(0, 1fr) minmax(0, var(--lese-spalte-1))}.rich-text__szene--mit-gegenstueck[data-seite="links"] > .rich-text__szene-text{grid-column:2;grid-row:1}.rich-text__szene--mit-gegenstueck[data-seite="links"] > .rich-text__gegenstueck{grid-column:1;grid-row:1}/* Platte mit Mindesthoehe (Inhalt mittig, nie ein kleines Einzelobjekt neben langem Text);
       sie klebt beim Scrollen und wandert mit dem Text. Lange Abschnitte sind per "teile" in
       Szenen von hoechstens ca. 1000 px Text geteilt. */.rich-text__szene--mit-gegenstueck > .rich-text__gegenstueck{position:sticky;inset-block-start:var(--space-24);max-width:46rem;min-height:min(26rem, calc(100dvh - var(--space-24) - var(--space-6)));display:flex;flex-direction:column;justify-content:center}.rich-text__szene--mit-gegenstueck[data-seite="links"] > .rich-text__gegenstueck{justify-self:end}}}