/* Gemeinsame Ueberschriftenlogik. Groessen bleiben kontext- und seitenspezifisch. */
.lhb-heading {
  min-width: 0;
  max-width: 100%;
  hyphens: none;
  -webkit-hyphens: none;
  word-break: normal;
  overflow-wrap: normal;
  text-wrap: balance;
}
.lhb-heading.lhb-heading--hero { line-height: var(--lhb-heading-leading-tight) !important; }
.lhb-heading.lhb-heading--module { line-height: var(--lhb-heading-leading-normal) !important; }
.lhb-heading.lhb-heading--editorial-hero { line-height: var(--lhb-heading-leading-editorial-hero) !important; }
@media (max-width: 760px) {
  .lhb-heading { text-wrap: pretty; }
}

/* Architekturregel 1.1: Hero- und Displaytitel werden durch components.js
   stets gegen die reale Containerbreite geprueft. Die CSS-Basis verhindert
   parallel jede browserseitige Trennung oder intrinsische Rasterausweitung. */
.lhb-heading,
.lhb-heading * {
  hyphens: none;
  -webkit-hyphens: none;
  word-break: normal;
  overflow-wrap: normal;
}
.lhb-heading {
  box-sizing: border-box;
  min-inline-size: 0;
  max-inline-size: 100%;
}
.lhb-hero__content,
.lhb-split-module__head {
  min-inline-size: 0;
}

/* Komponentenvertrag 1.1: Rolle und Groesse sind getrennt. Die Klasse
   bestimmt Zeilenlogik und Font-Fit, nicht die konkrete visuelle Groesse. */
.lhb-heading--hero { text-wrap: balance; }
.lhb-heading--section,
.lhb-heading--module { text-wrap: balance; }
.lhb-heading--card { text-wrap: pretty; }

/* Komponentenvertrag 1.2: Gleichrangige mehrteilige Hero-Titel.
   Farbe und Kursivierung erzeugen keine kleinere Hierarchie. Alle Titelteile
   erben dieselbe Ausgangsgroesse; falls erforderlich, verkleinert das globale
   containerbezogene Font-Fit die gesamte h1-Gruppe gemeinsam. */
.lhb-heading--equal-rank > em,
.lhb-heading--equal-rank > span,
.lhb-heading--equal-rank .hero-title-accent,
.lhb-heading--equal-rank .ike-title-main,
.lhb-heading--equal-rank .ike-title-sub,
.lhb-heading--equal-rank .gb-title-main,
.lhb-heading--equal-rank .gb-title-sub {
  font-size: 1em !important;
}

/* Titel, deren Ausgangsgroesse zuvor ausschliesslich auf Kindspans lag. */
.ike-title.lhb-heading--equal-rank {
  font-size: clamp(38px, 4.8vw, 68px);
}
.gb-title.lhb-heading--equal-rank {
  font-size: clamp(36px, 4.35vw, 62px);
}

@media (max-width: 1280px) {
  .gb-title.lhb-heading--equal-rank { font-size: clamp(34px, 4vw, 56px); }
}
@media (max-width: 980px) {
  .gb-title.lhb-heading--equal-rank { font-size: clamp(36px, 6.8vw, 54px); }
}
@media (max-width: 640px) {
  .ike-title.lhb-heading--equal-rank { font-size: 38px; }
  .gb-title.lhb-heading--equal-rank { font-size: clamp(32px, 10.5vw, 46px); }
}

.course-title.lhb-heading--equal-rank {
  font-size: clamp(38px, 4.8vw, 68px);
}
@media (max-width: 640px) {
  .course-title.lhb-heading--equal-rank { font-size: clamp(28px, 8.5vw, 32px); }
}

/* Komponentenvertrag 1.3: gleichrangige Titel mit adaptiver Akzentzeile.
   Alle Titelteile starten mit derselben Schriftgroesse und demselben festen
   Zeilenraster. Nur eine als Akzentzeile erkannte Wortgruppe darf separat so
   weit verkleinert werden, dass sie ungeteilt in die vorhandene Breite passt.
   Farbe und Kursivierung begruenden keine kleinere Hierarchie. */
.lhb-heading--equal-rank {
  --lhb-equal-rank-gap: 0px;
}
.lhb-heading--equal-rank > em,
.lhb-heading--equal-rank > .hero-title-accent,
.lhb-heading--equal-rank > [class$="-title-sub"] {
  margin-top: var(--lhb-equal-rank-gap) !important;
  margin-bottom: 0 !important;
}
.lhb-heading--equal-rank > em,
.lhb-heading--equal-rank > .hero-title-accent {
  display: inline-block;
}


/* Komponentenvertrag 1.4: gemeinsamer Rhythmus mehrzeiliger Hero-Titel.
   Vorbild ist die bestaetigte Wortgruppe "Heimat- und Kulturvereine".
   Alle Zeilen verwenden dieselbe Grundzeilenhoehe. Akzentzeilen duerfen nur
   in der Schriftgroesse reduziert werden, wenn die Wortgruppe sonst nicht
   in den Container passt. Die Zeilenhoehe bleibt von dieser Reduktion
   unberuehrt; ein kleiner optischer Sicherheitsraum verhindert Kollisionen
   von Oberlaengen und Umlauten. */
.lhb-heading--equal-rank {
  --lhb-equal-rank-leading: var(--lhb-heading-leading-tight);
  --lhb-equal-rank-gap: .06em;
  line-height: var(--lhb-equal-rank-leading) !important;
}
.lhb-heading--equal-rank > span,
.lhb-heading--equal-rank > em,
.lhb-heading--equal-rank > .hero-title-accent,
.lhb-heading--equal-rank > [class$="-title-main"],
.lhb-heading--equal-rank > [class$="-title-sub"] {
  line-height: var(--lhb-equal-rank-leading) !important;
}
.lhb-heading--equal-rank > em,
.lhb-heading--equal-rank > .hero-title-accent,
.lhb-heading--equal-rank > [class$="-title-sub"] {
  margin-top: var(--lhb-equal-rank-gap) !important;
}


/* Update v240 – verbindlicher Zeilenrhythmus aller Modulüberschriften.
   Lokale Altregeln wie `.ak-head h2 { line-height:1 }` oder
   `.ik-module h2 { line-height:1.02 }` dürfen die semantische Rollenklasse
   nicht mehr übersteuern. Die Priorität ist deshalb Teil des globalen
   Komponentenvertrags und keine Seitenausnahme. */
.lhb-heading.lhb-heading--module {
  line-height: var(--lhb-heading-leading-normal) !important;
}
