/* ==========================================================================
   Hanna Sacher – Designsystem-Klassenschicht
   --------------------------------------------------------------------------
   Anwendung: Klassenname im Elementor-Feld "CSS-Klassen" (Erweitert) des
   jeweiligen Elements eintragen. Die Klasse ersetzt dann die entsprechenden
   Widget-Einstellungen — NICHT beides setzen: eine Einstellung am Element
   erzeugt eine Regel mit Spezifität (0,4,0) und schlägt die Klasse (0,1,0)
   bis (0,2,0). Genau so gewollt: das Element bleibt der Notausgang für
   Einzelfälle, die Klasse trägt den Normalfall.

   Alle Werte sind aus dem Startseiten-Prototyp (Post 9637) ausgelesen, der
   pixelweise gegen den Figma-Entwurf geprüft wurde.
   ========================================================================== */

:root {
	/* Markenfarben – identisch mit den Global Colors des Elementor-Kits */
	--hs-bordeaux:     #7A2742;
	--hs-rose:         #A23559;
	--hs-creme:        #FBF6F3;
	--hs-sand:         #F3E3D7;
	--hs-white:        #FFFFFF;
	--hs-icon:         #DDB2A5; /* X-/Haken-Icons */
	--hs-eyebrow-mute: #DDB2A5; /* gedämpftes Altrosa der Eyebrow-Zeilen */

	--hs-serif: "Editors Note", Georgia, "Times New Roman", serif;
	--hs-sans:  "Open Sans", -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;

	--hs-section-space: 90px; /* Standard-Sektionsluft oben/unten */
	--hs-gutter:        20px; /* seitlicher Mindestrand */
	--hs-content:     1240px; /* Content-Raster, identisch mit dem Kit */
}

/* ==========================================================================
   1. Sektionen
   Container-Padding läuft bei Elementor über CSS-Variablen, nicht über
   padding-Deklarationen. Deshalb werden hier die Variablen gesetzt.
   ========================================================================== */

.hs-section {
	--padding-top:    var(--hs-section-space);
	--padding-bottom: var(--hs-section-space);
	--padding-left:   var(--hs-gutter);
	--padding-right:  var(--hs-gutter);
}

.hs-section--tight { --padding-top: 70px; --padding-bottom: 70px; }
.hs-section--slim  { --padding-top: 48px; --padding-bottom: 48px; }
.hs-section--flush { --padding-top: 0;    --padding-bottom: 0;    }

.hs-section--creme    { background-color: var(--hs-creme);    }
.hs-section--sand     { background-color: var(--hs-sand);     }
.hs-section--bordeaux { background-color: var(--hs-bordeaux); }
.hs-section--rose     { background-color: var(--hs-rose);     }
.hs-section--white    { background-color: var(--hs-white);    }

/* Auf kleinen Geräten ist die volle Sektionsluft zu viel Leerraum. */
@media (max-width: 767px) {
	.hs-section       { --padding-top: 56px; --padding-bottom: 56px; }
	.hs-section--tight{ --padding-top: 48px; --padding-bottom: 48px; }
	.hs-section--slim { --padding-top: 36px; --padding-bottom: 36px; }
	.hs-section--flush{ --padding-top: 0;    --padding-bottom: 0;    }
}

/* Rasterflucht: eine randlose Fläche endet trotzdem exakt an der Kante des
   1240er-Contentrasters. 100vw ist hier falsch — es zählt die Scrollbar mit.

   Bewusste Ausnahme von der Regel "Element schlägt Klasse": diese beiden
   Helfer stehen auf der Spezifität von Elementors Element-Regel (0,3,0) und
   gewinnen über die Ladereihenfolge. Sonst könnte man sie nicht benutzen —
   Elementors Dimensions-Feld lässt keine einzelne Seite frei, und ein
   eingetragener Links-Wert würde die Rasterflucht still überschreiben. */
.elementor .e-con.hs-bleed-left  { --padding-left:  max(var(--hs-gutter), calc((100% - var(--hs-content)) / 2)); }
.elementor .e-con.hs-bleed-right { --padding-right: max(var(--hs-gutter), calc((100% - var(--hs-content)) / 2)); }

/* ==========================================================================
   2. Karten
   ========================================================================== */

.hs-card {
	--padding-top:    46px;
	--padding-right:  34px;
	--padding-bottom: 40px;
	--padding-left:   34px;
	--gap:        12px 12px;
	--row-gap:    12px;
	--column-gap: 12px;
	background-color: var(--hs-white);
}

.hs-card--creme    { background-color: var(--hs-creme);    }
.hs-card--sand     { background-color: var(--hs-sand);     }
/* Karte AUF Sandflaeche (Erfolgsgeschichten, Masse-Sektion) - Figma 596:235:
   #FFFFFF bei 30 % Deckkraft ueber Sand = #F7EBE3. Bewusst als rgba und nicht
   als Mischwert: so bleibt es Figmas Angabe. (24.09.2026) */
.hs-card--hauch    { background-color: rgba(255, 255, 255, 0.3); }
.hs-card--bordeaux { background-color: var(--hs-bordeaux); }
/* Rosé-Karte: 16.09.2026 ergänzt. Die Painpoint-Box der Challenge-LP steht im
   Figma auf #A23559 (Knoten 938:158, Rectangle 3) — gebaut war sie Bordeaux.
   Eigene Klasse statt Inline-Farbe, damit `.hs-on-dark` sie wie die Bordeaux-
   Variante behandelt und der Text weiß bleibt (s. Regel bei .hs-on-dark). */
.hs-card--rose     { background-color: var(--hs-rose);     }

/* Ruhigere Karte für Aufzählungen und Schritt-Kacheln. */
.hs-card--calm {
	--padding-top:    34px;
	--padding-right:  30px;
	--padding-bottom: 34px;
	--padding-left:   30px;
}

@media (max-width: 767px) {
	.hs-card {
		--padding-top:    34px;
		--padding-right:  24px;
		--padding-bottom: 30px;
		--padding-left:   24px;
	}
}

/* ==========================================================================
   3. Buttons
   Die Klasse sitzt am Widget-Wrapper, gestylt wird der innere <a>.
   Reihenfolge beachten: Basis zuerst, Varianten danach — gleiche Spezifität.
   ========================================================================== */

.hs-btn .elementor-button {
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 1px;
	border-radius: 0;
	padding: 17px 34px;
	transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}

/* Primär: Rosé auf hellem Grund. */
.hs-btn--primary .elementor-button {
	background-color: var(--hs-rose);
	color: var(--hs-white);
	fill:  var(--hs-white);
	border: 0;
}
.hs-btn--primary .elementor-button:hover,
.hs-btn--primary .elementor-button:focus {
	background-color: var(--hs-bordeaux);
	color: var(--hs-white);
}

/* Hell: SAND auf dunklem Grund (Bordeaux-/Rosé-Flächen).
   Figma 07.09.2026 gegengeprüft: im GESAMTEN Entwurf gibt es nur zwei
   Knopf-Flächen -- #A23559 (46x) und #F3E3D7 Sand (21x). Creme #FBF6F3
   kommt 54x vor, aber ausschliesslich als SEKTIONS-/Kartenflaeche
   (Problem, Angebote, Boni, Bewertungen), nie als Knopf.
   Vorher stand hier faelschlich --hs-creme: die Zuordnung war beim
   Aufbau des Systems geraten, nicht abgelesen. Hover spiegelt jetzt
   nach hell (Sand -> Creme), analog zu --primary (Rose -> Bordeaux). */
.hs-btn--light .elementor-button {
	background-color: var(--hs-sand);
	color: var(--hs-bordeaux);
	fill:  var(--hs-bordeaux);
	border: 0;
	padding: 18px 40px;
}
.hs-btn--light .elementor-button:hover,
.hs-btn--light .elementor-button:focus {
	background-color: var(--hs-creme);
	color: var(--hs-bordeaux);
}

/* Ghost: nur Kontur, für Fotos und die Kopfzeile. */
.hs-btn--ghost .elementor-button {
	background-color: transparent;
	color: var(--hs-white);
	fill:  var(--hs-white);
	border: 1px solid var(--hs-white);
	padding: 15px 34px;
}
.hs-btn--ghost .elementor-button:hover,
.hs-btn--ghost .elementor-button:focus {
	background-color: var(--hs-white);
	color: var(--hs-bordeaux);
	fill:  var(--hs-bordeaux);
}

/* ==========================================================================
   4. Typografie
   ========================================================================== */

/* Eyebrow – die gesperrte Versalzeile über den Überschriften.
   Die Sperrung ist im Entwurf immer proportional zur Schriftgröße (0,2 em). */
/* Laufweite 3 px und Zeilenhoehe 15 px sind die Figma-Werte: 25 Eyebrows mit
   Open Sans 14 / w700 / VERSAL tragen ALLE lh 15 und ls 3 (gemessen 09.09.2026).
   Die scheinbaren Ausreisser im Entwurf (lh 22 und 30) sind keine Eyebrows,
   sondern Knopftexte und Kartenueberschriften - sie haben Laufweite 0.
   Vorher: .2em (=2,8 px) und 1.6. Live gegengeprueft: kein Eyebrow ist mehrzeilig. */
.hs-eyebrow .elementor-heading-title {
	font-family: var(--hs-sans);
	font-size: 14px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 3px;
	line-height: 15px;
	color: var(--hs-eyebrow-mute);
}
/* --wide ist groesser: eigene Zeilenhoehe, sonst wuerden die 15 px der Basis greifen. */
/* Zeilenhoehe als PIXELWERT, nicht als Faktor: Figma zeigt 28,0 px, `1.6` ergab
   28,8. Der Faktor stand im Protokoll schon als offener Fehler („.hs-eyebrow--wide
   (1.6 statt 28)"). Korrigiert 15.09.2026 beim Presse-Abgleich. */
.hs-eyebrow--wide .elementor-heading-title { font-size: 18px; letter-spacing: .3em; line-height: 28px; } /* Hero */

/* --wide gilt NUR auf dem Desktop. Auf 375 px wurde die Kickerzeile dadurch
   groesser als die Ueberschrift darunter: Eyebrow 18/28,8 mit 5,4 px Laufweite
   gegen eine H1 von 29 px — der Kicker brach auf fuenf Zeilen um und erschlug
   die Ueberschrift (Chris, 15.09.2026: „da ist das Stirnfaltencheck viel zu
   gross und die Ueberschrift eigentlich viel zu klein").
   Maßstab ist die Ueber-Hanna-Seite, dort mobil gemessen: Eyebrow 14/15 mit
   3 px Laufweite, H1 34/42. Das sind genau die Werte der BASIS-Eyebrow —
   mobil faellt `--wide` deshalb auf sie zurueck. Gilt fuer jede Seite mit dem
   Modifier (7 Generatoren). */
@media (max-width: 767px) {
	.hs-eyebrow--wide .elementor-heading-title {
		font-size: 14px;
		letter-spacing: 3px;
		line-height: 15px; }
}
.hs-eyebrow--small .elementor-heading-title { font-size: 14px; }

/* Namen auf den Testimonial-Karten. Eigene Klasse, weil sie NICHT die
   Eyebrow-Metrik haben: Figma zeigt sie 34x als Open Sans 15/30, w700,
   ls 1,5, VERSAL, #7A2742 - ohne eine einzige Ausnahme. Bisher liefen sie
   ueber .hs-eyebrow--small (14/22,4/ls2,8) mit, was die Klasse fuer zwei
   verschiedene Dinge benutzt hat. Die offene Frage 9 an Hanna betrifft die
   SCHRIFTFAMILIE (Editor's Note?), nicht diese Masse. (09.09.2026) */
.hs-tname .elementor-heading-title {
	font-family: var(--hs-sans);
	font-size: 15px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	line-height: 30px;
	color: var(--hs-bordeaux);
}
.hs-eyebrow--rose     .elementor-heading-title { color: var(--hs-rose);     }
.hs-eyebrow--bordeaux .elementor-heading-title { color: var(--hs-bordeaux); }
.hs-eyebrow--light    .elementor-heading-title { color: var(--hs-white);    }
.hs-eyebrow--mute     .elementor-heading-title { color: var(--hs-eyebrow-mute); }
/* --mute holt das Altrosa zurueck, wo der Kontext `hs-on-dark` auf Sand stellt.
   Figma zeigt die Eyebrow auf dunklem Grund als #DDB2A5 (15x im Entwurf); Sand
   kommt als Eyebrow-Farbe gar nicht vor. Die Kontextregel bleibt trotzdem stehen:
   in der About-Sektion gibt Figma Creme vor, sie ist also nicht pauschal falsch.
   Deshalb ein Modifier statt einer Aenderung mit Reichweite. (09.09.2026) */

.hs-h1 .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 60px;
	font-weight: 300;
	line-height: 70px;
	color: var(--hs-bordeaux);
}
/* Zeilenhoehe 1.28: Editor's Note hat im GESAMTEN Figma diesen Faktor — bei 40 px
   sind es 83 Vorkommen mit lh 51,2 und KEINE Ausnahme (gemessen 09.09.2026).
   Vorher stand 1.2 = 48 px. Die am 08.09. gebaute .hs-about nutzt bereits 51. */
.hs-h2 .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 40px;
	font-weight: 300;
	line-height: 1.28;
	color: var(--hs-bordeaux);
}
/* 28 px statt 27 und Faktor 1.28: Figma zeigt Editor's Note 28/35,8 — 60 Vorkommen,
   ebenfalls ohne Ausnahme. Vorher 27 px / 1.25. (09.09.2026) */
.hs-h3 .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 28px;
	font-weight: 300;
	line-height: 1.28;
	color: var(--hs-bordeaux);
}
/* 16.09.2026: dieselben Werte fuer TEXT-EDITOR-Widgets mit `hs-h3`.
   Die Regel darueber trifft nur `.elementor-heading-title`, also Ueberschriften.
   Die Painpoint-Zitate der Challenge-LP sind Text-Widgets (sie brauchen die
   typografischen Anfuehrungszeichen im Fliesstext) und fielen deshalb auf
   `.elementor-widget-text-editor` = 18/34 zurueck, obwohl `hs-h3` gesetzt war.
   Figma 938:148/159/169/179 sagt uebereinstimmend Editor's Note 28/35,8.
   Zeilenhoehe als PIXELWERT, nicht als Faktor - Lehre vom 12.09.2026.
   Spezifitaet (0,2,1) schlaegt `.elementor-widget-text-editor` (0,1,0). */
.hs-h3.elementor-widget-text-editor p {
	font-family: var(--hs-serif);
	font-size: 28px;
	font-weight: 300;
	line-height: 35.8px;
	color: var(--hs-bordeaux);
}

/* 16.09.2026: dasselbe fuer `hs-h2` auf TEXT-EDITOR-Widgets — Hannas Ansage
   (WhatsApp): „Wir sehen uns am 12. Oktober in der Challenge." und „Bis zum
   12. Oktober – ich freu mich auf dich!" sollen in Editor's Note stehen,
   „so wie im letzten meeting auch fuer die anderen bitte-Seiten".
   🔑 Warum es ueberhaupt Open Sans war: die Zeile MUSS ein Text-Widget sein,
   weil der Thrive-Shortcode fuer das Datum nur dort laeuft — im Ueberschriften-
   Widget erschiene er als sichtbarer Text. `.hs-h2 .elementor-heading-title`
   trifft aber nur Ueberschriften, also fiel die Zeile auf
   `.elementor-widget-text-editor` zurueck. Exakt dieselbe Falle wie oben bei
   `hs-h3` am selben Tag.
   Reichweite vor dem Einbau ueber die DATENBANK gezaehlt: genau **zwei**
   Elemente site-weit tragen `hs-h2` auf einem Text-Widget (10814/10815, beide
   `ab-h`). Die Regel greift damit automatisch auch fuer die noch zu bauenden
   Bitte/Danke-Seiten, die aus demselben Generator kommen.
   🔴 DIESE REGEL SETZT NUR FAMILIE UND SCHNITT — bewusst KEINE Groesse und
   KEINE Farbe. Erster Anlauf hatte beides mitgesetzt (40/51,2 in Bordeaux) und
   damit die Zeile **unsichtbar** gemacht: sie steht auf dem Bordeaux-Band und
   war danach Bordeaux auf Bordeaux. Die Annahme, Elementors Inline-Werte
   wuerden gewinnen, war falsch — Elementor schreibt sie auf den CONTAINER
   (`.elementor-element-<id> .elementor-widget-container`), diese Regel trifft
   das `p` direkt und ist dafuer spezifischer.
   🔑 Lehre: eine Klassenregel, die auf `p` zielt, ueberschreibt die im Baukasten
   gesetzten Werte des Elements. Wer nur die Schriftart aendern will, aendert
   auch nur die Schriftart. */
.hs-h2.elementor-widget-text-editor p {
	font-family: var(--hs-serif);
	font-weight: 300;
}

@media (max-width: 1024px) {
	.hs-h1 .elementor-heading-title { font-size: 44px; line-height: 1.15; }
}
@media (max-width: 767px) {
	.hs-h1 .elementor-heading-title { font-size: 34px; line-height: 42px; }
	.hs-h2 .elementor-heading-title { font-size: 28px; }
	.hs-h3 .elementor-heading-title { font-size: 23px; }
	.hs-h3.elementor-widget-text-editor p { font-size: 23px; line-height: 29.4px; }
}

/* Fließtext – 18/34 ist der verifizierte Figma-Wert und zugleich die Vorgabe
   "große Schrift" für die Zielgruppe 50+.

   ACHTUNG, beide Selektoren sind nötig: Elementor 4 rendert mit "optimized
   markup" und lässt bei Text-Widgets sowohl den `.elementor-widget-container`
   als auch den umschließenden <p> weg — der Text sitzt dann direkt im
   Widget-Element. Ältere Versionen (und andere Widgets) haben den Wrapper
   weiterhin. Wer nur eines von beiden anspricht, stylt auf einer der beiden
   Seiten ins Leere, ohne dass es einen Fehler gibt. */
.hs-body,
.hs-body .elementor-widget-container {
	font-family: var(--hs-sans);
	font-size: 18px;
	font-weight: 400;
	line-height: 34px;
	color: var(--hs-bordeaux);
}
.hs-body p:last-child { margin-bottom: 0; }

/* Die Sektion "Ich bin Hanna Sacher" -- auf fuenf Seiten identisch gemeint.
   Figma 07.09.2026, Rahmen "About" auf drei Leinwaenden gemessen:
     LP Kurs Gesamt Gesicht 343:202 -- LP Challenge 938:341 -- LP Quiz 413:441
   Ueberschrift  Editor's Note 40 / w300 / Zeilenhoehe 51 / #FFFFFF
   Fliesstext    Open Sans     18 / w400 / Zeilenhoehe 26 / #FFFFFF
   Die GROESSEN kommen aus .hs-h2 (40) und .hs-body (18); hier stehen nur die
   beiden ZEILENHOEHEN, die von den Standardwerten abweichen (.hs-h2 rechnet
   1.2 = 48px, .hs-body setzt 34px).
   Bewusst eine eigene Klasse statt einer Aenderung an .hs-body: 18px-Text hat
   im Entwurf mehrere Zeilenhoehen (26x84, 30x38, 34x15, 28x14, 24x2) -- eine
   zentrale Umstellung wuerde Sektionen treffen, die richtig sind. */
.hs-about .hs-h2 .elementor-heading-title { line-height: 51px; }
.hs-about .hs-body,
.hs-about .hs-body .elementor-widget-container { line-height: 26px; }

/* Kleinzeile als TEXT-Widget einfaerben.
   Die Regel darunter trifft nur `.elementor-heading-title` -- von 158
   `hs-note` auf der Seite sind aber 151 Text-Widgets (gemessen 08.09.2026).
   Ohne eigene Farbe erben die Elementors Kit-Textfarbe und wirken schwarz
   (Chris zur VIP-Seite: "die Farbe ist schwarz").
   🔑 DIE STELLUNG IST HIER ENTSCHEIDEND, nicht nur die Spezifitaet:
   `.hs-on-dark .elementor-widget-text-editor` weiter unten hat dieselbe
   Gewichtung (0,2,0). Stand diese Regel DAHINTER, gewann sie und faerbte
   die Kleinzeilen auf dunklen Sektionen bordeaux statt weiss -- genau so
   am 08.09.2026 einmal passiert und im Browser aufgefallen. Deshalb VOR
   den Kontextschaltern, wie `.hs-body` es auch macht.
   Elementors Einzelfarben (0,3,0) bleiben unberuehrt -- die grauen
   Testimonial-Zitate auf 9790/9809 aendern sich dadurch nicht. */
.hs-note.elementor-widget-text-editor { color: var(--hs-bordeaux); }

/* Kleingedruckte Zeile unter Buttons ("Kostenlos · In unter 3 Minuten · …") */
.hs-note .elementor-heading-title {
	font-family: var(--hs-sans);
	font-size: 14px;
	font-weight: 400;
	line-height: 20px;
	color: var(--hs-bordeaux);
}

/* ==========================================================================
   5. Kontextschalter
   Auf einen Container gelegt, dreht .hs-on-dark alle Textfarben darin auf
   Weiß. Muss nach den Typo-Regeln stehen: gleiche Spezifität, späteres
   Vorkommen gewinnt.
   ========================================================================== */

.hs-on-dark .elementor-heading-title,
.hs-on-dark .elementor-widget-text-editor,
.hs-on-dark .elementor-widget-container,
.hs-on-dark .hs-body,
.hs-on-dark p,
.hs-on-dark li {
	color: var(--hs-white);
}
.hs-on-dark .hs-eyebrow .elementor-heading-title { color: var(--hs-sand); }
/* Der Modifier --mute steht weiter oben auf (0,2,0) und verliert gegen die Zeile
   darueber (0,3,0). Deshalb hier auf gleicher Spezifitaet und SPAETER nachgezogen.
   Gemessen, nicht vermutet: ohne diese Zeile blieb die Eyebrow Sand. (09.09.2026) */
.hs-on-dark .hs-eyebrow--mute .elementor-heading-title { color: var(--hs-eyebrow-mute); }
/* Dieselbe Falle fuer --light: der Modifier stand auf (0,2,0) und verlor gegen die
   Sand-Zeile (0,3,0) - die Eyebrow der Erfolgsgeschichten rendete Sand, obwohl der
   Generator ausdruecklich `--light` setzt und Figma dort WEISS vorgibt (596:104 und
   596:384; es sind die beiden einzigen weissen Eyebrows im ganzen Entwurf, sonst
   14x Altrosa). Deshalb auf gleicher Spezifitaet und SPAETER nachgezogen.
   Sichtbare Reichweite: nur die Erfolgsgeschichten - die beiden anderen
   `--light`-Stellen (Bonus-Banner der Kursseiten) sind standardmaessig
   ausgeblendet, der Blog-Hero hat seine eigene Regel. (12.09.2026) */
.hs-on-dark .hs-eyebrow--light .elementor-heading-title { color: var(--hs-white); }

/* ---- FAQ-Akkordeon (nativ, ohne Plugin-Abhaengigkeit) ---- */
.hs-faq .hs-faq__item{border-bottom:1px solid #D9C4B6;}
.hs-faq .hs-faq__frage{list-style:none;cursor:pointer;display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:20px 0;font-family:'Open Sans',sans-serif;font-size:16px;font-weight:600;line-height:26px;color:#7A2742;}
.hs-faq .hs-faq__frage::-webkit-details-marker{display:none;}
.hs-faq .hs-faq__frage::after{content:'+';flex:0 0 auto;font-size:24px;font-weight:300;line-height:24px;color:#A23559;}
.hs-faq .hs-faq__item[open] .hs-faq__frage::after{content:'\2212';}
.hs-faq .hs-faq__antwort{padding:0 0 24px;font-size:14px;line-height:25px;}
.hs-faq .hs-faq__antwort p{margin:0 0 14px;}
.hs-faq .hs-faq__antwort p:last-child{margin-bottom:0;}
.hs-faq .hs-faq__antwort ul{margin:0 0 14px;padding-left:20px;}
.hs-faq .hs-faq__antwort li{margin-bottom:8px;}

/* ---- Runde Bonus-Fotos ---- */
.hs-bonus-foto img{border-radius:50%;object-fit:cover;aspect-ratio:1/1;}

/* ---- Hervorhebungen in Bewertungs-Karten ---- */
.hs-note mark,.hs-body mark{background:#F6DCDC;color:inherit;padding:0 2px;}

/* Serifenlose Ueberschrift. Alle drei Groessenklassen (.hs-h1/-h2/-h3) sind
   Editor's Note; fuer Unterzeilen braucht es dieselbe Groesse in Open Sans.
   Additiv, aendert von sich aus nichts -- greift nur, wo die Klasse steht.
   Erste Verwendung: VIP-Aufzeichnungsseite 10864 (Chris, 08.09.2026). */
.hs-h--sans .elementor-heading-title { font-family: var(--hs-sans); font-weight: 400; }

/* ---- Helle Karte in dunkler Sektion: Textfarbe zurueckdrehen ----
   .hs-on-dark faerbt alles darin weiss. Karten, die selbst hell sind,
   muessen davon ausgenommen werden, sonst steht weisse Schrift auf Sand. ---- */
.hs-on-dark .hs-card:not(.hs-card--bordeaux),
.hs-on-dark .hs-card:not(.hs-card--bordeaux) *{color:#7A2742;}
.hs-on-dark .hs-card:not(.hs-card--bordeaux) .hs-eyebrow{color:#7A2742;}
.hs-on-dark .hs-card:not(.hs-card--bordeaux) .hs-eyebrow--rose{color:#A23559;}
/* Zeile 291 (`… .hs-card:not(…) *`) trifft das Ueberschriften-Element DIREKT mit (0,3,0)
   und schlaegt damit die Rose-Regel darueber, die nur den Wrapper einfaerbt.
   Figma gibt fuer die Garantie-Eyebrow ausdruecklich #A23559 vor -> gezielt nachziehen. */
.hs-on-dark .hs-card:not(.hs-card--bordeaux) .hs-eyebrow--rose .elementor-heading-title{color:var(--hs-rose);}

/* ---- Presse-Logos auf einheitliche Hoehe ---- */
.hs-presse-logo img{height:38px;width:auto;max-width:100%;object-fit:contain;}

/* ---- Gleich hohe Karten in einer Zeile ----
   `hs-gleich` auf die ZEILE legen: alle Spalten strecken sich auf die Hoehe der
   hoechsten, die Karte darin fuellt die Spalte. Kein `height:100%` auf der Spalte -
   eine feste Hoehe gegen einen Elternteil ohne definierte Hoehe hebelt
   `align-self:stretch` aus und die Spalte faellt auf Inhaltshoehe zurueck. ---- */
.hs-gleich > .e-con{align-self:stretch;}
.hs-gleich > .e-con > .e-con{height:100%;}

/* 🔴 `hs-gleich` streckt die SPALTE - nicht aber Elementors Widget-Huelle darin.
   Steht in der Spalte ein HTML-Widget statt eines Containers, bleibt es auf
   Inhaltshoehe stehen und die Karte endet ueber der Spaltenkante (gemessen
   15.09.2026 auf der Ueber-Mich-Seite: Spalte 697, Widget 674 - 23 px Luft
   unter der weissen Flaeche). Bis dahin verdeckt, weil `.hs-pv` eine
   `min-height` hatte, auf die alle Karten fielen.
   ⚠️ Bewusst als EIGENE Klasse und nicht an `.hs-gleich`: die steckt 21x in
   fuenf Seiten - eine Aenderung dort trifft vier fertige Seiten ungeprueft.
   Die anderen Seiten sind auf denselben Fall noch zu pruefen. */
.hs-pvreihe > .e-con > .elementor-widget-html,
.hs-pvreihe > .e-con > .elementor-widget-html > .elementor-widget-container { height: 100%; }

/* ---- Stapel: Icon/Foto liegt AUF der Kartenkante ----
   Ohne z-index malt die spaeter folgende Flaeche ueber das Icon - es sieht aus,
   als saesse das Icon hinter der Karte. ---- */
.hs-stapel{display:flex;flex-direction:column;height:100%;}
.hs-stapel__vorn{position:relative;z-index:2;flex:0 0 auto;}
.hs-stapel__flaeche{position:relative;z-index:1;}
/* Elementor setzt flex-grow je Container mit gleicher Spezifitaet - ohne
   !important faellt die Flaeche auf Inhaltshoehe zurueck. */
.hs-stapel > .hs-stapel__flaeche{flex-grow:1 !important;}

/* Runde Bonus-Fotos */
.hs-bonus-foto img{border-radius:50%;object-fit:cover;aspect-ratio:1/1;}

/* ---- Formular (Warteliste) ---- */
/* 16.09.2026 auf Figma gezogen (Chris' Freigabe): die Eintragefelder sind im
   Entwurf 415 px breit (938:374/375 und 938:327/328, je x 835 w 415), gebaut
   waren sie 458 - die alte Grenze von 520 px liess sie einfach die Spalte
   fuellen. Die Challenge-LP ist laut Bestandsaufnahme der Massstab fuer alle
   Eintrageformulare, deshalb hier zentral und nicht seitenweise.

   🔴 NACHTRAG, selber Tag (Chris' Fund): 415 hart gesetzt war zu eng. Unsere
   Knopftexte sind laenger als Figmas "Meinen Platz jetzt sichern - kostenlos"
   (339 px) - sie kommen aus Notion. Gemessen auf der Anmeldeseite:
       "MEINEN PLATZ JETZT SICHERN - FUER 0 EUR KOSTENLOS"  braucht 459
       "JA, ICH MOECHTE IN 5 TAGEN ECHTE EFFEKTE SEHEN!"     braucht 453
   Bei 415 stand das letzte Wort halb ausserhalb des Knopfes. Die Warteliste
   ("AUF DIE WARTELISTE - KOSTENLOS") passt dagegen.
   Deshalb KEINE feste Breite je Seite, sondern eine Regel, die sich selbst
   einstellt: `width: max-content` macht das Formular so breit wie sein
   breitestes Kind - also wie der Knopf -, `min-width` haelt Figmas 415 als
   Untergrenze, `max-width: 100%` verhindert, dass es aus der Spalte laeuft.
   Kurzer Knopftext -> 415 wie im Entwurf. Langer -> genau so breit wie noetig.
   Damit braucht keine weitere Seite mit langem Knopftext eine Sonderregel. */
.hs-form{display:flex;flex-direction:column;gap:6px;width:max-content;min-width:min(415px,100%);max-width:100%;margin:0 auto;text-align:left;}

/* 🔴 16.09.2026 (Chris' Fund): Formular und die Aufzaehlung darunter ("Für 0 €
   – keine versteckten Kosten." …) standen auf verschiedenen linken Kanten.
   Das Formular ist zentriert und nur so breit wie sein Knopf, die Aufzaehlung
   fuellte die ganze 48%-Spalte und begann dadurch weiter links.
   Der Generator legt beide jetzt in EINE `.hs-formbox`. Diese Box traegt die
   Breite - so breit wie ihr breitestes Kind, also wie der Knopf, mindestens
   Figmas 415 px -, und beide Kinder fuellen sie zu 100 %. Damit liegen Felder,
   Knopf und Aufzaehlung zwangslaeufig auf derselben linken Kante, unabhaengig
   von der Laenge des Knopftextes.
   Doppelte Klasse gegen Elementors `.e-con{width:100%}` (0,1,0). */
.hs-formbox.hs-formbox {
	width: max-content;
	min-width: min(415px, 100%);
	max-width: 100%;
	margin-inline: auto;
}
/* Innerhalb der Box gibt die Box das Mass vor, nicht mehr das Formular. */
.hs-formbox .hs-form { width: 100%; min-width: 0; }

/* --- Die Aufzaehlung auf die Kante des Formulars (20.09.2026) -------------
   Chris, nachdem die drei Punkte ueber das Formular gewandert waren: sie
   sollen „linksbuendig mit dem Eintrageformular" stehen.

   GEMESSEN (1440 px), linke Kanten in der `.hs-formbox`:
       Label / Eingabefeld / Knopf   799   (rel 0)
       `li` der Aufzaehlung          839   (rel 40)   <- 40 px zu weit rechts
   Ursache: der Browser-Standard `ul { padding-left: 40px }`, in dem die
   Aufzaehlungspunkte gezeichnet werden (`list-style-position: outside`).

   🔑 Der Einzug laesst sich nicht einfach auf 0 setzen, ohne die Punkte zu
   verlieren: bei `outside` wuerden sie links aus der Box ragen, bei `inside`
   rutscht der TEXT um die Punktbreite nach rechts. Deshalb Punkte aus und ein
   eigener Punkt im Textfluss — so beginnt die Zeile exakt auf der Formularkante.
   ⚠️ Das Figma kennt diese Aufzaehlung gar nicht (die CTA-Rahmen fuehren nur
   Ueberschrift, Datumszeile, Felder und Knopf) — sie kommt aus Notion. Es gibt
   hier also keine Entwurfsvorgabe, an der man sich ausrichten koennte. */
.hs-formbox .hs-body ul { list-style: none; padding-left: 0; margin: 0; }
.hs-formbox .hs-body li { padding-left: 0; }
.hs-formbox .hs-body li::before {
	content: "•";
	margin-right: 8px;
}
.hs-form__label{font-family:'Open Sans',sans-serif;font-size:13px;font-weight:600;color:#7A2742;margin-top:10px;}
/* Feldhoehe 46 statt 52 (16.09.2026, Figma 938:374 h=46): 10 Polster oben
   + 24 Zeilenhoehe + 10 unten + 2 Rahmen = 46. */
.hs-form__feld{font-family:'Open Sans',sans-serif;font-size:15px;line-height:24px;color:#7A2742;background:#FFFFFF;border:1px solid #DDB2A5;border-radius:0;padding:10px 16px;width:100%;}
.hs-form__feld::placeholder{color:#B79A92;}
.hs-form__feld:focus{outline:none;border-color:#A23559;}
.hs-form__btn{margin-top:20px;font-family:'Open Sans',sans-serif;font-size:14px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#FFFFFF;background:#A23559;border:0;border-radius:0;padding:16px 28px;cursor:pointer;}
.hs-form__btn:hover{background:#7A2742;}
.hs-form__notiz{margin-top:14px;font-family:'Open Sans',sans-serif;font-size:12px;line-height:18px;color:#A23559;background:#F6DCDC;padding:10px 12px;}

/* ==========================================================================
   6. Erfolgsgeschichten – Story-Karten
   --------------------------------------------------------------------------
   Der Figma-Entwurf (Node 596:2) ist ein MUSTER: Er zeigt zwei Sektionen, den
   Einschub, den Zwischen-CTA und die Masse-Sektion. Die uebrigen acht
   Einwand-Sektionen folgen demselben Aufbau. Gemessene Werte aus dem Render:
   Karte 1240 px breit, Innenabstand 40, Bildspalte 730, Spalte 50, Text 380.
   Fotovergleich-Karte 308 px hoch, Video-Karte 522 px.

   Bild links / rechts wechselt zeilenweise. Das macht der Generator ueber die
   REIHENFOLGE der Spalten, nicht ueber `flex-direction: row-reverse` – so
   stimmt auch die Vorlese- und Tab-Reihenfolge mit dem Gesehenen ueberein.
   ========================================================================== */

/* Name ueber einem Fotovergleich: Editor's Note, wie auf allen anderen Seiten */
.hs-story__name .elementor-heading-title {
	/* 🔴 24.09.2026 UMGESTELLT - der offene Punkt von oben ist entschieden.
	   Hier stand bis dahin Figmas Open Sans Bold 15px/uppercase/ls 1,5 mit dem
	   Vermerk: "Hanna wuenschte im Call Editor's Note; in 15px traegt diese
	   Schrift aber nicht ... Chris hat am 05.09.2026 entschieden: hier gilt
	   Figma. BEI HANNA GEGENPRUEFEN."
	   Hanna hat gegengeprueft (Notion, 17.09.2026): "Vorname ebenfalls wieder
	   wie ueberall einheitlich in Editors Note." und an anderer Stelle
	   "gefaellt mir gut in Editors note!". Damit gilt die seitenuebergreifende
	   Namensregel auch hier.
	   🔑 Die Werte sind die verbindliche Rezeptur, live von der Startseite 9637
	   abgelesen und seit dem 21.09. auf der Quiz-LP im Einsatz:
	   Editor's Note 40/51,2, w300, ls 0, text-transform none, #7A2742.
	   ⚠️ `text-transform` und `letter-spacing` muessen AUSDRUECKLICH zurueck-
	   gesetzt werden - sonst blieben die Versalien und die Sperrung stehen.
	   ⚠️ Die Klasse laeuft ausschliesslich auf 10167 (geprueft am 24.09.2026,
	   ebenso `hs-story__person` und `hs-pls`) - deshalb hier im CSS und nicht
	   als Eigenwert an 55 einzelnen Widgets. */
	font-family: var(--hs-serif);
	font-size: 40px;
	font-weight: 300;
	text-transform: none;
	letter-spacing: 0;
	line-height: 51.2px;
	color: var(--hs-bordeaux);
}

/* Kurzes Zitat neben einem Fotovergleich */
.hs-story__zitat,
.hs-story__zitat .elementor-widget-container {
	font-family: var(--hs-sans);
	font-size: 18px;
	/* 🔴 24.09.2026: `font-style: italic` ENTFERNT. Hanna (Notion, 17.09.):
	   "Auf den anderen Seiten haben wir Zitate oder Gedankengaenge in kursiv
	   und das moechte ich auch so beibehalten. Bei DIESER Seite, wo ja fast der
	   gesamte Fliesstext bei den Testimonials Zitate sind, finde ich es
	   leserlicher, nicht kursiv zu machen, sondern Standard und dafuer die
	   Fettungen." Chris hat dasselbe unabhaengig angesagt.
	   ⚠️ Das Kursiv kam aus DIESER Klasse, nicht aus `<em>` im Text - im
	   Generator gibt es kein einziges `<em>`. Wer es im Markup sucht, findet
	   nichts. Die Klasse laeuft nur auf 10167. */
	font-style: normal;
	line-height: 30px;
	color: var(--hs-bordeaux);
}
.hs-story__zitat p:last-child { margin-bottom: 0; }

/* Name ueber einem Video-Testimonial: gross und in Serif */
.hs-story__person .elementor-heading-title {
	font-family: var(--hs-serif);
	/* Figma (Erfolgsgeschichten): Editor's Note 40px #7A2742 - vorher 36px und
	   Rose, was weder dem Entwurf noch Hannas Regel entsprach (04.09.2026). */
	font-size: 40px;
	font-weight: 300;
	/* Figma 596:420 / 596:434 / 603:451: lh 51,2 px = 1,28 x 40 (Editor's-Note-Regel).
	   1,15 ergab 46 px. (12.09.2026) */
	line-height: 51.2px;
	color: var(--hs-bordeaux);
}

/* ---- Kleine Serifen-Überschrift 24/30,72 ----
   Eigener Figma-Stil, NICHT eine Ausnahme von `.hs-h3`: Editor's Note 24 px
   kommt **11x sichtbar** im Entwurf vor — 6x auf der Presse-Seite
   (Artikel- und Podcast-Titel) und 5x auf Über Mich (Timeline-Kartentitel).
   `.hs-h3` bleibt davon unberührt: dessen 28/35,8 sind mit 52 Vorkommen
   ebenso eindeutig belegt. Gezählt am 15.09.2026 über alle sichtbaren Knoten.
   Über Mich nutzt dafür die eigene `.hs-tl__titel`; die bleibt, weil die Seite
   fertig ist — diese Klasse hier ist die neutrale Fassung für alle anderen. */
.hs-h4 .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 24px;
	font-weight: 300;
	line-height: 30.72px;
	color: var(--hs-bordeaux);
}

/* ---- Anrisstext 14/22 ----
   Figma Presse 633:309 (Print) — die drei Artikel-Anrisse stehen auf Open Sans
   14/22, nicht auf den 18/34 von `.hs-body`. Eigene Klasse statt einer
   Schriftgröße am Widget, damit eine spätere zentrale Korrektur sie erreicht. */
.hs-anriss,
.hs-anriss .elementor-widget-container,
.hs-anriss p {
	font-family: var(--hs-sans);
	font-size: 14px;
	line-height: 22px;
	color: var(--hs-bordeaux);
}

/* Problem / Loesung / Ergebnis.
   Die Beschriftung steht als <strong> am Absatzanfang und wird per display:block
   zur eigenen Zeile – so bleibt das HTML ein normaler Absatz und der Text
   haengt nicht an einer Listenstruktur. */
.hs-pls,
.hs-pls .elementor-widget-container {
	font-family: var(--hs-sans);
	font-size: 14px;
	line-height: 22px;
	color: var(--hs-bordeaux);
}
.hs-pls p { margin: 0 0 20px; }
.hs-pls p:last-child { margin-bottom: 0; }
/* 🔴 24.09.2026: `display:block` + `uppercase` hier ENTFERNT. Die Regel galt
   JEDEM <strong> im Block - richtig nur, solange dort ausschliesslich die
   Beschriftungen fett standen. Seit Hannas Notion-Fettungen stehen auch
   Fettungen mitten im Satz dort, und jede riss den Absatz zu einer eigenen
   Versalzeile auf (Chris hat es gefunden: Barbara, Eveline, Rosemarie ...).
   ➜ Die Beschriftung traegt jetzt `hs-vnlabel` (16.x unten, gleiche Werte:
   14 px / w700 / uppercase / block / 2 px) - gesetzt im Generator
   `erfolgsgeschichten.py`, `_pls_labels`. Hier bleibt nur die Fettung.
   Figma 596:412: Zeichen-Override auf 14 px, nur `fontWeight: 700`. */
.hs-pls strong {
	font-weight: 700;
}

/* P/L/E auf einer BILD-Karte (Screenshot statt Video: Sabine, Manuela) -
   24.09.2026. Figma hat 14/22 nur fuer die Videokarte (`596:412`, Name 40 px
   Editor's Note). Eine Karte mit kleinem Versal-Namen + Bild ist dort eine
   Fotokarte, Text **18/30** (`596:393`) - wie `.hs-story__zitat`. Vorher stand
   Sabines Text neben Cocos Zitat sichtbar kleiner (Chris).
   Die Beschriftungen (`hs-vnlabel`, 14 px) bleiben - wie in den Zitat-Karten. */
.hs-pls--bild,
.hs-pls--bild .elementor-widget-container {
	font-size: 18px;
	line-height: 30px;
}

/* Ankerlink unter einem Zitat ("Ich will auch solche Ergebnisse") */
.hs-story__link a {
	font-family: var(--hs-sans);
	/* Figma 596:247: Open Sans 14 / 30, w700. Vorher 15 px / w600 und die
	   Zeilenhoehe fehlte ganz - sie kam mit 34 px aus der Grundschrift.
	   Die Unterstreichung ist unsere Zutat (Figma zeigt keine), sie bleibt,
	   weil der Link sonst nicht als Link zu erkennen waere. (12.09.2026) */
	font-size: 14px;
	font-weight: 700;
	line-height: 30px;
	color: var(--hs-bordeaux);
	text-decoration: underline;
	text-underline-offset: 4px;
}
.hs-story__link a:hover { color: var(--hs-rose); }

/* 16:9-Einbettung ohne Plugin-Abhaengigkeit.
   Die Flaeche traegt schon vor dem Laden die Sandfarbe, damit an der Stelle
   kein weisses Loch steht – und `aspect-ratio` reserviert die Hoehe, sodass
   Sprungmarken weiter unten nicht durch Nachladen verrutschen. */
/* 🔴 Ein HTML-Widget braucht eine DEFINITE Breite, sonst kollabiert seine Hoehe auf 0.
   Gefunden am 12.09.2026 durch Chris' Handy-Screenshot: die Videos lagen MOBIL ueber
   dem Text. Ursache gemessen, nicht vermutet:
     Spalte (Flex) -> HTML-Widget (Hoehe 0) -> .hs-video (Hoehe 161, korrekt)
   `offsetHeight` des Widgets war 0, `scrollHeight` 161 - der Inhalt ragte also heraus.
   Grund: Wenn ein Flex-Container die Hoehe seines Kindes ermittelt, rechnet er mit
   UNBESTIMMTER Breite. `.hs-video { width: 100% }` ist dann ebenfalls unbestimmt,
   `aspect-ratio` kann keine Hoehe ableiten und das Widget traegt 0 bei.
   Auf dem Desktop faellt es nicht auf, weil die Spalte dort 62 % breit ist.

   Sieben Kandidaten durchgemessen; nur eine definite Breite am Widget wirkt
   (padding-top-Prozent, container-queries, flex-shrink, flow-root, display:grid
   halfen alle NICHT - Prozentwerte scheitern an derselben unbestimmten Breite).
   Das Starterset war als einziges heil: dort steht `hs-video` direkt AM Widget.

   Reichweite gemessen: bei 1440 und 768 px aendert die Regel NICHTS (0 von 34
   Widgets). Bei 375 px korrigiert sie Erfolgsgeschichten 34/34, Challenge 4/5
   (zwei Bewertungsgitter standen sogar auf Breite 0) und die Aufzeichnungen 1/1.
   Breiten und x-Positionen bleiben ueberall gleich - nur Hoehen werden richtig. */
.elementor-widget-html { width: 100%; }

.hs-video {
	position: relative;
	width: 100%;
	aspect-ratio: 16 / 9;
	background: #E4D3C8;
}
.hs-video iframe {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

/* Auf dem Handy stapeln die Spalten. Steht das Bild im Entwurf rechts, kaeme es
   dabei UNTER den Text – bei einem Vorher-Nachher-Vergleich ist das die falsche
   Reihenfolge. `column-reverse` dreht nur die Darstellung, nicht das Markup.
   Das !important ist noetig, weil Elementor `flex-direction` je Container mit
   gleicher Spezifitaet setzt. */
@media (max-width: 767px) {
	.hs-story--bildrechts { flex-direction: column-reverse !important; }
}

/* Bewertungs-Screenshots packen statt rastern.
   Die Screenshots sind sehr unterschiedlich hoch (600x500 bis 600x900). In einem
   starren Spaltenraster richtet sich jede Zeile nach dem hoechsten Bild und
   darunter klaffen Luecken. `columns` fuellt stattdessen von oben nach unten auf.
   `break-inside: avoid` verhindert, dass ein Screenshot zwischen zwei Spalten
   zerschnitten wird. */
.hs-ssgitter {
	column-count: 3;
	column-gap: 24px;
}
.hs-ssgitter img {
	display: block;
	width: 100%;
	height: auto;
	margin: 0 0 24px;
	break-inside: avoid;
}
@media (max-width: 1024px) { .hs-ssgitter { column-count: 2; } }
@media (max-width: 600px)  { .hs-ssgitter { column-count: 1; } }

/* Hero mit Foto: auf dem Handy Text ueber Bild lesbar halten.
   Auf dem Desktop steht der Text in der leeren Wandflaeche links neben Hanna.
   Auf 375 px bleibt dafuer kein Platz - `cover` zeigt dort fast nur noch sie,
   und der Text lag ohne diese Flaeche mitten im Motiv.
   Die Flaeche liegt UNTER dem Inhalt (::before + z-index), damit das Foto
   sichtbar bleibt und nur der Kontrast steigt. */
.hs-hero-foto { position: relative; }
@media (max-width: 767px) {
	.hs-hero-foto::before {
		content: "";
		position: absolute;
		inset: 0;
		background: rgba(247, 235, 227, .78);
		pointer-events: none;
	}

	/* Heroes mit EIGENEM mobilen Bild brauchen GAR KEINEN Schleier.
	   Dort steht der Text auf eigens freigeraeumter Wandflaeche und Hanna sitzt
	   darunter — der Schleier wuerde nur SIE aufhellen.
	   🔑 Geschichte dieser Regel: am 15.09.2026 als VERLAUF angelegt (oben voll,
	   ab 64 % frei), dann nicht benutzt, weil der Hero auf „Hanna hinter dem
	   Text" umgebaut wurde. Am 19.09.2026 wieder in Betrieb — diesmal ganz ohne
	   Schleier, auf Hannas Vorgabe: *„hinter dem bordeauxfarbenen Text soll
	   dieses Beige zu sehen sein, so wie rechts auf dem Desktop."* Auf dem
	   Desktop liegt dort kein Schleier; mobil jetzt auch nicht mehr.
	   GERECHNET: Bordeaux #7A2742 auf der Wand (223, 205, 190) = **6,20 : 1** —
	   deutlich ueber AA (4,5). Der Schleier war fuer Lesbarkeit also ohnehin
	   nicht noetig, sobald der Text nicht mehr auf dem Motiv liegt.
	   ⚠️ Doppelte Klasse, weil die Regel darueber dieselbe Gewichtung (0,1,0)
	   hat — ein einfacher Modifier waere gesetzt und wirkungslos.
	   ⚠️ Gilt NUR fuer Heroes mit dieser Klasse. `.hs-hero-foto` steht auf drei
	   Seiten (Erfolgsgeschichten, Starterset, Stirnfalten-Check); die anderen
	   beiden behalten ihren flaechigen Schleier. */
	.hs-hero-foto.hs-hero-foto--eigenmobil::before {
		background: none;
	}
	.hs-hero-foto > * { position: relative; z-index: 1; }
}

/* --- Feste Zeilenbreite darf nie über den Viewport hinausragen -------------
   Die Hero-Zeilen tragen `width: 1240px` (Starterset, Stirnfalten-Check,
   Challenge-LP, Challenge-Warteliste). Elementor setzt das als feste Breite
   OHNE `max-width` — bei Fenstern zwischen 768 und 1240 px schiebt die Zeile
   die Seite waagerecht auf. Gemessen 15.09.2026 bei 1009 px: Überstand 115 px
   auf allen vier Seiten, die Seite ließ sich seitlich scrollen.
   `max-width: 100%` lässt die Zeile ab da mitschrumpfen; die Spalten stehen
   ohnehin prozentual (46/54) und stauchen sauber. */
.hs-hero-foto > .e-con,
.hs-hero-dunkel > .e-con,
.elementor .e-con.hs-breitfest { max-width: 100%; }

/* `hs-breitfest` ist für jeden Container gedacht, der aus dem Entwurf eine
   feste Pixelbreite mitbringt. Elementors eigenes `max_width` am Container
   wird nicht ausgespielt (15.09.2026 geprüft: `max-width` blieb `none`),
   deshalb über die Klasse. Offen stehen noch: `ga-box` (1030 px, vier
   Kursseiten) und `jd-foto` (1000 px, Quiz-LP). */

/* --- Hero mit GANZER Figur (15.09.2026) -------------------------------------
   Chris: *„da haben wir ja das Bild, wo sie steht, und da sollte sie dann schon
   in der Gaenze auch zu sehen sein."* Auf dem Stirnfalten-Check war sie ab dem
   Knie ab.

   Warum eine feste Hoehe das nicht kann: `cover` skaliert auf die BREITE.
   Hannas Hoehe am Schirm ist 866/2200 x Fensterbreite = 0,394 x W — bei 1920 px
   also 756 px. In einen 640 px hohen Hero passt sie nur bis 1626 px Fensterbreite.
   Die Herohoehe muss also MITWACHSEN.

   Gerechnet (Bild 2200x1133, Hanna y154..1020, Ausschnitt 60 % von oben):
     Fenster   Hero   Luft ueber Kopf   Luft unter den Fuessen
       1440     640          40 px              33 px
       1920     826          36 px              34 px
       2560    1101          48 px              44 px
       3440    1479          66 px              64 px
   `max(640px, …)` haelt die untere Grenze, damit der Hero auf schmalen
   Desktops nicht flach zusammenfaellt.
   Nur ab 768 px — darunter gilt die eigene mobile Hoehe aus dem Generator. */
@media (min-width: 768px) {
	.hs-hero-foto.hs-hero-foto--ganzfigur { min-height: max(640px, 43vw);}

	/* Starterset: anderes Bild, anderer Wert. Dort SITZT Hanna und reicht bis an
	   die Unterkante (y212..1132 von 1133) — ein Ausschnitt wie beim
	   Stirnfalten-Check wuerde sie immer anschneiden. Das Bild ist deshalb auf
	   2200x990 gebracht (oben 143 px leere Wand weg). 990/2200 = 45 %, also
	   traegt 45vw es bei JEDER Breite ohne senkrechten Beschnitt — gemessen 0 px
	   bei 1280/1440/1920/2560. Ueber ihrem Kopf bleiben 70 px (7,1 %).
	   Chris, 15.09.2026: „die Groesse vom Hero-Bereich finde ich ja fast gut …
	   aber dann muesste das Bild entsprechend angepasst werden." */
	.hs-hero-foto.hs-hero-foto--ganzfigur45 { min-height: max(640px, 45vw);}
}

/* Kurs-Hero Gesamt Gesicht (9790/9809) — 16.09.2026, Chris' Befund:
   „das Bild von Hanna ist im Figma komplett zu sehen, also auch die Fuesse,
   und auf unseren Seiten sind sie abgeschnitten."
   Dieselbe Rechnung wie bei `--ganzfigur45`, nur mit den Massen DIESES Bildes:
   `kurs-header.webp` ist **2200 x 1133** → 1133/2200 = **51,5 %**. Damit traegt
   `51.5vw` den Hero bei JEDER Breite ohne senkrechten Beschnitt.
   Vorher stand im Generator eine feste `min-height: 720`: bei 1440 px ergab das
   einen Kasten von 2,0 gegen ein Bildverhaeltnis von 1,942 — gemessen wurden
   rund 12 px unten weggeschnitten, und genau dort stehen ihre Fuesse.
   `max(640px, …)` haelt die Untergrenze auf schmalen Desktops, wie bei den
   anderen beiden Varianten. Nur ab 768 px — darunter gilt der eigene mobile
   Zuschnitt aus dem Generator.
   ⚠️ Eine eigene Klasse statt `hs-hero-foto`: die traegt einen ::before-Verlauf,
   und dieser Hero hat bereits sein eigenes Overlay (Figmas #3B2C24 @ 45 %). */
@media (min-width: 768px) {
	.hs-hero-kurs { min-height: max(640px, 51.5vw); }
}

/* Hero der Kursseite „Stirn & Augen" (10806/10807).
   🔴 16.09.2026 — bis heute stand im Generator, fuer diese Seite gebe Figma
   nichts vor, die Leinwand enthalte „nur den Header". Das war eine
   Wortverwechslung: die Leinwand heisst „LP Stirn + Augen Kurs **Header**"
   (Node 1143:24) und mit „Header" ist dort der **Hero** gemeint, nicht das
   Menueband. Sie ist das EINZIGE eigene Design dieser Seite — alles andere
   erbt sie von der Kursseite Gesamt Gesicht.
   🔑 Sprachregelung ab jetzt (Chris, 16.09.2026): **Header = Menueband oben
   (Template 9750), Hero = der erste Inhaltsbereich darunter.** Hannas Notion
   und dieses Figma nennen den Hero „Header" — das ist IHRE Beschriftung.

   Figma-Sollwerte bei 1440: Hero 778 hoch (davon 80 Menueband), Flaeche
   #F3E3D7, Foto `VND04898-1v_bearb` **ohne Schleier**, Text Bordeaux.
   Das Foto liegt dort 1510 breit bei x -53, also 4,9 % breiter als das
   Fenster. 778/1440 = **54vw**; das Bildverhaeltnis 1,941 ergibt bei dieser
   Hoehe genau die 1510 — senkrecht wird nichts beschnitten, waagerecht
   konstant 4,9 % bei jeder Breite.
   ⚠️ Damit weicht diese Klasse bewusst von der Register-Regel
   „vw = Bildhoehe/Bildbreite" (= 51,5) ab: Figma zoomt das Foto absichtlich.
   Gegengeprueft am Figma-Render selbst — von Hanna faellt dabei nichts weg,
   ihr Arm ist schon im Originalfoto oben angeschnitten.
   Nur ab 768 px; darunter traegt der eigene mobile Aufbau (Text auf Wand,
   Foto als eigener Block darunter).

   🔴 16.09.2026, Chris' Befund + Screenshot: „der Hero ist bei mir viel zu gross,
   Hanna riesig, ganz grosser Freiraum oben, unter dem Knopf sehe ich den Text
   gar nicht mehr." Ursache gemessen: sein Fenster ist **1930 px breit, aber nur
   rund 830 px hoch sichtbar** (zwei Lesezeichenleisten + WP-Adminleiste). 54vw
   davon sind **1042 px** — 212 mehr, als er sehen kann. Der Textblock ist in
   diesen 1042 px zentriert, also steht oben Leere und unten faellt die
   Kleinzeile unter die Kante.
   🔑 **Mein Messfehler: nur die BREITE variiert (1440/1920/2560), die Hoehe
   immer grosszuegig gelassen.** Eine Hoehe in `vw` muss gegen die FENSTERHOEHE
   geprueft werden — sonst waechst sie auf breiten, flachen Fenstern aus dem
   Bild. Das ist derselbe Denkfehler wie am Vormittag in Eintrag (12), nur um
   90 Grad gedreht.
   Deshalb der Deckel `min(54vw, 100svh - 80px)`: bis 1440 px aendert er nichts
   (778 < verfuegbare Hoehe), darueber haelt er den Hero im sichtbaren Bereich.
   `svh` = die WIRKLICH sichtbare Hoehe; `vh` steht als Rueckfallebene davor.
   Wird gedeckelt, beschneidet `cover` senkrecht — `background-position` haelt
   den Ausschnitt oben, damit Hannas Kopf bleibt und unten der Hocker faellt. */
@media (min-width: 768px) {
	.hs-hero-sa { min-height: max(640px, min(54vw, calc(100vh  - 80px))); }
	.hs-hero-sa { min-height: max(640px, min(54vw, calc(100svh - 80px))); }
}

/* Erfolgsgeschichten-Hero: Textblock 100 px in das 1240er-Raster eingerueckt.
   Figma (Gruppe 853:28) setzt Eyebrow/H1/Unterzeile auf x 200 bei 805 px Breite -
   also genau so eingerueckt wie der Text jeder anderen Sektion dieser Seite
   (Figma x 202 <-> live x 193). Der Hero war der einzige Ausreisser und begann
   bei x 100. Die 65 % Breite stehen im Generator, der Einzug hier.

   ⚠️ NUR ab 1440 px. Darunter schrumpft der 1240er-Kasten, Hanna wandert im
   `cover`-Zuschnitt nach links, und der Einzug schoebe den Text in sie hinein.
   Gemessen (Motivkante gegen Textblockende): 1440 -> 60 px Luft, 1366 -> 40,
   1280 -> 17, 1200 -> -5. Ohne Einzug bleibt es bis 1025 px positiv (15 px) -
   und damit besser als der Zustand vor dem 12.09., der ab 1030 px kollidierte.
   Doppelte Klasse fuer (0,2,0), damit Elementors eigene Container-CSS nicht gewinnt. */
.hs-hero-eg__text.hs-hero-eg__text { margin-left: 0; }
@media (min-width: 1440px) {
	.hs-hero-eg__text.hs-hero-eg__text { margin-left: 100px; }
}

/* ==========================================================================
   11. Timeline (Ueber-Mich-Seite)
   --------------------------------------------------------------------------
   Gemessen aus Figma J9qdZkXLLrroqEaKG6ir2I, Node 280:17 (1440 x 12000):
   Mittellinie x720 (2 px), Raute 18 px Bounding-Box (= 13 px Quadrat, 45 gedreht),
   Karte 500 breit, Innenabstand 24, linke Karte 168..667, rechte 773..1289.
   Der Entwurf zeigt nur fuenf Stationen - er ist ein Muster, kein Vollbild.
   Gebaut werden alle 17 Stationen aus Notion.

   Warum die Karten als HTML-Widget und nicht als Elementor-Container:
   17 Stationen mit Fotogruppe, Titel, Teaser und Aufklapp-Text waeren rund
   200 Container. Die durchgehende Linie braucht ausserdem EIN Elternelement
   mit ::before - in einer Kette von Elementor-Containern ginge sie an jeder
   Widget-Huelle verloren. Dieselbe Entscheidung wie bei `.hs-ssgitter`.
   ========================================================================== */

/* Figma 280:311 setzt den Einleitungstext auf **955 px**, nicht auf die vollen
   1240 des Rasters. Bei 18 px waeren das sonst rund 130 Zeichen je Zeile. */
/* ⚠️ Elementor haelt hier `.e-con.e-con > .e-con-inner > .elementor-widget
   { max-width: 100% }` aus `frontend.min.css` dagegen - das sind **(0,4,0)**.
   Eine verdoppelte Klasse (0,3,0) verliert. Deshalb ihre Struktur nachgebaut:
   (0,5,0). Gemessen am 15.09.2026, nachdem die verdoppelte Fassung wirkungslos
   blieb. */
.hs-tl-kopf.hs-tl-kopf > .e-con-inner > .hs-body.hs-body,
.hs-tl-kopf.hs-tl-kopf > .e-con-inner > .hs-note.hs-note,
.hs-tl-kopf.hs-tl-kopf > .hs-body.hs-body,
.hs-tl-kopf.hs-tl-kopf > .hs-note.hs-note { max-width: 955px; margin-inline: auto; }

.hs-tl { position: relative; }

/* Die Linie laeuft von der ersten Raute bis zum Sektionsende durch und wird im
   Rose-Band von `.hs-band-anschluss` in Weiss fortgesetzt (so im Entwurf).
   FARBE: **bordeaux**, nicht rose - im Render gemessen (122,39,66 bei x720).
   Stand bis 31.08. faelschlich auf Rose. */
/* ⚠️ Die Hoehe MUSS explizit stehen. `.hs-tl` ist selbst ein `.e-con`, und
   Elementor hat auf `.e-con::before` eine eigene Regel mit `height: 100%`
   (fuer Hintergrund-Overlays). Die schlaegt ein `bottom: -90px` — gemessen:
   ein identisch gestyltes Testelement wurde 8513 px hoch, das Pseudo-Element
   nur 8423, also exakt Containerhoehe. Sichtbar war das als **Luecke zwischen
   Linienende und Rose-Band**: die Linie hoerte an der letzten Karte auf,
   obwohl sie im Entwurf bis an die Bandkante durchlaeuft (dort im Figma
   bordeaux bis y3762, erst IM Band weiss). */
.elementor .e-con.hs-tl::before {
	content: "";
	position: absolute;
	left: 50%;
	top: 0;
	height: calc(100% + var(--hs-section-space));
	width: 2px;
	margin-left: -1px;
	background: var(--hs-bordeaux);
}

/* Elementor haengt jedes Widget in einen eigenen Wrapper. Ohne diese Zeile
   waeren die Zeilen nur so breit wie ihr Inhalt und die Ausrichtung bricht. */

/* Warum ein FESTER Rhythmus und kein variabler Zug:
   Chris am 31.08.: "der Abstand zwischen den einzelnen Boxen ist zu gross. Der
   ist auch unterschiedlich gross. Das sieht nicht gut aus."
   Ein negativer Zug (`margin-block-start: -Z`) macht den Versatz abhaengig von
   der Kartenhoehe: Versatz = Blockhoehe - Z. Bei Bloecken von 558 bis 906 waren
   das 358 bis 706 px - eben ungleichmaessig.

   Jetzt bekommt jede Station eine **feste Hoehe A**. Die Karte darf nach unten
   herausragen; das ist unschaedlich, weil die naechste Station auf der anderen
   Seite steht. Damit gilt:

       Versatz zur Vorstation (andere Seite) = A            (immer gleich)
       Luecke zur Vorvorstation (gleiche Seite) = 2A - Blockhoehe

   Die zweite Bedingung bindet A an die HOECHSTE Karte:
       A >= (hoechster Block + gewuenschte Luecke) / 2

   Gewaehlt: **A = 400**. Zwei Dinge haben das moeglich gemacht:
   - die 3-Stufen-Formel-Station stellte zwei Grafiken uebereinander (906 px) und
     hat damit den Rhythmus diktiert; sie stehen jetzt NEBENEINANDER (592 px)
   - die Jahreszahl liegt seit 31.08. AUF der Kartenoberkante statt darueber
     (so das Figma), der Block ist damit 52 px kuerzer

   Kartenhoehen 506..656, also: Versatz durchgehend **400**, Luecke auf
   derselben Seite **144..294 px**.

   ⚠️ Waechst eine Karte ueber 680 px, wird die Luecke auf derselben Seite zu
   eng. Dann A neu rechnen oder die Karte entlasten.

   ⚠️ `pointer-events`: die Station ragt ueber die naechste hinweg. Ohne die
   Ausnahme unten faengt sie deren Klicks ab. */
.elementor .e-con.hs-tl { display: flow-root; }

.hs-tl__seite { width: 100%; height: auto; pointer-events: none; }
.hs-tl__spalte { position: relative; pointer-events: auto; width: calc(50% - 53px); max-width: 500px; }
.hs-tl__seite--links  .hs-tl__spalte { margin-left: auto;  margin-right: calc(50% + 53px); }
.hs-tl__seite--rechts .hs-tl__spalte { margin-right: auto; margin-left:  calc(50% + 53px); }

/* Elementor setzt `.e-con .elementor-widget.elementor-widget { margin-block-end: 0 }`
   - doppelte Klasse (0,3,0) UND logische Eigenschaft. Eigene Abstandsregeln
   muessen dieselbe Verdopplung nachbauen. Hier steht der Rhythmus in der Hoehe,
   Margins bleiben deshalb auf 0. */
.elementor .e-con .hs-tl__seite.hs-tl__seite { margin-block-end: 0; margin-block-start: 0; }
/* 🔑 DER TAKT KOMMT AUS DEM FIGMA, nicht aus dem Gefuehl. Im Entwurf (Canvas
   280:17) stehen die Karten NICHT auseinander, sie ueberlappen:
       Karte 1 endet y1828, Karte 2 beginnt y1462   -> -366
       Karte 2 endet y2277, Karte 3 beginnt y2011   -> -266
       Karte 3 endet y2730, Karte 4 beginnt y2493   -> -237
       Karte 4 endet y3031, Karte 5 beginnt y2896   -> -135
   Mittel -251. Auf derselben Seite bleiben dabei 166 bis 216 px Luft.
   Chris am 15.09. zur ersten Fassung (+56): "viel zu weit auseinander" - richtig.

   ⚠️ -251 geht bei uns NICHT: Figmas Karten sind 538-815 px hoch (Text
   zugeklappt), unsere sind seit W-04 **372 bis 1270**. Die Luecke auf derselben
   Seite ist `Hoehe(i+1) + 2X`; die kuerzeste Zwischenkarte (Station 11, 372 px)
   bindet. Bei X = -150 bleiben dort noch 72 px, bei -180 nur 12 px.
   Gewaehlt: **-150** - der mildeste Wert, den das Figma selbst zeigt. */
.elementor .e-con .hs-tl__seite.hs-tl__seite + .hs-tl__seite { margin-block-start: -150px; }

.hs-tl__zeile { position: relative; }

/* Die Raute sitzt an der KARTENOBERKANTE, nicht ueber der Jahreszahl - im
   Render sitzen alle fuenf Rauten exakt auf dem Kartenanfang (1293/1290,
   1465/1462, 2010/2011, 2493/2493, 2899/2896). Als Pseudo-Element an der Karte
   verrutscht sie auch dann nicht, wenn die Jahreszahl zweizeilig wird. */
.hs-tl__karte { position: relative; }
.hs-tl__karte::after {
	content: "";
	position: absolute;
	top: 0;
	width: 13px;
	height: 13px;
	background: var(--hs-bordeaux);
}
.hs-tl__seite--links  .hs-tl__karte::after { right: -53px; transform: translateX(50%)  rotate(45deg); }
.hs-tl__seite--rechts .hs-tl__karte::after { left:  -53px; transform: translateX(-50%) rotate(45deg); }

/* Die Jahreszahl liegt MITTIG AUF der Kartenoberkante, nicht darueber - im
   Render ueber drei Stationen gemessen: Text y1447..1475 bei Kartenoberkante
   1462, also 15 px darueber und 13 px darin (ebenso 1996..2024 / 2011 und
   2880..2908 / 2896). Sie steht damit halb auf der Creme-, halb auf der
   weissen Flaeche - beides traegt Bordeaux.
   Absolut positioniert, damit sie die Karte nicht nach unten schiebt: das
   spart 52 px Blockhoehe und erlaubt den engeren Rhythmus. Die 24 px
   Kartenpolsterung fangen die untere Haelfte auf, es kollidiert nichts. */
.hs-tl__jahr {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	z-index: 2;
	transform: translateY(-50%);
	font-family: var(--hs-serif);
	font-size: 38px;
	font-weight: 300;
	line-height: 48.64px;
	color: var(--hs-bordeaux);
	text-align: center;
	margin: 0;
}

.hs-tl__karte { background: var(--hs-white); padding: 24px; }

.hs-tl__titel {
	font-family: var(--hs-serif);
	font-size: 24px;
	font-weight: 300;
	line-height: 30.72px;
	color: var(--hs-bordeaux);
	margin: 0 0 14px;
}
.hs-tl__fotos + .hs-tl__titel,
.hs-tl__bu + .hs-tl__titel { margin-top: 22px; }

.hs-tl__teaser, .hs-tl__rest {
	font-family: var(--hs-sans);
	font-size: 14px;
	line-height: 22px;
	color: var(--hs-bordeaux);
}
.hs-tl__teaser p, .hs-tl__rest p { margin: 0 0 14px; }
.hs-tl__teaser p:last-child, .hs-tl__rest p:last-child { margin-bottom: 0; }
.hs-tl__rest ul { margin: 0 0 14px; padding-left: 20px; }
.hs-tl__rest li { margin-bottom: 10px; }

.hs-tl__bu {
	font-family: var(--hs-sans);
	font-size: 12px;
	font-style: italic;
	line-height: 18px;
	color: var(--hs-bordeaux); /* 18.09.2026 Hanna: war --hs-rose (#A23559, hell) — die Bildunterschrift stand als einziger Text der Station im hellen Rot, Titel und Teaser daneben in #7A2742. Gemessen und angeglichen. Einziges Vorkommen der Klasse site-weit. */
	margin: 10px 0 0;
}
.hs-tl__credit {
	font-family: var(--hs-sans);
	font-size: 11px;
	line-height: 16px;
	color: #B79A92;
	margin: 10px 0 0;
}

/* Aufklapper - nativ ueber <details>, ohne Plugin, wie `.hs-faq`. */
.hs-tl__mehr { margin-top: 18px; }
.hs-tl__mehr > summary {
	list-style: none;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	padding: 12px 0;
	border-top: 1px solid #E7D5CA;
	border-bottom: 1px solid #E7D5CA;
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 700;
	letter-spacing: .12em;
	line-height: 15px;   /* Figma 280:155 - ohne das erbt Elementors 1,5 = 19,5 */
	text-transform: uppercase;
	color: var(--hs-bordeaux);
}
.hs-tl__mehr > summary::-webkit-details-marker { display: none; }
.hs-tl__mehr > summary::after {
	content: "+";
	flex: 0 0 auto;
	font-size: 22px;
	font-weight: 300;
	line-height: 22px;
	letter-spacing: 0;
	color: var(--hs-rose);
}
.hs-tl__mehr[open] > summary { border-bottom-color: transparent; }
.hs-tl__mehr[open] > summary::after { content: "\2212"; }
.hs-tl__rest { padding-top: 4px; }
/* Seit 15.09.2026 steht in der Timeline der gesamte Text offen (W-04): Teaser und
   Rest folgen direkt aufeinander und brauchen denselben Absatzabstand wie zwei
   Absaetze. In der Mythos-Karte liegt der Rest weiter im <details>, dort greift
   diese Regel nicht. */
.hs-tl__teaser + .hs-tl__rest { padding-top: 0; margin-top: 14px; }

/* --- Fotogruppen -------------------------------------------------------- */
.hs-tl__fotos img { display: block; width: 100%; }

/* Ein Foto: fester Ausschnitt, Anker nach oben gezogen. Bei hochformatigen
   Portraits schneidet `cover` sonst unten weg - oder mittig durch das Gesicht.
   Dieselbe Falle wie beim Hero der Kursseite (Anker `100% 15%`). */
.hs-tl__fotos--voll img { height: 300px; object-fit: cover; object-position: center 28%; }

/* Hochformat-Quellen in einem 3:2-Querformatkasten verlieren mehr als die Haelfte
   des Bildes - am 15.09.2026 gemessen: `tl-praxis-grenzen` 900x1350 auf 452x300
   = 56 % Formatverlust, ebenso `tl-nr1`; `tl-award` 828x997 = 45 %,
   `tl-praxis-gruendung` 600x744 = 46 %. Hanna im Call `[1:40:29]`: beim
   Hochformat-Foto "muss die Box angepasst werden" (W-13).
   4:5 laesst ein 2:3-Foto nur noch 17 % verlieren und haelt die Karte trotzdem
   in einer lesbaren Hoehe. Ein Vollformat (2:3) waere 678 px hoch. */
.hs-tl__fotos--hoch img { aspect-ratio: 4 / 5; height: auto; object-fit: cover; object-position: center 22%; }

/* Umgekehrter Fall: querformatige Quellen in der hochformatigen Paar-Kachel.
   Gemessen: `tl-logo-tools` 900x503 und `tl-logo-wangen` 900x504 auf 221x250
   = 51 bzw. 50 %, `tl-tv-studio` 640x360 = 50 %. Alle drei sind 16:9. */
.hs-tl__fotos--paarquer { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.hs-tl__fotos--paarquer img { aspect-ratio: 16 / 9; height: auto; object-fit: cover; object-position: center 40%; }

/* Zwei Fotos nebeneinander - im Entwurf die Prolog-Karte. */
.hs-tl__fotos--paar { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.hs-tl__fotos--paar img { height: 250px; object-fit: cover; object-position: center 28%; }

/* Vier Fotos - Community und Videostudio. */
.hs-tl__fotos--raster { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.hs-tl__fotos--raster img { height: 175px; object-fit: cover; object-position: center 28%; }

/* Collage: grosses Foto, kleines rechts unten daruebergelegt - im Entwurf die
   Karte 2013-2016. Das kleine Foto ragt bewusst ueber die Kante hinaus. */
.hs-tl__fotos--collage { position: relative; padding-bottom: 40px; }
.hs-tl__fotos--collage img:first-child { width: 76%; height: 320px; object-fit: cover; object-position: center 24%; }
.hs-tl__fotos--collage img:last-child {
	position: absolute;
	right: -14px;
	bottom: 0;
	width: 46%;
	height: 130px;
	object-fit: cover;
}

/* Nebeneinander, unbeschnitten - fuer die Station mit Muskel-Grafik UND Formel.
   Gestapelt war die Karte 906 px hoch und damit die hoechste der Seite; sie hat
   den Rhythmus der ganzen Timeline diktiert (A haette 528 sein muessen).
   Nebeneinander sind es 644 px und A = 440 geht auf. */
.hs-tl__fotos--nebeneinander { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: center; }
.hs-tl__fotos--nebeneinander img { width: auto; max-width: 100%; max-height: 250px; height: auto; object-fit: contain; margin: 0 auto; }

/* Frei: unbeschnitten, gestapelt. Fuer die Fotovergleiche (Vorlage 6, 900x320)
   und die Formel-Grafik - beide duerfen nicht angeschnitten werden, und die
   Formel ist transparent und braucht die weisse Karte als Grund. */
.hs-tl__fotos--frei { display: flex; flex-direction: column; gap: 12px; align-items: center; }
.hs-tl__fotos--frei img { height: auto; }

/* Einzelne Grafik, die weder beschnitten noch riesig werden darf. Ohne diese
   Deckelung lief die hochformatige Muskel-Grafik (800x1263) in der 452 px
   breiten Karte auf 714 px Hoehe und riss ein Loch ueber die halbe Karte. */
.hs-tl__fotos img.hs-tl__foto--eng { width: auto; max-width: 100%; max-height: 250px; height: auto; object-fit: contain; }

/* Foto unter dem Text - Hannas Vorgabe fuer die Nr.-1-Station: "Bild bewusst
   unten, sodass 'Sieg' visuell unterstrichen" (oben wuerde es das Ergebnis
   vorwegnehmen). Gilt genauso fuer den Wendepunkt: "Fotos unten damit es erst
   nach dem Text die Aufloesung gibt". */
.hs-tl__fotos--unten { margin-top: 22px; }

/* --- Handy -------------------------------------------------------------- */
@media (max-width: 900px) {
	/* Linie und Raute muessen auf dem Handy exakt aufeinander sitzen: die Raute
	   haengt an der Zeile INNERHALB der 38-px-Polsterung, die Linie an der
	   Aussenkante. Gemessen standen sie sonst 7 px auseinander. */
	.elementor .e-con.hs-tl::before { left: 0; margin-left: 0; }
	/* Einspaltig gibt es keinen Rhythmus und keine Ueberlappung: feste Hoehe weg,
	   sonst wuerden sich die Karten uebereinanderschieben. */
	.hs-tl__seite, .hs-tl__seite:last-child { width: auto; height: auto; padding-left: 38px; }
	/* ⚠️ Einspaltig stehen die Karten UNTEREINANDER, nicht wechselseitig - der
	   negative Takt von oben (-150) wuerde sie ineinanderschieben. Diese Regel
	   steht spaeter in der Datei und gewinnt bei gleicher Gewichtung. */
	.elementor .e-con .hs-tl__seite.hs-tl__seite + .hs-tl__seite { margin-block-start: 40px; }
	.hs-tl__spalte { width: auto; max-width: none; margin-left: 0; margin-right: 0; }
	.hs-tl__seite--links .hs-tl__spalte,
	.hs-tl__seite--rechts .hs-tl__spalte { margin-left: 0; margin-right: 0; }
	.hs-tl__seite--links  .hs-tl__karte::after,
	.hs-tl__seite--rechts .hs-tl__karte::after { left: -38px; right: auto; transform: translateX(-50%) rotate(45deg); }
	.hs-tl__jahr { text-align: left; font-size: 26px; line-height: 32px; padding-left: 20px; }
	.hs-tl__karte { padding: 20px; }
	.hs-tl__titel { font-size: 21px; line-height: 29px; }
	.hs-tl__fotos--collage img:last-child { right: 0; }
	.hs-tl__fotos--nebeneinander { grid-template-columns: 1fr; }
}

/* ==========================================================================
   12. Private Einblicke (Ueber-Mich-Seite)
   Foto buendig an der Kartenkante, Text mittig darunter - so im Entwurf.
   ========================================================================== */

/* Alle fuenf Karten sind im Entwurf **gleich hoch (492)**, das Foto ist
   **270** hoch und buendig an der Oberkante; der Text steht in den restlichen
   222 px **mittig**. Reihe 2 hat im Entwurf KEINE zwei gleich breiten Karten:
   Komplementaermedizin ist **816** breit (= zwei Spalten plus Zwischenraum),
   Qi Gong **393** (= eine Spalte) - gemessen bei y8300..8500.
   `min-height` statt `height`, damit ein laengerer Text die Karte wachsen
   laesst statt zu ueberlaufen. */
.hs-pv {
	background: var(--hs-white);
	min-height: 492px;
	height: 100%;
	display: flex;
	flex-direction: column;
}
/* Der Ausschnitt muss JE BILD sitzen - ein gemeinsamer Wert geht nicht auf.
   Werte an einem Kontaktbogen ausgesucht, nicht geschaetzt.

   🔑 HOCHFORMAT seit 15.09.2026 (Wunsch W-12, Call `[00:51:13-00:51:49]`):
   "Dass man es besser sieht. Bei dem Agroyoga ... das weicht zwar ab, aber finde,
   macht jetzt trotzdem mehr Sinn, sodass man das besser sehen kann. Und dann
   quasi die zweite Reihe auch - und beim linken unteren Bild, dass das quasi
   auch gleich lang ist."
   Alle fuenf Quellen sind hochformatig (0,56 bis 0,75), nur Tanzen ist
   quadratisch (0,98). Im alten 393x270-Kasten (1,46) gingen davon 33 bis 62 %
   verloren - beim Acroyoga-Handstand blieb ein unlesbarer Ausschnitt.

   **3:4** statt fester 270 px: trifft `pv-natur` exakt, kostet Qi Gong und TCM
   11 %, Tanzen 24 %, Acroyoga 25 % - gegen vorher 49 bis 62 %.
   Als Verhaeltnis, nicht als Pixelhoehe, damit es in jeder Spaltenbreite haelt.

   ⚠️ Komplementaermedizin laeuft ueber ZWEI Spalten (65,81 % gegen 31,72 %,
   Faktor 2,0747) und muss quer bleiben. Damit sie trotzdem "gleich lang" ist:
   3/4 x 2,0747 = **1,556**. Dann sind beide Fotos der zweiten Reihe bei jeder
   Breite exakt gleich hoch. */
.hs-pv__foto img { display: block; width: 100%; aspect-ratio: 3 / 4; height: auto; object-fit: cover; object-position: center 25%; }
.hs-pv--tcm .hs-pv__foto img { aspect-ratio: 1.556; }
.hs-pv--acroyoga .hs-pv__foto img { object-position: center 58%; }
.hs-pv--tanzen   .hs-pv__foto img { object-position: center 25%; }
.hs-pv--natur    .hs-pv__foto img { object-position: center 42%; }
.hs-pv--tcm      .hs-pv__foto img { object-position: center 40%; }
.hs-pv--qigong   .hs-pv__foto img { object-position: center 22%; }
.hs-pv__text {
	flex: 1 1 auto;
	display: flex;
	flex-direction: column;
	justify-content: center;
	padding: 22px 24px 26px;
	text-align: center;
}
.hs-pv__text p.hs-pv__titel {
	font-family: var(--hs-sans);
	font-size: 14px;
	line-height: 23px;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--hs-bordeaux);
	margin: 0 0 10px;
}
/* Figma (303:302, 303:312, 303:316, 303:320, 303:324): Open Sans 400 **16/26**
   in **#7A2742**. Bis 15.09. stand hier 14/23 in Rose - dieselbe Sorte
   Abweichung wie beim Timeline-Teaser. Hanna im Call `[1:38:13]`: "dass alles
   dunkelrot ist", dazu W-10 "alle Fliesstextschriften quasi dunkelrot".
   ⚠️ Diese Regel (0,1,1) schlaegt `.hs-pv__titel` (0,1,0) - die Kleinzeile stand
   deshalb ebenfalls in Rose, obwohl ihre eigene Regel Bordeaux sagt. Mit der
   Korrektur hier zieht sie automatisch mit. */
.hs-pv__text p {
	font-family: var(--hs-sans);
	font-size: 16px;
	line-height: 26px;
	color: var(--hs-bordeaux);
	margin: 0 0 10px;
}
.hs-pv__text p:last-child { margin-bottom: 0; }

@media (max-width: 767px) {
	/* Einspaltig traegt die feste Hoehe nicht mehr - dann waeren kurze Texte
	   von Leerraum umgeben. */
	.hs-pv { min-height: 0; }
	/* ⚠️ Eine feste `height` schaltet `aspect-ratio` ab (Breite UND Hoehe gesetzt
	   = Verhaeltnis wird ignoriert). Einspaltig gibt es keine zweite Spalte mehr,
	   an die sich die Komplementaermedizin anpassen muesste - deshalb bekommt
	   auch sie hier das Hochformat und zeigt damit mehr vom Bild. */
	.hs-pv__foto img,
	.hs-pv--tcm .hs-pv__foto img { aspect-ratio: 3 / 4; height: auto; }
}

/* ==========================================================================
   13. Aufklapp-Karte auf Flaeche (Ueber-Mich, Abschnitt "Gemeinsamer Feind")
   Gleiche Mechanik wie die Timeline-Karte, nur ueber die volle Rasterbreite.
   ========================================================================== */

.hs-mythos { background: var(--hs-creme); padding: 46px 100px; margin-bottom: 24px; }
.hs-mythos:last-child { margin-bottom: 0; }
.hs-mythos .hs-tl__teaser, .hs-mythos .hs-tl__rest { font-size: 16px; line-height: 26px; }
.hs-mythos__titel {
	font-family: var(--hs-serif);
	font-size: 40px;
	font-weight: 300;
	line-height: 51.2px;
	color: var(--hs-bordeaux);
	margin: 0 0 20px;
}
@media (max-width: 767px) {
	.hs-mythos { padding: 28px 24px; }
	.hs-mythos__titel { font-size: 25px; line-height: 34px; }
}

/* ==========================================================================
   14. Grossflaechige Fotos neben Text (Ueber-Mich: Hero, Vision, Mission)
   --------------------------------------------------------------------------
   Bewusst als <img> und NICHT als Container-Hintergrundbild: Elementors
   Lazy-Load blendet Container-Hintergruende auf dieser Installation dauerhaft
   aus (siehe Bau-Doku Kursseite, 22.08.). Ein <img> ist davon nicht betroffen
   und reserviert ueber width/height ausserdem seinen Platz.
   ========================================================================== */

/* Hero: EIN durchgehendes Bild ueber die volle Breite, Claim rechts darueber.
   Hanna hat am 01.09.2026 ein eigens retuschiertes Querformat geliefert - sie
   sitzt links, ab 39,8 % der Breite laeuft das Bild in eine voellig flache
   Sandflaeche aus. Deshalb steht der Claim auf ruhiger Flaeche und braucht
   KEINE Abdunkelung; Notions Vorgabe "Desktop-Breite, vollflaechig" ist damit
   erfuellt, und die frueher noetige Abweichung entfaellt.

   Die Hintergrundfarbe ist bewusst die Flaechenfarbe DES BILDES (#F8EBE3,
   gemessen), nicht --hs-sand: so bleibt die Kante unsichtbar, wenn das Bild
   noch laedt oder auf sehr breiten Schirmen nicht ganz aufgeht.

   ⚠️ Kein Container-Hintergrundbild, sondern ein echtes <img>: Elementors
   Lazy-Load fuer Container-Hintergruende ist auf dieser Installation kaputt,
   und srcset/sizes lieferte hier schon einmal die 683-px-Variante auf 1441 px.

   ⚠️ Die Hoehe ist FEST auf den Entwurfswert 720 px. Sie hat zwischenzeitlich
   mit der Fensterbreite mitgewachsen (bis 900 px) - das war falsch: die
   Textspalte wird auf breiten Schirmen ja BREITER und damit kuerzer, der
   mittig gesetzte Text rutschte also doppelt nach unten (gemessen 262 px unter
   der Sektionskante statt 157 px wie im Hero der Presse-Seite).
   Chris am 02.09.: "es ist viel Freiraum oben ... der Text sollte etwa auf der
   Hoehe beginnen wie bei Presse."
   Bei 720 px sind es 172 px - Presse-Niveau.

   Die Leerflaeche ueber Hannas Kopf ist NICHT hier geloest, sondern im Bild:
   `um-bilder-aufbereiten.py` schneidet oben 210 px weg (ihr Dutt begann erst
   bei 27,3 % der Bildhoehe). Ueber `object-position` allein ging das nicht -
   bei 1440 px ist das Bild fast vollstaendig sichtbar, die Leerflaeche liegt
   also IM Bild und nicht im Ausschnitt. */
.hs-hero-voll {
	position: relative;
	overflow: hidden;
	background-color: #F8EBE3;
	min-height: 720px;
	justify-content: center;
}
.hs-hero-voll__bild { position: absolute; inset: 0; z-index: 0; }
.hs-hero-voll__bild img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: left center; }
/* `left`, nicht `center`: unterhalb von 1440 px skaliert `cover` ueber die Hoehe
   und schneidet seitlich. Rechts liegt nur leere Flaeche, links sitzt Hanna. */
.elementor .e-con.hs-hero-voll > .e-con { position: relative; z-index: 1; }

/* Der Textbeginn haengt an der MOTIVKANTE, nicht am Raster.
   Hanna am 02.09.: "der Text ist etwas zu nah am Knie dran, da braeuchte es mehr
   Abstand". Gemessen stimmte das - der Text begann sogar LINKS der Motivkante
   (bei 1440 px um 41 px, bei 1804 px um 13 px).

   Ursache ist ein Grundkonflikt dieser Bauform: das **Bild laeuft ueber die volle
   Fensterbreite**, der **Text ist ans 1240er-Raster gebunden**. Die Motivkante
   waechst also mit der Fensterbreite, der Textbeginn nicht - auf breiten Schirmen
   laufen sie zwangslaeufig ineinander. Ein fester Prozentwert kann das nicht
   loesen, egal welcher.

   Zielabstand **68 px** - das ist der Wert aus Sabines Figma: dort endet das Foto
   bei x600 und der Text beginnt bei x668. (Hanna: "weiss nicht wie die
   Text-Positionen von Sabine im Figma angegeben sind" - das ist die Antwort.)

   Wo die Motivkante liegt, haengt daran, wie `cover` skaliert:
     schmal (Fenster < ~1685): ueber die HOEHE -> Kante konstant
         720 x 992/1078 = 662,6 px      -> Rand 663px
     breit  (Fenster > ~1685): ueber die BREITE -> Kante waechst mit
         992/2500 x Sektionsbreite      -> Rand 39,7vw - 6px

   ⚠️ Der Rand liegt AUF der Motivkante, nicht 68 px daneben - die 68 px kommen
   aus dem `padding-left` der Spalte, das ohnehin schon da ist. Beim ersten
   Versuch hatte ich beides addiert und war bei 136 px Abstand.
   (992 = gemessene rechte Motivkante im Bild, 1078 = Bildhoehe.)
   `max()` nimmt jeweils den groesseren der beiden - genau am Umschaltpunkt sind
   sie gleich, der Uebergang ist also stufenlos.

   ⚠️ `width: auto` ueberschreibt Elementors `--width: 58,3 %`. Der Wert steht
   weiterhin im Generator (als Rueckfallebene und weil `colw()` eine Breite
   verlangt), ist hier aber bewusst ausser Kraft - sonst waere der Abstand wieder
   an das Raster gekoppelt statt an das Bild.

   Doppelte Klasse + logische Eigenschaft, weil Elementors eigene Regeln
   (`--width` auf (0,3,0), `margin-inline` mit verdoppelter Klasse) sonst
   gewinnen - dieselbe Falle wie bei der Timeline. */
.elementor .e-con .hs-hero-voll__text.hs-hero-voll__text {
	margin-inline-start: max(663px, calc(39.7vw - 6px));
	width: auto;
	flex: 1 1 auto;
	min-width: 0;
}

/* Unterhalb von 1280 px bleibt neben dem Motiv zu wenig Platz: die Motivkante
   liegt dort konstant bei 662 px, die Textspalte waere schmaler als 520 px und
   der Claim wuerde zerfasern. Deshalb ab hier gestapelt - Bild als Band oben,
   Text darunter. Das Bild geht dafuer aus der absoluten Lage zurueck in den
   Fluss; die Sektionsfarbe ist dieselbe wie die Bildflaeche, die Kante faellt
   nicht auf.
   ⚠️ Vorlaeufig: die Ansicht unter 1280 px (Tablet und Handy) ist ein eigener,
   noch offener Durchgang. Vorher lag diese Grenze bei 767 px - dazwischen stand
   der Text auf Hanna. */
@media (max-width: 1279px) {
	.hs-hero-voll { min-height: 0; }
	.hs-hero-voll__bild { position: static; }
	.hs-hero-voll__bild img { height: 300px; }
	.elementor .e-con .hs-hero-voll__text.hs-hero-voll__text {
		margin-inline-start: 0;
		width: 100%;
	}
}

@media (max-width: 767px) {
	.hs-hero-voll__bild img { height: 260px; }
}

.hs-halbfoto, .hs-halbfoto .elementor-widget-container, .hs-halbfoto figure { height: 100%; }
.hs-halbfoto img { display: block; width: 100%; height: 100%; min-height: 560px; object-fit: cover; object-position: center 25%; }

@media (max-width: 767px) {

	/* 🔴 19.09.2026, Chris: „Können wir die Bilder ein bisschen länger anzeigen?
	   Sie sind im Moment quadratisch … damit ein bisschen mehr von Hanna
	   angezeigt wird, aber gleich viel bei beiden."
	   Vorher `height: 360px` fest. Bei 355 px Breite war das Fenster praktisch
	   quadratisch (355x360) und der Beschnitt senkrecht 146..1638 von 1800 —
	   Hannas Fingerspitzen liegen im Vision-Foto bei y 144, sie waren also um
	   **2 px** angeschnitten. Gemessen, nicht geschaetzt.
	   🔑 `aspect-ratio` statt fester Hoehe (Lehre aus dem Zeitstrahl, 19.09.):
	   nur so bleibt der Beschnitt bei JEDER Telefonbreite derselbe — eine feste
	   Hoehe zeigt auf 320, 375 und 430 px je einen anderen Ausschnitt, weil das
	   Bild mit der Breite mitwaechst.
	   5/6 = die Hausgroesse der uebrigen Seiten: dort steht `min_height_mobile:
	   120vw` (kurs-*.py, erfolgsgeschichten.py), und 120 vw auf voller Breite
	   IST 5:6. Auf 375 px also 450 statt 360 px hoch, Fenster senkrecht
	   90..1620 — die Fingerspitzen haben 54 px Luft.
	   Beide Fotos stehen mobil auf voller Breite, die Regel gilt fuer beide
	   gleich: „gleich viel" ist damit nicht eingestellt, sondern bauartbedingt. */
	.hs-halbfoto img  { min-height: 0; height: auto; aspect-ratio: 5 / 6; }

	/* Rasterflucht endet am Telefon: `.hs-bleed-left/right` haelt 20 px Polster
	   auf der angeschnittenen Seite (Mindestrand `--hs-gutter`). Auf dem Desktop
	   traegt das die 1240er-Kante des Textes; mobil steht der Text ohnehin auf
	   eigenem 20-px-Polster, und vom Rasterpolster bleibt nur ein Streifen
	   Hintergrund NEBEN dem Foto stehen (Chris, 19.09.: „bei dem einen Bild links
	   und bei dem anderen rechts ist noch ein bisschen Hintergrund zu sehen").
	   ⚠️ Bewusst als Modifier und NICHT an `.hs-bleed-*` selbst: die beiden
	   Klassen stecken in elf Generatoren; eine Aenderung daran waere ein Eingriff
	   in jede fertige Seite. Der Modifier haengt nur an `vision-r`/`mission-r`. */
	.elementor .e-con.hs-bleed-left.hs-bleed--voll-mobil  { --padding-left:  0px; }
	.elementor .e-con.hs-bleed-right.hs-bleed--voll-mobil { --padding-right: 0px; }
}

/* Das Rose-Band nimmt die Timeline-Linie auf: sie laeuft von der Bandoberkante
   noch 53 px weiter und endet in einer Raute. Beides ist dort **weiss**, nicht
   rose - eine rose Linie auf rosem Grund waere unsichtbar (im Render gemessen:
   255,255,255 bei x720 zwischen y3762 und y3830).
   Der Wrapper wird NICHT gedreht - nur die Raute. Ein Kind eines gedrehten
   Elements wuerde mitrotieren, deshalb Linie und Raute als zwei
   Pseudo-Elemente an einem ungedrehten Kasten. */
.hs-band-anschluss {
	position: relative;
	width: 13px;
	height: 53px;
	margin: 0 auto 54px;
}
.hs-band-anschluss::before {
	content: "";
	position: absolute;
	left: 50%;
	top: 0;
	bottom: 0;
	width: 2px;
	margin-left: -1px;
	background: var(--hs-white);
}
.hs-band-anschluss::after {
	content: "";
	position: absolute;
	left: 50%;
	bottom: -6px;
	width: 13px;
	height: 13px;
	margin-left: -7px;
	background: var(--hs-white);
	transform: rotate(45deg);
}

/* ==========================================================================
   15. Blog — Archiv (Uebersicht) und Einzelbeitrag
   --------------------------------------------------------------------------
   Quelle: Figma `oAfwP1U1ZqAsd2Ah8RP4Qm`, Variante B (Desktop-Frames 2 und 4).
   Variante A ist der ALTE Live-Blog, nicht der Entwurf — Chris am 30.08.2026.

   Zwei Dinge sind bewusst anders als im Entwurf gemessen:

   1. RASTER. Der Entwurf ist ueber einen Screenshot der alten Live-Seite
      gezeichnet, deren Contentraster 1340 px breit ist (Header-Inhalt dort
      x 72..1412). Unsere Relaunch-Seiten laufen auf 1240 (`--hs-content`).
      Uebernommen sind Aufbau, Proportionen und Typografie, nicht die 1340.
      Gegenprobe, dass der Entwurf 1:1 und nicht skaliert ist: der Fliesstext
      misst dort 34 px Zeilenabstand — exakt unser `.hs-body`.

   2. HERO-FOTO als <img>, nicht als Container-Hintergrund. Grund steht in
      Abschnitt 14: Elementors Lazy-Load blendet Container-Hintergruende auf
      dieser Installation dauerhaft aus.
   ========================================================================== */

/* ---- Archiv: Hero „Neuster Beitrag" ---------------------------------- */

.hs-blog-hero {
	position: relative;
	overflow: hidden;
	min-height: 676px;
}
/* Foto-Ebene. Die Klasse sitzt am Bild-WIDGET, nicht am Bild. */
.hs-blog-hero .hs-blog-hero__bild {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	margin: 0;
	z-index: 0;
}
.hs-blog-hero .hs-blog-hero__bild .elementor-widget-container,
.hs-blog-hero .hs-blog-hero__bild figure { height: 100%; margin: 0; }
.hs-blog-hero .hs-blog-hero__bild img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center 28%;
}
/* Abdunkelung. Im Entwurf gemessen gleichmaessig (oben wie unten
   ~rgb(125,110,98) auf der hellen Wand) — also FLACH, kein Verlauf. */
.hs-blog-hero::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 1;
	background: rgba(45, 26, 22, .5);
	pointer-events: none;
}
.hs-blog-hero > .e-con { position: relative; z-index: 2; }

/* Ab Seite 2 keinen Hero mehr.
   Das Raster laeuft mit einer ausdruecklichen Abfrage und `offset` 1, der Hero
   mit einer eigenen „neuster Beitrag"-Abfrage — der stuende sonst auf JEDER
   Blaetterseite noch einmal mit 676 px oben, und die Beschriftung „Neuster
   Beitrag" waere dort auch inhaltlich verkehrt. WordPress setzt auf
   Blaetterseiten die Body-Klasse `paged` (geprueft: Seite 2 und 7). */
body.paged .hs-blog-hero { display: none; }

.hs-blog-hero__inhalt {
	width: 100%;
	max-width: var(--hs-content);
	margin: 0 auto;
	text-align: center;
}
/* Elementor deckelt Widgets in Containern mit
   `.elementor.elementor .e-con > .elementor-widget { max-width: 100% }` —
   doppelte Klasse, also (0,4,0). Eigene Regeln muessen die Verdopplung
   nachbauen, sonst greifen sie nicht. */
.elementor.elementor .e-con.hs-blog-hero__inhalt > .elementor-widget { max-width: 1000px; }

.hs-blog-hero__titel.hs-blog-hero__titel .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 48px;
	font-weight: 300;
	line-height: 56px;
	color: var(--hs-white);
}
.hs-blog-hero__titel.hs-blog-hero__titel .elementor-heading-title a { color: inherit; text-decoration: none; }
.hs-blog-hero__titel.hs-blog-hero__titel .elementor-heading-title a:hover { text-decoration: underline; }

.hs-blog-hero__anriss.hs-blog-hero__anriss,
.hs-blog-hero__anriss.hs-blog-hero__anriss .elementor-widget-container {
	font-family: var(--hs-sans);
	font-size: 16px;
	font-weight: 400;
	line-height: 30px;
	color: var(--hs-white);
}
.hs-blog-hero__anriss.hs-blog-hero__anriss p { margin: 0; }

@media (max-width: 1024px) {
	.hs-blog-hero { min-height: 560px; }
	.hs-blog-hero__titel.hs-blog-hero__titel .elementor-heading-title { font-size: 38px; line-height: 46px; }
}
@media (max-width: 767px) {
	.hs-blog-hero { min-height: 520px; }
	.hs-blog-hero__titel.hs-blog-hero__titel .elementor-heading-title { font-size: 30px; line-height: 39px; }
	.hs-blog-hero__anriss.hs-blog-hero__anriss,
	.hs-blog-hero__anriss.hs-blog-hero__anriss .elementor-widget-container { font-size: 15px; line-height: 27px; }
}

/* Eyebrow im Hero: `.hs-eyebrow--light` steht auf (0,2,0) und verliert im
   Loop-Item gegen Elementors INLINE gedruckte Kit-Typografie. Im Blog-Hero
   deshalb ausdruecklich hochgezogen. */
.hs-blog-hero .hs-eyebrow .elementor-heading-title {
	font-family: var(--hs-sans);
	font-size: 18px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .3em;
	line-height: 1.6;
	color: var(--hs-white);
}

/* ---- Archiv: Beitragskarte ------------------------------------------- */

.hs-blog-karte { background: var(--hs-white); height: 100%; }

/* Bildhoehe folgt dem Entwurf: dort 299 breit / 311 hoch. Auf unserem
   1240er-Raster ist die Karte 274 breit -> 285 hoch. */
.hs-blog-karte__bild img {
	display: block;
	width: 100%;
	height: 285px;
	object-fit: cover;
}
.hs-blog-karte__bild,
.hs-blog-karte__bild .elementor-widget-container,
.hs-blog-karte__bild figure { margin: 0; line-height: 0; }

/* Avatar liegt AUF der Bildkante — halb drueber, halb darunter. */
.hs-blog-karte__avatar { width: 48px; margin: -24px 0 0 28px; z-index: 2; }
.hs-blog-karte__avatar img {
	display: block;
	width: 48px;
	height: 48px;
	border-radius: 50%;
	object-fit: cover;
	border: 3px solid var(--hs-white);
	box-sizing: content-box;
}

/* Meta-Zeile: Autor links, Datum rechts, EINZEILIG.
   Zwei Fallen, beide gemessen:
   1. `--gap` ist die falsche Variable — Elementor setzt den Container-Abstand
      ueber `--row-gap`/`--column-gap`. Ohne die blieb der Vorgabewert 20 px.
   2. Bei 13 px braucht der laengste Fall („Hanna Sacher" + „30. September
      2025") 197 px plus Abstand, verfuegbar sind in der 277er-Karte aber nur
      221 px — beide Zeilen brachen um. Bei 12 px sind es 190 + 10 = 200. */
.hs-blog-karte__meta.hs-blog-karte__meta {
	--row-gap: 10px;
	--column-gap: 10px;
	padding: 16px 28px 0;
}
.hs-blog-karte__meta.hs-blog-karte__meta > .elementor-widget { flex: 0 0 auto; max-width: none; }
.hs-blog-karte__meta.hs-blog-karte__meta .elementor-heading-title {
	font-family: var(--hs-sans);
	font-size: 12px;
	font-weight: 400;
	line-height: 20px;
	white-space: nowrap;
	color: var(--hs-icon);
}

.hs-blog-karte__titel.hs-blog-karte__titel { padding: 12px 28px 0; }
.hs-blog-karte__titel.hs-blog-karte__titel .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 26px;
	font-weight: 300;
	line-height: 36px;
	color: var(--hs-bordeaux);
	text-align: center;
}
.hs-blog-karte__titel.hs-blog-karte__titel .elementor-heading-title a { color: inherit; text-decoration: none; }
.hs-blog-karte__titel.hs-blog-karte__titel .elementor-heading-title a:hover { text-decoration: underline; }

.hs-blog-karte__anriss.hs-blog-karte__anriss,
.hs-blog-karte__anriss.hs-blog-karte__anriss .elementor-widget-container {
	font-family: var(--hs-sans);
	font-size: 15px;
	font-weight: 400;
	line-height: 24px;
	color: var(--hs-bordeaux);
	text-align: center;
}
.hs-blog-karte__anriss.hs-blog-karte__anriss { padding: 10px 28px 34px; }
.hs-blog-karte__anriss.hs-blog-karte__anriss p { margin: 0; }

/* „Weiterlesen" laeuft im Entwurf INLINE am Ende des Anrisses mit,
   unterstrichen. Kommt aus dem Shortcode [hs_anriss]. */
.hs-weiterlesen { color: inherit; text-decoration: underline; }
.hs-weiterlesen:hover { color: var(--hs-rose); }

@media (max-width: 767px) {
	.hs-blog-karte__bild img { height: 240px; }
	.hs-blog-karte__titel.hs-blog-karte__titel .elementor-heading-title { font-size: 23px; line-height: 32px; }
}

/* ---- Einzelbeitrag ---------------------------------------------------- */

/* Beitragsbild — **randlos ueber die volle Fensterbreite**. Die 80
   Bestandsbilder haben sehr unterschiedliche Seitenverhaeltnisse (1:1 bis
   1,96:1, 26x quadratisch) — `cover` auf feste Hoehe bringt sie auf eine
   gemeinsame Form.

   🔴 16.09.2026 korrigiert. Hier stand `max-width: var(--hs-content)` (1240) —
   das Bild sass damit bei 1440 px mit **je 100 px Weiss** daneben, und auf
   breiteren Schirmen entsprechend mehr. Chris: *„Wir wollen das Foto über die
   volle Breite!"*
   🔑 Woher der Fehler kam: Der Bau-Stand vom 30.08. haelt fest, dass das
   Mockup ueber einem Screenshot der ALTEN Live-Seite gezeichnet ist und dort
   ein 1340er Raster zeigt, unsere Seiten aber auf 1240 laufen. Diese —
   richtige — Entscheidung fuer das **Textraster** ist damals auch auf das
   **Bild** angewandt worden. Im Entwurf laeuft das Bild aber ausdruecklich bis
   an beide Kanten; es gehoert gar nicht ins Raster.
   🔑 Lehre: Eine Rasterentscheidung gilt fuer die Elemente IM Raster. Ein
   randloses Element ist kein Sonderfall des Rasters, sondern steht daneben —
   wie das Abschlussband und die Fotospalten auf den Landingpages. */
.hs-artikel__bild img {
	display: block;
	width: 100%;
	height: 520px;
	object-fit: cover;
}

.hs-artikel__titel.hs-artikel__titel .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 46px;
	font-weight: 300;
	line-height: 60px;
	color: var(--hs-bordeaux);
	text-align: center;
}

/* Autorzeile unter dem Titel: Avatar + Name nebeneinander, mittig. */
.hs-artikel__autor.hs-artikel__autor { --row-gap: 14px; --column-gap: 14px; }
.hs-artikel__autor.hs-artikel__autor img { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; display: block; }
/* 🔴 16.09.2026 Rosé → Bordeaux. Das ist die Stelle, die Hanna im Call vom
   04.09. `[01:58:30]` meint: *„Da oben, bei ueber Hanna ist es hellrot. Das
   wuerde jetzt dunkelrot machen."* — die Autorzeile direkt unter dem Titel. */
.hs-artikel__autor.hs-artikel__autor .elementor-heading-title {
	font-family: var(--hs-sans);
	font-size: 15px;
	font-weight: 700;
	line-height: 48px;
	color: var(--hs-bordeaux);
}

/* Lesespalte (968) und Hervorhebungsbreite (1090) sind im Entwurf gemessen,
   werden aber ueber Elementors `boxed_width` am Container gesetzt, nicht ueber
   eine Klasse — Breiten sind dort verlaesslicher. Deshalb steht hier bewusst
   keine Regel dafuer. */

/* Typografie des Beitragsinhalts. Traegt die 80 Bestandsbeitraege:
   sie sind ausnahmslos sauberes Gutenberg-Markup (432x h2, 273x h3,
   208x ul, 178x figure, 24x blockquote). */
.hs-artikel__inhalt.hs-artikel__inhalt,
.hs-artikel__inhalt.hs-artikel__inhalt .elementor-widget-container {
	font-family: var(--hs-sans);
	font-size: 18px;
	font-weight: 400;
	line-height: 34px;
	color: var(--hs-bordeaux);
}
.hs-artikel__inhalt.hs-artikel__inhalt p { margin: 0 0 22px; }
.hs-artikel__inhalt.hs-artikel__inhalt p:last-child { margin-bottom: 0; }
.hs-artikel__inhalt.hs-artikel__inhalt h1,
.hs-artikel__inhalt.hs-artikel__inhalt h2 {
	font-family: var(--hs-serif);
	font-size: 32px;
	font-weight: 300;
	line-height: 42px;
	color: var(--hs-bordeaux);
	margin: 56px 0 18px;
}
.hs-artikel__inhalt.hs-artikel__inhalt h3 {
	font-family: var(--hs-serif);
	font-size: 26px;
	font-weight: 300;
	line-height: 34px;
	color: var(--hs-bordeaux);
	margin: 40px 0 14px;
}
.hs-artikel__inhalt.hs-artikel__inhalt h4 {
	font-family: var(--hs-sans);
	font-size: 17px;
	font-weight: 700;
	line-height: 28px;
	color: var(--hs-bordeaux);
	margin: 32px 0 12px;
}
.hs-artikel__inhalt.hs-artikel__inhalt > *:first-child { margin-top: 0; }
/* `strong` bekommt bewusst KEINE eigene Farbe, sondern erbt.
   Mit `color: bordeaux` stand der Buttontext bordeaux auf bordeaux und war
   unsichtbar — 73 der 80 Beitraege haben den Buttontext in <strong>. Erben
   ist ausserdem richtig fuer die wenigen Stellen mit eigener Textfarbe. */
.hs-artikel__inhalt.hs-artikel__inhalt strong { font-weight: 700; }

/* Fliesstext-Links — aber NICHT die als Button gestalteten. Ohne die
   Ausnahme bekamen alle Buttons Rosé auf Bordeaux plus Unterstrich.

   🔴 16.09.2026: Farbe von Rosé auf **Bordeaux** gedreht. Hanna im Call vom
   04.09.2026 `[01:55:17]`: *„und alle Fliesstextschriften quasi dunkelrot,
   wuerde ich machen"* und `[01:58:24]`: *„dass der Fliesstext dunkelrot ist.
   Da oben, bei ueber Hanna ist es hellrot. Das wuerde jetzt dunkelrot
   machen."* Chris hat es am 16.09. auf der Seite wiedergefunden.
   🔑 Der **Unterstrich bleibt** — er ist jetzt das einzige Merkmal, das einen
   Link vom Fliesstext unterscheidet. Beim Ueberfahren wechselt die Farbe auf
   Rosé, also genau andersherum als vorher. */
.hs-artikel__inhalt.hs-artikel__inhalt a:not(.wp-block-button__link) {
	color: var(--hs-bordeaux);
	text-decoration: underline;
}
.hs-artikel__inhalt.hs-artikel__inhalt a:not(.wp-block-button__link):hover { color: var(--hs-rose); }

/* ---- CTA-Buttons im Beitragsinhalt (Gutenberg) ----------------------
   79 der 80 Beitraege enthalten solche Buttons. Im Entwurf: Pille, Flaeche
   #A23559 (= --hs-rose), weisse fette Schrift in gemischter Schreibweise,
   Hoehe 55 px — gemessen am CTA „Jetzt Gesichtstraining fuer 0 Euro sichern".
   Bewusst NICHT der eckig-versale `.hs-btn` der Landingpages: der Entwurf
   zeigt hier die Pille, und die Beschriftungen sind ganze Saetze.

   Die Flaechenfarbe hier ist die VORGABE, keine Vereinheitlichung:
   63 der 81 Buttons tragen gar keine Farbklasse und bekaemen sonst
   WordPress-Grau (#32373c) — die faerbt diese Regel auf Rosé.
   Die uebrigen 18 tragen `has-primary-…` (Rosé, 14x) oder `has-text-…`
   (Bordeaux, 4x); WordPress setzt diese Palettenklassen mit `!important`,
   Hannas bewusste Wahl gewinnt dort also — was richtig ist, denn die
   WP-Palette ist mit unserem Designsystem identisch (`primary` = #a23559,
   `text` = #7a2742, `bg-light` = #fbf6f3). Beide Faelle sind im Browser
   gegen weisse Schrift geprueft (Helligkeitsabstand Rosé 165, Bordeaux 188);
   die Gegenprobe ueber ALLE 80 Beitraege fand 81 Buttons und keine weitere
   Farbklassen-Kombination.
   WordPress' eigene Button-Regeln stehen dagegen auf `:where(…)` und damit
   auf Spezifitaet 0 — die greifen hier ueberhaupt nicht. */
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-buttons { margin: 34px 0; }
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-button__link {
	display: inline-block;
	background-color: var(--hs-rose);
	color: var(--hs-white);
	text-decoration: none;
	border: 0;
	/* 🔴 16.09.2026: **eckig statt Pille**. Bis dahin `border-radius: 999px`,
	   uebernommen aus dem Mockup — das ist aber der Button der ALTEN Live-Seite.
	   Hanna im Call vom 04.09.2026 `[01:55:01]`: *„ueberall wo Buttons sind,
	   dass das dann quasi das neue Button Design ist"*, `[01:55:10]` *„Die
	   Dunkelroten, dass die dann so sind"*, `[01:58:37]` *„die Buttons vor
	   allem, dass die stimmig sind zur restlichen Website."* Chris am 16.09.
	   erneut: *„der Button ist noch rund. Das soll nicht sein."*
	   🔑 Der Bau-Stand vom 30.08. fuehrte die Pille ausdruecklich als
	   „einzigen bewussten Stilbruch zum Entwurf" — genau den hat Hanna
	   kassiert. Eine Form, die aus dem ALTEN Design stammt, ist kein
	   Entwurfsdetail, das man uebernimmt.
	   Chris, 16.09.2026: *„wir gleichen die Buttons auf 13 Pixel an, aber machen
	   keine Versalien, sondern so, wie sie geschrieben sind."*
	   🔑 Damit stimmen Form, Groesse, Laufweite und Polster mit `.hs-btn` der
	   uebrigen Seiten ueberein — **nur die Schriftlage nicht**. Der Grund ist
	   die Textlaenge: der Seiten-Button traegt zwei bis vier Woerter, die
	   Beitrags-CTAs ganze Saetze („Fuer 0 Euro mein Gesichtstraining testen").
	   Dieselbe Ueberlegung wie bei der Band-Unterzeile der Aufzeichnungsseiten:
	   uebernommen werden Groesse, Laufweite und Polster — die Schriftlage
	   gehoert zur Stelle. */
	border-radius: 0;
	padding: 17px 34px;
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 1px;
	line-height: 24px;
	transition: background-color .2s ease;
}
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-button__link:hover,
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-button__link:focus {
	background-color: var(--hs-bordeaux);
	color: var(--hs-white);
}
/* Der Beschriftungstext steckt fast immer in <strong> — Farbe und Gewicht
   muessen vom Button kommen, nicht von der Fliesstext-Regel. */
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-button__link strong,
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-button__link em {
	color: inherit;
	font-weight: inherit;
	font-style: inherit;
}

@media (max-width: 767px) {
	.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-button__link { padding: 15px 24px; font-size: 13px; }
}
.hs-artikel__inhalt.hs-artikel__inhalt ul,
.hs-artikel__inhalt.hs-artikel__inhalt ol { margin: 0 0 22px; padding-left: 24px; }
.hs-artikel__inhalt.hs-artikel__inhalt li { margin: 0 0 10px; }
.hs-artikel__inhalt.hs-artikel__inhalt li::marker { color: var(--hs-rose); }
.hs-artikel__inhalt.hs-artikel__inhalt figure,
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-image { margin: 34px 0; }
.hs-artikel__inhalt.hs-artikel__inhalt img { max-width: 100%; height: auto; display: block; }
/* 16.09.2026: Bildunterschrift Rosé → Bordeaux. Sie ist Fliesstext und faellt
   damit unter Hannas Ansage vom 04.09. („alle Fliesstextschriften quasi
   dunkelrot"). Unterschieden wird sie ueber Groesse und Zentrierung, nicht
   ueber die Farbe. */
.hs-artikel__inhalt.hs-artikel__inhalt figcaption {
	font-size: 14px;
	line-height: 22px;
	color: var(--hs-bordeaux);
	margin-top: 10px;
	text-align: center;
}
.hs-artikel__inhalt.hs-artikel__inhalt blockquote {
	margin: 34px 0;
	padding: 28px 34px;
	background: var(--hs-sand);
	border: 0;
	font-size: 18px;
	line-height: 32px;
}
.hs-artikel__inhalt.hs-artikel__inhalt blockquote p:last-child { margin-bottom: 0; }
.hs-artikel__inhalt.hs-artikel__inhalt iframe,
.hs-artikel__inhalt.hs-artikel__inhalt .wp-block-embed iframe { max-width: 100%; }
.hs-artikel__inhalt.hs-artikel__inhalt table { width: 100%; border-collapse: collapse; margin: 0 0 22px; }
.hs-artikel__inhalt.hs-artikel__inhalt th,
.hs-artikel__inhalt.hs-artikel__inhalt td { border: 1px solid var(--hs-icon); padding: 10px 12px; text-align: left; }

@media (max-width: 767px) {
	.hs-artikel__bild img { height: 300px; }
	.hs-artikel__titel.hs-artikel__titel .elementor-heading-title { font-size: 30px; line-height: 40px; }
	.hs-artikel__inhalt.hs-artikel__inhalt h1,
	.hs-artikel__inhalt.hs-artikel__inhalt h2 { font-size: 26px; line-height: 35px; margin-top: 40px; }
	.hs-artikel__inhalt.hs-artikel__inhalt h3 { font-size: 22px; line-height: 30px; margin-top: 30px; }
	.hs-artikel__inhalt.hs-artikel__inhalt blockquote { padding: 20px 22px; }
}

/* ---- Autorenbox ------------------------------------------------------- */

.hs-autorbox { background: var(--hs-sand); padding: 56px 76px 60px; }
.hs-autorbox__avatar img { width: 96px; height: 96px; border-radius: 50%; object-fit: cover; display: block; }
.hs-autorbox__titel.hs-autorbox__titel,
.hs-autorbox__titel.hs-autorbox__titel .elementor-widget-container {
	font-family: var(--hs-serif);
	font-size: 27px;
	font-weight: 300;
	line-height: 36px;
	color: var(--hs-bordeaux);
}
.hs-autorbox__titel.hs-autorbox__titel a { color: var(--hs-bordeaux); text-decoration: underline; }
.hs-autorbox__titel.hs-autorbox__titel p { margin: 0; }
.hs-autorbox__text.hs-autorbox__text,
.hs-autorbox__text.hs-autorbox__text .elementor-widget-container {
	font-family: var(--hs-sans);
	font-size: 16px;
	font-weight: 400;
	line-height: 28px;
	color: var(--hs-bordeaux);
}
.hs-autorbox__text.hs-autorbox__text p { margin: 0 0 20px; }
.hs-autorbox__text.hs-autorbox__text p:last-child { margin-bottom: 0; }
.hs-autorbox__text.hs-autorbox__text p:first-child,
.hs-autorbox__text.hs-autorbox__text p:last-child { font-weight: 700; }
.hs-autorbox__folge.hs-autorbox__folge .elementor-heading-title {
	font-family: var(--hs-sans);
	font-size: 15px;
	font-weight: 700;
	line-height: 24px;
	color: var(--hs-bordeaux);
}

@media (max-width: 767px) {
	.hs-autorbox { padding: 34px 24px 38px; }
}

/* ---- Kommentare ------------------------------------------------------- */

.hs-kommentare { --hs-komm-feld: #F6E7DC; }
.hs-kommentare .elementor-widget-container > .comments-area,
.hs-kommentare .comments-area { max-width: 976px; margin: 0 auto; }

/* Reihenfolge wie im Entwurf: erst das Formular, dann die Liste.
   WordPress gibt von sich aus Liste -> Formular aus. Die echte Klasse der
   Zaehler-Ueberschrift heisst `title-comments` (nicht `comments-title`) —
   Elementors Kommentar-Widget dreht das Wort um. */
.hs-kommentare .comments-area { display: flex; flex-direction: column; }
.hs-kommentare .comments-area > .comment-respond { order: 1; }
.hs-kommentare .comments-area > .title-comments  { order: 2; margin-top: 46px; }
.hs-kommentare .comments-area > .comment-list    { order: 3; }

.hs-kommentare .comment-reply-title,
.hs-kommentare .title-comments,
.hs-kommentare .comments-title {
	font-family: var(--hs-sans);
	font-size: 15px;
	font-weight: 700;
	letter-spacing: .12em;
	text-transform: uppercase;
	line-height: 24px;
	color: var(--hs-bordeaux);
	margin: 0 0 8px;
}
/* 16.09.2026: Rosé → Bordeaux, wie der uebrige Fliesstext (Hanna, 04.09.:
   „alle Fliesstextschriften quasi dunkelrot"). */
.hs-kommentare .comment-notes,
.hs-kommentare .logged-in-as {
	font-family: var(--hs-sans);
	font-size: 14px;
	line-height: 24px;
	color: var(--hs-bordeaux);
	margin: 0 0 24px;
}
.hs-kommentare .comment-form p { margin: 0 0 16px; }
.hs-kommentare .comment-form label {
	display: block;
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 600;
	color: var(--hs-bordeaux);
	margin-bottom: 6px;
}
.hs-kommentare .comment-form input[type="text"],
.hs-kommentare .comment-form input[type="email"],
.hs-kommentare .comment-form input[type="url"],
.hs-kommentare .comment-form textarea {
	width: 100%;
	box-sizing: border-box;
	background: var(--hs-komm-feld);
	border: 0;
	border-radius: 0;
	padding: 20px 22px;
	font-family: var(--hs-sans);
	font-size: 15px;
	line-height: 26px;
	color: var(--hs-bordeaux);
}
.hs-kommentare .comment-form textarea { min-height: 200px; }
.hs-kommentare .comment-form input::placeholder,
.hs-kommentare .comment-form textarea::placeholder { color: #C39C8E; }
.hs-kommentare .comment-form input:focus,
.hs-kommentare .comment-form textarea:focus { outline: 2px solid var(--hs-rose); outline-offset: -2px; }
.hs-kommentare .form-submit { margin: 24px 0 0; }
/* 🔴 16.09.2026: **eckig statt Pille** und auf die Werte des Seiten-Buttons
   gezogen (13/600, Versalien, ls 1, Polster 17/34 = `.hs-btn`). Anders als bei
   den Inhalts-CTAs stand hier zwischenzeitlich `text-transform: uppercase`.
   🔴 Chris, 16.09.2026: **keine Versalien**, „sondern so, wie sie geschrieben
   sind" — und zwar einheitlich, nicht je Knopf verschieden. */
.hs-kommentare .comment-form input[type="submit"] {
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 1px;
	color: var(--hs-white);
	background: var(--hs-rose);
	border: 0;
	border-radius: 0;
	padding: 17px 34px;
	cursor: pointer;
}
.hs-kommentare .comment-form input[type="submit"]:hover { background: var(--hs-bordeaux); }

.hs-kommentare .comment-list { list-style: none; margin: 18px 0 0; padding: 0; }
/* Einrueckung der Antworten. Doppelte Klasse, weil Elementors
   Kommentar-Widget hier sonst mit 30 px gewinnt. Bis Stufe 5 erlaubt
   (WP-Einstellung), tatsaechlich genutzt bis Stufe 3. */
.hs-kommentare.hs-kommentare .comment-list ol.children { list-style: none; margin: 0; padding: 0 0 0 36px; }
.hs-kommentare .comment-body {
	background: var(--hs-sand);
	padding: 26px 30px 22px;
	margin-bottom: 18px;
	position: relative;
}
.hs-kommentare .comment-author img { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; }
/* 16.09.2026 Rosé → Bordeaux — dieselbe Rolle wie die Autorzeile oben. */
.hs-kommentare .comment-author .fn {
	font-family: var(--hs-sans);
	font-size: 15px;
	font-weight: 700;
	font-style: normal;
	color: var(--hs-bordeaux);
}
.hs-kommentare .comment-author .says { display: none; }
.hs-kommentare .comment-metadata,
.hs-kommentare .comment-metadata a {
	font-family: var(--hs-sans);
	font-size: 12px;
	line-height: 20px;
	color: var(--hs-icon);
	text-decoration: none;
}
.hs-kommentare .comment-content {
	font-family: var(--hs-sans);
	font-size: 15px;
	line-height: 26px;
	color: var(--hs-bordeaux);
	margin-top: 10px;
}
.hs-kommentare .comment-content p { margin: 0 0 10px; }
.hs-kommentare .comment-content p:last-child { margin-bottom: 0; }
.hs-kommentare .reply { text-align: right; margin-top: 6px; }
/* 🔴 16.09.2026 **eckig statt Pille** — dritter Knopf mit Pillenform auf dieser
   Seite, aus demselben alten Entwurf. Hanna: „die Buttons vor allem, dass die
   stimmig sind zur restlichen Website." */
.hs-kommentare .comment-reply-link {
	display: inline-block;
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 600;
	color: var(--hs-bordeaux);
	background: var(--hs-white);
	border-radius: 0;
	padding: 7px 20px;
	text-decoration: none;
}
.hs-kommentare .comment-reply-link:hover { background: var(--hs-rose); color: var(--hs-white); }

@media (max-width: 767px) {
	.hs-kommentare.hs-kommentare .comment-list ol.children { padding-left: 16px; }
	.hs-kommentare .comment-body { padding: 20px 20px 18px; }
}

/* ---- Trennlinie zwischen Autorenbox und Kommentaren ------------------- */
.hs-blog-trenner { height: 1px; background: var(--hs-rose); opacity: .55; width: 100%; }

/* ---- Kennzahl mit Stern: das Sternzeichen ist als Glyphe zu wuchtig ---- */
/* ---- Kennzahl-Stern: gezeichnete Form statt Schriftzeichen ----
   Hanna hat am 09.09.2026 'Icon Stern.svg' geliefert (Drive: Branding/
   Website-Relaunch Elemente/Elemente Startseite). Eingebaut als CSS-MASKE,
   nicht als Bild: so erbt der Stern per `currentColor` die Textfarbe der
   Kennzahl und stimmt auch auf dunklem Grund (Challenge-Seiten liegen auf
   Bordeaux). Das urspruengliche Zeichen bleibt im Markup stehen und wird nur
   aus dem Sichtfeld geschoben - dadurch kein Eingriff in 10 Seiten noetig
   und Rueckbau = diesen Block loeschen.
   Zwei Faelle: `.hs-stern` ist der span IM Text '5 <span>*</span>' der acht
   Generator-Seiten; `.hs-stern--solo` sind Startseite und Quiz-LP, wo der
   Stern ein EIGENES Ueberschrift-Element neben der 5 ist. */
.hs-stern, .hs-stern--solo .elementor-heading-title{
	display:inline-block; width:1em; height:1em;
	overflow:hidden; text-indent:-10em;
	background-color:currentColor;
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 500 500'%3E%3Cpolygon points='250.15,15.86 308.03,194.01 495.34,194.01 343.8,304.1 401.68,482.25 250.15,372.15 98.61,482.25 156.49,304.1 4.95,194.01 192.26,194.01'/%3E%3C/svg%3E") center/contain no-repeat;
	        mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 500 500'%3E%3Cpolygon points='250.15,15.86 308.03,194.01 495.34,194.01 343.8,304.1 401.68,482.25 250.15,372.15 98.61,482.25 156.49,304.1 4.95,194.01 192.26,194.01'/%3E%3C/svg%3E") center/contain no-repeat;
}
.hs-stern{font-size:.62em;vertical-align:-.02em;margin-left:.1em;}
.hs-stern--solo .elementor-heading-title{vertical-align:-.04em;}

/* ---- ActiveCampaign-Formular (iframe auf die gehostete Fassung) ----
   Nicht ueber AC's Einbettungs-Skript: das haengt das Formular relativ zu seinem
   eigenen <script>-Tag ein. Elementor fuegt Skripte im HTML-Widget erst nach dem
   Laden ein - dann ist document.currentScript leer und es erscheint gar kein
   Formular. Das iframe rendert dieselbe, von Hanna gepflegte Fassung. ---- */
.hs-ac-frame{display:block;width:100%;min-height:560px;border:0;}
@media(max-width:767px){.hs-ac-frame{min-height:640px;}}

/* ---- Formularfelder: Spezifitaet anheben ----
   Hello Elementors reset.css adressiert `input[type="email"]` usw. — das ist (0,1,1)
   und schlaegt eine einzelne Klasse (0,1,0). Deshalb hier ueber Element + Klasse. ---- */
.hs-form input.hs-form__feld{color:#7A2742;background:#FFFFFF;border:1px solid #DDB2A5;border-radius:0;padding:10px 16px;width:100%;font-family:'Open Sans',sans-serif;font-size:15px;line-height:24px;}
.hs-form input.hs-form__feld:focus{outline:none;border-color:#A23559;}
.hs-form button.hs-form__btn{width:100%;}

/* ---- Vorher-Nachher-Kachel im Raster (0-Euro-Starterset, 31.08.2026) ----
   Hannas Fotovergleiche kommen in zwei Seitenverhaeltnissen: Vorlage 1/2 ist
   1200x425 (2,82), Vorlage 4 ist 800x425 (1,88). Stehen beide in EINEM Raster,
   sind die Kacheln unterschiedlich hoch — gemessen 239 vs. 337 px.
   Die feste Bildbox loest das: jedes Bild wird per `contain` so gross wie
   moeglich, ohne beschnitten zu werden, und alle Kacheln sind gleich hoch.
   `cover` waere hier falsch — es schnitte die VORHER/NACHHER-Balken ab.
   Auf dem Handy faellt die feste Hoehe weg: dort steht jede Kachel allein in
   ihrer Zeile, das Bild ist nur noch ~103 px hoch, und ein 250-px-Kasten darum
   waere reiner Leerraum. ---- */
.hs-vgbox{height:250px;display:flex;align-items:center;justify-content:center;}
.hs-vgbox img{max-width:100%;max-height:250px;width:auto;height:auto;display:block;}
@media(max-width:767px){
	.hs-vgbox{height:auto;}
	.hs-vgbox img{max-height:none;width:100%;}
}

/* ==========================================================================
   14. 5-Tage-Challenge (01.09.2026)
   --------------------------------------------------------------------------
   Alle Masse sind im Figma-Render (Node 938:2, 1440x16000) gemessen, nicht
   geschaetzt. Die Sektionsfarben ebenso: die drei Banner-/Formularbaender
   sind ROSE (#A23559), nicht Bordeaux - Bordeaux tragen nur die
   Screenshot-Wolke und "Ich bin Hanna Sacher".
   ========================================================================== */

/* --- 14.1 Datumsband ------------------------------------------------------
   Sandband, im Entwurf exakt 100 px hoch, drei Icon-Text-Paare nebeneinander.
   Der Text kommt aus den Thrive-Smart-Fields, steht also NICHT im Elementor-
   Inhalt - deshalb muessen die Absatzreste des Text-Widgets weg. */
.hs-datumsband { --padding-top: 0; --padding-bottom: 0; }
.hs-datumsband__zeile {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 14px 54px;
	min-height: 100px;
}
.hs-datumsband__paar {
	display: flex;
	align-items: center;
	gap: 14px;
	/* Elementor gibt einem Flex-Kind ohne gesetzte Breite die volle Breite -
	   ohne diese Zeile steht jedes Icon-Text-Paar in einer eigenen Zeile und das
	   Band wird 142 statt 100 px hoch (im Browser gemessen: 38+14+38+14+38). */
	width: auto;
	flex: 0 1 auto;
}
/* 16.09.2026: `flex-basis` und `height` auf auto. Die drei Band-Icons sind im
   Entwurf unterschiedlich gross (Kalender 55, Uhr 56, Webinar 63 - aus den
   Figma-Motiven 938:444/438/453 gerechnet), die Breite setzt jetzt der
   Generator je Bild. Eine feste Basis von 38px hat sie alle gleichgezogen. */
.hs-datumsband__paar img { width: 38px; height: auto; flex: 0 0 auto; }
/* 16.09.2026 auf Figma gezogen (Chris: "probieren wir mal aus"):
   938:442 gibt der Bandzeile Editor's Note 55/70,4 - gebaut waren 34 /
   Faktor 1,1 (= 37,4). Zeilenhoehe als Pixelwert. */
.hs-datumsband__paar p {
	margin: 0;
	font-family: var(--hs-serif);
	/* 55 px ist Figmas Wert und gilt ab ~1280 px Fensterbreite. Darunter MUSS
	   die Zeile mitschrumpfen: das Band ist `nowrap` und 100 px hoch, bei
	   1440 bleiben nur 34 px Luft (gemessen: Inhalt 1098 + 2x54 Gap = 1206 in
	   1240). Bei 1100 px brach "live" in eine zweite Zeile und das Band wuchs
	   auf 155 px. Ein harter Breakpoint bei 1024 kam dafuer zu spaet, deshalb
	   stufenlos zwischen 1024 und 1280 px:
	       Steigung (55-38) / (1280-1024) = 0,0664 px je px Fensterbreite.
	   Die Zeilenhoehe steht hier ausnahmsweise als FAKTOR, weil die Groesse
	   mitwandert - 1,28 ist dabei kein geschaetzter Wert, sondern Figmas
	   dokumentierte Editor's-Note-Regel (Zeilenhoehe = 1,28 x Groesse), die
	   bei 55 px genau die 70,4 aus Knoten 938:442 ergibt. */
	font-size: clamp(38px, calc(38px + (100vw - 1024px) * 0.0664), 55px);
	font-weight: 300;
	line-height: 1.28;
	color: var(--hs-bordeaux);
	white-space: nowrap;
}
/* 🔴 16.09.2026: die Termin-Zeile IM Eintrageformular ist NICHT das Datumsband.
   Beide tragen `hs-datumsband__paar`; als das Band heute auf Figmas 55 px ging,
   wuchs die Formularzeile lautlos mit. Der Entwurf trennt sie deutlich:
       Band                938:442            55/70,4
       Formularzeile       938:351 / 938:305  30/38,4
   Der Modifier steht NACH der Grundregel und schlaegt sie mit (0,2,0). */
.hs-datumsband__paar--imform p {
	font-size: 30px;
	line-height: 38.4px;
}
@media (max-width: 767px) {
	.hs-datumsband__zeile { gap: 12px 24px; padding: 26px 0; }
	.hs-datumsband__paar p { font-size: 24px; line-height: 30.7px; white-space: normal; }
	.hs-datumsband__paar--imform p { font-size: 20px; line-height: 25.6px; }
	.hs-datumsband__paar img { width: 28px; }
}

/* --- 14.2 Countdown-Band --------------------------------------------------
   Sandband, 175 px. Die Ziffern liefert Thrive Ultimatum ueber
   `[tu_countdown]`; deren Innenleben gehoert dem Ultimatum-Design und wird
   hier bewusst NICHT ueberschrieben - nur ausgerichtet. Faellt der Shortcode
   leer aus (Kampagne nicht "running"), rendert `[hs_challenge_countdown]`
   gar nichts und das Band verschwindet mitsamt seiner Hoehe. */
.hs-cdband { --padding-top: 0; --padding-bottom: 0; }
.hs-cdband__zeile {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 10px 40px;
	min-height: 175px;
	padding: 20px 0;
}
.hs-cdband__label {
	margin: 0;
	font-family: var(--hs-serif);
	font-size: 30px;
	font-weight: 300;
	line-height: 1.2;
	color: var(--hs-bordeaux);
}
.hs-cdband__uhr { display: flex; align-items: center; }
@media (max-width: 767px) {
	.hs-cdband__zeile { min-height: 0; gap: 14px; padding: 28px 0; }
	.hs-cdband__label { font-size: 22px; text-align: center; }
}

/* --- 14.3 Banner-Karten auf Rose -----------------------------------------
   Drei Sandkarten auf dem Roseband, im Entwurf je 383 px breit bei 41 px
   Abstand. Titel serif, Flowtext sans - beide zentriert. */
.hs-bkarte {
	--padding-top: 30px; --padding-right: 28px;
	--padding-bottom: 34px; --padding-left: 28px;
	background-color: var(--hs-sand);
	text-align: center;
}
/* 16.09.2026: `height` auf auto, Breite je Bild aus dem Generator. Figma gibt
   den drei Banner-Icons unterschiedliche Groessen (Kalender 32, Frau 38,
   Check 48 - aus den Motiven 938:86/84/99 gerechnet), 44 galt fuer alle. */
.hs-bkarte img { width: 44px; height: auto; margin: 0 auto; }
/* 16.09.2026 auf Figma gezogen (Chris' Freigabe). Gemessen an den drei
   Banner-Karten 938:70: Titel 938:73/77/81 = Editor's Note 28/35,8 (war
   26 / Faktor 1,24), Fliesstext 938:74/78/82 = Open Sans 18/26 (war 15 /
   Faktor 1,6). Zeilenhoehen als PIXELWERT - Lehre vom 12.09.2026: ein Faktor
   laesst sich nicht gegen Figma pruefen, ohne erst zu rechnen. */
.hs-bkarte__titel .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 28px;
	font-weight: 300;
	line-height: 35.8px;
	color: var(--hs-bordeaux);
}
.hs-bkarte p {
	margin: 0;
	font-family: var(--hs-sans);
	font-size: 18px;
	line-height: 26px;
	color: var(--hs-bordeaux);
}
/* Karte 1 und 3 stehen im Entwurf DURCHGEHEND fett (938:78 und 938:74 je
   w700), Karte 2 normal (938:82 w400). Als Modifier, damit die <strong>-
   Auszeichnungen im Text erhalten bleiben und nicht doppelt wirken. */
.hs-bkarte--fett p { font-weight: 700; }
.hs-bkarte a { color: var(--hs-bordeaux); text-decoration: underline; font-weight: 600; }

/* --- 14.4 Stepper "Das erwartet dich" ------------------------------------
   Weisse Karten untereinander, dazwischen der Doppelpfeil aus Hannas
   Icon-Satz und eine duenne Linie. Die Linie liegt auf einem eigenen
   Element und NICHT auf `.e-con::before`: Pseudo-Elemente eines Elementor-
   Containers gehoeren Elementor (Falle 6 vom 31.08.2026, dort traegt
   `.e-con::before` bereits `height:100%` fuer Hintergrund-Overlays). */
.hs-stepper { max-width: 890px; margin: 0 auto; }
.hs-stepper__karte {
	--padding-top: 44px; --padding-right: 46px;
	--padding-bottom: 44px; --padding-left: 46px;
	background-color: var(--hs-white);
	text-align: center;
}
/* 16.09.2026: `height` auf auto. Die vier Icons sind seit heute unterschiedlich
   breit (44/37/53/44, aus den Figma-Motiven gerechnet) - eine feste Hoehe von
   46 px hat sie dadurch verzerrt (gemessen 37x46, 53x46). Alle vier SVGs haben
   viewBox 0 0 500 500, also ergibt `auto` exakt die Breite. */
.hs-stepper__karte img { width: 46px; height: auto; margin: 0 auto 6px; }
.hs-stepper__titel .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 30px;
	font-weight: 300;
	line-height: 1.25;
	color: var(--hs-bordeaux);
}
.hs-stepper__karte p {
	margin: 0 0 14px;
	font-family: var(--hs-sans);
	font-size: 16px;
	line-height: 1.65;
	color: var(--hs-bordeaux);
}
.hs-stepper__karte p:last-child { margin-bottom: 0; }
.hs-stepper__pfeil {
	display: flex;
	flex-direction: column;
	align-items: center;
	padding: 14px 0 0;
}
.hs-stepper__pfeil img { width: 34px; height: 34px; }
.hs-stepper__pfeil::after {
	content: "";
	display: block;
	width: 1px;
	height: 56px;
	background: var(--hs-rose);
}
@media (max-width: 767px) {
	.hs-stepper__karte { --padding-right: 24px; --padding-left: 24px; }
	.hs-stepper__titel .elementor-heading-title { font-size: 23px; }
	.hs-stepper__pfeil::after { height: 34px; }
}

/* --- 14.5 Screenshot-"Wolke" (Facebook-Gruppe) ---------------------------
   Notion: "Screenshots als Wolke anordnen - ihr koennt sie so anordnen, dass
   es in der Wolke gut aussieht". Umgesetzt als versetztes Raster: jede zweite
   Kachel sitzt tiefer, die Breiten wechseln. Bewusst KEINE absolute
   Positionierung - die Screenshots haben laut Notion variable Hoehen
   ("Screenshot immer auf Breite der Vorlage ziehen, Hoehe darf variieren"),
   ein festes Koordinatengitter wuerde daran zerbrechen. */
.hs-wolke {
	display: flex;
	flex-wrap: wrap;
	/* 20.09.2026: `center` statt `flex-start`. Die Blasen sind unterschiedlich
	   hoch (40..103 px bei 380 px Breite); oben ausgerichtet haengt in einer
	   Zeile mit einer hohen Blase die niedrige sichtbar zu hoch bzw. der Rest
	   der Zeile "rutscht" optisch nach unten. Chris, 20.09.: „sie sollten ja
	   auf einer Linie sein".
	   🔑 Im Figma AUSGEMESSEN (Leinwand „LP Challenge", Blasen-Mitten je Zeile):
	        Zeile 1   280 · 276          -> 4 px auseinander
	        Zeile 2   412 · 404 · 404    -> 8 px
	        Zeile 3   547 · 540          -> 7 px
	   Bei 57..89 px hohen Blasen ist das mittig. Der Entwurf zentriert also
	   jede Zeile — `align-items` wirkt in `flex-wrap` PRO ZEILE, genau das. */
	align-items: center;
	justify-content: center;
	gap: 22px 26px;
}
.hs-wolke img {
	display: block;
	/* Die Kommentarblasen sind 521-600 px breit angeliefert; im Entwurf stehen
	   sie rund 380 px breit nebeneinander. Ueber die Breite (nicht die Hoehe)
	   begrenzen, damit die unterschiedlich hohen Blasen ihr Verhaeltnis behalten. */
	width: auto;
	/* 16.09.2026: `min(380px, 100%)` statt 380px. Mobil ist die Spalte nur
	   335 px breit - die feste Obergrenze liess die Blasen 380 px breit
	   werden und die Seite 2 px waagerecht auflaufen (gemessen bei 375 px:
	   Wolke scrollWidth 358 gegen clientWidth 335). Dasselbe Muster wie
	   `hs-breitfest`: eine feste Pixelbreite braucht ihre 100-%-Grenze. */
	max-width: min(380px, 100%);
	height: auto;
	flex: 0 1 auto;
}
/* 20.09.2026: Zeilenumbruch-Marke. `flex-basis:100%` zwingt die naechste
   Kachel in eine neue Zeile — anders laesst sich in `flex-wrap` keine
   Zeilenlaenge vorgeben. Das Figma zeichnet die Wolke als **2 / 3 / 2**
   (oben zwei Blasen, zur Mitte gerueckt), nicht als gleichmaessiges
   Dreierraster. Unter 768 px ausgeblendet — dort steht ohnehin eine je Zeile. */
.hs-wolke__br { flex-basis: 100%; height: 0; margin: 0; padding: 0; }

/* 🔴 Der 42-px-Wechselversatz ist am 20.09.2026 ENTFALLEN. Er sollte die
   „Wolke" erzeugen, war aber fuenf- bis zehnmal groesser als das, was der
   Entwurf zeigt (4..8 px, s. o.) — und er war genau die Ursache dafuer, dass
   in der Mittelzeile die mittlere Blase deutlich tiefer stand als ihre
   Nachbarn. Das Wolkige kommt im Figma aus den unterschiedlichen WAAGERECHTEN
   Positionen und dem 2/3/2-Rhythmus, nicht aus einem senkrechten Versatz. */
/* 🔑 Die Marken gelten NUR, solange drei Blasen nebeneinander passen.
   Gerechnet: 3 x 380 + 2 x 26 = 1192 px. Unter ~1230 px Fensterbreite bricht
   die Wolke ohnehin von selbst um; die Marken wuerden dort nur zwei leere
   Flex-Zeilen erzeugen (je ein Zeilenabstand von 22 px Luft, gemessen bei
   768 px). Deshalb ab 1024 px abwaerts aus. */
@media (max-width: 1024px) {
	.hs-wolke__br { display: none; }
}
@media (max-width: 767px) {
	.hs-wolke { gap: 16px; }
}

/* --- 14.6 Offene Bildstrecken --------------------------------------------
   Sichtbare Leerstelle fuer Material, das laut Notion vorgesehen, aber noch
   nicht aufbereitet ist (FB-Wolke, zwei Bewertungssaetze, Challenge-Video).
   Bewusst sichtbar und benannt statt stillschweigend weggelassen - damit auf
   der Seite steht, was noch fehlt, und niemand sie fuer fertig haelt.
   VOR GO-LIVE MUESSEN ALLE `.hs-offen` VERSCHWUNDEN SEIN. */
.hs-offen {
	border: 1px dashed var(--hs-icon);
	background: rgba(255, 255, 255, .45);
	padding: 30px 26px;
	text-align: center;
}
.hs-offen p {
	margin: 0;
	font-family: var(--hs-sans);
	font-size: 14px;
	line-height: 1.6;
	color: var(--hs-rose);
}
.hs-offen p strong { display: block; margin-bottom: 4px; letter-spacing: .04em; }

/* --- 14.7 Zahlen-Segment -------------------------------------------------- */
.hs-zahl .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 60px;
	font-weight: 300;
	line-height: 1;
	color: var(--hs-bordeaux);
}
@media (max-width: 767px) { .hs-zahl .elementor-heading-title { font-size: 44px; } }

/* --- 14.8 Challenge-Hero: dunkler Schleier ---------------------------------
   Der Entwurf legt den Hero-Text WEISS auf das Foto. Auf dem rohen Bild
   (rechte Wandflaeche ~#EDE3DA) waere das praktisch unlesbar. Im Figma ist die
   Flaeche hinter dem Text mit #9B8C84 gemessen - das Foto liegt dort also
   unter einem Schleier von rund 36 % Schwarz. Genau der wird hier gesetzt,
   statt ihn ins Bild einzubrennen: so bleibt das Foto austauschbar.

   ⚠️ Weiss auf #9B8C84 ergibt ein Kontrastverhaeltnis von etwa 3,1:1. Fuer
   grosse Schrift (H1) reicht das nach WCAG AA, fuer den Fliesstext darunter
   NICHT (gefordert 4,5:1). Der Schleier ist deshalb bewusst als eine Stelle
   gebaut: `--hs-hero-schleier` hochdrehen loest es fuer die ganze Sektion.
   Steht als Punkt in der Lieferliste. */
/* 🔑 16.09.2026 auf Figma gezogen (Chris: "wir muessen das Overlay von Figma
   nehmen"). Der Entwurf hat an dieser Stelle KEIN Schwarz, sondern ein warmes
   Dunkelbraun - Knoten 938:52 (Challenge) und 4:51 (Startseite), beide gleich:
       Farbe #3B2C24, Knoten-opacity 0,50 x Fuellungs-opacity 0,90 = 0,45
   Gebaut war `rgba(0,0,0,.36)`. Die 36 % klingen heller als Figmas 45 %,
   wirken aber DUNKLER: Schwarz drueckt die Tiefen zu, das warme Braun hebt
   sie an. Am echten Hero-Bild gemessen (Flaechenanteil unter Helligkeit 40):
       Schwarz 36 %   ->  8 % der Heroflaeche abgesoffen
       #3B2C24 45 %   ->  2 %
   Der Textkontrast bleibt dabei praktisch gleich (3,07 gegen 3,05 : 1), es
   ist also reine Anmutung, keine Lesbarkeitsfrage.
   ⚠️ Vor der Aenderung ueber ALLE 914 Elementor-Dokumente des Servers gezaehlt,
   wer `hs-hero-dunkel` traegt: nur 10756 und 10757, je einmal. Keine andere
   Seite haengt daran. (Nicht nur die Generatoren pruefen - Startseite und
   Quiz-LP haben keinen.)
   Die Farbe steht als eigene Variable, damit der mobile Wert dieselbe Farbe
   benutzt und nur die Deckkraft wechselt. */
.hs-hero-dunkel {
	position: relative;
	--hs-hero-schleierfarbe: 59, 44, 36;   /* #3B2C24 */
	--hs-hero-schleier: .45;
}
.hs-hero-dunkel::before {
	content: "";
	position: absolute;
	inset: 0;
	height: 100%;               /* explizit: `.e-con::before` gehoert sonst Elementor */
	background: rgba(var(--hs-hero-schleierfarbe), var(--hs-hero-schleier));
	pointer-events: none;
	z-index: 0;
}
.hs-hero-dunkel > * { position: relative; z-index: 1; }
.hs-hero-dunkel .hs-h1 .elementor-heading-title,
.hs-hero-dunkel .hs-body .elementor-widget-container,
.hs-hero-dunkel .hs-body p,
.hs-hero-dunkel .hs-note .elementor-heading-title,
/* 🔴 16.09.2026 ergaenzt (Chris' Fund): die Kleinzeile unter dem Hero-Knopf
   stand BORDEAUX auf dem dunklen Hero-Bild. Die Zeile darueber deckt nur
   `.hs-note .elementor-heading-title` ab - also ausschliesslich UEBERSCHRIFTEN-
   Widgets. Die Challenge-Kleinzeile ("Du erfaehrst als Erste, wann es
   losgeht.") ist aber ein TEXT-EDITOR-Widget und fiel deshalb auf
   `.hs-note.elementor-widget-text-editor{color:var(--hs-bordeaux)}` (Zeile 333)
   zurueck. Genau das Muster, das im Fehlerprotokoll als ".hs-note wirkt nur
   auf Ueberschriften-Widgets" notiert ist - hier zum ersten Mal mit
   Kontrastfolge. Spezifitaet (0,3,0) schlaegt die (0,2,0) aus Zeile 333, und
   die Regel steht spaeter in der Datei. */
.hs-hero-dunkel .hs-note.elementor-widget-text-editor,
.hs-hero-dunkel .hs-note.elementor-widget-text-editor p { color: var(--hs-white); }

/* --- Kleinzeile unter den CTA-Knoepfen: kursiv ------------------------------
   Hannas Wunsch aus dem Call vom 04.09.2026 [16:28-17:06], von Chris am
   07.09.2026 praezisiert: gemeint sind die kleinen Zeilen UNTER den Buttons
   ("3 Uebungen - kurze, knackige Videos zum Mitueben - kein Vorwissen noetig"),
   und zwar auf ALLEN Seiten.

   ⚠️ Das weicht bewusst vom Entwurf ab. Figma setzt diese Zeilen aufrecht:
   14 px, Open Sans Regular (w400), Bordeaux auf hellen und Weiss auf dunklen
   Flaechen - acht Vorkommen geprueft, kein einziges kursiv. Kursiv nutzt der
   Entwurf nur fuer Testimonial-Zitate in 18 px (30 Knoten). Groesse, Gewicht
   und Farbe bleiben deshalb unveraendert - NUR der Schnitt aendert sich.

   🔑 Warum ueber den Geschwister-Selektor und nicht ueber `.hs-note`:
   `.hs-note` steckt 82x in den Seiten, aber nur 27x als Button-Unterzeile.
   Die uebrigen 55 sind Bewertungszitate, Kennzahl-Beschreibungen und
   "Bonus-Inhalte:"-Zeilen - die duerfen NICHT kursiv werden. `+` trifft genau
   die Zeile, die unmittelbar auf einen Button folgt, und gilt automatisch
   auch fuer jede kuenftige Seite. */
/* 15.09.2026 — derselbe Fall unter einem FORMULAR. Der Absendeknopf ist ein
   `<button>` INNERHALB des Formular-Markups, kein Elementor-Button-Widget;
   der Nachbar-Selektor oben greift dort also nicht, und die Kleinzeile fiel
   auf Elementors geerbte 18/34 aufrecht zurueck (Stirnfalten-Check, gemessen).
   Das Formular-Widget traegt dafuer `hs-formwidget`. Werte bewusst identisch
   mit der Button-Regel — es ist dieselbe Zeile in derselben Rolle. */
.elementor-widget-button + .hs-note,
.elementor-widget-button + .hs-note .elementor-heading-title,
.hs-formwidget + .hs-note,
.hs-formwidget + .hs-note .elementor-heading-title {
	font-style: italic;
	/* 14/20 ist der Figma-Wert dieser Zeilen — nachgeschlagen fuer die
	   Kursseite („Du bekommst sofort nach der Anmeldung Zugriff…", „Schaue in
	   12 Wochen…") und die Challenge, alle 14 px / w400. Hanna im Call
	   [16:55]: kursiv ‚und eben in der vorgegebenen Schriftgroesse'.
	   Noetig, weil `.hs-note` die 14 px nur fuer UEBERSCHRIFTEN-Widgets setzt
	   (`.elementor-heading-title`); als Text-Widget gebaute Zeilen erbten
	   dadurch 18 px — dieselbe Klasse, zwei Groessen je nach Widget-Typ. */
	font-size: 14px;
	line-height: 20px;
}
@media (max-width: 767px) {
	/* Mobil steht der Text direkt auf dem Motiv, deshalb schon vorher ein
	   staerkerer Schleier (.48 in Schwarz). Das warme Braun dunkelt deutlich
	   weniger ab, der Wert muss dafuer hoeher liegen - unten nachgemessen. */
	.hs-hero-dunkel { --hs-hero-schleier: .60; }
}

/* Ein einzelner Screenshot statt einer Wand - Notion nennt an der letzten
   Stelle nur eine Datei. Gleiche Klasse, nur einspaltig und schmaler. */
.hs-ssgitter--eins {
	column-count: 1;
	max-width: 620px;
	margin: 0 auto;
}

/* ==========================================================================
   15. 5-Tage-Challenge — Korrekturrunde 01.09.2026 (Chris' Durchsicht)
   Alle Masse im Figma-Render nachgemessen, nicht geschaetzt.
   ========================================================================== */

/* --- 15.1 Video: 900 x 520 statt volle Breite -----------------------------
   Im Entwurf ist der Videorahmen 900 px breit (x 270..1169) und 520 hoch,
   nicht 1240. Ohne Deckelung fuellt Elementors Video-Widget die ganze
   Sektionsbreite - gemessen 1240 x 698. */
.hs-video { max-width: 900px; margin-left: auto; margin-right: auto; }

/* --- 15.2 Bannerkarte 1: Titel traegt das Datum ---------------------------
   Karte 1 setzt ihren Titel als TEXT-Widget, weil der Zeitraum aus einem
   Smart Field kommt und Ueberschriften-Widgets keine Shortcodes rendern.
   Damit greift aber `.hs-bkarte p` (Fliesstext, 15 px) statt der Titelregel -
   gemessen 15 px gegen 26 px bei den beiden Nachbarkarten. Diese Regel steht
   NACH `.hs-bkarte p` und hat dieselbe Spezifitaet, gewinnt also. */
/* Dieselben Werte fuer das TEXT-Widget: Karte 1 setzt ihren Titel als
   Text-Widget, weil der Zeitraum aus einem Smart Field kommt und
   Ueberschriften-Widgets keine Shortcodes rendern. 16.09.2026 auf 28/35,8. */
.hs-bkarte__titel p {
	margin: 0;
	font-family: var(--hs-serif);
	font-size: 28px;
	font-weight: 300;
	line-height: 35.8px;
	color: var(--hs-bordeaux);
}
@media (max-width: 767px) {
	/* 🔴 Reihenfolge ist hier entscheidend (Fehler vom 16.09., selbst eingebaut):
	   `.hs-bkarte p` und `.hs-bkarte__titel p` haben BEIDE (0,1,1). Stand die
	   Fliesstext-Regel weiter unten, gewann sie - und Karte 1 zeigte ihren Titel
	   mit 16 px statt 23, weil ihr Titel ein TEXT-Widget ist (Smart Field).
	   Karte 2 und 3 waren nicht betroffen, deren Titel sind Ueberschriften.
	   Genau die Geschwisterregel-Falle vom 15.09. Deshalb: Fliesstext ZUERST,
	   Titel danach - und der Titel zusaetzlich mit doppelter Klasse abgesichert,
	   damit die Reihenfolge nicht wieder unbemerkt kippt. */
	.hs-bkarte p { font-size: 16px; line-height: 24px; }
	.hs-bkarte__titel.hs-bkarte__titel p,
	.hs-bkarte__titel.hs-bkarte__titel .elementor-heading-title {
		font-size: 23px;
		line-height: 29.4px;
	}
}

/* --- 15.3 Datumszeile auf Rose: weiss, nicht bordeaux ---------------------
   In den beiden Formularsektionen steht dieselbe Datumszeile auf Rose
   (#A23559). Bordeaux auf Rose ist praktisch unlesbar; im Figma ist der Text
   dort WEISS (gemessen). Die Icons ebenso - sie liegen als #DDB2A5-SVG vor
   und werden hier per Filter auf Weiss gezogen, statt drei zusaetzliche
   Dateien zu pflegen. */
.hs-on-dark .hs-datumsband__paar p { color: var(--hs-white); }
.hs-on-dark .hs-datumsband__paar img { filter: brightness(0) invert(1); }

/* --- 15.4 Stepper: Icon sitzt AUF der Kartenkante -------------------------
   Im Entwurf schneidet die Kartenoberkante durch das Icon (Karte 1: Icon
   y 9212..9253, Kartenkante 9243 - also rund die obere Haelfte liegt
   ausserhalb). Der Verbinder unten macht dasselbe an der Unterkante: der
   Doppelpfeil ragt 7 px in die Karte hinein (y 9483..9508, Kante 9490),
   darunter folgt eine 42 px lange Linie.
   Karten sind Flex-Container - deshalb kollabieren die negativen Margins
   NICHT mit der Karte, das Icon wandert allein nach oben. */
.hs-stepper__karte img { margin-top: -23px; }
/* 16.09.2026: der Ueberstand je Icon, seit die vier unterschiedlich gross sind.
   Aus Figma gerechnet (Icon-Rahmen-Oberkante minus Kartenoberkante):
     Frau      938:274 y 9211 / Karte 938:238 y  9243 -> -32
     Stift     938:268 y 9922 / Karte 938:243 y  9939 -> -18  (Motiv, nicht der
               68er Rahmen - das Motiv darin ist nur 35 px)
     Spiegel   938:261 y 9568 / Karte 938:242 y  9593 -> -25
     Nachricht 938:254 y10276 / Karte 938:249 y 10298 -> -22
   Doppelte Klasse, weil Elementors eigene Element-Regel (0,3,1) sonst
   gewinnt; sie setzt allerdings nur `width`, der Margin bleibt hier. */
.elementor-element-st-ki1.elementor-element-st-ki1 img { margin-top: -32px; }
.elementor-element-st-ki2.elementor-element-st-ki2 img { margin-top: -18px; }
.elementor-element-st-ki3.elementor-element-st-ki3 img { margin-top: -25px; }
.elementor-element-st-ki4.elementor-element-st-ki4 img { margin-top: -22px; }
.hs-stepper__karte .hs-stepper__titel { margin-top: 30px; }

.hs-stepper__pfeil {
	margin-top: -7px;      /* Pfeil ragt oben in die vorige Karte hinein */
	/* 21, nicht 29: der Verbinder misst gerendert 88 px (das Bild-Widget bringt
	   8 px mit, die sich nicht wegkonfigurieren lassen). 88 - 7 + 21 = 102 -
	   genau die Figma-Luecke. Nachgemessen, nicht gerechnet. */
	margin-bottom: 21px;
	padding-top: 0;
}
/* Das Bild-Widget bringt eigene Zeilenhoehe mit - ohne `display:block` und
   `line-height:0` war der Verbinder 108 statt 80 px hoch und die Luecke
   zwischen den Karten 130 statt 102. */
.hs-stepper__pfeil .elementor-widget-image,
.hs-stepper__pfeil .elementor-widget-container { line-height: 0; }
.hs-stepper__pfeil img { width: 26px; display: block; }
.hs-stepper__pfeil::after { margin-top: 12px; height: 42px; }
@media (max-width: 767px) {
	.hs-stepper__pfeil { margin-bottom: 18px; }
	.hs-stepper__pfeil::after { height: 28px; }
}

/* --- 15.4b Der Strich darf nicht ins Icon laufen (20.09.2026) --------------
   Hannas Kommentar (Notion #238): „hier ist der Strich zwischen den Bloecken
   etwas unsauber platziert (Strich geht in Icon rein) bitte Abstand
   korrigieren." Chris hat die Stelle benannt: zwischen „Die korrekte
   Ausfuehrung" und „Gesichtsanalyse", also am Spiegel-Icon.

   GEMESSEN am gerenderten Element (1440 px), Strich-Unterkante zu Icon-Oberkante:
       Verbinder 2 (Stift)        +4,3 px
       Verbinder 3 (Spiegel)      **-4,0 px**  <- laeuft ins Icon
       Verbinder 4 (Nachrichten)  -1,0 px      <- auch, nur knapp
   ⚠️ Eine fruehere Messung ergab +23/+19/+21 und damit „alles in Ordnung" —
      sie lief, bevor die SVGs geladen waren, und die Icon-Kaesten meldeten
      Hoehe 0. **Icons erst laden lassen, dann messen.**

   URSACHE: Die drei Icons haengen unterschiedlich weit in den Abstand hinein
   (-18 / -25 / -22, aus dem Figma uebernommen, s. 15.4). Der Verbinder hatte
   aber EINE feste Linienlaenge und EINEN festen Abstand fuer alle drei — das
   kann bei drei verschiedenen Ueberhaengen nicht aufgehen.

   🔑 DAS FIGMA MACHT ES GENAU DESHALB ANDERS: dort ist die Linie NICHT gleich
   lang. Gemessen auf der Leinwand „LP Challenge":
       Line 10  y 9520..9562 (h 41)  -> Spiegel     y 9568   = 6 px Luft
       Line 11  y 9867..9916 (h 49)  -> Stift       y 9922   = 6 px Luft
       Line 12  y 10225..10274 (h 49) -> Nachricht  y 10276  = 2 px Luft
   Sabine hat jede Linie einzeln auf ihr Icon abgestimmt. Genau das wird hier
   nachgezogen — Ziel ist durchgehend **6 px Luft**.

   🔑 UND DER KARTENABSTAND BLEIBT: Abstand = Verbinderhoehe - 7 + margin-bottom,
   die Verbinderhoehe ist 46 + Linienlaenge (26 Pfeil + 8 Widget + 12 Vorlauf).
   Damit 102 px (Figma) erhalten bleiben, gilt  Linie = 63 - margin-bottom.
       Verbinder 2:  margin-bottom 23  ->  Linie 40
       Verbinder 3:  margin-bottom 31  ->  Linie 32
       Verbinder 4:  margin-bottom 28  ->  Linie 35
   Mobil ist der Abstand 85 px, dort gilt  Linie = 46 - margin-bottom.
   Doppelte Klasse, weil Elementors eigene Element-Regel sonst gewinnt. */
.elementor-element-st-p2.elementor-element-st-p2 { margin-bottom: 23px; }
.elementor-element-st-p3.elementor-element-st-p3 { margin-bottom: 31px; }
.elementor-element-st-p4.elementor-element-st-p4 { margin-bottom: 28px; }
.elementor-element-st-p2.elementor-element-st-p2::after { height: 40px; }
.elementor-element-st-p3.elementor-element-st-p3::after { height: 32px; }
.elementor-element-st-p4.elementor-element-st-p4::after { height: 35px; }
@media (max-width: 767px) {
	.elementor-element-st-p2.elementor-element-st-p2::after { height: 23px; }
	.elementor-element-st-p3.elementor-element-st-p3::after { height: 15px; }
	.elementor-element-st-p4.elementor-element-st-p4::after { height: 18px; }
}

/* --- 15.5 Haken-Zeilen "In nur 5 Tagen" -----------------------------------
   Das Icon steht VOR dem Text, nicht darueber. Mit Prozentbreiten (6 % / 92 %)
   plus Abstand reisst die Zeile bei schmaleren Fenstern um und das Icon
   landet ueber dem Text. Feste Icon-Breite, Text nimmt den Rest. */
.hs-hakenzeile { flex-wrap: nowrap; }
.hs-hakenzeile > .e-con:first-child { flex: 0 0 30px; width: 30px; }
.hs-hakenzeile > .e-con:last-child  { flex: 1 1 auto; width: auto; }
@media (max-width: 767px) {
	.hs-hakenzeile { flex-wrap: nowrap; }
	.hs-hakenzeile > .e-con:last-child { width: auto; }
}

/* --- 15.6 Buttons in hellen Karten auf dunklem Grund ----------------------
   `.hs-on-dark .hs-card:not(.hs-card--bordeaux) *` dreht ALLES in der Karte auf
   Bordeaux zurueck - auch die Beschriftung eines Buttons. In der Garantie-Karte
   stand dadurch Bordeaux (#7A2742) auf der Rose-Flaeche (#A23559) des Buttons
   statt Weiss; gemeldet von Chris am 03.09.2026, betrifft die Kursseiten
   Gesamt Gesicht (9790/9809) und Stirn & Augen (10806/10807) gleichermassen.
   Die Rueckdreh-Regel hat Spezifitaet (0,3,0) - diese hier (0,4,0) gewinnt.
   Die Button-Varianten bringen ihre Textfarbe selbst mit; hier wird sie nur
   wiederhergestellt, nicht neu erfunden.
   ⚠️ Elementor legt die Beschriftung in zwei verschachtelte <span>
   (`elementor-button-content-wrapper` > `elementor-button-text`). Der
   Universalselektor der Rueckdreh-Regel trifft die Spans DIREKT - eine Regel
   nur auf dem <a> aendert dann nur dessen eigene Farbe, die Spans erben sie
   gar nicht. `getComputedStyle` am <a> meldet trotzdem Weiss. Deshalb hier
   die Nachfahren mitnehmen - und am Pixel gegenpruefen, nicht am Computed
   Style des Wrappers. */
.hs-on-dark .hs-card .hs-btn--primary .elementor-button,
.hs-on-dark .hs-card .hs-btn--primary .elementor-button *{color:var(--hs-white);fill:var(--hs-white);}
.hs-on-dark .hs-card .hs-btn--light .elementor-button,
.hs-on-dark .hs-card .hs-btn--light .elementor-button *{color:var(--hs-bordeaux);fill:var(--hs-bordeaux);}
.hs-on-dark .hs-card .hs-btn--ghost .elementor-button,
.hs-on-dark .hs-card .hs-btn--ghost .elementor-button *{color:var(--hs-white);fill:var(--hs-white);}
.hs-on-dark .hs-card .hs-btn--ghost .elementor-button:hover,
.hs-on-dark .hs-card .hs-btn--ghost .elementor-button:hover *{color:var(--hs-bordeaux);fill:var(--hs-bordeaux);}

/* --- 15.7 Icons auf der Kartenkante: Font-Awesome wie ein Bild behandeln ---
   In den Leistungs-Karten der Kursseiten sitzt das Icon auf der Oberkante der
   weissen Box und ragt 7 px hinein (Figma-Mass). Fuer die SVG-Bilder stimmt das;
   die zwei Font-Awesome-Interims (Icons fehlen im Drive) sassen 6 px zu hoch und
   ragten nur 1 px hinein. Grund ist keine Groessenangabe, sondern die Grundlinie:
   Elementor rendert `.elementor-icon` als `inline-block`, der Wrapper hat
   `line-height: 24px` - darunter haengt die Unterlaenge einer Textzeile.
   Gemessen: Glyphe 38 px hoch, Wrapper 44 px. Mit `line-height: 0` faellt der
   Ueberhang weg und die Unterkante liegt wieder auf der der Bild-Icons.
   Die Groesse selbst kommt weiterhin aus dem Generator (`size`), nicht von hier. */
.hs-stapel__vorn .elementor-icon-wrapper{line-height:0;}

/* --- 15.8 Fluent Forms im Seitenlook ---------------------------------------
   Die Challenge-Umfrage lief zuerst als eingebettete Notion-Seite: Farbschema
   nicht steuerbar, keine Gestaltungshoheit, Fremd-iframe. Seit 03.09.2026 ist
   es ein eigenes Fluent-Forms-Formular. Diese Regeln ziehen es auf dieselbe
   Optik wie `.hs-form` (Warteliste/Starterset) — Sand-Rahmen, Creme-Flaeche,
   Rose im Fokus, Open Sans in Bordeaux.
   ACHTUNG: Hello Elementors reset.css schlaegt einzelne Klassen bei
   Formularfeldern (`input[type=text]` = (0,1,1)) — deshalb hier ueberall
   Element UND Klasse zusammen. */
.hs-umfrage .frm-fluent-form{--ff-rand:#E3D5CB;}
.hs-umfrage .ff-el-input--label label{font-family:var(--hs-sans);font-size:14px;font-weight:600;color:var(--hs-bordeaux);margin-bottom:6px;}
.hs-umfrage .ff-el-help-message{font-family:var(--hs-sans);font-size:12.5px;line-height:1.5;color:var(--hs-rose);margin-top:2px;}
.hs-umfrage .frm-fluent-form input.ff-el-form-control,
.hs-umfrage .frm-fluent-form textarea.ff-el-form-control{
	font-family:var(--hs-sans);font-size:15px;color:var(--hs-bordeaux);
	background:var(--hs-creme);border:1px solid var(--hs-rand,#E3D5CB);border-radius:0;
	padding:13px 14px;box-shadow:none;}
.hs-umfrage .frm-fluent-form input.ff-el-form-control:focus,
.hs-umfrage .frm-fluent-form textarea.ff-el-form-control:focus{
	border-color:var(--hs-rose);outline:0;box-shadow:none;}
.hs-umfrage .frm-fluent-form ::placeholder{color:#B79AA3;opacity:1;}
/* Zweispalter enger zusammenruecken, damit die Umfrage kurz bleibt */
.hs-umfrage .frm-fluent-form .ff-t-cell{padding-left:9px;padding-right:9px;}
.hs-umfrage .frm-fluent-form .ff-el-group{margin-bottom:18px;}
/* Absende-Knopf wie `.hs-btn--primary` */
.hs-umfrage .frm-fluent-form .ff-btn-submit{
	font-family:var(--hs-sans);font-size:13px;font-weight:600;text-transform:uppercase;
	letter-spacing:1px;border-radius:0;padding:17px 34px;}
@media (max-width:767px){.hs-umfrage .frm-fluent-form .ff-t-cell{padding-left:0;padding-right:0;}}

/* --- 15.9 Rechtstexte (Impressum, Datenschutz, AGB, Widerruf) ---------------
   Pflichttexte: lange Fliesstexte mit vielen Zwischenueberschriften und Listen.
   Bewusst schlicht — lesbare Zeilenlaenge (900 px Spalte), klare Hierarchie,
   sonst nichts. */
/* Hanna 04.09.2026 (1:34:29): "In der Editors Note mit dem normalen Schriftschnitt" —
   die Zwischenueberschriften kamen aus dem Notion-Export fett heraus. 300 ist der
   Wert, den .hs-h1/.hs-h2/.hs-h3 seitenweit fuer Editors Note tragen. */
.hs-rechtstext h2{font-family:var(--hs-serif);font-size:26px;font-weight:300;line-height:34px;color:var(--hs-bordeaux);margin:44px 0 12px;}
.hs-rechtstext h3{font-family:var(--hs-serif);font-size:21px;font-weight:300;line-height:29px;color:var(--hs-bordeaux);margin:32px 0 10px;}
.hs-rechtstext h4{font-family:var(--hs-sans);font-size:16px;font-weight:600;color:var(--hs-bordeaux);margin:26px 0 8px;}
.hs-rechtstext > *:first-child{margin-top:0;}
.hs-rechtstext p{margin:0 0 16px;}
.hs-rechtstext ul{margin:0 0 18px;padding-left:22px;}
.hs-rechtstext li{margin-bottom:8px;}
.hs-rechtstext a{color:var(--hs-rose);text-decoration:underline;text-underline-offset:2px;}
.hs-rechtstext a:hover{color:var(--hs-bordeaux);}

/* ==========================================================================
   15.10 Anmeldeformular - Kontextfassungen (Figma 938:303, gemessen 03.09.2026)

   Die Formularoptik wurde urspruenglich fuer die WARTELISTE gebaut: helle
   Sand-Karte auf Creme, also dunkle Labels und weisse Felder. Auf der
   Challenge-Seite stehen dieselben Formulare aber in `hs-section--rose`
   (`hs-on-dark`) - dort verlangt Figma das Gegenteil.

   ACHTUNG, nicht pauschal umstellen: Von fuenf AC-Formularen stehen DREI auf
   heller Sand-Karte (Warteliste, Stirn+Augen, Starterset) und ZWEI auf Rose
   (Challenge). Weisse Labels ueberall waeren auf Sand unlesbar. Deshalb haengt
   alles Farbige an `.hs-on-dark`.

   Farben Pixel fuer Pixel aus dem Figma-Render gemessen, nicht geschaetzt:
   Grund #A23559 - Feld #CB8B97 - Button #F3E3D7 - Buttontext #7A2742.
   ========================================================================== */

/* Grossbuchstaben gelten UEBERALL - das ist Typografie, keine Farbe. */
.hs-form__label{text-transform:uppercase;letter-spacing:.08em;}

/* Spezifitaets-Falle: weiter oben steht `.hs-form input.hs-form__feld` (0,2,1).
   Ein blosses `.hs-on-dark .hs-form__feld` (0,2,0) verliert dagegen - das Feld
   blieb weiss, waehrend Label und Button (ohne solches Gegenstueck) umsprangen.
   Deshalb tragen die Feld-Regeln hier dieselbe Elementstufe. */
/* ---- Auf dunklem Grund (Challenge) ---- */
.hs-on-dark .hs-form__label{color:#FFFFFF;}
.hs-on-dark .hs-form input.hs-form__feld{background:#CB8B97;border-color:#CB8B97;color:#7A2742;}
.hs-on-dark .hs-form input.hs-form__feld::placeholder{color:#7A2742;opacity:.6;}
.hs-on-dark .hs-form input.hs-form__feld:focus{border-color:#F3E3D7;background:#D8A2AC;}

/* Der Button muss sich von den Seiten-CTAs abheben: dort Rose auf Creme,
   hier Sand auf Rose. Rose auf Rose (Stand vorher) verschwand im Grund. */
.hs-on-dark .hs-form__btn{background:#F3E3D7;color:#7A2742;}
.hs-on-dark .hs-form__btn:hover{background:#FFFFFF;color:#7A2742;}

/* ==========================================================================
   15.11 Thrive-Quiz an den Entwurf angleichen (Figma 658:9)

   Das Quiz [tqb_quiz id='8967'] bringt seine EIGENE Gestaltung mit. Zwei
   Abweichungen vom Entwurf, beide aus dem Render gemessen:
     Antwortkarte  Thrive #FFFFFF   ->  Figma #FBF6F3 (Creme)
     Antworttext   Thrive #4D4D4D   ->  Figma #7A2742 (Bordeaux)

   Bewusst eng auf `.hs-quiz` begrenzt, damit keine andere Thrive-Ausgabe auf
   der Seite mitgefaerbt wird.

   HINWEIS: Der dauerhafte Ort fuer Quiz-Gestaltung ist der Thrive Quiz
   Builder selbst. Diese Regeln sind eine Angleichung, kein Ersatz dafuer -
   wer das Quiz-Design in Thrive umbaut, muss hier gegenpruefen.
   ========================================================================== */

/* Thrives eigene Regel ist `.tqb-template-style-4 .tqb-answer-inner-wrapper
   :not(.tqb-open-ended-wrapper)` = drei Klassen (0,3,0). Ein blosses
   `.hs-quiz .tqb-answer-inner-wrapper` (0,2,0) verliert dagegen - die Karte
   blieb weiss. Hier bewusst eine Stufe HOEHER statt !important, damit der
   Hover-/Aktiv-Zustand von Thrive weiter greift. */
.hs-quiz .tqb-template-style-4 .tqb-answer-inner-wrapper:not(.tqb-open-ended-wrapper){background:#FBF6F3;}
.hs-quiz .tqb-span-text{color:#7A2742;}

/* --------------------------------------------------------------------------
   15.11b Quiz-Geometrie und Schriftschnitte auf den Entwurf (Figma 658:9)

   Gemessen am 07.09.2026 gegen den Figma-Knoten 658:9 "QUIZ Fragen".
   Thrive legt seine Werte teils ueber EIGENE CSS-Variablen (--tve-*) an den
   Frage-Container; die werden hier ueberschrieben statt die Regel zu ueberbieten,
   damit Thrives Hover-/Aktiv-Zustaende unveraendert weiterlaufen.

     Frage         Thrive 700 / ls 3px   ->  Figma 400 / ls 0
     Antworttext   Thrive 300 / lh 36    ->  Figma 400 / lh 34
     Antwortkarte  Thrive Rahmen+Schatten, 88 px, 25 px Abstand
                                         ->  Figma ohne beides, 92 px, 16 px
     Marke         Thrive Kreis 20 px RECHTS
                                         ->  Figma Quadrat 37 px LINKS, r5, weiss,
                                             Schatten 1/1/4 rgba(0,0,0,.10)
     Text-Einzug   Thrive 26 px          ->  Figma 83 px ab Kartenkante

   Offen und bewusst NICHT hier geloest (Strukturentscheidungen, siehe Bericht
   vom 07.09.): Fortschrittsbalken (im Entwurf nicht vorhanden), Zaehler "1/7",
   zweiter Pfeil nach links, Emoji neben der Frage.
   -------------------------------------------------------------------------- */

/* Frage: Thrives eigene Variablen umsetzen statt die Regel ueberbieten. */
.hs-quiz .tqb-question-text{--tve-font-weight:400;--tve-letter-spacing:0px;}

/* Fortschritt: der Entwurf zeigt NUR die Textzeile, keinen Balken.
   Thrives eigener Schalter (`display_progress` am Quiz 8967) wuerde BEIDES
   abschalten - Text und Balken haengen dort zusammen. Deshalb hier gezielt
   nur der Balken weg; die Zeile bleibt und behaelt ihre Zaehlung.
   Der Abstand darunter kommt danach aus dem Frage-Container: Figma misst
   16 px zwischen Zeile und Frage, Thrive setzt 25 px. */
/* Thrives eigene Regel ist `.tqb-progress-container .tqb-progress` (0,2,0) und
   wird SPAETER geladen als diese Datei - ein Gleichstand verliert also. Eine
   Klasse mehr. */
.hs-quiz .tqb-progress-container .tqb-progress{display:none;}
.hs-quiz .tqb-template-style-4 .tqb-question-wrapper .tqb-question-container{padding-top:16px;}

/* Karte: ohne Rahmen und Schatten, 92 px hoch, 16 px Abstand (Figma). */
.hs-quiz .tqb-template-style-4 .tqb-answer-inner-wrapper:not(.tqb-open-ended-wrapper){
	border:0;
	box-shadow:none;
	margin:0 auto 16px;
	min-height:92px;
}

/* Antworttext: Figma Open Sans 400 / 24 / 34. Thrives Regel hat (0,5,0) —
   deshalb hier sechs Klassen, nicht !important. */
.hs-quiz .tqb-template-style-4 .tqb-question-wrapper .tqb-answers-container .tqb-answer-inner-wrapper .tqb-answer-text{
	font-weight:400;
	line-height:34px;
	padding-right:0;
}
.hs-quiz .tqb-span-text{line-height:34px;}

/* Gewaehlte Antwort: Thrive faerbt die Karte Rose. Die Regel aus 15.11
   (.hs-quiz .tqb-span-text = Bordeaux) traf bisher auch diesen Zustand — Bordeaux
   auf Rose ist kaum lesbar. Der Entwurf zeigt keinen gewaehlten Zustand; hier gilt
   Thrives eigene Absicht: weisse Schrift auf der gefaerbten Karte. */
/* Thrive faerbt den Antworttext ueber `:not(#tve) [data-css=...] .tqb-span-text`.
   `:not(#tve)` zaehlt als ID — die Regel steht bei (1,1,1) und schlaegt jede reine
   Klassenregel. Deshalb hier derselbe Kniff statt !important. */
.hs-quiz .tqb-active-answer .tqb-span-text:not(#tve){color:#FFFFFF;}
.hs-quiz .tqb-answer-inner-wrapper:hover .tqb-span-text:not(#tve){color:#FFFFFF;}

/* Platz links fuer die Marke: Figma setzt den Text bei 83 px ab Kartenkante an,
   die Karte hat 25 px Innenabstand -> 58 px zusaetzlich. */
.hs-quiz .tqb-template-style-4 .tqb-answer-text-type{padding-left:58px;}

/* --------------------------------------------------------------------------
   15.11c Senkrechte Mitte und die Marke im gewaehlten Zustand (Figma 658:66)

   Gemeldet von Chris am 07.09.: der Antworttext sitzt nicht mittig, und die
   Marke ist gegenueber dem Entwurf VERTAUSCHT.

   Gemessen: Karte 92 px, Text 25 px von oben / 33 px von unten - die Ursache
   ist Thrives feste `padding: 25px` an der Aktionsflaeche; die 92 px der Karte
   kommen aus `min-height`, der Rest bleibt unten liegen. Statt am Abstand zu
   drehen wird die Flaeche jetzt zur Flexbox und zentriert selbst - das haelt
   auch bei zwei- und dreizeiligen Antworten.

   Figma-Knoten 658:66 (die dritte Karte zeigt den gewaehlten Zustand):
     Karte  #A23559   Text #FFFFFF   Marke #FFFFFF   Haken #A23559
   Thrive macht Marke und Haken genau andersherum.
   -------------------------------------------------------------------------- */

/* Thrives Regel steht bei (0,4,0) und wird SPAETER geladen - eine Klasse mehr. */
.hs-quiz .tqb-template-style-4 .tqb-answers-container .tqb-answer-inner-wrapper .tqb-answer-action{
	display:flex;
	align-items:center;
	min-height:92px;
	padding-top:12px;
	padding-bottom:12px;
}
.hs-quiz .tqb-template-style-4 .tqb-answer-text-type{flex:1 1 auto;}

/* Marke bleibt WEISS, auch wenn Thrive sie einfaerben will. Thrive setzt dafuer
   `background-color: var(--tcb-local-color-…fedb) !important` - gegen ein
   !important hilft kein Ueberbieten. Deshalb wird nicht die Regel bekaempft,
   sondern die VARIABLE an der Marke selbst neu belegt: Thrives eigene Regel
   rechnet dann Weiss aus. Beide Toene, weil fedb = gewaehlt und fedc = Hover. */
.hs-quiz .tqb-answer-icon{
	--tcb-local-color-6866ff222fedb:#FFFFFF;
	--tcb-local-color-6866ff222fedc:#FFFFFF;
}

/* Der Haken liegt immer in der Box, ist aber weiss auf Weiss und damit
   unsichtbar - genau so blendet Thrive ihn aus. Auf der GEWAEHLTEN Karte wird
   er rosé und damit sichtbar. Figma: 25 x 24 in der 37er Box = 6 px Luft.
   Thrives `.tqb-fancy-icon svg` (0,2,0) laedt spaeter - eine Klasse mehr. */
.hs-quiz .tqb-answer-icon.tqb-fancy-icon svg{padding:6px;}
.hs-quiz .tqb-active-answer .tqb-answer-icon.tqb-fancy-icon svg.tqb-check{fill:#A23559;}

/* --------------------------------------------------------------------------
   15.11d Abschluss-Knopf der letzten Frage auf die Marke (08.09.2026)

   Auf der LETZTEN Frage ersetzt Thrive den Weiter-Pfeil durch den
   Abschluss-Knopf: ein SVG-Sprite `#tqb-finish-q`, eine Pille 106 x 40 mit
   ausgespartem Haken (EIN Pfad, der Haken ist ein Loch, kein zweites Element).
   Er kam in Thrives Standardblau #055182.

   🔑 Das Blau steckt NICHT im Symbol. Der Pfad hat gar keine eigene Fuellung;
   `.tqb-template-style-4 .tqb-button-holder svg` setzt `fill: currentcolor`,
   und `currentcolor` kommt aus der LINKFARBE des <a> um das Symbol. Deshalb
   wird hier die Farbe am Link gesetzt und nicht die Fuellung erzwungen - der
   Haken bleibt automatisch als weisse Aussparung stehen.

   Rose wie die beiden Navigationspfeile, Hover Bordeaux wie bei `.hs-btn`.
   ⚠️ Der Umriss (Pille statt scharfer Ecken) steckt im Sprite und laesst sich
   per CSS nicht aendern - dafuer muesste das Symbol ersetzt werden.
   -------------------------------------------------------------------------- */

.hs-quiz .tqb-button-holder .tqb-check-button a,
.hs-quiz .tqb-button-holder .tqb-finish-button a{color:#A23559;}

.hs-quiz .tqb-button-holder .tqb-check-button a:hover,
.hs-quiz .tqb-button-holder .tqb-finish-button a:hover{color:#7A2742;}

/* --------------------------------------------------------------------------
   15.11e Fragen-Ueberschrift in Editor's Note + Ergebnisbox in Creme
          (09.09.2026, Rueckmeldung Hanna)

   (a) Die Frage lief in Open Sans 35. Hanna moechte die Hausschrift der
       Ueberschriften. Uebernommen werden die Werte von `.hs-h2` — Editor's
       Note 40 / 300 / 1,2 / Bordeaux — damit die Frage nicht ihre eigene
       Groesse bekommt, sondern die, die auf allen Seiten gilt.
       🔑 Gesetzt werden Thrives EIGENE Variablen am Frage-Container (wie in
       15.11b): der Innen-Span liest `font-family: var(--tve-font-family, ...)`
       usw. — kein Spezifitaetskampf, kein `!important`.

   (b) Die Box nach der letzten Frage (Opt-in-Gate, `.tve-tqb-page-type`) war
       reinweiss. Sie bekommt die Flaeche der Antwortkarten, Creme `#FBF6F3`.
       Dieselbe Regel greift auch fuer die Ergebnisseite — beide Seitentypen
       tragen diese Klasse. Thrives Regel haengt an `[data-css=...]` (0,1,0),
       eine Klasse mehr genuegt.

   (c) Die Ueberschrift IN dieser Box („Klasse, du hast es geschafft!“) hat
       dieselbe Rolle wie die Frage und lief ebenfalls in Open Sans 35.
       ⚠️ Hier geht es nur mit `!important`: Thrive setzt sie ueber
       `:not(#tve) [data-css=...]` (1,1,0) MIT `!important` und bietet fuer
       dieses Element keine Variablen an. Angeglichen, damit die letzte
       Ansicht nicht aus dem System faellt — zum Zuruecknehmen genuegt es,
       diesen einen Block zu loeschen.
   -------------------------------------------------------------------------- */

/* (a) Frage — Werte von `.hs-h2` */
.hs-quiz .tqb-question-text{
	--tve-font-family: var(--hs-serif);
	--tve-font-size: 40px;
	--tve-font-weight: 300;
	--tve-line-height: 1.2;
	/* In 40 px Editor's Note brechen die zwei laengsten Fragen um. Ohne
	   Ausgleich bleibt bei Frage 2 nur „auf?“ in der zweiten Zeile stehen.
	   `balance` verteilt die Zeilen gleichmaessig; Browser ohne Unterstuetzung
	   ignorieren es und brechen wie bisher. */
	text-wrap:balance;
}

/* (b) Ergebnis-/Opt-in-Box in Creme statt Weiss */
.hs-quiz .tve-tqb-page-type{background-color:var(--hs-creme);}

/* (c) Ueberschrift in dieser Box wie die Frage */
.hs-quiz .tve-tqb-page-type h1:not(#tve),
.hs-quiz .tve-tqb-page-type h2:not(#tve){
	font-family:var(--hs-serif) !important;
	font-size:40px !important;
	font-weight:300 !important;
	line-height:1.2 !important;
	letter-spacing:0 !important;
}

/* Marke: aus dem Kreis rechts wird das Quadrat links. */
.hs-quiz .tqb-template-style-4 .tqb-question-wrapper .tqb-answers-container .tqb-answer-inner-wrapper .tqb-answer-action .tqb-fancy-icon:not(.tqb-fancy-rel){
	left:16px;
	right:auto;
	margin-top:-18px;
	width:37px;
	height:37px;
	border:0;
	border-radius:5px;
	background:#FFFFFF;
	box-shadow:1px 1px 4px rgba(0,0,0,.10);
	align-items:center;
	justify-content:center;
}

/* ==========================================================================
   16. Fluent Forms auf die Optik der Warteliste-Formulare bringen
   --------------------------------------------------------------------------
   Vorgabe: Chris am 04.09.2026 — „so hätte ich gerne das Umfrageformular auf
   der Bestätigungsseite", gemeint ist das Formular der Stirn-&-Augen-
   Warteliste (Seite 10807). Das ist KEIN Fluent Form, sondern unser eigenes
   Markup mit `.hs-form*`. Die Werte hier sind an dessen Rendering GEMESSEN,
   nicht aus dem Stylesheet abgeschrieben:
     Label  13px / 600 / #7A2742 / uppercase / letter-spacing .08em
     Feld   15px / #7A2742 / #FFF / 1px #DDB2A5 / radius 0 / padding 13px 16px
     Platzhalter #B79A92 · Fokus-Rahmen #A23559
     Button 14px / 600 / weiss auf #A23559 / uppercase / .08em / 16px 28px
   Fluent Forms liefert dagegen graue Rahmen (#DADBDD), 7px Radius und
   16px-Labels in #333.

   ⚠️ **Doppelte Klasse ist Absicht.** Fluent Forms druckt pro Formular ein
   eigenes <style> mit Instanz-Selektoren (`.ff_form_instance_3_1 …`, Klasse
   `wpf_has_custom_css` am Button). Eine einfache Klasse verliert dagegen.
   ========================================================================== */

.fluentform.fluentform .ff-el-input--label label,
.fluentform.fluentform .ff-el-input--label {
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 600;
	color: var(--hs-bordeaux);
	text-transform: uppercase;
	letter-spacing: .08em;
	margin-bottom: 6px;
}

/* Der rote Pflichtfeld-Stern von Fluent Forms bleibt rot – bewusst, er ist
   eine Funktionsanzeige und keine Gestaltung. */

.fluentform.fluentform .ff-el-form-control {
	font-family: var(--hs-sans);
	font-size: 15px;
	line-height: 24px;
	color: var(--hs-bordeaux);
	background: var(--hs-white);
	border: 1px solid var(--hs-icon);
	border-radius: 0;
	padding: 13px 16px;
	box-shadow: none;
}

.fluentform.fluentform .ff-el-form-control::placeholder { color: #B79A92; }

.fluentform.fluentform .ff-el-form-control:focus {
	outline: none;
	border-color: var(--hs-rose);
	box-shadow: none;
}

.fluentform.fluentform .ff-btn-submit {
	font-family: var(--hs-sans);
	font-size: 14px;
	font-weight: 600;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--hs-white);
	background: var(--hs-rose);
	border: 0;
	border-radius: 0;
	padding: 16px 28px;
}

.fluentform.fluentform .ff-btn-submit:hover { background: var(--hs-bordeaux); }

/* 🔴 16.09.2026: Absendeknopf lief mobil 29 px aus dem Formular.
   Gemessen auf 10815 bei 375 px: Knopf 320 breit, Formular 291.
   URSACHE ist NICHT `nowrap`, sondern eine harte Pixel-Untergrenze aus
   FluentForms EIGENEM Formular-CSS, das als `<style>` im Seitenkoerper
   ausgegeben wird:
       form.fluent_form_3 .wpf_has_custom_css.ff-btn-submit { min-width: 320px }
   Exakt dieselbe Sorte wie `.hs-form` mit `min-width: 415px` am selben Tag —
   und wieder gilt: **`max-width: 100%` fängt das NICHT ab, `min-width` schlägt
   `max-width`.** Richtig ist `min(320px, 100%)`: auf breiten Spalten bleiben es
   die 320 des Formulars, auf schmalen faellt die Untergrenze auf die
   Spaltenbreite.
   ⚠️ Spezifitaet ist hier entscheidend: die Fluent-Regel ist (0,3,1) und steht
   als Inline-Block SPAETER im Dokument als diese Datei. Die verdoppelten
   Klassen ergeben (0,4,0) und gewinnen damit unabhaengig von der Reihenfolge.
   Bewusst fuer ALLE FluentForms gesetzt, nicht nur Formular 3 — die naechste
   Umfrage bringt dasselbe Formular-CSS mit. */
.fluentform.fluentform .ff-btn-submit.ff-btn-submit {
	min-width: min(320px, 100%);
	max-width: 100%;
	white-space: normal;
}

/* Die Hinweis-Sprechblasen stehen sonst in Fluent-Blau im Sandfeld. */
.fluentform.fluentform .ff-el-tooltip svg { fill: var(--hs-rose); }

/* ==========================================================================
   Seitenspezifisch: Aufzeichnungsseiten OHNE Kopfzeile (10864 VIP, 10865 Challenge)
   Chris, 08.09.2026: "Footer ja, Header nein."

   🔴 NICHT ueber die Theme-Builder-Bedingung loesen. Am 08.09.2026 versucht
   (`exclude/singular/page/10864` am Header-Template 9750) -- dabei wurde der
   Bedingungs-Zwischenspeicher zerstoert, und danach fehlten auf ALLEN Seiten
   Kopf- UND Fusszeile; das Theme fiel auf seine eigenen zurueck
   (`header.site-header dynamic-header`). Reparatur:
     ElementorPro\Modules\ThemeBuilder\Module::instance()
       ->get_conditions_manager()->get_cache()->regenerate();
   Merke: `delete_option('elementor_pro_theme_builder_conditions')` baut sich
   NICHT von selbst wieder auf.

   Beide Body-Klassen, weil WordPress sie je nach Status unterschiedlich
   vergibt: als Entwurf `postid-10864`, veroeffentlicht `page-id-10864`.
   Begrenzt auf diese eine Seite, kann keine andere beruehren. Die
   Fusszeile bleibt ausdruecklich stehen.
   ========================================================================== */
body.page-id-10864 .elementor-location-header,
body.postid-10864 .elementor-location-header,
body.page-id-10865 .elementor-location-header,
body.postid-10865 .elementor-location-header { display: none; }

/* Videohoehe an die Fensterhoehe koppeln.
   Chris' Ziel (08.09.2026): "dass es bei normalem Fenster so sein kann,
   dass 'So kann es fuer dich weitergehen' mit dem Button schon zu sehen
   ist, sodass man nicht scrollen muss.
   `.hs-video` hat `aspect-ratio: 16/9`. Wird die HOEHE vorgegeben und die
   Breite auf `auto` gestellt, folgt die Breite dem Seitenverhaeltnis --
   das Bild wird also kleiner statt beschnitten.
   Rechnung bei 900 px Fensterhoehe: 38vh = 342 px Video, Unterkante Knopf
   bei rund 738 px -- passt in die ~780 px sichtbarer Hoehe.
   Nur ab 1025 px Breite: auf Tablet und Handy zaehlt Lesbarkeit mehr als
   die Falz, dort bleibt das Video volle Spaltenbreite. */
@media (min-width: 1025px) {
	/* 16.09.2026: eigene Deckelung fuer die Challenge-Aufzeichnungen (10865).
	   Chris: „Das muessen wir dann so machen wie auf der VIP-Seite, sodass das
	   dann auch fuer die Tabs entsprechend gilt."
	   Der Selektor trifft alle sechs Reiter-Videos auf einmal. Die Rechnung geht
	   dort ebenfalls auf, obwohl ueber dem Video mehr steht (Reiterleiste +
	   Panel-Polster, rund 90 px): 162 Band + 36 + 50 + 40 + 315 (38vh bei 830)
	   = 603 Unterkante Video, Knopf endet bei ~758 — innerhalb der 830 px, die
	   Chris sichtbar hat. */
	/* 🔴 10864 rechnet seit 16.09.2026 ebenfalls gegen die freie Hoehe statt
	   in Prozent (Chris: „Mach das mit der VIP-Seite auch so").
	   Vorher `min(38vh, 428px)` — das ergab bei 830 px nur 561x315 Video und
	   liess **110 px Luft** unter dem Knopf ungenutzt. Es war exakt die
	   Groesse, die Chris auf 10865 als zu klein empfand.
	   Alles ausser dem Video misst hier zusammen **405 px** (bei 830
	   nachgemessen: Knopf-Unterkante 720 minus Video 315) — die Seite hat
	   weniger darueber als 10865, weil ihr die Reiterleiste fehlt. Deshalb ein
	   ANDERER Abzug: 425 statt 470, mit denselben ~20 px Luft. */
	body.page-id-10864 .hs-video,
	body.postid-10864 .hs-video {
		height: clamp(240px, calc(100svh - 425px), 428px);
		width: auto;
		max-width: 100%;
		margin-inline: auto;
	}
	/* 🔴 10865 rechnet NICHT in Prozent, sondern gegen die **freie Hoehe**.
	   Chris, 16.09.2026: „Das Challenge-Video ist jetzt gut, aber auf dem
	   grossen Bildschirm zu klein."
	   Erster Versuch war `44vh`. Gemessen ergab das:
	     830 px Fenster → Video 649x365, Knopf 11 px ueber der Kante
	     **800 px Fenster → Knopf 6 px UNTER der Kante**
	     1000 px Fenster → 760x428 (Deckel), 118 px Luft
	   🔑 **Ein Prozentwert der Fensterhoehe skaliert, die Dinge darueber und
	   darunter aber NICHT.** Band, Reiterleiste, Ueberschrift und Knopf sind
	   feste Pixel; ein vh-Anteil trifft deshalb nur bei genau einer
	   Fensterhoehe und driftet nach beiden Seiten weg — bei 800 px kippt er.
	   Richtig ist die Differenz: alles ausser dem Video misst zusammen
	   **454 px** (bei 830 nachgemessen). `100svh - 470` laesst davon 16 px Luft
	   — und zwar bei JEDER Fensterhoehe, nicht nur bei einer.
	   `clamp()` haelt unten 240 px (sonst wird das Video auf sehr flachen
	   Fenstern unbrauchbar klein) und oben die Originalhoehe 428 px.
	   ⚠️ `svh` statt `vh`: auf Mobilgeraeten ist `vh` die Hoehe OHNE die
	   einfahrende Adressleiste und damit zu gross. Hier wirkt die Regel zwar
	   erst ab 1025 px, der Wert bleibt aber trotzdem der richtige. */
	body.page-id-10865 .hs-video,
	body.postid-10865 .hs-video {
		height: clamp(240px, calc(100svh - 470px), 428px);
		width: auto;
		max-width: 100%;
		margin-inline: auto;
	}
}

/* 🔴 ZWEITE Ursache, am 16.09.2026 von Chris gemeldet und nachgestellt:
   *„Wenn ich die Seite kleiner mache, wandert das Video nicht mit. Das bleibt
   in der gleichen Groesse und wird dann abgeschnitten."*
   Gemessen auf 10865 bei 1200/900/**800** px Breite: das Video blieb jedes Mal
   **760 x 428**. Der Rahmen-Container steht im Generator auf `width: 760px`
   mit einem Mobil-Wert von 100 % — Elementors Mobil-Haltepunkt greift aber
   erst ab 767 px. Dazwischen (768–1024) gilt die feste Breite, waehrend im
   Reiter nur rund 712 px Platz sind. Der Ueberstand wird beschnitten.
   🔑 Die Deckelung oben allein haette das NICHT behoben: sie beginnt bei
   1025 px — also genau dort, wo das Problem aufhoert.
   Behoben ist es an der Wurzel im Generator (`width_tablet = 100 %`); diese
   Regel ist der Gurt dazu und wirkt auf JEDER Breite. */
body.page-id-10864 .hs-video, body.postid-10864 .hs-video,
body.page-id-10865 .hs-video, body.postid-10865 .hs-video,
/* 16.09.2026 dazu: die beiden KAUFBESTAETIGUNGEN. Dort stand der Rahmen sogar
   ganz ohne Prozentwerte auf `width: 900px` — gemessen bei 800 px Fenster ragte
   das Video 50 px aus der Sektion und erzeugte **Querscrollen auf der ganzen
   Seite**. Die Wurzel ist im Generator behoben (`width_tablet`/`width_mobile`),
   diese Zeile ist der Gurt.
   ⚠️ Hier bewusst **KEINE Hoehen-Deckelung**: unter dem Video steht kein Knopf,
   der ueber der Kante bleiben muesste — nur eine Textzeile. Eine Deckelung
   wuerde das Video ohne Not verkleinern. */
body.page-id-10941 .hs-video, body.postid-10941 .hs-video,
body.page-id-10942 .hs-video, body.postid-10942 .hs-video { max-width: 100%; }

/* ==========================================================================
   Reiter (`nested-tabs`) -- Aufzeichnungsseiten
   Erste Verwendung: Challenge-Aufzeichnungen (Post 10865).
   Vorbild ist die Vorgaengerseite 6292: aktiver Reiter kraeftig (Rose),
   inaktive hell (Creme), Inhaltsflaeche creme. Typografie wie die Knoepfe.

   🔑 UEBER ELEMENTORS EIGENE VARIABLEN, nicht ueber eigene Farbregeln.
   Erster Versuch am 08.09.2026 war `.hs-tabs .e-n-tab-title{background...}`
   (0,2,0) -- das verliert gegen Elementors
   `.elementor-widget-n-tabs .e-n-tab-title[aria-selected="false"]` (0,3,0),
   die inaktiven Reiter blieben grau. Statt die Spezifitaet hochzuschrauben
   werden hier die Variablen gesetzt, aus denen Elementor selbst rechnet --
   das ist der vorgesehene Weg und ueberlebt Plugin-Aktualisierungen. */
.hs-tabs {
	--n-tabs-title-background-color:        var(--hs-creme);
	--n-tabs-title-color:                   var(--hs-bordeaux);
	--n-tabs-title-background-color-hover:  var(--hs-sand);
	--n-tabs-title-color-hover:             var(--hs-bordeaux);
	--n-tabs-title-background-color-active: var(--hs-rose);
	--n-tabs-title-color-active:            var(--hs-white);
	--n-tabs-title-border-radius:           0;
	--n-tabs-gap:                           0px;
	--n-tabs-title-gap:                     8px;
}
/* Typografie und Polsterung sind keine Variablen -> normale Regeln. */
.hs-tabs .e-n-tab-title {
	border: 0;
	padding: 16px 26px;
	font-family: var(--hs-sans);
	font-size: 13px;
	font-weight: 600;
	letter-spacing: 1px;
	text-transform: uppercase;
}
.hs-tabs .e-n-tab-title-text { color: inherit; font: inherit; letter-spacing: inherit; }
.hs-tabs .e-n-tabs-heading { flex-wrap: wrap; justify-content: center; }
.hs-tabs .e-n-tabs-content { background-color: var(--hs-creme); }

/* ==========================================================================
   YouTube-Kacheln (Shortcode `hs_youtube`, siehe inc/hs-youtube.php)
   Drei Vorschaubilder im 16:9-Raster, Klick fuehrt zu YouTube. Die Bilder
   liegen LOKAL -- es geht kein Aufruf zu Google, solange nicht geklickt wird.
   ========================================================================== */
.hs-ytfeed {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	width: 100%;
}
.hs-ytfeed__item {
	display: block;
	text-decoration: none;
	color: var(--hs-bordeaux);
}
.hs-ytfeed__bild {
	position: relative;
	display: block;
	aspect-ratio: 16 / 9;
	overflow: hidden;
	background: var(--hs-sand);
}
.hs-ytfeed__bild img {
	width: 100%; height: 100%; object-fit: cover; display: block;
	transition: transform .3s ease;
}
.hs-ytfeed__item:hover .hs-ytfeed__bild img { transform: scale(1.04); }
/* Abspiel-Dreieck in Rose, wie die Primaerknoepfe */
.hs-ytfeed__play {
	position: absolute; inset: 0; margin: auto;
	width: 56px; height: 56px; border-radius: 50%;
	background: var(--hs-rose);
}
.hs-ytfeed__play::after {
	content: ''; position: absolute; inset: 0; margin: auto;
	width: 0; height: 0;
	border-left: 16px solid #FFF;
	border-top: 10px solid transparent;
	border-bottom: 10px solid transparent;
	transform: translateX(2px);
}
.hs-ytfeed__titel {
	display: block;
	margin-top: 14px;
	font-family: var(--hs-sans);
	font-size: 15px;
	font-weight: 600;
	line-height: 22px;
	color: var(--hs-bordeaux);
}
@media (max-width: 767px) {
	.hs-ytfeed { grid-template-columns: 1fr; gap: 28px; }
}

/* Einzelne YouTube-Kachel: fuellt den Container aus dem Entwurf komplett aus.
   Die Kachelgeometrie (31 % Breite, 165 px Mindesthoehe, 14 px Abstand) bleibt
   damit unveraendert; nur der Inhalt wechselt. Format-Unterschied zwischen
   Kachel und 16:9-Vorschaubild faengt `object-fit: cover` ab. */
.hs-ytkachel { position: relative; overflow: hidden; }
/* Elementor setzt .elementor-widget auf position:relative. Ohne die naechsten
   drei Zeilen verankert sich der Link am Widget statt an der Kachel und die
   ganze Kette kollabiert auf 0x0 (gemessen 08.09.2026). */
.hs-ytkachel .elementor-widget-shortcode,
.hs-ytkachel .elementor-widget-container,
.hs-ytkachel .elementor-shortcode { position: static; }
.hs-ytkachel__link { position: absolute; inset: 0; display: block; }
.hs-ytkachel__link img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .3s ease; }
.hs-ytkachel:hover .hs-ytkachel__link img { transform: scale(1.05); }
/* Die Hoehe der Kachel kommt aus dem Seitenverhaeltnis, nicht aus einer festen
   Zahl: YouTube liefert 16:9, und die Breite ist durch den Text daneben
   gedeckelt (socialtext 30 % + Gap 40 px). So bleibt das Vorschaubild auf
   jeder Breite unbeschnitten und es gibt keine Zahl, die nachgepflegt
   werden muss. Gilt bewusst fuer alle Breakpoints. */
.hs-ytkachel { aspect-ratio: 16 / 9; }
.hs-ytkachel__play {
	position: absolute; inset: 0; margin: auto;
	width: 46px; height: 46px; border-radius: 50%;
	background: var(--hs-rose);
}
.hs-ytkachel__play::after {
	content: ''; position: absolute; inset: 0; margin: auto;
	width: 0; height: 0;
	border-left: 13px solid #FFF;
	border-top: 8px solid transparent;
	border-bottom: 8px solid transparent;
	transform: translateX(2px);
}


/* --- 16.09.2026: Hanna-Foto der Challenge mobil vollstaendig zeigen ---------
   `ch-hanna.webp` ist HOCHFORMAT 1200 x 1800. Mobil sass es in einem Kasten von
   375 x 420 mit `cover` - dabei fallen rund 62 % der Bildhoehe weg: oben die
   Fingerspitzen der erhobenen Haende, unten der Saum (Chris' Fund).
   Gesetzt wird ein VERHAELTNIS, keine Pixelhoehe - Lehre vom 15.09.: mit fester
   Hoehe stimmt es nur bei genau einer Breite. 1200/1800 = 2/3, damit deckt sich
   der Kasten bei jeder Fensterbreite exakt mit dem Bild und `cover` schneidet
   nichts mehr ab.
   ⚠️ Die `min-height` MUSS dabei weg: Breite UND Hoehe gesetzt = das Verhaeltnis
   wird ignoriert (dieselbe Falle wie bei den Kacheln am 15.09.). */
@media (max-width: 767px) {
	.hs-hannafoto {
		aspect-ratio: 2 / 3;
		min-height: 0;
		background-position: center center;
	}
}


/* 🔴 16.09.2026 NACHTRAG zu `min-width` am Formular (beim Querschnitts-Durchlauf
   ueber die Presse-Leiste aufgefallen, gemessen auf dem Starterset):
   `min-width: 415px` hat das Formular auf 375-px-Schirmen 60 px ueber den
   rechten Rand geschoben - die Seite lief waagerecht auf. `max-width: 100%`
   kann das NICHT abfangen, denn `min-width` schlaegt `max-width`; das ist in
   der Kaskade so festgelegt und keine Spezifitaetsfrage.
   Richtig ist `min-width: min(415px, 100%)`: auf breiten Spalten bleiben es
   Figmas 415 px, auf schmalen faellt die Untergrenze auf die Spaltenbreite.
   🔑 Lehre: eine Untergrenze in Pixeln braucht IMMER ein `min(..., 100%)`,
   sobald sie in einem Raster steht, das schmaler werden kann. Betroffen waren
   alle Seiten mit Eintrageformular gleichzeitig, nicht nur die Challenge. */

/* 🔴 16.09.2026: Absendeknopf darf mobil UMBRECHEN.
   Gemessen auf der Challenge bei 375 px: Knopf 335 breit, sein Text braucht
   430 - und weil `reset.css` allen Buttons `white-space: nowrap` gibt, lief der
   Text bis x = 450 aus dem Knopf heraus UND zog die ganze Seite 75 px in die
   Waagerechte. Der Knopf selbst misst dabei unauffaellige 335 px; im DOM ist
   als "breitestes Element" nur ein Bild bei 378 zu sehen. 🔑 Ein Querlauf muss
   nicht von einem zu breiten KASTEN kommen - er kann aus einem Inline-Inhalt
   stammen, der aus einem normal breiten Kasten herauslaeuft. Deshalb bei
   Ueberstand immer auch `scrollWidth > clientWidth` je Element pruefen, nicht
   nur die Rechtecke vergleichen.
   Bestand seit dem Bau, auf jeder Seite mit langem Knopftext. */
@media (max-width: 767px) {
	.hs-form__btn,
	.hs-form button.hs-form__btn { white-space: normal; }
}

/* ==========================================================================
   Kopfband (`hs-kopfband`) — 16.09.2026
   Schmales Band ganz oben, das auf Seiten OHNE Kopfzeile deren Platz einnimmt.
   Erste Verwendung: „Fast geschafft" 10814. Zweck dort (Chris): auf einer
   Double-Opt-in-Seite soll niemand ins Menü abbiegen — die Bordeaux-Fläche
   soll aber bleiben, damit der Seitenkopf nicht nackt wirkt.

   MASSE AUS FIGMA, Canvas 343:2 (LP Kurs Gesamt Gesicht), Knoten 343:58:
   Band 1440 x 80, `#7A2742`. Text Editor's Note **Light (w300), 24 px**,
   `line-height: 16px` (so ausdrücklich in PIXELS gesetzt, kleiner als die
   Schriftgröße), `letter-spacing: 0`, weiß, zentriert.
   ⚠️ Im Entwurf liegt das Band ÜBER dem Logo (Zeichenreihenfolge: Rechteck
   nach den Logo-Texten) — es verdeckt Logo und Menü, ersetzt sie also. Genau
   so ist es hier gebaut.

   🔑 BEWUSST EINE EIGENE KLASSE, kein `bonus-banner`. Die vier Kursseiten
   tragen zwar ein optisch ähnliches Band, das ist aber ein ANDERES Bauteil:
   es heißt dort Bonus-Banner, steht auf allen Breakpoints ausgeblendet und
   wird später von **Thrive Ultimatum** zur Verkaufsphase eingeblendet. Es
   trägt auch nicht Figmas Werte (Eyebrow 17/ls0,5 statt Editor's Note 24).
   Die beiden dürfen sich nicht gegenseitig verändern. (Chris, 16.09.2026)
   ========================================================================== */
.hs-kopfband {
	background-color: var(--hs-bordeaux);
	min-height: 80px;
}
/* 🔴 KEIN `padding` in dieser Klasse! Elementor setzt das Polster der Sektion
   bereits auf `.e-con-inner`; eine zusaetzliche Regel auf `.hs-kopfband` trifft
   den AEUSSEREN `.e-con` und das Polster zaehlt DOPPELT. Gemessen am 16.09.:
   48 (Text) + 32 (innen) + 32 (aussen) = 112 statt der gezeichneten 80 px.
   🔑 Bei einer eigenen Klasse auf einer Elementor-Sektion gehoert das Polster
   in die Sektions-EINSTELLUNG, nicht in die CSS-Klasse — sonst addiert es sich
   lautlos, weil Elementor bei `content_width: boxed` zwei verschachtelte
   Container rendert. */
.hs-kopfband .elementor-heading-title {
	font-family: var(--hs-serif);
	font-size: 42px;
	font-weight: 300;
	line-height: 48px;
	letter-spacing: 0;
	color: var(--hs-white);
	text-transform: none;
}
@media (max-width: 767px) {
	.hs-kopfband .elementor-heading-title { font-size: 30px; line-height: 36px; }
}

/* Lange Bandzeile — 16.09.2026, mit den uebrigen Bitte-Seiten dazugekommen.
   🔑 Dieselbe Lehre wie oben, nur andersherum: **eine Typo-Vorgabe traegt nur
   zusammen mit der Textlaenge, fuer die sie gezeichnet wurde.** Figmas 80er
   Zeile fuellt 58 % der Bandbreite. „Fast geschafft!" (15 Zeichen) braucht dafuer
   42 px — aber „Fast geschafft – bitte bestaetige deine E-Mail-Adresse" (52) und
   „Jippie, du bist gleich fuer die Warteliste angemeldet!" (53) laegen bei 42 px
   weit ueber der Bandbreite und wuerden umbrechen, also das 80-px-Band sprengen.
   Der Generator setzt die Klasse deshalb automatisch ab 40 Zeichen.
   28/34 gewaehlt: 52 Zeichen fuellen damit rund 55 % der Bandbreite — also
   dasselbe Verhaeltnis, das Sabine gezeichnet hat. */
.hs-kopfband--lang .elementor-heading-title { font-size: 28px; line-height: 34px; }
@media (max-width: 767px) {
	.hs-kopfband--lang .elementor-heading-title { font-size: 19px; line-height: 25px; }
}

/* Kräftigeres Band — 21.09.2026, aus Hannas Durchsicht der Warteliste-GG-
   Bitte-Seite (10935): *„Der Balken ganz oben darf breiter sein, plus ein
   Drittel etwa."*
   ⚠️ Gemeint ist die DICKE, nicht die Breite: das Band läuft schon randlos
   über die volle Fensterbreite (nachgemessen 1425 von 1440 px — der Rest ist
   der Rollbalken). Waagerecht ist nichts mehr zu holen. 80 × 4/3 = 106,7 → 107.

   🔴 **Warum das hier steht und nicht in der Elementor-Einstellung.**
   Genau das war am 21.09. der erste Versuch: `min_height` der Sektion auf 107.
   Der Wert landet auch im Baum — und wirkt trotzdem nicht. Am gerenderten
   Element nachgesehen:
       .e-con          { min-height: var(--min-height) }   (0,1,0) frontend.css
       .hs-kopfband    { min-height: 80px }                (0,1,0) DIESE Datei
   Gleiche Spezifität, also entscheidet die Dateireihenfolge — und das
   Designsystem lädt NACH Elementors Frontend-CSS. Die Klasse gewinnt immer.
   🔑 Das ist dieselbe Geschwisterfalle, vor der der Docstring von
   `kopfband_sektion()` schon warnt; sie trifft hier nur `min-height` statt der
   Typografie. **Wer die Bandhöhe ändern will, ändert sie im Designsystem.**

   🔑 Eigener Modifier statt Änderung an `.hs-kopfband`: das Band ist ein
   gemeinsames Bauteil auf ZEHN Bitte-Seiten. Chris hat am 21.09. entschieden,
   dass die kräftigere Fassung vorerst nur auf 10935 gilt. */
.hs-kopfband--hoch { min-height: 107px; }

/* ⚠️ BEWUSSTE ABWEICHUNG VON FIGMA bei der GROESSE (Chris, 16.09.2026).
   Figma 343:58 sagt 24 px / lh 16. Uebernommen sind Familie, Schnitt (Light
   300), Farbe, Laufweite 0 und die Bandhoehe 80 — nur die Groesse nicht.
   GRUND: Sabines Entwurf traegt die Bar mit einer 80 Zeichen langen Zeile
   („NUR HEUTE: Guasha Bonus Lorem ipsum …"), die 837 von 1440 px fuellt, also
   58 % der Bandbreite. Unser Text ist „Fast geschafft!" — bei 24 px waren das
   gemessene 128 px, also **9 %**. Dieselbe duenne Light-Schrift wirkt bei 15
   Zeichen verloren; Chris: „das laesst sich schwer lesen, das faellt fast nicht
   auf." Am Kontrast liegt es nicht (weiss auf Bordeaux = 9,6 : 1), sondern an
   der Praesenz.
   🔑 Lehre, die ueber diese Stelle hinausgeht: **eine Typo-Vorgabe aus dem
   Entwurf traegt nur zusammen mit der TEXTLAENGE, fuer die sie gezeichnet
   wurde.** Wird ein Baustein mit deutlich kuerzerem Text bestueckt, ist die
   uebernommene Groesse formal richtig und im Ergebnis falsch.
   GEWAEHLT ist die Groesse der H1 derselben Seite (42 desktop / 30 mobil), damit
   das Band aus dem bestehenden Massgeruest kommt und keine neue Zahl einfuehrt.
   Die Zeilenhoehe ist 48 statt 54, damit 42 + 2 x 16 Polster die Figma-Hoehe von
   80 px exakt trifft. */

/* Kopfzeile auf der „Fast geschafft"-Seite ausblenden — das Kopfband tritt an
   ihre Stelle. Über die Body-Klasse begrenzt, kann also per Konstruktion keine
   andere Seite treffen. Die Fußzeile bleibt ausdrücklich stehen.
   ⚠️ NICHT über die Bedingungen des Header-Templates lösen: am 08.09.2026 hat
   genau das Kopf- UND Fußzeile site-weit abgeschossen (Eintrag „08.09.2026 (3)").
   Beide Body-Klassen, weil WordPress im Entwurf `postid-` und veröffentlicht
   `page-id-` vergibt. */
body.page-id-10814 .elementor-location-header,
body.postid-10814 .elementor-location-header { display: none; }

/* 16.09.2026 — dieselbe Regel für die vier übrigen BITTE-Seiten.
   10928 Starterset · 10929 Stirnfalten-Check · 10930 Quiz · 10932 Warteliste
   Stirn & Augen. Alle vier sind Double-Opt-in-Seiten und tragen dasselbe
   `hs-kopfband` an Stelle der Kopfzeile.
   🔑 Die DANKE-Seiten (10815, 10931, 10933) behalten die Kopfzeile bewusst: dort
   ist die Bestätigung schon erfolgt, ein Weg ins Menü ist ab da erwünscht. */
body.page-id-10928 .elementor-location-header,
body.postid-10928 .elementor-location-header,
body.page-id-10929 .elementor-location-header,
body.postid-10929 .elementor-location-header,
body.page-id-10930 .elementor-location-header,
body.postid-10930 .elementor-location-header,
body.page-id-10932 .elementor-location-header,
body.postid-10932 .elementor-location-header,
body.page-id-10935 .elementor-location-header,
body.postid-10935 .elementor-location-header,
/* 17.09.2026 nachgetragen: 10946 „Challenge Gesichtstraining Warteliste Fast
   geschafft". Die Seite ist am 17.09. entstanden, die Eintragung hier wurde
   vergessen — von Chris gemeldet. 🔑 Eine neue Bitte-Seite ist an ZWEI Stellen
   anzumelden: im Generator (`bd-push.py`) UND in dieser Liste. Der Generator
   allein baut das Kopfband, blendet aber die Kopfzeile nicht aus; dann stehen
   beide übereinander. */
body.page-id-10946 .elementor-location-header,
body.postid-10946 .elementor-location-header { display: none; }

/* Kopfzeile auf den beiden KAUFBESTAETIGUNGEN ausblenden — 16.09.2026, Chris.
   10941 Gesamt Gesicht · 10942 Stirn & Augen.
   Anders als bei den Bitte-Seiten geht es hier NICHT ums Double-Opt-in (der Kauf
   ist durch). Der Grund ist gestalterisch: an Stelle der Kopfzeile steht ein
   hohes Bordeaux-Band, das die Gratulation und die H1 traegt — Chris: „so wie
   wir es auch auf dem ‚Fast geschafft' gemacht haben … und die machen wir jetzt
   natuerlich deutlich breiter."
   🔑 Das Band ist KEIN `hs-kopfband`, sondern die normale `kopfsektion()` auf
   `hs-section--bordeaux hs-on-dark`. Deshalb steht hier auch keine Typo-Regel:
   Schriftgroessen und Farben kommen aus dem bestehenden Massgeruest (H1 42/54,
   Eyebrow `--mute` = Figmas Altrosa fuer dunklen Grund).
   Fusszeile bleibt. Kein Eingriff an den Header-Template-Bedingungen. */
body.page-id-10941 .elementor-location-header,
body.postid-10941 .elementor-location-header,
body.page-id-10942 .elementor-location-header,
body.postid-10942 .elementor-location-header { display: none; }

/* Kopfzeile auf den beiden KURSSEITEN Gesamt Gesicht ausblenden (Chris, 16.09.2026).
   9790 = Anmeldung/Verkauf, 9809 = Warteliste. Begruendung wie oben: es sind
   Verkaufsseiten, niemand soll dort ins Menue abbiegen. Figma 343:2 zeigt oben
   ebenfalls kein Menue — dort deckt das Banner-Rechteck Logo und Navigation ab.
   ⚠️ Das Banner selbst ist am 16.09. aus dem Generator ENTFERNT worden: es wird
   kuenftig von Thrive Ultimatum eingeblendet, nicht aus der Seite heraus.
   Deshalb beginnt die Seite oben direkt mit dem Hero.
   Fusszeile bleibt. Kein Eingriff an den Header-Template-Bedingungen. */
body.page-id-9790 .elementor-location-header,
body.postid-9790 .elementor-location-header,
body.page-id-9809 .elementor-location-header,
body.postid-9809 .elementor-location-header { display: none; }

/* ============================================================================
   FOTOSPALTEN IM HOCHFORMAT — Hoehe folgt der Fensterbreite (16.09.2026)
   ----------------------------------------------------------------------------
   🔴 Chris' Befund: „Bei mir sind im Desktop die Finger immer noch
   abgeschnitten." Der Eintrag vom selben Tag behauptete „auf dem Desktop ist
   nichts beschnitten (0 px gemessen)" — gemessen wurde aber NUR bei 1440 px.
   Nachgemessen an der Ueber-Hanna-Spalte von 9790 (`kurs-hanna-ueber.webp`,
   1281 x 1920):

       Fenster   Kasten       Beschnitt oben
       1440      534 x 845      0 px
       1728      642 x 845     59 px   (Finger auf der Kante)
       1920      714 x 845    113 px   (Finger ab)

   🔑 Es ist KEIN Desktop/Mobil-Problem, sondern ein Fensterbreiten-Problem, und
   es ist zum dritten Mal dieselbe Ursache wie bei `--ganzfigur` und
   `hs-hero-kurs`: eine FESTE Hoehe stimmt nur bei genau einer Fensterbreite.
   Die Spalte ist 37,5 % der Fensterbreite, das Foto ist Hochformat — sobald der
   Kasten breiter wird als das Bildverhaeltnis erlaubt, schneidet `cover` oben
   und unten weg. Bei 2:3 passiert das ab 1518 px.

   RECHNUNG (dieselbe wie bei den Heros, nur andersherum, weil hier die HOEHE
   gesucht ist):  vw-Wert = Spaltenanteil / (Bildbreite / Bildhoehe)
       2:3       0,375 / 0,6667 = 56,25 %
       1200x1731 0,375 / 0,6932 = 54,10 %
       1200x1665 0,375 / 0,7207 = 52,05 %

   OBERGRENZE: der jeweilige Wert bei 1920 px. Bis dahin ist das Foto bei JEDER
   Breite vollstaendig zu sehen; darueber waechst die Sektion nicht weiter,
   damit sie auf sehr breiten Schirmen kein Turm wird. Jenseits von 1920
   schneidet `cover` wieder — dort haengt es am Bildausschnitt, und die beiden
   Fotos mit erhobenen Armen (`kurs-hanna-ueber`, `ch-hanna`) stehen deshalb
   im Generator auf `top center`: dann faellt notfalls der Saum, nie die Hand.

   ⚠️ Die Klasse gehoert auf die SPALTE, nicht auf die Sektion. Auf der Sektion
   wuerde Elementors Elementregel (0,3,0) die Klasse (0,1,0) schlagen — genau
   die Falle aus dem Hero-Eintrag. Auf der Spalte gibt es desktopseitig keine
   konkurrierende Elementregel (`fotospalte()` setzt nur `min_height_tablet`
   und `min_height_mobile`), die Klasse traegt also. Gemessen an 9790 bei 1920:
   Kasten 714 x 1080, Beschnitt oben 0, Sektion und Textspalte wachsen mit.

   ⚠️ Erst ab 1025 px. Darunter steht die Spalte auf 100 % Breite (Elementors
   Tablet-Umbruch) und die Rechnung waere sinnlos; dort gelten
   `min_height_tablet` / `min_height_mobile` und `hs-hannafoto`.

   Die feste `min-height` der Sektion bleibt bewusst stehen: zwischen 1025 und
   1440 px liegt der vw-Wert UNTER Figmas Hoehe, und dort haelt die Sektion die
   Untergrenze. */
@media (min-width: 1025px) {
	/* Bilder im Verhaeltnis 2:3 — 1281x1920, 1280x1920, 1200x1800, 1240x1860 */
	.hs-fotospalte--56 { min-height: min(56.25vw, 1080px); }
	/* `st-hanna.webp` 1200x1731 (Starterset + Stirnfalten-Check) */
	.hs-fotospalte--54 { min-height: min(54.10vw, 1039px); }
	/* `hanna-ueber-mich.webp` 1200x1665 (Quiz-LP) */
	.hs-fotospalte--52 { min-height: min(52.05vw, 1000px); }

	/* Zwei Spalten trugen ihre Hoehe als ELEMENTWERT im Generator. Die schlaegt
	   jede Klasse (0,3,0 gegen 0,1,0), also ist sie dort ausgebaut und die
	   Untergrenze steht hier. Ohne sie fiele die Spalte zwischen 1025 und
	   1440 px unter Figmas Mass, denn dort ist 56,25vw kleiner. */
	.hs-fotospalte--56-800 { min-height: clamp(800px, 56.25vw, 1080px); }  /* Stirnfalten-Check, CTA-Foto */
	.hs-fotospalte--56-923 { min-height: clamp(923px, 56.25vw, 1080px); }  /* Challenge, Ueber-Hanna */
}

/* ============================================================================
   VERGLEICHSZEILE — Überschrift gehört IN ihre Spalte (16.09.2026)
   ----------------------------------------------------------------------------
   🔴 Chris: „Mobil sieht es schlecht aus — da kommt ‚Andere Face-Yoga-Anbieter‘,
   dann ‚3-Stufen-Facelift-Formel‘ und dann erst die Aufzählungen."
   Die Sektion war als ZWEI Zeilen gebaut: eine mit beiden Überschriften, eine
   mit beiden Kästen. Auf dem Desktop liegt das zufällig übereinander; sobald
   beide Zeilen mobil umbrechen, stapeln sie nacheinander und die zweite
   Überschrift verliert ihren Kasten.
   🔑 Gebaut ist jetzt EINE Zeile mit zwei Spalten, die je Überschrift UND Kasten
   tragen — die Zuordnung hängt damit an der Struktur, nicht an einer
   Umbruchregel.

   Diese Klasse hängt `hs-gleich` für genau diesen Fall um. Dort steht
   `.hs-gleich > .e-con > .e-con { height: 100% }`; das traf vorher die
   Listenpunkte. In der neuen Verschachtelung träfe es den KASTEN — und 100 %
   der Spalte schließt die Überschrift mit ein, der Kasten liefe also unten
   heraus. `flex-grow` leistet dasselbe (beide Kästen enden gleich hoch), ohne
   die Überschrift mitzurechnen.
   ⚠️ Gleiche Spezifität wie die `hs-gleich`-Regel (0,3,0) — sie trägt also NUR,
   weil sie später in der Datei steht. Beim Umsortieren daran denken. */
.hs-vgspalten > .e-con > .e-con {
	height: auto;
	flex-grow: 1;
}

/* Zeitstrahl: Jahres-Label mit UNTERLAENGE (18.09.2026, Hannas Hinweis #28).
   `.hs-tl__jahr` sitzt per `translateY(-50%)` auf der Kartenkante — der
   Zeilenkasten endet damit exakt an der Bildkante (gemessen: -0,3 px).
   Bei Ziffern faellt das nicht auf: „2017" hat 0,5 px Unterlaenge und behaelt
   8,3 px Luft. „Über viele Jahre" hat mit dem J eine Unterlaenge von 7,9 px
   und behaelt nur 0,9 px — das J beruehrt optisch das Foto.
   Hanna: „das J ist etwas zu nahe am Bild".
   🔑 Von 17 Stationen betrifft das GENAU EINE. Deshalb ein Modifier statt
   einer Verschiebung aller Jahreszahlen — die wuerden sonst sichtbar von der
   Kartenkante abheben, und die Kante ist die Gestaltungsidee.
   ⚠️ Bekommt ein weiteres Label eine Unterlaenge (g, j, p, q, y, J), braucht
   es dieselbe Klasse. */
.hs-tl__jahr--unterlaenge { transform: translateY(calc(-50% - 8px)); }

/* Zeitstrahl 2023 „Profi-Videostudio": Ausschnitt nach rechts (19.09.2026).
   Hanna: „den Ausschnitt so verschieben, dass der Arm links abgeschnitten ist
   und dafuer rechts ein Teil der Anatomie sichtbar ist".
   GEMESSEN statt geschaetzt (Bild 900x505 in der 221x175-Rasterzelle):
   Skalierung 0,3465 — die Hoehe passt EXAKT, beschnitten wird nur horizontal,
   und zwar 262 px. Der Anatomie-Kreis liegt bei x 699..879, der erhobene Arm
   beginnt bei x 278.
     center (50 %) -> Fenster x 131..769  ->  Grafik ab 769 abgeschnitten
     96 %          -> Fenster x 252..890  ->  Grafik GANZ drin, Arm bleibt drin
   🔑 Der von Hanna erwartete Kompromiss ist bei dieser Zellbreite nicht noetig:
   beides passt gleichzeitig ins Bild.
   Spezifitaet (0,3,0) schlaegt `.hs-tl__fotos--raster img` (0,2,0) — kein
   !important noetig. Gilt bewusst nur fuer dieses eine Foto. */
.hs-tl__fotos img.hs-tl__foto--ausschnitt-rechts { object-position: 96% 28%; }

/* Zeitstrahl 2024 „Logopaedie" (19.09.2026, Hannas Hinweis #288: „den beigen
   Rand links jeweils wegnehmen … damit man die Uebung und die Anatomie besser
   sieht").
   🔴 GEMESSEN, und der Befund war ein anderer als gedacht: Im Format
   `--paarquer` (16:9) werden von 900 px Breite nur **2–4 px** beschnitten —
   Bild und Zelle haben fast dasselbe Verhaeltnis. Der beige Rand steckt also
   IM BILD, nicht im Ausschnitt; `object-position` ist dort wirkungslos.
   Erst ein hohes Format schafft Beschnitt: in der 221x250-Zelle von
   `--paar` (dieselbe wie „15 Jahre Akne", Chris' Vorschlag) sind es **455 px**.
   Inhalt beginnt bei x 441 (tools) bzw. 495 (wangen), der Anatomie-Kreis in
   `wangen` liegt bei x 600..886 — mit Ausschnitt rechts ist beides drin. */
.hs-tl__fotos img.hs-tl__foto--rechts { object-position: 100% 28%; }

/* Zwei quer aufgenommene Fotos QUADRATISCH zeigen — Zeitstrahl 2024
   (19.09.2026, Chris: „schneiden wir die Fotos im Quadrat zu, so wie bei
   15 Jahre Akne, damit die Uebungen und die Anatomie besser zu sehen sind").
   🔴 `aspect-ratio` statt fester Hoehe, und das ist der Punkt: Der Beschnitt
   bleibt damit bei JEDER Spaltenbreite derselbe. Mit der festen 250-px-Hoehe
   von `--paar` war die Zelle auf 375 px nur 123 px breit — das Fenster schrumpft
   dort auf 248 px und haette bei `rechts` mitten ins Gesicht geschnitten
   (x 652..900 statt x 397..900). Auf dem Desktop faellt das nicht auf, mobil
   ist es ein Fehler. Gemessen, nicht vermutet.
   Quadrat: Fenster 503 px bei jeder Breite, mit `--rechts` x 397..900.
   Inhalt beginnt bei x 441 (tools) / 495 (wangen), Anatomie-Kreis x 600..886. */
.hs-tl__fotos--quadrat { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.hs-tl__fotos--quadrat img { aspect-ratio: 1 / 1; height: auto; object-fit: cover; object-position: center 40%; }

/* Zeitstrahl 2026 „Anonym angezeigt": Augen auf ein Drittel (19.09.2026,
   Hannas Hinweis #327: „koennen wir den Foto-Ausschnitt noch etwas nach oben
   schieben, sodass die Augen bei ca. 1/3 sind?").
   GEMESSEN: Foto 900x1350 in der 452x565-Zelle -> Fenster 1125 px hoch, der
   Spielraum betraegt also nur 225 px. Die Augen liegen im Original bei y 580.
     22 % (vorher) -> Fenster y  50..1174 -> Augen bei 47 % = praktisch Mitte
     91 %          -> Fenster y 205..1330 -> Augen bei 33,3 % = genau 1/3
   🔑 Die Bilddatei muss NICHT beschnitten werden: der Spielraum reicht, und
   ueber dem Kopf bleiben immer noch 255 px Wand. Ein hoeherer Wert als 91 %
   bringt nichts mehr — bei 100 % waeren es 31,6 %. */
.hs-tl__fotos img.hs-tl__foto--augen-drittel { object-position: 50% 91%; }

/* Halbfoto waagerecht spiegeln — Mission-Sektion der Ueber-Mich-Seite
   (19.09.2026, Hannas Hinweis #412: „Bild spiegeln, sodass die Brust dem Text
   zugewandt ist").
   Das Foto steht links, der Text rechts; Hanna lehnt in der Quelle nach rechts,
   ihre Vorderseite zeigt also vom Text weg.
   🔑 Warum CSS und keine zweite Bilddatei: `.hs-halbfoto` beschneidet waagerecht
   MITTIG (`object-position: center`), und das Motiv liegt in dieser Datei
   praktisch mittig (x 296..965 von 1200, Mitte 630 gegen Rahmenmitte 600). Die
   Spiegelung verschiebt den Ausschnitt damit nicht — sie dreht nur, was zu sehen
   ist. Bei einem aussermittigen Ausschnitt waere das anders: `scaleX(-1)` spiegelt
   das FENSTER mit, dann muesste `object-position` gegengerechnet werden. */
.hs-halbfoto--gespiegelt img { transform: scaleX(-1); }

/* ==========================================================================
   16. 5-Tage-Challenge — Hannas Durchsicht 20.09.2026
   ========================================================================== */

/* --- 16.1 Unter-Button-Zeile zentriert ZUM KNOPF --------------------------
   Hanna am 18.09.2026 am Hero der Challenge: „Bitte in diesem Fall den
   Unter-Button-Text zentriert zum Button machen (auch wenn der Fliesstext
   oben linksbuendig ist) — aber da der Text im Button selbst zentriert ist,
   wirkt es mit dem unter-button text zentriert besser."

   🔑 Warum eine Huelle und nicht `text-align:center` am Text:
   Gemessen bei 1024 px Fensterbreite steht der Knopf bei x 349..704 (354 px
   breit), seine Mitte also bei 526. Die Textspalte ist 640 px breit, ihre
   Mitte bei 669. Ein auf die SPALTE zentrierter Text stuende 143 px neben
   dem Knopf — also gerade nicht „zentriert zum Button". CSS kann die Breite
   eines Geschwisterelements nicht lesen; deshalb umschliesst `hs-knopfgruppe`
   beide und schrumpft auf die Knopfbreite.

   🔴 Unter 768 px NICHT schrumpfen: dort ist der Knopf volle Spaltenbreite
   (gemessen 375 px: x 20..355). `fit-content` wuerde ihn auf seine Textbreite
   zusammenziehen und damit den Mobil-Hero zerlegen, den Hanna im selben
   Kommentar ausdruecklich gelobt hat. Bei voller Knopfbreite zentriert die
   Zeile ohnehin schon richtig.

   ⚠️ Die Huelle aendert NICHTS an der Geschwister-Regel aus 14.x
   (`.elementor-widget-button + .hs-note`): die Zeile bleibt der direkte
   Nachbar des Knopf-Widgets, nur eine Ebene tiefer. Kursiv 14/20 bleibt. */
.hs-knopfgruppe {
	width: fit-content;
	max-width: 100%;
}
@media (max-width: 767px) {
	.hs-knopfgruppe { width: 100%; }
}

/* --- 16.2 Beschriftung VORHER / NACH … in den Challenge-Testimonials -------
   Hanna am 18.09.2026, dreimal gestellt (Notion #319, #338, #349): „Bitte
   ueberall dort, wo Vorher-Nachher oder Nach 1 Workout in der Challenge oder
   Problem, Loesung Ergebnis als Struktur ist, in Grossbuchstaben machen so wie
   ihr es auf Erfolgsgeschichten-Seite so schoen gemacht habt."

   🔑 Gemeint ist `hs-pls` (14.x oben), nicht die Inline-Form. Auf 10167 stehen
   beide nebeneinander, live gemessen am 20.09.2026:
     inline : "Vorher:"  18 px / w700 / text-transform none
     hs-pls : "Vorher"   14 px / w700 / uppercase / display:block
   Gelobt ist die zweite — deshalb sind Groesse, Gewicht, Transform und der
   2-px-Abstand 1:1 von `.hs-pls strong` uebernommen.

   ⚠️ BEWUSST NICHT uebernommen: die 14/22 des `hs-pls`-FLIESSTEXTES. Die
   Testimonials der Challenge stehen auf 16/27, und Hanna hat die Beschriftung
   gelobt, nicht eine kleinere Schrift verlangt. Deshalb eine eigene Klasse nur
   fuer die Beschriftung statt `hs-pls` an der ganzen Karte.

   ⚠️ KEINE Farbe gesetzt: sie erbt vom Absatz. Eine eigene Farbe waere eine
   Aenderung, die niemand beauftragt hat. */
.hs-vnlabel {
	display: block;
	font-family: var(--hs-sans);
	font-size: 14px;
	font-weight: 700;
	text-transform: uppercase;
	margin-bottom: 2px;
}

/* --- 16.3 Freizeile zwischen Absätzen der Bannerkarten --------------------
   Chris am 20.09.2026, im Anschluss an Hannas Absatz-Wunsch (Notion #52):
   „nach jeweils um 19:00 Uhr live kommt eine Leerzeile und dann vor ‚Melde
   dich hier an' auch nochmal eine Leerzeile" — und dasselbe auf der
   Warteliste vor „Zur Warteliste".

   🔑 Die Absätze STANDEN schon (drei bzw. zwei `<p>`), sie waren nur nicht zu
   sehen: `.hs-bkarte p` trägt `margin: 0`. Es fehlte also nicht die Struktur,
   sondern der Abstand.

   🔑 `p + p` trifft ausschließlich unmittelbar aufeinanderfolgende Absätze —
   das ist NUR Karte 1, auf beiden Seitenzuständen. Karte 2 und 3 haben je
   einen Absatz, die Kartentitel (`.hs-bkarte__titel`) stehen in eigenen
   Widgets und haben damit keinen Vorgänger-`<p>`. Kein anderer Baustein der
   Site nutzt `hs-bkarte` (geprüft: die Klasse kommt nur in `challenge.py` vor).

   🔑 Der Wert ist die ZEILENHÖHE, nicht ein Prozentwert: eine Freizeile ist
   genau eine Zeile. Desktop 26 px, mobil 24 px — beides exakt die Werte aus
   `.hs-bkarte p` am jeweiligen Haltepunkt. */
.hs-bkarte p + p { margin-top: 26px; }
@media (max-width: 767px) {
	.hs-bkarte p + p { margin-top: 24px; }
}

/* --- 16.4 Eigener Audio-Abspieler in Hannas Rosé -------------------------
   Chris am 21.09.2026 auf der Presse-Seite: *„die Playbar … ist jetzt so
   grau. Es hebt sich von dem Sand überhaupt nicht ab … ob wir die in Hannas
   Farbe kriegen, so wie sie auch in Figma dargestellt wurden."*

   Der Entwurf zeigt an dieser Stelle eine ROSÉ-PILLE: Canvas „Presse",
   Frame `Podcast`, `Rectangle 24` — 1040 x 49, `#A23559`, cornerRadius 200.

   🔴 Warum ein eigener Abspieler und nicht `<audio controls>` umgefärbt:
   die Bedienelemente von `<audio>` liegen im Shadow-DOM des Browsers. Nur
   WebKit bietet dafür Pseudoelemente (`::-webkit-media-controls-*`), sie
   sind nicht standardisiert, und Firefox kennt sie gar nicht. Eine Färbung
   dort wäre in Chrome hübsch und in Firefox unverändert grau. Deshalb
   eigene Bedienelemente; das `<audio>`-Element bleibt und liefert den Ton.

   Barrierefreiheit: der Knopf ist ein echter `<button>` mit `aria-label`,
   die Leiste ein `<input type="range">` — damit ist der Abspieler mit der
   Tastatur bedienbar, was eine reine `<div>`-Lösung nicht wäre. */
.hs-audio {
	display: flex;
	align-items: center;
	gap: 14px;
	min-height: 49px;
	padding: 0 8px 0 6px;
	border-radius: 200px;
	background: var(--hs-rose);
	color: var(--hs-white);
	font-family: var(--hs-sans);
}
.hs-audio audio { display: none; }

.hs-audio__knopf {
	flex: 0 0 auto;
	width: 37px;
	height: 37px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.18);
	color: var(--hs-white);
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	transition: background 0.15s ease;
}
.hs-audio__knopf:hover  { background: rgba(255, 255, 255, 0.30); }
.hs-audio__knopf:focus-visible { outline: 2px solid var(--hs-white); outline-offset: 2px; }
.hs-audio__knopf svg { width: 15px; height: 15px; fill: currentColor; }

/* Die Leiste: eigener Track, damit sie in beiden Zuständen weiß bleibt.
   `accent-color` allein reicht nicht — es färbt in Firefox den Fortschritt,
   lässt den Track aber grau. */
.hs-audio__leiste {
	flex: 1 1 auto;
	-webkit-appearance: none;
	appearance: none;
	height: 4px;
	border-radius: 2px;
	background: rgba(255, 255, 255, 0.35);
	cursor: pointer;
	margin: 0;
}
.hs-audio__leiste::-webkit-slider-thumb {
	-webkit-appearance: none;
	appearance: none;
	width: 13px;
	height: 13px;
	border: 0;
	border-radius: 50%;
	background: var(--hs-white);
	cursor: pointer;
}
.hs-audio__leiste::-moz-range-thumb {
	width: 13px;
	height: 13px;
	border: 0;
	border-radius: 50%;
	background: var(--hs-white);
	cursor: pointer;
}
.hs-audio__leiste:focus-visible { outline: 2px solid var(--hs-white); outline-offset: 3px; }

.hs-audio__zeit {
	flex: 0 0 auto;
	min-width: 76px;
	text-align: right;
	padding-right: 8px;
	font-size: 13px;
	line-height: 1;
	font-variant-numeric: tabular-nums;
	color: rgba(255, 255, 255, 0.92);
}

@media (max-width: 480px) {
	.hs-audio__zeit { min-width: 64px; font-size: 12px; }
}

/* --- 16.5 Presse-Hero, Fassung „foto" — mobil kein Hintergrundbild -------
   Hanna wünschte am 21.09.2026 statt des freigestellten Fotos das echte
   Hochformat als Hero-Hintergrund. Auf dem Desktop trägt das: der Text steht
   links auf der gestreckten Wand, gemessener Kontrast 6,0–7,1.

   🔴 Mobil NICHT: dort läuft der Text über die ganze Breite und damit über den
   Vorhang. Dessen dunkle Falten drücken den Kontrast auf **2,33** (gemessen;
   AA verlangt 4,5). Das ist echtes Bild und nicht durch Aufhellen zu retten.

   Deshalb mobil zurück auf die Ordnung, die die Seite ohnehin schon hatte und
   die Chris ausdrücklich so wollte („so wie wir es ja jetzt auch haben"):
   Text auf Sand, darunter das Foto als eigener Block. Der Block selbst ist ein
   Bild-Widget, das nur unter 768 px sichtbar ist. */
/* Bis 1024 px, nicht nur bis 767: auf dem Tablet ist die Textspalte
   ebenfalls 100 % breit, dort entsteht dieselbe Ueberlagerung. */
/* 🔴 **EIGENE Klasse, nicht `.hs-hero-foto`** — korrigiert am 21.09.2026.
   Hier stand zuerst `.hs-hero-foto`, weil der Presse-Hero diese Klasse
   mitbenutzte. Die trägt aber schon Bedeutung auf DREI anderen Seiten
   (Starterset 10741, Stirnfalten-Check 10861, Erfolgsgeschichten 10167) — und
   diese Regel hat dort das mobile Hero-Foto **stillschweigend mit
   abgeschaltet**. Am selben Abend gemessen: auf allen dreien
   `background-image: none`, also gar kein Bild mehr auf dem Handy. Aufgefallen
   ist es erst, als der Starterset-Hero mobil umgebaut wurde und das frisch
   gesetzte Bild nicht erschien.
   🔑 **Lehre: eine fremde Klasse mitbenutzen, nur um ihre Regel zu erben, ist
   dasselbe wie die Klasse zu ändern.** Wer eine Sonderregel braucht, bekommt
   eine eigene Klasse. */
@media (max-width: 1024px) {
	.hs-hero-pressefoto { background-image: none !important; }
}

/* --- 16.6 FluentForms: Bestätigungsmeldung ------------------------------
   Hanna, 21.09.2026 (Durchsicht der Warteliste-Bestätigungsseiten): die
   Meldung nach dem Absenden der Umfrage soll **dunkelrot** sein.

   🔑 Das ist die INLINE-Meldung, keine eigene Seite. Formular 7 steht auf
   `redirectTo: samePage` mit `samePageFormBehavior: hide_form` — das Formular
   verschwindet, an seiner Stelle erscheint `.ff-message-success`. Es gibt also
   keine zweite Seite, die man zusätzlich einfärben müsste.

   🔑 Dunkelrot = Bordeaux, die dunkle Hausfarbe (#7A2742); Rosé (#A23559) ist
   die hellere und hier nicht gemeint.

   ⚠️ Die Regel gilt für JEDES FluentForm dieser Installation, nicht nur für
   Formular 7 — die Meldung ist ein Plugin-Bauteil mit einer festen Klasse.
   Das ist so gewollt: eine Bestätigung soll überall gleich aussehen.
   ⚠️ FluentForms setzt die Farbe selbst nicht, sie wird geerbt; der Absatz
   bekommt sie deshalb ausdrücklich mit, damit kein Theme dazwischenkommt.
   ⚠️ Der Kasten selbst (grauer 1-px-Rahmen + Schatten, aus
   `fluent-forms-public.css`) bleibt vorerst unangetastet — Hanna hat den Text
   gemeint. Gemeldet, nicht geändert. */
.ff-message-success,
.ff-message-success p,
.ff-message-success h1, .ff-message-success h2, .ff-message-success h3,
.ff-message-success li, .ff-message-success strong {
	color: var(--hs-bordeaux);
}

/* --- 16.7 FluentForms: zweispaltige Zeilen auf eine Grundlinie ----------
   🔴 Ausgelöst von der Textänderung am 21.09.2026: „Welche Frustrationen
   beschäftigen dich aktuell?" wurde zu „Was frustriert dich im Moment am
   meisten?" — und damit von zwei Zeilen auf eine. Die Nachbarfrage daneben
   blieb zweizeilig, also rutschte das linke Eingabefeld um 41 px nach oben.
   Chris: *„Dadurch ist das Feld nach oben gerutscht. Das sieht natürlich
   scheiße aus."*

   🔑 **Nicht mit einer Leerzeile im Text gelöst.** Eine Leerzeile hält nur bis
   zur nächsten Textänderung oder bis jemand das Fenster schmaler zieht und die
   Beschriftung anders umbricht. Die Ausrichtung gehört ins Layout.

   Mechanik: die Zellen einer `.ff-t-container`-Zeile sind bereits gleich hoch
   (gemessen 144 px, beide). Nur die Beschriftungen sind es nicht (20 gegen
   39 px). Die Gruppe wird deshalb zur Flex-Spalte und das Eingabefeld per
   `margin-top: auto` an den unteren Rand der Zelle geschoben — dann stehen
   ALLE Felder einer Zeile auf derselben Grundlinie, unabhängig davon, über
   wie viele Zeilen die Beschriftungen laufen.

   🔴 **`margin-left/right: 0` und `width: 100%` sind Pflicht, nicht Zierde.**
   An `.ff-el-input--content` hängen seitliche `auto`-Ränder. Im Blocklayout
   sind die wirkungslos; sobald die Gruppe aber ein Flex-Container ist, heben
   sie die Dehnung auf: das Feld schrumpfte auf Inhaltsbreite (202 statt
   397 px) und stand mittig in der Spalte. Am gerenderten Element gemessen —
   im ersten Versuch genau so passiert.

   ⚠️ Gilt für JEDE mehrspaltige FluentForm-Zeile dieser Installation. Das ist
   gewollt: versetzte Felder sind nirgends richtig.
   ⚠️ Unter dem Umbruchpunkt stapeln die Zellen; dort ist die Zellhöhe gleich
   der Inhaltshöhe, `margin-top: auto` läuft ins Leere und ändert nichts. */
.ff-t-container > .ff-t-cell { display: flex; flex-direction: column; }
.ff-t-container > .ff-t-cell > .ff-el-group {
	flex: 1 1 auto;
	display: flex;
	flex-direction: column;
}
.ff-t-container > .ff-t-cell > .ff-el-group > .ff-el-input--content {
	margin-top: auto;
	margin-left: 0;
	margin-right: 0;
	width: 100%;
}

/* --- 16.8 Versal-Beschriftung INNERHALB einer Zeile ----------------------
   Chris, 21.09.2026 zu den Starterset-Testimonials: *„Bei Angela steht
   ‚Vorher:' und ‚Heute:'. Schreib das groß. Es braucht keine extra Zeile oder
   sonst irgendwas, weil es ja ‚Vorher:' heißt, aber wir machen es da groß."*

   🔴 **`.hs-vnlabel` ist hier FALSCH** — die Klasse trägt `display: block` und
   setzt die Beschriftung auf eine eigene Zeile. Genau das wollte Chris nicht.
   Sie ist für die Erfolgsgeschichten gebaut, wo VORHER/NACHHER als eigene
   Zeile über dem Zitat steht und der Doppelpunkt deshalb entfällt.

   🔑 Hier bleibt alles in der Zeile: nur `text-transform`, sonst nichts. Größe,
   Gewicht und Farbe kommen weiter vom umgebenden `<strong>` — damit ist es
   wirklich nur eine Auszeichnung und keine zweite Gestaltung. Der Doppelpunkt
   steht im Text und bleibt sichtbar.
   ⚠️ Wer doch die Umbruch-Fassung will: `hs-versal` gegen `hs-vnlabel`
   tauschen UND den Doppelpunkt aus dem Text nehmen (so steht es auf 9752). */
.hs-versal { text-transform: uppercase; }


/* --- 16.4 Erfolgsgeschichten-Abschluss: Augen auf 1/3 der Rahmenhoehe ------
   Hanna/Chris 24.09.2026: „Kopf auf ca. ein Drittel, Haende duerfen oben ab."
   Das Foto (2:3) liegt per `cover` im Rahmen und bindet ueber die BREITE:
   gezeichnete Hoehe D = 1,5 * W. Augen in der Datei bei f (Foto 1 45,5 %,
   Foto 2 43,3 %). Soll: Augen bei H/3. Benoetigter Versatz der Bildoberkante:
       o = H/3 - f*D = H/3 - 1,5*f*W
   `background-position-y: p` ergibt o = p*(H - D). Mit p = 33,333 % bleibt
   H/3 - D/3 = H/3 - 0,5*W; der Rest ist eine LAENGE in Rahmenbreiten:
       o = 33,333 % + (0,5 - 1,5*f) * W
   W kennt CSS nur ueber Container-Einheiten: die Zeile ist Container, das Foto
   ist 37,5 % (Desktop) bzw. 100 % (<= 1024 px) ihrer Breite.
       Foto 1: (0,5 - 0,6825) = -0,1825  -> -6,84 cqw  | -18,25 cqw
       Foto 2: (0,5 - 0,6495) = -0,1495  -> -5,61 cqw  | -14,95 cqw
   🔑 `clamp(100 %, …, 0 %)`: wo der Spielraum nicht reicht (1440 px: nur 73-110
   px), wird auf „ganz hoch" begrenzt statt eine Luecke unter dem Bild zu
   reissen. Die Prozente sind hier negativ (H < D), daher 100 % als Untergrenze.
   ⚠️ `!important`, weil Elementor die Position je Haltepunkt als Element-Regel
   ausgibt (hoehere Spezifitaet). Die Elementor-Werte bleiben als Rueckfall. */
.hs-ende-zeile { container-type: inline-size; }
.hs-auge-455 { background-position: 50% clamp(100%, calc(33.333% - 6.84375cqw), 0%) !important; }
.hs-auge-433 { background-position: 50% clamp(100%, calc(33.333% - 5.60625cqw), 0%) !important; }
@media (max-width: 1024px) {
	.hs-auge-455 { background-position: 50% clamp(100%, calc(33.333% - 18.25cqw), 0%) !important; }
	.hs-auge-433 { background-position: 50% clamp(100%, calc(33.333% - 14.95cqw), 0%) !important; }
}

/* --- 16.5 Erfolgsgeschichten: Beschriftung in Foto-/Screenshot-Karten = Textgroesse
   Chris 24.09.2026: „VORHER/NACHHER, PROBLEM/LOESUNG … sind in den Testimonials
   mit Bild kleiner als der Testimonial-Text — das geht nicht."
   Gemessen: Beschriftung 14 px, Text 18 px (22 Foto- + 3 Screenshot-Beschriftungen).
   ➜ Beschriftung wie der Text 18 px. Videokarten (14/22, Figma) bleiben wie sie sind —
   dort sind Beschriftung und Text ohnehin gleich gross.
   ⚠️ Nur ueber die Kartenklassen, NICHT an `.hs-vnlabel` selbst: dieselbe Klasse traegt
   die Beschriftungen auf Challenge und Kursseiten. */
.hs-story__zitat .hs-vnlabel,
.hs-pls--bild .hs-vnlabel {
	font-size: 18px;
}

/* --- 16.9 Beschriftung in der Groesse des umgebenden Textes ---------------
   Chris 25.09.2026, Stirnfalten-Check 10861 (Nadja, Kathrin): VORHER / NACHHER
   „so wie auf der Erfolgsgeschichten-Seite" — Versalien, eigene Zeile, ohne
   Doppelpunkt, in der Schrift und GROESSE des Textes. Der Text steht dort auf
   15/26 (Eigenwert am Widget), nicht auf 18 wie auf 10167.
   🔑 `inherit` statt einer festen Zahl: die Beschriftung folgt jedem Text, in
   dem sie steht. Nur als Modifier — die Grundklasse bleibt 14 px (Challenge,
   Kursseiten), 16.5 bleibt fuer 10167. */
.hs-vnlabel.hs-vnlabel--text {
	font-size: inherit;
}

/* --- 15.4c Stepper: Doppelpfeil sitzt AUF der Kartenunterkante (25.09.2026) --
   Chris/Hanna: die Pfeile sollen „ähnlich wie die Icons" auf der Box-Kante
   beginnen. GEMESSEN bei 1440 (Icons geladen!): Icon-Mitte zur Kartenoberkante
   0 … +1,8 px; Pfeil-Mitte zur Kartenunterkante **+10 px** (Pfeilkasten 34 hoch,
   ragte nur 7 px in die Karte).
   ➜ Pfeil 10 px höher: margin-top -7 -> **-17** (Mitte = Kante).
   ➜ Jede Linie **+10 px**, damit Kartenabstand (102 / mobil 85) und die 6 px
     Luft zum nächsten Icon (15.4b) exakt bleiben. Doppelte Klasse wie 15.4b.
   Nur Challenge 10756/10757 (einzige Seiten mit `hs-stepper`). */
.hs-stepper__pfeil { margin-top: -17px; }
.elementor-element-st-p2.elementor-element-st-p2::after { height: 50px; }
.elementor-element-st-p3.elementor-element-st-p3::after { height: 42px; }
.elementor-element-st-p4.elementor-element-st-p4::after { height: 45px; }
@media (max-width: 767px) {
	.elementor-element-st-p2.elementor-element-st-p2::after { height: 33px; }
	.elementor-element-st-p3.elementor-element-st-p3::after { height: 25px; }
	.elementor-element-st-p4.elementor-element-st-p4::after { height: 28px; }
}

/* --- 16.10 Quiz-Bestätigung 10931: Augen auf 1/3 der Rahmenhoehe (25.09.2026) --
   Hanna über Chris: „wie auf anderen Seiten — Augenlinie bei einem Drittel,
   Arme dürfen abgeschnitten sein." Dieselbe Formel wie 16.4:
       y = 33,333 % + 1,5 · (1/3 − f) · W      (Foto 2:3, cover bindet über die Breite)
   Foto `sa-versprechen.webp` (10796): Augen y 711/1650 → f = 0,4309
       ⇒ 1,5 · (0,3333 − 0,4309) = −0,1464 · W
   W = Fotospalte: Desktop 37,5 % der Zeile (−5,49 cqw), ≤ 1024 px volle Breite (−14,64 cqw).
   `hs-ende-zeile` (16.4) steht am Band und liefert die cqw.
   🔑 Nebenbei behoben: Elementor gab für Tablet/Mobil `background-position: 0px 0px`
   aus (leere Regler mit 0 aufgefüllt) — die 8 % wirkten nur am Desktop. `!important`
   gilt hier für alle Breiten. */
.hs-auge-431 { background-position: 50% clamp(100%, calc(33.333% - 5.4893cqw), 0%) !important; }
@media (max-width: 1024px) {
	.hs-auge-431 { background-position: 50% clamp(100%, calc(33.333% - 14.638cqw), 0%) !important; }
}

/* --- 16.11 Blog-Archiv: Seitenzahlen (25.09.2026) ------------------------
   Chris (mit Bildvorlage „Aktive Seite in Magenta mit Unterstrich. Klare,
   schlichte Lösung."): Abstand nach oben größer, nicht aktive Seiten Dunkelrot,
   aktive im helleren Rot mit Unterstrich, Schrift Editor's Note.
   GEMESSEN vorher (1440): Abstand letzte Kartenreihe → Zahlen **0 px**; Farben
   kamen vom Theme (aktiv #333, übrige Linkfarbe #CC3366), Open Sans 18/700.
   Nur am Archiv-Raster `lgkarten` (Template „Blog-Archiv"). */
.elementor-element-lgkarten .elementor-pagination {
	margin-top: 56px;              /* Kartenraster hat 44 zwischen den Reihen */
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	gap: 8px 36px;
}
.elementor-element-lgkarten .elementor-pagination .page-numbers {
	position: relative;
	margin: 0 !important;          /* Elementor setzt 5 px je Seite; der Abstand kommt aus `gap` */
	font-family: var(--hs-serif);
	font-size: 26px;               /* 32 -> 26 (Chris 25.09.: „ein bisschen kleiner") */
	font-weight: 400;
	line-height: 1.28;
	color: var(--hs-bordeaux);
	text-decoration: none;
}
.elementor-element-lgkarten .elementor-pagination a.page-numbers:hover,
.elementor-element-lgkarten .elementor-pagination a.page-numbers:focus-visible {
	color: var(--hs-rose);
}
.elementor-element-lgkarten .elementor-pagination .page-numbers.current {
	color: var(--hs-rose);
}
.elementor-element-lgkarten .elementor-pagination .page-numbers.current::after {
	content: "";
	position: absolute;
	left: 50%;
	bottom: -6px;
	width: 1.6em;
	max-width: 44px;
	height: 3px;
	transform: translateX(-50%);
	background: var(--hs-rose);
}
@media (max-width: 767px) {
	.elementor-element-lgkarten .elementor-pagination { margin-top: 40px; gap: 8px 22px; }
	.elementor-element-lgkarten .elementor-pagination .page-numbers { font-size: 22px; }
}
