/*
 * EMEU Typo — die Stufen-Leiter des Hauses (Worker-Klassen, Schicht 1-3).
 *
 * QUELLE DES WERTE-SATZES: OpenAI-Referenz-Archiv GPT-5.6-Artikel,
 * deterministisch extrahierte Leiter (88 Definitionen) aus
 * shared_matrix_rooms/labor/LATTEN_stufe-zu-stelle-karte_2026-08-06_AAPI.md
 * Anhang A; Hash-Basis der Frier-Objekte im dortigen _STAND-Stempel.
 * System-Konstanz der Quelle doppelt belegt (Drift-Diff zweier Aufnahmen
 * 2026-08-06: 25 clamp-Formeln plus 14 Variablen identisch).
 *
 * ENTSCHEIDUNGEN (Lumina-GO 2026-08-06 #labor):
 * - Alle Stufen auf einmal (jede spaeter fehlende kostet eine Zip-Runde).
 * - STRUKTUR-Namen uebernommen, Fremd-Eigenheiten nicht: 21 von 22 Stufen
 *   gebaut. AUSGELASSEN: supply-accent (OpenAI-Eigenheit ohne Bedeutung im
 *   Haus; bei Bedarf eigener Name plus Zip). Werte zur Nachnutzung:
 *   size .875rem, line 1.05rem, track -.015rem, weight 500.
 * - Werte-Satz WOERTLICH aus der Referenz — die Stufen-NAMEN sind stabil,
 *   der Werte-Satz dahinter ist je Ziel-Design austauschbar (Alias-
 *   Bruecken-Bauart wie Brand-DNA).
 * - KEINE font-family in den Stufen: die Schrift-Familie traegt das
 *   Child-Theme (EMEU-Font-Grundlage) — Stufe sagt Groesse, Zeilenhoehe,
 *   Laufweite, Gewicht. Vier Werte, nie einzeln.
 * - text-transform gehoert NICHT in die Stufen: Versal-Schalter sind
 *   Stellen-Utilities (caps / caps-none), stellen-genau vergeben.
 * - v1.2.0 (2026-08-07): BR-ELEMENT-Bauart ergaenzt (display-Fall in den
 *   Geraete-Bloecken plus Leerzeichen-Schreibregel — deckt Feld-Inhalte
 *   wie emeu_stage_headline; Span-Bauart bleibt fuer Builder-Texte) und
 *   Zeilen-Deckel clamp-2 / clamp-3 (CSS-Wache der Rahmen-Doktrin,
 *   Lumina-Setzung 2026-08-07 #labor: Design gibt Content vor).
 *
 * BAU-MERKMALE DER LEITER (aus der Boden-Probe):
 * - Interpolations-Fenster einheitlich 375px bis 1440px
 *   (23.4375rem plus Spanne 66.5625rem) fuer alle fluiden Stufen.
 * - Laufweite wird MIT interpoliert, meist negativ auf grossen Screens.
 * - line-height ist eigene fluide Formel je Stufe, kein pauschaler Faktor.
 * - h5 und h6 tragen identische Werte (bewusstes Alias der Referenz).
 * - nav ist INVERTIERT fluid (mobil 1rem, Desktop .875rem) — die
 *   (90rem - 100vw)-Formel laeuft rueckwaerts, Vorzeichen beachten.
 * - p1/p2 und alle Klein-Rollen sind FEST: nur Ueberschriften atmen.
 *
 * KASKADEN-NOTIZ (Lehre W-023, Kaskade rechnet der Browser): Alle Rollen-
 * und Stellen-Klassen sind bewusst GEDOPPELT (.text-h1.text-h1 = 0,2,0),
 * damit die Leiter Theme- und Widget-Selektoren der Klasse 0,1,1 bis 0,2,0
 * ohne !important schlaegt (Vamtam/Elementor tragen solche Ketten). Die
 * Reihenfolge ist tragend: Handy-Varianten stehen NACH den Basis-Klassen
 * und gewinnen bei gleichem Gewicht allein durch Position. Inline-Stile
 * und Kit-Einstellungen gewinnen weiterhin — gewollt, das ist der
 * Feintuning-Hebel am Element.
 *
 * BREAKPOINT DER STELLEN-UTILITIES: 768px (mobil unter 768, Desktop ab
 * 768). Ein Schalt-Punkt, bewusst einfach — mehr nur am Bedarf.
 *
 * VERSIONEN: v1.0.0 Erst-Bau (Schichten 1-3). v1.0.1 gleicher Abend:
 * Schicht 2b Widget-Durchgriff plus Durchgriff an caps/caps-none und
 * align-Familie — Befund aus der Vergabe-Vorbereitung: Elementor-Klassen
 * sitzen am Wrapper, Theme-Regeln an inneren Knoten schlagen Vererbung.
 * v1.0.2: h-Durchgriffe erweitert um p/blockquote. v1.1.0: ELEMENT-
 * UNABHAENGIGKEIT (Lumina-Setzung 2026-08-06) — Variablen-Vererbung,
 * EINE Knoten-Liste, Ausschluss-Rand, Naehe-gewinnt, Farb- plus
 * Versal-Neutralisierung der Tag-Mitbringsel; Kompound-Griff
 * GESTRICHEN (ein Behaelter, eine Stufe); Abstaende an Text ENTFERNT
 * (margin 0, Lumina-Setzung — Abstands-Hoheit bei den Spacing-Klassen).
 */

/* ============================================================
 * SCHICHT 1 — DIE VARIABLEN (21 Stufen x 4 = 84 Definitionen,
 * woertlich aus Anhang A, alphabetisch wie die Extraktion)
 * ============================================================ */
:root {
  --type-2xs-line: .66rem;
  --type-2xs-size: .5rem;
  --type-2xs-track: clamp(-.01em, calc(-.01em + .01*((90rem - 100vw)/66.5625)), 0em);
  --type-2xs-weight: 400;

  --type-caption-line: 1.435rem;
  --type-caption-size: .875rem;
  --type-caption-track: 0em;
  --type-caption-weight: 400;

  --type-code-snippet-line: clamp(1.3325rem, calc(1.3325rem + .1025*((100vw - 23.4375rem)/66.5625)), 1.435rem);
  --type-code-snippet-size: clamp(.8125rem, calc(.8125rem + .0625*((100vw - 23.4375rem)/66.5625)), .875rem);
  --type-code-snippet-track: 0em;
  --type-code-snippet-weight: 400;

  --type-cta-line: .875rem;
  --type-cta-size: .875rem;
  --type-cta-track: 0em;
  --type-cta-weight: 500;

  --type-h1-line: clamp(2.28rem, calc(2.28rem + 1.72*((100vw - 23.4375rem)/66.5625)), 4rem);
  --type-h1-size: clamp(2rem, calc(2rem + 2*((100vw - 23.4375rem)/66.5625)), 4rem);
  --type-h1-track: -.03em;
  --type-h1-weight: 500;

  --type-h2-5-line: clamp(1.725rem, calc(1.725rem + 1.012*((100vw - 23.4375rem)/66.5625)), 2.737rem);
  --type-h2-5-size: clamp(1.5rem, calc(1.5rem + .88*((100vw - 23.4375rem)/66.5625)), 2.38rem);
  --type-h2-5-track: -.02em;
  --type-h2-5-weight: 500;

  --type-h2-line: clamp(2.28rem, calc(2.28rem + 1.2*((100vw - 23.4375rem)/66.5625)), 3.48rem);
  --type-h2-size: clamp(2rem, calc(2rem + 1*((100vw - 23.4375rem)/66.5625)), 3rem);
  --type-h2-track: clamp(-.03em, calc(-.03em + .02*((90rem - 100vw)/66.5625)), -.01em);
  --type-h2-weight: 500;

  --type-h3-line: clamp(1.98rem, calc(1.98rem + .495*((100vw - 23.4375rem)/66.5625)), 2.475rem);
  --type-h3-size: clamp(1.5rem, calc(1.5rem + .375*((100vw - 23.4375rem)/66.5625)), 1.875rem);
  --type-h3-track: -.01em;
  --type-h3-weight: 500;

  --type-h4-line: clamp(1.5rem, calc(1.5rem + .2325*((100vw - 23.4375rem)/66.5625)), 1.7325rem);
  --type-h4-size: clamp(1.25rem, calc(1.25rem + .125*((100vw - 23.4375rem)/66.5625)), 1.375rem);
  --type-h4-track: -.01em;
  --type-h4-weight: 500;

  --type-h5-line: clamp(1.25rem, calc(1.25rem + .235*((100vw - 23.4375rem)/66.5625)), 1.485rem);
  --type-h5-size: clamp(1rem, calc(1rem + .125*((100vw - 23.4375rem)/66.5625)), 1.125rem);
  --type-h5-track: -.01em;
  --type-h5-weight: 500;

  --type-h6-line: clamp(1.25rem, calc(1.25rem + .235*((100vw - 23.4375rem)/66.5625)), 1.485rem);
  --type-h6-size: clamp(1rem, calc(1rem + .125*((100vw - 23.4375rem)/66.5625)), 1.125rem);
  --type-h6-track: -.01em;
  --type-h6-weight: 500;

  --type-meta-line: 1.225rem;
  --type-meta-size: .875rem;
  --type-meta-track: 0em;
  --type-meta-weight: 500;

  --type-nav-desktop-line: 1.435rem;
  --type-nav-desktop-size: .875rem;
  --type-nav-desktop-track: 0em;
  --type-nav-desktop-weight: 500;

  --type-nav-header-line: 1.23rem;
  --type-nav-header-size: .8125rem;
  --type-nav-header-track: 0em;
  --type-nav-header-weight: 500;

  --type-nav-header-secondary-line: 1.05rem;
  --type-nav-header-secondary-size: .8125rem;
  --type-nav-header-secondary-track: -.01em;
  --type-nav-header-secondary-weight: 600;

  --type-nav-line: clamp(1.25rem, calc(1.25rem + .185*((100vw - 23.4375rem)/66.5625)), 1.435rem);
  --type-nav-mobile-line: 1.25rem;
  --type-nav-mobile-size: 1rem;
  --type-nav-mobile-track: 0em;
  --type-nav-mobile-weight: 500;
  --type-nav-size: clamp(.875rem, calc(.875rem + .125*((90rem - 100vw)/66.5625)), 1rem);
  --type-nav-track: 0em;
  --type-nav-weight: 500;

  --type-p1-line: 1.74994rem;
  --type-p1-size: 1.0625rem;
  --type-p1-track: -.01em;
  --type-p1-weight: 400;

  --type-p2-line: 1.435rem;
  --type-p2-size: .875rem;
  --type-p2-track: -.01em;
  --type-p2-weight: 400;

  --type-xl-line: clamp(4rem, calc(4rem + 3*((100vw - 23.4375rem)/66.5625)), 7rem);
  --type-xl-size: clamp(4rem, calc(4rem + 3*((100vw - 23.4375rem)/66.5625)), 7rem);
  --type-xl-track: -.02em;
  --type-xl-weight: 500;

  --type-xs-line: .825rem;
  --type-xs-size: .625rem;
  --type-xs-track: clamp(-.01em, calc(-.01em + .01*((90rem - 100vw)/66.5625)), 0em);
  --type-xs-weight: 400;
}

/* ============================================================
 * SCHICHT 2 — DIE ROLLEN-KLASSEN (v1.1.0, Lumina-Setzung 2026-08-06:
 * die Optik haengt zu HUNDERT Prozent an den Klassen und zu NULL
 * Prozent am HTML-Element — der Tag-Tausch-Test ist die Abnahme-Latte)
 *
 * BAUART VARIABLEN-VERERBUNG: Jede Stufen-Klasse SETZT am Traeger nur
 * die Arbeits-Variablen (--etypo-*). Custom Properties VERERBEN im
 * Baum: ein innerer Stufen-Traeger setzt sie neu, seine Nachfahren
 * erben die inneren Werte. Bei Verschachtelung gewinnt die NAEHE im
 * Baum strukturell — nicht die Zeilen-Reihenfolge der Datei
 * (AAPI-Latte 2: kein Sortier-Artefakt).
 * ============================================================ */
.text-2xs.text-2xs { --etypo-size: var(--type-2xs-size); --etypo-line: var(--type-2xs-line); --etypo-track: var(--type-2xs-track); --etypo-weight: var(--type-2xs-weight); }
.text-caption.text-caption { --etypo-size: var(--type-caption-size); --etypo-line: var(--type-caption-line); --etypo-track: var(--type-caption-track); --etypo-weight: var(--type-caption-weight); }
.text-code-snippet.text-code-snippet { --etypo-size: var(--type-code-snippet-size); --etypo-line: var(--type-code-snippet-line); --etypo-track: var(--type-code-snippet-track); --etypo-weight: var(--type-code-snippet-weight); }
.text-cta.text-cta { --etypo-size: var(--type-cta-size); --etypo-line: var(--type-cta-line); --etypo-track: var(--type-cta-track); --etypo-weight: var(--type-cta-weight); }
.text-h1.text-h1 { --etypo-size: var(--type-h1-size); --etypo-line: var(--type-h1-line); --etypo-track: var(--type-h1-track); --etypo-weight: var(--type-h1-weight); }
.text-h2.text-h2 { --etypo-size: var(--type-h2-size); --etypo-line: var(--type-h2-line); --etypo-track: var(--type-h2-track); --etypo-weight: var(--type-h2-weight); }
.text-h2-5.text-h2-5 { --etypo-size: var(--type-h2-5-size); --etypo-line: var(--type-h2-5-line); --etypo-track: var(--type-h2-5-track); --etypo-weight: var(--type-h2-5-weight); }
.text-h3.text-h3 { --etypo-size: var(--type-h3-size); --etypo-line: var(--type-h3-line); --etypo-track: var(--type-h3-track); --etypo-weight: var(--type-h3-weight); }
.text-h4.text-h4 { --etypo-size: var(--type-h4-size); --etypo-line: var(--type-h4-line); --etypo-track: var(--type-h4-track); --etypo-weight: var(--type-h4-weight); }
.text-h5.text-h5 { --etypo-size: var(--type-h5-size); --etypo-line: var(--type-h5-line); --etypo-track: var(--type-h5-track); --etypo-weight: var(--type-h5-weight); }
.text-h6.text-h6 { --etypo-size: var(--type-h6-size); --etypo-line: var(--type-h6-line); --etypo-track: var(--type-h6-track); --etypo-weight: var(--type-h6-weight); }
.text-meta.text-meta { --etypo-size: var(--type-meta-size); --etypo-line: var(--type-meta-line); --etypo-track: var(--type-meta-track); --etypo-weight: var(--type-meta-weight); }
.text-nav.text-nav { --etypo-size: var(--type-nav-size); --etypo-line: var(--type-nav-line); --etypo-track: var(--type-nav-track); --etypo-weight: var(--type-nav-weight); }
.text-nav-desktop.text-nav-desktop { --etypo-size: var(--type-nav-desktop-size); --etypo-line: var(--type-nav-desktop-line); --etypo-track: var(--type-nav-desktop-track); --etypo-weight: var(--type-nav-desktop-weight); }
.text-nav-header.text-nav-header { --etypo-size: var(--type-nav-header-size); --etypo-line: var(--type-nav-header-line); --etypo-track: var(--type-nav-header-track); --etypo-weight: var(--type-nav-header-weight); }
.text-nav-header-secondary.text-nav-header-secondary { --etypo-size: var(--type-nav-header-secondary-size); --etypo-line: var(--type-nav-header-secondary-line); --etypo-track: var(--type-nav-header-secondary-track); --etypo-weight: var(--type-nav-header-secondary-weight); }
.text-nav-mobile.text-nav-mobile { --etypo-size: var(--type-nav-mobile-size); --etypo-line: var(--type-nav-mobile-line); --etypo-track: var(--type-nav-mobile-track); --etypo-weight: var(--type-nav-mobile-weight); }
.text-p1.text-p1 { --etypo-size: var(--type-p1-size); --etypo-line: var(--type-p1-line); --etypo-track: var(--type-p1-track); --etypo-weight: var(--type-p1-weight); }
.text-p2.text-p2 { --etypo-size: var(--type-p2-size); --etypo-line: var(--type-p2-line); --etypo-track: var(--type-p2-track); --etypo-weight: var(--type-p2-weight); }
.text-xl.text-xl { --etypo-size: var(--type-xl-size); --etypo-line: var(--type-xl-line); --etypo-track: var(--type-xl-track); --etypo-weight: var(--type-xl-weight); }
.text-xs.text-xs { --etypo-size: var(--type-xs-size); --etypo-line: var(--type-xs-line); --etypo-track: var(--type-xs-track); --etypo-weight: var(--type-xs-weight); }

/* ============================================================
 * SCHICHT 2b — DIE EINE ANWENDUNGS-REGEL (volle Aufloesung)
 *
 * EINE Knoten-Liste fuer ALLE Stufen (AAPI-Latte 1: keine zwei Saetze
 * nach Stufen-Art): der Traeger selbst ohne Bezug PLUS h1 bis h6, p,
 * div, span, li, a, blockquote, cite, code, pre. Klasse dran heisst
 * Wirkung da — egal ob Widget, Shortcode oder blankes DIV. :where
 * haelt jedes Gewicht bei 0,2,0.
 *
 * AUSSCHLUSS-RAND gegen Ueber-Reichweite (AAPI-Latte: eine Stufe am
 * Behaelter formt NICHT die Schaltflaeche, das Formular-Feld oder die
 * Grafik darin um): button, .elementor-button, input, textarea,
 * select, svg samt Inhalt sind ausgenommen. figcaption ist bewusst
 * NICHT in der Liste — die Bildunterschrift traegt ihre eigene Stufe
 * direkt (text-caption), statt von der Sektions-Stufe erfasst zu
 * werden.
 *
 * TAG-MITBRINGSEL-NEUTRALISIERUNG (Tag-Tausch-Invarianz, SSLB-Messung
 * 2026-08-06 — ein h1 bringt an diesem Theme Groesse, Gewicht, FARBE
 * und VERSALIEN mit): color inherit macht die Farbe tag-unabhaengig,
 * die Farbe selbst setzt weiterhin die Brand-DNA-Schicht, nie die
 * Stufe. text-transform faellt auf none, ausser caps setzt die
 * Variable (gefallene Versal-Entscheidung als Grundzustand).
 * ABSTAENDE (Lumina-Setzung 2026-08-06): Abstaende gehoeren nicht an
 * Ueberschriften oder Text und werden hier ENTFERNT (margin 0) — wie
 * im Bricks-Theme des Hauses. Die Abstands-Hoheit liegt bei eigenen
 * Abstands-Worker-Klassen; die Familie folgt als eigener Baustein-
 * Schritt, namens-konsistent zum Bricks-Child.
 *
 * Die Werte kommen aus den GEERBTEN Arbeits-Variablen — alle
 * Anwendungs-Selektoren schreiben dieselben Zeilen, ihre Reihenfolge
 * ist deshalb bedeutungslos. EIN BEHAELTER, EINE STUFE: zwei Stufen
 * am selben Behaelter sind nicht definiert — zwei Inhalte mit zwei
 * Groessen brauchen zwei Behaelter (Struktur-Frage) oder gezieltes
 * Stellen-CSS als benannte Einzel-Ausnahme.
 * ============================================================ */
.text-2xs.text-2xs,
.text-2xs.text-2xs :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-caption.text-caption,
.text-caption.text-caption :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-code-snippet.text-code-snippet,
.text-code-snippet.text-code-snippet :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-cta.text-cta,
.text-cta.text-cta :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-h1.text-h1,
.text-h1.text-h1 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-h2.text-h2,
.text-h2.text-h2 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-h2-5.text-h2-5,
.text-h2-5.text-h2-5 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-h3.text-h3,
.text-h3.text-h3 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-h4.text-h4,
.text-h4.text-h4 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-h5.text-h5,
.text-h5.text-h5 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-h6.text-h6,
.text-h6.text-h6 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-meta.text-meta,
.text-meta.text-meta :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-nav.text-nav,
.text-nav.text-nav :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-nav-desktop.text-nav-desktop,
.text-nav-desktop.text-nav-desktop :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-nav-header.text-nav-header,
.text-nav-header.text-nav-header :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-nav-header-secondary.text-nav-header-secondary,
.text-nav-header-secondary.text-nav-header-secondary :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-nav-mobile.text-nav-mobile,
.text-nav-mobile.text-nav-mobile :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-p1.text-p1,
.text-p1.text-p1 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-p2.text-p2,
.text-p2.text-p2 :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-xl.text-xl,
.text-xl.text-xl :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)),
.text-xs.text-xs,
.text-xs.text-xs :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) {
  font-size: var(--etypo-size);
  line-height: var(--etypo-line);
  letter-spacing: var(--etypo-track);
  font-weight: var(--etypo-weight);
  color: inherit;
  text-transform: var(--etypo-caps, none);
  margin: 0;
}

/* ============================================================
 * SCHICHT 3 — DIE STELLEN-UTILITIES (je Stelle vergeben, sparsam —
 * das Vorbild nutzt sie punktuell, nicht als Grundausstattung)
 * ============================================================ */

/* Umbruch-Familie (Vorbild-Nutzung gemessen: balance sparsam an
 * Ueberschriften, pretty NUR an kleinen Rollen, nowrap an kurzen
 * Bedien-Elementen; FLIESSEND ist der Grundzustand ohne Klasse) */
.wrap-balance.wrap-balance { text-wrap: balance; }
.wrap-pretty.wrap-pretty { text-wrap: pretty; }
.wrap-normal.wrap-normal { text-wrap: wrap; }
.nowrap.nowrap { white-space: nowrap; }

/* Versal-Schalter (v1.1.0) — in die Vererbungs-Bauart integriert:
 * caps und caps-none SETZEN die Arbeits-Variable --etypo-caps, die
 * Anwendungs-Regel der Stufen liest sie mit Default none. Damit ist
 * die gefallene Versal-Entscheidung (Professor Lumina 2026-08-06:
 * Grossbuchstaben fallen) der GRUNDZUSTAND der Leiter — ein Tag, das
 * Versalien mitbringt (Theme setzt sie fuer h1 bis h6 generell,
 * SSLB-Messung), wird neutralisiert. caps ist der bewusste
 * Gegen-Schalter; bei Verschachtelung gewinnt die Naehe im Baum.
 * Am eigenen Traeger wirken beide zusaetzlich direkt (auch ausserhalb
 * der Stufen-Leiter). */
.caps.caps { text-transform: uppercase; --etypo-caps: uppercase; }
.caps-none.caps-none { text-transform: none; --etypo-caps: none; }

/* Gesetzter Zeilenbruch (Wortspiel-Fall) — ZWEI BAUARTEN, koexistent:
 *
 * BAUART SPAN (Builder-Texte): Der Autor setzt ein LEERES Marker-Element
 * zwischen die zwei Teile, OHNE Leerzeichen drumherum:
 * Teil-eins<span class="br-desktop"></span>Teil-zwei
 * Die Klasse liefert beides: unterhalb der Schalt-Breite ein Leerzeichen,
 * ab der Schalt-Breite den Zeilenbruch. Kein unsichtbares Leerzeichen im
 * Text, das ein Editor loeschen kann; kein Zusammenkleben der Woerter
 * (AAPI-Stolperstein 2026-08-06: display:none am br frisst die
 * Wort-Trennung). br-mobil ist der Spiegel-Fall.
 *
 * BAUART BR-ELEMENT (v1.2.0, Feld-Inhalte wie emeu_stage_headline):
 * Pseudo-Elemente wirken auf das leere br nicht zuverlaessig — hier gilt
 * die display-Bauart in den Geraete-Bloecken unten (br.br-desktop faellt
 * unterhalb, br.br-mobil oberhalb der Schalt-Breite). Der Stolperstein
 * ist durch die SCHREIB-REGEL gedeckt, nicht ungeloest: VOR der Marke
 * steht ein normales Leerzeichen (…future <br class="br-desktop">With…).
 * Am Zeilenende ist es unsichtbar, beim Fall der Marke trennt es die
 * Woerter. Die Regel gehoert in Hilfe-Zeile und Vorgabe-Papier
 * (SSLB-Feder). */
.br-desktop::before { content: " "; }
.br-mobil::before { content: " "; }

/* Zeilen-Deckel (v1.2.0) — die CSS-Wache der Rahmen-Doktrin (Lumina-
 * Setzung 2026-08-07 #labor: das Design gibt den Content vor; ab der
 * definierten Zeilenzahl wird mit Symbol gekappt). Ellipsis kommt mit
 * line-clamp nativ. Haus-Bauart wie align: Doppel-Klasse am Traeger
 * plus Durchgriff auf die direkten Text-Knoten — je Knoten N Zeilen.
 * Schuetzt das LAYOUT, nicht die AUSSAGE: Der Kern gehoert in die
 * ersten Zeilen (umgekehrte Pyramide, Vorgabe-Papier). */
.clamp-2.clamp-2, .clamp-2.clamp-2 :where(p,li,h1,h2,h3,h4,h5,h6,.elementor-heading-title) { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; }
.clamp-3.clamp-3, .clamp-3.clamp-3 :where(p,li,h1,h2,h3,h4,h5,h6,.elementor-heading-title) { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; line-clamp: 3; overflow: hidden; }

/* Ausrichtung — Basis-Klassen (gelten auf allen Breiten), mit
 * Durchgriff (v1.0.1) fuer innere Knoten mit eigener Theme-Ausrichtung */
.align-left.align-left, .align-left.align-left :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre,figcaption):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) { text-align: left; }
.align-center.align-center, .align-center.align-center :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre,figcaption):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) { text-align: center; }
.align-right.align-right, .align-right.align-right :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre,figcaption):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) { text-align: right; }

/* REIHENFOLGE IST TRAGEND: Die Geraete-Bloecke stehen NACH den
 * Basis-Klassen und gewinnen bei gleichem Gewicht (0,2,0) allein durch
 * ihre spaetere Position — wer hier umsortiert, bricht die
 * Handy-Uebersteuerung. Muster im Builder: align-center align-left-mobil */
@media (min-width: 768px) {
  .br-desktop::before { content: "\A"; white-space: pre; }
  br.br-mobil { display: none; } /* v1.2.0: BR-Element-Bauart, Spiegel unten */
}
@media (max-width: 767.98px) {
  .br-mobil::before { content: "\A"; white-space: pre; }
  br.br-desktop { display: none; } /* v1.2.0: Leerzeichen-Schreibregel deckt die Wort-Trennung */
  .align-left-mobil.align-left-mobil, .align-left-mobil.align-left-mobil :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre,figcaption):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) { text-align: left; }
  .align-center-mobil.align-center-mobil, .align-center-mobil.align-center-mobil :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre,figcaption):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) { text-align: center; }
  .align-right-mobil.align-right-mobil, .align-right-mobil.align-right-mobil :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre,figcaption):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) { text-align: right; }
}

/* ============================================================
 * v1.3.0 (2026-08-10): SCHRIFT-STIMMEN-WORKER text-hand
 *
 * Lumina-Auftrag (#labor): eine CSS-Worker-Klasse bestimmt, WANN
 * die Hand-Stimme (Grape Nuts) wirkt — ohne Klasse wirkt sie
 * nirgends. Name aus Amaras Ableitung: text-hand reiht sich in
 * die text-Familie ein und benennt die EIGENSCHAFT (Hand-Stimme),
 * nicht die Font-Instanz — wechselt die Hand je, wechselt nur
 * diese eine Zeile. Frei-Probe gegen den Fremd-Bestand gelaufen.
 *
 * EIN-EIGENSCHAFT-REGEL (Levis L7): NUR die Schrift-Familie —
 * Groesse, Farbe, Deckung, Position bleiben unberuehrt (Ghost-
 * Optik ist eigene Schicht bzw. Einsatz-Ort-Sache). Selektor-Bau
 * nach dem Familien-Muster (Doppel-Klasse plus where-Kinder-Griff
 * mit Button/Input/SVG-Aussparung).
 * Die font-face-Registrierung wohnt im Child (emeu-fonts.css,
 * Mont-Muster) — dieser Worker ist der einzige Schalter.
 *
 * v1.3.1 (Live-Fall About-hello, SSLB-Diagnose 2026-08-10): Die
 * sanfte where-Deckung verlor gegen Elementors INSTANZ-Typografie
 * (vierfache Klassen-Staerke direkt am H2 — Referenz-Variation:
 * hello mit 100px-Widget-Typo). Haertung: endgueltige Prioritaet
 * auf der EINEN Eigenschaft statt Klassen-Wettruesten — der Worker
 * ist bewusster Opt-in (der Autor SETZT die Klasse, um die Stimme
 * zu erzwingen), und font-family hat keine Zustands-Nachbarn, die
 * ein hartes Gewicht toeten wuerde (anders als der Outline-Fall
 * der Nacht). Klasse weg = Stimme weg, der Schalter bleibt binaer.
 * ============================================================ */

.text-hand.text-hand,
.text-hand.text-hand :where(h1,h2,h3,h4,h5,h6,p,div,span,li,a,blockquote,cite,code,pre):not(:where(button,button *,.elementor-button,.elementor-button *,input,textarea,select,svg,svg *)) {
  font-family: 'Grape Nuts', cursive !important;
}
