/* ===========================================================================
   redesign.css - Stylesheet des neuen Screendesigns
   ---------------------------------------------------------------------------
   DREI Seiten haengen daran: default.html, ueber-mich.html und
   mein-angebot.html. Alle drei teilen sich Kopf, Fusszeile, Knoepfe,
   Wellen, den Bildring, die Marke, die Vorspann-Pille und die
   Bewertungsanzeiger; was nur einer Seite gehoert, steht in einem eigenen
   Abschnitt weiter unten und nennt seine Seite im Kopf.

   Eine Datei und nicht drei, weil alle dieselbe Palette und dasselbe Raster
   brauchen. Drei Stylesheets mit je einem :root waeren drei Wahrheiten ueber
   dieselben Farben.

   Bewusst eigenstaendig: modern.css wird von diesen Seiten NICHT geladen. Jede
   von ihnen bringt ein eigenes :root mit, und ein gemeinsames Laden wuerde die
   Palette der Livestartseite ueberschreiben.

   Alle Farbwerte sind aus den drei Screendesigns abgegriffen, nicht
   geschaetzt. Die Schriften stehen schon lizenziert in css/fonts.css:
   Museo Slab W03_500 fuer Ueberschriften, Museo Sans W03_300/500/900 fuer den
   Rest. Es wird keine Schrift von aussen nachgeladen.
   =========================================================================== */

:root {
	/* Farben, abgegriffen aus dem Screendesign */
	--rd-gelb: #FDC617;
	--rd-gelb-dunkel: #F0B400;
	--rd-gelb-hell: #FFF6E4;
	--rd-tuerkis: #00AEC5;
	--rd-tuerkis-dunkel: #057989;
	--rd-tuerkis-hell: #E2F7FA;
	--rd-tuerkis-ring: #D6EFF2;   /* der blasse Ring um das Video, abgegriffen */
	/* ROT — die einzige Farbe, die mit den Design-States (05.09.2026) wirklich
	   dazukam. ABGEGRIFFEN aus lernerfolg.jetzt_designstates.png, nicht
	   geschaetzt: in beiden roten Bereichen (Zahlung fehlgeschlagen, Meldung
	   Fehler) ist #E24E34 der haeufigste Ton, der blasse Kreis dahinter
	   #FBE9E6. Tuerkis und Gelb der Zustaende brauchten KEIN neues Token —
	   gemessen sind es #00AEC5 und #FBB900/#FDC716, also genau die, die oben
	   schon stehen. Ein zweites Gelb waere die zweite Wahrheit ueber dieselbe
	   Farbe gewesen. */
	--rd-rot: #E24E34;
	--rd-rot-hell: #FBE9E6;
	/* Das Grau der Ladeplatzhalter, ebenso abgegriffen (#E6E5E0). */
	--rd-skelett: #E6E5E0;
	--rd-creme: #FFFDF7;
	--rd-braun: #322600;          /* der dunkle Ton der dritten Freebie-Karte */
	--rd-weiss: #FFFFFF;
	--rd-text: #1B1B1B;
	--rd-text-grau: #6E7477;
	/* Die Navigation. Sie stand auf --rd-text in der schwersten Schnittweite
	   und wirkte damit schwerer als alles andere im Kopf; Kevin am 14.08.2026:
	   „eine kleine Stufe groesser und ein Ton, der ein mini bisschen heller
	   ist“. Der Ton liegt zwischen Text und Grau, nicht beim Grau - Navigation
	   soll lesbar bleiben, nicht zuruecktreten. */
	--rd-text-nav: #3D4245;

	/* Schrift */
	--rd-slab: 'Museo Slab W03_500', Georgia, 'Times New Roman', serif;
	--rd-sans: 'Museo Sans W03_500', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
	--rd-sans-fett: 'Museo Sans W03_900', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

	/* DIE SCHREIBSCHRIFT DER UNTERSCHRIFT (Kevin, 10.09.2026: "Die Unterschrift
	   Bettina Betz bitte in der schreibschrift 'Segoe Script'").

	   ES IST EINE SYSTEMSCHRIFT UND KEIN WEBFONT, und das gehoert dazugesagt:
	   `Segoe Script` liegt auf Windows und sonst nirgends -- auf einem Mac,
	   einem iPhone oder einem Android-Geraet greift der naechste Name der
	   Kette. Das Projekt laedt keine Schrift von einem fremden Dienst (kein
	   @font-face in dieser Datei, kein Google-Fonts-Link in den Seiten), und
	   ein Webfont waere ein eigener Handgriff samt Datei in beiden
	   Deploy-Listen. Die Kette ist deshalb nach demselben Muster gebaut wie
	   --rd-sans darueber: der gewuenschte Name zuerst, dann die
	   Schreibschriften, die auf den anderen Systemen wirklich vorhanden sind,
	   und `cursive` als letzte Zusicherung. */
	--rd-schreibschrift: 'Segoe Script', 'Segoe Print', 'Bradley Hand', 'Snell Roundhand',
		'Brush Script MT', cursive;
	--rd-sans-leicht: 'Museo Sans W03_300', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

	/* Raster. Im Screendesign steht die linke Textkante bei x=211 und die
	   rechte Kante des Loginknopfs bei x=1714, bei 1920 Breite. Macht 1500
	   Inhalt; mit 24px Innenabstand also 1548 Aussenmass. Gemessen, nicht
	   gegriffen - siehe die Zahlen am Ende dieser Datei. */
	/* DER EINE REGLER FUER DIE GESAMTGROESSE. Der Entwurf ist auf 1920 gezeichnet,
	   und diese Datei traegt seine gemessenen Zahlen im Klartext: 1548 fuer den
	   Container, 122 fuer die Kopfzeile, 58/60 fuer die Karteninnenabstaende. Sie
	   bleiben stehen und werden hier EINMAL multipliziert, statt sie umzurechnen -
	   sonst waere die Messtabelle am Ende der Datei von genau den Werten
	   abgeschnitten, gegen die sie nachzumessen erlaubt.

	   .93 heisst: wie 93% Browserzoom. Wer es groesser oder kleiner will, aendert
	   diese eine Zahl; 1 stellt den Entwurf massstabsgetreu wieder her.

	   Was ABSICHTLICH nicht mitskaliert: die Breakpoints (sie beschreiben das
	   wirkliche Fenster, nicht den Entwurf), das 100vw in der Anschnittrechnung,
	   Haarlinien wie der 2px-Unterstrich der Navigation, die Schatten, und alle
	   em-Werte - die haengen schon an ihrer eigenen Schriftgroesse und wuerden
	   sonst doppelt schrumpfen. */
	--rd-zoom: .93;

	--rd-container: calc(1548px * var(--rd-zoom));

	--rd-radius-karte: calc(28px * var(--rd-zoom));
	/* "Karten-Radius, gross: 56px 46px 60px 50px - Hero-Angebotskarte
	   Standortbestimmung und grosse Sektionskarten" (Asset-Datei, 19.09.2026,
	   W8): die beiden Angebotskarten der Startseite und die Standortkarte auf
	   "Mein Angebot". */
	--rd-radius-karte-gross: calc(56px * var(--rd-zoom)) calc(46px * var(--rd-zoom))
	                         calc(60px * var(--rd-zoom)) calc(50px * var(--rd-zoom));

	/* Hoehe der klebenden Kopfzeile. Steht hier, weil sie an ZWEI Stellen
	   gebraucht wird: als Mindesthoehe der Kopfzeile selbst und als Abstand, den
	   ein Sprungziel nach oben freihaelt. Ohne den zweiten waere jeder
	   Seitensprung (#angebote, #ueber-mich) unter der Kopfzeile gelandet - die
	   ersten Zeilen des Ziels waeren verdeckt gewesen. Getrennte Zahlen waeren
	   irgendwann auseinandergelaufen. */
	--rd-kopf: calc(122px * var(--rd-zoom));
	--rd-schatten-karte: 0 18px 40px rgba(80, 60, 0, .10);
	--rd-schatten-pille: 0 6px 16px rgba(80, 60, 0, .10);
}

*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	scroll-behavior: smooth;
}

body {
	font-family: var(--rd-sans);
	font-size: calc(18px * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text);
	background: var(--rd-creme);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	text-rendering: optimizeLegibility;
}

body.rd-menue-offen {
	overflow: hidden;
}

img {
	max-width: 100%;
	height: auto;
	display: block;
}

a {
	color: inherit;
	text-decoration: none;
}

strong {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	color: var(--rd-text);
}

.skip-link {
	position: absolute;
	left: -9999px;
	top: 0;
	background: var(--rd-gelb);
	color: var(--rd-text);
	padding: calc(12px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	z-index: 2000;
	border-radius: 0 0 calc(12px * var(--rd-zoom)) 0;
}

.skip-link:focus {
	left: 0;
}

.rd-container {
	width: 100%;
	max-width: var(--rd-container);
	margin: 0 auto;
	padding: 0 calc(24px * var(--rd-zoom));
}

/* --------------------------------------------------------------- Buttons */

.rd-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: calc(14px * var(--rd-zoom));
	padding: calc(21px * var(--rd-zoom)) calc(39px * var(--rd-zoom));
	border: 0;
	/* "Button-Radius: 42px 36px 44px 38px - alle Primaer- und Sekundaer-Buttons,
	   leicht ungleich" (Asset-Datei, 19.09.2026, W8). Vorher 999px, also eine
	   exakte Pille; der Entwurf zeichnet die Ecken absichtlich verschieden.
	   Bei niedrigeren Knoepfen staucht der Browser die Radien im Verhaeltnis,
	   die Ungleichheit bleibt. */
	border-radius: calc(42px * var(--rd-zoom)) calc(36px * var(--rd-zoom))
	               calc(44px * var(--rd-zoom)) calc(38px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1.3rem * var(--rd-zoom));
	line-height: 1;
	cursor: pointer;
	transition: transform .15s ease, box-shadow .15s ease, background-color .15s ease;
}

.rd-btn:hover {
	transform: translateY(-2px);
}

/* Der gedaempfte Zustand eines Knopfes, der (noch) nichts tut: ohne diese
   Zeilen haette er weiterhin die Hand als Zeiger und wuerde sich beim
   Ueberfahren anheben - er saehe also anklickbar aus und waere es nicht. Nur
   gedaempft, nicht ausgegraut.

   BIS ZUM 17.08.2026 STAND HIER "der Kundenlogin ist ein deaktivierter Knopf,
   solange es den Kundenbereich nicht gibt". Es gibt ihn jetzt: der Knopf ist
   auf allen elf Seiten ein <a> auf /mein_bereich.php, und damit hat diese
   Regel im Entwurf gerade keinen Nutzer mehr. Sie bleibt trotzdem stehen - sie
   sagt nichts ueber den Login, sondern ueber jeden Knopf, und der naechste
   Platzhalter kommt bestimmt. Was NICHT bleiben durfte, war der Satz darueber:
   ein Kommentar, der das Gegenteil des Zustands behauptet, ist schlimmer als
   keiner. */
.rd-btn:disabled {
	cursor: default;
	opacity: .85;
}

.rd-btn:disabled:hover {
	transform: none;
}

.rd-btn:focus-visible {
	outline: 3px solid var(--rd-tuerkis-dunkel);
	outline-offset: 3px;
}

/* DIE SYMBOLE AUS DER ASSET-DATEI (19.09.2026, W8): svg/rd-icons.svg ist ein
   Sprite, tools/rd_sprite.php baut es. Eine Seite bindet ein Symbol als
   <svg class="rd-icon"><use href="/svg/rd-icons.svg#rd-…"></use></svg> IN den
   Behaelter ein, der vorher das Material Symbol trug - die Klasse
   material-symbols-outlined bleibt am Behaelter, damit jede Groessen- und
   Farbregel dieser Datei (font-size, color) weiter greift: das Symbol ist
   1em gross und nimmt currentColor. Wo die Asset-Datei kein Gegenstueck
   hat, steht weiter das Material Symbol. */
.rd-icon {
	width: 1em;
	height: 1em;
	display: block;
	flex: 0 0 auto;
}

.rd-btn-pfeil {
	font-size: calc(48px * var(--rd-zoom));
	font-variation-settings: 'wght' 350;
	margin: calc(-6px * var(--rd-zoom)) 0;
}

/* DAS INFO-ZEICHEN AN EINEM FELD (19.09.2026, Kevin: "hinter der Bezeichnung
   fuer das Eingabefeld E-Mail ein Info-Symbol, wenn man draufdrueckt oder
   drueberhovert steht da dann, dass man sich mit dieser E-Mail ins
   Kundenportal anmelden kann"). Ein Knopf im Label (fokussierbar, mit
   title), daneben die Blase, die bei :hover und :focus-within erscheint -
   ohne JavaScript. Der Text steht in Klammern, wie Kevin es beschrieben
   hat, und ist fuer Vorleseprogramme ein tooltip. */
.rd-info {
	position: relative;
	display: inline-block;
	margin-left: calc(6px * var(--rd-zoom));
	vertical-align: middle;
}

.rd-info-knopf {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: calc(22px * var(--rd-zoom));
	height: calc(22px * var(--rd-zoom));
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: var(--rd-tuerkis-hell);
	color: var(--rd-tuerkis-dunkel);
	font-size: calc(16px * var(--rd-zoom));
	cursor: pointer;
}

.rd-info-knopf:focus-visible {
	outline: 2px solid var(--rd-tuerkis-dunkel);
	outline-offset: 2px;
}

.rd-info-text {
	display: none;
	position: absolute;
	left: 0;
	top: calc(100% + 6px);
	z-index: 5;
	width: max-content;
	max-width: min(320px, 80vw);
	padding: calc(8px * var(--rd-zoom)) calc(12px * var(--rd-zoom));
	border-radius: calc(10px * var(--rd-zoom));
	background: var(--rd-text);
	color: var(--rd-weiss);
	font-family: var(--rd-sans-leicht);
	font-size: calc(0.9rem * var(--rd-zoom));
	font-weight: 400;
	line-height: 1.45;
	text-align: left;
	box-shadow: var(--rd-schatten-pille);
}

.rd-info:hover .rd-info-text,
.rd-info:focus-within .rd-info-text {
	display: block;
}

/* Zwei Blasen an der E-Mail (21.09.2026), eine je Angebotsart; die
   ausgeblendete bleibt auch beim Darueberfahren weg - `display: block` oben
   schluege sonst das [hidden] des Browsers. */
.rd-info-text[hidden] {
	display: none;
}

/* Ein Knopf MIT Pfeilscheibe braucht rechts weniger Luft: die Scheibe bringt
   ihren eigenen Rand mit. Faellt :has() aus, bleibt der Abstand symmetrisch,
   und das ist keine Entgleisung, sondern nur etwas grosszuegiger. */
.rd-btn:has(.rd-btn-pfeil) {
	padding-right: calc(20px * var(--rd-zoom));
}

.rd-btn-primaer {
	background: var(--rd-gelb);
	color: var(--rd-text);
	box-shadow: var(--rd-schatten-pille);
}

.rd-btn-primaer:hover {
	background: var(--rd-gelb-dunkel);
}

.rd-btn-weiss {
	background: var(--rd-weiss);
	color: var(--rd-text);
	box-shadow: var(--rd-schatten-pille);
}

.rd-btn-tuerkis {
	background: var(--rd-tuerkis-dunkel);
	color: var(--rd-weiss);
	box-shadow: 0 6px 16px rgba(5, 121, 137, .22);
}

.rd-btn-tuerkis:hover {
	background: #04606C;
}

.rd-btn-login {
	background: var(--rd-gelb);
	color: var(--rd-text);
	font-size: calc(1.16rem * var(--rd-zoom));
	padding: calc(17px * var(--rd-zoom)) calc(30px * var(--rd-zoom));
}

.rd-btn-login .material-symbols-outlined {
	font-size: calc(26px * var(--rd-zoom));
}

.rd-btn-login:hover {
	background: var(--rd-gelb-dunkel);
}

.rd-btn-block {
	width: 100%;
}

/* ---------------------------------------------------------------- Header */

.rd-header {
	position: sticky;
	top: 0;
	z-index: 1000;
	background: var(--rd-creme);
}

.rd-header-inner {
	display: flex;
	align-items: center;
	gap: calc(24px * var(--rd-zoom));
	min-height: var(--rd-kopf);
}

section[id] {
	scroll-margin-top: var(--rd-kopf);
}

.rd-logo {
	flex: none;
}

.rd-logo img {
	height: calc(79px * var(--rd-zoom));
	width: auto;
}

/* Die Navigation steht im Entwurf nicht rechtsbuendig, sondern mittig
   ZWISCHEN Logo und Loginknopf: gemessen 710..1308 bei einer freien Flaeche
   von 525..1490, beides mit derselben Mitte. */
.rd-nav {
	flex: 1;
	display: flex;
	justify-content: center;
}

.rd-btn-login {
	flex: none;
}

.rd-nav ul {
	display: flex;
	align-items: center;
	gap: calc(34px * var(--rd-zoom));
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-nav a {
	font-family: var(--rd-sans);
	font-size: calc(1.22rem * var(--rd-zoom));
	color: var(--rd-text-nav);
	white-space: nowrap;
	padding: calc(6px * var(--rd-zoom)) 0;
	border-bottom: 2px solid transparent;
}

.rd-nav a:hover {
	border-bottom-color: var(--rd-gelb);
}

/* Die Seite, auf der man gerade steht. Der Entwurf zeichnet sie im
   Ueber-mich-Screendesign gelb und unterstrichen; das aria-current sagt
   dasselbe den Vorlesern. Beide Navigationen tragen die Regel, denn sie sind
   dieselbe Navigation. */
.rd-nav a[aria-current="page"],
.rd-menu-mobile ul a[aria-current="page"] {
	color: var(--rd-gelb-dunkel);
}

/* DER AKTIVE MENUEPUNKT bekommt den dafuer vorgesehenen Schwung statt einer
   geraden Linie - das Assetsdokument nennt ihn ausdruecklich "aktiver
   Menuepunkt". Der frueher hier gesetzte `border-bottom-color` faellt weg:
   zwei Striche uebereinander waeren einer zu viel. */
.rd-nav a[aria-current="page"] {
	border-bottom-color: transparent;
	position: relative;
}

.rd-nav a[aria-current="page"]::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	bottom: calc(-2px * var(--rd-zoom));
	height: calc(10px * var(--rd-zoom));
	background-image: var(--rd-strich-nav);
	background-repeat: no-repeat;
	background-size: 100% 100%;
	/* "im Design leicht rotiert" (Asset-Datei): im Ueber-mich-Screendesign
	   liegt das rechte Ende eine Spur hoeher als das linke (19.09.2026, W8). */
	transform: rotate(-2deg);
}

.rd-burger {
	display: none;
	width: calc(56px * var(--rd-zoom));
	height: calc(56px * var(--rd-zoom));
	margin-left: auto;
	border: 0;
	border-radius: calc(16px * var(--rd-zoom));
	background: var(--rd-gelb);
	cursor: pointer;
	padding: 0;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: calc(5px * var(--rd-zoom));
}

.rd-burger span {
	display: block;
	width: calc(24px * var(--rd-zoom));
	height: calc(2.5px * var(--rd-zoom));
	border-radius: calc(2px * var(--rd-zoom));
	background: var(--rd-text);
}

.rd-menu-mobile {
	position: absolute;
	left: calc(16px * var(--rd-zoom));
	right: calc(16px * var(--rd-zoom));
	top: calc(100% - 8px * var(--rd-zoom));
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: 0 24px 50px rgba(80, 60, 0, .18);
	padding: calc(28px * var(--rd-zoom)) calc(24px * var(--rd-zoom)) calc(24px * var(--rd-zoom));
}

.rd-menu-mobile[hidden] {
	display: none;
}

.rd-menu-mobile ul {
	list-style: none;
	margin: 0 0 calc(24px * var(--rd-zoom));
	padding: 0;
}

.rd-menu-mobile li + li {
	margin-top: calc(6px * var(--rd-zoom));
}

/* Dieselbe Schnittweite, Groesse und Farbe wie die Navigation oben - es ist
   dieselbe Navigation, nur aufgeklappt. */
.rd-menu-mobile ul a {
	display: block;
	padding: calc(14px * var(--rd-zoom)) calc(8px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1.22rem * var(--rd-zoom));
	color: var(--rd-text-nav);
}

.rd-menu-mobile .rd-btn {
	padding-top: calc(20px * var(--rd-zoom));
	padding-bottom: calc(20px * var(--rd-zoom));
	font-size: calc(1.15rem * var(--rd-zoom));
}

/* ------------------------------------------------------------------ Hero */

.rd-hero {
	position: relative;
	overflow: hidden;
	/* Farbe der Welle nach unten: der Ton des naechsten Abschnitts. */
	--rd-wellenfarbe: var(--rd-gelb-hell);
	padding: calc(37px * var(--rd-zoom)) 0 calc(165px * var(--rd-zoom));
	background: var(--rd-creme);
}

/* ======================================================================
   Die Wellen zwischen den Abschnitten
   ---------------------------------------------------------------------
   Geometrie einmal, Farbe je Abschnitt ueber --rd-wellenfarbe: es ist
   ueberall dieselbe Form, und Abschriften davon laufen auseinander.
   Gefaerbt wird immer mit dem Ton des NAECHSTEN Abschnitts - die Welle
   haengt unten am aktuellen und laesst den naechsten hineinragen.

   SEIT DEM 15.08.2026 EINE KLASSE, nicht mehr eine Aufzaehlung von fuenf
   Abschnittsnamen. Der Grund ist nicht Schoenheit: ueber-mich.html
   braucht dieselbe Welle, und eine zweite Seite kann einer Liste von
   Selektoren in dieser Datei nicht beitreten, ohne dass jemand daran
   denkt. Eine Aufzaehlung, die man beim Hinzufuegen einer Seite pflegen
   muss, ist im Projekt schon zweimal teuer geworden.

   WER .rd-welle AN EINEN ABSCHNITT HAENGT, SCHULDET ZWEIERLEI:
   `position: relative` mit `overflow: hidden` (sonst haengen 290 Pixel
   Bogen sichtbar unter der Kante), und genug unteren Innenabstand - der
   Bogen liegt UEBER dem Inhalt, siehe die Rechnung unten. Die bestehenden
   Abschnitte haben dafuer 165, 130, 188, 130 und 152.

   Wie tief die Welle sein muss, ist gemessen und nicht gegriffen. Im
   Entwurf schwankt die Farbkante

     Hero -> Angebote        y 1101..1161   (60)
     Angebote -> Ueber mich  y 2352..2408   (56)
     Gratis -> Stimmen       y 5374..5447   (73)
     Stimmen -> Abschluss    y 6334..6389   (55)
     Abschluss -> Fuss       y 6985..7045   (60)  [nach Gelb-hell]

   also rund 60 bis 70 Pixel. Die erste Fassung stand auf height 70 /
   bottom -25 und brachte AN DEN PIXELN GEMESSEN 12 - eine Kante, die wie
   ein Strich aussieht.

   Die Rechnung dahinter hat mich zweimal getaeuscht, deshalb steht sie
   hier ganz. Sichtbar ist nur der Teil ueber der Abschnittskante, also
   H - |bottom|. Wie weit der Bogen zum Bildrand hin abfaellt, haengt
   dagegen am SENKRECHTEN Radius - und `border-radius: 50%` heisst
   waagerecht die halbe Breite, senkrecht die halbe HOEHE. Der senkrechte
   Radius ist also H/2, nicht H. Genau diese Haelfte hatte ich im ersten
   Anlauf uebersehen: gerechnet 62, gemessen 30.

   Bei 130% Breite (left/right -15%) steht der Bildrand bei 0,769 des
   waagerechten Radius; dort ist der Bogen um

     Abfall = (H/2) * (1 - sqrt(1 - 0,769^2)) = 0,1805 * H

   gefallen. Ein voller Bogen ueber die Fensterbreite - kein abgeschnittener
   Buckel - heisst: Abfall gleich sichtbare Hoehe.

     H - |bottom| = 0,1805 * H   =>   |bottom| = 0,8195 * H

   Mit H = 360 macht das bottom = -295 und 65 Pixel Hub. Das Verhaeltnis
   haengt nur an den 130% Breite, nicht am Fenster: auf dem Telefon ergibt
   sich derselbe Bogen. Wer H aendert, muss bottom mitziehen - und danach
   an den PIXELN nachmessen, nicht am errechneten Wert.

   Der Bogen liegt UEBER dem Inhalt des Abschnitts (positioniertes ::after
   ohne z-index). Die 65 Pixel passen deshalb nur, solange jeder Abschnitt
   mehr unteren Innenabstand hat: 165, 130, 188, 130 und 152. Und der
   Rest des Bogens - gut 290 Pixel - haengt unter der Kante und lebt nur
   davon, dass alle drei Abschnitte `overflow: hidden` tragen.
   ====================================================================== */
.rd-welle::after {
	content: '';
	position: absolute;
	left: -15%;
	right: -15%;
	bottom: calc(-295px * var(--rd-zoom));
	height: calc(360px * var(--rd-zoom));
	border-radius: 50% 50% 0 0;
	background: var(--rd-wellenfarbe);
}


/* Die grossen Schmuckkreise im Hintergrund. Sie standen bis zum 15.08.2026
   mit HARTER Kante da und lasen sich damit als Scheiben, nicht als Schimmer -
   Kevin: „deshalb sah das Design noch nicht so rund aus".

   Die 45px sind eine ENTSCHEIDUNG, keine Messung, und deshalb steht die Messung
   daneben: im Entwurf ist der Kreis rechts oben im Hero ueber rund 12 bis 15
   Pixel weich (abgegriffen bei y=250 und y=400), der Kreis links im Abschnitt
   „Was mir wichtig ist" dagegen ueber 4 - der Entwurf selbst ist an dieser
   Stelle uneinheitlich. Ein Wert, der die 12 nachbaut, haette die Scheibe
   Scheibe bleiben lassen. Gewaehlt ist der Wert, der die Kreise zu Licht macht,
   an den Fassungen 0/25/45/70/100 nebeneinander verglichen.

   Der Radius haengt am Regler, wie jede andere Entwurfszahl auch: sonst waere
   die Zusicherung am Dateiende, dass --rd-zoom: 1 den Entwurf wiederherstellt,
   fuer die Kreise nicht mehr wahr.

   NICHT betroffen ist .rd-karte-blase, der aufgehellte Kreis INNERHALB der
   Karten: der gehoert zur Karte und nicht zum Hintergrund. */
.rd-blob {
	position: absolute;
	border-radius: 50%;
	pointer-events: none;
	filter: blur(calc(45px * var(--rd-zoom)));
}

.rd-blob-gelb {
	left: calc(-260px * var(--rd-zoom));
	bottom: calc(-40px * var(--rd-zoom));
	width: calc(520px * var(--rd-zoom));
	height: calc(520px * var(--rd-zoom));
	background: rgba(253, 198, 23, .13);
}

.rd-blob-tuerkis {
	right: calc(-220px * var(--rd-zoom));
	top: calc(-120px * var(--rd-zoom));
	width: calc(620px * var(--rd-zoom));
	height: calc(620px * var(--rd-zoom));
	background: rgba(0, 174, 197, .11);
	/* Im Entwurf ist der tuerkise Kreis hinter dem Hero-Blob SCHARF gerandet
	   (19.09.2026, W8), nur der gelbe Fleck links unten ist weich. */
	filter: none;
}

.rd-hero-inner {
	position: relative;
	z-index: 1;
	display: grid;
	grid-template-columns: minmax(0, .96fr) minmax(0, 1fr);
	align-items: center;
	gap: calc(clamp(40px, 3.6vw, 68px) * var(--rd-zoom));
}

.rd-eyebrow {
	display: inline-block;
	background: #FBEFD2;
	color: #6A5518;
	font-family: var(--rd-sans-fett);
	font-size: calc(.93rem * var(--rd-zoom));
	letter-spacing: .12em;
	text-transform: uppercase;
	padding: calc(12px * var(--rd-zoom)) calc(24px * var(--rd-zoom));
	border-radius: 999px;
	margin-bottom: calc(30px * var(--rd-zoom));
}

.rd-hero-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(2.2rem, calc(25.5px + 3.1vw), 5.3rem) * var(--rd-zoom));
	line-height: 1.05;
	color: var(--rd-text);
	margin: 0 0 calc(42px * var(--rd-zoom));
}

/* Der laengere Hero-Satz vom 10.09.2026 (Kevin: "die schriftart kleiner
   machen und ersetzen durch der richtige Lernweg fuer bessere Lateinnoten
   ohne Lerndruck").

   EIGENE REGEL STATT KLEINERER GRUNDGROESSE: `.rd-hero-titel` traegt jede
   Hero-Ueberschrift des Redesigns, auch die kurzen auf den anderen Seiten.
   Wer dort die Zahl senkt, verkleinert sie alle mit -- und keiner merkt es,
   weil nichts fehlschlaegt. Die Kurve ist dieselbe wie oben, nur um rund ein
   Viertel gestaucht: der Satz ist gut doppelt so lang wie "Kennen Sie das
   auch?" und braucht bei 1920 sonst drei Zeilen. */
.rd-hero-titel-klein {
	font-size: calc(clamp(1.75rem, calc(19px + 2.3vw), 3.9rem) * var(--rd-zoom));
	line-height: 1.14;
}

/* ===================================================================
   DIE DREI UNTERSTREICHUNGEN AUS DEM ASSETSDOKUMENT (04.09.2026)
   ===================================================================

   Kevin: "Bitte noch die korrekten Unterstreichungen nutzen, die als SVG
   bereitgestellt werden."

   Hier stand ein GERADER Balken mit runden Enden. Der Entwurf hat einen
   handgezeichneten Schwung, und `Lernerfolg_Assets21.html` liefert ihn in
   drei Varianten - mit eigener Kurve, eigener Strichstaerke und eigener
   Bezeichnung:

     deko-unterstreichung-h1     220x18, Strich 6     Ueberschriften
     deko-unterstreichung-lang   320x18, Strich 6,5   "Ueber mich, Leitsatz"
     deko-unterstreichung-nav    200x16, Strich 4,5   "aktiver Menuepunkt"

   ALS HINTERGRUNDBILD, nicht als <svg> im Markup: der Schwung ist Schmuck
   und traegt keine Aussage - im Markup braeuchte er auf jeder der zwoelf
   Seiten ein `aria-hidden` und stuende in jedem Vorleseprogramm im Weg.
   `preserveAspectRatio="none"` zieht ihn auf die Breite des Wortes, genau
   wie im Assetsdokument.

   DIE FARBE IST #fbb900 UND NICHT --rd-gelb (#FDC617). Das ist kein
   Versehen: das Assetsdokument setzt sie so und sagt dazu "exakt so wie im
   Design gesetzt". Wer sie angleicht, korrigiert den Entwurf. */
:root {
	--rd-strich-h1: url("data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 220 18%22 preserveAspectRatio=%22none%22><path d=%22M4 11 C60 3 150 3 214 8%22 fill=%22none%22 stroke=%22%23fbb900%22 stroke-width=%226%22 stroke-linecap=%22round%22/></svg>");
	--rd-strich-lang: url("data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 320 18%22 preserveAspectRatio=%22none%22><path d=%22M4 11 C90 3 230 3 316 8%22 fill=%22none%22 stroke=%22%23fbb900%22 stroke-width=%226.5%22 stroke-linecap=%22round%22/></svg>");
	--rd-strich-nav: url("data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 200 16%22 preserveAspectRatio=%22none%22><path d=%22M4 7 C54 13 138 13 196 9%22 fill=%22none%22 stroke=%22%23fbb900%22 stroke-width=%224.5%22 stroke-linecap=%22round%22/></svg>");
}

/* Der Schwung sitzt am Text, nicht an der Zeile, damit er beim Umbruch
   mitwandert. */
.rd-unterstrich {
	position: relative;
	display: inline-block;
}

.rd-unterstrich::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	bottom: -.12em;
	height: calc(14px * var(--rd-zoom));
	background-image: var(--rd-strich-h1);
	background-repeat: no-repeat;
	background-size: 100% 100%;
	/* Die Asset-Datei sagt zur H1-Unterstreichung "im Design mit scaleY(-1)",
	   und die Screendesigns zeigen es (19.09.2026, W8, nachgesehen an "das
	   auch?", "Eltern und Schueler" und "Bettina."): der Schwung haengt in der
	   Mitte DURCH, die Enden liegen hoeher. Der Pfad der Datei woelbt sich
	   nach oben, deshalb die Spiegelung - fuer beide Varianten. */
	transform: scaleY(-1);
}

/* "Ueber mich, Leitsatz" - laenger und einen Hauch dicker. */
.rd-unterstrich-lang::after {
	background-image: var(--rd-strich-lang);
}

.rd-hero-fliess {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1.05rem, calc(17.35px + .331vw), 1.48rem) * var(--rd-zoom));
	line-height: 1.73;
	color: var(--rd-text-grau);
	max-width: 29.5em;
	margin: 0 0 calc(48px * var(--rd-zoom));
}

.rd-hero-aktionen {
	display: flex;
	flex-wrap: wrap;
	gap: calc(16px * var(--rd-zoom));
}

/* ------------------------------------------------------- Hero: Bild + Ring */

.rd-hero-bild {
	position: relative;
	margin: 0;
	justify-self: stretch;
	/* Solange rechts neben dem Container Platz ist, darf der Kreis ihn nutzen;
	   wird es eng, zieht sich der Wert von selbst auf 0 zurueck. */
	margin-right: clamp(calc(-74px * var(--rd-zoom)), calc((var(--rd-container) - 100vw) / 2), 0px);
}

/* ===================================================================
   DIE ZWEI ORGANIC-FORMEN AUS DEM ASSETSDOKUMENT (04.09.2026)
   ===================================================================

   Kevin: "start_neu hat definitiv nicht den richtigen Ring um die Bilder."
   Er hatte recht, und der Fehler war die FORM, nicht die Farbe: hier stand
   `border-radius: 50%` - ein exakter Kreis mit einem gleichmaessigen Rahmen.
   Der Entwurf hat beides nicht.

   `lernerfolg.jetzt_Assets.html` fuehrt sie unter der Ueberschrift
   "Organic-Formen (CSS, kein SVG)" mit Namen und Wert:

     Video- und Portraitmaske    52% 48% 55% 45% / 48% 54% 46% 52%
       "Bild und Overlay des Videoblocks, Ueber-mich-Portrait"
     Hero-Blob hinter dem Foto   63% 37% 58% 42% / 55% 60% 40% 45%
       "goldene Flaeche HINTER dem Hero-Portrait der Startseite"

   DAS WORT "HINTER" IST DIE GANZE AUSSAGE. Das Gelb ist keine Umrandung,
   sondern eine eigene Flaeche, die unter dem Foto liegt und ringsum
   ungleichmaessig hervorschaut - deshalb wirkt der "Ring" an einer Stelle
   dicker als an der anderen. Als `border` war er ueberall gleich breit und
   sah dadurch gedruckt aus.

   Als Variablen, weil beide Werte an mehreren Stellen gebraucht werden und
   ein zweites Literal die Fassung waere, die eines Tages abweicht. */
:root {
	--rd-maske-portrait: 52% 48% 55% 45% / 48% 54% 46% 52%;
	--rd-maske-heroblob: 63% 37% 58% 42% / 55% 60% 40% 45%;
	/* "Organic-Badge, Angebotskarten - 70 px Form hinter den Bereichsicons" */
	--rd-maske-badge-karte: 52% 48% 46% 54%;
	/* "Organic-Badge, Journey - Kreisform hinter den Journey-Icons" */
	--rd-maske-badge-journey: 58% 42% 50% 50%;
}

/* Die goldene Flaeche. Sie sitzt HINTER dem Foto und ist an jeder Seite
   verschieden weit heraus - genau das macht die Form lebendig. Als
   Pseudoelement und nicht als eigener div: sie traegt keine Bedeutung, ein
   Vorleseprogramm hat davon nichts. */
.rd-hero-bild::before {
	content: '';
	position: absolute;
	/* Im Entwurf schaut die Flaeche links und oben deutlich weiter hervor als
	   rechts und unten (19.09.2026, W8, am Screendesign nachgemessen: links
	   rund 50 px, oben rund 40, rechts rund 20, unten rund 30 bei 1920 px). */
	inset: calc(-40px * var(--rd-zoom)) calc(-20px * var(--rd-zoom))
	       calc(-30px * var(--rd-zoom)) calc(-50px * var(--rd-zoom));
	/* Der Verlauf aus der Asset-Datei ("Hero-Blob hinter dem Foto":
	   linear-gradient(150deg, #fdc311, #fbb900)) statt einer glatten Flaeche. */
	background: linear-gradient(150deg, #fdc311, #fbb900);
	border-radius: var(--rd-maske-heroblob);
	box-shadow: 0 24px 60px rgba(180, 130, 0, .18);
	z-index: 0;
}

/* Das Foto liegt DARAUF, mit der Portraitmaske. Kein Rahmen mehr: was wie
   einer aussieht, ist die Flaeche darunter. */
.rd-hero-ring {
	position: relative;
	z-index: 1;
	aspect-ratio: 1;
	border-radius: var(--rd-maske-portrait);
	overflow: hidden;
}

.rd-hero-ring img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	/* bettina.png ist quadratisch (330x330) und das Gesicht sitzt mittig - hier
	   also keine Verschiebung noetig, anders als beim hochkanten Vorgaenger. */
	object-position: 50% 50%;
	border-radius: var(--rd-maske-portrait);

	/* Die Datei bringt einen EIGENEN grauen Ring mit, rund 13 von 330 Pixeln
	   Rand, und durchsichtige Ecken. Ohne Gegenmassnahme laege innerhalb der
	   goldenen Flaeche noch ein grauer Rand. 330 / (330 - 2*13) = 1,086 - der
	   Faktor, ab dem er aus dem Ausschnitt herauswaechst; 1.09 gibt eine
	   Haaresbreite Zugabe. Der Ausschnitt von .rd-hero-ring schneidet ihn dann
	   weg. Faellt die Datei je durch ein Foto ohne eingebackenen Ring, gehoert
	   diese Zeile ersatzlos entfernt. */
	transform: scale(1.09);
}

/* DIE PILLE LIEGT UEBER DEM FOTO, und das braucht seit dem 04.09.2026 eine
   ausdrueckliche Angabe: mit dem Ringumbau hat `.rd-hero-ring` ein
   `z-index: 1` bekommen, und ein Geschwister ohne eigenen Wert verliert
   dagegen - auch wenn es im Markup spaeter steht. Kevin hat es gemeldet
   ("das Google-Bewertungswidget ist immer noch hinter dem Bild").

   Die Zahl steht ueber der des Rings, nicht daneben: 0 ist die goldene
   Flaeche, 1 das Foto, 2 die Pille. Wer den Ring anfasst, sieht hier, was
   daran haengt. */
.rd-bewertung {
	position: absolute;
	z-index: 2;
	left: 8%;
	bottom: 7%;
	display: grid;
	grid-template-columns: auto auto auto;
	grid-template-areas:
		'g zahl sterne'
		'g quelle quelle';
	align-items: center;
	column-gap: calc(12px * var(--rd-zoom));
	background: var(--rd-weiss);
	border-radius: calc(20px * var(--rd-zoom));
	padding: calc(16px * var(--rd-zoom)) calc(28px * var(--rd-zoom));
	box-shadow: 0 12px 30px rgba(60, 45, 0, .16);
	white-space: nowrap;
}

/* Der feste Stand liegt im selben Raster wie zuvor; die Pille selbst bleibt
   also unveraendert, egal welcher von beiden gerade drinsteht. */
.rd-bewertung-fest {
	display: contents;
}

/* Muss sein: `display: contents` aus dem Stylesheet schlaegt das
   `[hidden] { display: none }` des Browsers, weil Autorenregeln vor der
   Standardregel kommen. Ohne diese Zeile bliebe der feste Stand stehen,
   sobald das Widget geladen hat - und beide staenden nebeneinander. */
.rd-bewertung-fest[hidden] {
	display: none;
}

/* KEIN display:none, solange nichts gerendert ist - der Container muss messbar
   im Dokument stehen, sonst startet Elfsight nicht (siehe der Kommentar am div).
   Leer ist er null hoch und faellt damit ohnehin nicht auf; ueber alle Spalten
   gesetzt, damit er das dreispaltige Raster der Pille nicht verschiebt. */
.rd-bewertung-live {
	grid-column: 1 / -1;
	/* Die Pille setzt nowrap fuer ihre eigene Zeile. Das Widget bringt eigenen
	   Text mit und darf umbrechen. */
	white-space: normal;
}

.rd-google {
	grid-area: g;
	width: calc(42px * var(--rd-zoom));
	height: calc(42px * var(--rd-zoom));
}

.rd-bewertung-zahl {
	grid-area: zahl;
	font-family: var(--rd-sans-fett);
	font-size: calc(1.6rem * var(--rd-zoom));
	line-height: 1.1;
}

.rd-sterne {
	grid-area: sterne;
	color: var(--rd-gelb);
	font-size: calc(1.3rem * var(--rd-zoom));
	letter-spacing: 2px;
	line-height: 1.1;
}

.rd-bewertung-quelle {
	grid-area: quelle;
	font-size: calc(1.02rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	line-height: 1.3;
}

/* ---------------------------------------------- Elfsight in der Pille ----
   Der Uebersichtsanzeiger bringt eine eigene, STEHENDE Karte mit: weisser
   Grund, Rahmen, Radius, Ueberschrift "Google Rating", die Anzahl in Gold.
   Ungebremst steht damit eine Karte in der Karte, rund 170px hoch, quer
   ueber dem Foto. Hier wird sie abgeraeumt und in die Waagerechte gelegt:

        [G]  5,0 * * * * *
             24 Bewertungen

   WARUM DAS HIER STEHT UND NICHT IN ELFSIGHTS PANEL: das Widget rendert in
   dasselbe Dokument, kein iframe, kein Shadow-DOM. Sein CSS ist also von
   hier aus erreichbar - und damit versioniert, mitdeployt und von
   tests/test_redesign_startseite.php erreichbar. Im Panel laege es
   ausserhalb des Repos, und eine Aenderung dort waere spurlos.

   ANGEFASST WERDEN NUR die es-*-Klassen. Die zweiten Klassen daneben
   (BadgeContainer__Inner-sc-effaa9da-1 und aehnliche) kommen aus
   styled-components und wechseln bei jedem Elfsight-Update den Namen.

   `!important` steht hier mit Absicht und ueberall: Elfsights Regeln werden
   zur LAUFZEIT eingehaengt, also nach diesem Stylesheet, und haben dieselbe
   Spezifitaet. Ohne !important entscheidet die Reihenfolge, und die hat man
   nicht in der Hand. Gemessen: Elfsight selbst benutzt kein !important.     */

/* Die eigene Karte abraeumen. */
.rd-bewertung .es-badge-container {
	background: none !important;
	border: 0 !important;
	border-radius: 0 !important;
	box-shadow: none !important;
	margin: 0 !important;
	width: auto !important;
}

/* Aus der stehenden Karte eine liegende Zeile. Der Innenabstand faellt weg,
   den setzt die Pille. */
.rd-bewertung .es-card-badge-container {
	flex-direction: row !important;
	align-items: center !important;
	justify-content: flex-start !important;
	gap: calc(12px * var(--rd-zoom)) !important;
	padding: 0 !important;
	width: auto !important;
}

/* "Google Rating" faellt weg - darunter steht ohnehin "Bewertungen", und das
   Logo sagt, von wem. */
.rd-bewertung .es-badge-label-container {
	display: none !important;
}

/* Das Logo auf die Groesse der Pille (42 im Entwurf). `max-width` muss
   ausdruecklich weg: das Widget deckelt den Rahmen um das Logo auf 28px, ein
   groesseres Logo waere darueber hinausgelaufen statt ihn aufzuweiten. */
.rd-bewertung .es-badge-sources-container,
.rd-bewertung .es-badge-sources-container .es-badge-sources-item {
	flex: 0 0 auto !important;
	width: calc(42px * var(--rd-zoom)) !important;
	height: calc(42px * var(--rd-zoom)) !important;
	min-width: 0 !important;
	max-width: none !important;
}

/* Rechts vom Logo die zwei Zeilen, linksbuendig statt zentriert. */
.rd-bewertung .es-badge-rating-container {
	align-items: flex-start !important;
	gap: calc(2px * var(--rd-zoom)) !important;
	width: auto !important;
}

/* Erste Zeile: Note und Sterne - dieselben Werte wie am handgebauten Stand
   darueber (.rd-bewertung-zahl, .rd-sterne). */
.rd-bewertung .es-badge-rating {
	gap: calc(12px * var(--rd-zoom)) !important;
}

.rd-bewertung .es-rating-value {
	font-family: var(--rd-sans-fett) !important;
	font-weight: 400 !important;   /* die 900 steckt im Schriftschnitt selbst */
	font-size: calc(1.6rem * var(--rd-zoom)) !important;
	line-height: 1.1 !important;
	color: var(--rd-text) !important;
}

.rd-bewertung .es-rating-bar-container {
	width: auto !important;
	gap: calc(2px * var(--rd-zoom)) !important;
}

.rd-bewertung .es-rating-item {
	width: calc(21px * var(--rd-zoom)) !important;
	height: calc(21px * var(--rd-zoom)) !important;
}

/* Die Sterne sind SVG-Pfade ohne fill-Attribut. Elfsights Gold (#FCBF02)
   weicht dem Gelb der Seite. Dass die Regel wirklich greift, ist mit einer
   Magenta-Probe gemessen - die zwei Gelbs sind bei 20px nicht zu
   unterscheiden, ein Augenschein haette hier nichts bewiesen. */
.rd-bewertung .es-rating-item-filled svg path {
	fill: var(--rd-gelb) !important;
	stroke: var(--rd-gelb) !important;
}

/* Zweite Zeile: die Anzahl, im Grau der Seite statt in Gold. */
.rd-bewertung .es-badge-reviews-count {
	font-family: var(--rd-sans) !important;
	font-weight: 400 !important;
	font-size: calc(1.02rem * var(--rd-zoom)) !important;
	line-height: 1.3 !important;
	color: var(--rd-text-grau) !important;
}

/* -------------------------------------------------------------- Angebote */

.rd-angebote {
	position: relative;
	/* Farbe der Welle nach unten: der Ton des naechsten Abschnitts. */
	--rd-wellenfarbe: var(--rd-creme);
	/* Notwendig, seit hier eine Welle haengt: sie ist 130% breit, und ohne
	   Beschnitt entstuende waagerechter Ueberlauf. Der Hero macht es genauso. */
	overflow: hidden;
	background: var(--rd-gelb-hell);
	padding: calc(185px * var(--rd-zoom)) 0 calc(130px * var(--rd-zoom));
}

.rd-abschnitt-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.7rem, calc(27px + 1.41vw), 3.4rem) * var(--rd-zoom));
	line-height: 1.2;
	text-align: center;
	color: var(--rd-text);
	max-width: 22em;
	margin: 0 auto calc(26px * var(--rd-zoom));
}

.rd-abschnitt-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1rem, calc(15.9px + .423vw), 1.5rem) * var(--rd-zoom));
	line-height: 1.62;
	text-align: center;
	color: var(--rd-text-grau);
	max-width: 33em;
	margin: 0 auto calc(24px * var(--rd-zoom));
}

.rd-schlagworte {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: calc(18px * var(--rd-zoom));
	list-style: none;
	margin: 0 0 calc(73px * var(--rd-zoom));
	padding: 0;
}

/* Ohne den gelben Punkt davor (Kevin am 14.08.2026 entfernt) braucht die Pille
   keinen Zwischenraum mehr - der stand zwischen Punkt und Wort. */
.rd-schlagworte li {
	display: flex;
	align-items: center;
	background: var(--rd-weiss);
	color: #55595B;
	font-family: var(--rd-sans);
	font-size: calc(1.2rem * var(--rd-zoom));
	padding: calc(13px * var(--rd-zoom)) calc(26px * var(--rd-zoom));
	border-radius: 999px;
	box-shadow: var(--rd-schatten-pille);
}

/* ----------------------------------------------------- Angebote: Karten */

.rd-karten {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: calc(44px * var(--rd-zoom));
}

.rd-karte {
	position: relative;
	overflow: hidden;
	border-radius: var(--rd-radius-karte-gross);
	padding: calc(58px * var(--rd-zoom)) calc(60px * var(--rd-zoom)) calc(56px * var(--rd-zoom));
	box-shadow: var(--rd-schatten-karte);
	display: flex;
	flex-direction: column;
	align-items: flex-start;
}

/* Der grosse aufgehellte Kreis oben rechts in beiden Karten. */
.rd-karte-blase {
	position: absolute;
	right: calc(-70px * var(--rd-zoom));
	top: calc(-90px * var(--rd-zoom));
	width: calc(300px * var(--rd-zoom));
	height: calc(300px * var(--rd-zoom));
	border-radius: 50%;
	background: rgba(255, 255, 255, .22);
	pointer-events: none;
}

.rd-karte-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(70px * var(--rd-zoom));
	height: calc(70px * var(--rd-zoom));
	/* Die 70 px sind die Probe aufs Exempel: das Assetsdokument nennt fuer
	   diese Form ausdruecklich "70 px hinter den Bereichsicons". */
	border-radius: var(--rd-maske-badge-karte);
	background: var(--rd-weiss);
	color: var(--rd-text);
	font-size: calc(36px * var(--rd-zoom));
	margin-bottom: calc(32px * var(--rd-zoom));
	position: relative;
}

.rd-karte-icon-tuerkis {
	background: var(--rd-tuerkis);
	color: var(--rd-weiss);
}

/* Die Asset-Datei nennt fuer die Karten-Badges drei Varianten; die zweite
   Karte bekommt die zweite (48% 52% 54% 46%), damit die beiden Formen nicht
   wie Kopien wirken (19.09.2026, W8). */
.rd-karte-schueler .rd-karte-icon {
	border-radius: 48% 52% 54% 46%;
}

.rd-karte-label {
	font-family: var(--rd-sans-fett);
	font-size: calc(.9rem * var(--rd-zoom));
	letter-spacing: .14em;
	text-transform: uppercase;
	margin: 0 0 calc(10px * var(--rd-zoom));
	position: relative;
}

.rd-karte-titel {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	font-size: calc(clamp(1.5rem, calc(24.5px + .704vw), 2.375rem) * var(--rd-zoom));
	line-height: 1.21;
	margin: 0 0 calc(16px * var(--rd-zoom));
	position: relative;
}

.rd-karte-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1.05rem, calc(17.55px + .169vw), 1.3rem) * var(--rd-zoom));
	line-height: 1.63;
	margin: 0 0 calc(20px * var(--rd-zoom));
	max-width: 25.5em;
	position: relative;
}

.rd-karte .rd-btn {
	position: relative;
	margin-top: auto;
	font-size: calc(1.15rem * var(--rd-zoom));
	padding: calc(18px * var(--rd-zoom)) calc(30px * var(--rd-zoom));
}

.rd-karte .rd-btn-pfeil {
	font-size: calc(40px * var(--rd-zoom));
}

.rd-karte-eltern {
	background: var(--rd-gelb);
	color: var(--rd-text);
}

.rd-karte-eltern .rd-karte-label {
	color: #6A5518;
}

.rd-karte-eltern .rd-karte-text {
	color: #3D3116;
}

.rd-karte-schueler {
	background: var(--rd-tuerkis-hell);
	color: var(--rd-tuerkis-dunkel);
}

.rd-karte-schueler .rd-karte-blase {
	background: rgba(0, 174, 197, .10);
}

.rd-karte-schueler .rd-karte-label,
.rd-karte-schueler .rd-karte-titel,
.rd-karte-schueler .rd-karte-text {
	color: var(--rd-tuerkis-dunkel);
}


/* ======================================================================
   3. Ueber mich
   ---------------------------------------------------------------------
   Spiegelbild des Heros: dort haengt der Kreis rechts aus dem Container
   heraus, hier die Videoellipse links. Gemessen bei 1920 Breite -
   Ellipse x 98..954, Textspalte x 1007..1660, Container 211..1710.
   ====================================================================== */

.rd-uebermich {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	/* Unten 60 statt der frueher angesetzten 199: gemessen sind vom unteren Rand
	   der Ellipse bis zur Zeile "Mein Ansatz" 167, und die teilen sich dieser
	   Abschnitt und der naechste (107). Die 199 stammten aus der Stelle, an der
	   im Entwurf die Cremeflaeche endet - die liegt aber UNTER dem Beginn des
	   naechsten Abschnitts, weil der Uebergang dort ein Verlauf ist und keine
	   Kante. Wo genau die Grenze liegt, ist damit frei; nur die Summe ist
	   gemessen. */
	padding: calc(146px * var(--rd-zoom)) 0 calc(60px * var(--rd-zoom));
}

/* Der blasse gelbe Kreis rechts hinter dem Text. Gemessen: Durchmesser 420,
   Mittelpunkt bei x=1831, also 121 ueber die Seitenkante hinaus; Oberkante 155
   unter dem Abschnittsanfang. Anders als die Hero-Blobs eine VOLLE Farbe statt
   eines Deckwerts: hier liegt nur Creme dahinter, und der gemessene Ton
   #FFF9E1 laesst sich mit keinem einzelnen Alpha auf das Gelb der Palette
   zurueckfuehren - Gruen- und Blaukanal fordern verschiedene Werte.

   Zur Lage: der Wert ist von der FENSTERKANTE aus gemessen, wie bei den beiden
   Hero-Blobs auch. Bei --rd-zoom kleiner 1 sitzt der Kreis damit rund 67px
   weiter rechts als im Entwurf, denn die Verkleinerung geschieht um die
   Seitenmitte, waehrend dieser Wert am Rand haengt. Das ist Absicht und die
   kleinere von zwei Unschoenheiten: rechnete man es auf die Mitte um, stimmte
   der Kreis bei .93 - aber die Zusicherung am Dateiende, dass --rd-zoom: 1 den
   Entwurf Pixel fuer Pixel wiederherstellt, waere fuer ihn nicht mehr wahr.
   Bei einem blassen Schmuckkreis ist die Lage das kleinere Gut. */
.rd-blob-creme {
	right: calc(-121px * var(--rd-zoom));
	top: calc(155px * var(--rd-zoom));
	width: calc(420px * var(--rd-zoom));
	height: calc(420px * var(--rd-zoom));
	background: #FFF9E1;
}

.rd-uebermich-inner {
	/* Hebt den Inhalt ueber den Blob. Ohne das laege der absolut gesetzte Kreis
	   VOR dem Text - dieselbe Zeile steht aus demselben Grund am Hero. */
	position: relative;
	z-index: 1;
	display: grid;
	/* 743 + 53 + 703 = 1499, also genau die Containerbreite. Was die Ellipse
	   darueber hinaus nach links braucht, holt sie sich per Aussenabstand. */
	grid-template-columns: minmax(0, 743fr) minmax(0, 703fr);
	gap: calc(53px * var(--rd-zoom));
	align-items: center;
}

.rd-uebermich-bild {
	position: relative;
	margin: 0;
	/* Solange links neben dem Container Platz ist, darf die Ellipse ihn nutzen;
	   wird es eng, zieht sich der Wert von selbst auf 0 zurueck. Spiegelbild
	   von .rd-hero-bild.
	   
	   HIER SITZT DIE GROESSE DER ELLIPSE. Die Rasterspalte gibt 743 vor, die
	   beiden Aussenabstaende rechnen darauf: 743 + 70 - 43 = 770, also 90
	   Prozent der im Entwurf gemessenen 856 (Kevin am 14.08.2026, "einen Ticken
	   kleiner"). Die Hoehe folgt von allein, sie haengt am aspect-ratio.

	   Warum auf BEIDEN Seiten und nicht nur links: zoege man die 86 allein
	   links ab, ruecke die Ellipse von der Fensterkante weg und es entstuende
	   eine leere Bahn, wo der Entwurf sie angeschnitten zeigt. Zoege man sie
	   allein rechts ab, wuechse der Abstand zur Textspalte von 53 auf 139. So
	   verteilt bleibt der Mittelpunkt stehen, wo er im Entwurf steht: die
	   Ellipse laeuft von 141 bis 911 statt von 98 bis 954. */
	margin-left: clamp(calc(-70px * var(--rd-zoom)), calc((var(--rd-container) - 100vw) / 2), 0px);
	margin-right: calc(43px * var(--rd-zoom));
}

/* Der Ring ist ein BORDER, kein Innenabstand - aus demselben Grund wie beim
   Hero: `overflow: hidden` schneidet am Polsterrand ab, also innerhalb des
   Rahmens, und genau dort soll das Video enden. Die Ellipse ist im Entwurf
   NICHT rund: 856 breit, 954 hoch. */
/* DIESELBE MASKE WIE DAS HERO-PORTRAIT: das Assetsdokument nennt sie
   ausdruecklich "Video- und Portraitmaske - Bild und Overlay des
   Videoblocks, Ueber-mich-Portrait". Hier stand bis zum 04.09.2026 ein
   exakter Kreis.

   Der blasse Ring BLEIBT ein Rahmen, anders als beim Hero: das Assetsdokument
   fuehrt fuer den Videoblock keine eigene Flaeche dahinter, und die Farbe ist
   aus dem Entwurf abgegriffen (--rd-tuerkis-ring). Mit der organischen Maske
   ist er jetzt ungleichmaessig breit, wie im Entwurf. */
.rd-video-ring {
	position: relative;
	aspect-ratio: 856 / 954;
	border-radius: var(--rd-maske-portrait);
	overflow: hidden;
	border: calc(37px * var(--rd-zoom)) solid var(--rd-tuerkis-ring);
	/* Faerbt die Flaeche, solange der Browser das erste Videobild noch nicht
	   hat. Ohne das waere dort kurz Schwarz, und das saehe nach Fehler aus. */
	background: var(--rd-tuerkis-hell);
}

.rd-video {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.rd-play {
	position: absolute;
	left: 50%;
	top: 50%;
	transform: translate(-50%, -50%);
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(100px * var(--rd-zoom));
	height: calc(100px * var(--rd-zoom));
	border: 0;
	border-radius: 50%;
	background: var(--rd-weiss);
	color: var(--rd-tuerkis);
	cursor: pointer;
	box-shadow: 0 10px 30px rgba(0, 60, 70, .22);
	transition: transform .15s ease, background-color .15s ease;
}

.rd-play:hover {
	transform: translate(-50%, -50%) scale(1.06);
}

.rd-play:focus-visible {
	outline: 3px solid var(--rd-tuerkis-dunkel);
	outline-offset: 4px;
}

.rd-play .material-symbols-outlined {
	font-size: calc(52px * var(--rd-zoom));
	font-variation-settings: 'FILL' 1;
	/* Ein Dreieck wirkt mittig erst, wenn es etwas rechts steht. */
	margin-left: calc(5px * var(--rd-zoom));
}

/* Ist das Video am Laufen, verschwindet der Knopf und die Steuerleiste des
   Browsers uebernimmt. */
.rd-video-ring.rd-laeuft .rd-play {
	display: none;
}

.rd-insta {
	position: absolute;
	/* In Prozent der Ellipse, damit die Pille beim Schrumpfen mitwandert:
	   im Entwurf 151 von 856 rechts und 82 von 954 unten. */
	right: 17.6%;
	bottom: 8.6%;
	display: flex;
	align-items: center;
	gap: calc(17px * var(--rd-zoom));
	background: var(--rd-weiss);
	border-radius: 999px;
	padding: calc(11px * var(--rd-zoom)) calc(38px * var(--rd-zoom)) calc(11px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	box-shadow: 0 12px 30px rgba(60, 45, 0, .16);
	white-space: nowrap;
	transition: transform .15s ease;
}

.rd-insta:hover {
	transform: translateY(-2px);
}

.rd-insta img {
	width: calc(50px * var(--rd-zoom));
	height: calc(50px * var(--rd-zoom));
	flex: none;
}

.rd-insta-text {
	display: flex;
	flex-direction: column;
	line-height: 1.25;
}

.rd-insta-text strong {
	font-size: calc(1.32rem * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-insta-text small {
	font-family: var(--rd-sans-leicht);
	font-size: calc(.97rem * var(--rd-zoom));
	color: var(--rd-text-grau);
}

/* ------------------------------------------------ Ueber mich: Textspalte */

/* Die kleine tuerkise Zeile ueber der Ueberschrift. Anders als .rd-eyebrow im
   Hero ohne Pille - der Entwurf setzt sie ab Abschnitt 3 als blossen Text. */
/* Der Textkasten ist im Entwurf 653 breit und beginnt bei x=1007 - er reicht
   also NICHT bis zur Containerkante (1710), sondern laesst rund 50px stehen.
   Ohne diese Schranke bekaeme der Absatz die vollen 703 der Rasterspalte und
   braeche eine Zeile frueher um als im Entwurf. */
.rd-uebermich-text {
	max-width: calc(653px * var(--rd-zoom));
}

.rd-abschnitt-label {
	font-family: var(--rd-sans-fett);
	font-size: calc(clamp(1.2rem, calc(19.27px + .098vw), 1.32rem) * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
	margin: 0 0 calc(12px * var(--rd-zoom));
}

.rd-uebermich-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	/* Durch BEIDE Messpunkte gelegt: 37,1px bei 500 Fensterbreite (Mobilentwurf)
	   und 60,5px bei 1920 (Desktopentwurf). 28,9 + 1,648vw trifft beide. */
	font-size: calc(clamp(2rem, calc(28.9px + 1.65vw), 3.78rem) * var(--rd-zoom));
	line-height: 1.15;
	color: var(--rd-text);
	margin: 0 0 calc(29px * var(--rd-zoom));
}

.rd-wort-gelb {
	color: var(--rd-gelb);
}

.rd-uebermich-fliess {
	font-family: var(--rd-sans-leicht);
	/* Eigene Kurve, nicht die des Leads aus Abschnitt 2: der Mobilentwurf setzt
	   diesen Absatz mit 20,8px deutlich groesser, als jene Kurve dort liefert
	   (18,0). Beide Messpunkte: 20,8 bei 500 und 24,0 bei 1920. */
	font-size: calc(clamp(1.25rem, calc(19.67px + .2254vw), 1.5rem) * var(--rd-zoom));
	line-height: 1.65;
	color: var(--rd-text-grau);
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-merkmale {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	/* Aus dem Entwurf zurueckgerechnet: Spaltenabstand 341, Blockbreite 653,
	   also 2*Spalte + Zwischenraum = 653 und Spalte + Zwischenraum = 341 -> 29.
	   Zeilenabstand 45 minus Scheibenhoehe 28 -> 17. */
	column-gap: calc(29px * var(--rd-zoom));
	row-gap: calc(17px * var(--rd-zoom));
	list-style: none;
	margin: calc(24px * var(--rd-zoom)) 0 0;
	padding: 0;
}

.rd-merkmale li {
	display: flex;
	align-items: center;
	gap: calc(15px * var(--rd-zoom));
	font-family: var(--rd-sans-fett);
	font-size: calc(1.16rem * var(--rd-zoom));
	/* Die Zeilenhoehe muss unter die Scheibenhoehe: sonst bestimmt der TEXT die
	   Zeilenhoehe des Rasters und der gemessene Zeilenabstand von 45 wird zu 47. */
	line-height: 1.2;
	color: var(--rd-text);
}

.rd-merkmale .material-symbols-outlined {
	flex: none;
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(28px * var(--rd-zoom));
	height: calc(28px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-gelb);
	color: var(--rd-weiss);
	font-size: calc(18px * var(--rd-zoom));
	font-variation-settings: 'wght' 600;
}

.rd-signatur-name {
	font-family: var(--rd-schreibschrift);
	font-size: calc(2.35rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: calc(46px * var(--rd-zoom)) 0 calc(6px * var(--rd-zoom));
}

/* Kevins Vorspannzeile ueber der Einleitung (10.09.2026). Sie ist KEINE
   zweite Ueberschrift -- die H1 daneben sagt "Hallo, ich bin Bettina." --,
   sondern der betonte erste Satz des Textes. Deshalb ein <p> mit eigenem
   Gewicht und nicht <h2>: eine zweite Ueberschrift im selben Block
   verschoebe die Gliederung der Seite fuer Screenreader und Suchmaschinen. */
.rd-hallo-vorspann {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.32rem * var(--rd-zoom));
	line-height: 1.45;
	color: var(--rd-text);
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-signatur-rolle {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.18rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	margin: 0;
}

/* ======================================================================
   4. Mein Ansatz - in vier Schritten
   ---------------------------------------------------------------------
   Gemessen bei 1920: Spaltenmitten 477 / 799 / 1121 / 1442, also Abstand
   321,7 und ein 1287 breiter, mittig stehender Block. Scheiben 96 gross,
   Oberkante 3902. Der Hintergrund geht von Creme auf das Hellgelb des
   naechsten Abschnitts ueber - ein Verlauf, keine Welle.
   ====================================================================== */

.rd-ansatz {
	position: relative;
	background: linear-gradient(180deg, var(--rd-creme) 0%, var(--rd-gelb-hell) 100%);
	padding: calc(98px * var(--rd-zoom)) 0 calc(110px * var(--rd-zoom));
}

.rd-mittig {
	text-align: center;
}

.rd-schritte {
	position: relative;
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	max-width: calc(1287px * var(--rd-zoom));
	margin: calc(88px * var(--rd-zoom)) auto 0;
	padding: 0;
	list-style: none;
}

/* DIE PUNKTLINIE (zurueck seit dem 19.09.2026, Kevin: "diese Punkte in der
   Desktop-Ansicht dahinter wieder einsetzen"; vom 14.08. bis 19.09.
   stillgelegt). Sie liegt HINTER den Scheiben. Ihre Hoehe ergibt sich aus der
   Breite (viewBox 1000x80), deshalb sitzt die Mitte per translateY auf der
   Scheibenmitte; ein fester Wert waere bei jeder anderen Breite daneben.
   Pfad und Strichbild aus der Asset-Datei ("Journey-Punktlinie, vier
   Schritte": viewBox 1000x100, Staerke 4, Punkt 1, Luecke 12, runde Enden,
   Gelb). Das SVG steht in default.html; beides gehoert zusammen. */
.rd-schritte-linie {
	position: absolute;
	left: 0;
	right: 0;
	top: calc(48px * var(--rd-zoom));
	transform: translateY(-50%);
	width: 100%;
	height: auto;
	z-index: 0;
	pointer-events: none;
}

.rd-schritte-linie path {
	fill: none;
	stroke: var(--rd-gelb);
	stroke-width: 4;
	stroke-linecap: round;
	stroke-dasharray: 1 12;
}

.rd-schritt {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
}

.rd-schritt-scheibe {
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(96px * var(--rd-zoom));
	height: calc(96px * var(--rd-zoom));
	/* Das Assetsdokument nennt fuer die Journey-Badges 78 px; hier stehen 96.
	   Die GROESSE ist eine Entscheidung dieser Seite und bleibt, die FORM
	   kommt aus dem Entwurf - das ist der Unterschied, den ein exakter Kreis
	   verwischt hat. */
	border-radius: var(--rd-maske-badge-journey);
	/* Deckende Fuellung, damit die Punktlinie dahinter verschwindet. */
	background: var(--rd-weiss);
	/* Rand und Schatten wie in der Asset-Datei ("Organic-Badge, Journey":
	   2px #fbb900, 0 12px 28px rgba(251,185,0,.22)) - im Screendesign ist der
	   Rand duenn und der Schatten faellt weich nach unten, kein Schein
	   ringsum (19.09.2026, W8). */
	border: 2px solid #fbb900;
	color: var(--rd-text);
	box-shadow: 0 12px 28px rgba(251, 185, 0, .22);
}

/* "je Schritt leicht variiert" (Asset-Datei): vier Formen fuer vier Schritte,
   in der Reihenfolge der Datei. Ueber die Stellung im Elternelement, damit
   die Startseite, die Landingpage und die Zeitleiste auf "Ueber mich" ohne
   eigene Klassen dieselben Formen bekommen; ab dem fuenften Schritt beginnt
   die Reihe von vorn. */
.rd-schritt:nth-child(4n+2) .rd-schritt-scheibe,
.rd-station:nth-child(4n+2) .rd-schritt-scheibe {
	border-radius: 50% 50% 42% 58%;
}

.rd-schritt:nth-child(4n+3) .rd-schritt-scheibe,
.rd-station:nth-child(4n+3) .rd-schritt-scheibe {
	border-radius: 42% 58% 50% 50%;
}

.rd-schritt:nth-child(4n+4) .rd-schritt-scheibe,
.rd-station:nth-child(4n+4) .rd-schritt-scheibe {
	border-radius: 50% 50% 58% 42%;
}

.rd-schritt-scheibe .material-symbols-outlined {
	font-size: calc(44px * var(--rd-zoom));
	font-variation-settings: 'wght' 350;
}

/* DIE VIER JOURNEY-SYMBOLE aus der Asset-Datei (19.09.2026, "schoener
   wohnen"): Standortbestimmung, Ziele erarbeiten, Grundlagen schaffen, Wissen
   behalten - aus dem Sprite svg/rd-icons.svg statt Material Symbols. Die
   Groesse ist die der Symbole vorher (44 px); die Striche nehmen die
   Textfarbe der Scheibe (currentColor), das Gelb steht im Symbol. */
.rd-schritt-symbol {
	width: calc(46px * var(--rd-zoom));
	height: calc(46px * var(--rd-zoom));
	display: block;
	color: var(--rd-text);
}

/* Die letzte Scheibe ist im Entwurf gefuellt statt umrandet - sie ist das Ziel. */
.rd-schritt-scheibe-voll {
	background: var(--rd-gelb);
	border-color: var(--rd-gelb);
}

.rd-schritt-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(1.55rem * var(--rd-zoom));
	line-height: 1.25;
	color: var(--rd-text);
	margin: calc(29px * var(--rd-zoom)) 0 0;
}

.rd-schritt-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.18rem * var(--rd-zoom));
	line-height: 1.64;
	color: var(--rd-text-grau);
	max-width: calc(255px * var(--rd-zoom));
	margin: calc(15px * var(--rd-zoom)) 0 0;
}

/* Nur fuer die gestapelte Darstellung. Auf dem Desktop uebernimmt die
   gepunktete Welle diese Aufgabe. Seit dem 19.09.2026 ein SVG aus der
   Asset-Datei ("Schrittpfeil, Bogen rechts/links") statt eines
   Material-Pfeils. */
.rd-schritt-pfeil {
	display: none;
}

.rd-ansatz-aktion {
	display: flex;
	justify-content: center;
	margin-top: calc(71px * var(--rd-zoom));
}

/* ======================================================================
   5. Sofort loslegen, kostenlos
   ---------------------------------------------------------------------
   Gemessen bei 1920: Marke 154x42 mittig, Karten 440 breit mit 41
   Zwischenraum, Block 260..1659 also 1400 und mittig. Karten sind
   verschieden hoch - im Entwurf endet jede an ihrem eigenen Inhalt,
   deshalb `align-items: start` statt der sonst ueblichen Dehnung.

   ZWEI ABWEICHUNGEN VOM ENTWURF, beide von Kevin am 14.08.2026:
   die Marke ist gelb statt rot, und die Karten tragen oben KEINEN
   farbigen Streifen mehr - Etikett, Aktionsflaeche und Scheibe reichen
   als Traeger der Akzentfarbe.
   ====================================================================== */

.rd-gratis {
	position: relative;
	/* Farbe der Welle nach unten: der Ton des naechsten Abschnitts. */
	--rd-wellenfarbe: var(--rd-creme);
	/* Notwendig, seit hier eine Welle haengt - dieselbe Begruendung wie bei
	   .rd-angebote: die Welle ist 130% breit, und ohne Beschnitt entstuende
	   waagerechter Ueberlauf. */
	overflow: hidden;
	background: var(--rd-gelb-hell);
	padding: calc(98px * var(--rd-zoom)) 0 calc(188px * var(--rd-zoom));
}


/* Im Entwurf rot mit weisser Schrift. Gelb traegt weisse Schrift nicht - der
   Kontrast reicht nicht -, deshalb dunkle Schrift auf Gelb, genau wie bei den
   gelben Knoepfen der Seite. */
.rd-marke {
	display: block;
	width: fit-content;
	margin: 0 auto calc(19px * var(--rd-zoom));
	padding: calc(13px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	border-radius: 999px;
	background: var(--rd-gelb);
	color: var(--rd-text);
	font-family: var(--rd-sans-fett);
	font-size: calc(1rem * var(--rd-zoom));
	letter-spacing: .06em;
	line-height: 1;
	text-transform: uppercase;
}

.rd-freebies {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: calc(41px * var(--rd-zoom));
	align-items: start;
	max-width: calc(1400px * var(--rd-zoom));
	margin: calc(68px * var(--rd-zoom)) auto 0;
	padding: 0;
	list-style: none;
}

/* Jede Karte setzt nur ihre drei Toene; alle Regeln darunter lesen sie. So
   steht die Farblogik an einer Stelle statt in einem Dutzend Ausnahmen. */
.rd-freebie-gelb {
	--akzent: var(--rd-gelb);
	--akzent-flaeche: #FFF9EA;
	--akzent-schrift: var(--rd-braun);
	--akzent-auf-scheibe: var(--rd-braun);
}

.rd-freebie-tuerkis {
	--akzent: var(--rd-tuerkis);
	--akzent-flaeche: #EAF8FB;
	--akzent-schrift: var(--rd-tuerkis-dunkel);
	--akzent-auf-scheibe: var(--rd-weiss);
}

.rd-freebie-braun {
	--akzent: var(--rd-braun);
	--akzent-flaeche: #F6F3EA;
	--akzent-schrift: var(--rd-braun);
	--akzent-auf-scheibe: var(--rd-weiss);
}

.rd-freebie {
	display: flex;
	flex-direction: column;
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	padding: calc(44px * var(--rd-zoom)) calc(46px * var(--rd-zoom)) calc(72px * var(--rd-zoom));
}

.rd-freebie-label {
	font-family: var(--rd-sans-fett);
	font-size: calc(.9rem * var(--rd-zoom));
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--akzent-schrift);
	margin: 0 0 calc(14px * var(--rd-zoom));
}

.rd-freebie-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(1.86rem * var(--rd-zoom));
	line-height: 1.22;
	color: var(--rd-text);
	margin: 0 0 calc(19px * var(--rd-zoom));
}

.rd-freebie-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.25rem * var(--rd-zoom));
	line-height: 1.55;
	color: var(--rd-text-grau);
	margin: 0 0 calc(30px * var(--rd-zoom));
}

/* Sitzt unten, auch wenn der Text darueber kuerzer ist als in der
   Nachbarkarte - innerhalb der eigenen Karte, nicht ueber alle hinweg. */
.rd-freebie-aktion {
	display: flex;
	align-items: center;
	gap: calc(20px * var(--rd-zoom));
	margin-top: auto;
	padding: calc(16px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	border-radius: calc(18px * var(--rd-zoom));
	background: var(--akzent-flaeche);
	transition: transform .15s ease;
}

.rd-freebie-aktion:hover {
	transform: translateY(-2px);
}

/* Auf mein-angebot.html zeichnet script.js dieselbe Kachel aus der Datenbank,
   und ihre Aktion oeffnet ein Formular statt einer Seite: ein <button>, der
   aussieht wie der Verweis der Startseite. */
button.rd-freebie-aktion {
	width: 100%;
	border: 0;
	font: inherit;
	text-align: left;
	cursor: pointer;
	color: inherit;
}

.rd-freebie-aktion:focus-visible {
	outline: 3px solid var(--akzent-schrift);
	outline-offset: 3px;
}

.rd-freebie-scheibe {
	flex: none;
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(57px * var(--rd-zoom));
	height: calc(57px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--akzent);
	color: var(--akzent-auf-scheibe);
	font-size: calc(28px * var(--rd-zoom));
}

.rd-freebie-worte {
	display: flex;
	flex-direction: column;
	gap: calc(4px * var(--rd-zoom));
	min-width: 0;
}

.rd-freebie-worte strong {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.22rem * var(--rd-zoom));
	line-height: 1.2;
	color: var(--akzent-schrift);
}

.rd-freebie-worte small {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.01rem * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text-grau);
}

/* ======================================================================
   6. Das sagen Eltern und Schueler
   ---------------------------------------------------------------------
   Hier steht das GROSSE Elfsight-Widget (Google Reviews, 719ad666-...),
   dasselbe, das start.html und default.html schon tragen. Der Entwurf
   zeichnet an dieser Stelle drei erfundene Stimmen ("Familie K.",
   "Sabine R.", "Jonas, 15"); echte Bewertungen sind besser als erfundene,
   deshalb steht hier das Widget und nicht der Entwurfstext.

   Warum die Anpassung HIER steht und nicht in Elfsights Panel: das Widget
   rendert in DASSELBE Dokument - kein iframe, kein Shadow-DOM. Diese Datei
   erreicht seine Klassen also, und die Anpassung ist damit versioniert,
   wird mitdeployt und ist testbar. Im Panel laege sie ausserhalb des Repos
   und waere bei der naechsten Aenderung spurlos weg.

   Angefasst werden NUR die stabilen es-*-Klassen. Elfsight erzeugt daneben
   styled-components-Namen (BadgeContainer__Inner-sc-effaa9da-1), die sich
   bei jedem Update aendern; ein Test verbietet sie in dieser Datei.

   Jede Regel haengt an .rd-stimmen. Dasselbe Widget steht auf start.html
   und default.html - die laden diese Datei heute nicht, werden es aber,
   sobald default.html zu default.html wird. Ohne den Vorsatz wuerde die
   Anpassung dort mitgreifen, wo sie niemand bestellt hat.

   ZWEI SACHEN KANN CSS HIER NICHT, beide sind Schalter im Elfsight-Panel:

   * Die fuenf Sterne je Karte. Im Layout "classic" rendert das Widget in
     der Karte GAR KEIN Bewertungselement - gemessen am Baum, nicht
     vermutet. Sterne per ::before dazuzumalen waere eine Behauptung ueber
     eine Bewertung, die diese Datei nie gelesen hat; bei einer Karte mit
     vier Sternen stuende dann eine Luege auf der Seite.
   * Die Spaltenzahl. Elfsight rechnet sie selbst aus der Breite aus. Den
     Rahmen enger zu machen, damit drei statt vier Karten passen, macht die
     Karten schmaler statt breiter - der falsche Hebel.
   ====================================================================== */

.rd-stimmen {
	position: relative;
	/* Farbe der Welle nach unten: der Ton des naechsten Abschnitts. */
	--rd-wellenfarbe: var(--rd-gelb);
	/* Wie bei den Nachbarn: hier haengt spaeter die Welle zum naechsten
	   Abschnitt, und die ist breiter als der Bildschirm. */
	overflow: hidden;
	background: var(--rd-creme);
	/* Gemessen bei 1920: Wellenkante um y 5410, "Stimmen" ab 5566, Titel
	   5608..5662, Karten 5749..6143, Punkte bis 6200. */
	padding: calc(150px * var(--rd-zoom)) 0 calc(130px * var(--rd-zoom));
}

.rd-stimmen-live {
	max-width: calc(1400px * var(--rd-zoom));
	margin: calc(87px * var(--rd-zoom)) auto 0;
}

/* Der Rueckfall. Anders als bei der Pille im Hero wird hier NICHTS
   nachgebaut: drei erfundene Stimmen waeren eine Behauptung, und die echten
   Bewertungstexte in die Seite zu kopieren macht sie zu totem Text, der
   veraltet. Bleibt der Verweis - er stimmt immer, auch ohne Zahl. */
.rd-stimmen-fest {
	text-align: center;
	margin: calc(40px * var(--rd-zoom)) 0 0;
}

.rd-stimmen-fest[hidden] {
	display: none;
}

.rd-stimmen-fest a {
	font-family: var(--rd-sans);
	font-size: calc(1.15rem * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
}

/* ------------------------------------------------- Elfsight in der Huelle */

/* ALLE Regeln darunter haengen an .rd-stimmen-live, der HUELLE - nicht am
   Abschnitt .rd-stimmen. Bis zum 15.08.2026 taten sie es doch, und das war
   dieselbe Bauform wie die frueher aufgezaehlte Wellenliste: eine dritte
   Seite (mein-angebot.html) traegt das grosse Widget in einem anders
   heissenden Abschnitt, und 23 Regeln haetten dort stillschweigend nicht
   gegriffen. Am teuersten waere die Zeile fuer den Textkuerzer gewesen -
   ohne sie klappt "Mehr lesen" im Sekundentakt auf und zu, siehe unten.
   Die Huelle dagegen MUSS es geben: ohne sie findet das Rueckfallskript
   seinen Container nicht, und tests/test_redesign_startseite.php fordert
   sie fuer jede Seite mit diesem Widget.

   Elfsight bringt Montserrat von aussen mit. Nachladen laesst sich das von
   hier aus nicht verhindern, benutzen schon - und die Seite haelt sonst ihr
   eigenes Versprechen nicht, dass keine fremde Schrift zu sehen ist. Der
   Stern ist dafuer das einzig verlaessliche Mittel: das Widget setzt die
   Schrift auf Dutzenden Einzelknoten. */
.rd-stimmen-live .es-embed-root,
.rd-stimmen-live .es-embed-root * {
	font-family: var(--rd-sans-leicht) !important;
}

/* Das Widget bringt eine eigene Ueberschrift mit ("Was Schueler und Eltern
   sagen:"). Der Abschnitt hat seine eigene, und zwei waeren eine zu viel. */
.rd-stimmen-live .es-widget-title-container {
	display: none !important;
}

/* Die Kopfleiste traegt 5,0, die Zahl der Bewertungen, das Google-Logo und
   den Knopf zum Bewerten. Der Entwurf zeigt sie nicht - sie bleibt trotzdem
   stehen, weil sie das einzige ist, worueber jemand selbst eine Bewertung
   schreiben kann. Nur der graue Kasten darum faellt weg. */
.rd-stimmen-live .es-header-container {
	background: none !important;
	border: 0 !important;
	border-radius: 0 !important;
	padding: 0 0 calc(34px * var(--rd-zoom)) !important;
}

.rd-stimmen-live .es-rating-value {
	font-family: var(--rd-sans-fett) !important;
	font-weight: 400 !important;
	font-size: calc(1.5rem * var(--rd-zoom)) !important;
	color: var(--rd-text) !important;
}

/* Dieselbe Begruendung wie an der Pille im Hero: die Sternpfade tragen kein
   fill-Attribut, Elfsights Gold (#FCBF02) sitzt in einer erzeugten Klasse. */
.rd-stimmen-live .es-rating-item-filled svg path,
.rd-stimmen-live .es-rating-stars-item-filled svg path {
	fill: var(--rd-gelb) !important;
	stroke: var(--rd-gelb) !important;
}

.rd-stimmen-live .es-header-text-with-source-text {
	font-size: calc(1.05rem * var(--rd-zoom)) !important;
	color: var(--rd-text-grau) !important;
}

/* Der Knopf im Stil der Seite. Gelb traegt weisse Schrift nicht - dieselbe
   Entscheidung wie bei .rd-marke und den gelben Knoepfen. */
.rd-stimmen-live .es-header-write-review-button {
	background: var(--rd-gelb) !important;
	border-radius: 999px !important;
	box-shadow: none !important;
}

.rd-stimmen-live .es-header-write-review-button .es-button-base-ellipsis {
	font-family: var(--rd-sans-fett) !important;
	font-weight: 400 !important;
	font-size: calc(1rem * var(--rd-zoom)) !important;
	color: var(--rd-text) !important;
}

/* Die Karte. Im Entwurf weiss, 441 breit, Radius wie alle Karten der Seite,
   mit dem gemeinsamen Schatten - Elfsight liefert hellgrau, Radius 8, ohne
   Schatten. Der Innenabstand ist bewusst kleiner als bei den Freebiekarten:
   die Kartenbreite bestimmt hier Elfsight, und 44 wie dort liesse fuer den
   Text zu wenig uebrig. */
.rd-stimmen-live .es-review-background-container {
	position: relative;
	background: var(--rd-weiss) !important;
	border: 0 !important;
	border-radius: var(--rd-radius-karte) !important;
	box-shadow: var(--rd-schatten-karte) !important;
	padding: calc(32px * var(--rd-zoom)) !important;
	/* Der Entwurf stellt den Namen UNTER die Stimme, Elfsight darueber. Die
	   Karte ist ein flex-Kasten mit genau zwei Kindern (Autorenblock,
	   Textblock), also dreht column-reverse die Reihenfolge um, ohne dass
	   irgendetwas verschoben oder doppelt gesetzt wird. Das Anfuehrungs-
	   zeichen unten rechts steht damit neben dem Namen - genau wie im
	   Entwurf. */
	flex-direction: column-reverse !important;
	justify-content: flex-end !important;
}

/* Der Autorenblock trug seinen Abstand unten (margin-bottom 16), weil er oben
   stand. Unten angekommen braucht er ihn oben. */
/* DIE DUNKLEN ECKEN UNTER JEDER KARTE (10.09.2026, Kevin: "die ecke jeder
   review box mit einem dunklen schatten ausgefuellt, das ergaenzt die
   abgerundete ecke zur spitze").

   ZWEI RADIEN, DIE NICHT ZUSAMMENPASSEN. Elfsight rendert die Karte mit
   `reviewCornerRadius: 8` (nachgesehen in der Widgetkonfiguration,
   core.service.elfsight.com/p/boot). Die Regel darueber setzt 28 - unser
   Kartenradius. Der Kasten, in dem die Karte steckt, behaelt aber seine
   acht: er traegt Elfsights eigenen Hintergrund (rgba(248,248,248,1)) und
   schneidet ab. Zwischen der 28er-Rundung innen und der 8er-Kante aussen
   bleibt an jeder unteren Ecke ein Keil stehen, und unser Kartenschatten
   (18px nach unten versetzt, 40px weich) faellt genau dort hinein. Aus der
   Rundung wird optisch wieder eine Spitze.

   DESHALB DER KASTEN UND NICHT DIE KARTE: an der Karte ist alles richtig.
   Angefasst wird der Elternknoten, und zwar ohne seinen Namen zu kennen -
   `:has(> ...)` benennt ihn ueber sein Kind. Elfsight benennt seine
   Wrapper zwischen Versionen um; eine abgeschriebene Klasse waere die
   Regel, die eines Tages still nicht mehr greift.

   `overflow: visible` gehoert dazu und ist nicht kosmetisch: das grosse
   Anfuehrungszeichen weiter unten sitzt mit `bottom: -14px` bewusst ueber
   der Kartenkante. Ein schneidender Elternknoten nimmt es zur Haelfte weg. */
.rd-stimmen-live *:has(> .es-review-background-container) {
	background: transparent !important;
	box-shadow: none !important;
	border: 0 !important;
	border-radius: var(--rd-radius-karte) !important;
	overflow: visible !important;
}

.rd-stimmen-live .es-review-author-block-container {
	margin: calc(22px * var(--rd-zoom)) 0 0 !important;
}

/* Das Profilbild faellt weg. Im Entwurf steht unter der Stimme nur der Name
   mit einer kleinen Zeile darunter, kein Bild. Nebenbei loest das ein
   zweites Problem: die Bilder kommen ueber ein weiteres fremdes Netz
   (phosphor.utils.elfsightcdn.com) und hingen im Test regelmaessig - zu
   sehen war dann ein grauer Kreis. */
.rd-stimmen-live .es-review-author-block-avatar-link,
.rd-stimmen-live .es-review-avatar-container {
	display: none !important;
}

/* Das grosse Anfuehrungszeichen aus dem Entwurf. Reine Zierde, deshalb
   aria-verborgen ueber content: '' - und es liegt HINTER dem Inhalt
   (z-index 0 gegen 1), damit es keine Zeile ueberdeckt, wenn eine
   Bewertung laenger ist als die im Entwurf gezeichnete. */
.rd-stimmen-live .es-review-background-container::after {
	content: '\201D';
	position: absolute;
	right: calc(22px * var(--rd-zoom));
	bottom: calc(-14px * var(--rd-zoom));
	z-index: 0;
	font-family: var(--rd-slab);
	font-size: calc(112px * var(--rd-zoom));
	line-height: 1;
	color: var(--rd-gelb);
	opacity: .28;
	pointer-events: none;
}

.rd-stimmen-live .es-review-background-container > * {
	position: relative;
	z-index: 1;
}

.rd-stimmen-live .es-review-author-name {
	font-family: var(--rd-sans-fett) !important;
	font-weight: 400 !important;
	font-size: calc(1.12rem * var(--rd-zoom)) !important;
	color: var(--rd-text) !important;
}

.rd-stimmen-live .es-review-info-date {
	font-size: calc(.95rem * var(--rd-zoom)) !important;
	color: var(--rd-text-grau) !important;
}

/* HIER STEHT KEIN line-height, UND DAS IST DER GANZE PUNKT.
   ------------------------------------------------------------------
   Am 14.08.2026 klappte "Mehr lesen" im Sekundentakt auf und zu. Kevin
   hat es gesehen, keine Messung. Ursache war diese eine Regel, und zwar
   NUR in der Kombination font-size PLUS line-height:

     font-size + Farbe   -> ruhig   (Kartenhoehen 138, wie ohne alles)
     line-height + Farbe -> ruhig   (149)
     beides zusammen     -> zwei Zustaende im Wechsel, 181/491, 207/336,
                            232/362 ... jede Karte eine andere Zeilenzahl

   Elfsights Textkuerzer rechnet seine Klammerhoehe in JS aus der
   gemessenen Zeilenhoehe und setzt sie als max-height in Pixeln. Wird
   beides zugleich verstellt, widersprechen sich sein gerechneter und der
   wirklich gerenderte Wert, er misst nach, setzt neu, misst nach - eine
   Schleife, die man als Flackern sieht.

   Die Zeilenhoehe gehoert deshalb ihm. Die Schriftgroesse darf bleiben:
   gemessen ueber 1920 / 1150 / 500 jeweils ein Zustand, Kasten 161, das
   sind glatte 7 Zeilen ohne angeschnittene letzte.

   Wer hier wieder ein line-height einsetzt, holt das Flackern zurueck.
   Ein Waechter in tests/test_redesign_startseite.php haelt das fest. */
.rd-stimmen-live .es-text-shortener {
	font-size: calc(1.12rem * var(--rd-zoom)) !important;
	/* SCHWARZ, NICHT GRAU (10.09.2026, Kevin). Hier stand --rd-text-grau
	   (#6E7477). Das ist die Farbe fuer Beiwerk - Datumszeilen, Fussnoten.
	   Die Bewertung IST der Inhalt dieses Abschnitts und traegt jetzt
	   dieselbe Farbe wie jeder andere Fliesstext der Seite. Der Name
	   darunter hat sie ohnehin schon, grau blieb nur die Stimme selbst. */
	color: var(--rd-text) !important;
}

.rd-stimmen-live .es-text-shortener-control {
	font-family: var(--rd-sans) !important;
	color: var(--rd-tuerkis-dunkel) !important;
}

/* Die Pfeile liefert Elfsight als dunkle halbdurchsichtige Scheibe. Weiss
   mit dem Kartenschatten passt zu den Karten, auf denen sie liegen. */
.rd-stimmen-live .es-carousel-arrow-control {
	background: var(--rd-weiss) !important;
	box-shadow: var(--rd-schatten-karte) !important;
	/* Elfsight liefert den Pfeil passend zu seiner dunklen Standardscheibe in
	   Weiss. Nach unserem hellen Hintergrund braucht er eine explizite Farbe;
	   sonst bleibt nur der weisse Kreis sichtbar. */
	color: var(--rd-text) !important;
}

.rd-stimmen-live .es-carousel-arrow-control svg path {
	fill: currentColor !important;
	stroke: currentColor !important;
}

/* Die Punkte sind Swipers "dynamic bullets": ihre Groesse steckt in einem
   transform: scale(), das die Bibliothek bei jedem Wechsel neu rechnet.
   Eine Breitenangabe von hier aus liefe deshalb ins Leere, und der Entwurf
   ("vier Punkte, der zweite laenglich") ist gegen diese Mechanik mit CSS
   nicht zu haben. Was bleibt und stimmt: die Farbe. */
.rd-stimmen-live .es-bullets-control-item {
	background: rgba(27, 27, 27, .22) !important;
}

.rd-stimmen-live .es-bullets-control-item-active {
	background: var(--rd-gelb) !important;
}

/* ======================================================================
   7. Der naechste Schritt
   ---------------------------------------------------------------------
   Gemessen bei 1920: die gelbe Flaeche liegt zwischen den beiden Wellen
   (Kante oben 6334..6389, unten 6985..7045), der Titel steht 6529..6575,
   der Fliesstext vier Zeilen 6625..6763 mit 40 Zeilenabstand, der Knopf
   6818..6893 - also 75 hoch und rund 410 breit, mittig.

   Der Entwurf setzt oben rechts einen weissen Vierstrahl. Der faellt weg,
   wie ueberall auf dieser Seite: Kevin am 14.08.2026, "auf diese
   Sternchen bitte verzichten".

   Der blasse Kreis unten links bleibt. Er ist im Entwurf kaum zu sehen -
   abgegriffen (252,197,39) gegen (253,200,24) daneben, also gut sieben
   Prozent Weiss darueber - und genau so steht er hier.
   ====================================================================== */

.rd-abschluss {
	position: relative;
	overflow: hidden;
	background: var(--rd-gelb);
	/* Farbe der Welle nach unten: der Ton des naechsten Abschnitts. Das ist
	   hier NICHT Creme, sondern Gelb-hell - unter dem gelben Band liegt im
	   Entwurf durchgehend (255,246,228), abgegriffen an vier Stellen. */
	--rd-wellenfarbe: var(--rd-gelb-hell);
	padding: calc(150px * var(--rd-zoom)) 0 calc(152px * var(--rd-zoom));
	text-align: center;
}

/* .14 statt der frueher angesetzten .07, nachgemessen am 15.08.2026, als der
   Weichzeichner den Kreis fast verschwinden liess. Beide Entwuerfe geben
   denselben Wert her: im Startseiten-Entwurf bei y=6800 innen (252,200,45)
   gegen aussen (252,191,10), im Ueber-mich-Entwurf bei y=9000 innen
   (252,198,41) gegen aussen (251,189,6). Aus Blau- und Gruenkanal folgt
   uebereinstimmend a = .14; der Rotkanal taugt hier nicht, er ist beidseits
   fast am Anschlag. */
.rd-blob-abschluss {
	left: calc(-190px * var(--rd-zoom));
	bottom: calc(-210px * var(--rd-zoom));
	width: calc(560px * var(--rd-zoom));
	height: calc(560px * var(--rd-zoom));
	background: rgba(255, 255, 255, .14);
}

/* Eigene Ueberschriftenregel statt .rd-abschnitt-titel: der Titel steht hier
   allein auf der Flaeche, ohne Marke und ohne Lead darueber, und ist im
   Entwurf deutlich groesser als in den Abschnitten davor (Versalhoehe 46
   gegen 38). */
.rd-abschluss-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(2rem, calc(30px + 1.67vw), 4rem) * var(--rd-zoom));
	line-height: 1.18;
	color: var(--rd-text);
	margin: 0 0 calc(30px * var(--rd-zoom));
}

.rd-abschluss-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.25rem * var(--rd-zoom));
	line-height: 1.62;
	/* Der Entwurf bricht nach vier Zeilen um; die Breite ist gemessen, nicht
	   gegriffen - der Text laeuft dort von x 640 bis 1280. */
	max-width: calc(640px * var(--rd-zoom));
	margin: 0 auto calc(55px * var(--rd-zoom));
	color: var(--rd-text);
}

/* ======================================================================
   8. Newsletter und Fusszeile
   ---------------------------------------------------------------------
   Gemessen bei 1920: der Fussbereich liegt auf (255,246,228), also
   --rd-gelb-hell und nicht Creme. Die Newsletterkarte steht x 486..1446
   (960 breit), y 6988..7161 (173 hoch) und ueberlappt die Welle darueber
   um rund 57 - ihre Oberkante liegt hoeher als der tiefste Punkt der
   Wellenkante (6985..7045). Farbverlauf waagerecht, abgegriffen:
   (232,249,251) links nach (191,235,241) rechts.

   Danach: Logozeile 7225..7280, Anschrift 7296..7321, die zwei
   Kontaktpillen 7332..7366 und 7387..7440, Trennlinie 7478 in
   (230,221,200), Schlusszeile 7505..7520.

   Der kleine gelbe Vierstrahl oben rechts in der Karte faellt weg, wie
   ueberall auf dieser Seite (Kevin, 14.08.2026).

   ZWEI ZIELE SIND PLATZHALTER und stehen im Markup mit Begruendung:
   "Newsletter anmelden" zeigt auf die Freebieliste, weil es keine eigene
   Newsleteranmeldung gibt - der Haken dafuer haengt am Downloadformular.
   Und "Cookies" aus dem Entwurf fehlt: die Seite hat keine Cookieseite
   und kein Einwilligungsbanner (nur technisch notwendige Cookies, siehe
   impressum.html "4. Cookies"), und ein Verweis, der dorthin zeigt, wo
   schon "Datenschutz" hinzeigt, ist keiner.
   ====================================================================== */

.rd-fuss {
	background: var(--rd-gelb-hell);
	padding-bottom: calc(32px * var(--rd-zoom));
	color: var(--rd-text-grau);
}

/* --------------------------------------------------- Newsletterkarte */

/* Sie zieht sich in die Welle darueber hinein. z-index, weil die Welle des
   vorigen Abschnitts ein positioniertes ::after ist und sonst obenauf laege. */
.rd-newsletter {
	position: relative;
	z-index: 1;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: calc(40px * var(--rd-zoom));
	max-width: calc(960px * var(--rd-zoom));
	margin: calc(-57px * var(--rd-zoom)) auto 0;
	padding: calc(30px * var(--rd-zoom)) calc(46px * var(--rd-zoom)) calc(30px * var(--rd-zoom)) calc(59px * var(--rd-zoom));
	border-radius: calc(24px * var(--rd-zoom));
	background: linear-gradient(90deg, #E9F9FC 0%, #BFEBF1 100%);
	box-shadow: var(--rd-schatten-karte);
}

.rd-newsletter-marke {
	font-family: var(--rd-sans-fett);
	font-size: calc(.9rem * var(--rd-zoom));
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--rd-tuerkis-dunkel);
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-newsletter-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(1.86rem * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text);
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-newsletter-zeile {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.08rem * var(--rd-zoom));
	line-height: 1.4;
	color: var(--rd-text-grau);
	margin: 0;
}

/* Der Knopf darf nicht schrumpfen, wenn der Text daneben lang wird. */
.rd-newsletter .rd-btn {
	flex: 0 0 auto;
}

/* Eigene Newsletterseite. Das Formular steht absichtlich nicht in der
   Fusskarte: dort ist der Knopf ein kompakter Einstieg, hier ist Platz fuer
   Adresse, Einwilligung, Double-Opt-in-Hinweis und Rückmeldungen. */
.rd-newsletter-seite {
	position: relative;
	overflow: hidden;
	min-height: calc(100vh - 100px);
	display: grid;
	place-items: center;
	padding: calc(120px * var(--rd-zoom)) calc(24px * var(--rd-zoom));
	background: var(--rd-creme);
}

.rd-newsletter-seite .rd-blob { opacity: .55; }

.rd-newsletter-karte {
	position: relative;
	z-index: 1;
	width: min(100%, calc(620px * var(--rd-zoom)));
	padding: calc(54px * var(--rd-zoom));
	border-radius: calc(28px * var(--rd-zoom));
	background: #fff;
	box-shadow: var(--rd-schatten-karte);
}

.rd-newsletter-einleitung,
.rd-newsletter-hinweis {
	font-family: var(--rd-sans-leicht);
	line-height: 1.6;
	color: var(--rd-text-grau);
}

.rd-newsletter-einleitung { margin: 0 auto calc(30px * var(--rd-zoom)); text-align: center; }
.rd-newsletter-hinweis { margin: calc(20px * var(--rd-zoom)) 0 0; font-size: calc(.92rem * var(--rd-zoom)); }

.rd-newsletter-form { display: flex; flex-direction: column; gap: calc(16px * var(--rd-zoom)); }
.rd-newsletter-feld { display: flex; flex-direction: column; gap: calc(7px * var(--rd-zoom)); font-family: var(--rd-sans-fett); color: var(--rd-text); }
.rd-newsletter-feld input { width: 100%; padding: calc(13px * var(--rd-zoom)) calc(15px * var(--rd-zoom)); border: 1px solid #b8b1a3; border-radius: calc(8px * var(--rd-zoom)); font: inherit; }
.rd-newsletter-feld input:focus { outline: 3px solid rgba(0, 174, 197, .28); border-color: var(--rd-tuerkis); }
.rd-newsletter-haken { display: flex; align-items: flex-start; gap: calc(10px * var(--rd-zoom)); font-family: var(--rd-sans-leicht); font-size: calc(.93rem * var(--rd-zoom)); line-height: 1.45; color: var(--rd-text-grau); }
.rd-newsletter-haken input { margin-top: .2em; accent-color: var(--rd-tuerkis); }
.rd-newsletter-meldung { margin: 0; line-height: 1.45; color: var(--rd-text-grau); }
.rd-newsletter-meldung[data-art="gut"] { color: #176c39; }
.rd-newsletter-meldung[data-art="schlecht"] { color: #a32218; }

/* ------------------------------------------------------- Fussraster */

.rd-fuss-raster {
	display: grid;
	grid-template-columns: 1.05fr .75fr 1.6fr;
	gap: calc(40px * var(--rd-zoom));
	padding: calc(64px * var(--rd-zoom)) 0 calc(38px * var(--rd-zoom));
}

.rd-fuss-logo {
	height: calc(55px * var(--rd-zoom));
	width: auto;
	display: block;
	margin-bottom: calc(20px * var(--rd-zoom));
}

.rd-fuss-adresse {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-fuss-kontakt {
	display: flex;
	align-items: center;
	gap: calc(12px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-text);
	margin-bottom: calc(14px * var(--rd-zoom));
}

.rd-fuss-scheibe {
	flex: 0 0 auto;
	display: grid;
	place-items: center;
	width: calc(34px * var(--rd-zoom));
	height: calc(34px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-gelb);
	color: var(--rd-braun);
	font-size: calc(19px * var(--rd-zoom));
}

.rd-fuss-titel {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	font-size: calc(1.15rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-fuss-spalte ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-fuss-spalte li {
	margin-bottom: calc(14px * var(--rd-zoom));
}

.rd-fuss-spalte a {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-fuss-spalte a:hover {
	color: var(--rd-text);
}

.rd-fuss-insta p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	margin: 0 0 calc(22px * var(--rd-zoom));
	max-width: calc(640px * var(--rd-zoom));
}

/* Im Entwurf 207 breit; die Breite ergibt sich hier aus dem Text. */
.rd-insta-knopf {
	display: inline-flex;
	align-items: center;
	gap: calc(12px * var(--rd-zoom));
	padding: calc(11px * var(--rd-zoom)) calc(24px * var(--rd-zoom)) calc(11px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	border-radius: 999px;
	background: var(--rd-gelb);
	color: var(--rd-braun);
	font-family: var(--rd-sans);
	font-size: calc(1.05rem * var(--rd-zoom));
	transition: background-color .15s ease;
}

.rd-insta-knopf:hover {
	background: var(--rd-gelb-dunkel);
}

.rd-insta-zeichen {
	width: calc(24px * var(--rd-zoom));
	height: calc(24px * var(--rd-zoom));
	display: block;
	flex: 0 0 auto;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.9;
}

/* -------------------------------------------------------- Schlusszeile */

.rd-fuss-zeile {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: calc(16px * var(--rd-zoom));
	padding-top: calc(28px * var(--rd-zoom));
	border-top: 1px solid #E6DDC8;
	font-family: var(--rd-sans-leicht);
	font-size: calc(.95rem * var(--rd-zoom));
}

.rd-fuss-zeile p {
	margin: 0;
}

.rd-fuss-recht {
	display: flex;
	flex-wrap: wrap;
	gap: calc(28px * var(--rd-zoom));
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-fuss-recht a {
	color: var(--rd-text-grau);
}

.rd-fuss-recht a:hover {
	color: var(--rd-text);
}

/* ==========================================================================
   ueber-mich.html - die zweite Seite im neuen Design
   --------------------------------------------------------------------------
   Alles darunter gehoert der Ueber-mich-Seite. Sie teilt sich mit der
   Startseite Kopf, Fusszeile, Knoepfe, Wellen, den Bildring und die
   Bewertungspille; was hier steht, sind die Bausteine, die es nur dort gibt.

   Abgegriffen aus Screendesign_UberMich_Vorschau.png (1920x9657). Die
   Abschnittsgrenzen liegen dort bei y 1130 / 2196 / 3700 / 4382 / 5420 /
   6522 / 8458, gemessen an der Hintergrundfarbe in einer Spalte ohne
   Schmuck. Welle oder Kante ist nicht Geschmack, sondern abgelesen: 1130,
   2196, 5420, 6522 und 8458 schwingen, 3700 und 4382 sind gerade.

   Wie ueberall gilt der eine Regler: jede Entwurfszahl steht im Klartext
   und wird EINMAL mit --rd-zoom multipliziert.
   ========================================================================== */

/* Ein schmalerer Textblock fuer die mittigen Abschnitte. Das Mass kommt von
   breitesten Zeile, die darin steht: "Darum bin ich Lehrerin geworden" misst
   im Entwurf 877. Mit den 24px Innenabstand des Containers auf jeder Seite
   macht das 925 Aussenmass, aufgerundet 930.

   Die Zitatkarte darin bekommt ihr EIGENES Mass (874, gemessen bei y 1700) -
   ohne das waere sie mitgewachsen, sobald hier jemand eine Zeile aendert. */
.rd-schmal {
	max-width: calc(930px * var(--rd-zoom));
}

/* Der Fliesstext dieser Seite. Masse und Farbe wie .rd-abschnitt-lead, und
   das ist nachgemessen und nicht bequem: im Entwurf betraegt der
   Zeilenabstand dieser Absaetze 39 Pixel (Zeilenoberkanten 1455 / 1494 /
   1533), und genau das gibt die Formel des Leads bei 1920 her - 24px mal
   1,62. Eigene Zahlen daneben waeren zwei Wahrheiten fuer dieselbe Sache. */
.rd-fliess {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1rem, calc(15.9px + .423vw), 1.5rem) * var(--rd-zoom));
	line-height: 1.62;
	color: var(--rd-text-grau);
	margin: 0 0 calc(26px * var(--rd-zoom));
}

.rd-fliess:last-child {
	margin-bottom: 0;
}

.rd-fliess strong {
	color: var(--rd-text);
}

/* Die gelbe Texthinterlegung. Im Entwurf ist sie an drei Stellen gelb und an
   einer tuerkis, immer zusammen mit der fetten Schnittweite - die Farbe
   allein traegt die Betonung nicht, das waere ein Verlass auf Farbe. `mark`
   bringt in jedem Browser eigene Farben mit, die hier ueberschrieben werden. */
.rd-marker {
	background: #FDECBA;
	color: var(--rd-text);
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
	padding: 0 .12em;
	border-radius: calc(3px * var(--rd-zoom));
}

.rd-marker-tuerkis {
	background: var(--rd-tuerkis-hell);
}

/* Eine weisse Karte mit Schatten. Zweimal auf der Seite: "Woran ich glaube"
   und "Fortbildungen". Der Radius ist derselbe wie bei allen Karten. */
.rd-karte-weiss {
	display: block;
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	padding: calc(38px * var(--rd-zoom)) calc(42px * var(--rd-zoom));
}

.rd-karte-breit {
	margin-top: calc(76px * var(--rd-zoom));
	padding: calc(46px * var(--rd-zoom)) calc(52px * var(--rd-zoom));
}

.rd-karte-weiss-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(1.85rem * var(--rd-zoom));
	line-height: 1.25;
	color: var(--rd-text);
	margin: 0 0 calc(22px * var(--rd-zoom));
}

.rd-karte-weiss-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.2rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: calc(-8px * var(--rd-zoom)) 0 calc(20px * var(--rd-zoom));
}

/* Aufzaehlung mit gelbem Funken statt Punkt. Das Zeichen kommt aus der
   lokalen Symbolschrift und steht in einem ::before - als Listenzeichen
   waere es nicht mittig zur ersten Zeile zu bekommen. */
.rd-funkenliste {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-funkenliste li {
	position: relative;
	padding-left: calc(36px * var(--rd-zoom));
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.2rem * var(--rd-zoom));
	line-height: 1.55;
	color: var(--rd-text-grau);
}

.rd-funkenliste li + li {
	margin-top: calc(16px * var(--rd-zoom));
}

.rd-funkenliste li::before {
	content: 'star';
	font-family: 'Material Symbols Outlined';
	font-variation-settings: 'FILL' 1;
	position: absolute;
	left: 0;
	top: calc(1px * var(--rd-zoom));
	font-size: calc(20px * var(--rd-zoom));
	line-height: 1.55em;
	color: var(--rd-gelb);
}

/* ------------------------------------------- 1. Hallo, ich bin Bettina */

.rd-hallo {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-gelb-hell);
	padding: calc(60px * var(--rd-zoom)) 0 calc(165px * var(--rd-zoom));
	background: var(--rd-creme);
}

/* Gespiegelt zum Hero der Startseite: dort steht das Bild rechts, hier
   links. Die Spaltenbreiten drehen sich damit ebenfalls um. */
.rd-hallo-inner {
	position: relative;
	z-index: 1;
	display: grid;
	/* Gemessen im Entwurf: die Ellipse steht von x 77 bis 826, der Text von
	   850 bis 1709. Der Container reicht von 186 bis 1734, innen also 210 bis
	   1710. Die Bildspalte ist damit 640 breit (210..826 plus 24 Zwischenraum),
	   die Textspalte 859 - und die Ellipse holt sich die fehlenden 133 nach
	   links, dorthin wo neben dem Container noch Platz ist. */
	grid-template-columns: minmax(0, 616fr) minmax(0, 859fr);
	align-items: center;
	gap: calc(clamp(20px, 1.25vw, 24px) * var(--rd-zoom));
}

.rd-hallo-bild {
	position: relative;
	margin: 0;
	justify-self: stretch;
	/* Spiegelbild von .rd-hero-bild: solange LINKS neben dem Container Platz
	   ist, darf der Kreis ihn nutzen; wird es eng, zieht sich der Wert von
	   selbst auf 0 zurueck. */
	margin-left: clamp(calc(-133px * var(--rd-zoom)), calc((var(--rd-container) - 100vw) / 2), 0px);
}

/* Die Pille sitzt im Entwurf rechts unten am Foto, nicht links wie auf der
   Startseite - sie weicht dem Text aus, und der steht hier auf der anderen
   Seite. */
.rd-hallo-bild .rd-bewertung {
	left: auto;
	right: 4%;
	bottom: 6%;
}

/* Kleiner als der Titel der Startseite, und das ist gemessen: im Entwurf
   reicht "Hallo, ich bin Bettina." von y 330 bis zur Grundlinie bei rund
   387 (57 Pixel), "Kennst du" auf der Startseite von 329 bis 389 (61).
   Verhaeltnis 0,93 auf die dortigen 85 Pixel, macht 79. */
.rd-hallo-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(2rem, calc(23.2px + 2.85vw), 4.9rem) * var(--rd-zoom));
	line-height: 1.12;
	color: var(--rd-text);
	margin: 0 0 calc(34px * var(--rd-zoom));
}

/* Der Herotext dieser Seite steht enger als der der Startseite: dort ist der
   Zeilenabstand 41 Pixel, hier 38 (Zeilenoberkanten 441 / 479 / 517). Bei
   Zeilenhoehe 1,72 macht das 22px statt 23,7. Die Breite ist ebenfalls
   gemessen und steht in Pixeln, nicht in em - sie gehoert zur Rasterspalte
   und nicht zur Schriftgroesse. */
.rd-hallo-fliess {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.375rem * var(--rd-zoom));
	line-height: 1.72;
	color: var(--rd-text-grau);
	max-width: calc(860px * var(--rd-zoom));
	margin: 0 0 calc(24px * var(--rd-zoom));
}

.rd-hallo-fliess strong {
	color: var(--rd-text);
}

.rd-hallo-text .rd-signatur-name {
	margin-top: calc(38px * var(--rd-zoom));
}

/* ------------------------------------- 2. Vielleicht kennst du das auch */

.rd-bekannt {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-creme);
	background: var(--rd-gelb-hell);
	padding: calc(110px * var(--rd-zoom)) 0 calc(150px * var(--rd-zoom));
}

/* Die gelbe Zitatkarte. Zweimal auf der Seite, einmal enger und einmal
   weiter - der Unterschied ist nur die Schriftgroesse des Satzes und der
   Innenabstand, deshalb eine Klasse und ein Zusatz. */
.rd-zitat {
	position: relative;
	max-width: calc(874px * var(--rd-zoom));
	background: linear-gradient(160deg, var(--rd-gelb) 0%, var(--rd-gelb-dunkel) 100%);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	margin: calc(56px * var(--rd-zoom)) auto;
	padding: calc(40px * var(--rd-zoom)) calc(56px * var(--rd-zoom)) calc(44px * var(--rd-zoom));
	text-align: center;
}

.rd-zitat-funke {
	position: absolute;
	left: calc(34px * var(--rd-zoom));
	top: calc(24px * var(--rd-zoom));
	font-size: calc(42px * var(--rd-zoom));
	font-variation-settings: 'FILL' 1;
	color: var(--rd-weiss);
}

/* Im Entwurf sitzt der Funke der ZWEITEN Karte rechts oben statt links.
   Zwei Karten, zwei Ecken - der Entwurf setzt ihn dorthin, wo daneben Platz
   ist, und beim zweiten Mal ist das rechts. */
.rd-zitat-gross .rd-zitat-funke {
	left: auto;
	right: calc(34px * var(--rd-zoom));
}

.rd-zitat-vorspann {
	font-family: var(--rd-sans-fett);
	font-size: calc(.95rem * var(--rd-zoom));
	color: #7A6114;
	margin: 0 0 calc(16px * var(--rd-zoom));
}

/* Gemessen: die zwei Zeilen des ersten Zitats beginnen bei y 1710 und 1763,
   also 53 Zeilenabstand. Mit Zeilenhoehe 1,3 macht das 41px. */
.rd-zitat-satz {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(2.56rem * var(--rd-zoom));
	line-height: 1.3;
	color: var(--rd-text);
	margin: 0;
}

/* Die zweite Zitatkarte ist breiter als die erste und breiter als der
   Textblock, in dem sie steht: 1049 gegen 874, gemessen bei y 4900. Die
   Differenz holt sie sich links und rechts zurueck. */
.rd-zitat-gross {
	max-width: calc(1049px * var(--rd-zoom));
	margin-left: calc(-88px * var(--rd-zoom));
	margin-right: calc(-88px * var(--rd-zoom));
	padding: calc(46px * var(--rd-zoom)) calc(64px * var(--rd-zoom)) calc(52px * var(--rd-zoom));
}

.rd-zitat-gross .rd-zitat-satz {
	font-size: calc(2.7rem * var(--rd-zoom));
}

/* ------------------------------------------- 3. Was mir wichtig ist */

.rd-glaube {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	padding: calc(120px * var(--rd-zoom)) 0 calc(130px * var(--rd-zoom));
}

/* Der blasse tuerkise Kreis links hinter dem ersten Punkt. */
.rd-blob-glaube {
	left: calc(-260px * var(--rd-zoom));
	top: calc(310px * var(--rd-zoom));
	width: calc(560px * var(--rd-zoom));
	height: calc(560px * var(--rd-zoom));
	background: rgba(0, 174, 197, .10);
}

.rd-glaube-satz {
	position: relative;
	z-index: 1;
	/* Breit genug fuer zwei Zeilen: der Unterstrich macht aus "wie Lernen
	   funktioniert." ein inline-block, und ein inline-block bricht nicht in
	   sich um - er faellt als Ganzes in die naechste Zeile. Im Entwurf misst
	   die erste Zeile 1106. */
	max-width: calc(1220px * var(--rd-zoom));
	margin: 0 auto;
	text-align: center;
}

/* Der Satz, der NICHT gilt. Im Entwurf blass grau und in derselben Schrift
   wie der Satz darunter - er wird nicht durchgestrichen, sondern
   zurueckgenommen. */
/* Er steht im Entwurf auf gut der Haelfte des Satzes darunter: die
   Versalhoehe des 'I' misst 29 gegen 54 Pixel. */
.rd-glaube-nicht {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.3rem, calc(11px + 1.24vw), 2.3rem) * var(--rd-zoom));
	line-height: 1.35;
	color: #B9B6AE;
	margin: calc(22px * var(--rd-zoom)) 0 0;
}

/* Zwei Haarlinien mit einem gelben Funken dazwischen. Als flex-Zeile mit
   zwei ::-Elementen, damit der Funke immer mittig zwischen ihnen steht,
   gleich wie breit der Abschnitt gerade ist. */
.rd-glaube-trenner {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: calc(22px * var(--rd-zoom));
	margin: calc(34px * var(--rd-zoom)) 0 calc(40px * var(--rd-zoom));
	color: var(--rd-gelb);
}

.rd-glaube-trenner::before,
.rd-glaube-trenner::after {
	content: '';
	width: calc(130px * var(--rd-zoom));
	height: 1px;
	background: #E7DCC2;
}

.rd-glaube-trenner .material-symbols-outlined {
	font-size: calc(34px * var(--rd-zoom));
	font-variation-settings: 'FILL' 1;
}

.rd-glaube-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	/* Gemessen: die zwei Zeilen beginnen bei y 2625 und 2710, also 85
	   Zeilenabstand; bei Zeilenhoehe 1,28 sind das 66px. */
	font-size: calc(clamp(1.8rem, calc(20px + 2.4vw), 4.2rem) * var(--rd-zoom));
	line-height: 1.28;
	color: var(--rd-text);
	margin: 0;
}

/* Gemessen: der Text der Punkte laeuft von x 639 bis 1420, die Scheibe davor
   beginnt bei 520. Macht 900 fuer den ganzen Block. */
.rd-punkte {
	position: relative;
	z-index: 1;
	list-style: none;
	max-width: calc(940px * var(--rd-zoom));
	margin: calc(96px * var(--rd-zoom)) auto 0;
	padding: 0;
}

.rd-punkt {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: calc(34px * var(--rd-zoom));
	align-items: start;
}

.rd-punkt + .rd-punkt {
	margin-top: calc(64px * var(--rd-zoom));
}

.rd-punkt-scheibe {
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(72px * var(--rd-zoom));
	height: calc(72px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-gelb);
	color: var(--rd-text);
	font-size: calc(36px * var(--rd-zoom));
	/* Der weiche Schein darunter, im Entwurf an beiden Scheiben. Er nimmt
	   die Farbe der Scheibe auf, deshalb steht er zweimal da. */
	box-shadow: 0 0 30px rgba(253, 198, 23, .45);
}

.rd-punkt-scheibe-tuerkis {
	background: var(--rd-tuerkis);
	color: var(--rd-weiss);
	font-variation-settings: 'FILL' 1;
	box-shadow: 0 0 30px rgba(0, 174, 197, .35);
}

/* Die Versalhoehe misst im Entwurf 29 Pixel, dieselbe wie beim grauen Satz
   darueber - also auch dieselbe Schriftgroesse. */
.rd-punkt-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(2.46rem * var(--rd-zoom));
	line-height: 1.25;
	color: var(--rd-text);
	margin: calc(6px * var(--rd-zoom)) 0 calc(18px * var(--rd-zoom));
}

/* Zeilenabstand 39 im Entwurf (2983 / 3022 / 3061 / 3100), also dasselbe
   Mass wie .rd-fliess. */
.rd-punkt-text p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1rem, calc(15.9px + .423vw), 1.5rem) * var(--rd-zoom));
	line-height: 1.62;
	color: var(--rd-text-grau);
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-punkt-text p:last-child {
	margin-bottom: 0;
}

/* --------------------------------------- 4. Eine mutige Entscheidung */

/* Gerade Kante nach oben und unten, keine Welle - im Entwurf gemessen bei
   y 3700 und y 4382. */
.rd-mut {
	background: var(--rd-gelb-hell);
	padding: calc(96px * var(--rd-zoom)) 0 calc(104px * var(--rd-zoom));
}

/* Dieser Abschnitt steht im Entwurf enger als der Container: sein Inhalt
   laeuft von x 336 bis 1584, also 1248 statt 1500. Dasselbe Mass wie der
   Schrittblock der Startseite und wie die Karte "Lernen kann man lernen". */
.rd-mut .rd-container {
	max-width: calc(1296px * var(--rd-zoom));
}

.rd-mut-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	/* Dieselbe Formel wie .rd-abschnitt-titel. Der eigene Wert davor stand an
	   seiner Obergrenze und blieb deshalb bei 48 statt 54 stehen; im Entwurf
	   sind die beiden Ueberschriften gleich gross. */
	font-size: calc(clamp(1.7rem, calc(27px + 1.41vw), 3.4rem) * var(--rd-zoom));
	line-height: 1.22;
	color: var(--rd-text);
	/* Der Titel bricht im Entwurf nach zwei Zeilen um; die zweite reicht von
	   x 336 bis 1238. */
	max-width: calc(920px * var(--rd-zoom));
	margin: calc(10px * var(--rd-zoom)) 0 calc(44px * var(--rd-zoom));
}

.rd-mut-spalten {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: calc(clamp(40px, 4vw, 90px) * var(--rd-zoom));
}

/* Zeilenabstand wie .rd-fliess - der eigene Wert davor war der letzte, der
   nicht am Entwurf gemessen war, und er stand sichtbar zu klein da. */
.rd-mut-spalten p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1rem, calc(15.9px + .423vw), 1.5rem) * var(--rd-zoom));
	line-height: 1.62;
	color: var(--rd-text-grau);
	margin: 0 0 calc(22px * var(--rd-zoom));
}

.rd-mut-spalten p:last-child {
	margin-bottom: 0;
}

/* ------------------------------------------- 5. Meine Motivation */

.rd-motivation {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-gelb-hell);
	background: var(--rd-creme);
	padding: calc(110px * var(--rd-zoom)) 0 calc(165px * var(--rd-zoom));
}

/* ------------------------------------------- 6. Bettina ganz privat */

.rd-privat {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-creme);
	background: var(--rd-gelb-hell);
	padding: calc(120px * var(--rd-zoom)) 0 calc(150px * var(--rd-zoom));
}

.rd-blob-privat {
	right: calc(-180px * var(--rd-zoom));
	top: calc(90px * var(--rd-zoom));
	width: calc(520px * var(--rd-zoom));
	height: calc(520px * var(--rd-zoom));
	background: rgba(0, 174, 197, .09);
}

.rd-privat-inner {
	position: relative;
	z-index: 1;
	display: grid;
	/* Gemessen: die Ellipse steht von x 98 bis 814, der Textblock von 883 bis
	   an die rechte Containerkante. Bildspalte also 604 (210..814), Abstand
	   69, Textspalte 827 - und die Ellipse holt sich 112 nach links. */
	grid-template-columns: minmax(0, 604fr) minmax(0, 827fr);
	gap: calc(69px * var(--rd-zoom));
	align-items: center;
}

.rd-privat-bild {
	position: relative;
	margin: 0;
	margin-left: clamp(calc(-112px * var(--rd-zoom)), calc((var(--rd-container) - 100vw) / 2), 0px);
}

/* HIER STAND .rd-ring-leer (15.08. bis 21.09.2026): der Ring OHNE Bild,
   eine gefuellte Ellipse mit dem Zeichen "hiking", solange das Foto fuer
   "Bettina ganz privat" fehlte. Seit Kevins Foto vom 21.09.2026 steht dort
   ein <img>; die Klasse hat keinen Leser mehr und ist entfernt. */

.rd-privat-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	/* Dieselbe Formel wie .rd-abschnitt-titel, Begruendung bei .rd-mut-titel. */
	font-size: calc(clamp(1.7rem, calc(27px + 1.41vw), 3.4rem) * var(--rd-zoom));
	line-height: 1.22;
	color: var(--rd-text);
	margin: calc(10px * var(--rd-zoom)) 0 calc(28px * var(--rd-zoom));
}

.rd-privat-text .rd-karte-weiss {
	margin-top: calc(34px * var(--rd-zoom));
}

/* ------------------------------------------- 7. Lernen kann man lernen */

.rd-lernen {
	background: var(--rd-creme);
	padding: calc(110px * var(--rd-zoom)) 0 calc(40px * var(--rd-zoom));
}

.rd-lernkarte {
	position: relative;
	overflow: hidden;
	/* Gemessen bei y 6900: die Karte steht von x 335 bis 1584. */
	max-width: calc(1249px * var(--rd-zoom));
	margin: 0 auto;
	background: linear-gradient(155deg, var(--rd-gelb) 0%, var(--rd-gelb-dunkel) 100%);
	border-radius: calc(40px * var(--rd-zoom));
	box-shadow: var(--rd-schatten-karte);
	padding: calc(72px * var(--rd-zoom)) calc(80px * var(--rd-zoom)) calc(78px * var(--rd-zoom));
	text-align: center;
}

/* Die zwei aufgehellten Kreise in der Karte, links oben und rechts unten.
   Sie gehoeren zur Karte und nicht zum Hintergrund, tragen also KEIN
   .rd-blob und damit auch keinen Weichzeichner - im Entwurf haben sie eine
   sichtbare Kante. */
.rd-lernkarte-blase {
	position: absolute;
	left: calc(-90px * var(--rd-zoom));
	top: calc(-120px * var(--rd-zoom));
	width: calc(360px * var(--rd-zoom));
	height: calc(360px * var(--rd-zoom));
	border-radius: 50%;
	background: rgba(255, 255, 255, .14);
	pointer-events: none;
}

.rd-lernkarte-blase-rechts {
	left: auto;
	top: auto;
	right: calc(-110px * var(--rd-zoom));
	bottom: calc(-150px * var(--rd-zoom));
	width: calc(400px * var(--rd-zoom));
	height: calc(400px * var(--rd-zoom));
	background: rgba(255, 255, 255, .10);
}

.rd-lernkarte-titel {
	position: relative;
	z-index: 1;
	font-family: var(--rd-slab);
	font-weight: 400;
	/* Gemessen: "Lernen kann man lernen." misst im Entwurf 783 Pixel; der
	   Wert davor stand an seiner Obergrenze und blieb bei 51 statt 63. */
	font-size: calc(clamp(1.9rem, calc(24px + 2.05vw), 4rem) * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text);
	margin: 0 0 calc(26px * var(--rd-zoom));
}

.rd-lernkarte-text {
	position: relative;
	z-index: 1;
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1rem, calc(15.9px + .423vw), 1.5rem) * var(--rd-zoom));
	line-height: 1.62;
	color: #4A3B08;
	max-width: calc(830px * var(--rd-zoom));
	margin: 0 auto calc(22px * var(--rd-zoom));
}

.rd-lernkarte-text:last-of-type {
	margin-bottom: calc(40px * var(--rd-zoom));
}

.rd-lernkarte .rd-btn {
	position: relative;
	z-index: 1;
}

/* --------------------------------------- 8. Stationen meiner Laufbahn */

.rd-werdegang {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-gelb);
	background: linear-gradient(180deg, var(--rd-creme) 0%, var(--rd-gelb-hell) 100%);
	padding: calc(110px * var(--rd-zoom)) 0 calc(160px * var(--rd-zoom));
}

/* Dasselbe Raster wie die vier Schritte auf der Startseite: 1287 breit,
   mittig, vier gleiche Spalten. Die Punktlinie liegt als wiederholter
   Radialverlauf HINTER den Scheiben und wird von deren deckender Fuellung
   ueberdeckt - deshalb sieht man sie nur dazwischen. Ihre senkrechte Lage
   ist die halbe Scheibenhoehe. */
.rd-stationen {
	position: relative;
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	max-width: calc(1287px * var(--rd-zoom));
	margin: calc(78px * var(--rd-zoom)) auto 0;
	padding: 0;
	list-style: none;
}

.rd-stationen::before {
	content: '';
	position: absolute;
	left: 12%;
	right: 12%;
	top: calc(50px * var(--rd-zoom));
	height: calc(7px * var(--rd-zoom));
	transform: translateY(-50%);
	background-image: radial-gradient(circle closest-side, var(--rd-gelb) 96%, transparent 100%);
	background-size: calc(22px * var(--rd-zoom)) calc(7px * var(--rd-zoom));
	background-repeat: repeat-x;
	background-position: center;
}

.rd-station {
	position: relative;
	z-index: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
}

/* Die Scheiben der Zeitleiste sind etwas kleiner als die der vier Schritte
   (100 gegen 96 im Entwurf gemessen, hier 100) und tragen Zahlen statt nur
   Zeichen; alles andere - weisser Grund, gelber Rand, der Schein - kommt
   unveraendert von .rd-schritt-scheibe. */
.rd-station-scheibe {
	flex-direction: column;
	width: calc(100px * var(--rd-zoom));
	height: calc(100px * var(--rd-zoom));
	line-height: 1;
}

.rd-station-scheibe.material-symbols-outlined {
	font-size: calc(42px * var(--rd-zoom));
	font-variation-settings: 'wght' 350;
}

.rd-station-zahl {
	font-family: var(--rd-slab);
	font-size: calc(1.62rem * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-station-einheit {
	font-family: var(--rd-sans-fett);
	font-size: calc(.82rem * var(--rd-zoom));
	color: var(--rd-text);
	margin-top: calc(3px * var(--rd-zoom));
}

.rd-station-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.2rem * var(--rd-zoom));
	line-height: 1.55;
	color: var(--rd-text-grau);
	max-width: calc(260px * var(--rd-zoom));
	margin: calc(26px * var(--rd-zoom)) 0 0;
}

/* ==========================================================================
   Alles darunter gehoert der Seite mein-angebot.html. Sie teilt sich mit
   den beiden anderen Kopf, Fusszeile, Knoepfe, Wellen, Marke, Vorspann-Pille
   und die Bewertungsanzeiger; was hier steht, gibt es nur auf ihr.

   Abgemessen an Screendesign_MeinAngebot_Vorschau (1).png, 1920 breit, 9477
   hoch. Wie ueberall stehen die Entwurfszahlen im Klartext und werden EINMAL
   mit --rd-zoom multipliziert.

   Die Hintergrundfolge des Entwurfs, an der die Wellenfarben haengen:

     Hero + Standortbestimmung   creme     (#FFFDF7)
     Lernbegleitung              gelb-hell (#FFF6E4)   Kante um y 2400
     Kurse & Workshops           creme                 Kante um y 3800
     Downloads                   gelb-hell             Kante um y 5650
     Familien vertrauen mir      creme                 Kante um y 6350
     Haeufige Fragen             gelb-hell             Kante um y 7350
     Der naechste Schritt        gelb                  Kante um y 8250
   ========================================================================== */

/* ------------------------------------------------------------- 1. Hero */

.rd-ang-hero {
	position: relative;
	/* Die beiden Kreise haengen aus dem Abschnitt heraus. */
	overflow: hidden;
	background: var(--rd-creme);
	/* Gemessen: Marke ab y 230, Kopfzeile 122 hoch, also 108 darueber; die
	   Pillen enden bei 845, die naechste Ueberschrift beginnt bei 985. */
	padding: calc(108px * var(--rd-zoom)) 0 calc(104px * var(--rd-zoom));
}

/* DER KNAPPE VORSPANN (10.09.2026, Kevin: "am pc muss man erst runterscrollen
   um das formular zu sehen").

   Die Widerrufsseite traegt denselben Vorspann wie das Angebot, aber ohne
   Fliesstext - nur die Ueberschrift. Mit den 108/104 Pixeln von oben stuende
   ueber dem Formular fast nichts als Luft, und das Formular selbst unter der
   Bildkante. Ein eigener Zusatz statt einer Aenderung an .rd-ang-hero: dort
   ist der Abstand fuer mein-angebot.html gemessen und richtig.

   Die Zahlen sind bewusst grosszuegig geblieben und nicht auf null gedrueckt.
   Der Abschnitt traegt zwei Kreise im Hintergrund, die aus ihm herausragen;
   ohne Hoehe haetten sie keinen Platz und der Vorspann saehe angeschnitten
   aus. */
.rd-ang-hero.rd-hero-knapp {
	padding: calc(52px * var(--rd-zoom)) 0 calc(32px * var(--rd-zoom));
}

/* UNTER DER UEBERSCHRIFT DES KNAPPEN VORSPANNS (14.09.2026, Kevin: "bei
   widerruf und umbuchung ist zu viel platz unter der ueberschrift"). Die 36px
   unter .rd-ang-titel sind der Abstand zum Fliesstext des Angebots; im knappen
   Vorspann folgt keiner. Der Rest der Luft steht unten an .rd-formular. */
.rd-hero-knapp .rd-ang-titel {
	margin-bottom: 0;
}

.rd-ang-hero-inner {
	position: relative;
	z-index: 1;
	text-align: center;
}

/* Gemessen: der blasse gelbe Kreis rechts oben reicht von x 1390 nach rechts
   aus dem Bild, y 60..700. Der tuerkise links von x -230 bis 430, y 530..980.

   Beide setzen ihre Farbe SELBST und erben sie nicht von .rd-blob-gelb /
   .rd-blob-tuerkis. Die beiden stehen auf der Startseite andersherum - der
   gelbe links unten, der tuerkise rechts oben -, und ein Modifikator, der nur
   die Gegenseite setzt, laesst die geerbte stehen: der Kreis landet dann auf
   der falschen Seite, ohne dass etwas fehlschlaegt. Genau so passiert am
   15.08.2026 im ersten Anlauf. */
.rd-blob-ang-gelb {
	width: calc(660px * var(--rd-zoom));
	height: calc(660px * var(--rd-zoom));
	top: calc(40px * var(--rd-zoom));
	right: calc(-170px * var(--rd-zoom));
	background: rgba(253, 198, 23, .17);
}

.rd-blob-ang-tuerkis {
	width: calc(660px * var(--rd-zoom));
	height: calc(660px * var(--rd-zoom));
	top: calc(420px * var(--rd-zoom));
	left: calc(-250px * var(--rd-zoom));
	background: rgba(0, 174, 197, .10);
}

/* Gemessen: Zeile 1 der Ueberschrift 314..383, Zeile 2 394..448 - also 80
   Zeilenabstand bei rund 75px Schriftgroesse. Kleiner als die Ueberschrift der
   Startseite (85), und das ist im Entwurf so gewollt: dort steht ein Dreiwort,
   hier eine ganze Zeile. */
.rd-ang-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(2.1rem, calc(26px + 2.55vw), 4.7rem) * var(--rd-zoom));
	line-height: 1.07;
	color: var(--rd-text);
	margin: 0 0 calc(36px * var(--rd-zoom));
}

.rd-ang-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1.05rem, calc(17.6px + .385vw), 1.56rem) * var(--rd-zoom));
	line-height: 1.72;
	color: var(--rd-text-grau);
	max-width: 42em;
	margin: 0 auto calc(26px * var(--rd-zoom));
}

.rd-ang-lead-fett {
	font-family: var(--rd-sans-fett);
	font-size: calc(clamp(1.05rem, calc(16.8px + .333vw), 1.45rem) * var(--rd-zoom));
	line-height: 1.5;
	color: var(--rd-text);
	max-width: 34em;
	margin: 0 auto calc(44px * var(--rd-zoom));
}

/* Die drei Pillen sind hier VERWEISE, nicht nur Wortmarken wie auf der
   Startseite: sie springen in die drei Abschnitte. Deshalb sitzt der
   Innenabstand am <a> und nicht am <li> - sonst waere nur die Schrift
   anklickbar und nicht die Pille. */
.rd-sprungmarken {
	margin-bottom: 0;
}

.rd-sprungmarken li {
	padding: 0;
	border: 1px solid #E2E0DB;
	box-shadow: var(--rd-schatten-pille);
}

.rd-sprungmarken li a {
	display: flex;
	align-items: center;
	gap: calc(14px * var(--rd-zoom));
	padding: calc(16px * var(--rd-zoom)) calc(30px * var(--rd-zoom));
	color: var(--rd-text);
	font-family: var(--rd-sans);
}

.rd-sprungmarken li a .material-symbols-outlined {
	font-size: calc(26px * var(--rd-zoom));
	color: var(--rd-gelb-dunkel);
}

.rd-sprungmarken li:hover,
.rd-sprungmarken li:focus-within {
	border-color: var(--rd-gelb);
}

/* --------------------------------------------- 2./3. Die Leistungsbloecke */

/* Zwei Abschnitte teilen sich diese Form: Standortbestimmung und laufende
   Lernbegleitung. Verschieden sind nur Hintergrund und Wellenfarbe. */
.rd-leistung {
	position: relative;
	overflow: hidden;
}

.rd-leistung-standort {
	--rd-wellenfarbe: var(--rd-gelb-hell);
	background: var(--rd-creme);
	padding: calc(20px * var(--rd-zoom)) 0 calc(165px * var(--rd-zoom));
}

.rd-leistung-pakete {
	--rd-wellenfarbe: var(--rd-creme);
	background: var(--rd-gelb-hell);
	padding: calc(150px * var(--rd-zoom)) 0 calc(165px * var(--rd-zoom));
}

/* Gemessen: der Ring um das Zeichen ist 82 breit, die Ueberschrift beginnt
   30 daneben. */
.rd-leistung-kopf {
	display: flex;
	align-items: center;
	gap: calc(30px * var(--rd-zoom));
	margin: 0 0 calc(28px * var(--rd-zoom));
}

.rd-leistung-ring {
	flex: 0 0 auto;
	display: grid;
	place-items: center;
	width: calc(82px * var(--rd-zoom));
	height: calc(82px * var(--rd-zoom));
	/* Im Screendesign ist der Ring vor der Abschnittsueberschrift keine
	   Kreisscheibe, sondern die Journey-Form der Asset-Datei (19.09.2026,
	   W8, nachgesehen an "Standortbestimmung"); die Abschnitte tragen die
	   Varianten der Reihe nach wie die vier Schritte. */
	border-radius: var(--rd-maske-badge-journey);
	border: calc(3px * var(--rd-zoom)) solid var(--rd-gelb);
	background: var(--rd-weiss);
	box-shadow: var(--rd-schatten-pille);
	font-size: calc(38px * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-leistung-pakete .rd-leistung-ring {
	border-radius: 50% 50% 42% 58%;
}

.rd-kurse .rd-leistung-ring {
	border-radius: 42% 58% 50% 50%;
}

/* Gemessen: "Standortbestimmung" 994..1047, Versalhoehe rund 41 - macht bei
   Museo Slab rund 57px Schriftgroesse. */
.rd-leistung-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.75rem, calc(28px + 1.51vw), 3.6rem) * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text);
	margin: 0;
}

.rd-leistung-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(clamp(1rem, calc(16.5px + .333vw), 1.45rem) * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text-grau);
	max-width: 62em;
	margin: 0 0 calc(14px * var(--rd-zoom));
}

/* --------------------------------------------- 2. Die Standortbestimmung */

/* Gemessen: die Karte liegt bei x 260..1659, also 1400 breit und mittig im
   1500er Container; oben 1231, unten 2213. Der Farbverlauf laeuft von
   #FDCC1E oben links nach #FBB901 unten rechts - beide abgegriffen. */
.rd-standort-karte {
	display: grid;
	grid-template-columns: minmax(0, 640fr) minmax(0, 598fr);
	gap: calc(54px * var(--rd-zoom));
	align-items: center;
	max-width: calc(1400px * var(--rd-zoom));
	margin: calc(58px * var(--rd-zoom)) auto 0;
	padding: calc(62px * var(--rd-zoom));
	border-radius: var(--rd-radius-karte-gross);
	background: linear-gradient(135deg, #FDCC1E 0%, #FCC310 52%, #FBB901 100%);
	box-shadow: 0 24px 60px rgba(180, 130, 0, .22);
}

/* Gemessen: 204x32 bei x 323, y 1280. Dunkel auf Gelb, nicht gelb auf Dunkel -
   die Marke soll sich vom Kartengrund abheben. */
.rd-standort-marke {
	display: inline-block;
	margin: 0 0 calc(22px * var(--rd-zoom));
	padding: calc(10px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	border-radius: 999px;
	background: var(--rd-braun);
	color: #FFF3C8;
	font-family: var(--rd-sans-fett);
	font-size: calc(.86rem * var(--rd-zoom));
	letter-spacing: .09em;
	line-height: 1;
	text-transform: uppercase;
}

.rd-standort-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.6rem, calc(24px + 1.25vw), 3rem) * var(--rd-zoom));
	line-height: 1.15;
	color: var(--rd-text);
	margin: 0 0 calc(26px * var(--rd-zoom));
}

/* Auf dem Gelb ist das Grau des Fliesstexts nicht lesbar genug; der Entwurf
   setzt hier ein dunkles Braun. */
.rd-standort-fliess {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.13rem * var(--rd-zoom));
	line-height: 1.66;
	color: #3B2F00;
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-standort-ablauf-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(.9rem * var(--rd-zoom));
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--rd-braun);
	margin: calc(30px * var(--rd-zoom)) 0 calc(18px * var(--rd-zoom));
}

.rd-ablauf {
	display: grid;
	gap: calc(16px * var(--rd-zoom));
	margin: 0 0 calc(34px * var(--rd-zoom));
	padding: 0;
	list-style: none;
}

.rd-ablauf li {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: calc(16px * var(--rd-zoom));
	align-items: start;
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.08rem * var(--rd-zoom));
	line-height: 1.5;
	color: #3B2F00;
}

.rd-ablauf li strong {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	color: var(--rd-text);
}

.rd-ablauf-zahl {
	display: grid;
	place-items: center;
	width: calc(32px * var(--rd-zoom));
	height: calc(32px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-braun);
	color: var(--rd-gelb);
	font-family: var(--rd-sans-fett);
	font-size: calc(.95rem * var(--rd-zoom));
	line-height: 1;
}

/* Die drei kleinen Angaben unter dem Ablauf. Heller als der Kartengrund,
   damit sie sich abheben, ohne ein zweites Weiss einzufuehren. */
.rd-merkzeile {
	display: flex;
	flex-wrap: wrap;
	gap: calc(14px * var(--rd-zoom));
	margin: 0 0 calc(34px * var(--rd-zoom));
	padding: 0;
	list-style: none;
}

.rd-merkzeile li {
	display: flex;
	align-items: center;
	gap: calc(10px * var(--rd-zoom));
	padding: calc(11px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	border-radius: 999px;
	background: rgba(255, 255, 255, .62);
	color: var(--rd-braun);
	font-family: var(--rd-sans);
	font-size: calc(1rem * var(--rd-zoom));
}

.rd-merkzeile li .material-symbols-outlined {
	font-size: calc(21px * var(--rd-zoom));
}

.rd-standort-fuss {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: calc(30px * var(--rd-zoom));
}

.rd-preis {
	font-family: var(--rd-slab);
	font-size: calc(clamp(1.8rem, calc(26px + 1.02vw), 2.9rem) * var(--rd-zoom));
	line-height: 1;
	color: var(--rd-text);
	margin: 0;
}

/* Gemessen: das Bild ist 598 breit und 690 hoch, also etwas hochkant. Das
   vorhandene Foto hat ein anderes Seitenverhaeltnis - deshalb aspect-ratio
   plus object-fit statt fester Hoehe: die Karte bleibt gleich, egal welches
   Bild spaeter kommt. */
.rd-standort-bild {
	margin: 0;
	align-self: stretch;
}

.rd-standort-bild img {
	width: 100%;
	height: 100%;
	min-height: calc(560px * var(--rd-zoom));
	object-fit: cover;
	border-radius: calc(26px * var(--rd-zoom));
	box-shadow: 0 18px 40px rgba(120, 85, 0, .25);
}

/* ------------------------------------------- 3. Die drei Begleitungsmodelle */

/* Gemessen: drei Karten von 409 mit 37 Zwischenraum, zusammen 1300 - schmaler
   als der Container, weil der Entwurf links und rechts Platz fuer die Pfeile
   seines Schiebers laesst. Der Schieber ist nicht uebernommen, die Breite
   schon: sie gibt den Karten ihre Proportion. */
/* Die LEBENDE Paketreihe auf der Angebotsseite (04.09.2026).
   Sie traegt selbst fast nichts: die Breite, den Rand und den Beschnitt
   bringt `.rd-kacheln` darin mit, die Kacheln kommen aus `.paket-box`.
   Gebraucht wird nur der Abstand nach oben - derselbe wie bei den drei
   festen Karten darueber, damit die Seite gleich aussieht, egal welche
   der beiden Haelften gerade steht. */
/* ---- Der Kundenkalender (Kevin, 04.09.2026) ----------------------------
   "Vom Design her so aehnlich aufgebaut wie Bettinas." Ihr Wochenraster wohnt
   in css/admin.css, die diese Seite nicht laedt - deshalb eigene Klassen im
   rd-kb-Namensraum statt geliehener tt-Namen. Ein geliehener Name gaebe ein
   ungestaltetes Raster, und der Namensraum-Waechter meldete ihn ohnehin.

   SIEBEN SPALTEN AUF BREITEN FENSTERN, gestapelt auf schmalen: auf einem
   Telefon waeren sieben Spalten je 40 Pixel breit und unlesbar. */
.rd-kb-kalender {
	margin-top: calc(10px * var(--rd-zoom));
}

.rd-kb-kal-kopf {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: calc(14px * var(--rd-zoom));
	margin: 0 0 calc(10px * var(--rd-zoom)) 0;
}

.rd-kb-kal-pfeil {
	background: var(--rd-creme, #f6f1e7);
	border: 1px solid rgba(0, 0, 0, 0.08);
	border-radius: 50%;
	width: calc(30px * var(--rd-zoom));
	height: calc(30px * var(--rd-zoom));
	cursor: pointer;
	font-size: calc(18px * var(--rd-zoom));
	line-height: 1;
	color: #333;
}

.rd-kb-kal-pfeil:hover { background: #fbb900; }

.rd-kb-kal-woche {
	font-size: calc(14px * var(--rd-zoom));
	font-weight: 600;
	color: #333;
}

.rd-kb-kal-raster {
	display: grid;
	grid-template-columns: repeat(7, minmax(0, 1fr));
	gap: calc(6px * var(--rd-zoom));
}

.rd-kb-kal-tag {
	background: var(--rd-creme, #f6f1e7);
	border-radius: calc(8px * var(--rd-zoom));
	padding: calc(8px * var(--rd-zoom));
	min-height: calc(70px * var(--rd-zoom));
}

/* Vergangene Tage bleiben STEHEN und werden nur blasser: eine Woche, in der
   Spalten fehlen, verschoebe alle anderen und saehe nach einem Fehler aus. */
.rd-kb-kal-vergangen { opacity: 0.45; }

.rd-kb-kal-tagname {
	margin: 0 0 calc(6px * var(--rd-zoom)) 0;
	font-size: calc(12px * var(--rd-zoom));
	font-weight: 600;
	color: #555;
}

.rd-kb-kal-leer {
	margin: 0;
	font-size: calc(13px * var(--rd-zoom));
	color: #999;
}

.rd-kb-kal-zeit {
	display: block;
	width: 100%;
	margin-bottom: calc(5px * var(--rd-zoom));
	padding: calc(6px * var(--rd-zoom));
	background: #fff;
	border: 1px solid rgba(0, 0, 0, 0.1);
	border-radius: calc(6px * var(--rd-zoom));
	cursor: pointer;
	font-size: calc(12px * var(--rd-zoom));
	color: #333;
	text-align: left;
}

.rd-kb-kal-zeit:hover { background: #fbb900; }

/* EIN FENSTER MIT MEHREREN BEGINNEN (13.09.2026): die Spanne als Zeile,
   darunter je Beginn ein kleiner Knopf. Die Knoepfe stehen nebeneinander und
   brechen um - acht Beginne fuer 10-16 Uhr bei 45 Minuten passen so in die
   Tagesspalte, untereinander waeren es acht Zeilen. */
.rd-kb-kal-fenster {
	margin-bottom: calc(6px * var(--rd-zoom));
	padding: calc(5px * var(--rd-zoom));
	border: 1px dashed rgba(0, 0, 0, 0.15);
	border-radius: calc(6px * var(--rd-zoom));
}

.rd-kb-kal-spanne {
	margin: 0 0 calc(4px * var(--rd-zoom));
	font-size: calc(11px * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-kb-kal-zeit.rd-kb-kal-beginn {
	display: inline-block;
	width: auto;
	margin: 0 calc(3px * var(--rd-zoom)) calc(3px * var(--rd-zoom)) 0;
	padding: calc(3px * var(--rd-zoom)) calc(6px * var(--rd-zoom));
}

@media (max-width: 760px) {
	.rd-kb-kal-raster { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.rd-pakete-live {
	margin-top: calc(58px * var(--rd-zoom));
}

.rd-pakete-live .rd-kursliste-lead {
	margin-bottom: calc(24px * var(--rd-zoom));
}

/* DER RUECKFALL DES LERNBEGLEITUNGS-ABSCHNITTS (10.09.2026).
   Hier standen bis zum 10.09.2026 rund 95 Zeilen fuer drei fest geschriebene
   Paketkarten (.rd-pakete, .rd-paket, -marke, -zahl, -titel, -dauer, -text,
   -fuss). Die Karten sind gefallen - sie behaupteten ein Angebot, das es im
   Bestand nicht gibt -, und damit auch ihre Regeln; sie standen ausschliesslich
   auf mein-angebot.html (nachgemessen ueber alle .html/.php/.js).

   Was bleibt, ist der Satz, der an ihre Stelle tritt. Er ist absichtlich klein:
   er ist die AUSKUNFT fuer den Fall, dass noch kein Paket oeffentlich ist, und
   nicht selbst ein Angebot. Sobald Bettina eines freigibt, blendet script.js
   ihn aus und .rd-pakete-live zeichnet echte Kacheln. */
.rd-pakete-hinweis {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: calc(24px * var(--rd-zoom));
	max-width: calc(760px * var(--rd-zoom));
	margin-top: calc(40px * var(--rd-zoom));
}

.rd-pakete-hinweis p {
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-braun);
}

/* ------------------------------------------------ 4. Kurse und Workshops */

.rd-kurse {
	position: relative;
	/* Seit dem 10.09.2026 folgt hier die Liste der kostenlosen Angebote
	   (creme) statt der gelb-hellen Downloadkarten. Und die Liste kann
	   verschwinden - script.js blendet sie aus, wenn es nichts zu zeigen
	   gibt; dahinter steht "Familien vertrauen mir", ebenfalls creme. Die
	   Welle passt also in beiden Faellen. */
	--rd-wellenfarbe: var(--rd-creme);
	overflow: hidden;
	background: var(--rd-creme);
	padding: calc(150px * var(--rd-zoom)) 0 calc(165px * var(--rd-zoom));
}

/* Gemessen: zwei Spalten von 684 mit 80 Zwischenraum. */
.rd-kursspalten {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: calc(80px * var(--rd-zoom));
	max-width: calc(1448px * var(--rd-zoom));
	margin: calc(52px * var(--rd-zoom)) auto 0;
}

.rd-kursspalte-titel {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	font-size: calc(1.45rem * var(--rd-zoom));
	line-height: 1.35;
	color: var(--rd-text);
	margin: 0 0 calc(26px * var(--rd-zoom));
}

/* NICHT `.rd-kursliste`: die Klasse gehoert dem alten Abschnitt "Aktuelle
   Termine" (gelb-hell, 120px Polster, weiter unten) und legte sich am
   21.09.2026 fuer einen Deploy hinter beide Spalten - Kevin: "die
   Hintergrundfarbe wieder wegmachen". */
.rd-kursspalte-liste {
	display: grid;
	gap: calc(22px * var(--rd-zoom));
	margin: 0;
	padding: 0;
}

.rd-kursliste-leer {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: 0;
}

/* ------------------------------------------------ Die Kurskachel (21.09.2026)
   script.js (renderBookings) zeichnet sie aus api/get_bookings.php, nach dem
   Entwurf: links Label, Titel und bis zu drei Termine, rechts Preis und ein
   runder Pfeil; die ganze Kachel oeffnet den Buchungsdialog. Was der Entwurf
   nicht zeigt (Beschreibung, Landingpage-Verweis, Anmeldeschluss, Plaetze),
   steht unter den Terminen in derselben Schrift. Hier standen bis dahin die
   Regeln der fuenf Platzhalter-Kursarten (.rd-kurszeile*, gefallen am
   10.09.2026) - dieselben Toene, dieselbe Bauform, jetzt an der echten Liste. */
.rd-kurskachel {
	position: relative;
	display: flex;
	align-items: stretch;
	gap: calc(18px * var(--rd-zoom));
	border-radius: calc(20px * var(--rd-zoom));
	padding: calc(22px * var(--rd-zoom)) calc(26px * var(--rd-zoom)) calc(22px * var(--rd-zoom)) calc(30px * var(--rd-zoom));
	box-shadow: 0 10px 26px rgba(120, 95, 20, .09);
	background: var(--zeilengrund);
	overflow: hidden;
	cursor: pointer;
	transition: transform .2s ease, box-shadow .2s ease;
}

.rd-kurskachel:hover {
	transform: translateY(calc(-3px * var(--rd-zoom)));
	box-shadow: 0 16px 34px rgba(120, 95, 20, .14);
}

.rd-kurskachel-gesperrt {
	cursor: default;
	opacity: .78;
}

.rd-kurskachel-gesperrt:hover {
	transform: none;
	box-shadow: 0 10px 26px rgba(120, 95, 20, .09);
}

/* Die helle Scheibe rechts, wie im Entwurf: eine grosse Kreisflaeche, die
   ueber den rechten Rand hinauslaeuft. */
.rd-kurskachel::before {
	content: "";
	position: absolute;
	top: 50%;
	right: calc(-90px * var(--rd-zoom));
	width: calc(260px * var(--rd-zoom));
	height: calc(260px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--zeilenscheibe);
	transform: translateY(-50%);
	pointer-events: none;
}

/* Vier Toene, wie im Entwurf abwechselnd gesetzt: die kraeftige und die
   blasse Fassung je Spalte. Jede Kachel setzt nur ihre Werte, die Regeln
   darunter lesen sie - dieselbe Bauform wie bei den Freebiekarten. */
.rd-kurskachel-gelb {
	--zeilengrund: linear-gradient(115deg, #FEDC63 0%, #FDC722 100%);
	--zeilenscheibe: rgba(255, 255, 255, .28);
	--zeilenmarke: #7A5E00;
}

.rd-kurskachel-gelbhell {
	--zeilengrund: #FFF5DA;
	--zeilenscheibe: rgba(255, 255, 255, .7);
	--zeilenmarke: #8A6A00;
}

.rd-kurskachel-tuerkis {
	--zeilengrund: var(--rd-tuerkis-hell);
	--zeilenscheibe: rgba(255, 255, 255, .6);
	--zeilenmarke: var(--rd-tuerkis-dunkel);
}

.rd-kurskachel-rosa {
	--zeilengrund: #FBE2DE;
	--zeilenscheibe: rgba(255, 255, 255, .55);
	--zeilenmarke: #B5432E;
}

.rd-kurskachel-inhalt {
	position: relative;
	flex: 1 1 auto;
	min-width: 0;
}

.rd-kurskachel-seite {
	position: relative;
	flex: none;
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	justify-content: space-between;
	gap: calc(12px * var(--rd-zoom));
}

.rd-kurskachel-label {
	font-family: var(--rd-sans-fett);
	font-size: calc(.82rem * var(--rd-zoom));
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--zeilenmarke);
	margin: 0 0 calc(6px * var(--rd-zoom));
}

.rd-kurskachel-titel {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	font-size: calc(1.3rem * var(--rd-zoom));
	line-height: 1.3;
	color: var(--zeilenmarke);
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-kurskachel-termine {
	display: grid;
	gap: calc(4px * var(--rd-zoom));
	margin: 0;
	padding: 0;
	list-style: none;
}

.rd-kurskachel-termine li,
.rd-kurskachel-frist,
.rd-kurskachel-plaetze {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: calc(6px * var(--rd-zoom)) calc(8px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1rem * var(--rd-zoom));
	line-height: 1.4;
	color: #4A4A46;
	margin: 0;
}

.rd-kurskachel-ikon {
	display: flex;
	font-size: calc(17px * var(--rd-zoom));
	color: var(--zeilenmarke);
}

.rd-kurskachel-termine li .rd-kurskachel-ikon + span {
	margin-right: calc(8px * var(--rd-zoom));
}

.rd-kurskachel-weitere,
.rd-kurskachel .booking-description {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1rem * var(--rd-zoom));
	line-height: 1.55;
	color: #4A4A46;
	margin: calc(8px * var(--rd-zoom)) 0 0;
}

.rd-kurskachel .desc-toggle {
	display: inline-block;
	border: 0;
	background: none;
	padding: 0;
	margin-left: calc(4px * var(--rd-zoom));
	font: inherit;
	font-family: var(--rd-sans-fett);
	color: var(--zeilenmarke);
	cursor: pointer;
}

.rd-kurskachel-frist,
.rd-kurskachel-plaetze {
	margin-top: calc(8px * var(--rd-zoom));
}

.rd-kurskachel .booking-mehr {
	display: inline-block;
	margin-top: calc(10px * var(--rd-zoom));
	font-family: var(--rd-sans-fett);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--zeilenmarke);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.rd-kurskachel .booking-price {
	font-family: var(--rd-slab);
	font-size: calc(1.45rem * var(--rd-zoom));
	line-height: 1.2;
	color: var(--zeilenmarke);
	margin: 0;
	white-space: nowrap;
}

.rd-kurskachel-pfeil {
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(44px * var(--rd-zoom));
	height: calc(44px * var(--rd-zoom));
	border: 0;
	border-radius: 50%;
	background: var(--rd-weiss);
	color: var(--rd-text);
	box-shadow: var(--rd-schatten-pille);
	cursor: pointer;
	transition: transform .15s ease;
}

.rd-kurskachel-pfeil .rd-kurskachel-ikon {
	font-size: calc(20px * var(--rd-zoom));
	color: inherit;
}

.rd-kurskachel-pfeil:hover {
	transform: scale(1.06);
}

.rd-kurskachel-pfeil:focus-visible {
	outline: 3px solid var(--zeilenmarke);
	outline-offset: 3px;
}

.rd-kurskachel-gesperrt-text {
	font-family: var(--rd-sans-fett);
	font-size: calc(.9rem * var(--rd-zoom));
	line-height: 1.3;
	color: var(--zeilenmarke);
	text-align: right;
	max-width: calc(120px * var(--rd-zoom));
}

.rd-kurse-hinweis {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	text-align: center;
	color: var(--rd-text-grau);
	max-width: 40em;
	margin: calc(52px * var(--rd-zoom)) auto calc(24px * var(--rd-zoom));
}

/* --------------------------- 5. Kostenlose Angebote (10.09.2026) --------
   HIER STANDEN RUND 120 ZEILEN FUER DREI FESTE DOWNLOADKARTEN
   (.rd-downloads, -karten, .rd-download samt Farbvarianten, -label, -titel,
   -text, -aktion, -scheibe, -worte). Die Karten sind gefallen: sie nannten
   Titel und Beschreibung von Hand und zeigten alle drei auf dieselbe Stelle -
   die Liste, die sich aus api/freebies.php fuellt. Zwei Wahrheiten ueber
   dieselben Angebote auf EINER Seite waeren schlimmer als eine, und die
   handgepflegte Haelfte waere die, die niemand nachzieht.

   An ihrer Stelle steht jetzt `.rd-gratisliste` (weiter unten, von
   kurse_neu.html uebernommen). Nachgemessen ueber alle .html/.php: keine der
   gestrichenen Klassen wird noch benutzt. */

/* --------------------------------------- 6. Familien vertrauen mir */

.rd-vertrauen {
	position: relative;
	--rd-wellenfarbe: var(--rd-gelb-hell);
	overflow: hidden;
	background: var(--rd-creme);
	padding: calc(140px * var(--rd-zoom)) 0 calc(165px * var(--rd-zoom));
}

.rd-vertrauen-inner {
	position: relative;
	z-index: 1;
	display: grid;
	grid-template-columns: minmax(0, 660fr) minmax(0, 760fr);
	gap: calc(70px * var(--rd-zoom));
	align-items: center;
}

.rd-vertrauen-bild {
	position: relative;
	margin: 0;
}

/* Derselbe Aufbau wie .rd-hero-ring, nur tuerkis statt gelb: der Rahmen ist
   ein BORDER und kein Innenabstand, damit `overflow: hidden` am inneren
   Kreis schneidet und nicht am aeusseren. */
.rd-vertrauen-ring {
	position: relative;
	aspect-ratio: 1;
	max-width: calc(560px * var(--rd-zoom));
	margin: 0 auto;
	border-radius: 50%;
	border: calc(16px * var(--rd-zoom)) solid var(--rd-tuerkis-ring);
	overflow: hidden;
	background: var(--rd-tuerkis-hell);
}

.rd-vertrauen-ring img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 50%;
	/* Derselbe Faktor wie bei .rd-hero-ring, aus demselben Grund: bettina.png
	   bringt einen eigenen grauen Ring mit (rund 13 von 330 Pixeln). Ohne ihn
	   laege innerhalb des tuerkisen Rings noch ein grauer. Faellt die Datei je
	   durch ein Foto ohne eingebackenen Ring, gehoeren beide Zeilen weg. */
	transform: scale(1.09);
}

.rd-vertrauen-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.75rem, calc(28px + 1.51vw), 3.6rem) * var(--rd-zoom));
	line-height: 1.18;
	color: var(--rd-text);
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-vertrauen-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.15rem * var(--rd-zoom));
	line-height: 1.66;
	color: var(--rd-text-grau);
	margin: 0 0 calc(30px * var(--rd-zoom));
}

/* Das grosse Widget steht hier in einer Spalte und nicht ueber die volle
   Breite wie auf der Startseite - die Randbreite darf deshalb nicht die der
   Startseite erben. */
.rd-vertrauen .rd-stimmen-live {
	max-width: none;
	margin: 0;
}

.rd-vertrauen .rd-stimmen-fest {
	text-align: left;
	margin: calc(20px * var(--rd-zoom)) 0 0;
}

/* ------------------------------------------------- 7. Haeufige Fragen */

.rd-faq {
	position: relative;
	--rd-wellenfarbe: var(--rd-gelb);
	overflow: hidden;
	background: var(--rd-gelb-hell);
	padding: calc(140px * var(--rd-zoom)) 0 calc(180px * var(--rd-zoom));
	text-align: center;
}

/* Gemessen: die Liste ist 1032 breit und mittig. */
.rd-faq-liste {
	display: grid;
	gap: calc(18px * var(--rd-zoom));
	max-width: calc(1032px * var(--rd-zoom));
	margin: calc(54px * var(--rd-zoom)) auto 0;
	text-align: left;
}

/* <details> statt eines eigenen Skripts: Tastaturbedienung, die Suchfunktion
   des Browsers und das Verhalten ohne JavaScript gibt es damit geschenkt. */
.rd-faq-punkt {
	background: var(--rd-weiss);
	border-radius: calc(30px * var(--rd-zoom));
	box-shadow: 0 10px 26px rgba(120, 95, 20, .08);
	/* Der gelbe Balken links steht nur am geoeffneten Punkt. Als durchsichtiger
	   Rahmen ist er IMMER da und wechselt nur die Farbe - sonst spraenge die
	   ganze Zeile beim Aufklappen um seine Breite nach rechts. */
	border-left: calc(6px * var(--rd-zoom)) solid transparent;
	overflow: hidden;
}

.rd-faq-punkt[open] {
	border-left-color: var(--rd-gelb-dunkel);
}

.rd-faq-punkt summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: calc(24px * var(--rd-zoom));
	padding: calc(24px * var(--rd-zoom)) calc(34px * var(--rd-zoom));
	font-family: var(--rd-sans-fett);
	font-size: calc(1.15rem * var(--rd-zoom));
	line-height: 1.4;
	color: var(--rd-text);
	cursor: pointer;
	list-style: none;
}

/* Das Standarddreieck weg - in beiden Schreibweisen, Safari kennt nur die
   zweite. */
.rd-faq-punkt summary::-webkit-details-marker {
	display: none;
}

.rd-faq-punkt summary::marker {
	content: '';
}

/* Der Winkel kommt aus derselben lokalen Zeichenschrift wie alle anderen
   Zeichen der Seite - kein SVG, kein zweiter Weg. */
.rd-faq-punkt summary::after {
	content: 'expand_more';
	flex: 0 0 auto;
	font-family: 'Material Symbols Outlined';
	/* Pseudo-Elemente erben die Ligatur-Einstellung nicht aus
	   .material-symbols-outlined. Ohne diese zwei Zeilen erscheint hier der
	   Name `expand_more` statt des Pfeils. */
	-webkit-font-feature-settings: 'liga';
	font-feature-settings: 'liga';
	font-size: calc(28px * var(--rd-zoom));
	line-height: 1;
	color: var(--rd-gelb-dunkel);
	transition: transform .18s ease;
}

.rd-faq-punkt[open] summary::after {
	transform: rotate(180deg);
}

.rd-faq-antwort {
	padding: 0 calc(34px * var(--rd-zoom)) calc(28px * var(--rd-zoom));
}

.rd-faq-antwort p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.08rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text-grau);
	margin: 0;
}

/* DER STAFFELKNOPF (10.09.2026, Kevin: "hier fehlt uns auch ein mehr anzeigen
   button dass nicht alle auf einmal ausgeklappt sind").

   DIE KUERZUNG HAENGT AN `ist-gekuerzt`, UND DIE SETZT ERST script.js. Ohne
   JavaScript steht die vollstaendige Liste da - das ist der bessere der beiden
   Fehlerfaelle. Waere die Regel an `.rd-faq-nachschlag` allein gebunden, waere
   ein Ausfall von script.js eine Seite mit fuenfzehn unerreichbaren Fragen.

   Den Preis nennt der Kommentar an der Liste selbst: solange gekuerzt ist,
   findet Strg+F die Fragen 8 bis 22 nicht. Deshalb `display: none` und nicht
   eine Hoehenbegrenzung - halb abgeschnittene Zeilen unter einem Verlauf sind
   fuer Strg+F genauso unsichtbar und sehen zusaetzlich nach einem Fehler aus. */
.rd-faq-liste.ist-gekuerzt .rd-faq-nachschlag {
	display: none;
}

.rd-faq-mehr {
	margin-top: calc(34px * var(--rd-zoom));
}

/* ==========================================================================
   Alles darunter gehoert der Seite impressum.html. Sie teilt sich mit den
   drei anderen Kopf, Fusszeile, Knoepfe, Wellen, Vorspann-Pille und den
   Abschlussblock; was hier steht, gibt es nur auf ihr.

   FUER DIESE SEITE GIBT ES KEIN SCREENDESIGN. Die Zahlen sind deshalb nicht
   abgemessen, sondern aus den drei gezeichneten Seiten uebernommen: Container
   und Innenabstaende von .rd-leistung, Ueberschriftsgroessen aus derselben
   Reihe, Farben aus :root. Wer spaeter einen Entwurf bekommt, misst gegen ihn
   nach und ersetzt die Werte - der Regler --rd-zoom haelt sie bis dahin im
   selben Massstab wie den Rest.

   Was diese Seite von den anderen unterscheidet: sie ist eine LESESEITE. Kein
   Bild, keine Karte, keine Handlung - nur Rechtstext, den man wiederfinden
   koennen muss. Daraus folgen zwei Entscheidungen, die man dem Markup ansieht:

     * Nichts ist eingeklappt. Ein <details> waere die naheliegende Antwort auf
       660 Zeilen Datenschutzerklaerung, aber es nimmt der Seite genau das, was
       sie leisten muss: die Textsuche des Browsers findet nichts in einem
       geschlossenen Block, und impressum.html#agb-widerrufsrecht - der Verweis
       aus der AGB-Zustimmung im Buchungsformular - landete auf einem
       zugeklappten Kasten.
     * Die Zeile ist schmal (.rd-schmal, 930 statt 1548). Fliesstext ueber die
       volle Breite laesst das Auge beim Zeilenwechsel die Spur verlieren.

   Die Hintergrundfolge, an der die Wellenfarben haengen:

     Hero + Impressum            creme     (#FFFDF7)
     Datenschutzerklaerung       gelb-hell (#FFF6E4)
     AGB                         creme
     Der naechste Schritt        gelb
   ========================================================================== */

/* --------------------------------------------------- Der Rechtsabschnitt */

/* position/overflow sind hier keine Kosmetik: die Welle haengt 295 unter der
   Kante und lebt davon, dass ihr Abschnitt sie abschneidet. Der Waechter in
   tests/test_redesign_startseite.php prueft beides. */
.rd-recht {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	--rd-wellenfarbe: var(--rd-gelb-hell);
	padding: calc(104px * var(--rd-zoom)) 0 calc(120px * var(--rd-zoom));
}

.rd-recht-gelb {
	background: var(--rd-gelb-hell);
	--rd-wellenfarbe: var(--rd-creme);
}

/* Der Untertitel der Datenschutzerklaerung ("www.Lernerfolg.jetzt"). Er stand
   im Original als eigene Ueberschrift unter dem Titel und ist keine - er sagt,
   fuer welche Adresse die Erklaerung gilt. */
.rd-recht-marke {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
	margin: calc(-14px * var(--rd-zoom)) 0 calc(30px * var(--rd-zoom));
	padding-left: calc(112px * var(--rd-zoom));
}

/* ------------------------------------------------------ Der Fliesstext */

.rd-recht-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.06rem * var(--rd-zoom));
	line-height: 1.78;
	color: var(--rd-text-grau);
}

.rd-recht-text p {
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-recht-text article {
	display: block;
	margin: 0 0 calc(34px * var(--rd-zoom));
}

.rd-recht-text article:last-child {
	margin-bottom: 0;
}

/* Kapitel. Der gelbe Strich links steht statt einer Nummernkugel: die Nummer
   steht schon im Text ("1. Begriffsbestimmungen"), eine zweite waere doppelt
   gemoppelt - der Strich gibt ihr nur eine Kante zum Anlaufen. */
.rd-recht-text h3 {
	position: relative;
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.28rem, calc(18px + .55vw), 1.62rem) * var(--rd-zoom));
	line-height: 1.32;
	color: var(--rd-text);
	margin: calc(52px * var(--rd-zoom)) 0 calc(20px * var(--rd-zoom));
	padding-left: calc(22px * var(--rd-zoom));
	/* Ein Sprungziel darf nicht unter der klebenden Kopfzeile landen - dieselbe
	   Zahl wie ueberall sonst, deshalb steht sie in :root und nicht hier. */
	scroll-margin-top: calc(var(--rd-kopf) + 24px);
}

.rd-recht-text h3::before {
	content: '';
	position: absolute;
	left: 0;
	top: calc(.24em);
	bottom: calc(.24em);
	width: calc(5px * var(--rd-zoom));
	border-radius: 999px;
	background: var(--rd-gelb);
}

.rd-recht-text > h3:first-child {
	margin-top: 0;
}

/* Unterpunkte: a) b) c) der Begriffsbestimmungen, 7.1/7.2 der AGB, und die
   benannten Dienste (IONOS, SumUp, PayPal). */
.rd-recht-text h4 {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.06rem * var(--rd-zoom));
	line-height: 1.45;
	color: var(--rd-tuerkis-dunkel);
	margin: calc(26px * var(--rd-zoom)) 0 calc(10px * var(--rd-zoom));
	scroll-margin-top: calc(var(--rd-kopf) + 24px);
}

.rd-recht-text a {
	color: var(--rd-tuerkis-dunkel);
	text-decoration: underline;
	text-underline-offset: .18em;
	/* Die Datenschutzerklaerung traegt Verweise, die laenger sind als die Zeile
	   (der Generatorhinweis am Ende). Ohne das Umbrechen schiebt einer davon die
	   ganze Seite in die Breite. */
	overflow-wrap: anywhere;
}

.rd-recht-text a:hover,
.rd-recht-text a:focus-visible {
	color: var(--rd-text);
}

.rd-recht-text strong,
.rd-recht-text b {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	color: var(--rd-text);
}

/* Die echten Aufzaehlungen (AGB: was Vertragsgegenstand ist, welche Daten
   erhoben werden). Der Punkt ist gelb und wird selbst gesetzt - der
   Browserpunkt haengt an der Textfarbe und waere grau. */
.rd-recht-text ul {
	list-style: none;
	margin: 0 0 calc(18px * var(--rd-zoom));
	padding: 0;
}

.rd-recht-text ul li {
	position: relative;
	padding-left: calc(26px * var(--rd-zoom));
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-recht-text ul li::before {
	content: '';
	position: absolute;
	left: 0;
	top: calc(.66em);
	width: calc(8px * var(--rd-zoom));
	height: calc(8px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-gelb);
}

/* Und die Aufzaehlungen, die KEINE sind: im Original tragen sie
   `list-style: none`, weil jeder Punkt eine eigene Ueberschrift hat (a), b),
   c) …). Ein Punkt davor waere hier falsch, und die Einrueckung auch. */
.rd-recht-text ul.rd-recht-punkte {
	margin: 0;
}

.rd-recht-text ul.rd-recht-punkte > li {
	padding-left: 0;
	margin: 0;
}

.rd-recht-text ul.rd-recht-punkte > li::before {
	content: none;
}

/* ----------------------------------------------- Die Anschrift im Kasten */

/* Der einzige Kasten der Seite. Er steht nur unter dem Impressum, weil dort
   die Angaben stehen, die man wirklich abschreibt - Anschrift, Telefon, Mail.
   Der Rest der Seite ist Fliesstext und bleibt es. */
.rd-recht-karte {
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	padding: calc(38px * var(--rd-zoom)) calc(46px * var(--rd-zoom));
}

.rd-recht-karte .rd-recht-text h3 {
	margin-top: calc(34px * var(--rd-zoom));
}

.rd-recht-karte .rd-recht-text > h3:first-child {
	margin-top: 0;
}

/* Dieselben Schwellen wie der Rest der Datei, nicht eigene: 1150 ist die
   Stufe, an der die Abschnitte ihre Innenabstaende abgeben, 600 die, an der
   .rd-leistung-kopf von nebeneinander auf gestapelt umstellt. Eine eigene
   Zahl dazwischen haette die Marke unter einem Kopf stehen lassen, der schon
   gestapelt ist. */
@media (max-width: 1150px) {
	.rd-recht {
		padding: calc(80px * var(--rd-zoom)) 0 calc(92px * var(--rd-zoom));
	}

	.rd-recht-karte {
		padding: calc(32px * var(--rd-zoom)) calc(30px * var(--rd-zoom));
	}
}

@media (max-width: 600px) {
	.rd-recht {
		padding: calc(64px * var(--rd-zoom)) 0 calc(76px * var(--rd-zoom));
	}

	/* Der Abschnittskopf stapelt ab hier, die Iconscheibe steht also nicht mehr
	   links neben dem Titel - die Einrueckung, mit der die Marke unter ihm
	   ausgerichtet war, hat damit nichts mehr, woran sie sich ausrichtet. */
	.rd-recht-marke {
		padding-left: 0;
		margin-top: calc(-8px * var(--rd-zoom));
	}

	.rd-recht-karte {
		padding: calc(26px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	}
}

/* ==========================================================================
   Alles darunter gehoert der Seite widerruf_neu.php (Ansicht:
   includes/widerruf_ansicht_neu.php). Sie teilt sich mit den anderen Kopf,
   Fusszeile, Knoepfe, Wellen und den Vorspann; was hier steht, gibt es nur
   auf ihr.

   AUCH FUER DIESE SEITE GIBT ES KEIN SCREENDESIGN. Die Zahlen sind aus den
   gezeichneten Seiten uebernommen, nicht abgemessen - Radien, Schatten und
   Farben aus :root, Innenabstaende in der Groessenordnung der Karten.

   Was diese Seite von allen anderen unterscheidet: sie ist die einzige mit
   einem ECHTEN FORMULAR. Auf ihr storniert ein Kunde eine Buchung. Daraus
   folgen drei Entscheidungen, die man dem Stylesheet ansieht:

     * Der Widerrufsknopf traegt eine eigene Farbe (.rd-btn-warnung) und nicht
       das Gelb der Seite. Ein zerstoerender Knopf, der aussieht wie der
       Weiter-Knopf, wird geklickt wie der Weiter-Knopf.
     * Die Knoepfe sind kleiner als sonst (.rd-btn-klein). Der Regelknopf des
       Entwurfs ist 21/39 gepolstert und 1.3rem gross - drei davon
       nebeneinander in einer Buchungskarte sprengen jede Zeile.
     * Der Fokusrahmen ist ueberall sichtbar. Wer ein Formular per Tastatur
       ausfuellt, muss sehen, wo er steht; der Entwurf hat dafuer keine
       Vorlage, weil er kein Formular kennt.
   ========================================================================== */

/* --------------------------------------------------- Der Formularbereich */

.rd-formular {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	--rd-wellenfarbe: var(--rd-gelb);
	padding: calc(96px * var(--rd-zoom)) 0 calc(120px * var(--rd-zoom));
}

/* HINTER DEM KNAPPEN VORSPANN (14.09.2026, siehe .rd-hero-knapp): 36px
   Titelrand + 44px Abschnittsrand + 96px hier waren 176px Luft zwischen
   Ueberschrift und Karte, jetzt 0 + 32 + 48. Am Nachbarn (+) verankert, nicht
   an .rd-formular selbst: dieselbe Klasse traegt der Formularbereich hinter
   dem vollen Vorspann, und dort ist der Abstand richtig. Die Regel steht
   HINTER der Grundregel - tests/test_redesign_startseite.php liest die erste
   Regel, die auf ".rd-formular {" endet, als die des Abschnitts. */
.rd-hero-knapp + .rd-formular {
	padding-top: calc(48px * var(--rd-zoom));
}

.rd-formular-karte {
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	padding: calc(44px * var(--rd-zoom)) calc(48px * var(--rd-zoom));
}

.rd-formular-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.4rem, calc(20px + .72vw), 1.9rem) * var(--rd-zoom));
	line-height: 1.25;
	color: var(--rd-text);
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-formular-karte p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.06rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text-grau);
	margin: 0 0 calc(18px * var(--rd-zoom));
}

/* Aufzaehlung in der Karte (Kundenbereich, 17.08.2026). Sie braucht eine
   eigene Regel, weil reset.css `list-style: none` setzt - ohne sie stuenden
   die Punkte als linksbuendiger Fliesstext untereinander, und die Seite saehe
   nicht schlicht aus, sondern kaputt. Absichtlich als Nachfahrenselektor wie
   `.rd-formular-karte p` daneben und nicht als eigene Klasse: es ist dieselbe
   Aussage - "so sieht Text in dieser Karte aus". */
.rd-formular-karte ul {
	list-style: disc;
	padding-left: calc(22px * var(--rd-zoom));
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-formular-karte ul li {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.06rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text-grau);
	margin: 0 0 calc(6px * var(--rd-zoom));
}

/* ------------------------------------------------------------- Meldungen */

/* Fehler und Bestaetigung tragen NICHT nur eine Farbe, sondern auch ein
   Zeichen und eine Beschriftung fuer Vorleser. Rot allein ist keine Aussage:
   etwa jeder zwoelfte Mann sieht es nicht als das, was es sagen soll. */
.rd-meldung {
	display: flex;
	align-items: flex-start;
	gap: calc(14px * var(--rd-zoom));
	border-radius: calc(16px * var(--rd-zoom));
	padding: calc(18px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	margin: 0 0 calc(26px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1.02rem * var(--rd-zoom));
	line-height: 1.6;
}

.rd-meldung .material-symbols-outlined {
	flex: 0 0 auto;
	font-size: calc(24px * var(--rd-zoom));
	line-height: 1.45;
}

.rd-meldung-fehler {
	background: #FDECEA;
	color: #8C2F26;
	border: 1px solid #F2C7C2;
}

.rd-meldung-gut {
	background: var(--rd-tuerkis-hell);
	color: var(--rd-tuerkis-dunkel);
	border: 1px solid #B6E6ED;
}

/* ---------------------------------------------------------- Eingabefelder */

.rd-feld {
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-feld label {
	display: block;
	font-family: var(--rd-sans-fett);
	font-size: calc(.98rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0 0 calc(8px * var(--rd-zoom));
}

.rd-feld input,
.rd-feld select,
.rd-feld textarea {
	width: 100%;
	box-sizing: border-box;
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.06rem * var(--rd-zoom));
	color: var(--rd-text);
	background: var(--rd-weiss);
	border: 1px solid #E2E0DB;
	border-radius: calc(14px * var(--rd-zoom));
	padding: calc(15px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
}

.rd-feld input::placeholder {
	color: #B4B8BA;
	opacity: 1;
}

.rd-feld input:focus,
.rd-feld select:focus,
.rd-feld textarea:focus {
	outline: none;
	border-color: var(--rd-gelb);
	box-shadow: 0 0 0 calc(3px * var(--rd-zoom)) rgba(253, 198, 23, .28);
}

/* Der Fokusrahmen fuer alles, was man antippen kann. Ohne ihn ist die Seite
   mit der Tastatur nicht bedienbar - man sieht schlicht nicht, wo man ist. */
.rd-formular a:focus-visible,
.rd-formular button:focus-visible,
.rd-formular input:focus-visible,
.rd-formular select:focus-visible,
.rd-formular textarea:focus-visible {
	outline: calc(3px * var(--rd-zoom)) solid var(--rd-tuerkis-dunkel);
	outline-offset: calc(2px * var(--rd-zoom));
}

.rd-hinweis {
	font-family: var(--rd-sans-leicht);
	font-size: calc(.92rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: calc(14px * var(--rd-zoom)) 0 0;
}

/* Ein Verweis im Hinweis sieht aus wie einer (Kevin, 21.09.2026, "lass sie
   Dir noch einmal schicken": "sichtbar als hyperlink machen, sonst drueckt
   man da versehentlich drauf bzw. findet es nicht"). Das Grundmuster `a`
   nimmt jedem Verweis Farbe und Strich; hier bekommt er beides zurueck,
   wie in .rd-recht-text und .rd-zurueck. */
.rd-hinweis a {
	color: var(--rd-tuerkis-dunkel);
	text-decoration: underline;
	text-underline-offset: .18em;
}

.rd-hinweis a:hover,
.rd-hinweis a:focus-visible {
	color: var(--rd-text);
}

/* ------------------------------------------------------- Kleinere Knoepfe */

/* Der Regelknopf des Entwurfs ist fuer eine Handlung je Bildschirm gebaut.
   Hier stehen drei in einer Karte. */
.rd-btn-klein {
	gap: calc(10px * var(--rd-zoom));
	padding: calc(14px * var(--rd-zoom)) calc(26px * var(--rd-zoom));
	font-size: calc(1.02rem * var(--rd-zoom));
}

/* Der einzige zerstoerende Knopf im ganzen Entwurf. Er ist bewusst NICHT
   gelb: Widerruf und "Buchungen anzeigen" duerfen nicht gleich aussehen. */
.rd-btn-warnung {
	background: var(--rd-weiss);
	color: #A3342A;
	border: 1px solid #E6B6AF;
	box-shadow: var(--rd-schatten-pille);
}

.rd-btn-warnung:hover {
	background: #A3342A;
	color: var(--rd-weiss);
	border-color: #A3342A;
}

/* Und der eine, der wirklich storniert - auf der Bestaetigungsseite, wo er
   allein steht und keine Verwechslung mehr moeglich ist. */
.rd-btn-warnung-voll {
	background: #A3342A;
	color: var(--rd-weiss);
	border: 1px solid #A3342A;
	box-shadow: 0 6px 16px rgba(163, 52, 42, .24);
}

.rd-btn-warnung-voll:hover {
	background: #8C2B22;
}

/* ------------------------------------------------------- Die Buchungen */

.rd-posten {
	border: 1px solid #E9E7E1;
	border-radius: calc(20px * var(--rd-zoom));
	padding: calc(24px * var(--rd-zoom)) calc(26px * var(--rd-zoom));
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-posten-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.18rem * var(--rd-zoom));
	line-height: 1.35;
	color: var(--rd-text);
	margin: 0 0 calc(8px * var(--rd-zoom));
}

.rd-termine {
	font-family: var(--rd-sans-leicht);
	font-size: calc(.98rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-termine-marke {
	font-family: var(--rd-sans-fett);
	color: var(--rd-tuerkis-dunkel);
}

.rd-aktionen {
	display: flex;
	flex-wrap: wrap;
	gap: calc(10px * var(--rd-zoom));
}

/* Jedes <form> in der Aktionsleiste ist ein eigener Kasten - ohne das
   stehen die Knoepfe untereinander statt nebeneinander. */
.rd-aktionen form {
	display: contents;
}

/* Der Kasten "Ihr aktueller Termin" - er zeigt den Stand VOR der Handlung
   und ist deshalb absichtlich blass: er ist Auskunft, keine Auswahl. */
.rd-jetzt {
	background: var(--rd-gelb-hell);
	border: 1px dashed #E8D6A8;
	border-radius: calc(16px * var(--rd-zoom));
	padding: calc(18px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	margin: 0 0 calc(24px * var(--rd-zoom));
}

.rd-jetzt-marke {
	font-family: var(--rd-sans-fett);
	font-size: calc(.8rem * var(--rd-zoom));
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--rd-tuerkis-dunkel);
	margin: 0 0 calc(6px * var(--rd-zoom));
}

.rd-jetzt-wert {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.02rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text);
	margin: 0;
}

/* ---------------------------------------------------- Die Terminauswahl */

/* Ein anklickbares <label> um den Radioknopf: die ganze Zeile waehlt aus,
   nicht nur der Punkt. Auf dem Telefon ist das der Unterschied zwischen
   "geht" und "geht irgendwie". */
.rd-wahl {
	display: flex;
	align-items: flex-start;
	gap: calc(14px * var(--rd-zoom));
	border: 1px solid #E9E7E1;
	border-radius: calc(16px * var(--rd-zoom));
	padding: calc(16px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	margin: 0 0 calc(12px * var(--rd-zoom));
	cursor: pointer;
	transition: border-color .15s ease, background-color .15s ease;
}

.rd-wahl:hover {
	border-color: var(--rd-gelb);
}

/* :has() traegt die Markierung des gewaehlten Termins. Faellt es aus, bleibt
   der Radioknopf selbst sichtbar - die Auswahl ist dann schlichter zu sehen,
   aber nie unsichtbar. */
.rd-wahl:has(input:checked) {
	border-color: var(--rd-gelb);
	background: var(--rd-gelb-hell);
}

.rd-wahl input {
	flex: 0 0 auto;
	margin: calc(4px * var(--rd-zoom)) 0 0;
	accent-color: var(--rd-gelb-dunkel);
	width: calc(20px * var(--rd-zoom));
	height: calc(20px * var(--rd-zoom));
}

.rd-wahl-text {
	flex: 1 1 auto;
}

.rd-wahl-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0 0 calc(4px * var(--rd-zoom));
}

.rd-wahl .rd-termine {
	margin: 0;
}

.rd-frei {
	font-family: var(--rd-sans-fett);
	color: var(--rd-tuerkis-dunkel);
}

/* ------------------------------------------------------------ Rueckweg */

.rd-zurueck {
	display: inline-flex;
	align-items: center;
	gap: calc(8px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
	text-decoration: underline;
	text-underline-offset: .18em;
	margin-top: calc(22px * var(--rd-zoom));
}

.rd-zurueck:hover {
	color: var(--rd-text);
}

@media (max-width: 1150px) {
	.rd-formular {
		padding: calc(76px * var(--rd-zoom)) 0 calc(92px * var(--rd-zoom));
	}

	.rd-formular-karte {
		padding: calc(32px * var(--rd-zoom)) calc(30px * var(--rd-zoom));
	}
}

@media (max-width: 600px) {
	.rd-formular-karte {
		padding: calc(26px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	}

	/* Drei Knoepfe nebeneinander gehen auf 360 Pixel nicht auf; gestapelt
	   bleibt jeder gross genug zum Treffen. */
	.rd-aktionen {
		flex-direction: column;
		align-items: stretch;
	}

	.rd-aktionen .rd-btn {
		width: 100%;
	}
}

/* ==========================================================================
   Landingpage (landingpage_neu.php) und ihre Buchungsstrecke
   ==========================================================================

   VORLAGE, NICHT EINZELSEITE. Die Seite dazu traegt ihren gesamten Inhalt in
   EINEM Array `$lp` am Dateikopf; spaeter kommt derselbe Inhalt aus der
   Datenbank, wenn Bettina einen Kurs anlegt (Ueberschrift, Beschreibung,
   Ablauf, FAQ). Das heisst fuer dieses Stylesheet zweierlei:

     * Kein Abschnitt darf davon leben, dass ein anderer da ist. Fehlt einem
       Kurs die FAQ, rendert die Seite den Abschnitt gar nicht - Abstaende
       gehoeren deshalb an den Abschnitt selbst, nie als `+`-Nachbarregel.
     * Keine Zahl im Markup. Auch die vier Kreise der Buchungsstrecke
       bekommen ihre Groesse von hier, nicht aus einem style-Attribut.

   Vier Screendesigns liegen zugrunde (Lernerfolg_Redesign auf dem FTP):
   Screendesign_Landingpage_Vorschau.png und die drei Buchungsschritte
   Buchung2/3/4. Was dort NICHT zu sehen war, steht als Kommentar an der
   betreffenden Regel.                                                      */

/* ------------------------------------------------------ 1. Hero der Seite */

/* Die Landingpage benutzt den Hero der Startseite unveraendert weiter und
   ergaenzt nur die Preiszeile darunter. Eine eigene Heroregel waere eine
   zweite Wahrheit fuer dieselbe Gestalt. */
.rd-lp-preiszeile {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: calc(28px * var(--rd-zoom));
	margin-top: calc(36px * var(--rd-zoom));
}

/* Die Pille ueber der Ueberschrift ("STANDORTBESTIMMUNG"). Der Entwurf setzt
   sie in Versalien auf einen hellgelben Grund - dieselbe Familie wie
   .rd-abschnitt-label, aber mit Flaeche, weil sie im Hero auf Creme steht und
   dort sonst verschwindet. */
.rd-lp-marke {
	display: inline-block;
	font-family: var(--rd-sans-fett);
	font-size: calc(.95rem * var(--rd-zoom));
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--rd-text);
	background: var(--rd-gelb-hell);
	border-radius: 999px;
	padding: calc(10px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	margin: 0 0 calc(26px * var(--rd-zoom));
}

/* Die Zielgruppenzeile ("Fuer Schueler" / "Fuer Eltern"). Sie steht in ZEHN
   VON ZEHN Landingpage-Dateien Bettinas als allererste Zeile - ueber der
   Angebotspille, nicht statt ihr. Deshalb bewusst LEISER als .rd-lp-marke:
   ohne Flaeche, kleiner, in der gedeckten Textfarbe. Zwei Pillen
   uebereinander wuerden beide entwerten, und die wichtigere von beiden ist
   der Name des Angebots. */
.rd-lp-zielgruppe {
	font-family: var(--rd-sans-fett);
	font-size: calc(.85rem * var(--rd-zoom));
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--rd-text-leise, var(--rd-text));
	opacity: .75;
	margin: 0 0 calc(12px * var(--rd-zoom));
}

/* "Inklusive Skript: …" in der Angebotskarte. Abgesetzt durch eine Linie
   statt durch eine eigene Flaeche - die Karte hat schon einen Grund, und ein
   Kasten im Kasten macht aus einem Zusatz eine zweite Karte. */
.rd-lp-skript {
	font-size: calc(.95rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text);
	opacity: .9;
	border-top: 1px solid rgba(0, 0, 0, .12);
	margin: calc(22px * var(--rd-zoom)) 0 0;
	padding-top: calc(18px * var(--rd-zoom));
}

/* ------------------------------------------ 2. Ausgangssituation und Ziel */

.rd-lp-lage {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-creme);
	background: var(--rd-gelb-hell);
	padding: calc(120px * var(--rd-zoom)) 0 calc(180px * var(--rd-zoom));
}

/* Zwei Spalten mit einer senkrechten Linie dazwischen. Die Linie ist ein
   Rand an der zweiten Spalte und keine eigene Saeule: eine dritte
   Rasterspalte waere beim Umbruch auf Mobil eine leere Zeile, die man erst
   wieder wegregeln muesste. */
.rd-lp-lage-inner {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: calc(96px * var(--rd-zoom));
	align-items: start;
}

.rd-lp-lage-inner > * + * {
	border-left: 1px solid rgba(253, 198, 23, .55);
	padding-left: calc(96px * var(--rd-zoom));
}

.rd-lp-lage-titel {
	font-family: var(--rd-slab);
	font-size: calc(clamp(1.7rem, calc(22px + 1.1vw), 2.5rem) * var(--rd-zoom));
	line-height: 1.22;
	color: var(--rd-text);
	margin: 0 0 calc(26px * var(--rd-zoom));
}

.rd-lp-fliess {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.12rem * var(--rd-zoom));
	line-height: 1.72;
	color: var(--rd-text-grau);
	margin: 0 0 calc(18px * var(--rd-zoom));
}

/* Der hervorgehobene Einstiegssatz. Im Entwurf ist er fett UND gelb
   unterstrichen - der Unterstrich sitzt eng am Text, deshalb
   `text-decoration` mit eigener Dicke und Abstand statt eines Pseudoelements:
   so folgt er dem Umbruch ueber mehrere Zeilen. */
.rd-lp-mark {
	font-family: var(--rd-sans-fett);
	color: var(--rd-text);
	text-decoration: underline;
	text-decoration-color: var(--rd-gelb);
	text-decoration-thickness: calc(2px * var(--rd-zoom));
	text-underline-offset: calc(4px * var(--rd-zoom));
}

.rd-lp-listentitel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.12rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: calc(26px * var(--rd-zoom)) 0 calc(16px * var(--rd-zoom));
}

/* ------------------------------------------------- 3. Das Einstiegsangebot */

.rd-lp-einstieg {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-gelb-hell);
	background: var(--rd-creme);
	padding: calc(40px * var(--rd-zoom)) 0 calc(150px * var(--rd-zoom));
}

/* Die grosse gelbe Karte. Verlauf wie bei .rd-zitat, damit die beiden
   gelben Flaechen der Seite dieselbe Herkunft haben. */
.rd-lp-karte {
	position: relative;
	overflow: hidden;
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, calc(470px * var(--rd-zoom)));
	gap: calc(56px * var(--rd-zoom));
	align-items: center;
	background: linear-gradient(160deg, var(--rd-gelb) 0%, var(--rd-gelb-dunkel) 100%);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	padding: calc(52px * var(--rd-zoom));
}

/* Die dunkle Pille auf dem Gelb ("EINSTIEGSANGEBOT"). */
.rd-lp-karte-marke {
	display: inline-block;
	font-family: var(--rd-sans-fett);
	font-size: calc(.92rem * var(--rd-zoom));
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--rd-gelb);
	background: var(--rd-braun);
	border-radius: 999px;
	padding: calc(9px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-lp-karte-titel {
	font-family: var(--rd-slab);
	font-size: calc(clamp(1.8rem, calc(24px + 1.1vw), 2.6rem) * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text);
	margin: 0 0 calc(28px * var(--rd-zoom));
}

.rd-lp-karte-fuss {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: calc(28px * var(--rd-zoom));
	margin-top: calc(34px * var(--rd-zoom));
}

.rd-lp-karte-bild {
	margin: 0;
}

.rd-lp-karte-bild img {
	display: block;
	width: 100%;
	height: 100%;
	max-height: calc(330px * var(--rd-zoom));
	object-fit: cover;
	border-radius: calc(20px * var(--rd-zoom));
}

/* -------------------------------------------------- Die Hakenaufzaehlung */

/* Eine Liste, deren Punkte runde Scheiben mit einem Haken tragen. Sie kommt
   im Entwurf DREIMAL vor und jedes Mal in einer anderen Farbe: dunkel auf
   dem gelben Einstiegsangebot, gelb in der Uebersicht, tuerkis bei "Das
   erwartet Dich". Deshalb eine Grundregel und zwei Abwandlungen - drei
   Abschriften waeren drei Stellen, an denen der Abstand auseinanderlaeuft. */
.rd-lp-haken {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-lp-haken li {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: calc(14px * var(--rd-zoom));
	align-items: start;
	font-family: var(--rd-sans);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.55;
	color: var(--rd-text);
	margin-bottom: calc(14px * var(--rd-zoom));
}

.rd-lp-haken li:last-child {
	margin-bottom: 0;
}

.rd-lp-haken .rd-lp-scheibe {
	display: grid;
	place-items: center;
	width: calc(24px * var(--rd-zoom));
	height: calc(24px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-braun);
	color: var(--rd-gelb);
	/* Die Scheibe sitzt auf der ersten Textzeile, nicht auf deren Oberkante:
	   ohne den Versatz haengt sie bei zweizeiligen Punkten sichtbar zu hoch. */
	margin-top: calc(3px * var(--rd-zoom));
}

.rd-lp-haken .rd-lp-scheibe .material-symbols-outlined {
	font-size: calc(16px * var(--rd-zoom));
	line-height: 1;
}

.rd-lp-haken-gelb .rd-lp-scheibe {
	background: var(--rd-gelb);
	color: var(--rd-braun);
}

.rd-lp-haken-tuerkis .rd-lp-scheibe {
	background: var(--rd-tuerkis);
	color: var(--rd-weiss);
}

/* Die Gegenrichtung: ein graues Kreuz statt eines Hakens ("Sie ist nicht
   das Richtige, wenn"). Eigene Klasse statt einer Farbabwandlung, weil sich
   hier nicht die Farbe aendert, sondern die Aussage. */
.rd-lp-kreuze .rd-lp-scheibe {
	background: #E4E6E7;
	color: var(--rd-text-grau);
}

/* ------------------------------------------------------- 4. So laeuft es ab */

.rd-lp-weg {
	background: var(--rd-gelb-hell);
	padding: calc(30px * var(--rd-zoom)) 0 calc(120px * var(--rd-zoom));
	text-align: center;
}

/* Die vier Kreise sind die Reihe aus dem Abschnitt "Mein Ansatz" der
   Startseite (.rd-schritte). Hier tragen sie KEINE Ueberschrift, nur Text -
   der Entwurf setzt die Erklaerung direkt unter das Zeichen. Ohne diese
   Regel klebte der Text an der Scheibe, weil der Abstand dort am Titel
   haengt. */
.rd-lp-weg .rd-schritt-text {
	margin-top: calc(22px * var(--rd-zoom));
}

/* --------------------------------------------------- 5. Fuer wen geeignet */

.rd-lp-eignung {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-gelb);
	background: var(--rd-gelb-hell);
	padding: calc(30px * var(--rd-zoom)) 0 calc(190px * var(--rd-zoom));
	text-align: center;
}

.rd-lp-eignungkarten {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: calc(34px * var(--rd-zoom));
	/* Die beiden Karten stehen im Entwurf nicht ueber die volle Breite,
	   sondern in der Mitte - und OBEN buendig, nicht gleich hoch: die rechte
	   traegt im Entwurf nur einen Punkt und ist sichtbar kuerzer. */
	align-items: start;
	max-width: calc(1180px * var(--rd-zoom));
	margin: calc(54px * var(--rd-zoom)) auto 0;
	text-align: left;
}

.rd-lp-ekarte {
	background: var(--rd-weiss);
	border-radius: calc(22px * var(--rd-zoom));
	box-shadow: var(--rd-schatten-karte);
	/* Der farbige Balken sitzt OBEN auf der Karte und ist im Entwurf gerade,
	   nicht gerundet. Ein border-top wuerde von border-radius mitgerundet -
	   deshalb ein eigenes Element ueber die volle Breite. */
	overflow: hidden;
	padding: 0;
}

.rd-lp-ekarte::before {
	content: '';
	display: block;
	height: calc(6px * var(--rd-zoom));
}

/* Beide Farben ausdruecklich, keine als Vorgabe: "passt" und "passt nicht"
   sind zwei benannte Faelle, und wer einen dritten braucht, sieht hier, wo
   er ihn eintraegt. Stuende Gelb als Vorgabe an .rd-lp-ekarte, waere eine
   Karte ohne Abwandlung stillschweigend die Ja-Karte. */
.rd-lp-ekarte-ja::before {
	background: var(--rd-gelb);
}

.rd-lp-ekarte-nein::before {
	background: var(--rd-tuerkis);
}

.rd-lp-ekarte-inhalt {
	padding: calc(34px * var(--rd-zoom)) calc(38px * var(--rd-zoom)) calc(38px * var(--rd-zoom));
}

.rd-lp-ekarte-titel {
	font-family: var(--rd-slab);
	font-size: calc(1.35rem * var(--rd-zoom));
	line-height: 1.35;
	color: var(--rd-text);
	margin: 0 0 calc(22px * var(--rd-zoom));
}

/* ------------------------------------------------------- 6. Das gelbe Band */

.rd-lp-band {
	position: relative;
	overflow: hidden;
	background: var(--rd-gelb);
	padding: calc(120px * var(--rd-zoom)) 0 calc(130px * var(--rd-zoom));
	text-align: center;
}

.rd-lp-band-titel {
	font-family: var(--rd-slab);
	font-size: calc(clamp(1.9rem, calc(24px + 1.5vw), 3.1rem) * var(--rd-zoom));
	line-height: 1.22;
	color: var(--rd-text);
	margin: 0 auto calc(30px * var(--rd-zoom));
	max-width: calc(900px * var(--rd-zoom));
}

.rd-lp-band-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.15rem * var(--rd-zoom));
	line-height: 1.75;
	color: var(--rd-text);
	max-width: calc(900px * var(--rd-zoom));
	margin: 0 auto;
}

.rd-lp-band-text strong {
	font-family: var(--rd-sans-fett);
}

/* ----------------------------------------------------- 7. Wer dahintersteht */

.rd-lp-hallo {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-gelb);
	background: var(--rd-creme);
	padding: calc(130px * var(--rd-zoom)) 0 calc(170px * var(--rd-zoom));
}

.rd-lp-hallo-inner {
	display: grid;
	grid-template-columns: minmax(0, calc(620px * var(--rd-zoom))) minmax(0, 1fr);
	gap: calc(90px * var(--rd-zoom));
	align-items: center;
}

.rd-lp-hallo-bild {
	position: relative;
	margin: 0;
}

.rd-lp-hallo-titel {
	font-family: var(--rd-slab);
	font-size: calc(clamp(1.9rem, calc(24px + 1.4vw), 3rem) * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text);
	margin: 0 0 calc(30px * var(--rd-zoom));
}

/* Die Kundenstimme sitzt im Entwurf als weisse Karte ueber der unteren
   linken Kante des Fotos. Sie ist ein EIGENES Feld der Vorlage und faellt
   ganz weg, wenn zu einem Kurs keine Stimme hinterlegt ist - deshalb darf
   der Abstand des Fotos nicht an ihr haengen. */
.rd-lp-stimme {
	position: relative;
	background: var(--rd-weiss);
	border-radius: calc(20px * var(--rd-zoom));
	box-shadow: var(--rd-schatten-karte);
	padding: calc(28px * var(--rd-zoom)) calc(32px * var(--rd-zoom));
	margin: calc(-70px * var(--rd-zoom)) auto 0;
	max-width: calc(470px * var(--rd-zoom));
}

.rd-lp-stimme-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.1rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-lp-stimme-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1rem * var(--rd-zoom));
	line-height: 1.65;
	color: var(--rd-text-grau);
	margin: calc(10px * var(--rd-zoom)) 0 calc(16px * var(--rd-zoom));
}

.rd-lp-stimme-name {
	font-family: var(--rd-sans-fett);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0;
}

.rd-lp-stimme-rolle {
	font-family: var(--rd-sans-leicht);
	font-size: calc(.95rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	margin: 0;
}

/* --------------------------------------------------- 8. Die Buchungsstrecke */

.rd-lp-buchung {
	position: relative;
	/* `clip` schneidet den Blob ab, ohne den Abschnitt zum Scrollcontainer
	   zu machen; `hidden` steht als Rueckfall DAVOR fuer Browser ohne `clip`
	   (Safari vor 16). Seit die Strecke im Fenster steht (14.09.2026), haengt
	   daran keine klebende Leiste mehr - die Reihenfolge bleibt trotzdem die
	   Regel, damit ein spaeteres sticky im Abschnitt nicht still scheitert. */
	overflow: hidden;
	overflow: clip;
	background: var(--rd-gelb);
	padding: calc(110px * var(--rd-zoom)) 0 calc(120px * var(--rd-zoom));
	text-align: center;
}

.rd-lp-buchung .rd-abschnitt-label {
	color: var(--rd-braun);
}

.rd-lp-buchung-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.08rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text);
	max-width: calc(620px * var(--rd-zoom));
	margin: 0 auto calc(32px * var(--rd-zoom));
}

.rd-lp-buchung-knopf {
	margin: 0;
}

/* "Aktuell keine Termine verfuegbar" an der Stelle des Kaufknopfs (Kevin,
   14.09.2026) - im Hero, auf der Angebotskarte und im Buchungsabschnitt. Die
   Form des Knopfs (Rundung, Hoehe), aber ohne Hand und ohne Farbe; auf der
   dunklen Karte die helle Fassung. */
.rd-lp-keine-termine {
	display: inline-block;
	margin: 0;
	font-family: var(--rd-sans-fett);
	font-size: calc(1rem * var(--rd-zoom));
	line-height: 1.4;
	color: var(--rd-text-grau);
	background: var(--rd-weiss);
	border: 1px solid #E7E3D8;
	border-radius: 999px;
	padding: calc(12px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
}

.rd-lp-keine-termine-hell {
	color: var(--rd-weiss);
	background: rgba(255, 255, 255, .16);
	border-color: rgba(255, 255, 255, .45);
}

/* DAS BUCHUNGSFENSTER (Kevin, 14.09.2026: "die buchungsstrecke kompakt in
   so einem fenster wie beim normalen kursbuchen verpackt"). Die Huelle ist
   die des Dialogs auf mein-angebot.html (.rd-dialog: fixed, dunkle Flaeche,
   Karte oben haengend, die Huelle scrollt) - als EIGENE Klasse, weil
   `.rd-dialog p` jeden Absatz grau faerbt und die Absaetze der Tafeln
   ueberschriebe. Die Karte ist .rd-dialog-karte, etwas breiter als dort,
   weil der Kalender sieben Spalten braucht. Sichtbar ueber `hidden`, wie
   die Tafeln darin; die [hidden]-Regel steht dabei, weil display: flex sie
   sonst schluege (tests/test_hidden.php). */
.rd-lp-dialog {
	/* AM SCHREIBTISCH KOMPAKTER (Kevin, 14.09.2026: "am pc ist die
	   Buchungsstrecke jetzt etwas ueberdimensioniert"). Die Tafeln sind fuer
	   eine 1000 Pixel breite Karte auf dem gelben Abschnitt gezeichnet; im
	   Fenster steht derselbe Inhalt auf einer Karte wie der Buchungsdialog.
	   Der Regler wird deshalb HIER, fuer das Fenster allein, kleiner gesetzt
	   (alle Masse darin haengen an ihm) - das Fenster hat keinen Entwurf, den
	   --rd-zoom: 1 wiederherstellen muesste. Am Handy gilt der Regler der
	   Seite weiter (unten), damit Felder und Knoepfe tippbar bleiben. */
	--rd-zoom: .78;
	position: fixed;
	inset: 0;
	z-index: 1000;
	display: flex;
	align-items: flex-start;
	justify-content: center;
	overflow-y: auto;
	padding: calc(40px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	background: rgba(27, 27, 27, .55);
	text-align: left;
}

.rd-lp-dialog[hidden] {
	display: none;
}

.rd-lp-dialog .rd-dialog-karte {
	max-width: calc(880px * var(--rd-zoom));
	padding: calc(36px * var(--rd-zoom)) calc(44px * var(--rd-zoom));
}

.rd-lp-dialog .rd-dialog-titel {
	text-align: center;
	padding: 0 calc(40px * var(--rd-zoom));
}

/* Der Fenstertitel bekommt beim Oeffnen den Fokus (tabindex="-1"), wie der
   Tafeltitel beim Schrittwechsel: ohne Rahmen nach dem Klick, mit Rahmen
   nach der Tastatur. */
.rd-lp-dialog .rd-dialog-titel:focus {
	outline: none;
}

.rd-lp-dialog .rd-dialog-titel:focus-visible {
	outline: calc(3px * var(--rd-zoom)) solid var(--rd-tuerkis);
	outline-offset: calc(4px * var(--rd-zoom));
}

/* Solange das Fenster offen ist, scrollt die Seite dahinter nicht mit. */
body.rd-lp-dialog-offen {
	overflow: hidden;
}

/* ENTWURFSHINWEIS. Er verschwindet, sobald die Zahlung angebunden ist -
   und bis dahin muss er da sein: eine Strecke, die aussieht, als koennte
   man damit buchen, wird sonst genau dafuer gehalten. */
.rd-lp-entwurf {
	display: inline-block;
	font-family: var(--rd-sans);
	font-size: calc(.98rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-braun);
	background: rgba(255, 255, 255, .55);
	border: 1px dashed var(--rd-braun);
	border-radius: calc(14px * var(--rd-zoom));
	padding: calc(14px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	max-width: calc(760px * var(--rd-zoom));
	margin: 0 auto calc(40px * var(--rd-zoom));
}

/* Die vier nummerierten Kreise. Sie sind Knoepfe, keine Zahlen in einem
   div: im Entwurf springt man ueber sie zurueck, und ein Sprungziel, das
   man nur mit der Maus trifft, waere fuer die Tastatur unerreichbar. */
.rd-lp-stufen {
	display: flex;
	align-items: flex-start;
	justify-content: center;
	gap: 0;
	list-style: none;
	margin: 0 auto calc(32px * var(--rd-zoom));
	padding: 0;
}

/* FESTE BREITE, und die ist keine Bequemlichkeit: die vier Beschriftungen
   sind verschieden lang ("Termin" gegen "Deine Daten"), und ohne feste
   Breite bestimmen sie den Abstand der Kreise. Die Kreise staenden dann
   ungleichmaessig, und der Verbindungsstrich - der zwischen zwei KREISEN
   liegen soll - traefe die Luecke zwischen zwei BESCHRIFTUNGEN. */
.rd-lp-stufe {
	position: relative;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: calc(10px * var(--rd-zoom));
	width: calc(110px * var(--rd-zoom));
	text-align: center;
}

.rd-lp-stufe-knopf {
	display: grid;
	place-items: center;
	width: calc(46px * var(--rd-zoom));
	height: calc(46px * var(--rd-zoom));
	border: 0;
	border-radius: 50%;
	/* Auf der weissen Karte des Fensters (14.09.2026): blassgelb wartend,
	   gelb erledigt, dunkel aktiv - vorher weiss/braun auf dem gelben
	   Abschnitt. */
	background: var(--rd-gelb-hell);
	color: var(--rd-text-grau);
	font-family: var(--rd-sans-fett);
	font-size: calc(1.05rem * var(--rd-zoom));
	cursor: pointer;
	transition: background .18s ease, color .18s ease;
}

/* Erledigte Schritte stehen gelb, der aktuelle dunkel. Zwei Zustaende, zwei
   Klassen - `disabled` waere hier falsch: zurueckspringen soll man duerfen. */
.rd-lp-stufe-erledigt .rd-lp-stufe-knopf {
	background: var(--rd-gelb);
	color: var(--rd-text);
}

.rd-lp-stufe-aktiv .rd-lp-stufe-knopf {
	background: var(--rd-text);
	color: var(--rd-weiss);
}

.rd-lp-stufe-text {
	font-family: var(--rd-sans);
	font-size: calc(.92rem * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-lp-stufe-aktiv .rd-lp-stufe-text {
	font-family: var(--rd-sans-fett);
	color: var(--rd-text);
}

/* Der Strich zwischen zwei Kreisen. Er haengt am zweiten Listenpunkt und
   nicht als eigenes Element dazwischen: so gibt es ihn vor dem ersten Kreis
   gar nicht, und keine Zahl im Markup muss wissen, wie viele Schritte es
   gibt. Gerechnet mit den Zahlen darueber: der Punkt ist 110 breit, der
   Kreis 46 - links und rechts vom Kreis bleiben also je 32. Der Strich
   beginnt an der linken Kante DIESES Kreises (right: 50% + 23) und ist
   32 + 32 = 64 lang, endet also an der rechten Kante des vorigen. */
.rd-lp-stufe + .rd-lp-stufe::before {
	content: '';
	position: absolute;
	top: calc(22px * var(--rd-zoom));
	right: calc(50% + 23px * var(--rd-zoom));
	width: calc(64px * var(--rd-zoom));
	height: calc(2px * var(--rd-zoom));
	background: rgba(50, 38, 0, .16);
}

/* Text, den nur ein Vorleseprogramm bekommt. Die Nummer im Kreis heisst fuer
   das Auge "Schritt 2"; vorgelesen waere sie nur "2" - ohne die Ergaenzung
   wuesste niemand, wovon die Rede ist. Eigene Klasse statt `hidden`: was
   `hidden` traegt, liest auch das Vorleseprogramm nicht. */
.rd-lp-stufe-versteckt {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* Das <fieldset> um die Termine traegt im Browser von Haus aus Rahmen und
   Innenabstand. Beides weg - die Gruppierung ist hier eine Aussage fuer das
   Vorleseprogramm, keine Gestalt. */
.rd-lp-slots-feld {
	border: 0;
	margin: 0;
	padding: 0;
	min-width: 0;
}

/* Zwei Felder nebeneinander (Vorname/Nachname, PLZ/Ort). Der Entwurf setzt
   sie so; gestapelt waere das Formular doppelt so lang wie noetig. */
.rd-lp-paar {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 0 calc(20px * var(--rd-zoom));
}

/* Jeder Schritt steht im Fenster; die Karte ist die des Fensters, die Tafel
   selbst traegt keinen Rahmen mehr (bis 14.09.2026 war sie die weisse Karte
   auf dem gelben Abschnitt). DER SCHRITTWECHSEL BEGINNT OBEN IM FENSTER
   (Kevin, 13.09.2026: "da scrollt man viel hoch und runter und verliert
   schnell den ueberblick wo man jetzt was eingeben soll") - das Skript
   setzt das Fenster auf scrollTop 0, ein Sprungziel braucht die Tafel
   nicht. */
.rd-lp-tafel {
	margin: 0;
	text-align: left;
}

/* Der Titel bekommt nach dem Schrittwechsel den Fokus (tabindex="-1"),
   damit Tastatur und Vorleseprogramm dort weitermachen, wo das Auge ist.
   Nach einem Klick soll das keinen Rahmen zeichnen, nach einem Tastendruck
   schon - genau die Unterscheidung, fuer die es :focus-visible gibt. */
.rd-lp-tafel-titel:focus {
	outline: none;
}

.rd-lp-tafel-titel:focus-visible {
	outline: calc(3px * var(--rd-zoom)) solid var(--rd-tuerkis);
	outline-offset: calc(4px * var(--rd-zoom));
}

.rd-lp-tafel-kopf {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: calc(16px * var(--rd-zoom));
}

.rd-lp-tafel-titel {
	font-family: var(--rd-slab);
	font-size: calc(1.7rem * var(--rd-zoom));
	line-height: 1.25;
	color: var(--rd-text);
	margin: 0;
}

.rd-lp-tafel-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	margin: calc(8px * var(--rd-zoom)) 0 calc(26px * var(--rd-zoom));
}

/* Die freien Termine. Radioknoepfe, keine Knoepfe mit JavaScript-Zustand:
   eine Auswahl aus einer Menge ist genau das, wofuer es Radioknoepfe gibt -
   Tastatur, Vorleseprogramm und das Formular kennen sie ohne Zutun. */
/* ============================ DER MONATSKALENDER (10.09.2026) =============
   Kevin: "theoretisch muesste das ht ein kleinrr kalender sein wo die tage mit
   dreien slots gelb markiert sind und wenn man auf einennfreien slot klickt
   werden einem die zeiten angezeigt."

   ER STEHT IM KARTENRAHMEN DES ENTWURFS und ersetzt allein die Auswahl darin -
   die Kachelliste `.rd-lp-slots` darunter bleibt fuer jedes Angebot mit
   eigenen Terminen. Gelb ist hier kein Schmuck, sondern die Aussage: nur ein
   gelber Tag hat freie Zeiten, und nur er ist anklickbar.

   DIE FARBEN SIND DIE DES HAUSES, keine neuen Tokens: `--rd-gelb-hell` fuer
   die freie Zelle, `--rd-gelb` fuer die geoeffnete, `--rd-tuerkis` fuer die
   getroffene Wahl - genau wie `.rd-lp-slot:has(input:checked)` daneben. Ein
   zweiter Gelbton waere dieselbe Farbe ein zweites Mal. */
.rd-lp-kal-feld {
	margin-top: calc(24px * var(--rd-zoom));
}

.rd-lp-kal-kopf {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: center;
	gap: calc(12px * var(--rd-zoom));
	margin-bottom: calc(14px * var(--rd-zoom));
}

.rd-lp-kal-monat {
	text-align: center;
	font-family: var(--rd-sans-fett);
	font-size: calc(1.1rem * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-lp-kal-pfeil {
	display: grid;
	place-items: center;
	width: calc(40px * var(--rd-zoom));
	height: calc(40px * var(--rd-zoom));
	border: 1px solid #E7E3D8;
	border-radius: 50%;
	background: var(--rd-weiss);
	color: var(--rd-text);
	cursor: pointer;
}

.rd-lp-kal-pfeil:hover:not(:disabled) {
	background: var(--rd-gelb-hell);
}

/* EIN PFEIL AM RAND DER SPANNE WIRD BLASS UND BLEIBT STEHEN, statt zu
   verschwinden. Ein Knopf, der sich wegnimmt, laesst den Kopf springen - und
   der Leser sucht ihn beim naechsten Monat an der falschen Stelle. */
.rd-lp-kal-pfeil:disabled {
	opacity: .35;
	cursor: default;
}

.rd-lp-kal-wochentage,
.rd-lp-kal-raster {
	display: grid;
	grid-template-columns: repeat(7, minmax(0, 1fr));
	gap: calc(6px * var(--rd-zoom));
}

.rd-lp-kal-wochentage {
	margin-bottom: calc(6px * var(--rd-zoom));
	font-family: var(--rd-sans-leicht);
	font-size: calc(.82rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	text-align: center;
}

.rd-lp-kal-tag,
.rd-lp-kal-luecke {
	display: grid;
	place-items: center;
	/* Quadratisch ueber das Seitenverhaeltnis statt ueber eine feste Hoehe:
	   das Raster wird schmaler, die Zellen bleiben Quadrate. */
	aspect-ratio: 1 / 1;
	max-width: 100%;
	border-radius: calc(10px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(.95rem * var(--rd-zoom));
}

.rd-lp-kal-tag-leer {
	color: #BDB8AC;
	background: transparent;
}

.rd-lp-kal-tag-frei {
	border: 1px solid var(--rd-gelb-dunkel);
	background: var(--rd-gelb-hell);
	color: var(--rd-braun);
	font-family: var(--rd-sans-fett);
	cursor: pointer;
}

.rd-lp-kal-tag-frei:hover {
	background: var(--rd-gelb);
}

.rd-lp-kal-tag-frei.ist-offen {
	background: var(--rd-gelb);
	box-shadow: 0 0 0 calc(2px * var(--rd-zoom)) var(--rd-gelb-dunkel);
}

.rd-lp-kal-tag-frei:focus-visible {
	outline: calc(3px * var(--rd-zoom)) solid var(--rd-tuerkis);
	outline-offset: calc(2px * var(--rd-zoom));
}

.rd-lp-kal-hinweis,
.rd-lp-kal-zeittitel {
	margin: calc(16px * var(--rd-zoom)) 0 calc(8px * var(--rd-zoom));
	font-family: var(--rd-sans-leicht);
	font-size: calc(.95rem * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-lp-kal-zeittitel {
	font-family: var(--rd-sans-fett);
	color: var(--rd-text);
}

.rd-lp-kal-zeitliste {
	display: flex;
	flex-wrap: wrap;
	gap: calc(10px * var(--rd-zoom));
	margin: 0;
	padding: 0;
	list-style: none;
}

.rd-lp-kal-zeit {
	display: inline-flex;
	position: relative;
	align-items: center;
	background: var(--rd-weiss);
	border: 1px solid #E7E3D8;
	border-radius: calc(12px * var(--rd-zoom));
	padding: calc(10px * var(--rd-zoom)) calc(16px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(.95rem * var(--rd-zoom));
	color: var(--rd-text);
	cursor: pointer;
}

/* Derselbe Griff wie bei `.rd-lp-slot input`: der Radioknopf bleibt im
   Dokument - er TRAEGT die Auswahl -, aber er wird nicht gezeigt und darf die
   Seite nicht waagerecht aufschieben. */
.rd-lp-kal-zeit input {
	position: absolute;
	width: 1px;
	height: 1px;
	opacity: 0;
	pointer-events: none;
}

.rd-lp-kal-zeit:has(input:checked) {
	border-color: var(--rd-tuerkis);
	background: var(--rd-tuerkis-hell);
	font-family: var(--rd-sans-fett);
}

.rd-lp-kal-zeit:has(input:focus-visible) {
	outline: calc(3px * var(--rd-zoom)) solid var(--rd-tuerkis);
	outline-offset: calc(2px * var(--rd-zoom));
}

.rd-lp-kal-fehler {
	margin-top: calc(16px * var(--rd-zoom));
}

.rd-lp-slots {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: calc(16px * var(--rd-zoom));
	margin: calc(24px * var(--rd-zoom)) 0 0;
	padding: 0;
	list-style: none;
}

.rd-lp-slot {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	gap: calc(14px * var(--rd-zoom));
	align-items: center;
	/* Bezugsrahmen fuer den versteckten Radioknopf darin - ohne ihn haengt
	   der an der Seite und schiebt sie waagerecht auf. */
	position: relative;
	background: var(--rd-weiss);
	border: 1px solid #E7E3D8;
	border-radius: calc(16px * var(--rd-zoom));
	padding: calc(16px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	cursor: pointer;
}

.rd-lp-slot input {
	position: absolute;
	width: 1px;
	height: 1px;
	opacity: 0;
	pointer-events: none;
}

.rd-lp-slot:has(input:checked) {
	border-color: var(--rd-tuerkis);
	background: var(--rd-tuerkis-hell);
}

/* Sichtbarer Fokus, obwohl der Radioknopf selbst unsichtbar ist - sonst
   waere die Auswahl mit der Tastatur blind bedienbar. */
.rd-lp-slot:has(input:focus-visible) {
	outline: calc(3px * var(--rd-zoom)) solid var(--rd-tuerkis);
	outline-offset: calc(2px * var(--rd-zoom));
}

.rd-lp-slot-zeichen {
	display: grid;
	place-items: center;
	width: calc(34px * var(--rd-zoom));
	height: calc(34px * var(--rd-zoom));
	border-radius: calc(10px * var(--rd-zoom));
	background: var(--rd-gelb-hell);
	color: var(--rd-braun);
}

.rd-lp-slot:has(input:checked) .rd-lp-slot-zeichen {
	background: var(--rd-tuerkis);
	color: var(--rd-weiss);
}

.rd-lp-slot-tag {
	display: block;
	font-family: var(--rd-sans-fett);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-lp-slot-zeit {
	display: block;
	font-family: var(--rd-sans-leicht);
	font-size: calc(.95rem * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-lp-slot-haken {
	display: grid;
	place-items: center;
	width: calc(24px * var(--rd-zoom));
	height: calc(24px * var(--rd-zoom));
	border-radius: 50%;
	background: #EDEBE4;
	color: var(--rd-weiss);
}

.rd-lp-slot:has(input:checked) .rd-lp-slot-haken {
	background: var(--rd-tuerkis);
}

.rd-lp-slot-haken .material-symbols-outlined {
	font-size: calc(16px * var(--rd-zoom));
	line-height: 1;
}

/* Buendel (14.09.2026): mehrere Termine untereinander in einer Kachel, deshalb
   eine Spalte statt drei; der Haken sitzt oben statt in der Mitte. Der feste
   Termin eines Einzelkurses ist dieselbe Kachel ohne Radio und ohne Hand. */
.rd-lp-slots-buendel,
.rd-lp-slots-fest {
	grid-template-columns: minmax(0, 1fr);
}

.rd-lp-slots-buendel .rd-lp-slot {
	align-items: start;
}

.rd-lp-slot-fest {
	cursor: default;
}

.rd-lp-slot-plaetze {
	margin-top: calc(6px * var(--rd-zoom));
	color: var(--rd-text);
}

/* Der zusammenfassende gelbe Block in Schritt 3 und 4. */
.rd-lp-zusammen {
	position: relative;
	overflow: hidden;
	background: linear-gradient(160deg, var(--rd-gelb) 0%, var(--rd-gelb-dunkel) 100%);
	border-radius: calc(18px * var(--rd-zoom));
	padding: calc(24px * var(--rd-zoom)) calc(28px * var(--rd-zoom));
	margin: calc(24px * var(--rd-zoom)) 0;
}

.rd-lp-zusammen-marke {
	font-family: var(--rd-sans-fett);
	font-size: calc(.85rem * var(--rd-zoom));
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--rd-braun);
	margin: 0 0 calc(8px * var(--rd-zoom));
}

.rd-lp-zusammen-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.12rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0 0 calc(8px * var(--rd-zoom));
}

.rd-lp-zusammen-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text);
	margin: 0 0 calc(16px * var(--rd-zoom));
}

/* Die weissen Merkmalspillen auf dem gelben Block. */
.rd-lp-pillen {
	display: flex;
	flex-wrap: wrap;
	gap: calc(10px * var(--rd-zoom));
	margin: 0;
	padding: 0;
	list-style: none;
}

.rd-lp-pillen li {
	display: inline-flex;
	align-items: center;
	gap: calc(8px * var(--rd-zoom));
	background: var(--rd-weiss);
	border-radius: 999px;
	padding: calc(8px * var(--rd-zoom)) calc(16px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(.95rem * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-lp-pillen .material-symbols-outlined {
	font-size: calc(18px * var(--rd-zoom));
	line-height: 1;
	color: var(--rd-braun);
}

/* Dieselben Pillen ohne gelben Grund (Schritt 1, unter der Ueberschrift). */
.rd-lp-pillen-hell li {
	background: var(--rd-gelb-hell);
}

/* Der tuerkise Hinweiskasten in der Uebersicht. */
.rd-lp-tipp {
	background: var(--rd-tuerkis-hell);
	border-radius: calc(14px * var(--rd-zoom));
	padding: calc(18px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	margin: calc(24px * var(--rd-zoom)) 0;
	font-family: var(--rd-sans-leicht);
	font-size: calc(1rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text);
}

.rd-lp-tipp strong {
	font-family: var(--rd-sans-fett);
}

.rd-lp-zwischentitel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: calc(26px * var(--rd-zoom)) 0 calc(14px * var(--rd-zoom));
}

.rd-lp-trenner {
	border: 0;
	border-top: 1px solid #EDEAE0;
	margin: calc(30px * var(--rd-zoom)) 0;
}

.rd-lp-summe {
	font-family: var(--rd-slab);
	font-size: calc(2.2rem * var(--rd-zoom));
	line-height: 1;
	color: var(--rd-text);
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-lp-kleingedruckt {
	font-family: var(--rd-sans-leicht);
	font-size: calc(.95rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: 0 0 calc(16px * var(--rd-zoom));
}

.rd-lp-kleingedruckt a {
	color: var(--rd-text-grau);
	text-decoration: underline;
}

/* Die Zustimmung zu AGB und Widerrufsbelehrung. */
.rd-lp-zustimmung {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: calc(12px * var(--rd-zoom));
	align-items: start;
	font-family: var(--rd-sans-leicht);
	font-size: calc(.98rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text);
	margin: 0 0 calc(10px * var(--rd-zoom));
	cursor: pointer;
}

.rd-lp-zustimmung input {
	width: calc(18px * var(--rd-zoom));
	height: calc(18px * var(--rd-zoom));
	margin-top: calc(3px * var(--rd-zoom));
	accent-color: var(--rd-tuerkis);
}

.rd-lp-zustimmung a {
	color: var(--rd-text);
	text-decoration: underline;
}

/* Die beiden Zahlwege. Sie sehen aus wie Knoepfe und sind Radioknoepfe -
   siehe die Begruendung bei .rd-lp-slot. */
.rd-lp-zahlwege {
	display: flex;
	flex-wrap: wrap;
	gap: calc(14px * var(--rd-zoom));
	margin: calc(14px * var(--rd-zoom)) 0 0;
	padding: 0;
	list-style: none;
}

.rd-lp-zahlweg {
	display: inline-flex;
	align-items: center;
	gap: calc(10px * var(--rd-zoom));
	position: relative;
	background: var(--rd-weiss);
	border: 1px solid #E7E3D8;
	border-radius: 999px;
	padding: calc(12px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--rd-text);
	cursor: pointer;
}

.rd-lp-zahlweg input {
	position: absolute;
	width: 1px;
	height: 1px;
	opacity: 0;
	pointer-events: none;
}

.rd-lp-zahlweg:has(input:checked) {
	background: var(--rd-gelb);
	border-color: var(--rd-gelb-dunkel);
}

.rd-lp-zahlweg:has(input:focus-visible) {
	outline: calc(3px * var(--rd-zoom)) solid var(--rd-tuerkis);
	outline-offset: calc(2px * var(--rd-zoom));
}

/* Die Fusszeile jeder Tafel: "Zurueck" links, die Haupthandlung rechts. */
.rd-lp-tafel-fuss {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: calc(16px * var(--rd-zoom));
	margin-top: calc(30px * var(--rd-zoom));
}

/* Steht nur EIN Knopf da, gehoert er trotzdem nach rechts - sonst wandert
   er in die Mitte, sobald der Zurueckknopf fehlt (Schritt 1). */
.rd-lp-tafel-fuss-rechts {
	justify-content: flex-end;
}

/* Der grosse Haken auf der Fertigseite - und seit dem 16.08.2026 auch auf der
   Dankeseite nach der Zahlung. Deshalb OHNE Seitenpraefix: eine Klasse, die
   `rd-lp-` heisst und auf einer anderen Seite steht, luegt ueber ihren
   Geltungsbereich, und beim naechsten Aufraeumen der Landingpage faellt sie
   mit. `-fehler` faerbt dieselbe Scheibe fuer den Fehlerfall um. */
.rd-fertig-scheibe {
	display: grid;
	place-items: center;
	width: calc(54px * var(--rd-zoom));
	height: calc(54px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-gelb);
	color: var(--rd-text);
	margin-bottom: calc(22px * var(--rd-zoom));
}

.rd-fertig-scheibe .material-symbols-outlined {
	font-size: calc(30px * var(--rd-zoom));
	line-height: 1;
}

/* Die nummerierte Liste "So geht es jetzt weiter". */
.rd-lp-weiter {
	list-style: none;
	counter-reset: rdweiter;
	margin: calc(14px * var(--rd-zoom)) 0 0;
	padding: 0;
}

.rd-lp-weiter li {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: calc(14px * var(--rd-zoom));
	align-items: start;
	font-family: var(--rd-sans);
	font-size: calc(1.02rem * var(--rd-zoom));
	line-height: 1.55;
	color: var(--rd-text);
	margin-bottom: calc(14px * var(--rd-zoom));
}

.rd-lp-weiter li::before {
	counter-increment: rdweiter;
	content: counter(rdweiter);
	display: grid;
	place-items: center;
	width: calc(24px * var(--rd-zoom));
	height: calc(24px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-gelb);
	color: var(--rd-braun);
	font-family: var(--rd-sans-fett);
	font-size: calc(.85rem * var(--rd-zoom));
	margin-top: calc(3px * var(--rd-zoom));
}

/* ------------------------------------------------------- 9. Haeufige Fragen */

/* Die Landingpage benutzt den FAQ-Abschnitt der Angebotsseite unveraendert -
   nur die Welle darunter fuehrt woanders hin. Auf mein-angebot.html folgt
   ein gelbes Band, hier der cremefarbene Abschluss. Deshalb NUR die Farbe
   ueberschrieben und keine zweite Abschnittsregel: alles andere waere eine
   Abschrift, die auseinanderlaeuft. */
.rd-lp-faq {
	--rd-wellenfarbe: var(--rd-creme);
}


/* -------------------------------------------------- 10. Abschluss Instagram */

.rd-lp-schluss {
	position: relative;
	overflow: hidden;
	--rd-wellenfarbe: var(--rd-gelb-hell);
	background: var(--rd-creme);
	padding: calc(40px * var(--rd-zoom)) 0 calc(150px * var(--rd-zoom));
	text-align: center;
}

.rd-lp-schluss-titel {
	font-family: var(--rd-slab);
	font-size: calc(clamp(1.7rem, calc(22px + 1.2vw), 2.6rem) * var(--rd-zoom));
	line-height: 1.25;
	color: var(--rd-text);
	max-width: calc(760px * var(--rd-zoom));
	margin: 0 auto calc(22px * var(--rd-zoom));
}

.rd-lp-schluss-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text-grau);
	max-width: calc(700px * var(--rd-zoom));
	margin: 0 auto calc(14px * var(--rd-zoom));
}

/* Die Schlagwortzeile mit Mittelpunkten dazwischen. Der Punkt haengt am
   Zwischenraum und nicht im Text, damit der letzte keinen bekommt. */
.rd-lp-schlagworte {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: calc(6px * var(--rd-zoom));
	list-style: none;
	margin: 0 auto calc(26px * var(--rd-zoom));
	padding: 0;
	font-family: var(--rd-sans-leicht);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-lp-schlagworte li + li::before {
	content: '·';
	margin-right: calc(6px * var(--rd-zoom));
}

/* ------------------------------------------------------------ Schmalere Bahn */

@media (max-width: 1150px) {
	.rd-lp-lage-inner,
	.rd-lp-hallo-inner,
	.rd-lp-karte {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(44px * var(--rd-zoom));
	}

	/* Die Trennlinie zwischen den Spalten wandert nach oben, sobald sie
	   uebereinander stehen - senkrecht haette sie nichts mehr zu trennen. */
	.rd-lp-lage-inner > * + * {
		border-left: 0;
		border-top: 1px solid rgba(253, 198, 23, .55);
		padding-left: 0;
		padding-top: calc(44px * var(--rd-zoom));
	}

	.rd-lp-eignungkarten {
		grid-template-columns: minmax(0, 1fr);
	}

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

	.rd-lp-stimme {
		margin-top: calc(24px * var(--rd-zoom));
	}


	.rd-lp-paar {
		grid-template-columns: minmax(0, 1fr);
	}
}

@media (max-width: 600px) {
	.rd-lp-slots {
		grid-template-columns: minmax(0, 1fr);
	}

	.rd-lp-karte {
		padding: calc(26px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	}

	/* Das Fenster fuellt am Handy fast den Schirm; die Karte darin polstert
	   knapper, und die Kreisreihe zeigt nur den AKTIVEN Schritt mit
	   Beschriftung - vier Beschriftungen passen auf 360 Pixel nicht
	   nebeneinander, eine schon. Die Kreise werden dafuer etwas kleiner.
	   Die klebende Leiste vom 13.09.2026 ist mit dem Fenster entfallen:
	   jeder Schritt beginnt oben im Fenster, Kreise und Titel im Bild. */
	.rd-lp-dialog {
		/* der Regler der Seite, nicht eine zweite Zahl */
		--rd-zoom: inherit;
		padding: calc(12px * var(--rd-zoom)) calc(10px * var(--rd-zoom));
	}

	.rd-lp-dialog .rd-dialog-karte {
		padding: calc(28px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	}

	.rd-lp-stufen {
		margin-bottom: calc(18px * var(--rd-zoom));
	}

	.rd-lp-stufe-text {
		display: none;
	}

	.rd-lp-stufe-aktiv .rd-lp-stufe-text {
		display: block;
		font-size: calc(.8rem * var(--rd-zoom));
		white-space: nowrap;
	}

	.rd-lp-stufe {
		width: calc(70px * var(--rd-zoom));
		gap: calc(5px * var(--rd-zoom));
	}

	.rd-lp-stufe-knopf {
		width: calc(40px * var(--rd-zoom));
		height: calc(40px * var(--rd-zoom));
		font-size: calc(.98rem * var(--rd-zoom));
	}

	/* Dieselbe Rechnung wie oben, mit den kleineren Zahlen: Punkt 70 breit,
	   Kreis 40 - je 15 daneben, der Strich also 30 lang, Mitte bei 20. */
	.rd-lp-stufe + .rd-lp-stufe::before {
		top: calc(19px * var(--rd-zoom));
		right: calc(50% + 20px * var(--rd-zoom));
		width: calc(30px * var(--rd-zoom));
	}

	/* KEIN ZOOM BEIM ANTIPPEN EINES FELDES. iOS vergroessert die Seite, sobald
	   ein Feld mit weniger als 16 Pixel Schrift den Fokus bekommt - und die
	   Felder stehen bei 1.06rem * .93 = 15,8 Pixel knapp darunter. Jedes
	   Antippen sprang also in die Seite hinein, und nach dem Tippen stand
	   man irgendwo. Das ist ein gutes Stueck des "hoch und runter". */
	.rd-feld input,
	.rd-feld select,
	.rd-feld textarea {
		font-size: max(16px, calc(1.06rem * var(--rd-zoom)));
	}

	.rd-lp-tafel-fuss {
		flex-direction: column-reverse;
		align-items: stretch;
	}

	.rd-lp-tafel-fuss .rd-btn {
		width: 100%;
		justify-content: center;
	}
}


/* ==========================================================================
   Dankeseite nach der Zahlung  (includes/success_page_neu.php, 16.08.2026)
   ==========================================================================
   Sie hat KEIN Screendesign - der Entwurfsordner kennt sie nicht. Uebersetzt
   ist deshalb sinngemaess, und zwar aus Teilen, die es schon gibt: die weisse
   Karte, die Meldungsbaender, die Scheibe mit dem Haken, der gelbe Abschluss.
   Neu ist nur, was es sonst nirgends gibt.

   ZWEI ABSCHNITTE, IMMER DIESELBEN ZWEI - auch im Fehlerfall. Die Welle
   faerbt sich nach dem NAECHSTEN Abschnitt; haenge man den mittleren an eine
   Bedingung, zeigte die Welle darueber bei jeder zweiten Buchung auf die
   falsche Farbe. Deshalb traegt der mittlere Abschnitt im Erfolgsfall „Wie
   geht es weiter", im Fehlerfall „Was kannst du tun" - und die Materialien
   sind eine Karte darin, kein eigener Abschnitt.                            */

.rd-danke {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	--rd-wellenfarbe: var(--rd-gelb-hell);
	/* Unten 96 statt 112 (Kevin, 21.09.2026: "ueber 'Wie geht es weiter'
	   zu viel Abstand"). Die Welle braucht mehr als 65 Pixel darunter
	   (siehe .rd-welle::after) - 96 lassen ihr 31 Pixel Rand. */
	padding: calc(104px * var(--rd-zoom)) 0 calc(96px * var(--rd-zoom));
}

.rd-danke-inner {
	position: relative;
	z-index: 1;
	max-width: calc(760px * var(--rd-zoom));
	margin: 0 auto;
	text-align: center;
}

/* Die Scheibe steht mittig, nicht linksbuendig wie auf der Landingpage. */
.rd-danke-inner .rd-fertig-scheibe {
	margin-left: auto;
	margin-right: auto;
}

/* Dieselbe Scheibe, andere Aussage. Der Ton ist der der Fehlermeldung
   (.rd-meldung-fehler), damit die Seite nicht zwei Rottoene traegt. */
.rd-fertig-scheibe-fehler {
	background: #8C2F26;
	color: var(--rd-weiss);
}

.rd-danke-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.9rem, calc(26px + 1.5vw), 3.2rem) * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text);
	margin: 0 0 calc(16px * var(--rd-zoom));
}

.rd-danke-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.2rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: 0 0 calc(40px * var(--rd-zoom));
}

/* Die Karte mit den Buchungsdaten. Sie steht linksbuendig, obwohl der
   Abschnitt mittig ist: Datenpaare liest man an einer Kante entlang. */
.rd-danke-karte {
	text-align: left;
}

.rd-danke-daten {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: calc(10px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	margin: 0;
	font-family: var(--rd-sans);
	font-size: calc(1rem * var(--rd-zoom));
	line-height: 1.55;
}

.rd-danke-daten dt {
	color: var(--rd-text-grau);
}

.rd-danke-daten dd {
	margin: 0;
	color: var(--rd-text);
	/* Rechnungs- und Checkout-Nummer sind zum Abschreiben da. */
	overflow-wrap: anywhere;
}

.rd-danke-daten dd code {
	font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
	font-size: calc(.94rem * var(--rd-zoom));
}

/* ---- Der mittlere Abschnitt ---- */

.rd-danke-weiter {
	position: relative;
	overflow: hidden;
	background: var(--rd-gelb-hell);
	--rd-wellenfarbe: var(--rd-gelb);
	/* Oben 56 statt 96: der Bogen der Welle darueber liefert schon 65 Pixel
	   gelben Vorlauf, die Ueberschrift stand danach noch einmal 96 tiefer. */
	padding: calc(56px * var(--rd-zoom)) 0 calc(104px * var(--rd-zoom));
}

.rd-danke-weiter-inner {
	position: relative;
	z-index: 1;
	max-width: calc(760px * var(--rd-zoom));
	margin: 0 auto;
}

.rd-danke-weiter-titel {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.6rem, calc(22px + 1vw), 2.4rem) * var(--rd-zoom));
	line-height: 1.25;
	color: var(--rd-text);
	margin: 0 0 calc(34px * var(--rd-zoom));
}

.rd-danke-schritte {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-danke-schritt {
	display: grid;
	grid-template-columns: auto minmax(0, 1fr);
	gap: calc(20px * var(--rd-zoom));
	align-items: start;
}

.rd-danke-schritt + .rd-danke-schritt {
	margin-top: calc(28px * var(--rd-zoom));
}

.rd-danke-schritt-zeichen {
	display: grid;
	place-items: center;
	width: calc(46px * var(--rd-zoom));
	height: calc(46px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-tuerkis);
	color: var(--rd-weiss);
}

.rd-danke-schritt-zeichen .material-symbols-outlined {
	font-size: calc(24px * var(--rd-zoom));
	line-height: 1;
}

.rd-danke-schritt-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.1rem * var(--rd-zoom));
	line-height: 1.4;
	color: var(--rd-text);
	margin: calc(8px * var(--rd-zoom)) 0 calc(4px * var(--rd-zoom));
}

.rd-danke-schritt-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: 0;
}

/* Die Materialienkarte - gelb, weil sie das einzige auf dieser Seite ist,
   das man ANKLICKEN soll. */
.rd-danke-material {
	background: var(--rd-gelb);
	border-radius: var(--rd-radius-karte);
	padding: calc(30px * var(--rd-zoom)) calc(34px * var(--rd-zoom));
	margin: calc(38px * var(--rd-zoom)) 0 0;
	text-align: center;
}

.rd-danke-material-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.22rem * var(--rd-zoom));
	line-height: 1.35;
	color: var(--rd-text);
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-danke-material-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text);
	margin: 0 0 calc(22px * var(--rd-zoom));
}

/* Die Aufzaehlung im Fehlerfall. */
.rd-danke-liste {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-danke-liste li {
	display: flex;
	align-items: flex-start;
	gap: calc(12px * var(--rd-zoom));
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
}

.rd-danke-liste li + li {
	margin-top: calc(14px * var(--rd-zoom));
}

.rd-danke-liste .material-symbols-outlined {
	flex: 0 0 auto;
	font-size: calc(22px * var(--rd-zoom));
	line-height: 1.5;
	color: var(--rd-tuerkis);
}

.rd-danke-aktionen {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: calc(12px * var(--rd-zoom));
}

@media (max-width: 600px) {
	.rd-danke,
	.rd-danke-weiter {
		padding-top: calc(64px * var(--rd-zoom));
		padding-bottom: calc(72px * var(--rd-zoom));
	}

	.rd-danke-daten {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(2px * var(--rd-zoom));
	}

	.rd-danke-daten dd {
		margin-bottom: calc(12px * var(--rd-zoom));
	}
}

/* --------------------------------------------------------------------------
   Die Freebie-Notiz - der Rahmen fuer fremdes Markup (16.08.2026)
   --------------------------------------------------------------------------
   `freebieHtmlSeiteNeu()` bekommt vom Aufrufer fertiges HTML: eine
   Ueberschrift, ein oder zwei Absaetze, im Abmeldefall ein Formular. Der
   Aufrufer ist api/freebies.php und kennt keine einzige rd-Klasse - er soll
   sie auch nicht kennen muessen, sonst waere der Umschaltgriff nicht zwei
   Zeilen, sondern sechs Umbauten am oeffentlichen Leadweg.

   Deshalb greifen diese Regeln auf NACHKOMMEN, nicht auf Klassen. Das ist
   im uebrigen Entwurf ausdruecklich nicht die Bauform - dort hat jedes Stueck
   seine eigene Klasse, und der Grund dafuer steht bei .rd-stimmen. Hier ist
   es die richtige, weil das Markup aus einer fremden Datei kommt; der Preis
   dafuer ist, dass .rd-notiz nichts umschliessen darf ausser genau diesem
   Fremdmarkup. Der Bereich ist mit der einen Klasse eng gezogen.

   Die Groessen sind bewusst die der Dankeseite (.rd-danke-titel,
   .rd-danke-lead): beide Seiten stehen am Ende eines Weges und sollen sich
   nicht wie zwei verschiedene Projekte anfuehlen.                          */

/* --------------------------------------------------------------------------
   Die Materialienliste (16.08.2026)
   --------------------------------------------------------------------------
   Eine Liste von Dateien zum Herunterladen. Sie steht in einer weissen Karte
   (.rd-karte-weiss) wie die Buchungsdaten auf der Dankeseite, und jede Zeile
   ist ein Link ueber die ganze Breite - nicht nur der Dateiname. Am Telefon
   ist das der Unterschied zwischen "trifft" und "trifft nicht".            */

.rd-mat-zahl {
	font-family: var(--rd-sans);
	font-size: calc(0.95rem * var(--rd-zoom));
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--rd-text-grau);
	margin: 0 0 calc(18px * var(--rd-zoom));
}

.rd-mat-liste {
	list-style: none;
	margin: 0;
	padding: calc(14px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	text-align: left;
}

.rd-mat-zeile + .rd-mat-zeile {
	border-top: 1px solid var(--rd-gelb-hell);
}

.rd-mat-link {
	display: flex;
	align-items: center;
	gap: calc(16px * var(--rd-zoom));
	padding: calc(16px * var(--rd-zoom)) calc(10px * var(--rd-zoom));
	border-radius: calc(12px * var(--rd-zoom));
	text-decoration: none;
	color: var(--rd-text);
	transition: background .18s ease;
}

.rd-mat-link:hover,
.rd-mat-link:focus-visible {
	background: var(--rd-gelb-hell);
}

.rd-mat-zeichen {
	flex: 0 0 auto;
	font-size: calc(28px * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
}

/* Der Name darf umbrechen, die Groesse nicht - und beide muessen schrumpfen
   duerfen, sonst schiebt ein langer Dateiname den Pfeil aus der Karte. */
.rd-mat-worte {
	flex: 1 1 auto;
	min-width: 0;
}

.rd-mat-name {
	display: block;
	font-family: var(--rd-sans-fett);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.35;
	overflow-wrap: anywhere;
}

.rd-mat-groesse {
	display: block;
	font-family: var(--rd-sans-leicht);
	font-size: calc(0.9rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	margin-top: calc(2px * var(--rd-zoom));
}

.rd-mat-pfeil {
	flex: 0 0 auto;
	font-size: calc(24px * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-mat-link:hover .rd-mat-pfeil,
.rd-mat-link:focus-visible .rd-mat-pfeil {
	color: var(--rd-tuerkis-dunkel);
}

/* Der leere Ordner. Er sagt, was passieren wird, statt eine leere Flaeche
   zu zeigen - der Link aus der Mail bleibt derselbe, und genau das ist die
   Frage, die sich jemand an dieser Stelle stellt. */
.rd-mat-leer {
	text-align: center;
}

.rd-mat-leer-zeichen {
	font-size: calc(46px * var(--rd-zoom));
	color: var(--rd-text-grau);
	display: block;
	margin-bottom: calc(12px * var(--rd-zoom));
}

.rd-mat-leer-text {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: 0;
}

/* Die Wartungsseite hat nur zwei Spalten im Fuss statt drei - es gibt dort
   keine Angebotsliste, weil es gerade keine erreichbaren Angebote gibt. Ohne
   diese Zeile stuende die Instagram-Spalte an der Stelle der Angebote und
   liesse rechts eine leere dritte stehen. */
.rd-fuss-raster-schmal {
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
}

/* DIE WELLE TRAEGT DIE FARBE DES NAECHSTEN ABSCHNITTS, und der ist auf den
   kurzen Seiten ein anderer als auf der Dankeseite. Dort folgt auf .rd-danke
   der hellgelbe Zwischenabschnitt "Wie geht es weiter?", deshalb steht dort
   --rd-wellenfarbe: gelb-hell. Auf den Freebie-, Materialien- und
   Wartungsseiten gibt es diesen Zwischenabschnitt nicht - es folgt sofort das
   gelbe Band .rd-abschluss. Ohne diese Zeile stuende ein hellgelber Bogen auf
   gelbem Grund: sichtbar, und nur im Browser sichtbar.

   DER NAME SAGT, WAS DIE REGEL TUT, nicht wo sie zuerst gebraucht wurde. Sie
   hiess einen Nachmittag lang .rd-notiz-abschnitt und stand da schon auf drei
   Seiten, von denen zwei keine Notiz sind. Genau diese Drift hat das Projekt
   zweimal bezahlt (die 23 Regeln an .rd-stimmen, und .rd-lp-fertig-scheibe,
   die die Landingpage verliess). Wer hier eine Regel ergaenzt, soll am Namen
   sehen, dass sie ueber die Welle spricht - und nicht ueber eine Seite. */
.rd-welle-gelb {
	--rd-wellenfarbe: var(--rd-gelb);
}

.rd-notiz {
	position: relative;
	z-index: 1;
}

.rd-notiz h1 {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(1.9rem, calc(26px + 1.5vw), 3.2rem) * var(--rd-zoom));
	line-height: 1.2;
	color: var(--rd-text);
	margin: 0 0 calc(16px * var(--rd-zoom));
}

.rd-notiz p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.2rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: 0 auto calc(20px * var(--rd-zoom));
	max-width: calc(620px * var(--rd-zoom));
}

/* Der Freebie-Titel steht im Fliesstext als <strong> - der Aufrufer setzt
   ihn so, und er ist das einzige Wort, auf das es in dem Satz ankommt. */
.rd-notiz strong {
	font-family: var(--rd-sans-fett);
	font-weight: 400;
	color: var(--rd-text);
}

.rd-notiz form {
	margin-top: calc(28px * var(--rd-zoom));
}

/* Ein <p> direkt vor dem Formular schliesst buendig an - sonst stuenden
   Absatzabstand und Formularabstand uebereinander. */
.rd-notiz p:last-of-type {
	margin-bottom: 0;
}

/* ==========================================================================
   kurse_neu.html - die Abschnitte der Kurs- und Buchungsseite
   ==========================================================================

   Die Seite ist die Uebersetzung von start.html. Was sie von den anderen
   Entwurfsseiten unterscheidet: sie bindet script.js ein, und script.js
   schreibt eigenes Markup mit eigenen Klassennamen in zwei Behaelter hinein.
   Diese fremden Namen bekommen weiter unten einen eigenen, eingegrenzten
   Abschnitt - hier stehen erst die Abschnitte, die die Seite selbst mitbringt.

   DIE WELLENFOLGE, mit einer Besonderheit:

     .rd-hero          creme      Welle -> gelb-hell
     .rd-kursliste       gelb-hell  Welle -> creme
     .rd-gratisliste   creme      OHNE Welle
     .rd-zielgruppen   creme      OHNE Welle
     .rd-stimmen       creme      Welle -> gelb-hell  (per .rd-stimmen-kurse)
     .rd-faq           gelb-hell  Welle -> gelb
     .rd-abschluss     gelb       Welle -> gelb-hell
     .rd-fuss          gelb-hell

   .rd-gratisliste traegt KEINE Welle, weil script.js den ganzen Abschnitt
   ausblendet, solange es keine kostenlosen Angebote gibt. Eine Welle gehoert
   immer dem Abschnitt DARUEBER und faerbt sich nach dem darunter; verschwindet
   ihr Traeger, bliebe eine harte Kante stehen. Aus demselben Grund hat sie
   dieselbe Farbe wie der Abschnitt danach: faellt sie weg, landet die Welle
   der Termine auf genau der Farbe, die sie erwartet hat.                    */


/* ------------------------------------------- Abschnitt: Aktuelle Termine */

.rd-kursliste {
	position: relative;
	overflow: hidden;
	background: var(--rd-gelb-hell);
	--rd-wellenfarbe: var(--rd-creme);
	padding: calc(120px * var(--rd-zoom)) 0 calc(150px * var(--rd-zoom));
	text-align: center;
}

.rd-kursliste-lead {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.35rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	max-width: calc(760px * var(--rd-zoom));
	margin: 0 auto calc(48px * var(--rd-zoom));
}

/* --------------------------------------- Abschnitt: Kostenlose Angebote */

.rd-gratisliste {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	padding: calc(120px * var(--rd-zoom)) 0 calc(140px * var(--rd-zoom));
	text-align: center;
}


/* ------------------------------- Abschnitt: Lernbegleitung als Paket
   Gleiche Masse wie die Gratisliste darueber, und dieselbe Farbe (creme) wie
   der Abschnitt danach. Beides ist Bedingung, nicht Geschmack: dieser
   Abschnitt kann verschwinden (Bettinas Haken ist vorgabemaessig aus), und
   dann muss die Welle des Abschnitts DAVOR immer noch auf den Abschnitt
   DANACH passen. Aus demselben Grund traegt er selbst keine Welle.

   Eine eigene Regel statt .rd-gratisliste mitzubenutzen: die Klasse ist der
   Name, unter dem tests/test_kurse_seite.php den verschwindenden Abschnitt
   findet. Zwei Abschnitte unter einem Namen machen den Waechter blind. */

.rd-paketliste {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	padding: calc(120px * var(--rd-zoom)) 0 calc(140px * var(--rd-zoom));
	text-align: center;
}


/* -------------------------------- Abschnitt: Angebot Eltern und Schüler */

.rd-zielgruppen {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	padding: calc(120px * var(--rd-zoom)) 0 calc(130px * var(--rd-zoom));
	text-align: center;
}

.rd-zielgruppen-raster {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: calc(40px * var(--rd-zoom));
	margin-top: calc(56px * var(--rd-zoom));
	text-align: left;
}

.rd-zielgruppe {
	position: relative;
	/* Die beiden Karten sind Sprungziele von aussen (#angebot-eltern,
	   #angebot-schueler) und tragen als <div> die Regel `section[id]` nicht -
	   ohne das laegen sie hinter der klebenden Kopfleiste. */
	scroll-margin-top: var(--rd-kopf);
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	padding: calc(52px * var(--rd-zoom)) calc(44px * var(--rd-zoom)) calc(44px * var(--rd-zoom));
	/* Die farbige Oberkante ist die Kartenform des Entwurfs; die Farbe kommt
	   aus den beiden Zusatzklassen darunter. (Bis zum 10.09.2026 verwies
	   diese Zeile auf .rd-downloads als Beispiel - jene Karten sind
	   gefallen, siehe Abschnitt 5 weiter oben.) */
	border-top: calc(6px * var(--rd-zoom)) solid var(--rd-kartenfarbe, var(--rd-gelb));
}

.rd-zielgruppe-gelb {
	--rd-kartenfarbe: var(--rd-gelb);
}

.rd-zielgruppe-tuerkis {
	--rd-kartenfarbe: var(--rd-tuerkis);
}

/* Der Kreis mit dem Zeichen sitzt auf der Oberkante, halb darueber. */
.rd-zielgruppe-ring {
	position: absolute;
	top: calc(-30px * var(--rd-zoom));
	left: calc(44px * var(--rd-zoom));
	width: calc(60px * var(--rd-zoom));
	height: calc(60px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-kartenfarbe);
	color: var(--rd-weiss);
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: calc(30px * var(--rd-zoom));
	box-shadow: var(--rd-schatten-pille);
}

.rd-zielgruppe-titel {
	font-family: var(--rd-slab);
	font-size: calc(1.6rem * var(--rd-zoom));
	line-height: 1.3;
	color: var(--rd-text);
	margin: calc(14px * var(--rd-zoom)) 0 calc(18px * var(--rd-zoom));
}

.rd-zielgruppe p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.16rem * var(--rd-zoom));
	line-height: 1.65;
	color: var(--rd-text-grau);
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-zielgruppe-liste {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-zielgruppe-liste li {
	position: relative;
	font-family: var(--rd-sans);
	font-size: calc(1.12rem * var(--rd-zoom));
	line-height: 1.55;
	color: var(--rd-text);
	padding-left: calc(30px * var(--rd-zoom));
	margin-bottom: calc(14px * var(--rd-zoom));
}

.rd-zielgruppe-liste li::before {
	content: "";
	position: absolute;
	left: 0;
	top: calc(9px * var(--rd-zoom));
	width: calc(10px * var(--rd-zoom));
	height: calc(10px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-kartenfarbe);
}


/* ------------------------------------------------- Abschnitt: Stimmen */

/* NUR die Wellenfarbe. .rd-stimmen faerbt sie nach gelb, weil dort der gelbe
   Abschluss folgt; hier folgt die FAQ in gelb-hell. Eine zweite
   Abschnittsregel waere eine Abschrift, die auseinanderlaeuft - dieselbe
   Bauform wie .rd-lp-faq auf der Landingpage. */
.rd-stimmen-kurse {
	--rd-wellenfarbe: var(--rd-gelb-hell);
}


/* ------------------------------------------------- Abschnitt: Kontakt */

/* Sitzt auf .rd-abschluss (dem gelben Band vor der Fusszeile) und macht nur
   aus dessen mittiger Spalte eine zweispaltige mit Foto. */
.rd-kontakt-inner {
	display: grid;
	grid-template-columns: calc(360px * var(--rd-zoom)) minmax(0, 1fr);
	gap: calc(56px * var(--rd-zoom));
	align-items: center;
	text-align: left;
	position: relative;
	z-index: 1;
}

.rd-kontakt-bild {
	margin: 0;
}

.rd-kontakt-bild img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
}

/* Im Raster braucht die Textspalte min-width:0, sonst dehnt eine lange
   Mailadresse die Spalte ueber das Raster hinaus. */
.rd-kontakt-text {
	min-width: 0;
}

.rd-kontakt .rd-abschluss-titel {
	text-align: left;
	margin-left: 0;
	margin-right: 0;
}

.rd-kontakt-anschrift {
	font-family: var(--rd-sans);
	font-size: calc(1.25rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text);
	margin: 0 0 calc(24px * var(--rd-zoom));
}

.rd-kontakt-wege {
	display: flex;
	flex-wrap: wrap;
	gap: calc(14px * var(--rd-zoom)) calc(32px * var(--rd-zoom));
	margin: 0 0 calc(30px * var(--rd-zoom));
}

.rd-kontakt-wege a {
	display: inline-flex;
	align-items: center;
	gap: calc(12px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1.2rem * var(--rd-zoom));
	color: var(--rd-text);
	text-decoration: none;
}

.rd-kontakt-wege a:hover {
	text-decoration: underline;
}

.rd-kontakt-knoepfe {
	display: flex;
	flex-wrap: wrap;
	gap: calc(16px * var(--rd-zoom));
}


/* ==========================================================================
   Fremdes Markup aus script.js - die Kurs- und Freebie-Kacheln
   ==========================================================================

   ALLES IN DIESEM ABSCHNITT IST AUF .rd-kacheln EINGEGRENZT. Die Klassennamen
   darin (booking-box, booking-date, freebie-desc, …) stammen nicht aus dem
   Entwurf, sondern aus script.js, das sie beim Laden der Termine erzeugt. Sie
   umzubenennen hiesse, script.js umzubauen - dieselbe Ueberlegung wie bei
   .rd-notiz, wo der Inhalt von api/freebies.php kommt.

   DREI ZAHLEN SIND BEDINGUNG, NICHT GESCHMACK. Sie stehen fest in script.js
   und muessen hier gespiegelt werden:
     * Abstand zwischen zwei Kacheln 30px      (getCardWidth, Zeile 1428;
                                                initFreebieCarousel, Zeile 1643)
     * unter 768px wird gestapelt              (isMobileStack, Zeile 1409)
     * ab 1024px drei, ab 768px zwei Kacheln   (getCardsToShow, Zeile 1418)
   Wer die Luecke aendert, ohne script.js zu aendern, bekommt ein Karussell,
   das eine halbe Kachel daneben stehen bleibt.

   UND EINE WARNUNG, DIE MAN NUR IM BROWSER MERKT: script.js schreibt an vier
   Stellen style="…" direkt ins Markup, und ein Attribut schlaegt jedes
   Stylesheet. Betroffen sind
     * .booking-spots     (Zeile 457: color:#333, Ausrichtung)
     * .booking-location  (Zeile 529: color:#666, Ausrichtung)
     * .desc-toggle       (Zeile 478: color:#FBBA00 - das ALTE Gelb)
     * der Hinweis "Leider sind aktuell keine Termine verfügbar"
                          (Zeile 442: color:#333333, Museo Sans W03_500, 20px)
   Wo die Farbe aus der Palette faellt, steht unten ein !important daneben -
   mit Begruendung. Alles andere bleibt, wie script.js es setzt: ein
   !important auf jeder Zeile waere ein zweiter Satz Wahrheiten.             */

.rd-kacheln {
	position: relative;
	max-width: var(--rd-container);
	margin: 0 auto;
	padding: 0 calc(20px * var(--rd-zoom));
	/* Die Kacheln schieben sich seitlich aus dem Bild; ohne Beschnitt
	   entstuende waagerechter Ueberlauf auf der ganzen Seite. */
	overflow: hidden;
	text-align: left;
}

.rd-kacheln .booking-container {
	display: flex;
	/* 30px - siehe die Warnung oben. */
	gap: 30px;
	padding: calc(10px * var(--rd-zoom));
	transition: transform .4s cubic-bezier(.4, 0, .2, 1);
	touch-action: pan-y pinch-zoom;
	cursor: grab;
	user-select: none;
	align-items: stretch;
}

.rd-kacheln .booking-container:active {
	cursor: grabbing;
}

/* Der Hinweis, wenn nichts buchbar ist. script.js setzt hier Farbe, Groesse
   und einen Zeichensatz, den redesign.css gar nicht laedt ("Museo Sans
   W03_500" ohne Ersatzangabe) - deshalb hier mit !important zurueckgeholt.
   Ohne das steht ein grauer Systemzeichensatz mitten im Entwurf. */
.rd-kacheln .booking-container > p {
	font-family: var(--rd-sans) !important;
	font-size: calc(1.25rem * var(--rd-zoom)) !important;
	color: var(--rd-text-grau) !important;
	width: 100%;
}

/* ---------------------------------------------------------- Die Kachel */

.rd-kacheln .booking-box {
	flex: 0 0 calc(100% - 20px);
	display: flex;
	flex-direction: column;
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	border-top: calc(6px * var(--rd-zoom)) solid var(--rd-gelb);
	padding: calc(34px * var(--rd-zoom));
	position: relative;
	overflow: hidden;
	transition: transform .3s ease, box-shadow .3s ease;
}

@media (min-width: 768px) {
	.rd-kacheln .booking-box {
		flex: 0 0 calc(50% - 15px);
	}
}

@media (min-width: 1024px) {
	.rd-kacheln .booking-box {
		flex: 0 0 calc(33.333% - 20px);
	}
}

.rd-kacheln .booking-box:hover {
	transform: translateY(calc(-5px * var(--rd-zoom)));
	box-shadow: 0 26px 54px rgba(80, 60, 0, .16);
}

.rd-kacheln .booking-box h3 {
	font-family: var(--rd-slab);
	font-size: calc(1.42rem * var(--rd-zoom));
	line-height: 1.3;
	color: var(--rd-text);
	margin: 0 0 calc(18px * var(--rd-zoom));
}

/* Die Zeilen mit Zeichen davor: Datum, Dauer, Ort, Anmeldeschluss. */
.rd-kacheln .booking-date,
.rd-kacheln .booking-time,
.rd-kacheln .booking-location,
.rd-kacheln .booking-deadline {
	display: flex;
	align-items: center;
	gap: calc(9px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1.02rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	margin-bottom: calc(9px * var(--rd-zoom));
}

.rd-kacheln .booking-date .material-symbols-outlined,
.rd-kacheln .booking-time .material-symbols-outlined,
.rd-kacheln .booking-location .material-symbols-outlined,
.rd-kacheln .booking-deadline .material-symbols-outlined,
.rd-kacheln .booking-spots .material-symbols-outlined {
	font-size: calc(20px * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
}

.rd-kacheln .booking-more-dates {
	font-family: var(--rd-sans);
	font-size: calc(.98rem * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
	margin-bottom: calc(9px * var(--rd-zoom));
}

.rd-kacheln .booking-spots {
	font-family: var(--rd-sans);
	font-size: calc(1.02rem * var(--rd-zoom));
}

.rd-kacheln .booking-thumbnail,
.rd-kacheln .freebie-thumb {
	width: 100%;
	height: auto;
	display: block;
	border-radius: calc(16px * var(--rd-zoom));
	margin: calc(14px * var(--rd-zoom)) 0;
}

.rd-kacheln .booking-description,
.rd-kacheln .paket-desc,
.rd-kacheln .freebie-desc {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
	margin: calc(6px * var(--rd-zoom)) 0 calc(16px * var(--rd-zoom));
}

/* script.js setzt hier color:#FBBA00 als Attribut - das alte Gelb, und auf
   Weiss ohnehin schwer zu lesen. Deshalb ausnahmsweise !important. */
.rd-kacheln .desc-toggle {
	color: var(--rd-tuerkis-dunkel) !important;
	font-family: var(--rd-sans-fett);
}

.rd-kacheln .booking-price {
	font-family: var(--rd-slab);
	font-size: calc(1.6rem * var(--rd-zoom));
	color: var(--rd-text);
	/* Schiebt den Preis und den Knopf darunter an den Fuss der Kachel, damit
	   drei verschieden lange Kacheln unten buendig abschliessen. */
	margin-top: auto;
	padding-top: calc(14px * var(--rd-zoom));
}

.rd-kacheln .price-highlight {
	color: var(--rd-tuerkis-dunkel);
}

/* Der Ratenhinweis unter dem Preis (Kevin, 13.09.2026: "unter dem preis
   klein"). Klein und grau, damit er den Preis nicht ueberstimmt; ohne eigenen
   Abstand nach oben, er gehoert zur Preiszeile. Den SATZ liefert PHP
   (ratenhinweisText()): Kachel und Dialog ueber api/get_pakete.php, die
   Landingpage als abgeleitetes Feld. `.rd-preis-raten` sitzt IM Preisabsatz
   der Landingpage (Hero, Karte, Summe), `.booking-raten` unter der Kachel. */
.rd-kacheln .booking-raten,
.booking-raten {
	font-family: var(--rd-sans-leicht);
	font-size: calc(0.85rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	margin: calc(2px * var(--rd-zoom)) 0 calc(8px * var(--rd-zoom));
}

.rd-preis .rd-preis-raten,
.rd-lp-summe .rd-preis-raten {
	display: block;
	font-family: var(--rd-sans-leicht);
	font-size: calc(0.85rem * var(--rd-zoom));
	font-weight: 400;
	line-height: 1.4;
	color: var(--rd-text-grau);
	margin-top: calc(2px * var(--rd-zoom));
}

/* Die zweite Zeile ("bei Zahlung in Raten mit PayPal (12 Monate, effektiver
   Jahreszins …)") kleiner als der Betrag darueber — Kevin, 13.09.2026
   abends: "das bitte kleiner und in die zeile drunter". Ohne Abstand nach
   oben: sie gehoert zur Zeile davor. */
.booking-raten.booking-raten-bedingung,
.rd-kacheln .booking-raten.booking-raten-bedingung,
.rd-preis .rd-preis-raten-bedingung,
.rd-lp-summe .rd-preis-raten-bedingung {
	font-size: calc(0.72rem * var(--rd-zoom));
	margin-top: 0;
}

.booking-raten:not(.booking-raten-bedingung) {
	margin-bottom: 0;
}

/* Der Verweis auf die Landingpage des Kurses (17.08.2026, ROADMAP A3).
   Textlink, kein zweiter Knopf - siehe die gleichlautende Regel in
   css/modern.css. Er sitzt zwischen Preis und Knopf; das `margin-top: auto`
   der Preiszeile hat die beiden schon an den Kachelfuss geschoben, hier
   braucht es also nur den Abstand nach unten. */
.rd-kacheln .booking-mehr {
	display: block;
	text-align: center;
	font-family: var(--rd-sans-fett);
	font-size: calc(0.9rem * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
	text-decoration: none;
	margin: 0 0 calc(10px * var(--rd-zoom));
}

.rd-kacheln .booking-mehr:hover,
.rd-kacheln .booking-mehr:focus-visible {
	text-decoration: underline;
}

/* ------------------------------------------------------------ Der Knopf */

.rd-kacheln .booking-button {
	display: block;
	width: 100%;
	margin-top: calc(18px * var(--rd-zoom));
	padding: calc(17px * var(--rd-zoom)) calc(24px * var(--rd-zoom));
	border: 0;
	border-radius: 999px;
	background: var(--rd-gelb);
	color: var(--rd-text);
	font-family: var(--rd-sans-fett);
	font-size: calc(1.12rem * var(--rd-zoom));
	line-height: 1.2;
	cursor: pointer;
	transition: background-color .15s ease, transform .15s ease;
}

.rd-kacheln .booking-button:hover:not(:disabled) {
	background: var(--rd-gelb-dunkel);
	transform: translateY(calc(-2px * var(--rd-zoom)));
}

.rd-kacheln .booking-button:disabled {
	background: var(--rd-gelb-hell);
	color: var(--rd-text-grau);
	cursor: not-allowed;
}

.rd-kacheln .booking-button.sold-out {
	background: var(--rd-gelb-hell);
	color: var(--rd-text-grau);
}

/* Ausgebucht: die Kachel tritt zurueck, statt zu verschwinden. */
.rd-kacheln .booking-box.fully-booked {
	opacity: .72;
	border-top-color: var(--rd-text-grau);
}

/* ------------------------------------------------------- Die Freebie-Kachel */

.rd-kacheln .freebie-box {
	border-top-color: var(--rd-tuerkis);
}

/* ------------------------------------------------- Die Lernbegleitungspakete
   Dieselbe Bauform wie die Freebiekachel: eine eigene Akzentfarbe, sonst
   nichts Eigenes. Die Paketkachel ist gelb, weil sie zum bezahlten Angebot
   gehoert wie die Kurskachel; das Tuerkis bleibt dem Kostenlosen.

   `.paket-kontingent` ist die einzige wirklich neue Form auf dieser Seite:
   ein Paket zeigt kein Datum, sondern was drin ist. */
.rd-kacheln .paket-box {
	border-top-color: var(--rd-gelb-dunkel);
}

.rd-kacheln .paket-kontingent {
	list-style: none;
	margin: calc(10px * var(--rd-zoom)) 0 calc(14px * var(--rd-zoom));
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: calc(6px * var(--rd-zoom));
}

.rd-kacheln .paket-kontingent li {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	padding-left: calc(20px * var(--rd-zoom));
	position: relative;
}

.rd-kacheln .paket-kontingent li::before {
	content: '\2713';
	position: absolute;
	left: 0;
	color: var(--rd-gelb-dunkel);
	font-weight: 700;
}

.rd-kacheln .freebie-box .booking-button {
	background: var(--rd-tuerkis);
	color: var(--rd-weiss);
}

.rd-kacheln .freebie-box .booking-button:hover:not(:disabled) {
	background: var(--rd-tuerkis-dunkel);
}

/* ------------------------------------------------------------ Die Pfeile */

.rd-kacheln .carousel-nav {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	z-index: 10;
	width: calc(52px * var(--rd-zoom));
	height: calc(52px * var(--rd-zoom));
	border-radius: 50%;
	border: 0;
	background: var(--rd-weiss);
	color: var(--rd-tuerkis-dunkel);
	box-shadow: var(--rd-schatten-pille);
	font-size: calc(2rem * var(--rd-zoom));
	line-height: 1;
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	transition: background-color .2s ease, color .2s ease, opacity .2s ease;
}

.rd-kacheln .carousel-nav:hover:not(:disabled) {
	background: var(--rd-tuerkis-dunkel);
	color: var(--rd-weiss);
}

.rd-kacheln .carousel-nav:disabled {
	opacity: .3;
	cursor: not-allowed;
	pointer-events: none;
}

.rd-kacheln .carousel-nav-prev {
	left: calc(4px * var(--rd-zoom));
}

.rd-kacheln .carousel-nav-next {
	right: calc(4px * var(--rd-zoom));
}

/* ------------------------------------------------ Gestapelt unter 768px

   Die Grenze ist NICHT frei gewaehlt: script.js setzt darunter transform auf
   none und schaltet die Pfeile ab (MOBILE_BREAKPOINT = 768). Waere die
   CSS-Grenze eine andere, gaebe es eine Breite, in der das Skript stapelt und
   das Stylesheet noch schiebt - oder umgekehrt.                             */
@media (max-width: 767px) {
	.rd-kacheln {
		/* Waagerecht beschneiden, senkrecht nicht: sonst schneidet der Rahmen
		   die Schatten der gestapelten Kacheln ab. */
		overflow-x: clip;
		overflow-y: visible;
		padding: 0 calc(16px * var(--rd-zoom));
	}

	.rd-kacheln .booking-container {
		flex-direction: column;
		/* script.js setzt transform auf none, sobald es stapelt - das hier ist
		   der Riegel fuer den Augenblick davor, in dem noch ein alter Wert
		   steht (etwa beim Drehen des Geraets). */
		transform: none !important;
		cursor: default;
		touch-action: auto;
		gap: calc(24px * var(--rd-zoom));
		padding: 0;
	}

	.rd-kacheln .booking-container:active {
		cursor: default;
	}

	.rd-kacheln .booking-box {
		flex: none;
		width: 100%;
		max-width: 100%;
	}

	.rd-kacheln .carousel-nav {
		display: none;
	}
}


/* ==========================================================================
   Die drei Dialoge von kurse_neu.html
   ==========================================================================

   Alles auf .rd-dialog eingegrenzt. Die Dialoge werden von script.js
   auf- und zugemacht, und zwar ueber style.display - NICHT ueber eine Klasse.
   Daraus folgen zwei Dinge, die man nicht uebersehen darf:

     * Die Seite liefert display:none im style-Attribut mit, script.js setzt
       im Oeffnen display:flex. Eine Regel `display: none` hier im Stylesheet
       waere wirkungslos (das Attribut schlaegt sie) und beim Oeffnen erst
       recht. Deshalb steht hier NUR das Aussehen des offenen Dialogs.
     * Die Huelle um "Name des Schülers" muss `display: block` vertragen:
       script.js blendet sie fuer kostenlose Angebote aus und setzt sie danach
       ausdruecklich auf 'block' zurueck (Zeile 647). Eine .form-group mit
       display:flex oder grid kaeme als Block zurueck und saehe anders aus als
       vorher. Deshalb ist .form-group hier ein Block, und die Zweispaltigkeit
       macht die Zeile darum (.rd-dialog-zeile).                             */

.rd-dialog {
	position: fixed;
	inset: 0;
	z-index: 1000;
	/* Nur, wenn script.js display:flex gesetzt hat - siehe oben. */
	align-items: flex-start;
	justify-content: center;
	overflow-y: auto;
	padding: calc(40px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	background: rgba(27, 27, 27, .55);
}

/* Der Freebie- und der Datenschutzdialog bringen eine eigene Flaeche mit;
   script.js haengt an ihr das Schliessen per Klick daneben. Sie liegt hinter
   der Karte und deckt den ganzen Bildschirm. */
.rd-dialog .site-modal-backdrop {
	position: fixed;
	inset: 0;
	z-index: 0;
}

.rd-dialog-karte {
	position: relative;
	z-index: 1;
	width: 100%;
	max-width: calc(680px * var(--rd-zoom));
	/* 0 auto, NICHT auto: bei senkrecht zentrierendem auto-Rand in einem
	   scrollenden Flexbehaelter ist der obere Rand eines zu hohen Dialogs
	   nicht mehr erreichbar - die klassische Falle. Der Dialog haengt
	   stattdessen oben und der Abstand kommt vom Innenabstand der Huelle. */
	margin: 0 auto;
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: 0 30px 70px rgba(0, 0, 0, .25);
	padding: calc(40px * var(--rd-zoom));
}

.rd-dialog-klein {
	max-width: calc(500px * var(--rd-zoom));
}

.rd-dialog-titel {
	font-family: var(--rd-slab);
	font-size: calc(1.6rem * var(--rd-zoom));
	line-height: 1.3;
	color: var(--rd-text);
	margin: 0 0 calc(22px * var(--rd-zoom));
	padding-right: calc(40px * var(--rd-zoom));
}

.rd-dialog-schliesser {
	position: absolute;
	top: calc(18px * var(--rd-zoom));
	right: calc(20px * var(--rd-zoom));
	width: calc(40px * var(--rd-zoom));
	height: calc(40px * var(--rd-zoom));
	border: 0;
	border-radius: 50%;
	background: var(--rd-gelb-hell);
	color: var(--rd-text);
	font-size: calc(1.7rem * var(--rd-zoom));
	line-height: 1;
	cursor: pointer;
}

.rd-dialog-schliesser:hover {
	background: var(--rd-gelb);
}

.rd-dialog p {
	font-family: var(--rd-sans-leicht);
	font-size: calc(1.08rem * var(--rd-zoom));
	line-height: 1.6;
	color: var(--rd-text-grau);
}

/* ------------------------------------------------------- Das Formular */

.rd-dialog .form-group {
	/* Block, nicht flex - Begruendung im Kopf dieses Abschnitts. */
	display: block;
	margin-bottom: calc(16px * var(--rd-zoom));
}

.rd-dialog label {
	display: block;
	font-family: var(--rd-sans);
	font-size: calc(1rem * var(--rd-zoom));
	color: var(--rd-text);
	margin-bottom: calc(7px * var(--rd-zoom));
}

.rd-dialog input[type="text"],
.rd-dialog input[type="email"],
.rd-dialog input[type="number"],
.rd-dialog select {
	width: 100%;
	padding: calc(13px * var(--rd-zoom)) calc(16px * var(--rd-zoom));
	border: 1px solid rgba(27, 27, 27, .18);
	border-radius: calc(14px * var(--rd-zoom));
	background: var(--rd-weiss);
	font-family: var(--rd-sans);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-dialog input:focus,
.rd-dialog select:focus {
	outline: calc(2px * var(--rd-zoom)) solid var(--rd-tuerkis);
	outline-offset: calc(1px * var(--rd-zoom));
}

.rd-dialog-block {
	border: 0;
	border-top: 1px solid rgba(27, 27, 27, .12);
	/* Ein <fieldset> traegt vom Browser aus `min-inline-size: min-content`, und
	   das schlaegt jede Breitenangabe: der Kasten schrumpft dann nicht unter
	   die breiteste Zeile darin, sondern schiebt den Dialog auf. Auf dem Telefon
	   ist das der Unterschied zwischen einem Formular und einem, das seitlich
	   herauslaeuft. Nur hier abgeschaltet, nicht global fuer alle fieldset. */
	min-width: 0;
	margin: calc(24px * var(--rd-zoom)) 0 calc(18px * var(--rd-zoom));
	padding: calc(18px * var(--rd-zoom)) 0 0;
}

.rd-dialog-block-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(1.06rem * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0 0 calc(14px * var(--rd-zoom));
	padding: 0;
}

.rd-dialog-zeile {
	display: flex;
	gap: calc(12px * var(--rd-zoom));
}

/* min-width: 0 bei beiden aus demselben Grund wie oben - `flex: 1` setzt die
   Basis auf 0, aber die vom Browser gesetzte Mindestbreite (auto = min-content)
   bleibt bestehen. Ein <input> bringt eine eigene Wunschbreite von rund zwanzig
   Zeichen mit; ohne diese Zeile ist die Zeile immer mindestens so breit wie
   zwei davon nebeneinander, egal was flex sagt. */

.rd-dialog-schmal {
	flex: 1;
	min-width: 0;
}

.rd-dialog-breit {
	flex: 3;
	min-width: 0;
}

/* Zustimmung und Hinweis */

.rd-dialog-zustimmung {
	display: flex;
	align-items: flex-start;
	gap: calc(10px * var(--rd-zoom));
	margin: calc(18px * var(--rd-zoom)) 0 calc(10px * var(--rd-zoom));
}

.rd-dialog-zustimmung input {
	margin-top: calc(4px * var(--rd-zoom));
	width: calc(18px * var(--rd-zoom));
	height: calc(18px * var(--rd-zoom));
	flex: none;
	accent-color: var(--rd-tuerkis-dunkel);
}

.rd-dialog-zustimmung label {
	margin: 0;
	font-family: var(--rd-sans-leicht);
	font-size: calc(.97rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	line-height: 1.5;
}

.rd-dialog-hinweis {
	font-size: calc(.94rem * var(--rd-zoom));
	margin: 0 0 calc(20px * var(--rd-zoom));
}

.rd-dialog a {
	color: var(--rd-tuerkis-dunkel);
	text-decoration: underline;
}

/* ----------------------------------------------------- Die Zahlknoepfe

   Eigene Klasse statt .rd-btn, weil script.js sie mit style.display = 'block'
   ein- und ausschaltet (Zeilen 653-655). Ein inline-flex-Knopf verlierte
   dabei seine Ausrichtung - deshalb ist dieser hier von Haus aus ein Block
   und richtet seinen Text selbst mittig aus.                                */

.rd-dialog-zahlwahl {
	display: flex;
	gap: calc(12px * var(--rd-zoom));
	margin-bottom: calc(14px * var(--rd-zoom));
}

.rd-zahlknopf {
	display: block;
	flex: 1;
	text-align: center;
	padding: calc(17px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	border: 0;
	border-radius: 999px;
	background: var(--rd-gelb);
	color: var(--rd-text);
	font-family: var(--rd-sans-fett);
	font-size: calc(1.06rem * var(--rd-zoom));
	line-height: 1.2;
	cursor: pointer;
	transition: background-color .15s ease;
}

.rd-zahlknopf:hover {
	background: var(--rd-gelb-dunkel);
}

/* PayPal und "Verbindlich anmelden" tragen ihre eigene Farbe, damit die drei
   Wege auseinanderzuhalten sind. Das Blau ist PayPals Hausfarbe und stammt
   nicht aus der Palette - ein Zahlungsknopf, der aussieht wie alle anderen,
   ist an dieser Stelle keine Hilfe. */
.rd-zahlknopf-paypal {
	background: #0070BA;
	color: var(--rd-weiss);
}

.rd-zahlknopf-paypal:hover {
	background: #005EA6;
}

.rd-zahlknopf-gratis {
	background: var(--rd-tuerkis);
	color: var(--rd-weiss);
}

.rd-zahlknopf-gratis:hover {
	background: var(--rd-tuerkis-dunkel);
}

/* ------------------------------------------------- Der Zahlungsbereich */

.rd-dialog-zahlung {
	margin-top: calc(20px * var(--rd-zoom));
}

.rd-dialog .sumup-widget-shell {
	background: transparent;
	padding: calc(10px * var(--rd-zoom));
	margin: 0 auto;
	max-width: 100%;
}

/* Die Zahlflaeche wird nach dem Klick auf "Buchung abschliessen" an den
   oberen Rand geholt, nicht nur "irgendwie sichtbar" (13.09.2026): sie
   steht UNTER dem Knopf, ist im Augenblick des Klicks noch leer und waechst
   dann auf 640 Pixel - `block: "nearest"` tat da nichts Erkennbares, und am
   Handy sah der Klick aus, als sei nichts passiert. */
.rd-lp-zahlflaeche {
	/* Sprungziel innerhalb des Fensters: ein wenig Luft zum oberen Rand. */
	scroll-margin-top: calc(16px * var(--rd-zoom));
}

.rd-dialog .sumup-widget-wrapper,
.rd-dialog .sumup-scale,
.rd-lp-zahlflaeche .sumup-scale {
	position: relative;
	width: 100%;
	overflow: visible;
	display: flex;
	flex-direction: column;
	align-items: center;
}

.rd-dialog .sumup-scale > *,
.rd-lp-zahlflaeche .sumup-scale > * {
	max-width: 100%;
}

/* DIE BUCHUNGSSTRECKE DER LANDINGPAGE TEILT DIESE REGELN (05.09.2026).
   Sie traegt dieselben Kennungen wie der Dialog, damit der Zahlweg aus
   script.js dort seine Elemente findet — also muss sie auch dieselbe
   Gestalt bekommen. ERWEITERT statt kopiert: zwei Regelbloecke fuer
   dieselbe Sache waeren die Fassung, die eines Tages anders aussieht.
   Ein `.rd-dialog`-Vorfahre gibt es unter /kurs/<slug> nicht. */
.rd-dialog .sumup-widget-loader,
.rd-lp-zahlflaeche .sumup-widget-loader {
	display: none;
	text-align: center;
	padding: calc(32px * var(--rd-zoom)) calc(16px * var(--rd-zoom));
	font-family: var(--rd-sans);
	font-size: calc(1.05rem * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
}

.rd-dialog .sumup-widget-loader.is-error,
.rd-lp-zahlflaeche .sumup-widget-loader.is-error {
	color: #C62828;
}

/* ABGEBROCHEN IST KEIN FEHLER (05.09.2026) — der vierte Design-State, hier im
   Buchungsdialog. Tuerkis ist die Grundform der Meldung; die Regel steht
   trotzdem ausgeschrieben, damit der Zustand nicht davon abhaengt, dass die
   Grundfarbe des Laders tuerkis BLEIBT. */
.rd-dialog .sumup-widget-loader.is-abbruch,
.rd-lp-zahlflaeche .sumup-widget-loader.is-abbruch {
	color: var(--rd-tuerkis-dunkel);
}

/* Den Kreisel, den das SumUp-Skript selbst hineinschreibt, in die Palette
   holen: es ist ein nackter <div> ohne Klasse, deshalb der Kindselektor. */
.rd-dialog .sumup-widget-loader > div,
.rd-lp-zahlflaeche .sumup-widget-loader > div {
	display: inline-block;
	width: calc(50px * var(--rd-zoom));
	height: calc(50px * var(--rd-zoom));
	box-sizing: border-box;
	border-radius: 50%;
	border: calc(4px * var(--rd-zoom)) solid var(--rd-gelb-hell);
	border-top-color: var(--rd-gelb);
	animation: rd-dreht 1s linear infinite;
}

/* Waehrend der Zahlung schreibt script.js einen eigenen Kreisel hinein. Der
   des SumUp-Skripts wird dann verdeckt, sonst drehen sich zwei nebeneinander. */
.rd-dialog .sumup-widget-loader.processing-ui > div:not(.sumup-processing-wrap),
.rd-lp-zahlflaeche .sumup-widget-loader.processing-ui > div:not(.sumup-processing-wrap) {
	display: none;
}

.rd-dialog .sumup-processing-wrap,
.rd-lp-zahlflaeche .sumup-processing-wrap {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
}

.rd-dialog .sumup-spinner,
.rd-lp-zahlflaeche .sumup-spinner {
	width: calc(50px * var(--rd-zoom));
	height: calc(50px * var(--rd-zoom));
	box-sizing: border-box;
	border-radius: 50%;
	border: calc(4px * var(--rd-zoom)) solid var(--rd-gelb-hell);
	border-top-color: var(--rd-gelb);
	display: inline-block;
	animation: rd-dreht 1s linear infinite;
}

@keyframes rd-dreht {
	to {
		transform: rotate(360deg);
	}
}

/* Das Zahlungsfenster selbst. `display: none` ist hier richtig und kein
   Versehen: script.js macht es mit der Klasse .is-visible sichtbar, sobald
   SumUp geantwortet hat. */
.rd-dialog .sumup-widget-iframe,
.rd-lp-zahlflaeche .sumup-widget-iframe {
	width: 100%;
	max-width: 100%;
	min-height: calc(520px * var(--rd-zoom));
	border: 0;
	border-radius: calc(12px * var(--rd-zoom));
	background: transparent;
	display: none;
}

.rd-dialog .sumup-widget-iframe.is-visible,
.rd-lp-zahlflaeche .sumup-widget-iframe.is-visible {
	display: block;
	min-height: calc(640px * var(--rd-zoom));
	max-height: 85vh;
}

/* Waehrend die Zahlung laeuft, ist der Dialog gesperrt - ohne dass ein
   Element entfernt oder hinzugefuegt wird. */
.rd-dialog.processing .rd-dialog-karte {
	pointer-events: none;
}

.rd-dialog.processing .rd-dialog-schliesser {
	opacity: .25;
}

/* ------------------------------------- Die Termindaten im Buchungsdialog

   Auch hier schreibt script.js: Datum und Uhrzeit als Absatz, bei Reihen mit
   mehreren Durchlaeufen eine Auswahlliste (booking-termine-*).              */

.rd-dialog .booking-details-display {
	background: var(--rd-gelb-hell);
	border-radius: calc(18px * var(--rd-zoom));
	padding: calc(20px * var(--rd-zoom)) calc(24px * var(--rd-zoom));
	margin-bottom: calc(24px * var(--rd-zoom));
}

.rd-dialog .booking-details-display p {
	margin: 0 0 calc(6px * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-dialog .booking-termine-select__title {
	font-family: var(--rd-sans-fett);
	color: var(--rd-text);
	margin-bottom: calc(4px * var(--rd-zoom));
}

.rd-dialog .booking-termine-select__hint {
	font-size: calc(.95rem * var(--rd-zoom));
}

.rd-dialog .booking-termine-options {
	display: flex;
	flex-direction: column;
	gap: calc(10px * var(--rd-zoom));
	margin-top: calc(12px * var(--rd-zoom));
}

.rd-dialog .booking-termin-option {
	display: block;
	background: var(--rd-weiss);
	border: 1px solid rgba(27, 27, 27, .14);
	border-radius: calc(14px * var(--rd-zoom));
	padding: calc(14px * var(--rd-zoom)) calc(16px * var(--rd-zoom));
	margin: 0;
	cursor: pointer;
}

.rd-dialog .booking-termin-option:hover {
	border-color: var(--rd-tuerkis);
}

.rd-dialog .booking-termin-option__content {
	display: flex;
	align-items: flex-start;
	gap: calc(12px * var(--rd-zoom));
}

.rd-dialog .booking-termin-option__icon {
	font-size: calc(22px * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
}

.rd-dialog .booking-termin-option__text {
	display: block;
}

.rd-dialog .booking-termin-option__date {
	display: block;
	font-family: var(--rd-sans-fett);
	color: var(--rd-text);
}

.rd-dialog .booking-termin-option__meta {
	display: block;
	font-family: var(--rd-sans-leicht);
	font-size: calc(.95rem * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-dialog .booking-termine-empty {
	margin: 0;
}

/* ------------------------------------------------ Der Freebie-Dialog */

.rd-dialog .freebie-form-group {
	margin: calc(16px * var(--rd-zoom)) 0;
}

.rd-dialog .freebie-check {
	display: flex;
	align-items: flex-start;
	gap: calc(10px * var(--rd-zoom));
	margin-bottom: calc(12px * var(--rd-zoom));
	font-family: var(--rd-sans-leicht);
	font-size: calc(.97rem * var(--rd-zoom));
	color: var(--rd-text-grau);
	line-height: 1.5;
	cursor: pointer;
}

.rd-dialog .freebie-check input {
	margin-top: calc(3px * var(--rd-zoom));
	width: calc(18px * var(--rd-zoom));
	height: calc(18px * var(--rd-zoom));
	flex: none;
	accent-color: var(--rd-tuerkis-dunkel);
}

.rd-dialog-optional {
	color: var(--rd-text-grau);
	font-size: .85em;
	white-space: nowrap;
}

/* Leer, solange nichts schiefging - deshalb :empty statt einer Klasse, die
   script.js setzen muesste. */
.rd-dialog .freebie-error {
	color: #C62828;
	font-family: var(--rd-sans);
	font-size: calc(.97rem * var(--rd-zoom));
	margin: calc(10px * var(--rd-zoom)) 0;
}

.rd-dialog .freebie-error:empty {
	margin: 0;
}

.rd-dialog-fertig {
	text-align: center;
	padding: calc(10px * var(--rd-zoom)) 0;
}

.rd-dialog-haken {
	font-size: calc(46px * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
}

/* Der Honigtopf gegen Formularroboter. NICHT display:none - manche Roboter
   fuellen nur, was im Layout steht. Er wird stattdessen aus dem Bild
   geschoben. */
.rd-honigtopf {
	position: absolute;
	left: -9999px;
	width: 1px;
	height: 1px;
}

/* ------------------------------------------------------ Knoepfe im Dialog */

.rd-dialog-aktionen {
	display: flex;
	flex-wrap: wrap;
	justify-content: flex-end;
	gap: calc(12px * var(--rd-zoom));
	margin-top: calc(22px * var(--rd-zoom));
}

/* Die Knoepfe der Seite sind fuer einen Dialog zu gross. */
.rd-dialog .rd-btn {
	padding: calc(15px * var(--rd-zoom)) calc(28px * var(--rd-zoom));
	font-size: calc(1.08rem * var(--rd-zoom));
}

.rd-dialog .rd-btn:disabled {
	opacity: .5;
	cursor: not-allowed;
}

/* Nur fuer Vorleseprogramme. Steht hier und nicht bei den Grundlagen, weil
   sie bislang keine Entwurfsseite gebraucht hat: die Beschriftung des
   E-Mail-Feldes im Freebie-Dialog ist die erste, die sichtbar nicht
   dastehen darf (das Feld traegt seinen Platzhalter). */
.sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}


/* ==========================================================================
   404.html - die Fehlerseite
   ==========================================================================
   Die einzige Seite des Entwurfs, die niemand absichtlich aufruft. Sie hat
   deshalb genau eine Aufgabe: sagen, was passiert ist, und einen Weg zurueck
   anbieten. Alles andere waere Deko auf einer Sackgasse.

   DIE WELLE: der Abschnitt ist der einzige der Seite, unter ihm kommt sofort
   die Fusszeile. `--rd-wellenfarbe` traegt deshalb deren Farbe (Gelb-hell),
   nicht Creme - wie bei `.rd-abschluss`, und aus demselben Grund.           */

.rd-fehler {
	position: relative;
	overflow: hidden;
	background: var(--rd-creme);
	--rd-wellenfarbe: var(--rd-gelb-hell);
	/* Unten mehr als oben: der Bogen der Welle haengt 290px unter der Kante und
	   wuerde sonst in die Knoepfe schneiden. Dieselbe Rechnung wie bei
	   .rd-hallo, dort 60/165. */
	padding: calc(96px * var(--rd-zoom)) 0 calc(180px * var(--rd-zoom));
	/* Damit die kurze Seite nicht als Streifen ueber einer leeren Flaeche
	   steht: sie fuellt, was Kopfleiste und Fusszeile uebrig lassen. */
	min-height: calc(62vh - var(--rd-kopf));
	display: flex;
	align-items: center;
}

.rd-fehler-inner {
	/* ueber den Blobs - ohne das liegt der Text unter dem Weichzeichner. */
	position: relative;
	z-index: 1;
	text-align: center;
}

/* Die Zahl ist Schmuck und traegt keine Aussage: sie steht aria-hidden im
   Markup, weil ein Vorleser "vierhundertvier" vorlesen wuerde, bevor die
   Ueberschrift sagt, worum es geht. Der Gelbton ist deshalb auch schwach -
   lesbar sein muss hier die Ueberschrift, nicht die Ziffer. */
.rd-fehler-zahl {
	font-family: var(--rd-slab);
	font-weight: 400;
	font-size: calc(clamp(5rem, calc(60px + 7vw), 11rem) * var(--rd-zoom));
	line-height: 1;
	letter-spacing: calc(4px * var(--rd-zoom));
	color: var(--rd-gelb);
	margin: 0 0 calc(8px * var(--rd-zoom));
	-webkit-user-select: none;
	user-select: none;
}

.rd-fehler-text {
	font-family: var(--rd-sans);
	font-size: calc(1.12rem * var(--rd-zoom));
	line-height: 1.7;
	color: var(--rd-text-grau);
	max-width: calc(560px * var(--rd-zoom));
	margin: 0 auto calc(34px * var(--rd-zoom));
}

.rd-fehler-knoepfe {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: calc(16px * var(--rd-zoom));
}


/* ==========================================================================
   Breakpoints
   ========================================================================== */

/* Zwischenstufe: das Raster haelt, aber die Kopfzeile wird zu eng fuer vier
   Menuepunkte plus Loginknopf. */
@media (max-width: 1420px) {
	.rd-nav ul {
		gap: calc(24px * var(--rd-zoom));
	}

	.rd-nav a {
		font-size: calc(1rem * var(--rd-zoom));
	}

	.rd-btn-login {
		font-size: calc(1rem * var(--rd-zoom));
		padding: calc(15px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	}

	.rd-logo img {
		height: calc(62px * var(--rd-zoom));
	}

	:root {
		--rd-kopf: calc(100px * var(--rd-zoom));
	}
}

@media (max-width: 1150px) {
	/* Die Instagram-Spalte darf nicht mehr das Doppelte der anderen bekommen,
	   sonst rutscht die Angebotespalte auf eine Wortbreite zusammen. */
	.rd-fuss-raster {
		grid-template-columns: 1fr .8fr 1.2fr;
		gap: calc(30px * var(--rd-zoom));
	}

	.rd-nav,
	.rd-header-inner > .rd-btn-login {
		display: none;
	}

	.rd-burger {
		display: flex;
	}

	:root {
		--rd-kopf: calc(84px * var(--rd-zoom));
	}

	.rd-header-inner {
		gap: calc(16px * var(--rd-zoom));
	}

	/* Im Screendesign liegt auf Mobil das BILD ueber der Ueberschrift, nicht
	   darunter. Ein blosses Zusammenklappen der Spalten kehrt das um. */
	.rd-hero-inner {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(44px * var(--rd-zoom));
	}

	.rd-hero-bild {
		order: -1;
		justify-self: center;
		width: 100%;
		max-width: calc(460px * var(--rd-zoom));
		margin-right: 0;
	}

	.rd-angebote {
		padding-top: calc(90px * var(--rd-zoom));
	}

	.rd-hero {
		padding-bottom: calc(90px * var(--rd-zoom));
	}

	.rd-hero-titel {
		font-size: calc(clamp(2.5rem, 8vw, 3.4rem) * var(--rd-zoom));
	}

	/* Die Modifierregel steht WEITER OBEN im Dokument und haette hier
	   dieselbe Spezifitaet -- ohne diesen Zwilling gewinnt die Zeile
	   darueber, und der lange Satz waere unter 1150px wieder gross. */
	.rd-hero-titel-klein {
		font-size: calc(clamp(2rem, 6.4vw, 2.7rem) * var(--rd-zoom));
	}

	.rd-hero-fliess {
		max-width: none;
	}

	.rd-karten {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(28px * var(--rd-zoom));
	}

	.rd-karte {
		padding: calc(44px * var(--rd-zoom)) calc(40px * var(--rd-zoom)) calc(44px * var(--rd-zoom));
	}

	/* Im Mobilentwurf steht das Video UEBER dem Text, wie im Hero das Foto. */
	.rd-uebermich {
		padding: calc(90px * var(--rd-zoom)) 0;
	}

	.rd-uebermich-inner {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(44px * var(--rd-zoom));
	}

	/* Der Mobilentwurf stapelt die vier Schritte und setzt einen gelben Pfeil
	   dazwischen; die Punktwelle entfaellt. Groessen bleiben, wie sie sind -
	   Scheibe, Titel und Text sind im Mobilentwurf nachgemessen genauso gross
	   wie auf dem Desktop (96, 261 breit, Zeilenabstand 31). */
	.rd-schritte {
		grid-template-columns: minmax(0, 1fr);
		max-width: none;
	}

	/* Die Punktwelle ist eine Desktop-Figur: gestapelt laege sie waagerecht
	   hinter der zweiten Scheibe (Kevin, 19.09.2026: "am Handy sieht es
	   komisch aus"). Hier uebernehmen die Schrittpfeile. */
	.rd-schritte-linie {
		display: none;
	}

	.rd-schritt + .rd-schritt {
		margin-top: calc(36px * var(--rd-zoom));
	}

	.rd-schritt-pfeil {
		display: block;
		margin-top: calc(35px * var(--rd-zoom));
		width: calc(30px * var(--rd-zoom));
		height: calc(52px * var(--rd-zoom));
	}

	.rd-schritt-text {
		max-width: calc(460px * var(--rd-zoom));
	}

	.rd-freebies {
		grid-template-columns: minmax(0, 1fr);
		max-width: calc(560px * var(--rd-zoom));
		gap: calc(28px * var(--rd-zoom));
	}

	.rd-uebermich-bild {
		order: -1;
		justify-self: center;
		width: 100%;
		/* 460 waeren der Entwurf, 414 sind dieselben 90 Prozent wie oben - sonst
		   waere die Ellipse auf Mobil ploetzlich die groessere von beiden. */
		max-width: calc(414px * var(--rd-zoom));
		margin-left: 0;
		/* Der Einzug von rechts gilt nur fuer das zweispaltige Raster. Hier steht
		   die Ellipse mittig, und ein einseitiger Abstand ruecke sie schief. */
		margin-right: 0;
	}

	/* ---------------------------------------------- ueber-mich.html ----
	   Dieselbe Regel wie beim Hero der Startseite: die zwei Spalten fallen
	   uebereinander, und das Bild steht OBEN. Es steht im Markup ohnehin
	   zuerst; das order: -1 haelt es auch dann oben, wenn jemand die
	   Reihenfolge spaeter dreht.

	   Fuer diese Seite gibt es KEINEN Mobilentwurf - der Designer hat nur die
	   Startseite und das Menue mobil gezeichnet. Die Werte hier sind deshalb
	   von der Startseite uebernommen, nicht gemessen, und das ist der Grund,
	   warum sie dieselben sind. */
	.rd-hallo-inner,
	.rd-privat-inner {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(44px * var(--rd-zoom));
	}

	.rd-hallo-bild,
	.rd-privat-bild {
		order: -1;
		justify-self: center;
		width: 100%;
		max-width: calc(460px * var(--rd-zoom));
		margin-left: 0;
		margin-right: 0;
	}

	.rd-hallo-titel {
		font-size: calc(clamp(2.5rem, 8vw, 3.4rem) * var(--rd-zoom));
	}

	.rd-hallo-fliess {
		max-width: none;
	}

	.rd-hallo {
		padding-bottom: calc(90px * var(--rd-zoom));
	}

	/* Die Pille sitzt auf dem Desktop rechts unten am Foto. Auf einer Spalte
	   ist das Foto mittig und schmaler; dort steht sie wie auf der Startseite
	   links, sonst haengt sie ueber dem Rand des Fensters. */
	.rd-hallo-bild .rd-bewertung {
		left: 4%;
		right: auto;
	}

	.rd-bekannt,
	.rd-glaube,
	.rd-motivation,
	.rd-privat,
	.rd-werdegang {
		padding-top: calc(90px * var(--rd-zoom));
	}

	.rd-bekannt,
	.rd-motivation,
	.rd-privat {
		padding-bottom: calc(120px * var(--rd-zoom));
	}

	.rd-glaube {
		padding-bottom: calc(90px * var(--rd-zoom));
	}

	.rd-mut {
		padding: calc(80px * var(--rd-zoom)) 0;
	}

	/* Zwei Textspalten nebeneinander lohnen sich unter dieser Breite nicht
	   mehr; sie werden zu einem Absatz nach dem anderen. */
	.rd-mut-spalten {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(22px * var(--rd-zoom));
	}

	/* Die zweite Zitatkarte holt sich auf dem Desktop links und rechts Platz
	   ausserhalb ihres Textblocks. Auf einer Spalte gibt es den nicht. */
	.rd-zitat-gross {
		margin-left: 0;
		margin-right: 0;
	}

	/* Die Zeitleiste stapelt sich, und die Punktlinie entfaellt mit ihr -
	   waagerecht gedacht, waere sie senkrecht ein Strich quer durchs Bild. */
	.rd-stationen {
		grid-template-columns: minmax(0, 1fr);
		max-width: calc(460px * var(--rd-zoom));
	}

	.rd-stationen::before {
		display: none;
	}

	.rd-station + .rd-station {
		margin-top: calc(36px * var(--rd-zoom));
	}

	.rd-station-text {
		max-width: calc(420px * var(--rd-zoom));
		margin-top: calc(16px * var(--rd-zoom));
	}

	.rd-lernen {
		padding-top: calc(80px * var(--rd-zoom));
	}

	.rd-lernkarte {
		padding: calc(50px * var(--rd-zoom)) calc(40px * var(--rd-zoom)) calc(54px * var(--rd-zoom));
	}

	/* ------------------------------------------- mein-angebot.html
	   Dieselbe Regel wie fuer alle anderen Raster dieser Datei: bei 1150 wird
	   aus jedem Nebeneinander ein Untereinander. Drei Karten auf 1102 nutzbarer
	   Breite waeren je 342 - schmaler als jede Karte im Entwurf. */
	.rd-standort-karte,
	.rd-kursspalten,
	.rd-vertrauen-inner {
		grid-template-columns: minmax(0, 1fr);
	}

	.rd-standort-karte {
		padding: calc(44px * var(--rd-zoom));
		gap: calc(38px * var(--rd-zoom));
	}

	/* Gestapelt gibt es keine Spaltenhoehe mehr, an der sich das Bild ausrichten
	   koennte - ohne feste Hoehe zieht object-fit: cover es sonst auf die volle
	   Bildhoehe auf. */
	.rd-standort-bild img {
		min-height: 0;
		height: calc(420px * var(--rd-zoom));
	}

	.rd-vertrauen-ring {
		max-width: calc(420px * var(--rd-zoom));
	}

	/* Der Text bleibt links buendig, auch wenn das Bild darueber mittig steht:
	   darunter haengt das Bewertungswidget, und das richtet sich selbst links
	   aus. Mittiger Text ueber linksbuendigem Widget waere zwei Kanten. */
	.rd-vertrauen-inner {
		gap: calc(46px * var(--rd-zoom));
	}

	/* ---- kurse_neu.html ---- */

	/* Die beiden Angebotskarten und der Kontakt untereinander: bei 1150 ist
	   eine zweispaltige Karte mit Aufzaehlung nicht mehr lesbar. */
	.rd-zielgruppen-raster {
		grid-template-columns: minmax(0, 1fr);
	}

	.rd-kontakt-inner {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(36px * var(--rd-zoom));
	}

	.rd-kontakt-bild {
		max-width: calc(340px * var(--rd-zoom));
	}

}

@media (max-width: 600px) {
	/* Abschnitt 7 und 8 auf einer Spalte. Der Entwurf macht es genauso:
	   die Newsletterkarte stapelt Text ueber Knopf, das Fussraster wird
	   einspaltig, und in der Schlusszeile stehen die Verweise UEBER dem
	   Urhebervermerk - daher column-reverse statt einer zweiten Reihenfolge
	   im Markup. */
	.rd-abschluss {
		padding: calc(110px * var(--rd-zoom)) 0 calc(120px * var(--rd-zoom));
	}

	.rd-newsletter {
		flex-direction: column;
		align-items: stretch;
		gap: calc(26px * var(--rd-zoom));
		margin-top: calc(-40px * var(--rd-zoom));
		padding: calc(30px * var(--rd-zoom)) calc(26px * var(--rd-zoom));
	}

	.rd-newsletter .rd-btn {
		justify-content: space-between;
	}

	.rd-fuss-raster {
		grid-template-columns: 1fr;
		gap: calc(44px * var(--rd-zoom));
		padding-top: calc(50px * var(--rd-zoom));
	}

	.rd-fuss-zeile {
		flex-direction: column-reverse;
		align-items: flex-start;
		gap: calc(14px * var(--rd-zoom));
	}

	.rd-fuss-recht {
		gap: calc(10px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	}

	/* Auf einer Spalte fuellt der Bewertungstext die Karte bis in die untere
	   Ecke. Das Anfuehrungszeichen liegt zwar dahinter und ueberdeckt nichts,
	   steht dort aber mitten im Text statt in einer freien Ecke. */
	.rd-stimmen-live .es-review-background-container::after {
		display: none;
	}

	.rd-stimmen {
		padding: calc(110px * var(--rd-zoom)) 0 calc(90px * var(--rd-zoom));
	}

	body {
		font-size: calc(17px * var(--rd-zoom));
	}

	.rd-container {
		padding: 0 calc(20px * var(--rd-zoom));
	}

	.rd-logo img {
		height: calc(38px * var(--rd-zoom));
	}

	.rd-hero {
		padding-top: calc(24px * var(--rd-zoom));
	}

	.rd-hero-bild {
		max-width: 100%;
	}

	.rd-hero-ring {
		border-width: calc(14px * var(--rd-zoom));
	}

	.rd-bewertung {
		left: 50%;
		bottom: -6%;
		transform: translateX(-50%);
		padding: calc(12px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	}

	.rd-hero-inner {
		gap: calc(56px * var(--rd-zoom));
	}

	.rd-hero-aktionen {
		flex-direction: column;
		align-items: flex-start;
	}

	.rd-schlagworte {
		gap: calc(10px * var(--rd-zoom));
		margin-bottom: calc(40px * var(--rd-zoom));
	}

	.rd-schlagworte li {
		font-size: calc(.88rem * var(--rd-zoom));
		padding: calc(10px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	}

	.rd-karte {
		padding: calc(32px * var(--rd-zoom)) calc(26px * var(--rd-zoom)) calc(34px * var(--rd-zoom));
	}

	.rd-freebie {
		padding: calc(32px * var(--rd-zoom)) calc(28px * var(--rd-zoom)) calc(36px * var(--rd-zoom));
	}

	.rd-freebie-aktion {
		gap: calc(14px * var(--rd-zoom));
		padding: calc(13px * var(--rd-zoom)) calc(14px * var(--rd-zoom));
	}

	.rd-karte .rd-btn {
		width: 100%;
		justify-content: space-between;
	}

	/* Der Mobilentwurf setzt die vier Merkmale untereinander. */
	.rd-merkmale {
		grid-template-columns: minmax(0, 1fr);
	}

	.rd-uebermich-bild {
		max-width: 90%;
	}

	/* Ellipse und Pille schrumpfen nicht miteinander: die Pille ist
	   inhaltsbreit. Ohne diese Zeilen waere sie auf schmalen Geraeten breiter
	   als die halbe Ellipse und stuende ueber deren Rand hinaus. */
	.rd-insta {
		right: 6%;
		gap: calc(12px * var(--rd-zoom));
		padding: calc(9px * var(--rd-zoom)) calc(22px * var(--rd-zoom)) calc(9px * var(--rd-zoom)) calc(14px * var(--rd-zoom));
	}

	.rd-insta img {
		width: calc(40px * var(--rd-zoom));
		height: calc(40px * var(--rd-zoom));
	}

	.rd-insta-text strong {
		font-size: calc(1.1rem * var(--rd-zoom));
	}

	.rd-insta-text small {
		font-size: calc(.85rem * var(--rd-zoom));
	}

	.rd-play {
		width: calc(78px * var(--rd-zoom));
		height: calc(78px * var(--rd-zoom));
	}

	.rd-play .material-symbols-outlined {
		font-size: calc(40px * var(--rd-zoom));
	}

	/* Die Pille steht auf dem Telefon mittig unter dem Foto - dieselbe Regel
	   wie im Hero der Startseite. Sie muss hier NOCH EINMAL stehen, obwohl
	   .rd-bewertung sie schon traegt: der Aufbau .rd-hallo-bild .rd-bewertung
	   wiegt schwerer als .rd-bewertung allein, und ohne diese Zeile behielte
	   die Pille ihr left: 4% - waehrend das translateX(-50%) von dort trotzdem
	   greift. Die Pille haengt dann halb aus dem Fenster. */
	.rd-hallo-bild .rd-bewertung {
		left: 50%;
		right: auto;
	}

	/* ---------------------------------------------- ueber-mich.html ----
	   Auf dem Telefon steht das Zeichen der zwei Punkte UEBER dem Text statt
	   daneben: neben einer 72er Scheibe bleiben von 500 Pixeln keine 340
	   uebrig, und der Text bricht dort nach zwei Woertern um. */
	.rd-punkt {
		grid-template-columns: minmax(0, 1fr);
		gap: calc(20px * var(--rd-zoom));
	}

	.rd-punkt-titel {
		margin-top: 0;
		font-size: calc(1.9rem * var(--rd-zoom));
	}

	.rd-zitat,
	.rd-zitat-gross {
		padding: calc(32px * var(--rd-zoom)) calc(26px * var(--rd-zoom)) calc(36px * var(--rd-zoom));
	}

	.rd-zitat-satz,
	.rd-zitat-gross .rd-zitat-satz {
		font-size: calc(1.85rem * var(--rd-zoom));
	}

	.rd-zitat-funke,
	.rd-zitat-gross .rd-zitat-funke {
		left: calc(20px * var(--rd-zoom));
		right: auto;
		font-size: calc(30px * var(--rd-zoom));
	}

	.rd-karte-weiss,
	.rd-karte-breit {
		padding: calc(30px * var(--rd-zoom)) calc(26px * var(--rd-zoom));
	}

	.rd-lernkarte {
		padding: calc(44px * var(--rd-zoom)) calc(26px * var(--rd-zoom)) calc(48px * var(--rd-zoom));
	}

	/* Der Knopf in der gelben Karte traegt einen langen Text und wuerde sonst
	   ueber die Karte hinauslaufen. */
	.rd-lernkarte .rd-btn {
		width: 100%;
		justify-content: space-between;
	}

	.rd-glaube-trenner::before,
	.rd-glaube-trenner::after {
		width: calc(60px * var(--rd-zoom));
	}

	/* ------------------------------------------- mein-angebot.html */
	.rd-ang-hero {
		padding: calc(64px * var(--rd-zoom)) 0 calc(72px * var(--rd-zoom));
	}

	/* Drei Pillen nebeneinander passen auf 500 nicht mehr; untereinander und
	   ueber die volle Breite bleiben sie treffsicher genug fuer einen Daumen. */
	.rd-sprungmarken {
		flex-direction: column;
		align-items: stretch;
	}

	/* flex: 1 ist hier nicht Kosmetik: das <li> ist selbst ein Flexkasten, und
	   ohne die Zeile bleibt das <a> so breit wie sein Text und klebt links -
	   die Pille waere ueber die halbe Breite tot. */
	.rd-sprungmarken li a {
		flex: 1;
		justify-content: center;
	}

	/* Ring und Ueberschrift nebeneinander lassen der Ueberschrift auf 500 rund
	   300 Pixel - "Standortbestimmung" bricht dort mitten im Wort. */
	.rd-leistung-kopf {
		flex-direction: column;
		align-items: flex-start;
		gap: calc(18px * var(--rd-zoom));
	}

	.rd-leistung-standort,
	.rd-leistung-pakete,
	.rd-kurse,
	.rd-vertrauen,
	.rd-faq {
		padding-top: calc(76px * var(--rd-zoom));
		padding-bottom: calc(120px * var(--rd-zoom));
	}

	.rd-standort-karte {
		padding: calc(30px * var(--rd-zoom));
		border-radius: calc(28px * var(--rd-zoom));
	}

	.rd-standort-bild img {
		height: calc(300px * var(--rd-zoom));
	}

	/* Preis und Knopf nebeneinander sprengen die Karte; untereinander bekommt
	   der Knopf die volle Breite. */
	.rd-standort-fuss {
		flex-direction: column;
		align-items: stretch;
		gap: calc(18px * var(--rd-zoom));
	}

	.rd-standort-fuss .rd-btn {
		justify-content: center;
	}

	.rd-kurskachel {
		padding: calc(20px * var(--rd-zoom)) calc(20px * var(--rd-zoom)) calc(20px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	}

	.rd-faq-punkt summary,
	.rd-faq-antwort {
		padding-left: calc(22px * var(--rd-zoom));
		padding-right: calc(22px * var(--rd-zoom));
	}

	/* ---- kurse_neu.html ---- */

	.rd-kursliste,
	.rd-gratisliste,
	.rd-zielgruppen {
		padding: calc(72px * var(--rd-zoom)) 0 calc(84px * var(--rd-zoom));
	}

	.rd-zielgruppe {
		padding: calc(46px * var(--rd-zoom)) calc(26px * var(--rd-zoom)) calc(30px * var(--rd-zoom));
	}

	.rd-zielgruppe-ring {
		left: calc(26px * var(--rd-zoom));
	}

	.rd-kontakt-knoepfe .rd-btn {
		width: 100%;
	}

	/* Der Dialog nimmt auf dem Telefon die ganze Breite; ein Rand von 40px
	   liesse fuer das Zahlungsfenster zu wenig uebrig. */
	.rd-dialog {
		padding: calc(16px * var(--rd-zoom)) calc(10px * var(--rd-zoom));
	}

	.rd-dialog-karte {
		padding: calc(26px * var(--rd-zoom)) calc(20px * var(--rd-zoom));
	}

	/* ---- 404.html ---- */

	/* Auf dem Telefon ist die Hoehe knapp: die Fuellhoehe faellt weg, und die
	   beiden Knoepfe stehen untereinander in voller Breite statt als zwei
	   halbe Woerter nebeneinander. */
	.rd-fehler {
		min-height: 0;
		padding: calc(56px * var(--rd-zoom)) 0 calc(150px * var(--rd-zoom));
	}

	.rd-fehler-knoepfe {
		flex-direction: column;
		align-items: stretch;
	}

	/* Drei Zahlknoepfe nebeneinander sind auf dem Telefon drei Wortteile. */
	.rd-dialog-zahlwahl {
		flex-direction: column;
	}

	/* Aus demselben Grund die zweispaltigen Formularzeilen (Anrede/Vorname,
	   Strasse/Nr., PLZ/Ort): bei 320px Geraetebreite bleiben nach den Raendern
	   von Dialog und Karte rund 260px, und die schmale Spalte bekaeme davon ein
	   Viertel - ein Auswahlfeld "Anrede", in dem "Frau" nicht mehr hineinpasst.
	   Untereinander ist das Formular laenger und lesbar; der Dialog scrollt
	   ohnehin. */
	.rd-dialog-zeile {
		flex-direction: column;
		gap: 0;
	}

	.rd-dialog-aktionen .rd-btn {
		flex: 1;
	}

}

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

	.rd-btn {
		transition: none;
	}

	.rd-btn:hover {
		transform: none;
	}

	.rd-play,
	.rd-insta {
		transition: none;
	}

	.rd-play:hover {
		transform: translate(-50%, -50%);
	}

	.rd-insta:hover {
		transform: none;
	}
}

/* ===========================================================================
   Die Zahlen, gegen die gebaut wurde
   ---------------------------------------------------------------------------
   Abgemessen an Screendesign_Startseite_Vorschau.png (1920 breit) und
   Screendesign_Startseite_MOBILE_Vorschau.png (500 breit), nicht geschaetzt.
   Wer hier etwas aendert, kann gegen dieselben Werte nachmessen.

   ACHTUNG BEIM NACHMESSEN: das sind die Zahlen des ENTWURFS. Die Seite gibt sie
   um --rd-zoom verkleinert aus (siehe :root), zurzeit .93. Wer im Browser
   nachmisst, misst also 122 * .93 = 113 fuer die Kopfzeile. Genau deshalb steht
   der Faktor an einer einzigen Stelle: auf 1 gesetzt, muessen die Zahlen unten
   wieder Pixel fuer Pixel herauskommen, und das ist die Probe darauf, dass die
   Verkleinerung nichts verzogen hat.

   Kopfzeile      Hoehe 122; Logo 63 Ink (= 79 CSS); Navi 710..1308, mittig
                  zwischen Logo (bis 525) und Loginknopf (ab ~1490)
   Container      Inhalt 211..1710, also 1500 breit bei 24 Innenabstand
   Hero           Kreis 978..1784 (806 Durchmesser), Oberkante 159
                  H1 Zeile 1 y 329..389, x 214..623; Zeile 2 y 418..479
                  Fliesstext 5 Zeilen ab y 549, Zeilenabstand 41, breiteste 700
                  Knopf 1 Pille 210..479 x 789..862 (270x74), Text 157 breit
   Farbkante      Hero -> Angebote bei y 1101..1161 (flache Welle)
   Angebote       H2 y 1331..1380, x 393..1528 (1136 breit, eine Zeile)
                  Lead 2 Zeilen ab 1414, Zeilenabstand 39
                  Pillen y 1526..1542, 4 Stueck, Abstand 18, Rand 29
                  Karten 209..942 und 986..1710, Abstand 44
                  Iconscheibe 70; Innenabstand 58 oben, 60 links
                  Kartentitel 38px/46 Zeilenabstand; Kartentext 21px/34
   Ueber mich     Abschnittsanfang y 2385 (Welle 2352..2408), Ende 3684
                  Ellipse x 98..954, y 2531..3485 - also 856 breit, 954 hoch und
                  NICHT rund; Ring 37 stark, #D6EFF2; Abspielknopf 100 mittig
                  Instagram-Pille 223x73, rechte Kante 151 vor dem Ellipsenrand,
                  Unterkante 82 darueber
                  Textspalte x 1007..1660 (653 breit), Container endet erst 1710
                  Label y 2603..2622; H2 2650..2702, gelb ab x 1424
                  Absaetze 24px, Zeilenabstand 39,5; mobil 20,8 bei 500 Breite
                  Haken 28er Scheibe, Spaltenabstand 341, Zeilenabstand 45
                  Namenszug (Bild, fehlt noch) 246x52; Name 3331..3353
   ---------------------------------------------------------------------------
   ABWEICHUNG MIT ABSICHT: die Ellipse laeuft auf 90 Prozent der gemessenen
   856, also 770, und steht dabei mittig ueber der alten Lage (141..911 statt
   98..954) - siehe .rd-uebermich-bild. --rd-zoom: 1 stellt also den Entwurf
   wieder her, DIESE eine Groesse ausgenommen.
   =========================================================================== */

/* ===========================================================================
   KUNDENBEREICH (Etappe E2, 17.08.2026)

   Eigener Namensraum `rd-kb-`, und das ist Absicht: `.rd-termine` gehoert seit
   dem 15.08.2026 der Terminzeile auf der Widerrufsseite, `.rd-posten` der
   Bestellzusammenfassung. Einen vorhandenen Namen ein zweites Mal mit anderer
   Bedeutung zu belegen ist der Fehler, den tests/test_kurse_seite.php am
   16.08.2026 gefangen hat.

   Die Seite ist breiter als das Anmeldeformular - ein Dashboard passt nicht in
   `.rd-schmal`. Der ABGEMELDETE Zustand behaelt die schmale Formularkarte.
   =========================================================================== */

.rd-kb {
	padding: calc(48px * var(--rd-zoom)) 0 calc(72px * var(--rd-zoom));
	background: var(--rd-creme);
}

/* Begruessung und Abmelden in einer Zeile, auf schmalen Geraeten untereinander. */
.rd-kb-kopf {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: calc(16px * var(--rd-zoom));
	margin-bottom: calc(28px * var(--rd-zoom));
}

/* `.rd-kb-gruss` UND `.rd-kb-gruss-zeile` SIND GEFALLEN (04.09.2026, Kevin:
   "die grosse Ueberschrift komplett weg"). Der Waechter in
   tests/test_kundenbereich.php hat sie sofort gemeldet - er prueft den
   Namensraum in BEIDE Richtungen, und eine Regel ohne Markup ist genauso
   ein Befund wie Markup ohne Regel. An ihre Stelle ist
   `.rd-kb-angemeldet` getreten, eine Zeile statt einer Ueberschrift. */

/* Die Karten. Auto-fit statt fester Spaltenzahl: der Kundenbereich hat je nach
   Bestand zwei bis vier Abschnitte, und eine feste Zahl liesse bei dreien eine
   Luecke stehen. */
.rd-kb-raster {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 380px), 1fr));
	gap: calc(24px * var(--rd-zoom));
	align-items: start;
}

.rd-kb-karte {
	background: var(--rd-weiss);
	border: 1px solid var(--rd-tuerkis-ring);
	border-radius: calc(18px * var(--rd-zoom));
	padding: calc(28px * var(--rd-zoom));
}

/* Ein Angebot ohne feste Termine (04.09.2026). Kein eigener Kasten - der
   Satz steht, wo sonst die Auswahl staende, und soll nicht wie ein Fehler
   aussehen. */

.rd-lp-ohne-termin {
	margin-top: calc(10px * var(--rd-zoom));
	color: var(--rd-text-grau);
}

/* ------------------------------------------------ Die Reiter (04.09.2026)
   Kevin: "die einzelnen Abschnitte in Tabs organisieren, wie es im Admin-
   Dashboard ist". Die Knoepfe tragen ihren Zustand in einer Klasse UND in
   `aria-current` - die Farbe allein waere fuer ein Vorleseprogramm leer,
   dieselbe Regel wie bei kb_terminStatus(). */

.rd-kb-reiter {
	display: flex;
	flex-wrap: wrap;
	gap: calc(8px * var(--rd-zoom));
	margin-bottom: calc(24px * var(--rd-zoom));
}

.rd-kb-reiter-knopf {
	display: inline-flex;
	align-items: center;
	gap: calc(8px * var(--rd-zoom));
	cursor: pointer;
	border: 1px solid var(--rd-tuerkis-ring);
	background: var(--rd-weiss);
	color: var(--rd-text);
	font-family: inherit;
	font-size: calc(1rem * var(--rd-zoom));
	border-radius: 999px;
	padding: calc(9px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
}

.rd-kb-reiter-knopf:hover {
	background: var(--rd-creme);
}

.rd-kb-reiter-knopf.ist-aktiv {
	background: var(--rd-gelb);
	border-color: var(--rd-gelb);
	font-weight: 700;
}

/* Ohne JavaScript bleibt jede Tafel sichtbar - deshalb steht hier KEIN
   `display:none`. Das Ausblenden macht das `hidden`-Attribut, das das
   Skript setzt. */
.rd-kb-tafel[hidden] {
	display: none;
}

/* Die Zeile unter den Reitern: klein, sachlich, kein Gruss. */
.rd-kb-angemeldet {
	margin: 0;
	color: var(--rd-text-grau);
	font-size: calc(.95rem * var(--rd-zoom));
}

/* --------------------------------------------------- Der Kursplan (E10-2)
   Die Merkmale als Chips, der Fortschritt als Balken. Der Balken traegt
   KEINE Aussage allein — die Zahl steht daneben; er ist nur schneller zu
   erfassen. */

.rd-kb-merkmale {
	display: flex;
	flex-wrap: wrap;
	gap: calc(6px * var(--rd-zoom));
	margin-bottom: calc(10px * var(--rd-zoom));
}

.rd-kb-merkmal {
	background: var(--rd-creme);
	border: 1px solid var(--rd-tuerkis-ring);
	border-radius: 999px;
	padding: calc(2px * var(--rd-zoom)) calc(10px * var(--rd-zoom));
	font-size: calc(0.9rem * var(--rd-zoom));
}

.rd-kb-fortschritt {
	display: block;
	width: calc(90px * var(--rd-zoom));
	height: calc(8px * var(--rd-zoom));
	border-radius: 999px;
	background: var(--rd-creme);
	overflow: hidden;
	flex: none;
}

.rd-kb-fortschritt-fuellung {
	display: block;
	height: 100%;
	background: var(--rd-tuerkis);
}

/* ------------------------------------------------- Die Empfehlungen (E10-1)
   Sie stehen IN der Kontingentkarte, nicht in einer eigenen — deshalb hier
   nur der Abstand zwischen zwei Kindergruppen. Alles andere erbt von
   .rd-kb-liste. */

.rd-kb-empfehlungen {
	margin-bottom: calc(18px * var(--rd-zoom));
}

/* ---------------------------------------------- Der Onboarding-Wizard (E9-3)
   Er steht UEBER dem Raster und soll auffallen: gelber Rand statt tuerkis,
   volle Breite. Die Karte verschwindet, sobald der Schritt geschlossen ist —
   beantwortet oder weggeklickt —, deshalb darf sie auffaellig sein, ohne zu
   nerven. */

.rd-kb-onboarding {
	border-color: var(--rd-gelb);
	border-width: 2px;
	margin-bottom: calc(24px * var(--rd-zoom));
}

.rd-kb-onboarding-knoepfe {
	display: flex;
	flex-wrap: wrap;
	gap: calc(10px * var(--rd-zoom));
	align-items: center;
	margin-top: calc(14px * var(--rd-zoom));
}

/* Das Formular ist nur die Huelle um den "Spaeter"-Knopf; ohne diese Zeile
   braeche es die Knopfreihe um, weil ein <form> ein Blockelement ist. */
.rd-kb-onboarding-spaeter {
	display: inline;
	margin: 0;
}

/* Eine Karte, die ueber die ganze Breite geht - fuer die Rechnungstabelle. */
.rd-kb-karte-breit {
	grid-column: 1 / -1;
}

.rd-kb-karte-kopf {
	display: flex;
	align-items: center;
	gap: calc(10px * var(--rd-zoom));
	margin-bottom: calc(18px * var(--rd-zoom));
}

.rd-kb-karte-kopf .material-symbols-outlined {
	color: var(--rd-tuerkis-dunkel);
	font-size: calc(24px * var(--rd-zoom));
}

.rd-kb-titel {
	font-family: var(--rd-sans-fett);
	font-size: calc(19px * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0;
}

.rd-kb-leer {
	color: var(--rd-text-grau);
	font-size: calc(15px * var(--rd-zoom));
	line-height: 1.6;
	margin: 0;
}

.rd-kb-liste {
	list-style: none;
	margin: 0;
	padding: 0;
}

.rd-kb-zeile {
	display: flex;
	gap: calc(16px * var(--rd-zoom));
	align-items: flex-start;
	padding: calc(14px * var(--rd-zoom)) 0;
	border-top: 1px solid var(--rd-tuerkis-ring);
}

.rd-kb-zeile:first-child {
	border-top: 0;
	padding-top: 0;
}

/* Der Datumsblock. Feste Breite, damit die Texte daneben auf einer Kante
   stehen - genau das ist der Unterschied zwischen "Liste" und "aufgeraeumt". */
.rd-kb-datum {
	flex: 0 0 calc(64px * var(--rd-zoom));
	text-align: center;
	background: var(--rd-tuerkis-hell);
	border-radius: calc(12px * var(--rd-zoom));
	padding: calc(8px * var(--rd-zoom)) 0;
}

.rd-kb-datum-tag {
	display: block;
	font-family: var(--rd-sans-fett);
	font-size: calc(20px * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
	line-height: 1.1;
}

.rd-kb-datum-monat {
	display: block;
	font-size: calc(12px * var(--rd-zoom));
	text-transform: uppercase;
	letter-spacing: .06em;
	color: var(--rd-text-grau);
}

.rd-kb-inhalt {
	min-width: 0;
}

.rd-kb-name {
	font-family: var(--rd-sans-fett);
	font-size: calc(16px * var(--rd-zoom));
	color: var(--rd-text);
	margin: 0;
}

.rd-kb-meta {
	font-size: calc(14px * var(--rd-zoom));
	color: var(--rd-text-grau);
	margin: calc(3px * var(--rd-zoom)) 0 0;
}

/* Eine Zeile der Karte "Zugang fuer Ihr Kind" (04.09.2026). Je Kind EIN
   Formular - der Trennstrich macht sichtbar, wo das eine aufhoert und das
   naechste anfaengt; ohne ihn sieht die Karte aus wie ein Sammelformular,
   und genau das ist sie nicht. Der letzte Block traegt keinen. */
.rd-kb-zugangzeile {
	padding: calc(12px * var(--rd-zoom)) 0;
	border-bottom: 1px solid var(--rd-linie, #E6E8E8);
}

.rd-kb-zugangzeile:last-of-type {
	border-bottom: 0;
}

/* Statuszeichen. Farbe allein traegt die Aussage nicht - der Text steht immer
   dabei, sonst ist die Zeile fuer Farbenblinde und Vorleseprogramme leer. */
.rd-kb-status {
	display: inline-block;
	font-size: calc(12px * var(--rd-zoom));
	font-family: var(--rd-sans-fett);
	border-radius: 999px;
	padding: calc(3px * var(--rd-zoom)) calc(10px * var(--rd-zoom));
	background: var(--rd-tuerkis-hell);
	color: var(--rd-tuerkis-dunkel);
	white-space: nowrap;
}

.rd-kb-status-offen {
	background: var(--rd-gelb-hell);
	color: #7A5B00;
}

.rd-kb-status-weg {
	background: #F3F4F4;
	color: var(--rd-text-grau);
}

/* Die Tabelle scrollt IN SICH, nicht die Seite. Eine Seite, die waagerecht
   wandert, ist auf dem Telefon unbedienbar. */
.rd-kb-tabellenrahmen {
	overflow-x: auto;
}

.rd-kb-tabelle {
	width: 100%;
	border-collapse: collapse;
	font-size: calc(15px * var(--rd-zoom));
}

.rd-kb-tabelle th {
	text-align: left;
	font-family: var(--rd-sans-fett);
	font-size: calc(13px * var(--rd-zoom));
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--rd-text-grau);
	padding: 0 calc(12px * var(--rd-zoom)) calc(10px * var(--rd-zoom)) 0;
	white-space: nowrap;
}

.rd-kb-tabelle td {
	padding: calc(12px * var(--rd-zoom)) calc(12px * var(--rd-zoom)) calc(12px * var(--rd-zoom)) 0;
	border-top: 1px solid var(--rd-tuerkis-ring);
	vertical-align: middle;
}

.rd-kb-betrag {
	font-family: var(--rd-sans-fett);
	white-space: nowrap;
}

/* Der Kontingentbalken. Auch hier steht die Zahl im Text daneben - ein Balken
   allein sagt nicht, ob 3 von 10 viel oder wenig sind. */
.rd-kb-balken {
	height: calc(8px * var(--rd-zoom));
	background: var(--rd-tuerkis-ring);
	border-radius: 999px;
	overflow: hidden;
	margin: calc(8px * var(--rd-zoom)) 0 calc(4px * var(--rd-zoom));
}

.rd-kb-balken-fuellung {
	height: 100%;
	background: var(--rd-tuerkis);
	border-radius: 999px;
}

.rd-kb-fuss {
	margin-top: calc(28px * var(--rd-zoom));
	font-size: calc(14px * var(--rd-zoom));
	color: var(--rd-text-grau);
	line-height: 1.7;
}

/* --- Etappe E3: die eigenen Daten aendern -------------------------------
   Das Formularvokabular ist NICHT neu erfunden: Feld, Knopf und Hinweis
   kommen aus `.rd-feld`, `.rd-btn` und `.rd-hinweis`, wie im Anmeldeformular
   darueber. Hier stehen nur die drei Dinge, die es dort nicht gibt - die
   Leseliste, das zweispaltige Raster und das breite Feld darin. */

.rd-kb-lesefeld {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: calc(6px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	margin: 0 0 calc(22px * var(--rd-zoom));
	font-size: calc(15px * var(--rd-zoom));
}

.rd-kb-lesefeld dt {
	font-family: var(--rd-sans-fett);
	font-size: calc(13px * var(--rd-zoom));
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--rd-text-grau);
	align-self: center;
}

.rd-kb-lesefeld dd {
	margin: 0;
}

.rd-kb-formraster {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 0 calc(16px * var(--rd-zoom));
}

/* Strasse, Ort und das Stichwort brauchen mehr Platz als Hausnummer, PLZ
   und Telefonnummer daneben. Zwei Spalten von dreien. */
.rd-kb-feld-breit {
	grid-column: span 2;
}

/* ------------------------------------------------------------------
   E4 - buchen und verschieben.
   ------------------------------------------------------------------ */

/* Ein Knopf in Textgroesse. Er steht mitten in einer Terminzeile und darf
   sie nicht auseinanderdruecken - deshalb kein Rahmenknopf wie sonst.
   `min-height` trotzdem: ein Ziel unter 44px ist auf dem Telefon nicht
   sicher zu treffen. */
.rd-kb-knopf-klein {
	display: inline-flex;
	align-items: center;
	min-height: calc(32px * var(--rd-zoom));
	padding: calc(4px * var(--rd-zoom)) calc(12px * var(--rd-zoom));
	font-family: var(--rd-sans-fett);
	font-size: calc(13px * var(--rd-zoom));
	color: var(--rd-tuerkis-dunkel);
	background: var(--rd-tuerkis-hell);
	border: 0;
	border-radius: 999px;
	cursor: pointer;
}

/* ALS LINK GENAUSO WIE ALS KNOPF (05.09.2026). "Termin im Kalender speichern"
   ist ein <a>, kein <button>: der Browser soll die .ics herunterladen, und das
   tut er bei einem Link von selbst — ein Knopf braeuchte JavaScript fuer
   etwas, das HTML kann. Ein <a> bringt aber `text-decoration: underline` und
   eine eigene Linkfarbe mit, und ohne diese zwei Zeilen saehe der eine Knopf
   unterstrichen und blau neben dem anderen. */
a.rd-kb-knopf-klein {
	text-decoration: none;
	color: var(--rd-tuerkis-dunkel);
}

.rd-kb-knopf-klein:hover {
	filter: brightness(0.96);
}

.rd-kb-knopf-klein:disabled {
	opacity: 0.55;
	cursor: default;
}

/* EINE ZEILE KNOEPFE JE TERMIN (19.09.2026, Kevin: "Buttons im Kundenbereich
   uebersichtlicher"). Bis dahin stand jeder Knopf in einem eigenen Absatz,
   dazwischen kursive Saetze. Jetzt liegen sie nebeneinander und brechen auf
   dem Telefon um; die Saetze folgen darunter in einem Absatz (.rd-kb-hinweis). */
.rd-kb-aktionen {
	display: flex;
	flex-wrap: wrap;
	gap: calc(8px * var(--rd-zoom));
	margin-top: calc(10px * var(--rd-zoom));
}

.rd-kb-knopf-klein {
	gap: calc(6px * var(--rd-zoom));
}

.rd-kb-knopf-klein .material-symbols-outlined {
	font-size: calc(18px * var(--rd-zoom));
}

/* Absagen ist die andere Richtung als Buchen und Verschieben - derselbe Knopf,
   nur in Weiss mit Rand, damit man ihn nicht aus Gewohnheit trifft. */
.rd-kb-knopf-absagen {
	background: #fff;
	border: 1px solid var(--rd-tuerkis-hell);
}

/* Ein Hinweis ist kein Fehler. Er sagt, warum hier kein Knopf steht - eine
   Zeile ohne Knopf und ohne Erklaerung sieht kaputt aus. */
.rd-kb-hinweis {
	font-style: italic;
}

.rd-kb-aktionen + .rd-kb-hinweis {
	margin-top: calc(6px * var(--rd-zoom));
}

/* Schon beantwortete Fragen stehen eingeklappt unter dem Bogen: aus dem Weg,
   aber erreichbar, wenn jemand eine Antwort erneuern will. */
.rd-kb-klappe {
	margin-top: calc(10px * var(--rd-zoom));
}

.rd-kb-klappe > summary {
	cursor: pointer;
	color: var(--rd-text-grau);
	font-size: calc(15px * var(--rd-zoom));
	line-height: 1.6;
	display: list-item;
	margin-bottom: calc(8px * var(--rd-zoom));
}

.rd-kb-buchen-zeile {
	margin-top: calc(14px * var(--rd-zoom));
}

/* Die Auswahlflaeche haengt unter der Terminliste, nicht in einem Dialog:
   ein Overlay muesste den Fokus fangen und die Ruecktaste bedienen, und das
   ist auf einer Seite ohne Rahmenwerk mehr Bauteil als Nutzen. */
.rd-kb-auswahl {
	margin-top: calc(16px * var(--rd-zoom));
	padding-top: calc(16px * var(--rd-zoom));
	border-top: 1px solid var(--rd-linie, #E6E8E8);
}

/* `hidden` gewinnt gegen jede Anzeigeregel darueber - ohne das setzt die
   Listenregel die Flaeche wieder sichtbar, sobald sie ein `display` traegt. */
.rd-kb-auswahl[hidden] {
	display: none;
}

.rd-kb-kindwahl {
	font-family: inherit;
	font-size: calc(14px * var(--rd-zoom));
	padding: calc(4px * var(--rd-zoom)) calc(8px * var(--rd-zoom));
	border: 1px solid var(--rd-linie, #E6E8E8);
	border-radius: calc(8px * var(--rd-zoom));
	margin-left: calc(6px * var(--rd-zoom));
}

/* WAS gebucht werden soll (Kevin, 16.09.2026): Nachhilfestunde oder
   Feedbackgespraech. Zwei Knoepfe nebeneinander, in derselben Zeilenhoehe wie
   die Kindwahl darueber - sie beantworten zwei Teile derselben Frage und
   sollen deshalb wie ein Paar aussehen, nicht wie zwei Abschnitte.

   `hidden` MUSS HIER GEWINNEN, aus demselben Grund wie bei .rd-kb-auswahl
   weiter oben: das Skript blendet eine Art aus, die es fuer das gewaehlte
   Kind nicht gibt, und `display: inline-flex` setzte sie sonst wieder
   sichtbar. */
.rd-kb-artwahl {
	display: flex;
	flex-wrap: wrap;
	gap: calc(12px * var(--rd-zoom));
	align-items: center;
}

.rd-kb-artwahl-option {
	display: inline-flex;
	align-items: center;
	gap: calc(6px * var(--rd-zoom));
	font-size: calc(14px * var(--rd-zoom));
	cursor: pointer;
}

.rd-kb-artwahl-option[hidden] {
	display: none;
}

/* Rueckmeldungen (E7). Eine Zeile ohne Datumsblock: sie haengt an keinem
   Tag im Raster, sondern an einem Text. `.rd-kb-inhalt` traegt sie deshalb
   allein, und der Text bekommt Luft nach oben, damit Ueberschrift, Bezug und
   Freitext drei Ebenen bleiben und nicht ein Absatz werden. */
.rd-kb-rueckmeldung {
	align-items: flex-start;
}

.rd-kb-text {
	font-size: calc(15px * var(--rd-zoom));
	color: var(--rd-text);
	line-height: 1.55;
	margin: calc(8px * var(--rd-zoom)) 0 0;
}

/* Der Kindername ueber einer Gruppe. Er erscheint nur, wenn es mehr als ein
   Kind gibt - bei einem waere er eine Ueberschrift ueber sich selbst.

   ZWEITE VERWENDUNG SEIT E10-2: die Abschnitte des Kursplans ("Laeuft
   gerade" / "Abgeschlossen"). Dort steht der Kindname als .rd-kb-name
   darueber, also grosser und dunkler - die 13px grau in Versalien lesen sich
   richtigerweise als das Kleinere von beidem. Wer die Groesse hier aendert,
   aendert beide Stellen. */
.rd-kb-gruppe {
	font-family: var(--rd-sans-fett);
	font-size: calc(13px * var(--rd-zoom));
	text-transform: uppercase;
	letter-spacing: .06em;
	color: var(--rd-text-grau);
	margin: calc(14px * var(--rd-zoom)) 0 calc(4px * var(--rd-zoom));
}

@media (max-width: 720px) {
	.rd-kb-kopf {
		align-items: flex-start;
	}
	.rd-kb-karte {
		padding: calc(20px * var(--rd-zoom));
	}
	/* Auf dem Telefon steht jedes Feld fuer sich - nebeneinander waere die
	   Hausnummer drei Zeichen breit. */
	.rd-kb-formraster {
		grid-template-columns: 1fr;
	}
	.rd-kb-feld-breit {
		grid-column: auto;
	}
}

/* ===========================================================================
   DESIGN-STATES DER BUCHUNG — Etappe 1, Punkt 1 (05.09.2026)

   Quelle: lernerfolg.jetzt_designstates.png im Materialordner. Drei Gruppen,
   und die dritte ist der eigentliche Gewinn:

     01 Ladezustand Termine  -> .rd-skelett-*
     02 Zahlung              -> .rd-ladeschirm (geprueft) und .rd-meldung
                                (fehlgeschlagen / abgebrochen)
     03 Globale Meldung      -> .rd-meldung mit drei Varianten

   EINE KOMPONENTE, DREI VARIANTEN — so steht es woertlich im Entwurf: "Nur
   Farbe, Icon und Text wechseln. Button optional." Drei getrennte Kaesten
   waeren drei Abstandsmasse, und beim naechsten Feinschliff aendert jemand
   zwei davon. Deshalb traegt .rd-meldung die ganze Form, und die Variante
   setzt nur zwei Farben.

   DIE ZWEI ZAHLUNGSZUSTAENDE SIND KEINE EIGENE KOMPONENTE: "Die Zahlung hat
   nicht funktioniert" ist .rd-meldung--fehler mit zwei Knoepfen, "Du hast die
   Zahlung abgebrochen" ist .rd-meldung--info mit einem. Der Entwurf zeigt sie
   getrennt, weil er Zustaende zeigt, nicht Bausteine.

   DIE TEXTE DES ENTWURFS DUZEN ("Deine Zahlung wird geprueft", "Dein Termin
   bleibt reserviert"). Uebernommen werden sie im SIE — die Anrede gegenueber
   Eltern ist am 16.08.2026 entschieden, ausdruecklich gegen das gelieferte
   Material (CLAUDE.md, Abschnitt Anrede). Hier stehen sie nur als Zitat im
   Kommentar; die lebenden Saetze stehen im Markup und werden von
   tests/test_anrede.php geprueft.
   =========================================================================== */

/* ---- Die Meldung: eine Komponente, drei Varianten ---- */
.rd-meldung {
	display: flex;
	gap: calc(14px * var(--rd-zoom));
	align-items: flex-start;
	padding: calc(18px * var(--rd-zoom)) calc(22px * var(--rd-zoom));
	background: var(--rd-weiss);
	/* DIE KANTE LINKS TRAEGT DIE VARIANTE. Sie steht als border-left und
	   nicht als ::before-Streifen: ein Pseudoelement waere bei abgeschalteten
	   Stylesheets weg, die Kante ist dann wenigstens noch ein Rahmen. */
	border-left: calc(4px * var(--rd-zoom)) solid var(--rd-tuerkis);
	border-radius: calc(10px * var(--rd-zoom));
	box-shadow: var(--rd-schatten-pille);
}

.rd-meldung-symbol {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: calc(30px * var(--rd-zoom));
	height: calc(30px * var(--rd-zoom));
	border-radius: 50%;
	background: var(--rd-tuerkis-hell);
	color: var(--rd-tuerkis-dunkel);
	font-family: var(--rd-sans-fett);
	font-size: calc(15px * var(--rd-zoom));
	line-height: 1;
}

.rd-meldung-titel {
	margin: 0 0 calc(4px * var(--rd-zoom));
	font-family: var(--rd-slab);
	font-size: calc(16px * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-meldung-text {
	margin: 0;
	font-size: calc(14px * var(--rd-zoom));
	line-height: 1.55;
	color: var(--rd-text-grau);
}

/* DIE KNOEPFE STEHEN IN EINER ZEILE UND UMBRECHEN. Der Entwurf zeigt zwei
   nebeneinander ("Erneut versuchen" / "Andere Zahlart waehlen"); auf dem
   Telefon passen sie nicht, und ein abgeschnittener Ausweg ist keiner. */
.rd-meldung-aktionen {
	display: flex;
	flex-wrap: wrap;
	gap: calc(10px * var(--rd-zoom));
	margin-top: calc(14px * var(--rd-zoom));
}

.rd-meldung-knopf {
	display: inline-flex;
	align-items: center;
	min-height: calc(38px * var(--rd-zoom));
	padding: calc(8px * var(--rd-zoom)) calc(18px * var(--rd-zoom));
	font-family: var(--rd-sans-fett);
	font-size: calc(14px * var(--rd-zoom));
	color: var(--rd-weiss);
	background: var(--rd-tuerkis);
	border: 0;
	border-radius: 999px;
	cursor: pointer;
	text-decoration: none;
}

/* Der zweite Knopf ist der leisere Ausweg — weisser Grund, dunkler Text. */
.rd-meldung-knopf--zweit {
	color: var(--rd-text);
	background: var(--rd-weiss);
	border: 1px solid rgba(27, 27, 27, .18);
}

/* AUF DEM TELEFON STEHEN DIE AUSWEGE UNTEREINANDER UND VOLLBREIT, so zeigt es
   `lernerfolg.jetzt_designstates_mobile.png` (10.09.2026). `flex-wrap` allein
   bricht sie zwar um, laesst sie aber in ihrer Textbreite stehen: "Erneut
   versuchen" und "Andere Zahlart wählen" saessen dann verschieden breit
   untereinander, und der zweite Ausweg saehe aus wie ein Nachtrag. 430px ist
   die Breite, unter der die beiden Knoepfe nebeneinander nicht mehr in eine
   Zeile passen — darueber bleibt die Reihe, wie der Grossentwurf sie zeigt. */
@media (max-width: 430px) {
	.rd-meldung-aktionen {
		flex-direction: column;
		align-items: stretch;
	}

	.rd-meldung-knopf {
		justify-content: center;
		width: 100%;
	}
}

.rd-meldung-knopf:hover {
	filter: brightness(0.96);
}

/* Variante ERFOLG: gelb. Kein neues Gelb — gemessen ist es dasselbe. */
.rd-meldung--erfolg {
	border-left-color: var(--rd-gelb);
}

.rd-meldung--erfolg .rd-meldung-symbol {
	background: var(--rd-gelb-hell);
	color: var(--rd-gelb-dunkel);
}

.rd-meldung--erfolg .rd-meldung-knopf {
	color: var(--rd-text);
	background: var(--rd-gelb);
}

/* Variante FEHLER: rot. */
.rd-meldung--fehler {
	border-left-color: var(--rd-rot);
}

.rd-meldung--fehler .rd-meldung-symbol {
	background: var(--rd-rot-hell);
	color: var(--rd-rot);
}

.rd-meldung--fehler .rd-meldung-knopf {
	background: var(--rd-rot);
}

.rd-meldung--fehler .rd-meldung-knopf--zweit {
	color: var(--rd-text);
	background: var(--rd-weiss);
}

/* ---- Der Ladeschirm: "Ihre Zahlung wird geprüft" ---- */
/* VERSTECKT HEISST VERSTECKT (14.09.2026, Kevin: "nach eingabe der adresse
   einfach alles auf einmal dageklatscht ... zahlung hat nicht funktioniert
   und darunter dann Ihre zahlung wird geprueft"). Beide Kaesten stehen mit
   `hidden` im Markup, und das Skript blendet ein, was gerade gilt - nur:
   `display: flex` einer Autorenregel schlaegt das `[hidden] { display: none }`
   des Browsers, wie an .rd-bewertung-fest oben begruendet. Ohne diese zwei
   Zeilen standen Fehlermeldung und Ladeschirm auf jeder Landingpage staendig
   unter der Zahlwegliste, und der Kalenderhinweis (.rd-lp-kal-fehler traegt
   .rd-meldung) staendig unter dem Kalender. tests/test_hidden.php haelt
   das jetzt fuer jede Klasse, die `hidden` traegt und display setzt. */
.rd-meldung[hidden],
.rd-ladeschirm[hidden],
/* Dieselbe Falle, vom Waechter beim ersten Lauf gefunden: das Ladeskelett
   des Kundenbereichs (display: grid) stand dauerhaft unter den Terminen, und
   das Anmeldeformular der Newsletterseite (display: flex) stand sichtbar da,
   bevor sein Formular-Token geladen war - genau der Zustand, den sein
   `hidden` verhindern soll. */
.rd-skelett-raster[hidden],
.rd-newsletter-form[hidden] {
	display: none;
}

.rd-ladeschirm {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: calc(10px * var(--rd-zoom));
	padding: calc(46px * var(--rd-zoom)) calc(24px * var(--rd-zoom));
	background: var(--rd-weiss);
	border-radius: var(--rd-radius-karte);
	box-shadow: var(--rd-schatten-karte);
	text-align: center;
}

.rd-ladeschirm-titel {
	margin: calc(8px * var(--rd-zoom)) 0 0;
	font-family: var(--rd-slab);
	font-size: calc(22px * var(--rd-zoom));
	color: var(--rd-text);
}

.rd-ladeschirm-text {
	margin: 0;
	font-size: calc(14px * var(--rd-zoom));
	color: var(--rd-text-grau);
}

.rd-ladering {
	width: calc(44px * var(--rd-zoom));
	height: calc(44px * var(--rd-zoom));
	border: calc(4px * var(--rd-zoom)) solid var(--rd-gelb-hell);
	border-top-color: var(--rd-gelb);
	border-radius: 50%;
	animation: rd-dreht 1s linear infinite;
}

@keyframes rd-dreht {
	to {
		transform: rotate(360deg);
	}
}

/* ---- Der Ladezustand der Termine: Platzhalter statt Satz ----

   WARUM UEBERHAUPT EIN SKELETT UND NICHT "wird geladen …": die Liste springt
   sonst beim Eintreffen um ihre volle Hoehe, und der Klick, den jemand gerade
   setzen wollte, landet auf etwas anderem. Der Platzhalter hat die Hoehe, die
   die Liste haben wird. */
.rd-skelett-raster {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(calc(210px * var(--rd-zoom)), 1fr));
	gap: calc(12px * var(--rd-zoom));
}

.rd-skelett-karte {
	display: flex;
	align-items: center;
	gap: calc(10px * var(--rd-zoom));
	padding: calc(14px * var(--rd-zoom)) calc(16px * var(--rd-zoom));
	background: var(--rd-weiss);
	border-radius: calc(12px * var(--rd-zoom));
	box-shadow: var(--rd-schatten-pille);
}

.rd-skelett-punkt,
.rd-skelett-balken {
	background: var(--rd-skelett);
	border-radius: 999px;
	animation: rd-pulst 1.4s ease-in-out infinite;
}

.rd-skelett-punkt {
	flex: 0 0 auto;
	width: calc(22px * var(--rd-zoom));
	height: calc(22px * var(--rd-zoom));
}

.rd-skelett-balken {
	flex: 1 1 auto;
	height: calc(9px * var(--rd-zoom));
}

/* Der zweite Balken ist kuerzer — sonst sieht die Kachel aus wie ein Feld
   und nicht wie ein Eintrag mit Zeile und Unterzeile. */
.rd-skelett-balken--kurz {
	flex: 0 0 auto;
	width: calc(34px * var(--rd-zoom));
}

@keyframes rd-pulst {
	0%, 100% {
		opacity: 1;
	}
	50% {
		opacity: .55;
	}
}

/* WER KEINE BEWEGUNG WILL, BEKOMMT KEINE. Ein pulsender Platzhalter und ein
   drehender Ring sind genau die Art Dauerbewegung, die bei vestibulaeren
   Stoerungen Beschwerden ausloest — und `prefers-reduced-motion` ist die
   Einstellung, mit der Betroffene das sagen. Der Zustand bleibt lesbar: der
   Platzhalter steht dann still da, der Ring ebenso. */
@media (prefers-reduced-motion: reduce) {

	.rd-skelett-punkt,
	.rd-skelett-balken,
	.rd-ladering {
		animation: none;
	}
}

/* ===========================================================================
   DIE ABBRUCHSEITE (05.09.2026) — der vierte Design-State.

   Sie leiht sich .rd-meldung in der GRUNDFORM und bringt nur die Flaeche mit,
   auf der der Kasten steht. Eine eigene Meldungsregel waere dieselbe Farbe
   ein zweites Mal — genau die Entscheidung, die "Info ist die Grundform"
   schon einmal getroffen hat.
   =========================================================================== */

.rd-abbruch {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 100vh;
	padding: calc(24px * var(--rd-zoom));
	background: var(--rd-creme);
}

.rd-abbruch .rd-meldung {
	max-width: calc(560px * var(--rd-zoom));
	width: 100%;
}
