/**
 * WB-Akademie Seiten — Design-System (v0.2.0)
 * Konsolidiert aus den freigegebenen Entwürfen:
 * Homepage v3, Seminare v1.1, Über-uns v2, FAQ v2, Hairmodel v1.
 */

:root {
	color-scheme: light; /* verhindert Auto-Dark-Umfaerbung durch Browser/WebViews */
	--gruen:   #99C9A7;
	--flieder: #BAAACD;
	--beige:   #CFC6A7;
	--schwarz: #131110;
	--weiss:   #FFFFFF;
	--offwhite:#FAF9F6;
	--wbsfont: 'Libre Franklin', 'Franklin Gothic Medium', -apple-system, 'Helvetica Neue', system-ui, sans-serif;
	--notch: 18px;
}

.wbs-body { margin: 0; background-color: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); color: var(--schwarz); font-family: var(--wbsfont); line-height: 1.6; -webkit-font-smoothing: antialiased; overflow-x: hidden; }
.wbs-body * { box-sizing: border-box; }

.container { max-width: 1100px; margin: 0 auto; padding: 0 22px; position: relative; }

.grain::after { content: ''; position: absolute; inset: 0; pointer-events: none; opacity: 0.06;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E"); }

/* ===== Topbar (Platzhalter bis Header-Projekt) ===== */
.topbar { position: absolute; top: 0; left: 0; right: 0; z-index: 6; display: flex; justify-content: space-between; align-items: center; padding: 18px 22px; }
.topbar--dark { color: var(--weiss); }
.topbar--light { color: var(--schwarz); }
.topbar .logo { font-weight: 800; font-size: 1rem; letter-spacing: 0.02em; }
.topbar--dark .logo span { color: var(--gruen); }
.topbar--light .logo span { color: var(--weiss); }
.topbar .hint { font-size: 0.66rem; text-transform: uppercase; letter-spacing: 0.12em; opacity: 0.45; }

/* ===== Typo-Bausteine ===== */
.kicker { margin: 0 0 12px; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.2em; text-transform: uppercase; color: var(--flieder); }
.skicker { margin: 0 0 12px; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(19,17,16,0.42); }
.wbs-body h2 { margin: 0 0 16px; font-weight: 800; letter-spacing: -0.025em; font-size: clamp(2.1rem, 7.5vw, 3.6rem); line-height: 1.04; }
.copy { max-width: 580px; color: rgba(19,17,16,0.72); margin: 0 0 26px; }
.wbs-section { padding: 84px 0; position: relative; }

/* ===== Buttons ===== */
.btn { display: inline-block; padding: 16px 34px; background: var(--gruen); color: var(--schwarz); border: 0; cursor: pointer; text-decoration: none;
	font-family: var(--wbsfont); font-weight: 800; font-size: 0.95rem;
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%);
	transition: background 0.25s ease, color 0.25s ease, transform 0.2s ease; }
.btn:active, .btn:hover { background: var(--flieder); color: var(--schwarz); transform: translateY(-2px); }
.btn--dark { background: var(--schwarz); color: var(--weiss); }
.btn--dark:active, .btn--dark:hover { background: var(--flieder); color: var(--schwarz); }
.btn--ghost { background: transparent; color: var(--schwarz); box-shadow: inset 0 0 0 2px var(--schwarz); }
.btn--ghost:active, .btn--ghost:hover { background: var(--schwarz); color: var(--weiss); }

/* ===== Dunkler Seitenkopf ===== */
.head { position: relative; background: var(--schwarz); color: var(--weiss); padding: 96px 0 58px; overflow: hidden; }
.head h1 { margin: 0 0 14px; font-weight: 800; letter-spacing: -0.03em; font-size: clamp(2.8rem, 12vw, 5.6rem); line-height: 0.98; text-transform: uppercase; }
.head h1 em { font-style: normal; color: var(--gruen); }
.head .sub { max-width: 520px; margin: 0; color: rgba(255,255,255,0.65); font-size: 1.05rem; }
.hairline { position: absolute; right: -14%; top: -6%; width: 82%; max-width: 580px; pointer-events: none; opacity: 0.85; }

/* ===== Voll-Hero (Homepage) ===== */
.hero { position: relative; background: var(--schwarz); color: var(--weiss); min-height: 100svh; display: flex; align-items: center; padding: 110px 0 120px; overflow: hidden; }
.hero .hairline { right: -12%; top: 4%; width: 95%; max-width: 720px; }
/*
 * Der Hero ist ein Flex-Container. Ohne diese Zeile schrumpft die
 * Textspalte auf ihren Inhalt und rutscht in die Mitte: die Überschrift
 * steht dann nicht mehr auf derselben Kante wie der Rest der Seite und
 * hat weniger Platz, als eigentlich da wäre.
 */
.hero > .container { width: 100%; flex: 0 1 100%; }

/*
 * Hero-Überschrift: so groß wie die Zeile es zulässt.
 *
 * Die Zeilen bestehen aus einzelnen langen Wörtern („Weiterbildung,",
 * „Hairmodel.") — die können nicht umbrechen. War die Schrift breiter
 * als die Spalte, hat der Deckel der Zeilenanimation (.h1-line,
 * overflow: hidden) den Rest abgeschnitten. Genau so fehlte auf
 * schmalen Handys das „G," von Weiterbildung.
 *
 * Die Größe rechnet deshalb rückwärts aus der verfügbaren Breite:
 * --wbs-h1-em ist die Breite der längsten Zeile in em. Der Wert deckt
 * die breiteste der drei möglichen Schriften ab (ITC Franklin Gothic
 * aus dem Elementor-Kit, Arial als Ersatz, Libre Franklin) plus etwas
 * Sicherheit. Ein neuer Hero-Text braucht also nur einen neuen Wert
 * für --wbs-h1-em — abgeschnitten werden kann nichts mehr.
 *
 * body.wbs-body davor, weil Elementor über sein Kit
 * (.elementor-kit-… h1) sonst mit höherer Spezifität gewinnt und die
 * Überschrift auf feste 40 px setzt.
 */
body.wbs-body .hero h1 {
	--wbs-h1-em: 6.75; /* „HAIRMODEL." */
	margin: 0 0 26px;
	font-weight: 800;
	letter-spacing: -0.035em;
	font-size: clamp(2.8rem, 11vw, 7.5rem); /* Rückfallebene für alte Browser */
	font-size: min(calc((100vw - 44px) / var(--wbs-h1-em)), 7.5rem);
	line-height: 0.98;
	text-transform: uppercase;
}
.h1-line { display: block; overflow: hidden; padding-bottom: 0.06em; }
.h1-line > span { display: inline-block; }
.accent { color: var(--gruen); }
.hero .sub { max-width: 480px; margin: 0 0 38px; font-size: 1.06rem; color: rgba(255,255,255,0.66); }
.scroll-hint { position: absolute; left: 22px; bottom: 34px; display: flex; align-items: center; gap: 10px; font-size: 0.7rem; letter-spacing: 0.16em; text-transform: uppercase; color: rgba(255,255,255,0.45); }
.scroll-hint::before { content: ''; width: 34px; height: 2px; background: var(--flieder); animation: wbs-pulse 1.6s ease-in-out infinite; }
@keyframes wbs-pulse { 0%,100% { opacity: 0.4; transform: scaleX(0.6); } 50% { opacity: 1; transform: scaleX(1); } }

/* ===== Scheren-Bühne ===== */
.scissor-stage { position: relative; height: 100svh; overflow: hidden; }
.stage-bg { position: absolute; inset: 0; background: var(--offwhite); display: flex; align-items: center; justify-content: center; text-align: center; }
.claim { padding: 0 26px; }
.claim .skicker { color: rgba(19,17,16,0.42); }
.claim h2 { font-size: clamp(2rem, 8.6vw, 4rem); margin: 0; }
.panel { position: absolute; left: 0; right: 0; height: 50.5%; background: var(--schwarz); z-index: 2; }
.panel--top { top: 0; transform: translateY(-101%); }
.panel--bottom { bottom: 0; transform: translateY(101%); }
.stage-fx { position: absolute; inset: 0; z-index: 3; opacity: 0; display: flex; align-items: center; justify-content: center; pointer-events: none; }
.stage-kicker { position: absolute; top: 12%; left: 0; right: 0; text-align: center; font-size: 0.74rem; font-weight: 700; letter-spacing: 0.22em; text-transform: uppercase; color: rgba(255,255,255,0.55); }
.scissors { width: min(86vw, 620px); height: auto; overflow: visible; }
.cutline { position: absolute; left: 4%; right: 4%; top: 50%; height: 2px; background: var(--flieder); transform: scaleX(0); transform-origin: center; box-shadow: 0 0 14px rgba(186,170,205,0.8); }

/* ===== Intro-Worte mit Farbmarkern ===== */
.triple h2 { display: flex; flex-direction: column; gap: 4px; font-size: clamp(2.6rem, 11vw, 5rem); }
/* Jedes Wort ist ein eigener Block mit fester Zeilenhoehe. Frueher hing
   das Stapeln allein am flex-Container der Ueberschrift — kippte der weg,
   landeten die Zeilen uebereinander. */
.word { position: relative; display: block; width: max-content; max-width: 100%;
	padding-right: 8px; line-height: 1.04; }
.word--mitte { margin-left: auto; margin-right: auto; }
.zeile { display: block; line-height: 1.04; }
.word i { position: absolute; left: -1%; right: -1%; bottom: 0.07em; height: 0.26em; z-index: 0; transform-origin: left center; opacity: 0.9; }
.word span { position: relative; z-index: 1; }
.word--1 i { background: var(--gruen); }
.word--2 i { background: var(--flieder); }
.word--3 i { background: var(--beige); }

/* ===== Handwerk + Riesen-Wort + Laufband ===== */
.craft { background: var(--weiss); overflow: hidden; }
.giant { position: absolute; top: 26px; left: 0; white-space: nowrap; font-size: clamp(6rem, 26vw, 16rem); font-weight: 800; line-height: 1;
	color: transparent; -webkit-text-stroke: 1.5px rgba(19,17,16,0.10); text-transform: uppercase; pointer-events: none; user-select: none; }
.craft .container { padding-top: clamp(60px, 14vw, 130px); }
.craft-grid { display: grid; gap: 18px; margin-top: 36px; }
.craft-item { position: relative; overflow: hidden; clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--notch)), calc(100% - var(--notch)) 100%, 0 100%);
	min-height: 320px; display: flex; align-items: flex-end; }
/* Das Bild fuellt die Kachel. Die Hoehe MUSS ausgeschrieben werden:
   Elementors globales `img { height: auto }` haette sonst Vorrang vor
   der aus top/bottom abgeleiteten Hoehe — dann sitzt das Foto in
   Originalgroesse in der Kachel statt sie zu fuellen. */
.craft-item picture { display: contents; }
.craft-item .ph, .craft-item .ph-img {
	position: absolute !important;
	top: -12% !important; bottom: -12% !important; left: 0 !important; right: 0 !important;
	width: 100% !important; height: 124% !important;
	max-width: none !important;
	object-fit: cover !important;
}
.ph--1 { background: linear-gradient(150deg, #201c1a 0%, #4a423d 55%, #7a6c60 100%); }
.ph--2 { background: linear-gradient(150deg, var(--gruen) 0%, #5e9573 100%); }
.ph--3 { background: linear-gradient(150deg, var(--flieder) 0%, #83709f 100%); }
.ph--4 { background: linear-gradient(150deg, var(--beige) 0%, #9c8d5e 100%); }
.craft-item figcaption { position: relative; z-index: 1; margin: 0; padding: 18px; width: 100%; color: var(--weiss); font-size: 0.9rem; font-weight: 700;
	background: linear-gradient(transparent, rgba(19,17,16,0.6)); }
.craft-item figcaption small { display: block; font-weight: 400; opacity: 0.75; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.1em; margin-top: 3px; }

.marquees { padding: 0; background: var(--weiss); }
.marquee { overflow: hidden; white-space: nowrap; padding: 13px 0; border-top: 1px solid rgba(19,17,16,0.09); }
.marquee:last-child { border-bottom: 1px solid rgba(19,17,16,0.09); }
.mt { display: inline-block; }
.mt--l { animation: wbs-slideL 30s linear infinite; }
.mt--r { animation: wbs-slideR 34s linear infinite; }
.marquee span { font-size: 1.6rem; font-weight: 800; margin-right: 36px; color: transparent; -webkit-text-stroke: 1px rgba(19,17,16,0.38); }
.marquee--fill span { color: var(--flieder); -webkit-text-stroke: 0; }
@keyframes wbs-slideL { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes wbs-slideR { from { transform: translateX(-50%); } to { transform: translateX(0); } }

/* ===== Zahlen ===== */
.stats-grid { display: grid; gap: 14px; }
.stat { background: var(--weiss); border: 1px solid rgba(19,17,16,0.1); padding: 26px 22px;
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--notch)), calc(100% - var(--notch)) 100%, 0 100%); }
.stat b { display: block; font-size: clamp(2.4rem, 9vw, 3.6rem); font-weight: 800; letter-spacing: -0.03em; line-height: 1; }
.stat b em { font-style: normal; color: var(--flieder); }
.stat span { font-size: 0.86rem; color: rgba(19,17,16,0.6); }
.stats-note { margin-top: 14px; font-size: 0.72rem; color: rgba(19,17,16,0.4); }

/* ===== Testimonial ===== */
.quote-block { position: relative; background: var(--flieder); padding: 46px 26px 34px; max-width: 700px;
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 26px), calc(100% - 26px) 100%, 0 100%); }
.quote-block::before { content: '„'; position: absolute; top: -10px; left: 20px; font-size: 6rem; font-weight: 800; color: var(--schwarz); opacity: 0.25; line-height: 1; }
.quote-block p { margin: 20px 0 16px; font-size: 1.3rem; font-weight: 700; line-height: 1.4; }
.quote-block cite { font-style: normal; font-size: 0.88rem; color: rgba(19,17,16,0.6); }

/* ===== Seminarkarten (v0.5 — abgerundet, ruhige Typo) ===== */
:root {
	--r-s: 10px;   /* Chips, kleine Flaechen */
	--r-m: 14px;   /* Buttons, Panels */
	--r-l: 20px;   /* Karten, Filterleiste */
	--r-pill: 999px;
	--linie: rgba(19,17,16,0.10);
	--gedimmt: rgba(19,17,16,0.58);
}

.cards { display: grid; grid-auto-flow: column; grid-auto-columns: 86%; gap: 18px; overflow-x: auto; scroll-snap-type: x mandatory;
	padding: 6px 22px 20px; margin: 26px -22px 0; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.cards::-webkit-scrollbar { display: none; }
.cards--list { grid-auto-flow: row; grid-auto-columns: unset; overflow: visible; margin: 24px 0 0; padding: 0; gap: 20px; }

.card { scroll-snap-align: start; display: flex; flex-direction: column; background: var(--weiss);
	border: 1px solid var(--linie); border-radius: var(--r-l); overflow: hidden;
	box-shadow: 0 1px 2px rgba(19,17,16,0.04), 0 18px 34px -28px rgba(19,17,16,0.30);
	transition: transform 0.22s ease, box-shadow 0.22s ease; }
.card:hover { transform: translateY(-3px); box-shadow: 0 2px 4px rgba(19,17,16,0.05), 0 26px 44px -26px rgba(19,17,16,0.34); }

/* --- Bildbereich ---
   Quadratisch, weil die Seminarbilder quadratisch hochgeladen werden.
   Vorher war der Ausschnitt 16:10 breit, und von einem quadratischen
   Bild fielen oben und unten je gut ein Fünftel weg — genau deshalb war
   auf der Karte der Kopf abgeschnitten.

   Passt ein Bild trotzdem nicht ins Quadrat, greift der Ausschnitt in
   der oberen Hälfte zu (25 % von oben). Ganz oben an der Kante wäre zu
   hart, Bildmitte schneidet bei Hochformaten wieder den Kopf ab. */
.card-img { display: block; position: relative; aspect-ratio: 1 / 1; overflow: hidden; background: var(--offwhite); }
.card-img .ph { position: absolute; inset: 0; }
.card-img .ph-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 25%; }
.card.is-full .card-img .ph-img, .card.is-full .card-img .ph { filter: grayscale(0.7) brightness(0.92); }

.card-art, .card-land, .card-voll { position: absolute; z-index: 2; font-size: 0.72rem; font-weight: 700; line-height: 1;
	padding: 7px 12px; border-radius: var(--r-pill); background: rgba(255,255,255,0.94); color: var(--schwarz);
	backdrop-filter: blur(6px); box-shadow: 0 2px 8px -4px rgba(19,17,16,0.4); }
.card-art { top: 12px; left: 12px; }
.card-art--online { background: var(--flieder); }
.card-land { top: 12px; right: 12px; letter-spacing: 0.06em; }
.card-voll { bottom: 12px; right: 12px; background: var(--schwarz); color: var(--weiss); }

/* Marken-Plakette: das Logo ist das Wiedererkennungsmerkmal der Karte. */
/* Der Kasten waechst mit dem Logo. Wichtig: width/height des Bildes fest
   vorgeben und Elementors globales `img { max-width: 100% }` neutralisieren.
   Sonst kann das Bild in diesem schrumpfenden Flex-Kasten mit 0 Breite
   einfliessen — auf iOS-Safari passierte genau das, der Kasten blieb ein
   schmaler Streifen und das Logo ragte rechts heraus. */
.card-logo { position: absolute; z-index: 2; left: 12px; bottom: 12px;
	display: inline-flex; align-items: center; justify-content: center;
	width: max-content; max-width: calc(100% - 24px);
	min-height: 38px; padding: 7px 12px; background: var(--weiss); border-radius: var(--r-s);
	box-shadow: 0 4px 14px -6px rgba(19,17,16,0.45); }
.card-logo img { display: block; flex: none;
	height: 24px !important; width: auto !important;
	min-width: 0; max-height: none !important; max-width: 150px !important;
	object-fit: contain; }
.card-logo--text { font-size: 0.74rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }

/* --- Textkoerper --- */
.card-body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 12px; flex: 1; }

/* Titel: gross und fett. Laeuft ueber mehrere Zeilen weiter, statt
   abgeschnitten zu werden — die Zeilenhoehe ist explizit gesetzt und
   wird auch an den Link vererbt, damit Theme-Regeln sie nicht kippen. */
.wbs-body .card-title { margin: 0; font-size: 1.36rem; font-weight: 800; letter-spacing: -0.015em; line-height: 1.26;
	overflow-wrap: break-word; }
.wbs-body .card-title a { color: var(--schwarz); text-decoration: none;
	font-size: inherit; font-weight: inherit; line-height: inherit; font-family: inherit; }
.wbs-body .card-title a:hover { text-decoration: underline; text-underline-offset: 3px; }

/* Die Icons bekommen genau eine Textzeile als Hoehe (1.45em) und
   zentrieren sich darin selbst — dadurch sitzen Kalender-, Orts- und
   Trainer-Icon auf exakt derselben Linie wie ihr Text, unabhaengig
   von Schriftstaerke oder Umbruch. */
.meta { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.meta li { display: flex; align-items: flex-start; gap: 9px; font-size: 0.88rem; line-height: 1.45; color: var(--gedimmt); }
.meta svg { width: 16px; height: 1.45em; flex: none; stroke: var(--schwarz); opacity: 0.45; }
.meta b, .meta span { line-height: inherit; }
.meta b { color: var(--schwarz); font-weight: 700; }

.tagrow { display: flex; flex-wrap: wrap; gap: 6px; }
.tag { display: inline-block; font-size: 0.76rem; font-weight: 600; line-height: 1; letter-spacing: 0;
	text-transform: none; padding: 8px 13px; border-radius: var(--r-pill); border: 1px solid var(--linie);
	color: var(--gedimmt); }

.card-hint { margin: 0; font-size: 0.8rem; font-weight: 700; color: var(--schwarz); display: flex; align-items: center; gap: 7px; }
.card-hint::before { content: '●'; color: #C9885F; font-size: 0.7rem; }

/* --- Fuss --- */
.card-foot { margin-top: auto; padding-top: 14px; border-top: 1px solid var(--linie);
	display: flex; flex-direction: column; gap: 12px; }
.card-preisblock { display: flex; flex-direction: column; gap: 3px; }

/* Preis und Steuerhinweis bleiben in einer Zeile. */
.card-preis { display: flex; align-items: baseline; flex-wrap: nowrap; gap: 6px; white-space: nowrap;
	font-size: 1.24rem; font-weight: 800; line-height: 1.1; }
.card-preis .woocommerce-Price-amount { font-size: inherit; }
.card-preis small, .card-preis .woocommerce-price-suffix { font-size: 0.66rem; font-weight: 600; color: var(--gedimmt); white-space: nowrap; }
.card-preis--voll { color: var(--schwarz); }

.card-punkte { display: flex; align-items: baseline; gap: 5px; font-size: 0.86rem; font-weight: 700; color: var(--schwarz); }
.card-punkte__oder { font-weight: 600; color: var(--gedimmt); }
.card-punkte--voll { font-weight: 500; color: var(--gedimmt); }

.wbs-body .card-cta { display: block; text-align: center; padding: 13px 20px; border-radius: var(--r-m);
	background: var(--gruen); color: var(--schwarz); font-weight: 800; font-size: 0.9rem; text-decoration: none;
	white-space: nowrap; transition: background 0.18s ease, color 0.18s ease; }
.wbs-body .card-cta:hover, .wbs-body .card-cta:focus-visible { background: var(--flieder); color: var(--schwarz); }
.wbs-body .card-cta--ghost { background: transparent; color: var(--schwarz); box-shadow: inset 0 0 0 1.5px var(--schwarz); }
.wbs-body .card-cta--ghost:hover { background: var(--schwarz); color: var(--weiss); box-shadow: none; }

@media (prefers-reduced-motion: reduce) {
	.card, .wbs-body .card-cta { transition: none; }
	.card:hover { transform: none; }
}

/* ===== Dunkler CTA-Block ===== */
.cta { background: var(--schwarz); color: var(--weiss); padding: 96px 0; position: relative; overflow: hidden;
	clip-path: polygon(0 7vw, 100% 0, 100% 100%, 0 100%); margin-top: -1px; }
/* Dunkler Abschnitt: Theme- oder Elementor-Regeln duerfen die Schrift
   nicht auf Schwarz zuruecksetzen, sonst steht dunkel auf dunkel. */
.cta h2 { color: var(--weiss) !important; max-width: 620px; font-size: clamp(2.2rem, 8.5vw, 4rem);
	text-shadow: 0 2px 24px rgba(19,17,16,0.45); }
.cta .copy { color: rgba(255,255,255,0.68) !important; }
.cta .skicker { color: var(--gruen) !important; }
.cta .btn { color: var(--schwarz) !important; }
.cta-deco { position: absolute; right: -130px; bottom: -130px; width: 340px; height: 340px; border-radius: 50%;
	background: radial-gradient(circle at 30% 30%, var(--flieder), transparent 70%); opacity: 0.55; pointer-events: none; }

/* ===== Rundgang (Über uns) ===== */
.tour { position: relative; background: var(--schwarz); }
.station { position: relative; height: 78svh; min-height: 420px; overflow: hidden; }
.station .ph, .station .ph-img { position: absolute; inset: 0; width: 100%; object-fit: cover; }
.sph--1 { background: linear-gradient(140deg, #221e1c 0%, #514842 50%, #83766b 100%); }
.sph--2 { background: linear-gradient(140deg, var(--gruen) 0%, #4f8a66 100%); }
.sph--3 { background: linear-gradient(140deg, var(--flieder) 0%, #77639a 100%); }
.sph--4 { background: linear-gradient(140deg, var(--beige) 0%, #9c8d5e 100%); }
.station .edge { position: absolute; top: -6%; bottom: -6%; left: -26px; width: 34px; background: var(--flieder);
	transform: skewX(-7deg); box-shadow: 0 0 26px rgba(186,170,205,0.65); display: none; }
.station .plate { position: absolute; left: 22px; bottom: 26px; right: 22px; color: var(--weiss); }
.station .plate .no { font-size: 0.72rem; font-weight: 800; letter-spacing: 0.2em; color: var(--gruen); text-transform: uppercase; }
.station .plate h3 { margin: 4px 0 4px; font-size: clamp(1.6rem, 7vw, 2.6rem); font-weight: 800; letter-spacing: -0.02em; text-shadow: 0 2px 18px rgba(19,17,16,0.5); }
.station .plate p { margin: 0; max-width: 480px; font-size: 0.92rem; color: rgba(255,255,255,0.85); text-shadow: 0 1px 12px rgba(19,17,16,0.5); }
.tour.js-tour { height: 100svh; }
.tour.js-tour .station { position: absolute; inset: 0; height: auto; min-height: 0; }
.tour.js-tour .station .edge { display: block; }
.tour-progress { position: absolute; top: 18px; left: 22px; z-index: 6; display: none; gap: 8px; }
.tour.js-tour .tour-progress { display: flex; }
.tour-progress span { width: 16px; height: 16px; background: transparent; border: 2px solid rgba(255,255,255,0.7);
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 6px), calc(100% - 6px) 100%, 0 100%); }

/* ===== Über uns: Gruppenbild, Team ===== */
.groupshot { position: relative; margin-top: 28px; min-height: 320px; overflow: hidden;
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 26px), calc(100% - 26px) 100%, 0 100%); }
.groupshot .ph { position: absolute; inset: -10% 0; background: linear-gradient(140deg, #2a2422 0%, #6b5c50 55%, #a08b76 100%); }
.groupshot figcaption { position: absolute; left: 0; right: 0; bottom: 0; margin: 0; padding: 16px 18px; color: var(--weiss); font-size: 0.88rem; font-weight: 700;
	background: linear-gradient(transparent, rgba(19,17,16,0.6)); }
.groupshot figcaption small { display: block; font-weight: 400; opacity: 0.75; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.1em; }
.team-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin-top: 28px; }
.member { background: var(--offwhite); border: 1px solid rgba(19,17,16,0.1);
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--notch)), calc(100% - var(--notch)) 100%, 0 100%); }
.member .photo { position: relative; padding-top: 105%; overflow: hidden; }
.member .photo .ph { position: absolute; inset: 0; background: linear-gradient(160deg, #2a2624, #5c5149); }
.member .photo::after { content: ''; position: absolute; inset: 0; background: var(--ac, var(--gruen)); opacity: 0; transition: opacity 0.25s; mix-blend-mode: multiply; }
.member:hover .photo::after, .member:active .photo::after { opacity: 0.5; }
.member .info { padding: 12px 14px 16px; }
.member .info b { display: block; font-size: 1rem; font-weight: 800; letter-spacing: -0.01em; }
.member .info span { font-size: 0.78rem; color: rgba(19,17,16,0.55); }
.member .bar { height: 5px; background: var(--ac, var(--gruen)); }

/* ===== FAQ ===== */
.faq-group { padding: 26px 0 8px; }
.faq-group h2 { display: flex; align-items: center; gap: 12px; font-size: clamp(1.5rem, 5.4vw, 2.1rem); }
.faq-group h2::before { content: ''; width: 22px; height: 22px; flex: none; background: var(--gc, var(--gruen));
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%); }
.wbs-body details { background: var(--weiss); border: 1px solid rgba(19,17,16,0.12); margin-bottom: 10px;
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%); }
.wbs-body summary { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 17px 18px; font-weight: 700; font-size: 0.98rem; }
.wbs-body summary::-webkit-details-marker { display: none; }
.wbs-body summary .plus { flex: none; width: 22px; height: 22px; position: relative; }
.wbs-body summary .plus::before, .wbs-body summary .plus::after { content: ''; position: absolute; left: 50%; top: 50%; width: 14px; height: 2.5px; background: var(--schwarz); transform: translate(-50%, -50%); transition: transform 0.25s; }
.wbs-body summary .plus::after { transform: translate(-50%, -50%) rotate(90deg); }
.wbs-body details[open] summary .plus::after { transform: translate(-50%, -50%) rotate(0deg); }
.wbs-body details[open] { border-color: var(--gc, var(--gruen)); }
.answer { padding: 0 18px 18px; color: rgba(19,17,16,0.72); font-size: 0.94rem; }
.answer p { margin: 0 0 10px; }
.contact-row { display: flex; flex-direction: column; gap: 10px; }
.contact-row a { display: inline-flex; align-items: center; gap: 10px; color: var(--weiss); text-decoration: none; font-weight: 700; }
.contact-row a b { border-bottom: 2px solid var(--flieder); padding-bottom: 2px; }
.contact-row svg { width: 17px; height: 17px; stroke: var(--gruen); flex: none; }

/* ===== Hairmodel ===== */
.hero--flieder { background: var(--flieder); color: var(--schwarz); min-height: 0; padding: 118px 0 96px; }
.hero--flieder .kicker { color: var(--schwarz); font-weight: 800; }
.hero--flieder .sub { color: rgba(19,17,16,0.75); }
.hero--flieder .out { color: transparent; -webkit-text-stroke: 2px var(--schwarz); }
.hero-deco { position: absolute; right: -120px; top: -120px; width: 340px; height: 340px; border-radius: 50%;
	background: radial-gradient(circle at 35% 35%, var(--weiss), transparent 70%); opacity: 0.5; pointer-events: none; }
.topic-row { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 6px; }
.topic { padding: 12px 18px; font-weight: 800; font-size: 0.9rem; background: var(--offwhite); border: 1px solid rgba(19,17,16,0.14);
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%); }
.steps-wrap { position: relative; margin-top: 34px; padding-left: 44px; }
.steps-line { position: absolute; left: 15px; top: 8px; bottom: 8px; width: 3px; }
.steps-line svg { width: 3px; height: 100%; overflow: visible; }
.step { position: relative; padding: 0 0 34px; }
.step:last-child { padding-bottom: 0; }
.step::before { content: ''; position: absolute; left: -44px; top: 2px; width: 30px; height: 30px; background: var(--sc, var(--gruen));
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%); }
.step .num { position: absolute; left: -44px; top: 2px; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 0.85rem; z-index: 1; }
.step h3 { margin: 0 0 6px; font-size: 1.2rem; font-weight: 800; }
.step p { margin: 0; color: rgba(19,17,16,0.7); font-size: 0.95rem; max-width: 560px; }
.formbox { margin-top: 26px; padding: 30px 22px; background: var(--offwhite); border: 1px solid rgba(19,17,16,0.12);
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 22px), calc(100% - 22px) 100%, 0 100%); }

/* ===== Footer-Platzhalter & Utility ===== */
.foot { padding: 28px 0 44px; font-size: 0.76rem; color: rgba(19,17,16,0.42); }
.reveal { will-change: transform, opacity; }

/* ===== Desktop ===== */
@media (min-width: 820px) {
	.topbar { padding: 24px 36px; }
	.craft-grid { grid-template-columns: 1.5fr 1fr 1fr; }
	.craft-item:first-child { min-height: 460px; }
	.craft-item:nth-child(2) { margin-top: 60px; }
	.craft-item:nth-child(3) { margin-top: 30px; }
	.stats-grid { grid-template-columns: repeat(3, 1fr); }
	.cards { grid-auto-flow: row; grid-auto-columns: unset; grid-template-columns: repeat(3, 1fr); overflow: visible; margin: 36px 0 0; padding: 0; }
	.cards--list { margin: 26px 0 0; }
	.team-grid { grid-template-columns: repeat(5, 1fr); }
	.station .plate { left: 36px; bottom: 36px; }
	.groupshot { min-height: 460px; }
	.hero--flieder { padding: 140px 0 120px; }
}

@media (prefers-reduced-motion: reduce) {
	.mt--l, .mt--r, .scroll-hint::before { animation: none; }
}


/* ============================================================
   KONTRAST-HÄRTUNG (v0.2.1)
   a) Gradient-Panzerung: helle Flaechen zusaetzlich als
      background-image — Auto-Dark-Filter (App-Vorschauen,
      manche Android-Browser) fassen Gradients nicht an.
   b) Dunkle Bereiche erzwingen helle Schrift, nichts erbt
      versehentlich Schwarz. Gewollte Akzente werden danach
      explizit wiederhergestellt.
   ============================================================ */

.bg-white { background-color: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss)); }
.bg-off   { background-color: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); }

.card, .stat, .wbs-body details, .trainer-card, .mcard { background-color: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss)); }
.member, .tag, .formbox, .topic { background-color: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); }
.craft, .marquees, .team { background-color: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss)); }

/* b) Dunkle Bereiche: helle Schrift erzwingen */
.head h1, .head h2, .head h3, .head p, .head div, .head span, .head b,
.hero h1, .hero h2, .hero h3, .hero p, .hero div, .hero span, .hero b,
.cta h1, .cta h2, .cta h3, .cta p, .cta div, .cta span, .cta b, .cta cite,
.cta__nix,
.station .plate h3, .station .plate p, .station .plate span,
.contact-row a, .contact-row a b { color: var(--weiss); }

/* Gewollte Akzente wiederherstellen.
   Mit !important, weil Theme- und Elementor-Regeln die Schrift sonst auf
   Schwarz zuruecksetzen — dann steht dunkel auf dunkel. */
.wbs-body .head h1, .wbs-body .head h2, .wbs-body .head h3 { color: var(--weiss) !important; }
.wbs-body .head .kicker, .wbs-body .hero .kicker { color: var(--flieder) !important; }
.wbs-body .head h1 em, .wbs-body .hero h1 em, .wbs-body .hero .accent { color: var(--gruen) !important; }
.wbs-body .head .sub, .wbs-body .hero .sub { color: rgba(255,255,255,0.72) !important; }
.wbs-body .hero--hell h1, .wbs-body .hero--hell h2 { color: var(--schwarz) !important; }
.cta .skicker { color: var(--gruen); }
.cta .copy { color: rgba(255,255,255,0.6); }
.station .plate .no { color: var(--gruen); }
.cta .btn, .head .btn, .hero .btn { color: var(--schwarz); }
.cta .btn--dark, .head .btn--dark, .hero .btn--dark { color: var(--weiss); }
.topbar--dark .logo, .topbar--dark .hint { color: var(--weiss); }
.topbar--dark .logo span { color: var(--gruen); }

/* Flieder-Hero (Hairmodel) ist HELL — dunkle Schrift gilt dort */
.hero--flieder h1, .hero--flieder h2, .hero--flieder h3, .hero--flieder p,
.hero--flieder div, .hero--flieder span, .hero--flieder b { color: var(--schwarz); }
.hero--flieder .kicker { color: var(--schwarz); }
.hero--flieder .sub { color: rgba(19,17,16,0.75); }
.hero--flieder .out { color: transparent; -webkit-text-stroke: 2px var(--schwarz); }
.hero--flieder .btn--dark { color: var(--weiss); }


/* ===================================================================
 * Katalog-Layout + Filter-Sidebar (v0.6)
 *
 * Links eine einklappbare, mitscrollende Filterspalte, rechts das
 * Kartenraster: aufgeklappt zwei Karten pro Reihe, eingeklappt drei.
 * Die Filtergruppen sind <details>-Elemente und klappen an ihrer
 * Stelle auf.
 * ================================================================ */

/* position: sticky funktioniert nicht, wenn ein Vorfahre overflow-x:
   hidden hat — clip erfuellt denselben Zweck ohne Scroll-Kontext. */
.wbs-body.wbs-katalog { overflow-x: clip; }

.wbs-layout { display: grid; grid-template-columns: 1fr; gap: 22px; align-items: start; margin-top: 22px; }

/* --- Ein-/Ausklappen --- */
.wbs-side__schalter { display: inline-flex; align-items: center; gap: 9px; padding: 11px 18px;
	border-radius: var(--r-pill); border: 1px solid var(--linie); background: var(--weiss);
	font: inherit; font-weight: 700; font-size: 0.86rem; color: var(--schwarz); cursor: pointer;
	transition: border-color 0.15s ease; }
.wbs-side__schalter:hover { border-color: var(--schwarz); }
.wbs-side__schalter:focus-visible { outline: 2px solid var(--schwarz); outline-offset: 2px; }
.wbs-side__schalter svg { width: 17px; height: 17px; flex: none; }
.wbs-side__inhalt { margin-top: 12px; }
/* Das Einklappen der Spalte gilt nur am Desktop — auf dem Handy ist der
   Filter ein Bottom-Sheet und darf davon nicht versteckt werden. */
@media (min-width: 1024px) {
	.wbs-layout.is-zu .wbs-side__inhalt { display: none; }
}

/* --- Filterkarte --- */
.wbs-filter { background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	border: 1px solid var(--linie); border-radius: var(--r-l); padding: 14px; margin: 0;
	box-shadow: 0 1px 2px rgba(19,17,16,0.04), 0 18px 36px -32px rgba(19,17,16,0.35); }

.wbs-suche { display: flex; align-items: center; gap: 9px; min-height: 44px; padding: 0 14px;
	background: var(--offwhite); border: 1.5px solid transparent; border-radius: var(--r-pill); }
.wbs-suche:focus-within { border-color: var(--schwarz); background: var(--weiss); }
.wbs-suche svg { width: 16px; height: 16px; flex: none; color: var(--gedimmt); }
/* Nur die Hülle (mit Lupe) trägt den Rahmen. Das Eingabefeld darin muss
   nackt bleiben — Themes geben Formularfeldern sonst einen zweiten,
   schwarzen Rahmen mitten in der Suchleiste. */
.wbs-suche input { flex: 1; min-width: 0;
	appearance: none !important; -webkit-appearance: none !important;
	border: 0 !important; border-radius: 0 !important; box-shadow: none !important;
	background: transparent !important; background-image: none !important;
	min-height: 0 !important; padding: 0 !important; margin: 0 !important;
	outline: none !important;
	font: inherit; font-size: 0.9rem; color: var(--schwarz); outline: none; padding: 10px 0; border-radius: 0; }
.wbs-suche input::-webkit-search-cancel-button { -webkit-appearance: none; }
.wbs-suche input::placeholder { color: rgba(19,17,16,0.42); }

/* --- Filtergruppen ---
   WICHTIG: Die FAQ-Akkordeons nutzen ebenfalls <details> und setzen dort
   Rahmen, Hintergrund und ein clip-path. Ein clip-path wuerde aufgeklappte
   Inhalte abschneiden. Diese Regeln heben das fuer die Filtergruppen
   gezielt auf — deshalb die hoehere Spezifitaet. */
.wbs-gruppen { margin-top: 10px; display: flex; flex-direction: column; }

.wbs-body .wbs-gruppen .wbs-drop { position: relative; margin: 0; padding: 0; border: 0; border-radius: 0;
	border-top: 1px solid var(--linie); background: transparent; background-image: none; clip-path: none; }
.wbs-body .wbs-gruppen .wbs-drop:first-child { border-top: 0; }

.wbs-body .wbs-gruppen .wbs-drop > summary { list-style: none; cursor: pointer; display: flex; align-items: center;
	justify-content: flex-start; gap: 8px; width: 100%; padding: 12px 8px; margin: 0;
	background: transparent; border: 0; border-radius: var(--r-s);
	font: inherit; font-size: 0.86rem; font-weight: 400; line-height: 1.3; user-select: none; }
.wbs-body .wbs-gruppen .wbs-drop > summary::-webkit-details-marker { display: none; }
.wbs-body .wbs-gruppen .wbs-drop > summary::marker { content: ''; }
.wbs-body .wbs-gruppen .wbs-drop > summary:hover { background: var(--offwhite); }
.wbs-body .wbs-gruppen .wbs-drop > summary:focus-visible { outline: 2px solid var(--schwarz); outline-offset: -2px; }
.wbs-body .wbs-gruppen .wbs-drop.is-aktiv > summary { background: rgba(153,201,167,0.18); }

.wbs-drop__label { font-weight: 700; flex: none; }
.wbs-drop__wert { margin-left: auto; text-align: right; font-size: 0.82rem; color: var(--gedimmt);
	overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.wbs-body .wbs-gruppen .wbs-drop.is-aktiv .wbs-drop__wert { color: var(--schwarz); font-weight: 700; }
.wbs-drop__chev { width: 10px; height: 7px; flex: none; opacity: 0.55; transition: transform 0.18s ease; }
.wbs-body .wbs-gruppen .wbs-drop[open] .wbs-drop__chev { transform: rotate(180deg); }

/* --- Panel (klappt an seiner Stelle auf) --- */
.wbs-body .wbs-drop__panel { position: static; padding: 0 4px 12px; max-height: 268px; overflow-y: auto;
	background: transparent; border: 0; border-radius: 0; box-shadow: none; min-width: 0; max-width: none; }
.wbs-body .wbs-drop__panel--polster { padding: 6px 8px 16px; overflow: visible; max-height: none; }

.wbs-body .wbs-opt { display: flex; align-items: center; gap: 10px; padding: 7px 8px; border-radius: var(--r-s);
	font-size: 0.86rem; font-weight: 500; line-height: 1.3; color: var(--schwarz); cursor: pointer; }
.wbs-body .wbs-opt:hover { background: var(--offwhite); }
.wbs-body .wbs-opt span { font-weight: 500; font-size: inherit; }
.wbs-body .wbs-opt input { flex: none; width: 16px; height: 16px; margin: 0; accent-color: var(--schwarz); cursor: pointer; }

/* --- Zeitraum --- */
.wbs-datum { display: flex; flex-direction: column; gap: 10px; }
.wbs-datum label { display: flex; flex-direction: column; gap: 5px; font-size: 0.74rem; font-weight: 700; color: var(--gedimmt); }
.wbs-datum input { appearance: none; -webkit-appearance: none; width: 100%; min-height: 40px; padding: 9px 11px;
	border: 1px solid rgba(19,17,16,0.2); border-radius: var(--r-s); background: var(--offwhite);
	font: inherit; font-size: 0.86rem; color: var(--schwarz); }
.wbs-datum input:focus { outline: 2px solid var(--schwarz); outline-offset: 1px; }

/* --- Preis-Schieberegler (zwei Griffe) ---
   Die beiden Regler sind echte Formularfelder und werden serverseitig
   mit ihren Werten gerendert — der Regler funktioniert also auch ohne
   JavaScript. */
.wbs-range__ausgabe { display: flex; justify-content: space-between; font-size: 0.88rem; font-weight: 800; margin-bottom: 12px; }
.wbs-range__bahn { position: relative; height: 26px; }
.wbs-range__bahn::before { content: ''; position: absolute; left: 0; right: 0; top: 11px; height: 4px;
	border-radius: var(--r-pill); background: rgba(19,17,16,0.14); }
.wbs-range__fuellung { position: absolute; top: 11px; height: 4px; border-radius: var(--r-pill); background: var(--gruen); }
/* Die beiden Regler liegen deckungsgleich uebereinander. Sie MUESSEN
   vollstaendig unsichtbar sein (kein Hintergrund, kein Rahmen) — sonst
   verdeckt der obere den Griff des unteren, und man sieht nur noch einen
   Kreis. Themes und Elementor stylen Formularfelder gern global mit
   hoher Spezifitaet, deshalb hier bewusst !important. */
.wbs-range__bahn .wbs-range__in {
	position: absolute !important; left: 0 !important; right: auto !important; top: 0 !important;
	display: block !important; float: none !important; transform: none !important;
	box-sizing: border-box !important;
	width: 100% !important; min-width: 0 !important; max-width: none !important;
	height: 26px !important; min-height: 0 !important; max-height: none !important;
	margin: 0 !important; padding: 0 !important;
	appearance: none !important; -webkit-appearance: none !important;
	background: transparent !important; background-image: none !important;
	border: 0 !important; border-radius: 0 !important; box-shadow: none !important;
	pointer-events: none; }
/* Feste Stapelreihenfolge, damit die Griffe nicht zufaellig tauschen.
   filter.js hebt den Min-Griff auf 5, wenn beide oben am Anschlag stehen. */
.wbs-range__in--min { z-index: 3; }
.wbs-range__in--max { z-index: 4; }
.wbs-range__in:focus { outline: none !important; }
.wbs-range__in::-webkit-slider-runnable-track { background: transparent; border: 0; height: 26px; }
.wbs-range__in::-webkit-slider-thumb { -webkit-appearance: none; pointer-events: auto; width: 22px; height: 22px;
	margin-top: 2px; border-radius: 50%; background: var(--weiss); border: 2px solid var(--schwarz); cursor: grab;
	box-shadow: 0 2px 6px -1px rgba(19,17,16,0.4); }
.wbs-range__in::-moz-range-track { background: transparent; border: 0; height: 26px; }
.wbs-range__in::-moz-range-thumb { pointer-events: auto; width: 20px; height: 20px; border-radius: 50%;
	background: var(--weiss); border: 2px solid var(--schwarz); cursor: grab; }
.wbs-range__in:focus-visible::-webkit-slider-thumb { outline: 2px solid var(--flieder); outline-offset: 2px; }

/* --- Fuss der Filterkarte --- */
.wbs-filter__fuss { display: flex; align-items: center; gap: 12px; margin-top: 12px; padding-top: 12px;
	border-top: 1px solid var(--linie); }
.wbs-filter__go { flex: 1; min-height: 44px; padding: 0 20px; border: 0; border-radius: var(--r-pill); cursor: pointer;
	background: var(--schwarz); color: var(--weiss); font: inherit; font-weight: 800; font-size: 0.88rem;
	transition: background 0.18s ease, color 0.18s ease; }
.wbs-filter__go:hover { background: var(--flieder); color: var(--schwarz); }
.wbs-filter.is-live .wbs-filter__go { display: none; }
.wbs-filter.is-live .wbs-filter__fuss { margin-top: 8px; padding-top: 10px; justify-content: flex-end; }

.wbs-body .wbs-filter__reset { font-size: 0.82rem; font-weight: 600; color: var(--gedimmt);
	text-decoration: underline; text-underline-offset: 3px; }
.wbs-body .wbs-filter__reset:hover { color: var(--schwarz); }
.wbs-filter__reset[hidden] { display: none; }

/* --- Ergebnisraster --- */
#wbs-grid { transition: opacity 0.18s ease; }
#wbs-grid.is-loading { opacity: 0.45; pointer-events: none; }

.wbs-mehr-wrap { display: flex; justify-content: center; margin: 30px 0 6px; }
.wbs-body .wbs-mehr { display: inline-block; padding: 15px 40px; border-radius: var(--r-pill);
	background: var(--gruen); color: var(--schwarz); font-weight: 800; font-size: 0.92rem; text-decoration: none;
	border: 0; cursor: pointer; transition: background 0.18s ease; }
.wbs-body .wbs-mehr:hover, .wbs-body .wbs-mehr:focus-visible { background: var(--flieder); color: var(--schwarz); }

/* --- Neu geladene Karten blenden sanft ein --- */
@keyframes wbs-auf { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
.card.is-neu { animation: wbs-auf 0.4s ease both; }

/* --- Spaltenzahl --- */
@media (min-width: 820px) and (max-width: 1023px) {
	.wbs-ergebnisse .cards--list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 1024px) {
	.wbs-layout { grid-template-columns: 274px minmax(0, 1fr); gap: 30px; }
	.wbs-layout.is-zu { grid-template-columns: auto minmax(0, 1fr); }
	/* Abstand zur Oberkante — sonst klebt die Spalte direkt unter dem
	   Seitenkopf und wirkt angeschnitten. */
	.wbs-side { position: sticky; top: 112px; }
	.wbs-side__inhalt { max-height: calc(100vh - 148px); overflow-y: auto; overscroll-behavior: contain;
		padding-right: 4px; }
	.wbs-side__inhalt::-webkit-scrollbar { width: 6px; }
	.wbs-side__inhalt::-webkit-scrollbar-thumb { background: rgba(19,17,16,0.18); border-radius: var(--r-pill); }
	/* Drei Karten pro Zeile als Standard (Filter offen wie geschlossen) —
	   dafuer nutzt .wbs-katalog-haupt .container weiter unten mehr Breite. */
	.wbs-ergebnisse .cards--list { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.wbs-layout.is-zu .wbs-side__schalter { padding: 12px; }
	.wbs-layout.is-zu .wbs-side__schalter-text { display: none; }
}

@media (prefers-reduced-motion: reduce) {
	#wbs-grid, .wbs-drop__chev, .wbs-filter__go, .wbs-body .wbs-mehr, .wbs-side__schalter { transition: none; }
	.card.is-neu { animation: none; }
}

/* =====================================================================
   Hero „Bewegte Fotowand" (v0.7.0)
   Dunkler Seitenkopf, hinter dem sechs Fotospalten langsam gegenlaeufig
   durchlaufen. Bewegung ist reines CSS (keyframes + transform) —
   kein JavaScript, kein GSAP noetig.
   Markup: templates/parts/hero-fotowand.php
   ===================================================================== */

.head--wand {
	display: flex;
	align-items: flex-end;
	min-height: min(88svh, 800px);
	padding: clamp(140px, 20vw, 220px) 0 clamp(70px, 9vw, 110px);
	background: var(--schwarz);
	isolation: isolate;
}

/* --- Bildflaeche --------------------------------------------------- */
.fotowand {
	position: absolute;
	inset: 0;
	z-index: 0;
	overflow: hidden;
	background: var(--schwarz);
}

/* Die Buehne ist groesser als der Header und leicht gedreht, damit an
   den Raendern keine Spaltenkanten sichtbar auslaufen. */
.fotowand__buehne {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 130%;
	height: 168%;
	transform: translate(-50%, -50%) rotate(-6deg);
	display: flex;
	justify-content: center;
	gap: clamp(7px, 0.8vw, 12px);
}

.fotowand__spalte {
	flex: 1 1 0;
	min-width: 0;
	overflow: hidden;
}

.fotowand__zug {
	animation: fotowand-lauf var(--wand-dauer, 80s) linear infinite;
	will-change: transform;
}

/* Gegenlaeufige Spalten: gleiche Keyframes, nur rueckwaerts abgespielt. */
.fotowand__spalte--ab .fotowand__zug {
	animation-direction: reverse;
}

/* Wichtig fuer den nahtlosen Loop: KEIN gap zwischen den Bildern —
   der Abstand steckt im margin-bottom jedes Bildes. Nur dann ist ein
   Bildersatz exakt die Haelfte des Zugs und -50% springt unsichtbar. */
.fotowand__satz picture {
	display: block;
	margin: 0 0 clamp(7px, 0.8vw, 12px);
}

.fotowand__satz img {
	display: block;
	width: 100%;
	height: auto;
	filter: saturate(0.92) contrast(1.04);
}

@keyframes fotowand-lauf {
	from { transform: translate3d(0, 0, 0); }
	to   { transform: translate3d(0, -50%, 0); }
}

/* --- Schleier: dunkler Lichtkegel unten links, damit der Text sitzt --- */
.fotowand__schleier {
	position: absolute;
	inset: 0;
	z-index: 1;
	pointer-events: none;
	background:
		linear-gradient(to bottom, rgba(19,17,16,0.72) 0%, rgba(19,17,16,0) 22%),
		linear-gradient(to top, rgba(19,17,16,0.82) 0%, rgba(19,17,16,0) 20%),
		linear-gradient(100deg, rgba(19,17,16,0.58) 0%, rgba(19,17,16,0.34) 48%, rgba(19,17,16,0.30) 100%);
}

/* --- Textebene ------------------------------------------------------ */
.fotowand__inhalt {
	position: relative;
	z-index: 2;
	width: 100%;
}

/* Zweiter, weicher Schatten direkt hinter dem Textblock. Er wandert mit
   dem Container mit — auf breiten Monitoren steht die Schrift sonst
   mitten im Bild und wird unleserlich. */
.fotowand__inhalt::before {
	content: '';
	position: absolute;
	z-index: -1;
	left: -34vw;
	right: -10vw;
	top: -22%;
	bottom: -70%;
	pointer-events: none;
	background: radial-gradient(58% 58% at 34% 48%,
		rgba(19,17,16,0.90) 0%,
		rgba(19,17,16,0.74) 42%,
		rgba(19,17,16,0.36) 72%,
		rgba(19,17,16,0) 100%);
}

/* Die Schrift liegt hier auf Fotos — Theme- oder Elementor-Regeln
   duerfen die Farbe nicht umbiegen, sonst steht schwarz auf dunkel. */
.head--wand h1 {
	max-width: 11ch;
	color: var(--weiss) !important;
	text-shadow: 0 2px 34px rgba(19,17,16,0.7);
}

.head--wand h1 em { color: var(--gruen) !important; font-style: normal; }
.head--wand .kicker { color: var(--flieder) !important; }

.head--wand .sub {
	max-width: 460px;
	color: rgba(255,255,255,0.82) !important;
	text-shadow: 0 1px 18px rgba(19,17,16,0.75);
}

.fotowand__btn {
	margin-top: 26px;
}

/* --- Spaltenzahl je Bildschirmbreite -------------------------------- */
@media (max-width: 1199px) {
	.fotowand__spalte:nth-child(n + 5) { display: none; } /* 4 Spalten */
	.fotowand__buehne { width: 138%; }
}

@media (max-width: 767px) {
	.fotowand__spalte:nth-child(n + 4) { display: none; } /* 3 Spalten */
	.fotowand__buehne { width: 152%; height: 150%; }
	.head--wand { min-height: min(80svh, 640px); }
	.head--wand h1 { max-width: none; }
}

/* --- Ruhiger Modus --------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
	.fotowand__zug { animation: none; }
}

/* Anker-Sprung aus dem Hero: Ziel nicht unter der Topbar kleben lassen. */
#wbs-layout { scroll-margin-top: 90px; }
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

/* =====================================================================
   Filter auf dem Handy: kompakte Glastafel über dem Knopf (v0.29.0)
   ---------------------------------------------------------------------
   Unter 1024 px verlaesst die Filterspalte den Textfluss und wird zu
   einer Tafel, die aus dem schwebenden Knopf unten links aufsteigt —
   spiegelbildlich zum Menue unten rechts. Sie ist nur so breit wie
   noetig, damit der Blick auf die Ergebnisse frei bleibt.

   Auf- und Zuklappen laeuft ueber eine versteckte Checkbox
   (#wbs-sheet-schalter) und <label>-Elemente — also ganz ohne
   JavaScript. Damit funktioniert der Filter auch dann, wenn ein
   Caching-Plugin Skripte verzoegert oder verschluckt. filter.js
   ergaenzt nur Feinheiten: Scroll-Sperre, Escape, aria-Zustand,
   Wischgeste.
   ===================================================================== */

/* Der Schalter selbst bleibt bedienbar (Tastatur), ist aber unsichtbar
   und faellt aus dem Gitter heraus. */
.wbs-sheet__toggle {
	position: absolute;
	width: 1px;
	height: 1px;
	opacity: 0;
	margin: 0;
	pointer-events: none;
}

/* --- Schwebender Knopf --- */
.wbs-fab {
	position: fixed;
	left: 16px;
	bottom: calc(16px + env(safe-area-inset-bottom, 0px));
	z-index: 8988;
	display: none; /* Desktop: unsichtbar, dort gibt es die Spalte */
	align-items: center;
	gap: 9px;
	min-height: 52px;
	padding: 0 20px;
	border-radius: var(--r-pill);
	background: var(--flieder);
	color: var(--schwarz);
	font: inherit;
	font-weight: 800;
	font-size: 0.9rem;
	cursor: pointer;
	user-select: none;
	-webkit-user-select: none;
	/* Gleicher Lichtsaum wie am Menueknopf: oben hell, darunter Schatten. */
	border: 1px solid rgba(255,255,255,0.3);
	box-shadow:
		inset 0 1px 0 rgba(255,255,255,0.55),
		0 12px 28px -10px rgba(19,17,16,0.55);
	transition: transform 0.2s ease, opacity 0.25s ease, background 0.2s ease;
}

.wbs-fab svg { width: 18px; height: 18px; flex: none; }
.wbs-fab__zu { display: none; }
.wbs-fab:active { transform: scale(0.97); }
.wbs-sheet__toggle:focus-visible ~ .wbs-fab { outline: 3px solid var(--schwarz); outline-offset: 3px; }

/* Beim Scrollen nimmt sich der Knopf zurueck, beim Anhalten ist er
   wieder voll da. filter.js setzt die Klasse; ohne JavaScript bleibt er
   einfach durchgehend sichtbar. */
.wbs-fab.is-scrollt {
	opacity: 0.4;
	background: rgba(250,249,246,0.35);
	-webkit-backdrop-filter: blur(14px);
	backdrop-filter: blur(14px);
}

/* Zahl der gesetzten Filter */
.wbs-fab__zahl {
	min-width: 21px;
	height: 21px;
	padding: 0 6px;
	border-radius: var(--r-pill);
	background: var(--schwarz);
	color: var(--weiss);
	font-size: 0.74rem;
	font-weight: 800;
	line-height: 21px;
	text-align: center;
}

/* Offen wird aus dem Knopf ein Schliessen-Knopf — im Markenton, nur
   glaesern zurueckgenommen. So bleibt sichtbar, woher die Tafel kommt. */
.wbs-sheet__toggle:checked ~ .wbs-fab {
	background: rgba(186,170,205,0.62);
	-webkit-backdrop-filter: blur(20px) saturate(1.8);
	backdrop-filter: blur(20px) saturate(1.8);
	opacity: 1;
}
.wbs-sheet__toggle:checked ~ .wbs-fab .wbs-fab__auf { display: none; }
.wbs-sheet__toggle:checked ~ .wbs-fab .wbs-fab__zu { display: block; }
.wbs-sheet__toggle:checked ~ .wbs-fab .wbs-fab__wort,
.wbs-sheet__toggle:checked ~ .wbs-fab .wbs-fab__zahl { display: none; }

/* --- Abdunkelung hinter der Tafel --- */
.wbs-sheet-schleier {
	position: fixed;
	inset: 0;
	z-index: 8980;
	background: rgba(19,17,16,0.32);
	-webkit-backdrop-filter: blur(3px);
	backdrop-filter: blur(3px);
	opacity: 0;
	visibility: hidden;
	cursor: pointer;
	transition: opacity 0.25s ease, visibility 0.25s;
}

.wbs-sheet__toggle:checked ~ .wbs-sheet-schleier { opacity: 1; visibility: visible; }

/* Kopf und Fuss gehoeren nur zum Sheet, am Desktop sind sie unsichtbar. */
.wbs-sheet__kopf,
.wbs-sheet__fuss { display: none; }
.wbs-sheet__reset { display: none; }

@media (max-width: 1023px) {

	/* Der alte Textschalter ueber der Liste entfaellt — der schwebende
	   Knopf uebernimmt seine Aufgabe. */
	.wbs-side__schalter { display: none !important; }

	/* Die leere Filterspalte soll keine Gitterzeile mehr belegen. */
	.wbs-side { display: contents; }
	.wbs-fab { display: inline-flex; }

	/*
	 * Die Tafel sitzt ueber dem Knopf unten links, nicht mehr ueber die
	 * ganze Breite. Glasoptik wie beim Menue: viel Transparenz, kraeftige
	 * Unschaerfe und etwas mehr Farbsaettigung, damit das Glas die Farben
	 * der Seite dahinter aufnimmt statt sie milchig zu ueberdecken.
	 *
	 * Der Rand ist kein weisser Strich, sondern ein Lichtsaum: oben hell,
	 * unten dunkel — das laesst die Flaeche gewoelbt wirken.
	 */
	.wbs-side__inhalt {
		position: fixed;
		left: 16px;
		right: auto;
		bottom: calc(80px + env(safe-area-inset-bottom, 0px));
		z-index: 8985;
		display: flex !important; /* schlaegt ein altes .is-zu { display:none } */
		flex-direction: column;
		/* Gleiche Breite wie die Menütafel gegenüber — beide sollen als
		   dasselbe Bauteil erkennbar sein. */
		width: min(320px, calc(100vw - 32px));
		max-height: min(70svh, calc(100svh - 200px));
		margin: 0;
		padding: 0;
		border-radius: 26px;
		border: 1px solid rgba(255,255,255,0.28);
		/* Oben etwas heller als unten — so faellt Licht auf eine Scheibe.
		   Gibt zugleich genug Grundhelligkeit, damit die schwarze Schrift
		   auch ueber dunklen Fotos sicher lesbar bleibt. */
		background:
			linear-gradient(160deg, rgba(255,255,255,0.66) 0%, rgba(250,249,246,0.5) 55%, rgba(250,249,246,0.56) 100%);
		background-image:
			linear-gradient(160deg, rgba(255,255,255,0.66) 0%, rgba(250,249,246,0.5) 55%, rgba(250,249,246,0.56) 100%);
		-webkit-backdrop-filter: blur(26px) saturate(1.9);
		backdrop-filter: blur(26px) saturate(1.9);
		box-shadow:
			inset 0 1px 0 rgba(255,255,255,0.65),
			inset 0 -1px 0 rgba(19,17,16,0.06),
			inset 0 0 22px rgba(255,255,255,0.22),
			0 26px 54px -22px rgba(19,17,16,0.42);
		/* Aus dem Knopf heraus: Ursprung ist die untere linke Ecke. */
		transform-origin: bottom left;
		transform: translateY(14px) scale(0.94);
		opacity: 0;
		visibility: hidden;
		transition: transform 0.28s cubic-bezier(0.22, 0.8, 0.3, 1), opacity 0.22s ease, visibility 0.28s;
	}

	/* Geoeffnet — rein ueber die Checkbox, ohne JavaScript. */
	.wbs-sheet__toggle:checked ~ .wbs-side .wbs-side__inhalt {
		transform: none;
		opacity: 1;
		visibility: visible;
	}

	/* touch-action: none — sonst faengt der Browser die Wischgeste ab
	   und scrollt, statt das Panel mitzunehmen. */
	.wbs-sheet__kopf {
		position: relative;
		touch-action: none;
		cursor: grab;
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 10px;
		padding: 18px 14px 9px;
		border-bottom: 1px solid rgba(19,17,16,0.09);
	}

	.wbs-sheet__kopf:active { cursor: grabbing; }

	/* Griffleiste oben — Signal und Ziehflaeche zugleich. */
	.wbs-sheet__kopf::before {
		content: '';
		position: absolute;
		top: 8px;
		left: 50%;
		width: 42px;
		height: 4px;
		margin-left: -21px;
		border-radius: var(--r-pill);
		background: rgba(19,17,16,0.20);
	}

	/* Waehrend des Ziehens keine Uebergangszeit — das Panel soll direkt
	   am Finger haengen. */
	.wbs-side__inhalt.is-zieht { transition: none; }

	.wbs-sheet__titel { font-size: 1rem; font-weight: 800; }
	.wbs-body .wbs-sheet__reset { display: inline; }
	.wbs-body .wbs-sheet__reset[hidden] { display: none; }

	/*
	 * Das X im Kopf entfaellt: der schwebende Knopf sitzt direkt unter
	 * der Tafel und ist offen selbst das X. Zwei Schliessen-Kreuze auf
	 * engem Raum wirkten unruhig, und in 330 px Breite braucht
	 * „Zuruecksetzen" den Platz. Die Regel bleibt fuer Altstaende stehen.
	 */
	.wbs-sheet__zu { display: none !important; }

	.wbs-sheet__koerper {
		flex: 1;
		min-height: 0;
		overflow-y: auto;
		overscroll-behavior: contain;
		-webkit-overflow-scrolling: touch;
		padding: 10px 14px 12px;
	}

	/*
	 * Auf Glas duerfen die Felder nicht als weisse Kaesten aufsitzen —
	 * sonst ist der Effekt dahin. Sie werden deshalb selbst durchsichtig
	 * und die Trennlinien eine Spur leichter.
	 */
	.wbs-sheet__koerper .wbs-suche {
		background: rgba(255,255,255,0.5);
		border-color: rgba(19,17,16,0.10);
	}
	.wbs-sheet__koerper .wbs-suche:focus-within {
		background: rgba(255,255,255,0.78);
		border-color: var(--schwarz);
	}
	.wbs-sheet__koerper .wbs-datum input {
		background: rgba(255,255,255,0.5);
		border-color: rgba(19,17,16,0.14);
	}
	.wbs-body .wbs-sheet__koerper .wbs-gruppen .wbs-drop { border-top-color: rgba(19,17,16,0.09); }
	.wbs-body .wbs-sheet__koerper .wbs-gruppen .wbs-drop > summary:hover,
	.wbs-body .wbs-sheet__koerper .wbs-opt:hover { background: rgba(255,255,255,0.45); }

	/* In der schmalen Tafel darf eine aufgeklappte Gruppe nicht die
	   ganze Hoehe fuellen — sonst scrollt man ewig zur naechsten. */
	.wbs-body .wbs-sheet__koerper .wbs-drop__panel { max-height: 210px; }

	/* Im Sheet braucht die Filterkarte keinen eigenen Rahmen mehr. */
	.wbs-sheet__koerper .wbs-filter {
		border: 0;
		box-shadow: none;
		background: transparent;
		background-image: none;
		padding: 0;
	}

	/* Im Sheet gibt es genau einen Knopf: „Ergebnisse anzeigen" unten.
	   Der Formularfuss mit „Filtern" und „Zurücksetzen" entfaellt —
	   Zuruecksetzen steht jetzt oben neben dem X. */
	.wbs-sheet__koerper .wbs-filter__fuss { display: none; }

	.wbs-sheet__reset { margin-left: auto; white-space: nowrap; }

	/* Kein weisser Balken unter dem Glas — nur eine feine Linie. */
	.wbs-sheet__fuss {
		display: flex;
		gap: 10px;
		padding: 10px 12px 12px;
		border-top: 1px solid rgba(19,17,16,0.09);
		background: transparent;
	}

	.wbs-sheet__fertig {
		flex: 1;
		min-height: 48px;
		border: 0;
		cursor: pointer;
		font: inherit;
		font-weight: 800;
		text-align: center;
		line-height: 48px;
		padding: 0 20px;
		user-select: none;
		-webkit-user-select: none;
	}

	/* Seite hinter dem Panel festhalten. Zwei getrennte Regeln, weil
	   aeltere Browser :has() nicht kennen und sonst beide verwerfen
	   wuerden — die Klasse setzt filter.js, :has() greift ohne Skript. */
	body.wbs-sheet-offen { overflow: hidden; }
	body:has(.wbs-sheet__toggle:checked) { overflow: hidden; }

	/* Platz, damit der schwebende Knopf die letzte Karte nicht verdeckt. */
	.wbs-ergebnisse { padding-bottom: 76px; }
}

@media (prefers-reduced-motion: reduce) {
	.wbs-side__inhalt, .wbs-sheet-schleier, .wbs-fab { transition: none; }
}

/* =====================================================================
   Warenkorb-Knopf auf der Seminarkarte + Mengen-Fenster (v0.9.0)
   ===================================================================== */

.card-aktionen { display: flex; align-items: stretch; gap: 10px; }
.card-aktionen .card-cta { flex: 1 1 auto; min-width: 0; }

/* Bleibt bewusst schmal — „Zum Seminar" soll die Hauptaktion sein. */
.wbs-body .card-warenkorb {
	flex: 0 0 auto;
	width: 54px;
	max-width: 33%;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 0;
	border-radius: var(--r-m);
	background: var(--flieder);
	color: var(--schwarz);
	text-decoration: none;
	cursor: pointer;
	transition: background 0.18s ease, transform 0.15s ease;
}

.wbs-body .card-warenkorb:hover,
.wbs-body .card-warenkorb:focus-visible { background: var(--gruen); }
.wbs-body .card-warenkorb:active { transform: scale(0.95); }
.wbs-body .card-warenkorb.is-drin { background: var(--gruen); }
.card-warenkorb svg { width: 21px; height: 21px; }

/* --- Mengen-Fenster --- */
.wbs-kauf { position: fixed; inset: 0; z-index: 9100; display: flex; align-items: center; justify-content: center; padding: 20px; }
.wbs-kauf[hidden] { display: none; }

.wbs-kauf__schleier { position: absolute; inset: 0; background: rgba(19,17,16,0.6);
	opacity: 0; transition: opacity 0.2s ease; }
.wbs-kauf.is-offen .wbs-kauf__schleier { opacity: 1; }

.wbs-kauf__box { position: relative; z-index: 1; width: min(420px, 100%);
	padding: 26px 24px 24px; border-radius: var(--r-l);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	box-shadow: 0 30px 70px -30px rgba(19,17,16,0.7);
	transform: translateY(14px) scale(0.98); opacity: 0;
	transition: transform 0.22s cubic-bezier(0.22,0.8,0.3,1), opacity 0.22s ease; }
.wbs-kauf.is-offen .wbs-kauf__box { transform: none; opacity: 1; }

.wbs-kauf__zu { position: absolute; top: 12px; right: 12px; width: 36px; height: 36px;
	display: inline-flex; align-items: center; justify-content: center;
	padding: 0; border: 1px solid var(--linie); border-radius: 50%;
	background: var(--weiss); color: var(--schwarz); cursor: pointer; }
.wbs-kauf__zu svg { width: 16px; height: 16px; }

.wbs-kauf__kicker { margin: 0 0 8px; font-size: 0.7rem; font-weight: 800;
	letter-spacing: 0.16em; text-transform: uppercase; color: var(--flieder); }
.wbs-body .wbs-kauf__titel { margin: 0 0 4px; font-size: 1.28rem; font-weight: 800;
	letter-spacing: -0.02em; line-height: 1.2; padding-right: 34px; }
.wbs-kauf__preis { margin: 0 0 20px; font-size: 0.95rem; font-weight: 700; color: var(--gedimmt); }

.wbs-kauf__menge { display: flex; align-items: center; justify-content: space-between; gap: 14px;
	padding: 12px 0 6px; border-top: 1px solid var(--linie); }
.wbs-kauf__label { font-size: 0.86rem; font-weight: 700; }

.wbs-kauf__stepper { display: flex; align-items: center; gap: 4px; }
.wbs-kauf__step { width: 40px; height: 40px; flex: none; padding: 0;
	border: 1px solid var(--linie); border-radius: 50%; background: var(--weiss);
	font: inherit; font-size: 1.2rem; font-weight: 800; color: var(--schwarz); cursor: pointer;
	line-height: 1; }
.wbs-kauf__step:disabled { opacity: 0.35; cursor: default; }

/* Auch hier: Theme-Rahmen aushebeln, sonst wird das Zahlenfeld zur Pille. */
.wbs-kauf__zahl {
	width: 62px !important; min-width: 0 !important; max-width: none !important;
	height: 40px !important; min-height: 0 !important;
	padding: 0 !important; margin: 0 !important;
	border: 1px solid var(--linie) !important; border-radius: var(--r-s) !important;
	background: var(--weiss) !important; box-shadow: none !important;
	font: inherit; font-weight: 800; font-size: 1rem; text-align: center; color: var(--schwarz);
	-moz-appearance: textfield;
}
.wbs-kauf__zahl::-webkit-outer-spin-button,
.wbs-kauf__zahl::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

.wbs-kauf__hinweis { margin: 6px 0 18px; font-size: 0.8rem; color: var(--gedimmt); min-height: 1.2em; }

.wbs-body .wbs-kauf__los { display: block; width: 100%; min-height: 52px; border: 0;
	cursor: pointer; font: inherit; font-weight: 800; font-size: 0.98rem; text-align: center; }
.wbs-kauf__los:disabled { opacity: 0.7; cursor: default; }

.wbs-kauf__fehler { margin: 12px 0 0; font-size: 0.84rem; font-weight: 700; color: #B4402F; }
.wbs-kauf__fehler[hidden] { display: none; }

body.wbs-kauf-offen { overflow: hidden; }

@media (prefers-reduced-motion: reduce) {
	.wbs-kauf__schleier, .wbs-kauf__box, .wbs-body .card-warenkorb { transition: none; }
}

/* =====================================================================
   Startseite (v0.10.0)
   ===================================================================== */

/* Abschnitte der Seite bleiben immer unter Kopf, Menü und schwebendem
   Knopf. Das „!important" ist hier bewusst gesetzt: Auf dem Server hat
   fremdes CSS dem Hero einen hohen Stapelwert gegeben, worauf er sich
   über das Menü legte. Diese Abschnitte brauchen nie einen eigenen Wert
   nach oben — ihr Inhalt ordnet sich innerhalb von ihnen. */
body.wbs-body .hero,
body.wbs-body .head,
body.wbs-body .wbs-section,
body.wbs-body .cta-huelle,
body.wbs-body .konfetti,
body.wbs-body main,
body.wbs-body .wbs-fuss {
	position: relative;
	isolation: isolate;
	z-index: 0 !important;
}

/* --- Heller Hero mit Modell-Banner --- */
.hero--hell {
	background: var(--offwhite);
	background-image: linear-gradient(var(--offwhite), var(--offwhite));
	/* Niedriger als der Standard-Hero (.hero: 100svh) — die Seite soll
	   schneller zu „Was uns ausmacht" und den Seminaren durchblenden. */
	min-height: min(78svh, 620px);
	padding: clamp(80px, 11vw, 130px) 0 clamp(60px, 8vw, 90px);
}

.hero-wand { position: absolute; inset: 0; z-index: 0; overflow: hidden; }
.hero-wand img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	/* Beim Laden ganz sanft heranfahren. */
	animation: wb-hero-auftritt 1.4s cubic-bezier(0.22, 0.8, 0.3, 1) both;
}

@keyframes wb-hero-auftritt {
	from { transform: scale(1.05); opacity: 0; }
	to   { transform: scale(1);    opacity: 1; }
}

/*
 * Aufhellung von links: dort steht die Schrift und braucht Ruhe.
 * Nach rechts wird das Bild frei, die Modelle bleiben offen sichtbar.
 */
.hero-wand__schleier {
	position: absolute;
	inset: 0;
	z-index: 1;
	pointer-events: none;
	background:
		linear-gradient(100deg,
			rgba(250,249,246,0.97) 0%,
			rgba(250,249,246,0.93) 26%,
			rgba(250,249,246,0.62) 50%,
			rgba(250,249,246,0.14) 80%,
			rgba(250,249,246,0.02) 100%),
		linear-gradient(to bottom, rgba(250,249,246,0.55) 0%, rgba(250,249,246,0) 20%),
		linear-gradient(to top, rgba(250,249,246,0.8) 0%, rgba(250,249,246,0) 22%);
}

.hero__inhalt { position: relative; z-index: 3; }





.hero__inhalt { position: relative; z-index: 3; }


/* Heller Hero = dunkle Schrift. */
.hero--hell h1, .hero--hell h2, .hero--hell p, .hero--hell div, .hero--hell span, .hero--hell b { color: var(--schwarz) !important; }
.hero--hell .kicker { color: #8B7BA0 !important; }
.hero--hell .accent { color: #4E8F63 !important; }
.hero--hell .scroll-hint { color: rgba(19,17,16,0.5) !important; z-index: 3; }
.hero--hell .btn--dark { color: var(--weiss) !important; }
/*
 * Die längste Zeile ist „Weiterbildung," mit 8,57 em — plus Sicherheit
 * also 8,8. Auf großen Bildschirmen deckelt 7rem (112 px), das ist rund
 * ein Drittel mehr als vorher. Die feste Breitengrenze (15ch) ist weg:
 * die Zeile passt jetzt von sich aus, und die Grenze hätte die größere
 * Schrift unnötig ausgebremst.
 */
body.wbs-body .hero--hell h1 {
	--wbs-h1-em: 9.1; /* „WEITERBILDUNG," */
	letter-spacing: -0.04em;
	font-size: clamp(2.1rem, 8.4vw, 5.4rem); /* Rückfallebene */
	font-size: min(calc((100vw - 44px) / var(--wbs-h1-em)), 7rem);
	max-width: none;
}

@media (max-width: 899px) {
	.hero--hell h1 { max-width: none; }
	/* Hochkant zeigt der Ausschnitt sonst nur Haare. */
	.hero-wand img { object-position: 62% 28%; }
	.hero-wand__schleier {
		background:
			linear-gradient(to top, rgba(250,249,246,0.97) 0%, rgba(250,249,246,0.9) 34%, rgba(250,249,246,0.45) 62%, rgba(250,249,246,0.1) 100%),
			linear-gradient(to bottom, rgba(250,249,246,0.6) 0%, rgba(250,249,246,0) 20%);
	}
}

@media (prefers-reduced-motion: reduce) {
	.hero-wand img { animation: none; }
}

/* Die Haarlinien ziehen sich jetzt ueber die ganze Breite. */
.hairline--breit {
	right: auto;
	left: 0;
	top: auto;
	bottom: 0;
	width: 100%;
	max-width: none;
	height: 62%;
	z-index: 2;
	opacity: 0.9;
}

/* --- Konfetti-Band --- */
.konfetti { position: relative; overflow: hidden; min-height: min(62svh, 520px);
	display: flex; align-items: flex-end; padding: 0 0 clamp(34px, 6vw, 64px); background: var(--schwarz); }
.konfetti__bild { position: absolute; inset: -8% 0; z-index: 0; }
.konfetti__bild img { width: 100%; height: 100%; object-fit: cover; }
.konfetti::after { content: ''; position: absolute; inset: 0; z-index: 1; pointer-events: none;
	background: linear-gradient(to top, rgba(19,17,16,0.82) 0%, rgba(19,17,16,0.25) 46%, rgba(19,17,16,0.35) 100%); }
.konfetti__text { position: relative; z-index: 2; }
/* „Gelernt. Gelacht. Gefeiert." bricht selbst um — mehr Zeilenabstand
   gibt den drei Wörtern Luft, ohne am Umbruch etwas zu ändern.
   body.wbs-body wieder gegen das Elementor-Kit (siehe oben). */
.konfetti__text h2 { color: var(--weiss) !important; margin: 0; text-shadow: 0 2px 26px rgba(19,17,16,0.6); }
body.wbs-body .konfetti__text h2,
body.wbs-body .konfetti__text h2 .zeile {
	font-size: clamp(2.1rem, 7.5vw, 3.6rem);
	font-weight: 800;
	letter-spacing: -0.025em;
	line-height: 1.18;
}
.konfetti__text .skicker { color: var(--gruen) !important; }

/* --- Teilnehmerstimmen --- */
.stimmen { display: grid; gap: 16px; margin-top: 30px; grid-template-columns: 1fr; }

.stimme { margin: 0; padding: 24px 22px; background: var(--offwhite);
	background-image: linear-gradient(var(--offwhite), var(--offwhite));
	border-radius: var(--r-l); border: 1px solid var(--linie);
	display: flex; flex-direction: column; gap: 14px; }
.stimme blockquote { margin: 0; font-size: 1.02rem; line-height: 1.55; font-weight: 600; }
.stimme figcaption { display: flex; flex-direction: column; gap: 1px; margin-top: auto; }
.stimme figcaption b { font-size: 0.92rem; font-weight: 800; }
.stimme figcaption span { font-size: 0.8rem; color: var(--gedimmt); }

/* Die erste, laengste Stimme bekommt mehr Gewicht. */
.stimme--gross { background: var(--schwarz); background-image: linear-gradient(var(--schwarz), var(--schwarz)); border-color: var(--schwarz); }
.stimme--gross blockquote { color: var(--weiss) !important; font-size: 1.16rem; }
.stimme--gross figcaption b { color: var(--weiss) !important; }
.stimme--gross figcaption span { color: rgba(255,255,255,0.6) !important; }

@media (min-width: 700px) {
	.stimmen { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.stimme--gross { grid-column: span 2; }
}

@media (min-width: 1040px) {
	.stimmen { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.stimme--gross { grid-column: span 3; }
	.stimme--gross blockquote { font-size: 1.3rem; max-width: 46ch; }
}

/* --- „Alle Seminare anzeigen" wie „Mehr laden" auf der Seminarseite --- */
.wbs-body .wbs-mehr { text-align: center; }
.wbs-mehr-wrap { width: 100%; }

/* =====================================================================
   Startseite v0.11 — groesseres Intro, mittiges Konfetti-Band,
   wischbare Teilnehmerstimmen
   ===================================================================== */

/* --- Intro gross gesetzt --- */
.triple--gross { padding: clamp(56px, 8vw, 96px) 0; }
/*
 * Der Abstand wächst mit der Schrift mit (em statt Pixel): auf dem
 * Handy rund 7 px, auf großen Bildschirmen rund 15 px. Die Wörter
 * stehen dadurch samt Farbbalken freier untereinander.
 *
 * body.wbs-body davor, weil Elementor über sein Kit
 * (.elementor-kit-… h2) jede Überschrift auf 28 px und einen
 * Zeilenabstand von 1,6 px zwingt — kein Tippfehler, Elementor schreibt
 * dort px statt einer Verhältniszahl. Genau das ließ die drei Wörter so
 * gedrängt und klein wirken. Mit dem Präfix gewinnt wieder unsere
 * Größe; auf Elementor-Seiten ändert sich nichts.
 */
/* Reihenfolge beachten: beide Regeln sind gleich stark, deshalb steht
   die allgemeine zuerst und die große Fassung darf sie überschreiben. */
body.wbs-body .triple h2 {
	font-size: clamp(2.6rem, 11vw, 5rem);
	font-weight: 800;
	line-height: 1.04;
}
body.wbs-body .triple--gross h2 {
	font-size: clamp(2rem, 6.5vw, 4.4rem);
	font-weight: 800;
	letter-spacing: -0.025em;
	line-height: 1.06;
	gap: 0.1em;
}

/* Kopf (Eyebrow + die drei Wörter) links, Fließtext rechts daneben —
   auf dem Handy fällt der Text darunter, weil die Spalte dafür zu
   schmal wird. */
.triple__row { display: grid; grid-template-columns: 1fr; gap: 18px; }
@media (min-width: 860px) {
	.triple__row { grid-template-columns: minmax(0, 1fr) minmax(200px, 280px); align-items: center; gap: 48px; }
}

/* Jedes Wort sitzt in seiner eigenen Zeile mit Deckel: animations.js
   schiebt den Text von unten heraus, der Deckel schneidet ihn dabei ab.
   Ohne JavaScript steht alles ganz normal da. */
.triple--gross .word { overflow: hidden; padding-bottom: 0.03em; }
.triple--gross .word > span { display: inline-block; }
/* Der Farbbalken liegt wie ein Textmarker im unteren Drittel der
   Buchstaben — bei dieser Schriftgroesse sonst zu weit unten. */
.triple--gross .word i { bottom: 0.11em; height: 0.2em; }
.triple--gross .copy--gross {
	max-width: 34ch;
	margin-top: 20px;
	font-size: clamp(0.92rem, 1.4vw, 1rem);
	line-height: 1.5;
	color: rgba(19,17,16,0.78);
}
@media (min-width: 860px) {
	/* In der zweispaltigen Anordnung übernimmt align-items: center auf
	   .triple__row den Abstand nach oben — ein zusätzliches margin-top
	   würde den Text unnötig aus der Mitte schieben. */
	.triple--gross .copy--gross { margin-top: 0; }
}

/* --- Konfetti-Band mittig --- */
.konfetti--mitte { align-items: center; padding: clamp(70px, 10vw, 110px) 0; text-align: center; }
.konfetti--mitte .konfetti__text h2 { margin-left: auto; margin-right: auto; max-width: 16ch; }

/* --- Teilnehmerstimmen als wischbare Reihe --- */
.schiene { position: relative; margin-top: 30px; }

.schiene__spur {
	display: flex;
	gap: 16px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	overscroll-behavior-x: contain;
	-webkit-overflow-scrolling: touch;
	padding: 4px 4px 20px;
	/* Rand ausgleichen, damit die erste Karte buendig zum Text sitzt und
	   die letzte nicht am Bildschirmrand klebt. */
	margin: 0 -4px;
	scrollbar-width: none;
}
.schiene__spur::-webkit-scrollbar { display: none; }
.schiene__spur:focus-visible { outline: 2px solid var(--schwarz); outline-offset: 4px; border-radius: var(--r-l); }

.schiene__spur .stimme {
	flex: 0 0 auto;
	width: min(84vw, 330px);
	scroll-snap-align: start;
	margin: 0;
	padding: 26px 24px;
	border: 0;
	border-radius: var(--r-l);
	display: flex;
	flex-direction: column;
	gap: 16px;
}

/* Reihum die drei Corporate-Toene. Dunkle Schrift auf allen dreien —
   die Toene sind hell genug, der Kontrast bleibt deutlich. */
.schiene__spur .stimme--gruen   { background: var(--gruen);   background-image: linear-gradient(var(--gruen), var(--gruen)); }
.schiene__spur .stimme--flieder { background: var(--flieder); background-image: linear-gradient(var(--flieder), var(--flieder)); }
.schiene__spur .stimme--beige   { background: var(--beige);   background-image: linear-gradient(var(--beige), var(--beige)); }

.schiene__spur .stimme--gruen blockquote,
.schiene__spur .stimme--flieder blockquote,
.schiene__spur .stimme--beige blockquote,
.schiene__spur .stimme--gruen figcaption b,
.schiene__spur .stimme--flieder figcaption b,
.schiene__spur .stimme--beige figcaption b { color: var(--schwarz) !important; }

.schiene__spur .stimme--gruen figcaption span,
.schiene__spur .stimme--flieder figcaption span,
.schiene__spur .stimme--beige figcaption span { color: rgba(19,17,16,0.62) !important; }

/* Grosses Anfuehrungszeichen als ruhiger Akzent. */
.schiene__spur .stimme blockquote::before {
	content: '';
	display: block;
	width: 26px; height: 3px;
	margin-bottom: 14px;
	border-radius: var(--r-pill);
	background: rgba(19,17,16,0.28);
}

.schiene__spur .stimme blockquote { margin: 0; font-size: 1.02rem; line-height: 1.55; font-weight: 600; }
.schiene__spur .stimme figcaption { display: flex; flex-direction: column; gap: 1px; margin-top: auto; }
.schiene__spur .stimme figcaption b { font-size: 0.92rem; font-weight: 800; }
.schiene__spur .stimme figcaption span { font-size: 0.8rem; color: var(--gedimmt); }

/* Die erste, ausfuehrlichste Stimme traegt den Abschnitt an. */
.schiene__spur .stimme--anker {
	width: min(88vw, 430px);
	background: var(--schwarz);
	background-image: linear-gradient(var(--schwarz), var(--schwarz));
}
.schiene__spur .stimme--anker blockquote::before { background: var(--gruen); width: 34px; }
.schiene__spur .stimme--anker blockquote { color: var(--weiss) !important; font-size: 1.14rem; }
.schiene__spur .stimme--anker figcaption b { color: var(--weiss) !important; }
.schiene__spur .stimme--anker figcaption span { color: rgba(255,255,255,0.62) !important; }

/* --- Pfeile --- */
.schiene__pfeil {
	position: absolute;
	top: calc(50% - 24px);
	z-index: 3;
	width: 48px; height: 48px;
	display: flex; align-items: center; justify-content: center;
	padding: 0;
	border: 1px solid var(--linie);
	border-radius: 50%;
	background: var(--weiss);
	color: var(--schwarz);
	cursor: pointer;
	box-shadow: 0 8px 22px -12px rgba(19,17,16,0.7);
	transition: background 0.18s ease, transform 0.15s ease, opacity 0.2s ease;
}
.schiene__pfeil svg { width: 20px; height: 20px; }
.schiene__pfeil:hover { background: var(--flieder); }
.schiene__pfeil:active { transform: scale(0.94); }
.schiene__pfeil:focus-visible { outline: 2px solid var(--schwarz); outline-offset: 3px; }
.schiene__pfeil[hidden] { display: none; }
.schiene__pfeil--links  { left: -10px; }
.schiene__pfeil--rechts { right: -10px; }

/* --- Fortschritt --- */
.schiene__balken { height: 3px; border-radius: var(--r-pill); background: rgba(19,17,16,0.10); overflow: hidden; }
.schiene__balken span { display: block; height: 100%; width: 20%; border-radius: var(--r-pill);
	background: var(--gruen); transition: width 0.2s ease, transform 0.2s ease; transform-origin: left center; }

@media (min-width: 1180px) {
	.schiene__pfeil--links  { left: -24px; }
	.schiene__pfeil--rechts { right: -24px; }
}

@media (prefers-reduced-motion: reduce) {
	.schiene__spur { scroll-behavior: auto; }
	.schiene__pfeil, .schiene__balken span { transition: none; }
}

/* =====================================================================
   Seminar-Detailseite (v0.13.0)
   Links Inhalt, rechts eine mitscrollende Buchungsbox.
   ===================================================================== */

.wbs-seminar { background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); }

/* --- Kopf --- */
.sem-kopf { position: relative; overflow: hidden;
	padding: clamp(110px, 15vw, 176px) 0 clamp(38px, 5vw, 64px); }

/* --- Kopf mit Seminarfoto --- */
.sem-kopf--foto { background: var(--schwarz); }
.sem-kopfbild { position: absolute; inset: 0; z-index: 0; }
.sem-kopfbild img { width: 100%; height: 100%; object-fit: cover; object-position: center 38%; }

/* Der Schleier haelt die Schrift lesbar und laesst rechts das Bild offen. */
.sem-kopf--foto::after {
	content: ''; position: absolute; inset: 0; z-index: 1; pointer-events: none;
	background:
		linear-gradient(100deg, rgba(19,17,16,0.95) 0%, rgba(19,17,16,0.86) 32%, rgba(19,17,16,0.48) 68%, rgba(19,17,16,0.58) 100%),
		linear-gradient(to bottom, rgba(19,17,16,0.55) 0%, rgba(19,17,16,0) 26%);
}

.sem-kopf--foto .container { position: relative; z-index: 2; }
.wbs-body .sem-kopf--foto h1 { color: var(--weiss) !important; text-shadow: 0 2px 30px rgba(19,17,16,0.6); }
.sem-kopf--foto .sem-kurz, .sem-kopf--foto .sem-kurz p { color: rgba(255,255,255,0.84) !important; }
.wbs-body .sem-kopf--foto .sem-pfad a { color: rgba(255,255,255,0.68) !important; }
.wbs-body .sem-kopf--foto .sem-pfad a:hover { color: var(--weiss) !important; }
.sem-kopf--foto .sem-pfad, .sem-kopf--foto .sem-pfad [aria-current] { color: rgba(255,255,255,0.9) !important; }
/* Die Kategorie-Pillen stehen hier auf dem Foto — heller Fuellton weg,
   sonst steht weisse Schrift auf hellem Grund. */
.sem-kopf--foto .tag {
	background: rgba(255,255,255,0.14) !important;
	background-image: none !important;
	color: var(--weiss) !important;
	border-color: rgba(255,255,255,0.5) !important;
	backdrop-filter: blur(3px);
}

/* --- Kopf ohne Foto: Haarlinien und Verlauf --- */
.sem-kopf--linien {
	background:
		radial-gradient(60% 80% at 88% 12%, rgba(207,198,167,0.42), transparent 70%),
		linear-gradient(170deg, rgba(186,170,205,0.30) 0%, rgba(153,201,167,0.16) 42%, rgba(250,249,246,0) 78%);
}
.sem-linien { position: absolute; right: -6%; top: -18%; width: 78%; max-width: 900px;
	pointer-events: none; opacity: 0.85; z-index: 0; }
.sem-kopf--linien .container { position: relative; z-index: 1; }

/* --- Markenlogo oben links im Bild --- */
.sem-kopf__logo {
	position: absolute;
	top: clamp(74px, 9vw, 104px);
	left: 22px;
	z-index: 3;
	display: inline-flex; align-items: center; justify-content: center;
	width: max-content; max-width: calc(100% - 44px);
	min-height: 44px; padding: 9px 15px;
	background: var(--weiss); border-radius: var(--r-s);
	box-shadow: 0 6px 18px -8px rgba(19,17,16,0.5);
}
.sem-kopf__logo img { display: block; flex: none;
	height: 26px !important; width: auto !important;
	max-height: none !important; max-width: 170px !important; object-fit: contain; }

@media (min-width: 1140px) {
	.sem-kopf__logo { left: calc(50% - 550px + 22px); }
}
.sem-pfad { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 20px;
	font-size: 0.78rem; color: var(--gedimmt); }
.wbs-body .sem-pfad a { color: var(--gedimmt); text-decoration: none; }
.wbs-body .sem-pfad a:hover { color: var(--schwarz); text-decoration: underline; text-underline-offset: 3px; }
.sem-pfad [aria-current] { color: var(--schwarz); font-weight: 700; }

.sem-marken { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 16px; }
.sem-marken .card-art { position: static; }

.wbs-body .sem-kopf h1 { margin: 0 0 16px; font-weight: 800; letter-spacing: -0.03em;
	font-size: clamp(2.3rem, 6.4vw, 4rem); line-height: 1.04; max-width: 20ch; }
.sem-kurz { max-width: 62ch; font-size: 1.08rem; line-height: 1.6; color: rgba(19,17,16,0.78); }
.sem-kurz p { margin: 0 0 10px; }

/* --- Layout --- */
.sem-haupt { padding-top: 8px; }
.sem-layout { display: grid; grid-template-columns: 1fr; gap: 28px; align-items: start; }

.sem-bild { position: relative; margin: 0 0 30px; overflow: hidden; border-radius: var(--r-l); }
.sem-bild img { display: block; width: 100%; height: auto; }

.sem-text { max-width: 68ch; font-size: 1.02rem; line-height: 1.68; color: rgba(19,17,16,0.82); }
.sem-text p { margin: 0 0 16px; }
.wbs-body .sem-text h2, .wbs-body .sem-text h3 { margin: 30px 0 10px; font-size: 1.24rem; font-weight: 800; letter-spacing: -0.01em; }
.sem-text ul, .sem-text ol { margin: 0 0 16px; padding-left: 1.3em; }
.sem-text li { margin-bottom: 6px; }

.sem-block { margin-top: 44px; padding-top: 30px; border-top: 1px solid var(--linie); }
.wbs-body .sem-h2 { margin: 0 0 18px; font-size: clamp(1.3rem, 3vw, 1.7rem); font-weight: 800; letter-spacing: -0.02em; }

/* --- Trainer --- */
.sem-trainer { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 16px; }
.trainer-karte { margin: 0; background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	border: 1px solid var(--linie); border-radius: var(--r-l); overflow: hidden; }
.trainer-karte img { display: block; width: 100%; aspect-ratio: 1 / 1; object-fit: cover; }
.trainer-karte__ph { display: flex; align-items: center; justify-content: center; aspect-ratio: 1 / 1;
	background: var(--flieder); color: var(--schwarz); font-size: 2.6rem; font-weight: 800; }
.trainer-karte figcaption { display: flex; flex-direction: column; gap: 2px; padding: 14px 16px 16px; }
.trainer-karte figcaption b { font-size: 0.96rem; font-weight: 800; }
.trainer-karte figcaption span { font-size: 0.8rem; color: var(--gedimmt); }

/* --- Anfahrt --- */
.sem-adresse { margin: 0 0 16px; font-size: 1rem; line-height: 1.55; }

.sem-anfahrt { padding-top: clamp(40px, 6vw, 66px); }
.sem-anfahrt .sem-h2 { margin-bottom: 10px; }
.sem-karte { position: relative; aspect-ratio: 16 / 9; border-radius: var(--r-l); overflow: hidden;
	background: var(--weiss); border: 1px solid var(--linie); }
.sem-karte__start { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
	width: 100%; height: 100%; padding: 26px; border: 0; cursor: pointer; text-align: center;
	background: repeating-linear-gradient(45deg, rgba(153,201,167,0.10) 0 14px, rgba(186,170,205,0.10) 14px 28px);
	font: inherit; color: var(--schwarz); }
.sem-karte__titel { font-weight: 800; font-size: 1.02rem; padding: 12px 26px; border-radius: var(--r-pill);
	background: var(--schwarz); color: var(--weiss); }
.sem-karte__hinweis { max-width: 46ch; font-size: 0.8rem; line-height: 1.5; color: var(--gedimmt); }
.sem-karte.is-geladen { border-color: transparent; }
.sem-karte__link { margin: 12px 0 0; font-size: 0.86rem; }

/* In der schmaleren linken Spalte duerfen die Terminkarten nicht auf
   die zwei Spalten der Uebersicht gezwungen werden — sonst werden sie
   zu schmal fuer Datum und Preis. */
.sem-termine { margin-top: 4px; }
.wbs-body .sem-termine.cards--list { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }

/* --- Buchungsbox --- */
.sem-box { padding: 24px 22px 22px; border-radius: var(--r-l);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	border: 1px solid var(--linie);
	box-shadow: 0 1px 2px rgba(19,17,16,0.04), 0 24px 48px -38px rgba(19,17,16,0.5); }

.sem-box__status { margin: 0 0 16px; padding: 9px 14px; border-radius: var(--r-pill);
	background: var(--gruen); color: var(--schwarz); font-size: 0.84rem; font-weight: 800; text-align: center; }
.sem-box__status--voll { background: var(--schwarz); color: var(--weiss) !important; }

.wbs-eck { list-style: none; margin: 0 0 20px; padding: 0; display: flex; flex-direction: column; gap: 15px; }
.wbs-eck li { display: flex; align-items: center; gap: 11px; }
.wbs-eck svg { width: 19px; height: 19px; flex: none; stroke: var(--schwarz);
	fill: none; stroke-linecap: round; stroke-linejoin: round; opacity: 0.85; }
.wbs-eck__text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.wbs-eck__text b { font-size: 1.02rem; font-weight: 800; line-height: 1.35; }
/* Nur fuer Screenreader — im Bild sagen die Icons genug. */
.wbs-eck__label { position: absolute; width: 1px; height: 1px; overflow: hidden;
	clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }

.sem-preis { padding: 18px 0; border-top: 1px solid var(--linie); border-bottom: 1px solid var(--linie);
	display: flex; flex-direction: column; gap: 4px; margin-bottom: 20px; }
.sem-preis__zahl { font-size: 1.7rem; font-weight: 800; letter-spacing: -0.02em; }
.sem-preis__zahl .woocommerce-price-suffix, .sem-preis__zahl small { font-size: 0.76rem; font-weight: 600; color: var(--gedimmt); }
.sem-preis__punkte { font-size: 0.88rem; color: var(--gedimmt); }

.sem-box__fuss { margin: 16px 0 0; font-size: 0.78rem; text-transform: uppercase;
	letter-spacing: 0.1em; color: var(--gedimmt); text-align: center; }

/* --- WooCommerce-Formular in unserem Stil --- */
.sem-kauf form.cart { display: flex; flex-wrap: wrap; align-items: stretch; gap: 10px; margin: 0; }
.sem-kauf .quantity { flex: 0 0 auto; }

.sem-kauf .quantity input[type="number"],
.sem-kauf input.qty {
	width: 74px !important; min-width: 0 !important; max-width: none !important;
	height: 54px !important; min-height: 54px !important;
	padding: 0 !important; margin: 0 !important;
	border: 1px solid var(--linie) !important; border-radius: var(--r-m) !important;
	background: var(--weiss) !important; box-shadow: none !important;
	font: inherit; font-weight: 800; font-size: 1rem; text-align: center; color: var(--schwarz);
	-moz-appearance: textfield;
}
.sem-kauf input.qty::-webkit-outer-spin-button,
.sem-kauf input.qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

.wbs-body .sem-kauf button.single_add_to_cart_button,
.wbs-body .sem-kauf .single_add_to_cart_button {
	flex: 1 1 160px;
	min-height: 54px;
	padding: 0 24px !important;
	border: 0 !important;
	border-radius: 0 !important;
	background: var(--gruen) !important;
	color: var(--schwarz) !important;
	font: inherit;
	font-weight: 800 !important;
	font-size: 0.98rem;
	cursor: pointer;
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%);
	transition: background 0.2s ease;
}
.wbs-body .sem-kauf button.single_add_to_cart_button:hover { background: var(--flieder) !important; }
.sem-kauf .stock { margin: 12px 0 0; font-size: 0.84rem; color: var(--gedimmt); }
.sem-kauf .stock.out-of-stock { color: var(--schwarz); font-weight: 700; }

/* --- Desktop: zwei Spalten, Box laeuft mit --- */
@media (min-width: 1000px) {
	.sem-layout { grid-template-columns: minmax(0, 1fr) 356px; gap: 46px; }
	.sem-buchung { position: sticky; top: 112px; }
	.sem-kopf h1 { max-width: 22ch; }
}

@media (prefers-reduced-motion: reduce) {
	.wbs-body .sem-kauf button.single_add_to_cart_button { transition: none; }
}

/* --- Anfahrt: die Karte darf die volle Breite nutzen --- */
@media (min-width: 900px) {
	.sem-anfahrt .sem-karte { aspect-ratio: 21 / 8; }
}

/* --- Riesenwort hinter „Ähnliche Seminare" --- */
.sem-aehnlich { position: relative; overflow: hidden; }
.sem-aehnlich .giant { top: 8px; opacity: 0.9; }
.sem-aehnlich .container { position: relative; z-index: 1; }

/* --- Hülle unter der schrägen Kante des Schluss-Abschnitts ---
   Die Schräge schneidet oben ein Dreieck aus dem schwarzen Block. Ohne
   Hülle blitzt dort der Seitenhintergrund durch statt der Farbe des
   Abschnitts darüber. */
.cta-huelle { background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); }
.cta-huelle--weiss { background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss)); }

/* Mehr Luft nach oben: der Text saß fast auf der Schnittkante. Gilt
   fuer alle Seiten, nicht nur die mit Huelle. */
.wbs-body .cta { padding-top: calc(7vw + clamp(56px, 7vw, 92px)); }

/* --- Inhaltsblöcke aus dem Seminar-Tab --- */
.sem-liste .sem-text ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.sem-liste .sem-text li { position: relative; margin: 0; padding-left: 30px; line-height: 1.55; }
.sem-liste .sem-text li::before {
	content: ''; position: absolute; left: 0; top: 0.52em;
	width: 16px; height: 3px; border-radius: var(--r-pill); background: var(--gruen);
}
.sem-liste--inhalte .sem-text li::before { background: var(--flieder); }

.sem-orga { display: grid; gap: 30px; }
.sem-orga__teil .sem-h2 { font-size: 1.2rem; }

.sem-verpflegung { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.sem-verpflegung li { display: flex; align-items: center; gap: 10px; font-weight: 700; }
.sem-verpflegung svg { width: 18px; height: 18px; flex: none; color: #4E8F63; }
.sem-verpflegung__note { margin: 10px 0 0; font-size: 0.82rem; color: var(--gedimmt); }

/* Rechtlicher Hinweis zu Veranstalter und Rechnungsstellung. */
.sem-veranstalter {
	margin: 34px 0 0;
	padding: 16px 18px;
	border-left: 3px solid var(--beige);
	background: var(--weiss);
	background-image: linear-gradient(var(--weiss), var(--weiss));
	border-radius: 0 var(--r-s) var(--r-s) 0;
	font-size: 0.88rem;
	line-height: 1.55;
	color: rgba(19,17,16,0.75);
}

@media (min-width: 640px) {
	.sem-orga { grid-template-columns: 1.4fr 1fr; gap: 34px; }
	/* Nur ein Block? Dann die ganze Breite, sonst bricht die Liste
	   viel zu früh um und rechts bleibt eine leere Spalte. */
	.sem-orga--einzel { grid-template-columns: minmax(0, 1fr); }
	.sem-orga--einzel .sem-text { max-width: 78ch; }
}

/* =====================================================================
   Seitenkopf und Seitenfuß (v0.16.0)
   ===================================================================== */

.wbs-skip { position: absolute; left: -9999px; top: 0; z-index: 9200; padding: 12px 20px;
	background: var(--schwarz); color: var(--weiss); font-weight: 800; }
.wbs-skip:focus { left: 12px; top: 12px; }

/* =====================================================================
   Elementor-Kopf und -Fuß auf unseren Seiten stilllegen
   ---------------------------------------------------------------------
   Elementor gibt seine Theme-Builder-Vorlagen für Kopf und Fuß über
   wp_body_open bzw. wp_footer aus — also genau die zwei Haken, die
   jede WordPress-Seite setzen muss. Unsere Seiten bekommen dadurch
   zusätzlich zu unserem Kopf noch den alten Elementor-Kopf: eine weiße
   Leiste mit position: fixed und z-index: 99, die sich über unsere
   legt. Darin stecken auch Elementors eigenes Warenkorb-Widget und die
   Suchleiste — das ist der weiße Kasten, der den Warenkorb verdeckt.

   Die Vorlagen selbst bleiben unangetastet; auf reinen
   Elementor-Seiten (404, alte Seiten) erscheinen Kopf und Fuß weiter
   ganz normal. Sauber wäre, in Elementor → Vorlagen → Theme Builder
   die Anzeigebedingungen von Kopf und Fuß zu entfernen — dann fällt
   auch das überflüssige HTML weg. Diese Regel ist der Gurt dazu.
   ===================================================================== */
body.wbs-body .elementor-location-header,
body.wbs-body .elementor-location-footer,
body.wbs-body .elementor-menu-cart__wrapper,
body.wbs-body .elementor-search-form,
body.wbs-body .elementor-widget-search-form,
body.wbs-body .elementor-widget-woocommerce-menu-cart { display: none !important; }

/* =====================================================================
   „Zum Inhalt springen" des Barrierefreiheits-Plugins
   ---------------------------------------------------------------------
   Auf der Seite läuft Elementors Barrierefreiheits-Plugin (Ally, im
   Code „ea11y", Ordner pojo-accessibility). Es bringt eine eigene
   Sprungfunktion mit: einen weißen, abgerundeten Kasten mit Suchfeld,
   der oben über der Seite aufgeht und dort den Warenkorb verdeckt.

   Dieses Markup steht nicht im Quelltext, sondern wird erst von
   JavaScript gebaut. Deshalb war es weder in der Seitenquelle noch über
   die üblichen Klassennamen zu finden — und deshalb liefen die
   bisherigen Versuche ins Leere.

   Unser eigener Sprunglink (.wbs-skip, ganz oben in open.php) macht
   dasselbe. Doppelt braucht es das nicht, deshalb bleibt hier die
   Fassung des Plugins außen vor. Der Barrierefreiheits-Knopf selbst
   wird bewusst NICHT versteckt.

   Verlässlicher ist der Schalter im Plugin selbst (Einstellungen des
   Barrierefreiheits-Plugins → „Skip to Content" abschalten). Liegt der
   Kasten in einem eigenen Rahmen (iframe), greift CSS von außen nicht.
   ===================================================================== */
body.wbs-body .ea11y-skip-to-content-backdrop,
body.wbs-body [class*="ea11y-skip-to-content"],
body.wbs-body [id*="ea11y-skip-to-content"] { display: none !important; }

/* Der Schalter fürs Handy-Menü bleibt bedienbar, aber unsichtbar. */
.wbs-menue__toggle { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; pointer-events: none; }

/* --- Kopfleiste --- */
.wbs-kopf {
	position: sticky;
	top: 0;
	/*
	 * Bewusst hoch. Der Kopf bildet einen eigenen Stapelbereich — was
	 * darin liegt, kann nie höher steigen als dieser Wert. Das
	 * aufgeklappte Untermenü ragt aber über die Kopfleiste hinaus und
	 * muss dort über dem Seitenabschnitt liegen, egal welchen Wert der
	 * mitbringt. Staffelung: Kopf 100, Mengendialog 120, Sprunglink 200.
	 */
	z-index: 100;
	background: var(--weiss);
	background-image: linear-gradient(var(--weiss), var(--weiss));
	transition: box-shadow 0.2s ease;
}
.wbs-kopf.is-gescrollt { box-shadow: 0 10px 30px -22px rgba(19,17,16,0.75); }

/* Nichts auf diesem Weg darf überstehenden Inhalt abschneiden, sonst
   endet das aufgeklappte Untermenü an der Unterkante der Kopfleiste. */
.wbs-kopf,
.wbs-kopf__leiste,
.wbs-nav,
.wbs-nav__liste,
.wbs-nav__punkt { overflow: visible !important; }

.wbs-kopf__leiste {
	max-width: 1240px;
	margin: 0 auto;
	padding: 0 22px;
	min-height: 74px;
	display: flex;
	align-items: center;
	gap: 22px;
}

/* Der Farbstrich am unteren Rand — Handschrift der Marke. */
.wbs-kopf__strich {
	display: block;
	height: 2px;
	background: linear-gradient(90deg, var(--gruen) 0%, var(--flieder) 46%, var(--beige) 100%);
	opacity: 0.85;
}

.wbs-kopf__logo { display: flex; align-items: center; flex: none; text-decoration: none; }
.wbs-kopf__logo img { display: block; height: 34px !important; width: auto !important; max-width: 230px !important; }
.wbs-body .wbs-kopf__wort { font-weight: 800; font-size: 1.02rem; letter-spacing: 0.02em; color: var(--schwarz); }
.wbs-kopf__wort em { font-style: normal; color: var(--gruen); }

/* --- Hauptmenü (Desktop) --- */
.wbs-nav { display: none; margin-right: auto; }
.wbs-nav__liste { list-style: none; display: flex; align-items: center; gap: 4px; margin: 0; padding: 0; }
.wbs-nav__punkt { position: relative; }

.wbs-body .wbs-nav__link {
	display: inline-flex; align-items: center; gap: 5px;
	padding: 10px 13px;
	font-size: 0.93rem; font-weight: 700; color: var(--schwarz); text-decoration: none;
	border-radius: var(--r-s);
}
.wbs-nav__link span { position: relative; }

/* Unterstreichung im Markenton — wächst beim Überfahren mit. */
.wbs-nav__link span::after {
	content: ''; position: absolute; left: 0; right: 0; bottom: -5px; height: 3px;
	border-radius: var(--r-pill); background: var(--gruen);
	transform: scaleX(0); transform-origin: left center;
	transition: transform 0.22s cubic-bezier(0.22,0.8,0.3,1);
}
.wbs-nav__link:hover span::after,
.wbs-nav__link:focus-visible span::after { transform: scaleX(1); }
.wbs-nav__link.is-aktiv span::after { transform: scaleX(1); background: var(--flieder); }



/* --- Konto und Warenkorb --- */
.wbs-kopf__aktionen { display: flex; align-items: center; gap: 8px; margin-left: auto; }

.wbs-body .wbs-konto,
.wbs-body .wbs-korb {
	display: inline-flex; align-items: center; gap: 8px;
	min-height: 42px; padding: 0 15px;
	border-radius: var(--r-pill);
	font-size: 0.88rem; font-weight: 700; text-decoration: none;
	color: var(--schwarz);
	transition: background 0.18s ease, color 0.18s ease;
}
.wbs-konto svg, .wbs-korb svg { width: 19px; height: 19px; flex: none; }
.wbs-body .wbs-konto { border: 1px solid var(--linie); }
.wbs-body .wbs-konto:hover { background: var(--offwhite); }
.wbs-konto__text { display: none; }

.wbs-body .wbs-korb { background: var(--schwarz); color: var(--weiss); position: relative; }
.wbs-body .wbs-korb:hover { background: var(--flieder); color: var(--schwarz); }
/* Betrag erst ab Tablet — auf dem Handy zählt die Anzahl. */
.wbs-korb__summe { display: none; white-space: nowrap; }
.wbs-korb__summe .woocommerce-Price-amount { font-size: inherit; font-weight: 800; }
.wbs-korb__zahl {
	min-width: 20px; height: 20px; padding: 0 6px;
	border-radius: var(--r-pill);
	background: var(--gruen); color: var(--schwarz);
	font-size: 0.72rem; font-weight: 800; line-height: 20px; text-align: center;
}

/* =====================================================================
   Schwebender Menüknopf (Handy und Tablet)
   ---------------------------------------------------------------------
   Sitzt unten rechts im Daumenbereich und bleibt beim Scrollen
   erreichbar. Während des Scrollens wird er durchsichtig, damit er die
   Inhalte nicht verdeckt; beim Anhalten kommt er zurück.

   Der Filter auf der Seminarseite sitzt unten links — die beiden
   kommen sich nicht in die Quere.
   ===================================================================== */
.wbs-menue-fab {
	position: fixed;
	right: 16px;
	bottom: calc(16px + env(safe-area-inset-bottom, 0px));
	z-index: 8995;
	display: inline-flex;
	align-items: center;
	gap: 9px;
	min-height: 52px;
	padding: 0 20px;
	border-radius: var(--r-pill);
	background: var(--gruen);
	color: var(--schwarz);
	font-weight: 800;
	font-size: 0.92rem;
	cursor: pointer;
	user-select: none;
	-webkit-user-select: none;
	border: 1px solid rgba(255,255,255,0.3);
	box-shadow:
		inset 0 1px 0 rgba(255,255,255,0.55),
		0 12px 28px -10px rgba(19,17,16,0.55);
	transition: opacity 0.25s ease, transform 0.25s ease, background 0.2s ease;
}
.wbs-menue-fab svg { width: 21px; height: 21px; flex: none; }
.wbs-menue-fab__zu { display: none; }
.wbs-menue-fab:active { transform: scale(0.97); }

/* Beim Scrollen zurückhaltend, beim Anhalten wieder da. kopf.js setzt
   die Klasse; ohne JavaScript bleibt der Knopf einfach immer sichtbar. */
.wbs-menue-fab.is-scrollt {
	opacity: 0.4;
	background: rgba(250,249,246,0.35);
	-webkit-backdrop-filter: blur(14px);
	backdrop-filter: blur(14px);
}

/* Ist das Menü offen, wird aus dem Knopf ein Schließen-Knopf. */
/* Geöffnet bleibt der Knopf im Markenton, nur etwas zurückgenommen —
   schwarz wirkte wie ein Fehler, besonders kurz nach einem Seitenwechsel. */
.wbs-menue__toggle:checked ~ .wbs-menue-fab {
	background: rgba(153,201,167,0.62);
	-webkit-backdrop-filter: blur(20px) saturate(1.8);
	backdrop-filter: blur(20px) saturate(1.8);
	color: var(--schwarz);
	opacity: 1;
}
.wbs-menue__toggle:checked ~ .wbs-menue-fab .wbs-menue-fab__auf { display: none; }
.wbs-menue__toggle:checked ~ .wbs-menue-fab .wbs-menue-fab__zu { display: block; }
.wbs-menue__toggle:checked ~ .wbs-menue-fab .wbs-menue-fab__wort { display: none; }
.wbs-menue__toggle:focus-visible ~ .wbs-menue-fab { outline: 3px solid var(--schwarz); outline-offset: 3px; }

/* --- Burger (nicht mehr im Einsatz, Regeln bleiben für Altstände) --- */
.wbs-burger {
	display: none;
	align-items: center; justify-content: center;
	width: 44px; height: 44px; flex: none;
	border-radius: var(--r-s); cursor: pointer; color: var(--schwarz);
}
.wbs-burger__striche { display: block; width: 22px; height: 15px; position: relative; }
.wbs-burger__striche i {
	position: absolute; left: 0; right: 0; height: 2.4px; border-radius: 2px;
	background: currentColor; transition: transform 0.24s ease, opacity 0.18s ease;
}
.wbs-burger__striche i:nth-child(1) { top: 0; }
.wbs-burger__striche i:nth-child(2) { top: 6.3px; }
.wbs-burger__striche i:nth-child(3) { top: 12.6px; }
.wbs-menue__toggle:checked ~ .wbs-kopf .wbs-burger__striche i:nth-child(1) { transform: translateY(6.3px) rotate(45deg); }
.wbs-menue__toggle:checked ~ .wbs-kopf .wbs-burger__striche i:nth-child(2) { opacity: 0; }
.wbs-menue__toggle:checked ~ .wbs-kopf .wbs-burger__striche i:nth-child(3) { transform: translateY(-6.3px) rotate(-45deg); }
.wbs-menue__toggle:focus-visible ~ .wbs-kopf .wbs-burger { outline: 2px solid var(--schwarz); outline-offset: 2px; }

/* --- Handy-Menü --- */
/* =====================================================================
   Handy-Menü: kompakte Tafel, die aus dem Knopf hochfährt
   ---------------------------------------------------------------------
   Kein Vollbild mehr. Die Tafel sitzt über dem Knopf unten rechts, ist
   nur so breit wie ihr längster Eintrag und lässt den Blick auf die
   Seite frei. Die Einträge steigen leicht versetzt nacheinander auf,
   von unten nach oben — dorthin, wo der Daumen ohnehin liegt.
   ===================================================================== */
.wbs-menue {
	position: fixed;
	inset: 0;
	z-index: 8990;
	visibility: hidden;
}

.wbs-menue__schleier {
	position: absolute;
	inset: 0;
	background: rgba(19,17,16,0.32);
	-webkit-backdrop-filter: blur(3px);
	backdrop-filter: blur(3px);
	opacity: 0;
	transition: opacity 0.25s ease;
	cursor: pointer;
}

.wbs-menue__tafel {
	position: absolute;
	right: 16px;
	bottom: calc(80px + env(safe-area-inset-bottom, 0px));
	width: max-content;
	max-width: min(320px, calc(100vw - 32px));
	padding: 10px;
	border-radius: 26px;
	/*
	 * Glasoptik: viel Transparenz, kräftige Unschärfe und etwas mehr
	 * Farbsättigung — dadurch nimmt das Glas die Farben der Seite
	 * dahinter auf, statt sie nur milchig zu überdecken.
	 *
	 * Der Rand ist kein durchgehender weißer Strich mehr, sondern ein
	 * Lichtsaum: oben hell, unten dunkel. Das lässt die Fläche gewölbt
	 * wirken, wie eine Scheibe mit Kante.
	 */
	border: 1px solid rgba(255,255,255,0.28);
	/* Oben etwas heller als unten — so fällt Licht auf eine Scheibe.
	   Gibt zugleich genug Grundhelligkeit, damit die schwarze Schrift
	   auch über dunklen Bildern sicher lesbar bleibt. */
	background:
		linear-gradient(160deg, rgba(255,255,255,0.62) 0%, rgba(250,249,246,0.44) 55%, rgba(250,249,246,0.5) 100%);
	-webkit-backdrop-filter: blur(26px) saturate(1.9);
	backdrop-filter: blur(26px) saturate(1.9);
	box-shadow:
		inset 0 1px 0 rgba(255,255,255,0.65),
		inset 0 -1px 0 rgba(19,17,16,0.06),
		inset 0 0 22px rgba(255,255,255,0.22),
		0 26px 54px -22px rgba(19,17,16,0.42);
	transform-origin: bottom right;
	transform: translateY(14px) scale(0.94);
	opacity: 0;
	transition: transform 0.28s cubic-bezier(0.22,0.8,0.3,1), opacity 0.22s ease;
}

.wbs-menue__liste { list-style: none; margin: 0; padding: 0; }
.wbs-menue__liste li {
	/* Jede Zeile kommt ein kleines Stück später — von unten nach oben. */
	opacity: 0;
	transform: translateY(10px);
	transition: opacity 0.2s ease, transform 0.28s cubic-bezier(0.22,0.8,0.3,1);
}

.wbs-body .wbs-menue__tafel a {
	display: block;
	padding: 12px 16px;
	border-radius: 14px;
	font-size: 1rem;
	font-weight: 700;
	line-height: 1.25;
	color: var(--schwarz);
	text-decoration: none;
	text-align: right;
	white-space: nowrap;
}
.wbs-body .wbs-menue__tafel a:active { background: rgba(19,17,16,0.06); }
.wbs-body .wbs-menue__liste a.is-aktiv { background: var(--gruen); }

.wbs-menue__unter a { font-size: 0.9rem !important; font-weight: 600 !important; opacity: 0.75; }

.wbs-menue__fuss {
	margin-top: 6px;
	padding-top: 8px;
	border-top: 1px solid rgba(19,17,16,0.08);
	opacity: 0;
	transform: translateY(10px);
	transition: opacity 0.2s ease, transform 0.28s cubic-bezier(0.22,0.8,0.3,1);
}
.wbs-body .wbs-menue__fuss a { font-size: 0.86rem !important; font-weight: 600 !important; color: var(--gedimmt) !important; }

/* --- Geöffnet --- */
.wbs-menue__toggle:checked ~ .wbs-menue { visibility: visible; }
.wbs-menue__toggle:checked ~ .wbs-menue .wbs-menue__schleier { opacity: 1; }
.wbs-menue__toggle:checked ~ .wbs-menue .wbs-menue__tafel { transform: none; opacity: 1; }
.wbs-menue__toggle:checked ~ .wbs-menue .wbs-menue__liste li,
.wbs-menue__toggle:checked ~ .wbs-menue .wbs-menue__fuss {
	opacity: 1;
	transform: none;
	/* --i zählt die Zeilen; die unterste startet zuerst. */
	transition-delay: calc(var(--i, 1) * 22ms);
}

body.wbs-menue-offen { overflow: hidden; }
body:has(.wbs-menue__toggle:checked) { overflow: hidden; }

/* --- Ab Tablet: Menü in die Leiste, Burger weg --- */
@media (min-width: 1024px) {
	.wbs-nav { display: block; }
	.wbs-burger { display: none; }
	.wbs-menue-fab { display: none; }
	.wbs-menue { display: none; }
	.wbs-konto__text { display: inline; }
	.wbs-korb__summe { display: inline; }
	.wbs-kopf__leiste { min-height: 82px; gap: 30px; }
}

/* =====================================================================
   Seitenfuß
   ===================================================================== */

.wbs-fuss { position: relative; overflow: hidden; background: var(--schwarz); color: var(--weiss); }

/* Bewusst schwach: der Schriftzug soll Tiefe geben, nicht mit den
   Links konkurrieren. */
.wbs-fuss__riese {
	position: absolute; left: -2%; bottom: -0.3em;
	font-size: clamp(6rem, 22vw, 17rem); font-weight: 800; line-height: 0.8;
	color: transparent; -webkit-text-stroke: 1.5px rgba(255,255,255,0.055);
	text-transform: uppercase; pointer-events: none; user-select: none;
}

.wbs-fuss__oben {
	position: relative; z-index: 1;
	display: grid; gap: 38px;
	padding-top: clamp(56px, 8vw, 86px);
	padding-bottom: clamp(40px, 6vw, 64px);
}

/* max-height ausdrücklich aufheben: im kritischen CSS im Seitenkopf
   steht eine Deckelung für alle Bilder im Fuß (gegen riesige Logos,
   solange die Stylesheets noch laden). Zusammen mit der festen Breite
   hier wurde das Logo dadurch auf 200 × 44 gequetscht — es ist aber
   768 × 307 groß, also deutlich höher. object-fit: contain ist der
   Gurt, falls von außen doch einmal eine Höhe gesetzt wird. */
.wbs-fuss__logo { display: block; width: 200px !important; height: auto !important;
	max-width: 62% !important; max-height: none !important; object-fit: contain;
	margin-bottom: 20px; }
.wbs-body .wbs-fuss__wort { display: block; margin-bottom: 20px; font-size: 1.4rem; font-weight: 800; letter-spacing: 0.04em; color: var(--weiss); }

.wbs-fuss__adresse { font-style: normal; font-size: 0.94rem; line-height: 1.62; color: rgba(255,255,255,0.72) !important; }
.wbs-fuss__adresse b { display: block; margin-bottom: 3px; color: var(--weiss) !important; font-weight: 800; }

.wbs-body .wbs-fuss__titel {
	margin: 0 0 14px; font-size: 0.74rem; font-weight: 800;
	letter-spacing: 0.18em; text-transform: uppercase; color: var(--gruen) !important;
}
.wbs-fuss__spalte ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.wbs-body .wbs-fuss__spalte a {
	display: inline-flex; align-items: center; gap: 9px;
	font-size: 0.94rem; color: rgba(255,255,255,0.78) !important; text-decoration: none;
}
.wbs-body .wbs-fuss__spalte a:hover { color: var(--weiss) !important; text-decoration: underline; text-underline-offset: 4px; }
.wbs-fuss__spalte svg { width: 17px; height: 17px; flex: none; opacity: 0.7; }

.wbs-fuss__unten { position: relative; z-index: 1; border-top: 1px solid rgba(255,255,255,0.12); }
.wbs-fuss__unten p { margin: 0; padding: 20px 0; font-size: 0.82rem; color: rgba(255,255,255,0.55) !important; }

/* --- Markenband --- */
.wbs-marken { padding: clamp(40px, 6vw, 64px) 0; background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss)); }
.wbs-body .wbs-marken__titel {
	margin: 0 0 26px; font-size: 0.74rem; font-weight: 800;
	letter-spacing: 0.18em; text-transform: uppercase; color: var(--gedimmt); text-align: center;
}
.wbs-marken__reihe {
	list-style: none; margin: 0; padding: 0;
	display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
	gap: clamp(26px, 5vw, 64px);
}
.wbs-marken__reihe img {
	display: block; height: 26px !important; width: auto !important; max-width: 150px !important;
	opacity: 0.55; filter: grayscale(1);
	transition: opacity 0.22s ease, filter 0.22s ease;
}
.wbs-marken__reihe img:hover { opacity: 1; filter: none; }

@media (min-width: 700px) {
	.wbs-fuss__oben { grid-template-columns: 1.4fr 1fr 1fr; gap: 42px; }
	.wbs-fuss__spalte:last-child { grid-column: 2 / -1; }
}

@media (min-width: 1000px) {
	.wbs-fuss__oben { grid-template-columns: 1.6fr 1.1fr 0.9fr 1.1fr; }
	.wbs-fuss__spalte:last-child { grid-column: auto; }
}

@media (prefers-reduced-motion: reduce) {
	.wbs-menue__tafel, .wbs-menue__schleier,
	.wbs-nav__link span::after, .wbs-burger__striche i, .wbs-marken__reihe img { transition: none; }
}

/* =====================================================================
   Über uns (v0.17.0)
   ===================================================================== */

/* --- Unsere Akademie --- */
.akademie { position: relative; overflow: hidden; padding: clamp(80px, 11vw, 130px) 0; }
.akademie .giant { top: 18px; }
.akademie__raster { position: relative; z-index: 1; display: grid; gap: 40px; }

.akademie__titel { font-size: clamp(2.4rem, 8vw, 4.4rem); letter-spacing: -0.03em; }
.akademie__titel .word { margin-bottom: 2px; }
.akademie__titel .zeile { font-weight: 800; }


/* --- Rundgang --- */
.rundgang__reihe { margin-top: 30px; }
.schiene__rand { position: relative; }

.raum {
	flex: 0 0 auto;
	width: min(80vw, 320px);
	scroll-snap-align: start;
	margin: 0;
	display: flex; flex-direction: column; gap: 14px;
}
.raum__bild {
	position: relative;
	aspect-ratio: 4 / 5;
	border-radius: var(--r-l);
	overflow: hidden;
	background: var(--offwhite);
}
.raum__bild img { width: 100%; height: 100%; object-fit: cover; }

/* Solange ein Raumfoto fehlt, steht hier eine Farbfläche statt eines
   toten Bildes — die Seite bleibt dadurch immer vorzeigbar. */
.raum__bild--ph::after { content: ''; position: absolute; inset: 0; }
.raum__bild--1::after { background: linear-gradient(150deg, var(--gruen) 0%, #5e9573 100%); }
.raum__bild--2::after { background: linear-gradient(150deg, var(--flieder) 0%, #83709f 100%); }
.raum__bild--3::after { background: linear-gradient(150deg, var(--beige) 0%, #9c8d5e 100%); }

.wbs-body .raum h3 { margin: 0 0 5px; font-size: 1.16rem; font-weight: 800; letter-spacing: -0.01em; }
.raum p { margin: 0; font-size: 0.92rem; line-height: 1.55; color: rgba(19,17,16,0.72); }

/* --- Trainer-Gruppenbild --- */
.groupshot { margin: 34px 0 0; }
.groupshot picture { display: block; overflow: hidden; border-radius: var(--r-l); }
.groupshot img { display: block; width: 100%; height: auto; }
.groupshot figcaption { margin-top: 12px; font-size: 0.86rem; color: var(--gedimmt); }

/* --- Team --- */
/* align-items: start — sonst werden die Karten auf die hoechste Zeile
   gestreckt und ueber dem Portraet klafft eine leere Flaeche. */
.team-grid { display: grid; gap: 18px; margin-top: 30px; align-items: start;
	grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.member { position: relative; margin: 0; overflow: hidden; border-radius: var(--r-l);
	display: flex; flex-direction: column;
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); }
/* padding-top: 0 hebt die alte Platzhalter-Box auf (sie reservierte
   105 % Hoehe fuer eine Farbflaeche) — sonst klafft ueber dem Portraet
   eine leere Flaeche. */
.member .photo { overflow: hidden; padding-top: 0; position: static; }
.member .photo::after { content: none; }
.member .photo img { display: block; width: 100%; aspect-ratio: 1 / 1; object-fit: cover;
	transition: transform 0.4s cubic-bezier(0.22,0.8,0.3,1); }
.member:hover .photo img { transform: scale(1.04); }
.member .info { padding: 16px 18px 18px; }
.member .info b { font-size: 1rem; font-weight: 800; }
.member .bar { height: 5px; background: var(--ac, var(--gruen)); }

/* --- Philosophie --- */
.philosophie__worte { font-size: clamp(2.6rem, 11vw, 5.4rem); letter-spacing: -0.035em; }
.philosophie__worte .word { overflow: hidden; padding-bottom: 0.03em; }
.philosophie__worte .word > span { display: inline-block; }
.philosophie__worte .word i { bottom: 0.11em; height: 0.2em; }
.philosophie .copy--gross { max-width: 62ch; margin-top: 26px; color: rgba(255,255,255,0.74) !important; }
.philosophie .btn { margin-top: 8px; }

/* Ohne die Zahlenspalte laeuft der Text nicht ueber die volle Breite —
   Fliesstext bleibt so lesbar. */
.akademie__raster--einspaltig .copy--gross { max-width: 58ch; }

@media (min-width: 900px) {
	.akademie__raster { grid-template-columns: 1.55fr 1fr; gap: 60px; align-items: start; }
	.akademie__raster--einspaltig { grid-template-columns: 1fr; }
	.raum { width: 340px; }
}

/* =====================================================================
   Kaufstrecke: Warenkorb, Kasse, Mein Konto (v0.19.0)

   Das Markup kommt komplett von WooCommerce — hier wird nur gestaltet.
   Deshalb stehen viele Selektoren mit WooCommerce-Klassennamen und
   stellenweise !important: die Standard-Stylesheets des Shops und des
   Themes sind sonst staerker.
   ===================================================================== */

.wbs-shop { background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); }

/* Die Warenkorbtabelle braucht mehr Platz als die 1100 px der uebrigen
   Seiten — sonst laeuft sie unter die Summenbox. */
body.wbs-shop .container { max-width: 1240px; }

/* --- Kopf --- */
.shop-kopf { position: relative; overflow: hidden;
	padding: clamp(96px, 13vw, 150px) 0 clamp(26px, 4vw, 42px); }
.wbs-body .shop-kopf h1 { margin: 0 0 12px; font-weight: 800; letter-spacing: -0.03em;
	font-size: clamp(2.2rem, 6.2vw, 3.6rem); line-height: 1.05; }
.shop-kopf__sub { margin: 0; max-width: 52ch; font-size: 1.04rem; color: rgba(19,17,16,0.72); }
.shop-kopf .hairline { opacity: 0.5; }
.shop-kopf .container { position: relative; z-index: 1; }

/* --- Ablaufpunkte --- */
.shop-schritte { list-style: none; display: flex; flex-wrap: wrap; gap: 10px 22px; margin: 26px 0 0; padding: 0; }
.shop-schritte__punkt { display: flex; align-items: center; gap: 9px;
	font-size: 0.88rem; font-weight: 700; color: var(--gedimmt); }
.shop-schritte__zahl { display: flex; align-items: center; justify-content: center;
	width: 26px; height: 26px; border-radius: 50%;
	background: rgba(19,17,16,0.09); color: var(--gedimmt); font-size: 0.78rem; font-weight: 800; }
.shop-schritte__punkt.is-aktiv { color: var(--schwarz); }
.shop-schritte__punkt.is-aktiv .shop-schritte__zahl { background: var(--schwarz); color: var(--weiss); }
.shop-schritte__punkt.is-fertig { color: var(--schwarz); }
.shop-schritte__punkt.is-fertig .shop-schritte__zahl { background: var(--gruen); color: var(--schwarz); }

.shop-haupt { padding-top: 12px; }

/* --- Hinweise --- */
.wbs-shop .woocommerce-message,
.wbs-shop .woocommerce-info,
.wbs-shop .woocommerce-error {
	list-style: none;
	margin: 0 0 24px;
	padding: 16px 20px;
	border: 0;
	border-left: 4px solid var(--gruen);
	border-radius: 0 var(--r-m) var(--r-m) 0;
	background: var(--weiss);
	background-image: linear-gradient(var(--weiss), var(--weiss));
	box-shadow: 0 1px 2px rgba(19,17,16,0.05);
	font-size: 0.95rem;
	display: flex; flex-wrap: wrap; align-items: center; gap: 12px;
}
.wbs-shop .woocommerce-message::before,
.wbs-shop .woocommerce-info::before,
.wbs-shop .woocommerce-error::before { content: none; }
.wbs-shop .woocommerce-info { border-left-color: var(--flieder); }
.wbs-shop .woocommerce-error { border-left-color: #B4402F; }
.wbs-shop .woocommerce-error li { list-style: none; }

/* --- Tabellen (Warenkorb, Bestellübersicht) --- */
.wbs-shop table.shop_table {
	width: 100%;
	border: 0 !important;
	border-collapse: separate;
	border-spacing: 0;
	border-radius: var(--r-l);
	overflow: hidden;
	background: var(--weiss);
	background-image: linear-gradient(var(--weiss), var(--weiss));
	box-shadow: 0 1px 2px rgba(19,17,16,0.05), 0 20px 44px -40px rgba(19,17,16,0.45);
}
.wbs-shop table.shop_table th {
	padding: 16px 18px;
	background: var(--offwhite);
	font-size: 0.74rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.1em;
	color: var(--gedimmt); text-align: left; border: 0;
}
.wbs-shop table.shop_table td {
	padding: 15px 10px; border: 0; border-top: 1px solid var(--linie); vertical-align: middle;
}
.wbs-shop table.shop_table th { padding-left: 10px; padding-right: 10px; }
.wbs-shop table.shop_table td.product-price,
.wbs-shop table.shop_table td.product-subtotal { white-space: nowrap; }
.wbs-shop table.shop_table th { white-space: normal; }
.wbs-shop table.shop_table .quantity input.qty { width: 62px !important; }
/* Ohne min-width kann die Tabelle nicht schrumpfen und schiebt sich
   sonst unter die Summenbox. */
.wbs-shop .woocommerce-cart-form { min-width: 0; overflow-x: auto; }
.wbs-shop table.shop_table .product-thumbnail { width: 72px; }
.wbs-shop table.shop_table .product-thumbnail img {
	width: 56px !important; height: 56px !important; max-width: none !important;
	object-fit: cover; border-radius: var(--r-s); display: block;
}
/* Der Entfernen-Knopf braucht keine eigene Spaltenbreite. */
.wbs-shop table.shop_table .product-remove { width: 56px; }
body.wbs-shop td.product-name a { font-weight: 800; color: var(--schwarz); text-decoration: none; }
.wbs-shop .product-remove a.remove {
	display: inline-flex !important; align-items: center; justify-content: center;
	width: 30px; height: 30px; border-radius: 50%;
	background: var(--offwhite) !important; color: var(--schwarz) !important;
	font-size: 1.1rem; line-height: 1; text-decoration: none;
}
.wbs-shop .product-remove a.remove:hover { background: var(--flieder) !important; }
.wbs-shop .cart_totals table.shop_table th { background: transparent; }

/* --- Eingabefelder: Theme-Rahmen aushebeln, eigener Stil --- */
.wbs-shop .input-text,
.wbs-shop input[type="text"],
.wbs-shop input[type="email"],
.wbs-shop input[type="tel"],
.wbs-shop input[type="password"],
.wbs-shop input[type="number"],
.wbs-shop textarea,
.wbs-shop select {
	width: 100% !important;
	max-width: none !important;
	min-height: 50px !important;
	padding: 12px 15px !important;
	border: 1px solid var(--linie) !important;
	border-radius: var(--r-m) !important;
	background: var(--weiss) !important;
	background-image: none !important;
	box-shadow: none !important;
	font: inherit;
	font-size: 1rem;
	color: var(--schwarz);
}
.wbs-shop textarea { min-height: 110px !important; }
.wbs-shop .input-text:focus,
.wbs-shop select:focus,
.wbs-shop textarea:focus { border-color: var(--schwarz) !important; outline: 2px solid rgba(19,17,16,0.12); outline-offset: 0; }

.wbs-shop .form-row { display: flex; flex-direction: column; gap: 6px; margin: 0 0 16px; padding: 0; float: none !important; width: auto !important; }
.wbs-shop .form-row label { font-size: 0.84rem; font-weight: 700; }
.wbs-shop .required { color: #B4402F; text-decoration: none; }
.wbs-shop .woocommerce-input-wrapper { width: 100%; }

/* Mengenfeld im Warenkorb */
.wbs-shop .quantity input.qty {
	width: 74px !important; min-width: 0 !important;
	height: 46px !important; min-height: 46px !important;
	padding: 0 !important; text-align: center; font-weight: 800;
	-moz-appearance: textfield;
}
.wbs-shop .quantity input.qty::-webkit-outer-spin-button,
.wbs-shop .quantity input.qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

/* --- Knöpfe --- */
body.wbs-shop .button,
body.wbs-shop button.button,
body.wbs-shop input.button,
body.wbs-shop a.button,
body.wbs-shop .checkout-button,
body.wbs-shop #place_order {
	display: inline-block;
	min-height: 50px;
	padding: 14px 28px !important;
	border: 0 !important;
	border-radius: 0 !important;
	background: var(--schwarz) !important;
	color: var(--weiss) !important;
	font: inherit;
	font-weight: 800 !important;
	font-size: 0.95rem;
	text-decoration: none;
	cursor: pointer;
	clip-path: polygon(0 0, 100% 0, 100% calc(100% - 13px), calc(100% - 13px) 100%, 0 100%);
	transition: background 0.2s ease, color 0.2s ease;
}
body.wbs-shop .checkout-button,
body.wbs-shop #place_order {
	background: var(--gruen) !important;
	color: var(--schwarz) !important;
	width: 100%;
	text-align: center;
	font-size: 1.02rem;
	min-height: 56px;
}
body.wbs-shop .button:hover,
body.wbs-shop .checkout-button:hover,
body.wbs-shop #place_order:hover { background: var(--flieder) !important; color: var(--schwarz) !important; }
body.wbs-shop .button:disabled,
body.wbs-shop .button.disabled { opacity: 0.5; cursor: default; }

/* --- Warenkorb-Layout --- */
.wbs-shop .woocommerce-cart-form { margin-bottom: 30px; }
.wbs-shop .actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 14px; }
.wbs-shop .coupon { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.wbs-shop .coupon .input-text { width: min(240px, 60vw) !important; }

.wbs-shop .cart_totals { padding: 24px 22px; border-radius: var(--r-l);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	border: 1px solid var(--linie); }
body.wbs-shop .cart_totals h2 { font-size: 1.2rem; margin-bottom: 14px; }
.wbs-shop .order-total .amount { font-size: 1.4rem; font-weight: 800; }

/* --- Kasse --- */
.wbs-shop .woocommerce-billing-fields h3,
.wbs-shop .woocommerce-additional-fields h3,
body.wbs-shop #order_review_heading {
	margin: 0 0 18px; font-size: 1.25rem; font-weight: 800; letter-spacing: -0.02em;
}
.wbs-shop #order_review,
.wbs-shop .woocommerce-checkout-review-order {
	padding: 24px 22px; border-radius: var(--r-l);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	border: 1px solid var(--linie);
	box-shadow: 0 1px 2px rgba(19,17,16,0.05), 0 24px 48px -40px rgba(19,17,16,0.5);
}
.wbs-shop #order_review table.shop_table { box-shadow: none; border-radius: 0; background: transparent; }
.wbs-shop #order_review table.shop_table th { background: transparent; padding-left: 0; padding-right: 0; }
.wbs-shop #order_review table.shop_table td { padding-left: 0; padding-right: 0; }

.wbs-shop #payment { background: transparent !important; border-radius: 0; margin-top: 18px; }
.wbs-shop #payment ul.payment_methods { list-style: none; margin: 0 0 18px; padding: 0;
	border: 0 !important; display: flex; flex-direction: column; gap: 10px; }
.wbs-shop #payment ul.payment_methods li {
	padding: 14px 16px; border: 1px solid var(--linie); border-radius: var(--r-m); background: var(--offwhite);
}
.wbs-shop #payment ul.payment_methods li label { font-weight: 700; }
.wbs-shop #payment .payment_box { background: transparent !important; margin: 10px 0 0 !important;
	padding: 0 !important; font-size: 0.9rem; color: var(--gedimmt); }
.wbs-shop #payment .payment_box::before { content: none !important; }
.wbs-shop .woocommerce-terms-and-conditions-wrapper { margin: 16px 0; font-size: 0.9rem; }

/* --- Mein Konto --- */
.wbs-shop .woocommerce-MyAccount-navigation ul { list-style: none; margin: 0; padding: 0;
	display: flex; flex-direction: column; gap: 4px; }
body.wbs-shop .woocommerce-MyAccount-navigation a {
	display: block; padding: 12px 16px; border-radius: var(--r-m);
	font-weight: 700; font-size: 0.94rem; color: var(--schwarz); text-decoration: none;
}
body.wbs-shop .woocommerce-MyAccount-navigation a:hover { background: var(--weiss); }
.wbs-shop .woocommerce-MyAccount-navigation li.is-active a { background: var(--schwarz); color: var(--weiss) !important; }

.wbs-shop .woocommerce-form-login,
.wbs-shop .woocommerce-form-register,
.wbs-shop .woocommerce-form-coupon {
	max-width: 460px;
	padding: 26px 24px !important;
	border: 1px solid var(--linie) !important;
	border-radius: var(--r-l) !important;
	background: var(--weiss);
	background-image: linear-gradient(var(--weiss), var(--weiss));
}
.wbs-shop .woocommerce-form-login__rememberme { display: inline-flex; align-items: center; gap: 8px; margin: 8px 0 14px; }
.wbs-shop .lost_password { margin-top: 12px; font-size: 0.88rem; }

/* Registrierung und Anmeldung nebeneinander statt untereinander. */
.wbs-shop .u-columns { display: grid; gap: 22px; }
.wbs-shop .u-column1, .wbs-shop .u-column2 { width: auto !important; float: none !important; }
body.wbs-shop .u-columns h2 { font-size: 1.3rem; margin-bottom: 14px; }

.wbs-shop .woocommerce-Address { padding: 20px; border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss)); }

/* --- Danke-Seite --- */
body.wbs-shop .woocommerce-notice,
body.wbs-shop .woocommerce-thankyou-order-received {
	margin: 0 0 6px; font-size: 1.15rem; font-weight: 700; color: var(--schwarz);
}
.wbs-shop .woocommerce-order-overview {
	list-style: none; margin: 24px 0; padding: 22px; display: grid; gap: 16px;
	border-radius: var(--r-l); border: 1px solid var(--linie);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
}
.wbs-shop .woocommerce-order-overview li { border: 0 !important; float: none !important;
	display: flex; flex-direction: column; gap: 2px;
	font-size: 0.76rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--gedimmt); }
.wbs-shop .woocommerce-order-overview li strong { font-size: 1.02rem; text-transform: none; letter-spacing: 0; color: var(--schwarz); }

/* --- Auswahlfelder von Select2 --- */
.wbs-shop .select2-container .select2-selection--single {
	height: 50px !important; border: 1px solid var(--linie) !important;
	border-radius: var(--r-m) !important; background: var(--weiss) !important;
}
.wbs-shop .select2-container .select2-selection--single .select2-selection__rendered { line-height: 48px !important; padding-left: 15px !important; }
.wbs-shop .select2-container .select2-selection--single .select2-selection__arrow { height: 48px !important; }

@media (min-width: 700px) {
	.wbs-shop .u-columns { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.wbs-shop .woocommerce-order-overview { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 1000px) {
	/* Kasse zweispaltig: links die Daten, rechts die Übersicht. */
	.wbs-shop form.checkout.woocommerce-checkout { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 44px; align-items: start; }
	.wbs-shop form.checkout #customer_details { grid-column: 1; grid-row: 1 / span 2; }
	.wbs-shop form.checkout #order_review_heading { grid-column: 2; grid-row: 1; margin-bottom: 14px; }
	.wbs-shop form.checkout #order_review { grid-column: 2; grid-row: 2; align-self: start; position: sticky; top: 112px; }
	.wbs-shop #customer_details .col-1, .wbs-shop #customer_details .col-2 { width: auto !important; float: none !important; }


	/* Konto: Menü links, Inhalt rechts. */
	.wbs-shop .woocommerce-account .woocommerce { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 40px; align-items: start; }
	.wbs-shop .woocommerce-MyAccount-navigation { position: sticky; top: 112px; }
	.wbs-shop .woocommerce-MyAccount-content { min-width: 0; }
	.wbs-shop .woocommerce-order-overview { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* --- Warenkorb zweispaltig, aber erst wenn die Tabelle wirklich passt.
   WooCommerce gibt Formular und Summen als Geschwister im
   .woocommerce-Container aus — dort setzt das Raster an. Unter 1180 px
   stehen die Summen unter der Tabelle, sonst laufen beide ineinander. */
@media (min-width: 1180px) {
	body.wbs-shop.woocommerce-cart .woocommerce {
		display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 28px; align-items: start;
	}
	body.wbs-shop.woocommerce-cart .woocommerce-notices-wrapper { grid-column: 1 / -1; }
	body.wbs-shop.woocommerce-cart .woocommerce-cart-form { grid-column: 1; margin-bottom: 0; }
	body.wbs-shop.woocommerce-cart .cart-collaterals { grid-column: 2; width: auto !important; }
	body.wbs-shop.woocommerce-cart .cart_totals { position: sticky; top: 112px; }
}

/* =====================================================================
   Warenkorb: Breiten hart setzen
   ---------------------------------------------------------------------
   WooCommerce und das Theme bringen eigene Prozentbreiten und Floats
   mit (.cart_totals bekommt z. B. width:48%). In unserem Raster ergibt
   das eine daumenbreite Summenspalte, in der sogar der Knopftext
   Buchstabe für Buchstabe umbricht. Deshalb hier alles hart auf
   volle Breite und ohne Float.
   ===================================================================== */
body.wbs-shop.woocommerce-cart .woocommerce-cart-form,
body.wbs-shop.woocommerce-cart .cart-collaterals,
body.wbs-shop.woocommerce-cart .cart-collaterals .cart_totals,
body.wbs-shop.woocommerce-cart .cart_totals table.shop_table {
	width: 100% !important;
	max-width: none !important;
	float: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
}

/* Feste Spaltenbreiten, sonst schiebt die Entfernen-Spalte alles nach
   rechts und der Seminarname bekommt kaum Platz.
   Nur ab Tablet: auf dem Handy stapelt WooCommerce die Zeilen selbst,
   feste Breiten wuerden den Seminarnamen dort auf null druecken. */
@media (min-width: 768px) {
	body.wbs-shop table.shop_table.cart { table-layout: fixed !important; }
	body.wbs-shop table.shop_table.cart th.product-remove,
	body.wbs-shop table.shop_table.cart td.product-remove { width: 52px !important; }
	body.wbs-shop table.shop_table.cart th.product-thumbnail,
	body.wbs-shop table.shop_table.cart td.product-thumbnail { width: 84px !important; }
	body.wbs-shop table.shop_table.cart th.product-price,
	body.wbs-shop table.shop_table.cart td.product-price,
	body.wbs-shop table.shop_table.cart th.product-subtotal,
	body.wbs-shop table.shop_table.cart td.product-subtotal { width: 152px !important; text-align: right; }
	/* „Zwischensumme" ist ein langes Wort und laesst sich nicht umbrechen —
	   etwas weniger Sperrung, damit die Kopfzeile nicht abgeschnitten wird. */
	body.wbs-shop table.shop_table.cart th { letter-spacing: 0.05em; }
	body.wbs-shop table.shop_table.cart th.product-quantity,
	body.wbs-shop table.shop_table.cart td.product-quantity { width: 96px !important; }
}
body.wbs-shop table.shop_table.cart td.product-name { overflow-wrap: anywhere; }

/* Knopftext darf nie senkrecht umbrechen. */
body.wbs-shop .checkout-button,
body.wbs-shop .cart_totals .button {
	display: block; width: 100% !important; text-align: center;
	white-space: normal; overflow-wrap: normal; word-break: normal; hyphens: none;
}

/* Gutschein und „Warenkorb aktualisieren" sitzen in der letzten
   Tabellenzeile.
   Achtung: dieser Zelle darf man kein `display:flex` geben. Sie ist per
   colspan über alle Spalten gezogen — sobald sie kein table-cell mehr
   ist, faellt sie aus dem Tabellenraster und schrumpft auf die Breite
   der ersten Spalte (52 px). Genau daher kam der gestapelte
   Gutschein-Block. Deshalb: Zelle bleibt Zelle, geordnet wird innen. */
body.wbs-shop table.shop_table.cart td.actions {
	display: table-cell !important;
	padding: 16px 12px !important;
	text-align: left;
}
body.wbs-shop table.shop_table.cart td.actions::after { content: ""; display: table; clear: both; }
body.wbs-shop table.shop_table.cart td.actions .coupon {
	float: left; display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 0;
}
body.wbs-shop table.shop_table.cart td.actions .coupon label { margin: 0; }
/* Etwas schmaler, damit „Warenkorb aktualisieren" rechts daneben passt
   und nicht in eine zweite Zeile rutscht. */
body.wbs-shop table.shop_table.cart td.actions .coupon .input-text { width: min(200px, 55vw) !important; }
body.wbs-shop table.shop_table.cart td.actions > .button,
body.wbs-shop table.shop_table.cart td.actions > button,
body.wbs-shop table.shop_table.cart td.actions > input.button { float: right; }

@media (min-width: 1180px) {
	/* Etwas mehr Luft für die Summen als vorher. */
	body.wbs-shop.woocommerce-cart .woocommerce { grid-template-columns: minmax(0, 1fr) 340px; }
}

/* =====================================================================
   Kasse mit JetFormBuilder
   ---------------------------------------------------------------------
   Links das Bestellformular, rechts eine ruhige Übersicht der Buchung.
   Zahlungsarten gibt es hier bewusst nicht.
   ===================================================================== */
.kasse-layout { display: grid; gap: 34px; align-items: start; }
body.wbs-shop .kasse-formular h2,
body.wbs-shop .kasse-summe h2 { font-size: 1.25rem; margin: 0 0 16px; color: var(--schwarz); }

.kasse-summe {
	padding: 24px 22px; border-radius: var(--r-l); border: 1px solid var(--linie);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
}

.kasse-posten { list-style: none; margin: 0 0 18px; padding: 0; display: grid; gap: 14px; }
.kasse-posten__zeile { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 12px;
	align-items: start; padding-bottom: 14px; border-bottom: 1px solid var(--linie); }
.kasse-posten__zeile:last-child { border-bottom: 0; padding-bottom: 0; }
.kasse-posten__bild img {
	width: 56px !important; height: 56px !important; max-width: none !important;
	object-fit: cover; border-radius: var(--r-m); display: block;
}
.kasse-posten__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.kasse-posten__text b { font-weight: 800; line-height: 1.3; }
.kasse-posten__text small { font-size: 0.82rem; color: var(--gedimmt); }
.kasse-posten__preis { font-weight: 700; white-space: nowrap; }

.kasse-rechnung { margin: 0; padding: 16px 0 0; border-top: 1px solid var(--linie); display: grid; gap: 10px; }
.kasse-rechnung > div { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; }
.kasse-rechnung dt { font-size: 0.86rem; color: var(--gedimmt); margin: 0; }
.kasse-rechnung dd { margin: 0; font-weight: 700; white-space: nowrap; }
.kasse-rechnung__gesamt { margin-top: 4px; padding-top: 12px; border-top: 1px solid var(--linie); }
.kasse-rechnung__gesamt dt { font-size: 1rem; font-weight: 800; color: var(--schwarz); }
.kasse-rechnung__gesamt dd { font-size: 1.35rem; font-weight: 800; }
.kasse-rechnung__gesamt dd .amount { font-size: inherit; }

.kasse-hinweis { margin: 16px 0 0; font-size: 0.82rem; color: var(--gedimmt); line-height: 1.5; }
.kasse-zurueck { margin: 12px 0 0; font-size: 0.88rem; }
body.wbs-shop .kasse-zurueck a { color: var(--schwarz); text-decoration: underline; text-underline-offset: 3px; }

.kasse-leer { padding: 40px 0 10px; }
body.wbs-shop .kasse-leer h2 { font-size: 1.5rem; margin-bottom: 8px; }
.kasse-leer p { color: var(--gedimmt); margin-bottom: 20px; }

/* JetFormBuilder erbt unsere Feldgestaltung, damit das Formular nicht
   wie ein Fremdkörper wirkt. Struktur und Feldnamen bleiben unberührt. */
body.wbs-body .jet-form-builder__field-wrap { width: 100% !important; min-width: 0 !important; }
body.wbs-body .jet-form-builder-row,
body.wbs-body .jet-form-builder__field-wrap { margin-bottom: 16px; }
body.wbs-body .jet-form-builder__label { font-size: 0.84rem; font-weight: 700; display: block; margin-bottom: 6px; }
body.wbs-body .jet-form-builder__field:not([type="checkbox"]):not([type="radio"]):not([type="submit"]) {
	width: 100% !important; max-width: none !important;
	height: 50px !important; padding: 0 15px !important;
	border: 1px solid var(--linie) !important; border-radius: var(--r-m) !important;
	background: var(--weiss) !important; background-image: linear-gradient(var(--weiss), var(--weiss)) !important;
	box-shadow: none !important; font: inherit !important; color: var(--schwarz) !important;
}
body.wbs-body textarea.jet-form-builder__field { height: auto !important; min-height: 110px !important; padding: 12px 15px !important; }
body.wbs-body .jet-form-builder__field:focus { border-color: var(--schwarz) !important; outline: 2px solid rgba(19,17,16,0.12); }
body.wbs-body .jet-form-builder__action-button,
body.wbs-body .jet-form-builder__submit {
	display: inline-flex; align-items: center; justify-content: center;
	min-height: 54px; padding: 0 26px !important;
	border: 0 !important; border-radius: 999px !important;
	background: var(--schwarz) !important; color: var(--weiss) !important;
	font-weight: 800 !important; font-size: 1rem !important; cursor: pointer;
	white-space: normal; text-align: center;
}
body.wbs-body .jet-form-builder__action-button:hover,
body.wbs-body .jet-form-builder__submit:hover { background: var(--flieder) !important; color: var(--schwarz) !important; }

/* Eigentliche Ursache des Layout-Bugs (per getBoundingClientRect() +
   getComputedStyle() auf der Live-Seite verifiziert, nicht vermutet):
   JetFormBuilder rendert jede Feldzeile als
   .jet-form-builder-row { display:flex; flex-direction:column;
   flex-wrap:wrap; } — Label und Feld sollen normalerweise
   übereinandergestapelt werden. Reicht die Höhe der Zeile nicht für
   beide (z. B. weil sie als Grid-/Flex-Kind auf eine bestimmte Höhe
   gestreckt wird), klappt flex-wrap:wrap das Feld nicht nach unten,
   sondern seitlich in eine „zweite Spalte" — das Feld landet dann exakt
   um die Breite der eigenen Zeile nach rechts verschoben (bestätigt:
   position/left/margin-left/transform sind dabei alle unauffällig,
   es ist wirklich der Zeilenumbruch). Fix: Umbruch verhindern, dann
   bleiben Label und Feld immer gestapelt, unabhängig von der Höhe. */
body.wbs-body .jet-form-builder-row {
	flex-wrap: nowrap !important;
	justify-content: flex-start !important;
}
/* JetFormBuilder setzt für Labels in "layout-column"-Formularen
   `flex: 0 1 100%` — bei einer Spalten-Flexbox ist die Hauptachse
   senkrecht, das Label "möchte" also 100% der Zeilenhöhe. Wird die
   Zeile per CSS Grid auf die Höhe einer Nachbarzeile mit mehr Inhalt
   (z. B. mit Hinweistext) gestreckt, zieht sich das Label einen Teil
   dieser Extra-Höhe und wird zweizeilig hoch — das Eingabefeld
   darunter rutscht nach unten. Fix: Label bekommt seine tatsächliche,
   inhaltsbasierte Höhe zurück. */
body.wbs-body .jet-form-builder-row > .jet-form-builder__label {
	flex: 0 0 auto !important;
}
body.wbs-body .jet-form-builder .wp-block-column {
	min-width: 0 !important;
}
body.wbs-body .jet-form-builder .wp-block-columns {
	flex-wrap: wrap !important;
	gap: 36px !important;
}

@media (min-width: 1000px) {
	.kasse-layout { grid-template-columns: minmax(0, 1fr) 380px; gap: 44px; }
	.kasse-summe { position: sticky; top: 112px; }
}

/* =====================================================================
   Danke-Seiten
   ===================================================================== */
/* Die Standard-Ueberschrift der dunklen Koepfe ist auf kurze Worte
   ausgelegt („Seminare", „Ueber uns"). „Danke fuer Deine Anmeldung als
   Hairmodel!" waere damit drei Zeilen hoch, „Allgemeine
   Geschaeftsbedingungen" liefe seitlich aus dem Bild. Beide Koepfe
   bekommen deshalb eine ruhigere Groesse und duerfen lange Woerter
   trennen. */
body.wbs-body .danke-kopf h1 {
	font-size: clamp(2.1rem, 6.4vw, 3.9rem);
	letter-spacing: -0.02em;
	overflow-wrap: break-word;
	hyphens: auto;
}
body.wbs-body .recht-kopf h1 {
	font-size: clamp(1.9rem, 5.2vw, 3.2rem);
	letter-spacing: -0.015em;
	line-height: 1.05;
	overflow-wrap: break-word;
	hyphens: auto;
}

.danke-haken {
	display: inline-flex; align-items: center; justify-content: center;
	width: 58px; height: 58px; margin-bottom: 18px;
	border-radius: 999px; background: var(--gruen); color: var(--schwarz);
}
.danke-haken svg { width: 30px; height: 30px; }

.danke-text { max-width: 62ch; margin: 0 0 40px; }

/* Die drei nächsten Schritte. Nummern gross, Text ruhig. */
.danke-schritte { list-style: none; margin: 26px 0 0; padding: 0; display: grid; gap: 22px; }
.danke-schritt {
	position: relative; padding: 24px 22px 22px;
	border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
}
.danke-schritt__nr {
	display: block; margin-bottom: 10px;
	font-size: 1.5rem; font-weight: 800; line-height: 1;
	color: var(--flieder);
}
body.wbs-body .danke-schritt h3 { font-size: 1.06rem; margin: 0 0 6px; color: var(--schwarz); }
.danke-schritt p { margin: 0; color: var(--gedimmt); font-size: 0.95rem; line-height: 1.6; }

.danke-knoepfe { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 34px; }
.danke-hilfe { margin: 26px 0 0; font-size: 0.9rem; color: var(--gedimmt); line-height: 1.7; }
body.wbs-body .danke-hilfe a { color: var(--schwarz); text-decoration: underline; text-underline-offset: 3px; }

@media (min-width: 820px) {
	.danke-schritte { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* =====================================================================
   Rechtstexte: AGB, Datenschutz, Impressum, Widerruf
   ---------------------------------------------------------------------
   Alles hier ist Lesbarkeit: schmale Spalte, ruhige Abstände, links ein
   Verzeichnis zum Springen. Der Text selbst kommt unverändert aus dem
   Seiteneditor.
   ===================================================================== */
.recht__raster { display: grid; gap: 40px; align-items: start; }
.recht__text { max-width: 68ch; min-width: 0; }

body.wbs-body .recht__text h2 {
	font-size: 1.45rem; line-height: 1.25; margin: 46px 0 12px;
	color: var(--schwarz); scroll-margin-top: 120px;
}
body.wbs-body .recht__text h2:first-child { margin-top: 0; }
body.wbs-body .recht__text h3 { font-size: 1.1rem; margin: 28px 0 8px; color: var(--schwarz); }
.recht__text p,
.recht__text li { font-size: 1rem; line-height: 1.75; color: var(--schwarz); }
.recht__text p { margin: 0 0 16px; }
.recht__text ul,
.recht__text ol { margin: 0 0 18px; padding-left: 22px; }
.recht__text li { margin-bottom: 8px; }
body.wbs-body .recht__text a { color: var(--schwarz); text-decoration: underline; text-underline-offset: 3px; }
.recht__text strong { font-weight: 800; }

/* Tabellen kommen in Datenschutzerklärungen häufig vor. */
.recht__text table { width: 100%; border-collapse: collapse; margin: 0 0 22px; font-size: 0.92rem; }
.recht__text th,
.recht__text td { padding: 10px 12px; border: 1px solid var(--linie); text-align: left; vertical-align: top; }
.recht__text th { background: var(--offwhite); font-weight: 800; }

.recht__inhalt {
	padding: 22px 20px; border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
}
.recht__inhalt-titel {
	margin: 0 0 12px; font-size: 0.74rem; font-weight: 800;
	text-transform: uppercase; letter-spacing: 0.12em; color: var(--gedimmt);
}
.recht__inhalt ol { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; counter-reset: recht; }
.recht__inhalt li { counter-increment: recht; font-size: 0.9rem; line-height: 1.45; }
body.wbs-body .recht__inhalt a {
	color: var(--schwarz); text-decoration: none;
	display: grid; grid-template-columns: 26px minmax(0, 1fr); align-items: baseline;
}
.recht__inhalt a::before { content: counter(recht, decimal-leading-zero); color: var(--gedimmt); font-weight: 700; }
body.wbs-body .recht__inhalt a:hover { text-decoration: underline; text-underline-offset: 3px; }

@media (min-width: 1000px) {
	.recht__raster { grid-template-columns: 260px minmax(0, 1fr); gap: 56px; }
	.recht__raster--solo { grid-template-columns: minmax(0, 1fr); }
	.recht__inhalt { position: sticky; top: 112px; }
}

/* Redakteurs-Hinweis auf Rechtstextseiten ohne Editor-Inhalt.
   Besucher sehen diesen Kasten nie. */
.recht__hinweis {
	padding: 18px 20px; margin: 0 0 26px;
	border-left: 3px solid var(--flieder); border-radius: var(--r-m);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
	font-size: 0.92rem; line-height: 1.6; color: var(--schwarz);
}
.recht__hinweis code { padding: 2px 6px; border-radius: 6px; background: rgba(19,17,16,0.07); font-size: 0.88em; }

/* =====================================================================
   JetFormBuilder — Ergänzungen für die Formularseiten
   ---------------------------------------------------------------------
   Die Grundgestaltung der Felder steht weiter oben. Hier kommt dazu,
   was auf den Feedback- und eLearning-Formularen vorkommt: Gruppen aus
   Auswahlknöpfen, fieldset-Blöcke, Hilfetexte und Meldungen.
   ===================================================================== */
body.wbs-body .jet-form-builder fieldset {
	margin: 0 0 26px; padding: 0; border: 0; min-width: 0;
}
/* Legenden als kleine Rubriken-Überschriften, mit Farbstrich wie bei den
   Seminarkarten (--ac-artige Akzente) statt als winzige graue Zeile. */
body.wbs-body .jet-form-builder legend {
	padding-left: 12px; margin: 0 0 14px;
	border-left: 3px solid var(--gruen);
	font-size: 1.02rem; font-weight: 800; letter-spacing: -0.005em; color: var(--schwarz);
}
body.wbs-body .jet-form-builder fieldset:nth-of-type(even) legend { border-left-color: var(--flieder); }
body.wbs-body .jet-form-builder__desc,
body.wbs-body .jet-form-builder__field-desc {
	margin: 6px 0 0; font-size: 0.82rem; color: var(--gedimmt); line-height: 1.5;
}
body.wbs-body .jet-form-builder__required { color: #B4402F; }

/* Auswahlknöpfe: als antippbare Kacheln statt winziger Kreise. */
body.wbs-body .jet-form-builder__fields-group {
	display: flex; flex-wrap: wrap; gap: 10px; margin: 0;
}
body.wbs-body .jet-form-builder__fields-group .jet-form-builder__field-wrap {
	width: auto; margin-bottom: 0;
}
body.wbs-body .jet-form-builder__fields-group label {
	display: inline-flex; align-items: center; gap: 10px;
	padding: 12px 18px; margin: 0;
	border: 1.5px solid var(--linie); border-radius: 999px;
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	font-size: 0.92rem; font-weight: 600; cursor: pointer;
	transition: border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
body.wbs-body .jet-form-builder__fields-group label:hover {
	border-color: var(--schwarz);
	box-shadow: 0 3px 10px rgba(19,17,16,0.09);
	transform: translateY(-1px);
}
/* Ausgewählter Zustand: die Kachel füllt sich komplett — bisher war nur
   das winzige Häkchen im Kästchen der einzige Hinweis, was ausgewählt
   ist. Braucht :has() (alle gängigen Browser unterstützen das seit
   2023/24); ohne :has()-Unterstützung bleibt einfach nur der Hover-Effekt. */
body.wbs-body .jet-form-builder__fields-group label:has(input:checked) {
	border-color: var(--schwarz);
	background: var(--schwarz); background-image: linear-gradient(var(--schwarz), var(--schwarz));
	color: var(--weiss);
}
body.wbs-body .jet-form-builder__field[type="radio"],
body.wbs-body .jet-form-builder__field[type="checkbox"] {
	width: 18px !important; height: 18px !important; margin: 0 !important;
	accent-color: var(--schwarz); flex: 0 0 auto;
}
body.wbs-body .jet-form-builder__fields-group label:has(input:checked) .jet-form-builder__field {
	accent-color: var(--weiss);
}

/* Auswahllisten bekommen einen eigenen Pfeil, sonst zeichnet jeder
   Browser einen anderen. */
body.wbs-body select.jet-form-builder__field.jet-form-builder__field:not([type="checkbox"]):not([type="radio"]):not([type="submit"]) {
	appearance: none !important; -webkit-appearance: none;
	padding-right: 42px !important;
	background-image:
		url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' fill='none'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23131110' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"),
		linear-gradient(var(--weiss), var(--weiss)) !important;
	background-repeat: no-repeat, no-repeat !important;
	background-position: right 16px center, 0 0 !important;
}

/* Rückmeldungen des Formulars nach dem Absenden. */
body.wbs-body .jet-form-builder-messages-wrap {
	padding: 14px 18px; margin: 0 0 18px;
	border-left: 3px solid var(--gruen); border-radius: var(--r-m);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
	font-size: 0.94rem;
}
body.wbs-body .jet-form-builder-messages-wrap--error { border-left-color: #B4402F; }
/* Solange noch nichts abgeschickt wurde, ist dieser Kasten leer — der
   linke grüne Rand zeichnet an den abgerundeten Ecken einer leeren Box
   aber trotzdem eine sichtbare Mondsichel. Erst zeigen, wenn tatsächlich
   eine Rückmeldung drinsteht. */
body.wbs-body .jet-form-builder-messages-wrap:empty { display: none !important; }

/* =====================================================================
   eLearning
   ===================================================================== */
.el-marke { display: block; width: 190px; max-width: 60%; height: auto; margin: 26px 0 0; }
.el-intro { max-width: 66ch; }

.el-karten { display: grid; gap: 18px; margin-top: 34px; }
.el-karte {
	padding: 26px 22px 24px; border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
}
.el-karte__strich { display: block; width: 42px; height: 4px; margin-bottom: 16px; border-radius: 999px; background: var(--ac, var(--gruen)); }
body.wbs-body .el-karte h3 { font-size: 1.15rem; margin: 0 0 8px; color: var(--schwarz); }
.el-karte p { margin: 0; color: var(--gedimmt); font-size: 0.95rem; line-height: 1.6; }

.el-video { margin: 30px 0 0; }
.el-video video {
	display: block; width: 100%; height: auto; max-width: 100%;
	aspect-ratio: 16 / 9;
	border-radius: var(--r-l); background: var(--schwarz);
}

.el-ablauf { margin-bottom: 40px; }
.el-formular {
	max-width: 620px; padding: 30px 28px;
	border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
}
.el-hinweis { margin: 18px 0 0; font-size: 0.85rem; color: var(--gedimmt); line-height: 1.6; }
.el-schon { margin: 22px 0 0; font-size: 0.94rem; color: var(--gedimmt); }
body.wbs-body .el-schon a { color: var(--schwarz); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }

@media (min-width: 820px) {
	.el-karten { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* =====================================================================
   Feedback
   ===================================================================== */
.fb-dauer { margin: 14px 0 0; font-size: 0.88rem; color: rgba(255,255,255,0.55); }
.fb-formular {
	max-width: 680px; padding: 30px 28px;
	border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
}
.fb-hinweis { max-width: 680px; margin: 20px 0 0; font-size: 0.84rem; color: var(--gedimmt); line-height: 1.6; }

/* =====================================================================
   FAQ — Ergänzungen für die eingepflegten Antworten
   ---------------------------------------------------------------------
   Die Grundgestaltung der Aufklapper steht weiter oben. Hier kommt
   dazu, was in den Antworten vorkommt: Listen, Hotelkästen, Adresse
   und die Karte.
   ===================================================================== */
.faq-spalte { max-width: 860px; }
.faq-haupt { padding-top: 36px; }

/* Katalog-Hauptbereich folgt jetzt direkt auf den weißen Sticky-Header
   (kein Hero mehr davor) — etwas mehr Luft als .faq-haupt, da hier
   nichts (Bild/Farbverlauf) den Übergang abfedert. */
.wbs-katalog-haupt { padding-top: 40px; }
/* Breiter als der Standard-Container (1100px) — bei drei Karten pro
   Zeile bleibt sonst zu wenig Platz und die Karten wirken gequetscht. */
@media (min-width: 1024px) {
	.wbs-katalog-haupt .container { max-width: 1320px; }
}

.answer ul,
.answer ol { margin: 0 0 14px; padding-left: 20px; }
.answer li { margin-bottom: 6px; line-height: 1.6; }
.answer b { color: var(--schwarz); font-weight: 800; }
body.wbs-body .answer a { color: var(--schwarz); text-decoration: underline; text-underline-offset: 3px; }
.answer small { display: inline-block; margin-top: 2px; font-size: 0.86em; color: var(--gedimmt); }
.answer > p:last-child,
.answer > ul:last-child,
.answer > ol:last-child { margin-bottom: 0; }

/* Kontaktzeilen ohne Aufzählungspunkte, damit sie ruhiger wirken. */
.faq-kontakt { list-style: none; margin: 0 0 14px; padding: 0; }
.faq-kontakt li { margin-bottom: 4px; }

/* Restaurantliste: die Einträge sind mehrzeilig, deshalb mehr Luft. */
.faq-liste li { margin-bottom: 12px; }

.faq-adresse {
	padding: 14px 16px; margin: 4px 0 16px;
	border-left: 3px solid var(--gc, var(--gruen)); border-radius: var(--r-m);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
	line-height: 1.6;
}

/* Die beiden Hotels als Kästen nebeneinander. */
.faq-boxen { display: grid; gap: 14px; }
.faq-box {
	padding: 20px 18px; border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
}
body.wbs-body .faq-box h3 { font-size: 1.05rem; margin: 0 0 8px; color: var(--schwarz); }
.faq-box p { margin: 0 0 12px; }
.faq-box .faq-kontakt { margin-bottom: 0; }

/* Die Karte sitzt hier in einer Antwort, also etwas flacher als auf
   der Seminarseite und mit Abstand nach oben. */
.faq-karte { margin: 0 0 10px; aspect-ratio: 16 / 10; }
.answer .sem-karte__link { margin: 0 0 16px; }

@media (min-width: 700px) {
	.faq-boxen { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.faq-karte { aspect-ratio: 21 / 9; }
}

/* --- Danke-Seite: Verweis ins FAQ und Kontaktblock --- */
.danke-text { max-width: 62ch; margin: 0 0 28px; }

.danke-faq { display: grid; gap: 16px; margin-top: 26px; }
.danke-faq__kachel {
	position: relative; display: block; padding: 24px 22px 46px;
	border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--weiss); background-image: linear-gradient(var(--weiss), var(--weiss));
	text-decoration: none; color: var(--schwarz);
	transition: border-color 0.18s ease, transform 0.18s ease;
}
.danke-faq__kachel:hover { border-color: var(--schwarz); transform: translateY(-2px); }
.danke-faq__strich { display: block; width: 38px; height: 4px; margin-bottom: 14px; border-radius: 999px; background: var(--ac, var(--gruen)); }
body.wbs-body .danke-faq__kachel h3 { font-size: 1.06rem; margin: 0 0 6px; color: var(--schwarz); }
.danke-faq__kachel p { margin: 0; font-size: 0.92rem; line-height: 1.6; color: var(--gedimmt); }
.danke-faq__pfeil { position: absolute; left: 22px; bottom: 20px; font-size: 1.1rem; font-weight: 700; }
.danke-faq__alle { margin: 22px 0 0; font-size: 0.94rem; }
body.wbs-body .danke-faq__alle a { color: var(--schwarz); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }

.danke-kontakt {
	max-width: 620px; padding: 28px 26px;
	border: 1px solid var(--linie); border-radius: var(--r-l);
	background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite));
}
body.wbs-body .danke-kontakt h2 { font-size: 1.35rem; margin: 0 0 6px; color: var(--schwarz); }
.danke-kontakt > p { margin: 0 0 18px; color: var(--gedimmt); }
.danke-kontakt ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.danke-kontakt li { display: flex; align-items: center; gap: 12px; }
.danke-kontakt svg { width: 20px; height: 20px; flex: none; stroke: var(--schwarz); }
body.wbs-body .danke-kontakt a { color: var(--schwarz); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }

/* Auf weißem Untergrund (nach dem FAQ-Block) den Kasten absetzen. */
.bg-white .danke-kontakt { background: var(--offwhite); background-image: linear-gradient(var(--offwhite), var(--offwhite)); }

@media (min-width: 860px) {
	.danke-faq { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* Nummerierte Rechtstexte: eigene Zählung im Verzeichnis weglassen.
   Wichtig: hier wieder auf `block` zurück. Der Verweis ist sonst ein
   Raster mit zwei Spalten — ohne die Nummer davor landet jedes Wort in
   einer eigenen Zeile. */
body.wbs-body .recht__inhalt--ohne-nr a { display: block; }
.recht__inhalt--ohne-nr a::before { content: none; }

/* --- Filteroptionen ohne anstehenden Termin --- */
.wbs-opt.is-leer { opacity: 0.4; cursor: not-allowed; }
.wbs-opt.is-leer span { text-decoration: line-through; text-decoration-thickness: 1px; }
.wbs-opt.is-leer input { cursor: not-allowed; }

/* --- Trainer-Gruppenbild: kleiner anzeigen, damit es scharf bleibt --- */
.groupshot { max-width: 760px; }

/* =====================================================================
   JetFormBuilder: Ladering und Fortschrittsbalken ausblenden
   ---------------------------------------------------------------------
   Am Ende der Formulare erscheinen ein grüner Viertelkreis und ein
   grauer Balken. Das sind der Ladering und die Fortschrittsleiste von
   JetFormBuilder. Beide haben hier keine Aufgabe: die Formulare laden
   die Seite nach dem Absenden neu (submit_type="reload"), und einen
   Fortschritt gibt es nicht (enable_progress ist leer).

   Die Namen der Klassen können sich mit einer neuen JetFormBuilder-
   Version ändern, deshalb greifen wir über Wortteile statt über feste
   Klassennamen.
   ===================================================================== */
body.wbs-body .jet-form-builder [class*="progress"],
body.wbs-body .jet-form-builder [class*="loader"],
body.wbs-body .jet-form-builder [class*="spinner"],
body.wbs-body .jet-form-builder [class*="preloader"],
body.wbs-body .jet-form-builder progress,
body.wbs-body .jet-form-builder-progress,
body.wbs-body .jet-fb-loader,
body.wbs-body .jet-form-builder__progress-wrap { display: none !important; }

/* =====================================================================
   Mein Konto: Anmelden und Registrieren auf gleicher Höhe
   ---------------------------------------------------------------------
   WooCommerce gibt die beiden Blöcke mit eigenen Prozentbreiten und
   Floats aus. In einem Raster wirken die Breiten weiter, die Floats
   nicht — dadurch stand Registrieren versetzt unter Anmelden. Hier
   werden beide Angaben neutralisiert und die Blöcke ausdrücklich in
   dieselbe Rasterzeile gesetzt.
   ===================================================================== */
body.wbs-shop #customer_login,
body.wbs-shop .u-columns {
	display: grid !important;
	gap: 24px;
	align-items: start;
	float: none !important;
}
body.wbs-shop .u-column1,
body.wbs-shop .u-column2,
body.wbs-shop #customer_login .col-1,
body.wbs-shop #customer_login .col-2 {
	width: 100% !important;
	max-width: none !important;
	float: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
}
body.wbs-shop .woocommerce-form-login,
body.wbs-shop .woocommerce-form-register { max-width: none; }

@media (min-width: 900px) {
	body.wbs-shop #customer_login,
	body.wbs-shop .u-columns { grid-template-columns: repeat(2, minmax(0, 1fr)); }

	/* Beide ausdrücklich in Zeile 1 — sonst rutscht der zweite Block
	   in die nächste Zeile, sobald WooCommerce Breiten mitgibt. */
	body.wbs-shop .u-column1,
	body.wbs-shop #customer_login .col-1 { grid-column: 1; grid-row: 1; }
	body.wbs-shop .u-column2,
	body.wbs-shop #customer_login .col-2 { grid-column: 2; grid-row: 1; }
}

/* --- eLearning-Kopf: Direkteinstieg rechts --- */
.el-kopf__raster { display: grid; gap: 30px; align-items: center; }
.el-kopf__text { min-width: 0; }

.el-zugang {
	padding: 24px 22px;
	border: 1px solid rgba(255,255,255,0.18);
	border-radius: var(--r-l);
	background: rgba(255,255,255,0.06);
}
.el-zugang__kicker {
	margin: 0 0 12px;
	font-size: 0.76rem; font-weight: 800;
	text-transform: uppercase; letter-spacing: 0.12em;
	color: rgba(255,255,255,0.62);
}
body.wbs-body .el-zugang__knopf {
	display: flex; align-items: center; justify-content: space-between; gap: 12px;
	width: 100%;
	padding: 15px 22px;
	border-radius: var(--r-pill, 999px);
	background: var(--gruen); color: var(--schwarz) !important;
	font-weight: 800; font-size: 1rem; text-decoration: none;
	transition: background 0.2s ease, transform 0.2s ease;
}
body.wbs-body .el-zugang__knopf:hover { background: var(--flieder); transform: translateY(-2px); }
.el-zugang__knopf svg { width: 18px; height: 18px; flex: none; }
/* Der dunkle Kopf färbt jedes span, div und b weiß — im grünen Knopf
   muss die Schrift aber schwarz bleiben. */
body.wbs-body .el-zugang__knopf span { color: var(--schwarz) !important; }
body.wbs-body .el-zugang__knopf:hover span { color: var(--schwarz) !important; }
.el-zugang__hinweis {
	margin: 12px 0 0; font-size: 0.8rem; line-height: 1.5;
	color: rgba(255,255,255,0.55);
}

@media (min-width: 900px) {
	/* Text links, Zugang rechts mittig daneben. */
	.el-kopf__raster { grid-template-columns: minmax(0, 1fr) 330px; gap: 48px; }
}
