/* ==========================================================================
   ekvedo.css – globales ekvedo-CSS (Child-Theme edublink-child)
   Quelle bis Session 02: WP „Zusätzliches CSS“ (custom_css 14754).
   Geladen in functions.php am Ende des <head> (wp_head, Prio 102), also an
   derselben Kaskadenstelle wie zuvor das Zusätzliche CSS.
   Regeln: Präfix ekv-; !important nur gegen EduBlink/Elementor-Spezifität.
   Komponenten mit eigenem JS bleiben im Elementor Custom Code:
   „ekvedo – Quantity Selector CSS/JS“, „ekvedo-sets“.
   ========================================================================== */

/*=== CI-Variablen (projektregeln.md § 6) ===*/
:root {
	--ekv-lila: #782373;
	--ekv-aubergine: #5C1A58;
	--ekv-akzent: #C350DC;
	--ekv-flieder: #EDCBF6;
	--ekv-erfolg: #237828;
	--ekv-text: #505050;
	--ekv-verlauf: linear-gradient(to right, var(--ekv-lila), var(--ekv-akzent));
	--ekv-verlauf-90: linear-gradient(90deg, rgba(120, 35, 115, 1) 0%, rgba(195, 80, 220, 1) 100%);
	--ekv-glow: 0 10px 24px -10px var(--ekv-akzent);
}

/*=== Hinweis elementor-invisible ===*/
/* KEIN pauschales „.elementor-invisible { visibility: visible }“ in Loops: Es machte
   Loop-Elemente mit Eingangsanimation (fadeIn, Aus-/Fortbildungen) vor der Animation
   sichtbar → Blinken (entfernt 06.11.2026). Elementor startet die Animationen selbst. */

/*=== EduBlink Elements ===*/
/* EB Buttons */
.edublink-button-item {
	border-radius: 50px !important;
}
.edublink-button-item:hover {
	box-shadow: var(--ekv-glow);
}

/* Floating Testimonial Cards */
.eb-testimonial-style-card-1 .eb-testimonial-slide .content {
	border-radius: 12px !important;
}

/*=== Header ===*/
/* Top Header */
.eb-header-top-bar {
	background-color: var(--ekv-aubergine);
}
/* Logo anpassen */
.edublink-header-area.edublink-navbar .site-branding {
	max-width: 20em;
}
/* Suchfeld */
.edu-header-search-field .inner {
	border-radius: 50px;
}

.edu-header-search-field .inner:hover {
	border: solid 1px var(--ekv-akzent);
	transition: border 0.5s;
}

/* Shop Button */
.edublink-theme-nav-responsive {
	margin-left: 20px !important;
}

a.edu-btn.btn-medium {
	height: 50px;
	line-height: 50px;
	padding: 0 20px;
	margin-left: 20px;
	border-radius: 50px
}
a.edu-btn.btn-medium:hover {
	box-shadow: var(--ekv-glow);
}

/* Submenu: Transparent-Header → Verlauf */
ul.edublink-dropdown-menu {
	background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,1) 35%) !important;
	border-radius: 0 0 12px 12px !important;
	border: none !important;
	box-shadow: none !important;
}

/* Submenu: Sticky-Header → solides Weiß (EduBlink setzt nur .edublink-header-sticky) */
.edublink-header-sticky ul.edublink-dropdown-menu {
	background: #ffffff !important;
	border-radius: 0 0 10px 10px !important;
	box-shadow: 0 4px 12px rgba(0,0,0,0.1) !important;
}

/* Navigation Menü zentrieren */
.edublink-theme-header-nav {
	flex: 1 !important;
}

.edublink-navbar-primary-menu,
.primary-menu-container-class {
	display: flex !important;
	justify-content: center !important;
	width: 100% !important;
}

ul.edublink-default-header-navbar.edublink-navbar-nav.edublink-navbar-right {
	justify-content: center !important;
	width: auto !important;
	margin-left: auto !important;
	margin-right: auto !important;
}

/* EduBlink-Demo-Klassen: auf Local ohne Treffer, vor dem Entfernen auf nova prüfen */
@media (min-width: 1200px) {
	.eb-course-thumb-400 .edublink-single-course.course-style-5 img {
		min-height: 400px;
		object-fit: cover;
	}
}

.eb-instagram-grid.edublink-row {
	margin-right: -7.5px;
	margin-left: -7.5px;
}

.eb-instagram-grid .edublink-col-md-4 {
	padding-right: 5px;
	padding-left: 5px;
}

/*=== Smart Quiz Builder in CI (Session 04, Leonhard 08.11.) ===*/
/* Der Quiz-Builder schreibt Farben/Schriften als Inline-Stile (style="…") in jedes Element
   → !important ist hier nötig (gegen Inline-Stile, nicht gegen EduBlink).
   Links Flieder, rechts Lila, Antworten als weiße Karten mit CI-Hover, Fortschritt Lila,
   Opt-in-Formular wie die Kasse. Gilt für alle Quizze (#sqb_quiz_builder). */
#sqb_quiz_builder,
#sqb_quiz_builder .Quiz-Template,
#sqb_quiz_builder .Quiz-Optin-Template {
	font-family: 'Open Sans', sans-serif !important;
	color: var(--ekv-text);
}
#sqb_quiz_builder .Quiz-Template.Quiz-Template-5 {
	border: 0 !important;
	border-radius: 12px !important;
	overflow: hidden;
	box-shadow: 0 20px 40px -24px rgba(120, 35, 115, 0.45);
}
/* Fortschritt */
#sqb_quiz_builder .progress {
	height: 8px !important;
	margin-bottom: 24px;
	border-radius: 50px !important;
	background-color: #F4F4F4 !important;
	box-shadow: none;
}
#sqb_quiz_builder .progress-bar {
	border-radius: 50px;
	background-color: var(--ekv-lila) !important;
	transition: width 0.4s ease;
}
/* Linke Seite: Frage auf Flieder */
#sqb_quiz_builder .Quiz-Template5-left-side {
	background-color: var(--ekv-flieder) !important;
	border-radius: 12px 0 0 12px !important;
}
#sqb_quiz_builder .sqb_question_progress,
#sqb_quiz_builder .sqb_question_progress * {
	font-family: 'Poppins', sans-serif !important;
	font-size: 15px !important;
	font-weight: 600;
	color: var(--ekv-lila) !important;
}
#sqb_quiz_builder .Quiz-Template-title,
#sqb_quiz_builder .Quiz-Template-title * {
	font-family: 'Poppins', sans-serif !important;
	font-weight: 600 !important;
	line-height: 1.25 !important;
	color: var(--ekv-lila) !important;   /* Lila auf Flieder 6,3 : 1 */
}
#sqb_quiz_builder .Quiz-Template-5 .Quiz-Template-title {
	font-size: clamp(24px, 2.6vw, 34px) !important;
}
/* Rechte Seite: Antworten auf Lila */
#sqb_quiz_builder .Quiz-Template5-right-side {
	background-color: var(--ekv-lila) !important;
	border-radius: 0 12px 12px 0 !important;
}
#sqb_quiz_builder .sqb_ans_item_outer,
#sqb_quiz_builder .sqb_ans_item,
#sqb_quiz_builder .sqb_ans_item_inner {
	border-radius: 12px !important;
	background: #FFFFFF !important;
	border: 0 !important;
}
#sqb_quiz_builder .sqb_ans_item_outer {
	margin-bottom: 12px;
	cursor: pointer;
}
#sqb_quiz_builder .sql_ans_text,
#sqb_quiz_builder .sql_ans_text * {
	font-family: 'Open Sans', sans-serif !important;
	font-size: 16px !important;
	font-weight: 600 !important;
	color: #181818 !important;
}
#sqb_quiz_builder .sql_ans_text {
	padding: 14px 20px !important;
}
#sqb_quiz_builder .sqb_ans_item_outer:focus-visible {
	outline: 2px solid #FFFFFF;
	outline-offset: 3px;
}
/* Weiter/Zurück, Buttons */
#sqb_quiz_builder .back-next-btn button,
#sqb_quiz_builder .continue_btn,
#sqb_quiz_builder .take-quiz-btn {
	border: 0 !important;
	border-radius: 50px !important;
	background-color: var(--ekv-aubergine) !important;
	color: #FFFFFF !important;
	font-family: 'Poppins', sans-serif !important;
	font-weight: 600 !important;
	cursor: pointer;
	transition: background-color 0.25s ease, box-shadow 0.25s ease;
}
#sqb_quiz_builder .continue_btn *,
#sqb_quiz_builder .take-quiz-btn * {
	font-family: 'Poppins', sans-serif !important;
	font-size: 18px !important;
	font-weight: 600 !important;
	color: #FFFFFF !important;
}
#sqb_quiz_builder .continue_btn {
	padding: 16px 24px !important;
	background-color: var(--ekv-lila) !important;
}
#sqb_quiz_builder .back-next-btn button:hover,
#sqb_quiz_builder .continue_btn:hover,
#sqb_quiz_builder .take-quiz-btn:hover {
	background-color: var(--ekv-aubergine) !important;
	box-shadow: var(--ekv-glow);
}
/* Opt-in (Kontaktdaten am Ende) */
#sqb_quiz_builder .Quiz-Optin-Template {
	border-radius: 12px !important;
	background-color: var(--ekv-flieder) !important;
	padding: 48px 40px !important;
}
#sqb_quiz_builder .Quiz-Optin-Template .Quiz-Template-title,
#sqb_quiz_builder .Quiz-Optin-Template .Quiz-Template-title * {
	font-size: clamp(24px, 2.4vw, 32px) !important;
}
#sqb_quiz_builder .sqb_opt_in_h6,
#sqb_quiz_builder .sqb_opt_in_h6 * {
	font-family: 'Open Sans', sans-serif !important;
	font-size: 17px !important;
	font-weight: 400 !important;
	line-height: 1.5 !important;
	color: #181818 !important;
}
#sqb_quiz_builder .Quiz-Optin-Template input[type="text"],
#sqb_quiz_builder .Quiz-Optin-Template input[type="email"],
#sqb_quiz_builder .Quiz-Optin-Template input.form-control,
#sqb_quiz_builder .Quiz-Optin-Template input#first_name,
#sqb_quiz_builder .Quiz-Optin-Template input#email {
	height: 52px !important;
	padding: 0 16px !important;
	border: 1px solid #E2E2E2 !important;
	border-radius: 12px !important;
	background-color: #FFFFFF !important;
	font-family: 'Open Sans', sans-serif !important;
	font-size: 16px !important;
	color: #181818 !important;
	box-shadow: none !important;
}
#sqb_quiz_builder .Quiz-Optin-Template input:focus {
	border-color: var(--ekv-lila) !important;
	outline: 0;
	box-shadow: inset 0 0 0 1px var(--ekv-lila) !important;
}
#sqb_quiz_builder .sqbcontrol-label {
	font-family: 'Open Sans', sans-serif !important;
	font-size: 14px !important;
	color: var(--ekv-text) !important;
}
#sqb_quiz_builder .checkbox-custom-style {
	border-color: var(--ekv-lila) !important;
	border-radius: 4px !important;
	background: #FFFFFF !important;
}
@media (max-width: 767px) {
	#sqb_quiz_builder .Quiz-Template5-left-side { border-radius: 12px 12px 0 0 !important; }
	#sqb_quiz_builder .Quiz-Template5-right-side { border-radius: 0 0 12px 12px !important; }
	#sqb_quiz_builder .Quiz-Optin-Template { padding: 32px 20px !important; }
}
@media (prefers-reduced-motion: reduce) {
	#sqb_quiz_builder .sqb_ans_item_outer,
	#sqb_quiz_builder .progress-bar { transition: none; }
	#sqb_quiz_builder .sqb_ans_item_outer:hover { transform: none; }
}

/*=== WooCommerce ===*/

/* ===== Preisbox (Shortcode [ekv_preisbox], functions.php) ===== */
.ekv-preisbox { color: var(--ekv-text); }
.ekv-preisbox p { margin: 0; }

/* Label + große Rate */
.ekv-preisbox__label { font-size: .95rem; }
.ekv-preisbox__rate,
.ekv-preisbox__rate .amount { font-size: 2.4rem !important; font-weight: 800; color: var(--ekv-lila) !important; line-height: 1.1; }
.ekv-preisbox__monat { font-size: 1rem; font-weight: 600; color: var(--ekv-lila); }

/* Kaufpreis klein */
.ekv-preisbox__kaufpreis { font-size: .85rem; margin-top: .3rem; }

/* Sofortzahler-Hinweis: Flieder-Box, Ersparnis grün */
.ekv-preisbox__sofort { font-size: .95rem; margin-top: .8rem; padding: .6rem .8rem; background: var(--ekv-flieder); border-radius: 12px; }
.ekv-preisbox__sofort strong,
.ekv-preisbox__sofort strong .amount { color: var(--ekv-erfolg) !important; }

/* Pflichtangaben: klein, aber gut lesbar */
.ekv-preisbox__recht { font-size: .75rem; line-height: 1.4; margin-top: .8rem; }
.ekv-preisbox__recht .amount { font-weight: 400; }

/* Buttons */
.woocommerce button.button.alt {
	border-radius: 50px;
}
/* Leeres del-Tag entfernen das WooCommerce beim Preis mitrendert */
.woocommerce ul.products .price del:empty,
.elementor-loop-container .price del:empty {
	display: none;
}

/* Padding/Margin unter dem Preis zurücksetzen */
.elementor-loop-container .price {
	margin-bottom: 0 !important;
	padding-bottom: 0 !important;
}

/* Einzel Produkt - Bestellen Button */
.single_add_to_cart_button:hover {
	background: var(--ekv-verlauf-90) !important;
	box-shadow: var(--ekv-glow) !important;
}

/*=== Mini-Cart (Elementor Menü-Warenkorb) ===*/

/* --- CONTAINER: Border-Radius + Abstand --- */
.edublink-woo-mini-cart-content {
	border-radius: 12px !important;
	margin-top: 12px !important;
	overflow: visible !important;
	box-shadow: 0 8px 24px rgba(120,35,115,0.12) !important;
}

/* --- PRODUKT ITEM LAYOUT (Grid) --- */
.elementor-menu-cart__product {
	display: grid !important;
	grid-template-columns: 65px 1fr 22px !important;
	grid-template-rows: auto auto !important;
	column-gap: 12px !important;
	row-gap: 4px !important;
	padding: 12px 0 !important;
	border-bottom: 1px solid #f0e0f5 !important;
	align-items: start !important;
}

.elementor-menu-cart__product-image {
	grid-column: 1 !important;
	grid-row: 1 / 3 !important;
}

.elementor-menu-cart__product-image img {
	width: 65px !important;
	height: 65px !important;
	object-fit: cover !important;
	border-radius: 6px !important;
	display: block !important;
}

/* Titel: schwarz */
.elementor-menu-cart__product-name {
	grid-column: 2 !important;
	grid-row: 1 !important;
	font-size: 13px !important;
	font-weight: 600 !important;
	line-height: 1.3 !important;
}

.elementor-menu-cart__product-name a {
	color: #000 !important;
	text-decoration: none !important;
}

/* Preis */
.elementor-menu-cart__product-price {
	grid-column: 2 !important;
	grid-row: 2 !important;
	font-size: 13px !important;
	font-weight: 700 !important;
	color: var(--ekv-lila) !important;
}

.elementor-menu-cart__product-price *,
.elementor-menu-cart__product-price .quantity,
.elementor-menu-cart__product-price .woocommerce-Price-amount {
	color: var(--ekv-lila) !important;
}

/* --- × Löschen BUTTON --- */
.elementor-menu-cart__product-remove {
	grid-column: 3 !important;
	grid-row: 1 !important;
	display: flex !important;
	align-items: flex-start !important;
	justify-content: center !important;
	padding-top: 2px !important;
}

/* WooCommerce-Duplikat verstecken */
.elementor-menu-cart__product-remove a.remove_from_cart_button {
	display: none !important;
}

/* Elementor Remove Button anzeigen */
.elementor-menu-cart__product-remove a.elementor_remove_from_cart_button {
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	width: 20px !important;
	height: 20px !important;
	font-size: 0 !important;           /* Ggf. vorhandenen Text verstecken */
	color: var(--ekv-lila) !important;
	text-decoration: none !important;
	transition: color 0.2s ease !important;
	line-height: 1 !important;
}

/* × Symbol */
.elementor-menu-cart__product-remove a.elementor_remove_from_cart_button::before {
	content: "×" !important;
	font-size: 20px !important;
	font-weight: 300 !important;
	color: var(--ekv-lila) !important;
	line-height: 1 !important;
}

.elementor-menu-cart__product-remove a.elementor_remove_from_cart_button:hover::before {
	color: var(--ekv-akzent) !important;
}

/* --- Zwischensumme --- */
.elementor-menu-cart__subtotal .woocommerce-Price-amount,
.elementor-menu-cart__subtotal .amount {
	color: var(--ekv-lila) !important;
	font-weight: 700 !important;
}

.widget_shopping_cart_content .elementor-button {
	background-color: var(--ekv-lila);
	border-radius: 50px !important;
}

.widget_shopping_cart_content .elementor-button:hover {
	background: var(--ekv-verlauf)
}

/* --- BUTTONS (Gradient-Hover via ::after) --- */
.elementor-menu-cart__footer-buttons {
	display: flex !important;
	flex-direction: column !important;
	gap: 12px !important;
	margin-top: 14px !important;
}

/* Warenkorb anzeigen */
.elementor-button--view-cart {
	position: relative !important;
	background: transparent !important;
	border: 1px solid var(--ekv-lila) !important;
	color: var(--ekv-lila) !important;
	border-radius: 50px !important;
	text-align: center !important;
	overflow: hidden !important;
	transition: color 500ms ease, border-color 500ms ease !important;
}

.elementor-button--view-cart:hover {
	color: #fff !important;
	border-color: var(--ekv-akzent) !important;
}

/* Zur Kasse */
.elementor-button--checkout {
	position: relative !important;
	background: var(--ekv-lila) !important;
	border: 1px solid var(--ekv-akzent) !important;
	color: #fff !important;
	border-radius: 50px !important;
	text-align: center !important;
	overflow: hidden !important;              /* hält den Verlauf im Button */
	transition: color 500ms ease !important;
}

/* Gemeinsamer Verlaufs-Layer beider Mini-Cart-Buttons */
.elementor-button--view-cart .elementor-button-text,
.elementor-button--checkout .elementor-button-text {
	position: relative !important;
	z-index: 2 !important;
}

.elementor-button--view-cart::after,
.elementor-button--checkout::after {
	content: "" !important;
	position: absolute !important;
	inset: 0 !important;
	background: var(--ekv-verlauf) !important;
	opacity: 0 !important;
	transition: opacity 500ms ease !important;
	z-index: 1 !important;
}

.elementor-button--view-cart:hover::after,
.elementor-button--checkout:hover::after {
	opacity: 1 !important;
}

/*=== Warenkorb-Seite ===*/

/* Gutschein Code: Stil siehe „Gutschein: Feld + Button als eine Pill“ (Runde 8) */

/* Warenkorb Summe */
.woocommerce table.shop_table tbody tr td.product-thumbnail a img {
	width: 100px;
	border-radius: 12px;
	aspect-ratio: 1;
	object-fit: cover;
}
.woocommerce .cart_totals{
	border-radius: 12px;
}
/* Weiter zur Kasse - Button */
.woocommerce-cart .wc-proceed-to-checkout a.checkout-button {
	border-radius: 50px;
}
.woocommerce-cart .wc-proceed-to-checkout a.checkout-button:hover {
	background: var(--ekv-verlauf);
}

/*=== Kasse (übernommen von nova, Zusätzliches CSS vom 05.11.2026) ===*/
/* !important gegen EduBlink/WooCommerce-Kassenstile */
/* Zahlungsart-Box */
.woocommerce-checkout-payment {
	background: var(--ekv-flieder) !important;
	border-radius: 12px !important;
}

/* Hintergründe der Zahlungsarten */
#payment div.payment_box::before {
	border: 1em solid #fff !important;
	border-right-color: transparent !important;
	border-left-color: transparent !important;
	border-top-color: transparent !important;
}

#payment div.payment_box {
	background-color: #fff !important;
	border-radius: 12px !important;
}

/* Produktübersicht – Zwischensumme-Box */
.woocommerce-checkout-review-order-table {
	padding: 20px !important;
	background: var(--ekv-flieder) !important;
	border-radius: 12px !important;
}

/*=== Ausbildungsinhalte in den ekvedo-Produkten ===*/
/* Klassenname .ekvedo-… steht im Produktinhalt (Altname, nicht umbenennen) */
.ekvedo-ausbildungsinhalte {
	list-style: none;
	margin: 0;
	padding: 0;
}

.ekvedo-ausbildungsinhalte li {
	display: grid;
	grid-template-columns: 1.8rem minmax(0, 1fr);
	column-gap: 1.4rem;
	align-items: start;
	margin: 0 0 0.4rem;
	padding: 0;
}

.ekvedo-ausbildungsinhalte .ekvedo-icon {
	color: var(--ekv-lila);
	font-size: 1.15em;
	line-height: 1.45;
	text-align: center;
}

/* Letzten Abstand entfernen */
.ekvedo-ausbildungsinhalte li:last-child {
	margin-bottom: 0;
}

/*=== Passwortgeschützte Seiten ===*/
/* Passwort-Formular als zentrierte Card */
.post-password-form {
	max-width: 420px;
	margin: 60px auto;
	padding: 32px;
	background: #FFFFFF;
	border: 1px solid var(--ekv-flieder);
	border-radius: 12px;
	box-shadow: 0 4px 20px rgba(120, 35, 115, 0.08);
	text-align: center;
}

/* Label */
.post-password-form label {
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
	color: var(--ekv-lila);
	display: block;
	margin-bottom: 12px;
}

/* Eingabefeld */
.post-password-form input[type="password"] {
	width: 100%;
	padding: 12px 16px;
	border: 1px solid var(--ekv-akzent);
	border-radius: 50px;
	margin-top: 8px;
	font-family: 'Open Sans', sans-serif;
}
.post-password-form input[type="password"]:focus {
	outline: none;
	border-color: var(--ekv-lila);
	box-shadow: 0 0 0 2px rgba(195, 80, 220, 0.25);
}

/* Button */
.post-password-form input[type="submit"] {
	margin-top: 16px;
	padding: 0px 30px;
	background: var(--ekv-lila);
	color: #FFFFFF;
	border: none;
	border-radius: 50px;
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
	cursor: pointer;
}
.post-password-form input[type="submit"] {
	transition: background 0.5s ease, box-shadow 0.5s ease;
}
.post-password-form input[type="submit"]:hover {
	background: var(--ekv-verlauf-90);
	box-shadow: var(--ekv-glow);
}

/*=== Portrait-Karte (Loop-Vorlagen „Produktkarte Buch Portrait“ 26022 / 27845) ===*/
/* Bis Session 02 als identisches Element-CSS in beiden Vorlagen */
.ekv-portrait-overlay {
	opacity: 0;
	transform: translateY(100%);
	transition: opacity 0.4s ease, transform 0.9s ease;
}
.ekv-portrait-card:hover .ekv-portrait-overlay {
	opacity: 1;
	transform: translateY(0);
}

/*=== Produktkarten im Loop (Vorlage 27939, Session 04, N2) ===*/
/* „Ansehen“ links, „Kaufen“ rechts – auch bei variablen Produkten (Kaufen legt die Standard-Variante per
   AJAX in den Warenkorb, Leonhard 10.11.) */
/* AJAX-„Kaufen“ (functions.php): während des Ladens gedimmt */
.ekv-kaufen .elementor-button.is-loading {
	opacity: 0.6;
	pointer-events: none;
}

/*=== Kasse: zweispaltig ab 992 px (Session 04, K1) ===*/
/* Klassische Kasse ([woocommerce_checkout] + Germanized). EduBlink gibt #customer_details
   width: inherit !important, min-width: 100 % und −15 px Rand → zusammen mit #order_review
   (40 %) breiter als der Container, „Zahlungsart auswählen“ rutschte unter die Rechnungsdaten. */
@media (min-width: 992px) {
	.woocommerce-checkout form.checkout {
		display: grid;
		grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
		column-gap: 40px;
		align-items: start;
	}
	.woocommerce-checkout form.checkout > * {
		grid-column: 1 / -1;
	}
	.woocommerce-checkout form.checkout > #customer_details {
		grid-column: 1;
		grid-row: 1;
		float: none;
		width: auto !important;     /* gegen EduBlink width: inherit !important */
		min-width: 0 !important;    /* gegen EduBlink min-width: 100 % */
		margin: 0 !important;       /* gegen EduBlink −15 px */
	}
	.woocommerce-checkout form.checkout > #order_review {
		grid-column: 2;
		grid-row: 1;
		float: none !important;     /* gegen WooCommerce-Float */
		width: auto !important;     /* gegen WooCommerce 40 % */
	}
}

/*=== Kasse: Bestellübersicht – Menge unter dem Namen, Preis oben (Session 04, K3/N9) ===*/
/* Vorher lief „× 1“ in den Preis („× 125,00 €“) und saß tiefer als der Preis.
   Germanized setzt hier display:flex (Spezifität 0,3,2) → .woocommerce-checkout davor. */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper {
	display: grid;
	grid-template-columns: 60px auto;
	grid-template-rows: auto 1fr;
	column-gap: 12px;
	align-items: start;
	justify-content: start;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper .wc-gzd-cart-item-thumbnail {
	grid-row: span 2;
	width: 60px;
	min-width: 0;
	max-width: none;
	margin-right: 0;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.cart_item .product-quantity {
	display: block;
	font-weight: 400;
	white-space: nowrap;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.cart_item td {
	vertical-align: top;
}

/*=== Produktbilder: 12 px auch bei Produkten mit nur einem Bild (Session 04, N3) ===*/
/* Elementors Radius (Widget „Produktbilder“) greift nur auf .flex-viewport (mehrere Bilder)
   bzw. mit Zoom-Symbol; Einzelbild-Produkte blieben eckig. */
.elementor-widget-woocommerce-product-images .woocommerce-product-gallery__image {
	border-radius: 12px;
	overflow: hidden;
}

/*=== Produktseite: „In den Warenkorb“ einzeilig und mittig (Session 04, N4/N8) ===*/
/* EduBlink: Höhe 60 px mit line-height 62 px → Text saß zu tief bzw. die zweite Zeile
   („Warenkorb“) wurde abgeschnitten. */
.single-product form.cart .single_add_to_cart_button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	line-height: 1.2;
	white-space: nowrap;
}

/*=== Ausbildungen (Vorlage 23546): variable Produkte (Session 04, N8) ===*/
/* Keine Mengenauswahl; Preisspanne durch [ekv_preisvarianten] ersetzt (functions.php).
   .elementor-23546 und .product-type-* sitzen am selben Wrapper. */
/* Preis-Widget aus, sobald [ekv_preisvarianten] direkt dahinter etwas ausgibt (variable
   Ausbildungen und einfache Finanzierungsprodukte mit Angebotspreis) – auf der Produktseite und
   in Karten. Leeres Shortcode-Widget ganz aus. (Vorher: Klassen am Wrapper → traf auch die
   Preise der Karten unten auf der Seite.) */
.ekv-preis-spanne:has(+ .ekv-preisvarianten-widget .ekv-preisvarianten),
.ekv-preisvarianten-widget:not(:has(.ekv-preisvarianten)) {
	display: none;
}
/* Ausbildungen: keine Mengenauswahl (Leonhard 08.11.: „komplett entfernen“). !important, weil
   WooCommerce sie nach der Variantenwahl per Inline-Stil wieder einblendet ($qty.show()). */
.elementor-23546 form.cart .quantity,
.elementor-23546 form.cart div.quantity.ekv-qty[style*="display"] { /* 0,5,2: schlägt die Pill-Regel unten (0,5,1) */
	display: none !important;
}
/* „In den Warenkorb“ in der Überblick-Box zentriert (Leonhard 08.11., vorher rechtsbündig) */
.elementor-23546 form.cart:not(.variations_form),
.elementor-23546 form.cart .woocommerce-variation-add-to-cart {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
}
.ekv-preisvarianten-widget {
	container-type: inline-size;
}
.ekv-preisvarianten {
	display: flex;
	flex-wrap: wrap;
	gap: 8px 12px;
}
.ekv-preisvariante {
	display: flex;
	flex-direction: column;
	color: var(--ekv-lila);
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
}
.ekv-preisvariante__preis {
	/* passt beide Preise + „oder“ in eine Zeile (Seitenleiste ≈ 357 px); px: EduBlink 1 rem = 10 px */
	font-size: clamp(20px, calc((100cqi - 60px) / 10.8), 28px);
	line-height: 1.2;
}
.ekv-preisvariante__preis del {
	display: block;
	font-size: 16px;
	font-weight: 400;
	color: var(--ekv-text);
}
.ekv-preisvariante__name {
	font-size: 16px;
	line-height: 1.4;
}

/*=== WooCommerce-Meldungen: CI-Radius und CI-Button (Session 04, Leonhard 07.11.) ===*/
/* EduBlink: Radius 5 px, Button schwarz #181818, 12 px Großbuchstaben. Elementor bietet für
   Meldungen außerhalb seiner Warenkorb-/Kassen-Widgets keine globale Einstellung. */
/* .e-wc-*-notice: Elementors Meldungs-Stile (Kit „WooCommerce-Meldungen“) setzen Radius 0 */
.woocommerce-message,
.woocommerce-info,
.woocommerce-error,
.e-wc-message-notice .woocommerce-message,
.e-wc-info-notice .woocommerce-info,
.e-wc-error-notice .woocommerce-error {
	border-radius: 12px;
}
/* WooCommerce fokussiert die Meldung (Screenreader) → CI-Rahmen statt Browser-Blau */
/* Meldungen: WooCommerce fokussiert sie nur, damit Screenreader sie vorlesen; sie sind kein
   Bedienelement → kein sichtbarer Fokusrahmen (wirkte auf Lila wie ein dunkler Rand). */
.woocommerce-message:focus,
.woocommerce-info:focus,
.woocommerce-error:focus,
.woocommerce-NoticeGroup:focus {
	outline: none;
}
body :is(.woocommerce-message, .woocommerce-info, .woocommerce-error) a.button {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	padding: 0 22px;
	border: 0;
	border-radius: 50px;
	background: #FFFFFF !important;     /* gegen EduBlink-!important (schwarz) */
	color: var(--ekv-lila);
	font-family: 'Poppins', sans-serif;
	font-size: 14px !important;         /* gegen EduBlink-!important (12 px) */
	font-weight: 600 !important;        /* gegen EduBlink-!important (700) */
	text-transform: none;
	text-decoration: none;
	letter-spacing: 0;
	transition: background-color 0.25s ease, color 0.25s ease;
}
body :is(.woocommerce-message, .woocommerce-info, .woocommerce-error) a.button:hover {
	background: var(--ekv-flieder) !important; /* gegen EduBlink-!important */
	color: var(--ekv-aubergine);
}
body :is(.woocommerce-message, .woocommerce-info, .woocommerce-error) a.button:focus-visible {
	outline: 2px solid #FFFFFF;
	outline-offset: 2px;
}
@media (prefers-reduced-motion: reduce) {
	body :is(.woocommerce-message, .woocommerce-info, .woocommerce-error) a.button { transition: none; }
}
/* Fehlermeldungen: Text war weiß auf Hellrosa (EduBlink color: #fff) → unlesbar (Kontrast ≈ 1,1 : 1).
   CI-Text dunkel, Links unterstrichen (Unterscheidung nicht nur über Farbe). */
body .woocommerce-error,
body .woocommerce-error li,
body .woocommerce-error a {
	color: #181818;
}
body .woocommerce-error a {
	text-decoration: underline;
}
/* Fehlermeldungen in CI-Fehlerrot (Leonhard 08.11.): ganzer Rahmen statt Elementors 3-px-Strich
   oben in #B81C23; Fokusrahmen (WooCommerce/Mollie fokussieren die Meldung) ebenfalls Rot statt
   Aubergine – das war der „schwarze Rahmen“. */
/* Elementor setzt die Klasse e-wc-error-notice am <body> und färbt mit .e-wc-error-notice
   .woocommerce-error (0,2,0) → hier body.e-wc-error-notice (0,2,1). */
body .woocommerce-error,
body.e-wc-error-notice .woocommerce-error {
	--error-message-icon-color: #C0342B;  /* Elementor-Symbolfarbe */
	border: 1px solid #C0342B;
	background: #FCF1F0;
}
body .woocommerce-error::before,
body.e-wc-error-notice .woocommerce-error::before {
	color: #C0342B;
}
body .woocommerce-error:focus {
	outline: none;
}

/*=== Produktseite: Variationen in CI (Session 04, Leonhard 07.11.) ===*/
/* EduBlink/Bootstrap: table-bordered/-striped, zentriert, 12 px Zellabstand, Select Arial ohne Radius. */
.single-product table.variations,
.single-product table.variations tbody tr,
.single-product table.variations th,
.single-product table.variations td {
	border: 0 !important;               /* gegen .table-bordered */
	background: transparent !important; /* gegen .table-striped */
}
.single-product table.variations {
	margin-bottom: 8px;
}
.single-product table.variations th.label {
	width: 1%;
	padding: 15px 16px 6px 0;           /* Label auf Höhe der Feldmitte (gemessen, 1440 und 390 px) */
	text-align: right;
	vertical-align: top !important;     /* oben statt Mitte: „Zurücksetzen“ macht Zeile 2 höher */
	white-space: nowrap;
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
	font-size: 15px;
	color: #181818;
}
.single-product table.variations th.label label {
	margin: 0 !important;               /* gegen EduBlink-Labelabstand (Label saß zu hoch) */
	line-height: 1.4;
}
.single-product table.variations td.value {
	padding: 6px 0;
	text-align: left;
}
.single-product table.variations select {
	width: 100%;
	max-width: 100%;
	height: 48px;
	padding: 0 40px 0 16px;
	border: 1px solid #E2E2E2;
	border-radius: 12px;
	background-color: #FFFFFF;
	font-family: 'Open Sans', sans-serif;
	font-size: 15px;
	color: #181818;
	cursor: pointer;
	transition: border-color 0.2s ease;
}
.single-product table.variations select:hover {
	border-color: var(--ekv-akzent);
}
/* Fokus: ein Rahmen (vorher Rand + abgesetzter Outline = Doppelrahmen). 1 px Rand + 1 px
   Schatten innen = 2 px Lila, ohne dass sich der Inhalt verschiebt. */
.single-product table.variations select:focus,
.single-product table.variations select:focus-visible,
.single-product table.variations select:open {
	border-color: var(--ekv-lila);
	outline: 0;
	box-shadow: inset 0 0 0 1px var(--ekv-lila);
}
/* Ausklappliste in CI, wo der Browser es kann (Chrome/Edge ab 135, „customizable select“);
   Safari/Firefox zeigen weiter die Systemliste – gleiches Feld, gleiche Funktion. */
@supports (appearance: base-select) {
	.single-product table.variations select,
	.single-product table.variations select::picker(select) {
		appearance: base-select;
	}
	.single-product table.variations select {
		display: flex;
		align-items: center;
	}
	.single-product table.variations select::picker-icon {
		display: none;                      /* Pfeil kommt weiter aus dem Hintergrundbild */
	}
	.single-product table.variations select::picker(select) {
		margin-top: 6px;
		padding: 6px;
		border: 1px solid #E2E2E2;
		border-radius: 12px;
		background: #FFFFFF;
		box-shadow: 0 16px 32px -16px rgba(120, 35, 115, 0.45);
	}
	.single-product table.variations select option {
		padding: 10px 12px;
		border-radius: 8px;
		font-family: 'Open Sans', sans-serif;
		font-size: 15px;
		color: #181818;
		cursor: pointer;
		transition: background-color 0.15s ease;
	}
	.single-product table.variations select option::checkmark {
		display: none;
	}
	.single-product table.variations select option:hover,
	.single-product table.variations select option:focus-visible {
		background: var(--ekv-flieder);
		outline: 0;
	}
	.single-product table.variations select option:checked {
		font-weight: 600;
		color: var(--ekv-lila);
	}
	.single-product table.variations select option:disabled {
		color: #8C8C8C;
		cursor: not-allowed;
	}
}
.single-product table.variations .reset_variations {
	display: block;
	margin-top: 6px;
	text-align: right;
	font-size: 14px;
	color: var(--ekv-lila);
	text-decoration: underline;
}
/* Variantenbeschreibung („Spare …“) und Lagerbestand in einer Zeile */
.single-product .woocommerce-variation.single_variation {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: 4px 16px;
	margin-bottom: 16px;
}
.single-product .woocommerce-variation.single_variation p {
	margin: 0;
}
.single-product .woocommerce-variation.single_variation:empty {
	display: none;
}
/* Lager-Ampel (Leonhard 08.11.): grün vorrätig · gelb gering (Klasse ekv-lager-gering aus
   functions.php) · rot vergriffen. Punkt = Signalfarbe, Text = kontraststarke Variante
   (Gold #D98F1F hätte als Text nur 2,7 : 1 → Text #9A5B00, 5,4 : 1). */
.woocommerce div.product .stock {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}
.woocommerce div.product .stock::before {
	content: "";
	flex: 0 0 auto;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: currentColor;
}
.woocommerce div.product .stock.in-stock {
	color: var(--ekv-erfolg);
}
.woocommerce div.product .stock.in-stock.ekv-lager-gering {
	color: #9A5B00;
}
.woocommerce div.product .stock.in-stock.ekv-lager-gering::before {
	background: #D98F1F;
}
.woocommerce div.product .stock.out-of-stock {
	color: #C0342B;
}

/*=== Produktseite: Tabs und „Zusätzliche Informationen“ (Session 04) ===*/
/* Doppelstrich: Tab-Leiste (unten) + Panel (oben) hatten je eine Linie → Panel-Linie weg. */
.woocommerce div.product .woocommerce-tabs .panel,
.woocommerce div.product .woocommerce-tabs .woocommerce-Tabs-panel {
	border-top: 0 !important;           /* gegen EduBlink-Panelrahmen */
}
.woocommerce table.woocommerce-product-attributes,
.woocommerce table.woocommerce-product-attributes tr,
.woocommerce table.woocommerce-product-attributes th,
.woocommerce table.woocommerce-product-attributes td {
	border: 0 !important;               /* gegen .table-bordered */
	background: transparent !important; /* gegen .table-striped */
	vertical-align: middle !important;  /* gegen EduBlink .table > tbody > tr > td */
}
.woocommerce table.woocommerce-product-attributes tr + tr th,
.woocommerce table.woocommerce-product-attributes tr + tr td {
	border-top: 1px solid #E2E2E2 !important;
}
.woocommerce table.woocommerce-product-attributes th {
	width: 35%;
	padding: 12px 16px 12px 0;
	text-align: right;
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
	color: #181818;
}
.woocommerce table.woocommerce-product-attributes td {
	padding: 12px 0 12px 16px;
	text-align: left;
	font-style: normal;
	color: var(--ekv-text);
}
.woocommerce table.woocommerce-product-attributes td p {
	margin: 0;
	font-style: normal;
}

/*=== Button-Effekt „Verlaufswelle“ (Session 04, Leonhard 08.11.: „auf alle Buttons“) ===*/
/* Hover: der Verlauf gleitet mit weicher Kante von links herein. Maus weg: das Lila gleitet
   ebenfalls von links darüber (keine Rückwärtsbewegung, kein Blinken).
   Zwei Ebenen unter dem Text: ::before = Verlauf, ::after = Lila. Beim Hineingehen springt
   ::after unsichtbar weg (gleiche Farbe wie der Button), beim Verlassen gleitet es herein, danach
   springt ::before verdeckt zurück. Breite 140 %: die letzten 40 % laufen weich aus (Maske).
   Gilt für alle GEFÜLLTEN lila Buttons: Warenkorb/Kasse/Sets/EduBlink per Klasse, Elementor-
   Buttons mit Hintergrund #782373 bekommen .ekv-welle per Skript (functions.php) – Kontur-,
   Gold- und Magenta-Buttons bleiben unverändert. !important: gegen EduBlink-Hover-Farben und
   EduBlinks eigene ::after-Ebene. */
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn) {
	position: relative;
	isolation: isolate;                 /* Ebenen bleiben unter dem Text */
	overflow: hidden;
	background: var(--ekv-lila) !important;
	transition: box-shadow 0.5s ease !important; /* Glow beim Hover sanft ein und aus (Leonhard 09.11.) */
}
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn)::before,
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn)::after {
	content: "" !important;
	position: absolute !important;
	z-index: -1 !important;
	top: 0 !important;
	bottom: 0 !important;
	left: 0 !important;
	right: auto !important;
	width: 140% !important;
	height: auto !important;
	margin: 0 !important;
	border-radius: 0 !important;
	opacity: 1 !important;
	animation: none !important;         /* WooCommerce dreht ::after beim Laden (Iconfont) */
	pointer-events: none;
	-webkit-mask-image: linear-gradient(90deg, #000 71%, transparent);
	mask-image: linear-gradient(90deg, #000 71%, transparent);
}
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn)::before {
	background: linear-gradient(90deg, var(--ekv-lila) 0%, var(--ekv-akzent) 71%) !important;
	transform: translateX(-100%) !important;
	transition: transform 0s linear 0.7s !important;   /* erst zurück, wenn ::after ihn verdeckt */
}
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn)::after {
	background: var(--ekv-lila) !important;
	transform: translateX(0) !important;
	transition: transform 0.7s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn):not(.disabled):is(:hover, :focus-visible)::before {
	transform: translateX(0) !important;
	transition: transform 0.7s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn):not(.disabled):is(:hover, :focus-visible)::after {
	transform: translateX(-100%) !important;
	transition: none !important;
}
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn):is(:hover, :focus) {
	color: #FFFFFF !important;          /* gegen Hover-Textfarben (EduBlink/Elementor) */
}
:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn):focus-visible {
	outline: 2px solid var(--ekv-aubergine);
	outline-offset: 3px;
}
@media (prefers-reduced-motion: reduce) {
	:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn)::before,
	:is(.ekv-welle, .wc-proceed-to-checkout .checkout-button, .single-product form.cart .single_add_to_cart_button, #place_order, .edu-btn, a.edublink-button-item, button.edublink-button-item, #sqb_quiz_builder .continue_btn)::after { transition: none !important; }
}
/* Nach dem Hinzufügen („Warenkorb anzeigen“, ekvedo-produkt.js) und während des Ladens */
.single-product form.cart .single_add_to_cart_button.loading {
	opacity: 0.7;
	pointer-events: none;
}
.ekv-kauf-fehler {
	flex-basis: 100%;
	margin: 8px 0 0;
	font-size: 14px;
	color: #C0342B;
}

/*=== Ausbildung: „oder“ und Klarna-Konditionen (Session 04) ===*/
.ekv-preisvarianten {
	align-items: flex-end;
}
.ekv-preisvarianten__oder {
	align-self: center;
	font-family: 'Open Sans', sans-serif;
	font-size: 15px;
	color: var(--ekv-text);
}
.ekv-preisvariante__name {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}
.ekv-info {
	position: relative;
	display: inline-flex;
}
.ekv-info__knopf {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 24px;
	height: 24px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--ekv-lila);
	cursor: help;
}
.ekv-info__knopf:focus-visible {
	outline: 2px solid var(--ekv-lila);
	outline-offset: 2px;
}
.ekv-info__inhalt {
	position: absolute;
	z-index: 50;
	top: calc(100% + 8px);
	right: -12px;
	width: min(320px, 80vw);
	padding: 12px 16px;
	border: 1px solid #E2E2E2;
	border-radius: 12px;
	background: #FFFFFF;
	box-shadow: 0 10px 30px -10px rgba(120, 35, 115, 0.35);
	font-family: 'Open Sans', sans-serif;
	font-size: 14px;
	font-weight: 400;
	color: var(--ekv-text);
	visibility: hidden;
	opacity: 0;
	transition: opacity 0.2s ease, visibility 0.2s;
}
.ekv-info:hover .ekv-info__inhalt,
.ekv-info:focus-within .ekv-info__inhalt {
	visibility: visible;
	opacity: 1;
}

/*=== Kasse: Formular in CI (Session 04, Leonhard 07.11.) ===*/
.woocommerce-checkout .woocommerce-billing-fields h3,
.woocommerce-checkout .woocommerce-additional-fields h3,
.woocommerce-checkout #order_payment_heading {
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
	color: #181818;
	border-bottom-color: #E2E2E2;
}
.woocommerce-checkout form.checkout .form-row label {
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
	font-size: 14px;
	color: #181818;
}
.woocommerce-checkout form.checkout .form-row abbr.required,
.woocommerce-checkout form.checkout .form-row .required {
	color: #C0342B !important;          /* gegen EduBlink (schwarz) */
	text-decoration: none;
}
/* „Lieferung an eine andere Adresse?“ wie die übrigen Abschnittsüberschriften */
.woocommerce-checkout #ship-to-different-address,
.woocommerce-checkout #ship-to-different-address label {
	font-family: 'Poppins', sans-serif;
	font-size: 18px;
	font-weight: 600;
	color: #181818;
}
.woocommerce-checkout form.checkout .form-row input.input-text,
.woocommerce-checkout form.checkout .form-row textarea,
.woocommerce-checkout form.checkout .select2-container .select2-selection--single {
	height: 52px;
	padding: 0 16px;
	border: 1px solid #E2E2E2;
	border-radius: 12px;
	background: #FFFFFF;
	font-family: 'Open Sans', sans-serif;
	font-size: 16px;                    /* ≥ 16 px: kein Zoom auf iOS */
	color: #181818;
	box-shadow: none;
	transition: border-color 0.2s ease;
}
.woocommerce-checkout form.checkout .form-row textarea {
	height: auto;
	min-height: 96px;
	padding: 12px 16px;
}
/* Land/Region: Text und Pfeil mittig (vorher 8 px Innenabstand oben → Text 66 px hoch, zu tief;
   Pfeil 13 px nach unten versetzt) */
.woocommerce-checkout form.checkout .select2-container .select2-selection--single {
	display: flex;
	align-items: center;
}
.woocommerce-checkout form.checkout .select2-container .select2-selection--single .select2-selection__rendered {
	flex: 1 1 auto;
	padding: 0 24px 0 0;
	line-height: 50px;
}
.woocommerce-checkout form.checkout .select2-container .select2-selection--single .select2-selection__arrow {
	top: 0;
	right: 12px;
	height: 50px;
	display: flex;
	align-items: center;
}
.woocommerce-checkout form.checkout .select2-container .select2-selection--single .select2-selection__arrow b {
	position: static;
	margin: 0;
}
.woocommerce-checkout form.checkout .form-row input.input-text:focus,
.woocommerce-checkout form.checkout .form-row textarea:focus {
	border-color: var(--ekv-lila) !important; /* auch über dem grünen „gültig“-Rand */
	outline: none;                      /* 1 px Rahmen genügt (Leonhard 09.11.: kein doppelter Rahmen) */
	box-shadow: none;
}
.woocommerce-checkout form.checkout .form-row.woocommerce-validated input.input-text {
	border-color: var(--ekv-erfolg);
}
/* Fehlende/ungültige Angaben: 1 px CI-Fehlerrot (Leonhard 09.11.: kein doppelter Rahmen) */
.woocommerce-checkout form.checkout .form-row.woocommerce-invalid input.input-text,
.woocommerce-checkout form.checkout .form-row.woocommerce-invalid textarea,
.woocommerce-checkout form.checkout .form-row.woocommerce-invalid .select2-selection {
	border-color: #C0342B;
	box-shadow: none;
}
.woocommerce-checkout form.checkout .form-row.woocommerce-invalid input[type="checkbox"] {
	outline: 2px solid #C0342B;
	outline-offset: 2px;
}
.woocommerce-checkout form.checkout .form-row.woocommerce-invalid label,
.woocommerce-checkout form.checkout .checkout-inline-error-message {
	color: #C0342B;
}

/*=== Kasse: Bestellübersicht (Session 04, Leonhard 07.11.) ===*/
/* Linien hell (Weiß auf Flieder), Gesamtsumme größer mit Linie darüber. */
.woocommerce-checkout table.woocommerce-checkout-review-order-table th,
.woocommerce-checkout table.woocommerce-checkout-review-order-table td {
	border-color: rgba(255, 255, 255, 0.9);
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total th,
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total td {
	padding-top: 16px;
	border-top: 0;                      /* Linie unter dem Gutschein entfernt (Leonhard 09.11.) */
}
/* „inkl. MwSt.“ näher an die Gesamtsumme */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-tax th,
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-tax td {
	padding-top: 0;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total th,
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total td,
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total td strong,
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total td .amount {
	font-family: 'Poppins', sans-serif;
	font-size: 20px;
	font-weight: 600;
	color: #181818;
}
/* Bild | Name; die Menge steht als „1 ×“ in der Betragsspalte (functions.php).
   Explizite Plätze: das &nbsp; aus dem Woo-Template wäre sonst eine eigene Rasterzelle;
   font-size 0 am Wrapper macht es unsichtbar, der Name bekommt seine Größe zurück. */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper {
	grid-template-columns: 60px minmax(0, 1fr);
	grid-template-rows: auto;
	font-size: 0;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper .wc-gzd-cart-item-thumbnail {
	grid-column: 1;
	grid-row: 1;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper .ekv-artikel {
	grid-column: 2;
	grid-row: 1;
	font-size: 15px;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table td.product-total {
	white-space: nowrap;
}
.ekv-menge {
	font-weight: 400;
	color: var(--ekv-text);
}
.ekv-zeilensumme {
	display: block;
	font-weight: 600;
}
.ekv-artikel {
	display: flex;
	flex-direction: column;
	gap: 2px;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table a.ekv-auswahl-aendern {
	font-size: 14px;
	color: var(--ekv-lila) !important; /* gegen EduBlink-Linkfarbe in Tabellen */
	text-decoration: underline;
}
/* Gutschein-Zeile unter der Zwischensumme */
.ekv-gutschein {
	display: flex;
	gap: 0;
}
.ekv-gutschein input {
	flex: 1 1 auto;
	min-width: 0;
	height: 44px;
	padding: 0 16px;
	border: 1px solid #E2E2E2;
	border-radius: 50px;
	background: #FFFFFF;
	font-family: 'Open Sans', sans-serif;
	font-size: 16px;
}
.ekv-gutschein.is-loading {
	opacity: 0.6;
	pointer-events: none;
}

/*=== Elementor „Sticky“: Platzhalter-Kopie ganz unsichtbar (Session 04) ===*/
/* Beim Mitlaufen legt Elementor Pro eine unsichtbare Kopie des Elements an (visibility:hidden).
   WooCommerce setzt am „Zurücksetzen“-Link aber style="visibility: visible" → der Link der Kopie
   erschien als zweites „Zurücksetzen“ (Ausbildungs-Seitenleiste 23546). */
.elementor-sticky__spacer,
.elementor-sticky__spacer * {
	visibility: hidden !important;      /* gegen WooCommerces Inline-Stil */
}

/*=== Mengenauswahl: nach der Variantenwahl wieder als Pill (Session 04) ===*/
/* WooCommerce blendet die Menge per $qty.show() ein → Inline display:block, die − / + standen
   dann untereinander. Nur diesen Fall auf inline-flex zurückstellen. */
.woocommerce form.cart .quantity.ekv-qty[style*="display: block"] {
	display: inline-flex !important;    /* gegen WooCommerces Inline-Stil */
}

/*=== Ergänzende Aus-/Fortbildungen & Hilfreiche Ergänzungen: leere Abschnitte aus (Session 04) ===*/
/* Abschnitte mit Klasse ekv-zusatzverkauf (Vorlagen 24415/23546) verschwinden samt Überschrift,
   wenn das Produkt keine Up- bzw. Cross-Sells hat. */
.ekv-zusatzverkauf:not(:has(.e-loop-item)) {
	display: none;
}

/*=== Kacheln: ein Hover-Stil für alle (Session 04, N1, Leonhard 08.11.) ===*/
/* Referenz „Wer mit ekvedo gelernt hat“ (Loop-Vorlage 28036): 5 px anheben, Flieder-Akzent-
   Schatten, 0,5 s. Klasse ekv-karte setzt aenderungen/04-paket3.php an allen Kacheln und
   entfernt dort die eigenen Elementor-Hover-Einstellungen. Werte zentral hier einstellen.
   Spezifität 0,4,0: über Elementors Element-CSS (0,3,0), daher ohne !important. */
:root {
	--ekv-karte-hub: -5px;
	--ekv-karte-schatten: 0 20px 30px -20px #C350DC;
	--ekv-karte-dauer: 0.5s;
}
.elementor .elementor-element.ekv-karte:is(.e-con, .elementor-column),
.elementor .elementor-element.ekv-karte > .elementor-widget-wrap {
	transition: transform var(--ekv-karte-dauer) ease, box-shadow var(--ekv-karte-dauer) ease;
}
@media (hover: hover) {
	.elementor .elementor-element.ekv-karte:is(.e-con, .elementor-column):hover {
		transform: translateY(var(--ekv-karte-hub));
	}
	.elementor .elementor-element.ekv-karte.e-con:hover,
	.elementor .elementor-element.ekv-karte.elementor-column:hover > .elementor-widget-wrap {
		box-shadow: var(--ekv-karte-schatten);
	}
}
/* Tastatur: Kachel mit fokussiertem Link/Button hebt sich ebenso */
.elementor .elementor-element.ekv-karte:is(.e-con, .elementor-column):focus-within {
	transform: translateY(var(--ekv-karte-hub));
}
.elementor .elementor-element.ekv-karte.e-con:focus-within,
.elementor .elementor-element.ekv-karte.elementor-column:focus-within > .elementor-widget-wrap {
	box-shadow: var(--ekv-karte-schatten);
}
@media (prefers-reduced-motion: reduce) {
	.elementor .elementor-element.ekv-karte:is(.e-con, .elementor-column),
	.elementor .elementor-element.ekv-karte > .elementor-widget-wrap { transition: none; }
	.elementor .elementor-element.ekv-karte:is(.e-con, .elementor-column):is(:hover, :focus-within) { transform: none; }
}

/*=== Konditionen-Info (ⓘ) mit Text aus der Variantenbeschreibung (Session 04, Plan B) ===*/
.ekv-info__inhalt p {
	margin: 0;
}
.ekv-info__inhalt p + p {
	margin-top: 8px;
}

/*=== Mengenauswahl: Verlaufswelle in Zählrichtung (Session 04, Leonhard 08.11.) ===*/
/* − : Verlauf gleitet von rechts nach links herein, Spitze (Akzent) zeigt nach links;
   + : von links nach rechts, Spitze nach rechts. Maus weg: Weiß gleitet in derselben Richtung
   darüber. Ebenen wie bei den Buttons (::before Verlauf, ::after Weiß, weiche Kante 40 %). */
.woocommerce form.cart .quantity.ekv-qty .ekv-step {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	transition: color 0.2s ease 0.15s !important;
}
.woocommerce form.cart .quantity.ekv-qty .ekv-step:hover {
	background: transparent !important;  /* ersetzt den flächigen Lila-Hover (Snippet 25372) */
}
.woocommerce form.cart .quantity.ekv-qty .ekv-step::before,
.woocommerce form.cart .quantity.ekv-qty .ekv-step::after {
	content: "";
	position: absolute;
	z-index: -1;
	top: 0;
	bottom: 0;
	width: 140%;
	pointer-events: none;
}
.woocommerce form.cart .quantity.ekv-qty .ekv-plus::before,
.woocommerce form.cart .quantity.ekv-qty .ekv-plus::after {
	left: 0;
	-webkit-mask-image: linear-gradient(90deg, #000 71%, transparent);
	mask-image: linear-gradient(90deg, #000 71%, transparent);
}
.woocommerce form.cart .quantity.ekv-qty .ekv-minus::before,
.woocommerce form.cart .quantity.ekv-qty .ekv-minus::after {
	right: 0;
	-webkit-mask-image: linear-gradient(270deg, #000 71%, transparent);
	mask-image: linear-gradient(270deg, #000 71%, transparent);
}
.woocommerce form.cart .quantity.ekv-qty .ekv-plus::before {
	background: linear-gradient(90deg, var(--ekv-lila) 0%, var(--ekv-akzent) 71%);
	transform: translateX(-100%);
	transition: transform 0s linear 0.5s;
}
.woocommerce form.cart .quantity.ekv-qty .ekv-minus::before {
	background: linear-gradient(270deg, var(--ekv-lila) 0%, var(--ekv-akzent) 71%);
	transform: translateX(100%);
	transition: transform 0s linear 0.5s;
}
.woocommerce form.cart .quantity.ekv-qty .ekv-step::after {
	background: #FFFFFF;
	transform: translateX(0);
	transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.woocommerce form.cart .quantity.ekv-qty .ekv-step:is(:hover, :focus-visible)::before {
	transform: translateX(0);
	transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.woocommerce form.cart .quantity.ekv-qty .ekv-plus:is(:hover, :focus-visible)::after {
	transform: translateX(-100%);
	transition: none;
}
.woocommerce form.cart .quantity.ekv-qty .ekv-minus:is(:hover, :focus-visible)::after {
	transform: translateX(100%);
	transition: none;
}
.woocommerce form.cart .quantity.ekv-qty .ekv-step:is(:hover, :focus-visible) {
	color: #FFFFFF !important;          /* gegen Snippet 25372 (Lila-Text mit !important) */
	transition: color 0.15s ease !important;
}
@media (prefers-reduced-motion: reduce) {
	.woocommerce form.cart .quantity.ekv-qty .ekv-step::before,
	.woocommerce form.cart .quantity.ekv-qty .ekv-step::after { transition: none !important; }
}

/*=== Karten in Rastern: gleiche Höhe, Radien oben (Session 04, Leonhard 08.11.) ===*/
/* Karte füllt die Rasterzelle (Raster mit „Gleiche Höhe“, 04-paket4.php); Titel/Text oben,
   Preis + Buttons unten bündig. --justify-content: Elementors Container-Variable; 0,4,0 schlägt
   das Element-CSS der Loop-Vorlagen (0,3,0, im Body später geladen). */
.elementor .e-loop-item > .ekv-karte.e-con {
	height: 100%;
	--justify-content: flex-start;
}
.elementor .e-loop-item > .ekv-karte.e-con > .e-con:last-child {
	margin-top: auto;
}
/* Bild oben in der Karte: Radien oben wie die Karte (vorher eckiger Bildhintergrund) */
.elementor .e-loop-item > .ekv-karte > :is(.elementor-widget-image, .elementor-widget-theme-post-featured-image):first-child,
.elementor .e-loop-item > .ekv-karte > :is(.elementor-widget-image, .elementor-widget-theme-post-featured-image):first-child :is(.elementor-widget-container, img) {
	border-radius: 12px 12px 0 0;
}
.elementor .e-loop-item > .ekv-karte > :is(.elementor-widget-image, .elementor-widget-theme-post-featured-image):first-child {
	overflow: hidden;
}

/*=== Kasse: Bestellübersicht ohne Überlappung, Bildradius, Button rechts (Leonhard 08.11.) ===*/
/* „3 × 8.995,00 €“ + Zeilensumme passten nicht in die rechte Spalte (nowrap) und liefen nach
   links in den Produktnamen. Jetzt darf die Betragsspalte umbrechen, Beträge selbst nicht. */
.woocommerce-checkout table.woocommerce-checkout-review-order-table td.product-total {
	white-space: normal;
	width: 40%;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table td.product-total .woocommerce-Price-amount,
.woocommerce-checkout table.woocommerce-checkout-review-order-table td.product-total .ekv-menge {
	white-space: nowrap;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table .wc-gzd-cart-item-thumbnail img {
	border-radius: 6px;
}
/* „Jetzt verbindlich kaufen“ rechtsbündig (Button ist inline-block im Germanized-Container;
   Meldungen davor bleiben volle Breite). */
.woocommerce-checkout .place-order {
	text-align: right;
}
/* Lange Produktnamen („Pferdeheilpraktiker|in“) umbrechen statt an die Betragsspalte zu stoßen */
.woocommerce-checkout table.woocommerce-checkout-review-order-table .ekv-artikel__name {
	overflow-wrap: anywhere;
	hyphens: auto;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table td.product-name {
	padding-right: 12px;
}

/*=== Sets (WPC Grouped Product): Artikel-Button so hoch wie die Mengenauswahl (Leonhard 08.11.) ===*/
.woosg-atc .single_add_to_cart_button.woosg_single_add_to_cart_button,
.woosg-products .woosg-atc .single_add_to_cart_button {
	display: inline-flex !important;    /* gegen woosg/EduBlink (18 px, Blocksatz-Zeile) */
	align-items: center;
	justify-content: center;
	height: 48px !important;
	min-height: 48px;
	margin-top: 8px;
	padding: 0 20px !important;
	border-radius: 50px !important;
	line-height: 1.2 !important;
	font-size: 14px !important;
	white-space: nowrap;
}

/*=== Videovorschau im Bild (Startseite „Spüren. Verstehen. Heilen.“, functions.php) ===*/
.elementor-widget-image a[data-ekv-youtube] {
	position: relative;
	display: block;
	overflow: hidden;
	border-radius: inherit;
}
.ekv-video-vorschau {
	position: absolute;
	top: 50%;
	left: 50%;
	height: 128%;                       /* schneidet die schwarzen Ränder im Video selbst ab */
	min-width: 128%;
	aspect-ratio: 16 / 9;
	transform: translate(-50%, -50%);
	border: 0;
	pointer-events: none;               /* Klick geht an den Link → Popup */
}

/*=== Preise in Karten wie in der Überblick-Box (Session 04, Leonhard 08.11.) ===*/
/* Steuerung siehe Block „Ausbildungen (Vorlage 23546)“: Preis-Widget aus, wenn [ekv_preisvarianten] ausgibt. */
.e-loop-item .ekv-preisvarianten-widget.ekv-rechts .ekv-preisvarianten {
	justify-content: flex-end;
}
/* Angebotspreise in Karten wie auf der Produktseite: alter Preis klein, grau, durchgestrichen
   darüber; neuer Preis Lila ohne Unterstreichung (vorher beide groß, neuer unterstrichen). */
.elementor .e-loop-item .ekv-preis-spanne .price del {
	display: block;
	font-size: 16px;
	font-weight: 400;
	line-height: 1.4;
	color: var(--ekv-text);
	text-decoration: line-through;
}
.elementor .e-loop-item .ekv-preis-spanne .price del .amount {
	font-size: inherit;
	color: inherit;
}
.elementor .e-loop-item .ekv-preis-spanne .price ins {
	text-decoration: none;
}

/*=== Runde 3 (Session 04, Leonhard 08.11.) ===*/

/* Sticky-Platzhalter: auch Pseudo-Ebenen (Verlaufswelle) unsichtbar – sonst stand in der Kopie
   ein leerer lila Button. */
.elementor-sticky__spacer *::before,
.elementor-sticky__spacer *::after {
	visibility: hidden !important;      /* gegen die Ebenen der Verlaufswelle */
}

/* Überblick-Box (23546): weniger Abstand unter dem Button */
.elementor-23546 .elementor-element-34c027b form.cart {
	margin-bottom: 0;
}
.elementor-23546 .elementor-element-34c027b .single_variation_wrap .woocommerce-variation {
	margin-bottom: 12px;
}

/* Meldungen: Text links, Button rechts (Platz sparen) */
:is(.woocommerce-message, .woocommerce-info):has(> a.button) {
	display: flex;
	flex-wrap: nowrap;                  /* Text links (bricht um), Button rechts in derselben Zeile */
	align-items: center;
	gap: 10px 20px;
}
:is(.woocommerce-message, .woocommerce-info) > a.button {
	order: 2;
	flex: 0 0 auto;
	margin: 0 0 0 auto !important;      /* gegen EduBlink-Float/Abstand */
	float: none !important;
}

/* Quiz: Antworten mit der Verlaufswelle der Warenkorb-Buttons (weiß → Verlauf, Text weiß).
   Ebenen auf .sqb_ans_item_inner; die äußeren Hüllen werden durchsichtig. */
#sqb_quiz_builder .sqb_ans_item_outer,
#sqb_quiz_builder .sqb_ans_item {
	background: transparent !important; /* gegen Inline-Stile des Quiz-Builders */
	box-shadow: none !important;
}
#sqb_quiz_builder .sqb_ans_item_inner {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	/* Weißer Grund unter der weißen Füllebene: sonst blieb zwischen Rahmen und Ebene eine 1-px-Naht im
	   Lila, bis ein Hover die Ebene neu zeichnete (Leonhard 09.11.). Beim Hover Lila, zurück erst nach 0,7 s. */
	background: #FFFFFF !important;     /* gegen Inline-Stile des Quiz-Builders */
	transition: border-color 0.3s ease, background-color 0s linear 0.7s !important;
	border-radius: 12px !important;
	/* 1 px Rahmen immer da (weiß), beim Hover im hellen Violett des Verlaufs → Größe bleibt gleich (Leonhard 09.11.) */
	border: 1px solid #FFFFFF !important; /* gegen border: 0 oben und Plugin-Inline-Stile */
}
#sqb_quiz_builder .sqb_ans_item_outer:hover .sqb_ans_item_inner,
#sqb_quiz_builder .sqb_ans_item_outer:focus-visible .sqb_ans_item_inner {
	border-color: var(--ekv-akzent) !important;
	background-color: var(--ekv-lila) !important;
	transition: border-color 0.3s ease, background-color 0s !important;
}
#sqb_quiz_builder .sqb_ans_item_inner::before,
#sqb_quiz_builder .sqb_ans_item_inner::after {
	content: "" !important;
	display: block !important;
	position: absolute !important;
	z-index: -1 !important;
	top: 0 !important;
	bottom: 0 !important;
	left: 0 !important;
	right: auto !important;
	width: 140% !important;
	border-radius: 0 !important;
	opacity: 1 !important;
	-webkit-mask-image: linear-gradient(90deg, #000 71%, transparent);
	mask-image: linear-gradient(90deg, #000 71%, transparent);
}
#sqb_quiz_builder .sqb_ans_item_inner::before {
	background: linear-gradient(90deg, var(--ekv-lila) 0%, var(--ekv-akzent) 71%) !important;
	transform: translateX(-100%);
	transition: transform 0s linear 0.7s !important;
}
#sqb_quiz_builder .sqb_ans_item_inner::after {
	background: #FFFFFF !important;
	transform: translateX(0);
	transition: transform 0.7s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
#sqb_quiz_builder .sqb_ans_item_outer:hover .sqb_ans_item_inner::before {
	transform: translateX(0);
	transition: transform 0.7s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
#sqb_quiz_builder .sqb_ans_item_outer:hover .sqb_ans_item_inner::after {
	transform: translateX(-100%);
	transition: none !important;
}
#sqb_quiz_builder .sql_ans_text,
#sqb_quiz_builder .sql_ans_text * {
	transition: color 0.2s ease 0.15s;
}
#sqb_quiz_builder .sqb_ans_item_outer:hover .sql_ans_text,
#sqb_quiz_builder .sqb_ans_item_outer:hover .sql_ans_text * {
	color: #FFFFFF !important;          /* gegen Inline-Farben */
	transition-delay: 0s;
}
@media (prefers-reduced-motion: reduce) {
	#sqb_quiz_builder .sqb_ans_item_inner::before,
	#sqb_quiz_builder .sqb_ans_item_inner::after { transition: none !important; }
}
/* Fortschritt ohne Prozentzahl (war auf dem Balken nicht lesbar) */
#sqb_quiz_builder .progress_percent {
	display: none !important;           /* gegen Plugin-Inline-Anzeige */
}

/* Referenz-Karten (28036): beim Hover läuft ein Verlaufsring um das Foto */
.e-loop-item .elementor-element-8156591 {
	position: relative;
	isolation: isolate;
	line-height: 0;                     /* Widget so hoch wie das Foto (Ring rund) */
}
.e-loop-item .elementor-element-8156591::before {
	content: "";
	position: absolute;
	z-index: -1;
	top: -4px;
	left: -4px;
	width: calc(100% + 8px);
	aspect-ratio: 1;                    /* kreisrund, auch wenn das Widget höher ist als das Foto */
	border-radius: 50%;
	background: conic-gradient(from 0deg, var(--ekv-lila), var(--ekv-akzent), var(--ekv-flieder), var(--ekv-akzent), var(--ekv-lila));
	opacity: 0;
	transition: opacity 0.4s ease;
}
.e-loop-item .ekv-karte:hover .elementor-element-8156591::before,
.e-loop-item .ekv-karte:focus-within .elementor-element-8156591::before {
	opacity: 1;
	animation: ekv-ring 3s linear infinite;
}
@keyframes ekv-ring {
	to { transform: rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
	.e-loop-item .ekv-karte:hover .elementor-element-8156591::before { animation: none; }
}

/* Karussell-Pfeile (Loop-Karussells): schlichte „‹ ›“ in Lila außerhalb der Kacheln
   (Position „außen“ per 04-paket5.php; Leonhard 08.11.: keine runden Knöpfe) */
.elementor-widget-loop-carousel {
	--arrow-size: 26px;
	--arrow-normal-color: var(--ekv-lila);
	--arrow-hover-color: var(--ekv-aubergine);
}
.elementor-widget-loop-carousel :is(.elementor-swiper-button-prev, .elementor-swiper-button-next):focus-visible {
	outline: 2px solid var(--ekv-aubergine);
	outline-offset: 4px;
	border-radius: 4px;
}

/* Karten 25836/25549: Kurzbeschreibung max. 4 Zeilen → weniger Weißraum bei gleicher Höhe */
:is(.elementor-25836, .elementor-25549).e-loop-item .elementor-widget-woocommerce-product-short-description :is(.elementor-widget-container, .woocommerce-product-details__short-description) {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 4;
	line-clamp: 4;
	overflow: hidden;
}
:is(.elementor-25836, .elementor-25549).e-loop-item .elementor-widget-woocommerce-product-short-description p {
	margin: 0;
	display: inline;
}

/* Set-Seite: Set-Preis groß, rechtsbündig, darunter Pflichtangaben */
.woosg-wrap .woosg-total {
	margin-top: 16px;
	text-align: right;
	font-family: 'Open Sans', sans-serif;
	font-size: 15px;
	color: var(--ekv-text);
}
.woosg-wrap .woosg-total .amount {
	display: block;
	font-family: 'Poppins', sans-serif;
	font-size: 34px;
	font-weight: 600;
	line-height: 1.2;
	color: var(--ekv-lila);
}
.woosg-wrap .woosg-total del .amount {
	font-size: 16px;
	font-weight: 400;
	color: var(--ekv-text);
}
.ekv-set-pflichtangaben {
	margin: 2px 0 12px;
	text-align: right;
	font-size: 14px;
	color: var(--ekv-text);
}
.ekv-set-pflichtangaben p {
	display: inline;
	margin: 0;
}

/* Kasse: Länderauswahl (Select2) sauber – offen ohne untere Radien, Liste bündig, CI-Farben.
   Die Liste hängt Select2 an <body>, daher body.woocommerce-checkout. */
.woocommerce-checkout form.checkout .select2-container--open .select2-selection--single {
	border-color: var(--ekv-lila);
	box-shadow: inset 0 0 0 1px var(--ekv-lila);
}
.woocommerce-checkout form.checkout .select2-container--open.select2-container--below .select2-selection--single {
	border-bottom-left-radius: 0;
	border-bottom-right-radius: 0;
}
.woocommerce-checkout form.checkout .select2-container--open.select2-container--above .select2-selection--single {
	border-top-left-radius: 0;
	border-top-right-radius: 0;
}
body.woocommerce-checkout .select2-dropdown {
	box-sizing: border-box;
	border: 2px solid var(--ekv-lila);
	border-radius: 0 0 12px 12px;
	overflow: hidden;
	background: #FFFFFF;
}
body.woocommerce-checkout .select2-dropdown--below {
	border-top: 1px solid #E2E2E2;
	margin-top: -1px;
}
body.woocommerce-checkout .select2-dropdown--above {
	border-bottom: 1px solid #E2E2E2;
	border-radius: 12px 12px 0 0;
}
body.woocommerce-checkout .select2-search--dropdown {
	padding: 8px;
}
body.woocommerce-checkout .select2-search--dropdown .select2-search__field {
	height: 40px;
	padding: 0 12px;
	border: 1px solid #E2E2E2;
	border-radius: 8px;
	font-size: 16px;
}
body.woocommerce-checkout .select2-search--dropdown .select2-search__field:focus {
	border-color: var(--ekv-lila);
	outline: 0;
}
body.woocommerce-checkout .select2-results__option {
	padding: 9px 16px;
	font-family: 'Open Sans', sans-serif;
	font-size: 15px;
	color: #181818;
}
body.woocommerce-checkout .select2-container--default .select2-results__option--highlighted[aria-selected],
body.woocommerce-checkout .select2-container--default .select2-results__option--highlighted[data-selected],
body.woocommerce-checkout .select2-results__option--highlighted {
	background: var(--ekv-flieder) !important;  /* gegen Select2-Blau */
	color: #181818 !important;
}
body.woocommerce-checkout .select2-results__option[aria-selected="true"],
body.woocommerce-checkout .select2-results__option[data-selected="true"] {
	background: #FFFFFF;
	color: var(--ekv-lila);
	font-weight: 600;
}

/* USt-ID-Fehler direkt am Feld (ekvedo-kasse.js) */
.ekv-feldfehler {
	margin: 6px 0 0;
	font-size: 14px;
	color: #C0342B;
}

/* Referenz-Karten: Name | Tätigkeit umbrechen statt Wörter zu trennen („Pferdeosteopathi-n“) */
.e-loop-item .elementor-element-5566f62 {
	flex-wrap: wrap;
	row-gap: 2px;
}
.e-loop-item .elementor-element-5566f62 :is(h1, h2, h3, h4, h5, h6, p, span) {
	word-break: normal;
	overflow-wrap: normal;
}
/* Feld mit USt-ID-Fehler rot, auch wenn WooCommerce es als „ausgefüllt“ grün markiert */
.woocommerce-checkout form.checkout .form-row:has(.ekv-feldfehler) input.input-text {
	border-color: #C0342B;
	box-shadow: inset 0 0 0 1px #C0342B;
}
@media (max-width: 600px) {
	:is(.woocommerce-message, .woocommerce-info):has(> a.button) { flex-wrap: wrap; }
}

/* Karten: Abstand zwischen Variantenpreisen und Button (Leonhard 08.11.) */
/* 0,4,0: über Elementors Widget-Abstand (Element-CSS 0,3,0) */
.elementor .e-loop-item .elementor-widget.ekv-preisvarianten-widget {
	margin-bottom: 16px;
}

/*=== Ausbildungen: Runde 7 (Session 04, Leonhard 09.11.) ===*/
/* Karte „Ausbildungsangebot“ (Klasse aus 04-paket7): der lila Abschluss bleibt immer stehen, die
   Warenkorb-Meldung erscheint darin (auch ohne Neuladen, ekvedo-produkt.js). Gleiche Höhe mit und ohne
   Meldung → die mitlaufende Überblick-Karte schließt weiter bündig ab. */
.ekv-ausbildungskarte .elementor-widget-woocommerce-notices {
	align-self: stretch;
	width: 100%;                        /* leer sonst 0 px breit (Karte richtet mittig aus) */
	min-height: 80px;
	background-color: var(--ekv-lila);
}
.ekv-ausbildungskarte .elementor-widget-woocommerce-notices .e-woocommerce-notices-wrapper > * {
	min-height: 80px;
	margin: 0 !important;               /* gegen Elementor-Abstand der Meldung */
	border-radius: 0 !important;        /* Karte rundet selbst ab (overflow hidden); gegen Kit-Radius */
}
/* Preis wie im Überblick rechts ([ekv_preisvarianten], 04-paket8), hier mittig */
.ekv-ausbildungskarte .ekv-preisvarianten {
	justify-content: center;
	align-items: center;
	padding: 10px 20px;
	text-align: left;
}

/* Überblick-Karte rechts (Vorlage 23546, Klasse aus 04-paket8): CSS-Sticky statt Elementor-Sticky.
   Ist sie höher als das Fenster, verschiebt ekvedo-produkt.js --ekv-sticky-top (läuft mit). */
@media (min-width: 1025px) {
	/* EduBlink: html, body { overflow-x: hidden } macht body zum Scroll-Container → sticky wirkungslos.
	   clip schneidet ebenso ab, ohne Scroll-Container. */
	html:has(> body.single-product),
	body.single-product,
	html:has(> body.single-post),
	body.single-post {                  /* auch Termin-Einzelansicht (Bild sticky) */
		overflow-x: clip;
	}
	.elementor-23546 .ekv-mitlaufend {
		--ekv-oben: 110px;
		position: sticky;
		top: var(--ekv-sticky-top, var(--ekv-oben));
	}
}
/* Keine Hebung beim Hover (Glow bleibt): sonst steht sie 5 px über dem Abschluss der linken Karte */
.elementor-23546 .ekv-mitlaufend {
	--ekv-karte-hub: 0px;
}
/* Kompakter, damit die Karte auf Laptops ins Fenster passt: Liste, Zahlungsart, Variantentext, Button */
.elementor-23546 .ekv-mitlaufend .elementor-widget-text-editor h3 {
	margin-bottom: 12px;
}
.elementor-23546 .ekv-mitlaufend .elementor-widget-text-editor li {
	margin-top: 5px;
	margin-bottom: 5px;
}
.elementor-23546 .ekv-mitlaufend form.cart table.variations {
	margin-bottom: 4px;
}
.elementor-23546 .ekv-mitlaufend form.cart table.variations th.label {
	padding-top: 0;
	padding-bottom: 0;
}
.elementor-23546 .ekv-mitlaufend .woocommerce-variation.single_variation {
	margin-bottom: 0;
}
.elementor-23546 .ekv-mitlaufend .woocommerce-variation-description p {
	margin-bottom: 10px;
	line-height: 1.5;
}
.elementor-23546 .ekv-mitlaufend form.cart .single_add_to_cart_button {
	margin-bottom: 0 !important;        /* gegen EduBlink-Abstand 30 px */
}

/* Terminkarte (Loop-Vorlage „ekvedo Terminkarte“, 04-terminkarte): Bild mit Verlauf, Titel weiß.
   Hover/Fokus: Module klappen auf, der Titel wandert dadurch nach oben. Touch: Module immer sichtbar. */
.ekv-terminkarte {
	aspect-ratio: 3 / 4;
	text-decoration: none;
}
.ekv-terminkarte .ekv-terminkarte__titel .elementor-heading-title {
	font-size: 15px;                    /* „Pferdeheilpraktiker|in“ passt in eine Zeile der 220-px-Kachel */
	line-height: 1.3;
}
.ekv-terminkarte .ekv-terminkarte__module {
	display: grid;
	grid-template-rows: 0fr;
	opacity: 0;
	transition: grid-template-rows 0.5s ease, opacity 0.4s ease;
}
.ekv-terminkarte .ekv-terminkarte__module > .elementor-widget-container,
.ekv-terminkarte .ekv-terminkarte__module > .elementor-shortcode {
	min-height: 0;
	overflow: hidden;
}
.ekv-terminkarte:is(:hover, :focus-visible) .ekv-terminkarte__module {
	grid-template-rows: 1fr;
	opacity: 1;
}
@media (hover: none) {
	.ekv-terminkarte .ekv-terminkarte__module {
		grid-template-rows: 1fr;
		opacity: 1;
	}
}
/* Kontrast für die Module auch ohne Hover-Verlauf (Tastaturfokus, Touch) */
.ekv-terminkarte:focus-visible .ekv-terminkarte__inhalt {
	background: linear-gradient(0deg, rgba(92, 26, 88, 0.9) 0%, rgba(92, 26, 88, 0.6) 70%, rgba(92, 26, 88, 0) 100%);
}
@media (hover: none) {
	.ekv-terminkarte .ekv-terminkarte__inhalt {
		background: linear-gradient(0deg, rgba(92, 26, 88, 0.9) 0%, rgba(92, 26, 88, 0.6) 70%, rgba(92, 26, 88, 0) 100%);
	}
}
.ekv-terminkarte:focus-visible {
	outline: 2px solid var(--ekv-aubergine);
	outline-offset: 3px;
}
/* 12 px: bis zu 9 Module passen in die Kachel (3 Spalten ≈ 220 px breit) */
.ekv-termin-module {
	margin: 8px 0 0;
	padding: 0;
	list-style: none;
	color: #FFFFFF;
	font-size: 12px;
	line-height: 1.3;
}
.ekv-termin-module li {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: 8px;
	margin: 0 0 3px;
}
.ekv-termin-module__datum {
	font-weight: 600;
	white-space: nowrap;
}
@media (prefers-reduced-motion: reduce) {
	.ekv-terminkarte .ekv-terminkarte__module { transition: none; }
}

/*=== Runde 8 (Session 04, Leonhard 09.11.) ===*/

/* Gutschein: Feld + Button als eine Pill, Warenkorb und Kasse gleich (Button mit Verlaufswelle) */
.woocommerce-cart table.cart td.actions .coupon .input-text,
.ekv-gutschein input {
	height: 50px;
	padding: 0 20px;
	border: 1px solid #E2E2E2;
	border-right: 0;
	border-radius: 50px 0 0 50px;
	background: #F4F4F4;
	font-family: 'Open Sans', sans-serif;
	font-size: 15px;
}
.woocommerce-cart table.cart td.actions .coupon .input-text:focus,
.ekv-gutschein input:focus {
	border-color: var(--ekv-lila);
	background: #FFFFFF;
	outline: none;                      /* 1 px Rahmen genügt */
}
.woocommerce-cart .edublink-coupon-wrapper button,
.ekv-gutschein button.ekv-welle {
	height: 50px;
	padding: 0 24px;
	border: 0;
	border-radius: 0 50px 50px 0 !important;   /* gegen EduBlink-Radius */
	color: #FFFFFF;
	font-family: 'Poppins', sans-serif;
	font-size: 15px;
	font-weight: 500;
	white-space: nowrap;
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	line-height: 1;
}
.woocommerce-cart .edublink-coupon-wrapper,
.woocommerce-cart table.cart td.actions .coupon {
	display: flex;
	align-items: stretch;
}
/* Summe: Überschrift passt in die schmalere Spalte */
.woocommerce-cart .cart_totals h2 {
	font-size: 28px;
}

/* Warenkorb: Cross-Sells breiter, Summe schmaler (ab 992 px nebeneinander) */
@media (min-width: 992px) {
	.woocommerce-cart .cart-collaterals {
		display: grid;
		grid-template-columns: minmax(0, 1fr) minmax(340px, 420px);
		gap: 32px 48px;
		align-items: start;
	}
	.woocommerce-cart .cart-collaterals > * {
		grid-column: 1 / -1;
		grid-row: 1;                        /* z. B. Klarna-Hinweis: volle Breite oben */
	}
	.woocommerce-cart .cart-collaterals > .cross-sells {
		grid-row: 2;                        /* im HTML nach der Summe → feste Zeile/Spalte */
		grid-column: 1;
		width: auto !important;             /* gegen EduBlink/WooCommerce-Breiten */
		float: none !important;
	}
	.woocommerce-cart .cart-collaterals > .cart_totals {
		grid-row: 2;
		grid-column: 2;
		width: auto !important;             /* gegen EduBlink/WooCommerce-Breiten */
		float: none !important;
	}
}
/* Cross-Sells: Buch-Kachel (26022) quadratisch; 0,4,0 über deren Element-CSS (aspect-ratio 0.65) */
.ekv-crosssells .e-loop-item .elementor-element.ekv-portrait-card {
	aspect-ratio: 1;
}
.ekv-crosssells h2 {
	margin-bottom: 24px;
}

/* Rabatt-Anzeige (Prozent, functions.php): rechts oben im Produktbild, CI-Gold */
.woocommerce span.onsale.ekv-rabatt,
.elementor-widget-woocommerce-product-images span.onsale.ekv-rabatt {
	top: 16px !important;               /* gegen WooCommerce/EduBlink-Position links oben */
	right: 16px !important;
	left: auto !important;
	min-width: 0;
	min-height: 0;
	margin: 0;
	padding: 6px 12px;
	border-radius: 50px;
	background: #D98F1F;
	color: #FFFFFF;
	font-family: 'Poppins', sans-serif;
	font-size: 14px;
	font-weight: 600;
	line-height: 1.2;
	z-index: 3;
}

/* Kopfzeile: „Schüler:innen Login“ ganz links (Theme-Option, 04-paket9) */
.header-top-message .ekv-schueler-login {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-right: 24px;
	padding-right: 24px;
	border-right: 1px solid rgba(255, 255, 255, 0.3);
	color: #FFFFFF;
	font-weight: 600;
}
/* Kopfzeile einzeilig halten (mit Login-Link wurde sie bei 1440 px zweizeilig) */
.edublink-header-top-content .header-top-left {
	flex: 0 0 auto;                     /* nicht stauchen (sonst überlappt die Nachricht den rechten Teil) */
}
.edublink-header-top-content .header-top-message,
.edublink-header-top-content .header-top-right > * {
	white-space: nowrap;
}
@media (max-width: 1599px) {
	.edublink-header-top-content,
	.edublink-header-top-content a {
		font-size: 13px;
	}
	.edublink-header-top-content .header-top-right > * {
		padding-left: 14px;
	}
	.header-top-message .ekv-schueler-login {
		margin-right: 16px;
		padding-right: 16px;
	}
}
/* Schmalere Desktops: Social-Icons nur noch im Footer, darunter auch die E-Mail (bleibt im Footer) */
@media (max-width: 1439px) {
	.edublink-header-top-content .header-top-social-share {
		display: none;
	}
}
@media (max-width: 1279px) {
	.edublink-header-top-content .header-top-email {
		display: none;
	}
}

/* Footer-Newsletter: E-Mail-Feld rund mit Verlaufsrand (wie die Buttons) */
.edublink-mailchimp-input-field {
	height: 50px;
	padding: 0 22px !important;         /* gegen EduBlink-Abstände */
	border: 1px solid transparent !important;
	border-radius: 50px !important;     /* gegen EduBlink-Radius 5 px */
	background: linear-gradient(#FFFFFF, #FFFFFF) padding-box, var(--ekv-verlauf-90) border-box !important;
}
.edublink-mailchimp-input-field:focus {
	outline: none;                      /* Fokus: Verlaufsrand wird Lila (1 px, kein zweiter Ring) */
	background: linear-gradient(#FFFFFF, #FFFFFF) padding-box, var(--ekv-lila) border-box !important;
}

/* Bestellbestätigung im Danke-Design (woocommerce/checkout/thankyou.php) */
.ekv-danke .woocommerce-order-overview {
	display: flex;
	flex-wrap: wrap;
	gap: 12px 32px;
	margin: 0 0 24px;
	padding: 20px 24px;
	border: 1px solid #E2E2E2;
	border-radius: 12px;
	list-style: none;
}
.ekv-danke .woocommerce-order-overview li {
	margin: 0;
	padding: 0;
	border: 0;
	font-size: 14px;
}
.ekv-danke .woocommerce-order-overview strong {
	display: block;
	font-size: 16px;
	color: #181818;
}

/*=== Runde 9 (Session 04, Leonhard 09.11.) ===*/

/* Eingabefelder allgemein (Konto, Formulare): Fokus = 1 px lila Rahmen, kein zweiter Ring */
.woocommerce form .input-text:focus,
.woocommerce form textarea:focus,
.woocommerce-cart table.cart td.actions .coupon .input-text:focus {
	border-color: var(--ekv-lila);
	outline: none;
	box-shadow: none;
}

/* Kopfzeile: alle Links gleich – Ruhe Flieder (7,6:1 auf Aubergine), Hover/Fokus Weiß (11,3:1), ohne
   Unterstreichung (Leonhard 10.11.; Gold #D98F1F hätte nur 3,7:1 → unter WCAG AA für 13 px) */
.edublink-header-top-content a,
.edublink-header-top-content a i,
.header-top-message .ekv-schueler-login {
	color: #EDCBF6 !important;          /* gegen EduBlink-Linkfarben */
	text-decoration: none !important;   /* gegen EduBlink-Unterstreichung */
	transition: color 0.2s ease;
}
.edublink-header-top-content a:hover,
.edublink-header-top-content a:focus-visible,
.edublink-header-top-content a:hover i,
.edublink-header-top-content a:focus-visible i,
.header-top-message .ekv-schueler-login:hover,
.header-top-message .ekv-schueler-login:focus-visible {
	color: #FFFFFF !important;          /* gegen EduBlink-Hoverfarbe */
	text-decoration: none !important;
}

/* Ausbildungskacheln (Loop 25549 u. a.): beide Preise variabler Produkte in einer Zeile */
.e-loop-item .ekv-preisvarianten {
	flex-wrap: nowrap;
	gap: 6px 10px;
}
.e-loop-item .ekv-preisvariante__preis {
	font-size: clamp(16px, calc((100cqi - 70px) / 13), 23px);
	white-space: nowrap;
}
.e-loop-item .ekv-preisvariante__name {
	font-size: 14px;
	white-space: nowrap;
}

/* Startseite: „ekvedo.com“ im Hero im Verlauf (Klasse aus 04-paket10) */
.ekv-hero-titel .edublink-color-secondary {
	background: linear-gradient(90deg, #C350DC 0%, #EDCBF6 100%);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent !important;      /* gegen EduBlink-Sekundärfarbe */
}

/* Zoho-Einbettung vor der Einwilligung: Hinweis mit Button zu den Cookie-Einstellungen */
.ekv-zoho-hinweis {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px 24px;
	margin: 0;
	padding: 24px;
	border: 1px solid #E2E2E2;
	border-radius: 12px;
	background: #F4F4F4;
	color: #505050;
}
.ekv-zoho-hinweis[hidden] {
	display: none;
}
.ekv-zoho-einstellungen {
	padding: 12px 24px;
	border: 1px solid var(--ekv-lila);
	border-radius: 50px;
	background: #FFFFFF;
	color: var(--ekv-lila);
	font-family: 'Poppins', sans-serif;
	font-weight: 500;
	cursor: pointer;
	transition: background-color 0.3s ease, color 0.3s ease;
}
.ekv-zoho-einstellungen:hover,
.ekv-zoho-einstellungen:focus-visible {
	background: var(--ekv-lila);
	color: #FFFFFF;
}

/* Google-Karte vor der Einwilligung (B56, functions.php): Platz der Karte bleibt erhalten (Layout wie mit
   Karte, z. B. /kontakt/ mit überlappender Kontaktbox), Hinweis unten in der Fläche */
.ekv-karte-embed {
	position: relative;
}
.ekv-karte-embed iframe[hidden] {
	display: block;                     /* trotz [hidden]: Höhe der Karte behalten */
	visibility: hidden;
}
.ekv-karte-embed .ekv-zoho-hinweis {
	position: absolute;
	inset: 0;
	z-index: 1;
	align-content: flex-end;
	justify-content: center;
	text-align: center;
	border-radius: 0;
}
.ekv-karte-embed .ekv-zoho-hinweis a {
	color: var(--ekv-lila);
	text-decoration: underline;
}

/*=== Kontaktformular (Contact Form 7, /kontakt/, 04-kontaktformular.php) – Felder wie in der Kasse ===*/
.ekv-cf7 p {
	margin: 0 0 16px;
}
.ekv-cf7-zeile {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: 0 20px;
}
.ekv-cf7 label {
	display: block;
	font-family: 'Poppins', sans-serif;
	font-size: 15px;
	font-weight: 500;
	color: #181818;
}
.ekv-cf7 .wpcf7-form-control-wrap {
	display: block;
	margin-top: 6px;
}
.ekv-cf7 :is(input[type="text"], input[type="email"], input[type="tel"], textarea) {
	width: 100%;
	height: 52px;
	padding: 0 16px;
	border: 1px solid #E2E2E2;
	border-radius: 12px;
	background: #FFFFFF;
	font-family: 'Open Sans', sans-serif;
	font-size: 16px;                    /* ≥ 16 px: kein Zoom auf iOS */
	color: #181818;
	box-shadow: none;
	transition: border-color 0.2s ease;
}
.ekv-cf7 textarea {
	height: auto;
	min-height: 150px;
	padding: 12px 16px;
	resize: vertical;
}
.ekv-cf7 :is(input[type="text"], input[type="email"], input[type="tel"], textarea):focus {
	border-color: var(--ekv-lila);
	outline: none;                      /* wie Kasse: 1 px Rahmen in Lila genügt */
}
.ekv-cf7 .wpcf7-not-valid {
	border-color: #C0342B;
}
.ekv-cf7 .wpcf7-not-valid-tip {
	margin-top: 4px;
	font-family: 'Open Sans', sans-serif;
	font-size: 14px;
	font-weight: 400;
	color: #C0342B;
}
.ekv-cf7-hinweis {
	font-size: 14px;
	color: #505050;
}
.ekv-cf7-hp {
	display: none;
}
.ekv-cf7-zustimmung .wpcf7-list-item {
	margin: 0;
}
.ekv-cf7-zustimmung label {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	font-family: 'Open Sans', sans-serif;
	font-size: 14px;
	font-weight: 400;
	line-height: 1.5;
	color: #505050;
}
.ekv-cf7-zustimmung input[type="checkbox"] {
	flex: 0 0 auto;
	width: 20px;
	height: 20px;
	margin: 1px 0 0;
	accent-color: var(--ekv-lila);
}
.ekv-cf7-zustimmung a {
	color: var(--ekv-lila);
	text-decoration: underline;
}
.ekv-cf7 .wpcf7-submit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 52px;
	padding: 0 32px;
	border: 0;
	border-radius: 50px;
	color: #FFFFFF;
	font-family: 'Poppins', sans-serif;
	font-size: 16px;
	font-weight: 500;
	cursor: pointer;
}
.wpcf7 form .wpcf7-response-output {
	margin: 16px 0 0;
	padding: 12px 16px;
	border-radius: 12px;
	font-size: 15px;
}
.wpcf7 form.sent .wpcf7-response-output {
	border-color: var(--ekv-erfolg);
}
.wpcf7 form:is(.invalid, .unaccepted, .failed, .spam) .wpcf7-response-output {
	border-color: #C0342B;
}

/*=== Termine: Karte, Terminseite, Einzelansicht (Session 04, Runde 9) ===*/
/* Terminkarte: dunklere Ebene blendet beim Hover/Fokus weich ein (Elementor-Hover-Verlauf springt,
   Verläufe lassen sich nicht überblenden) */
.ekv-terminkarte::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 0;
	border-radius: inherit;
	background: linear-gradient(180deg, rgba(92, 26, 88, 0.15) 0%, rgba(92, 26, 88, 0.9) 60%);
	opacity: 0;
	transition: opacity 0.6s ease;
	pointer-events: none;
}
.ekv-terminkarte:is(:hover, :focus-visible)::after {
	opacity: 1;
}
@media (hover: none) {
	.ekv-terminkarte::after { opacity: 1; }
}
.ekv-terminkarte .ekv-terminkarte__inhalt {
	position: relative;
	z-index: 1;                         /* über der Hover-Ebene */
}
.ekv-terminkarte__link .elementor-heading-title a:hover,
.ekv-terminkarte__link .elementor-heading-title a:focus-visible {
	text-decoration: underline;
	text-underline-offset: 3px;
}
@media (prefers-reduced-motion: reduce) {
	.ekv-terminkarte::after { transition: none; }
}

/* Chips: Art und Ort */
.ekv-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}
.ekv-chip {
	margin: 0;
	padding: 4px 12px;
	border-radius: 50px;
	background: #EDCBF6;
	color: #5C1A58;
	font-family: 'Poppins', sans-serif;
	font-size: 13px;
	font-weight: 500;
	line-height: 1.5;
}
.ekv-chip--ort {
	background: #F4F4F4;
	color: #505050;
	border: 1px solid #E2E2E2;
}

/* Zeitleiste: Module als Abfolge (Linie Flieder, Punkte Lila) */
.ekv-zeitleiste {
	margin: 0;
	padding: 0;
	list-style: none;
	counter-reset: ekv-modul;
}
.ekv-zeitleiste li {
	position: relative;
	display: grid;
	grid-template-columns: minmax(9.5em, max-content) 1fr;
	gap: 4px 20px;
	margin: 0;
	padding: 0 0 14px 26px;
	font-size: 15px;
	line-height: 1.45;
	color: #505050;
}
.ekv-zeitleiste li::before {             /* Punkt */
	content: "";
	position: absolute;
	left: 0;
	top: 0.45em;
	width: 11px;
	height: 11px;
	border-radius: 50%;
	background: #782373;
	box-shadow: 0 0 0 3px #FFFFFF;
	z-index: 1;
}
.ekv-zeitleiste li::after {              /* Linie zum nächsten Punkt */
	content: "";
	position: absolute;
	left: 5px;
	top: 0.9em;
	bottom: -0.45em;
	width: 1px;
	background: #EDCBF6;
}
.ekv-zeitleiste li:last-child {
	padding-bottom: 0;
}
.ekv-zeitleiste li:last-child::after {
	display: none;
}
.ekv-zeitleiste .ekv-termin-module__datum {
	font-family: 'Poppins', sans-serif;
	font-weight: 600;
	font-variant-numeric: tabular-nums;
	color: #181818;
	white-space: nowrap;
}
@media (max-width: 767px) {
	.ekv-zeitleiste li { grid-template-columns: 1fr; gap: 0; }
}

/* Terminseite */
.ekv-terminseite__einleitung p {
	max-width: 60ch;
	font-size: 17px;
}
.ekv-terminfilter .e-filter {
	gap: 8px;
}
.ekv-terminfilter .e-filter-item {
	padding: 8px 18px;
	border: 1px solid #E2E2E2;
	border-radius: 50px;
	background: #FFFFFF;
	color: #505050;
	font-family: 'Poppins', sans-serif;
	font-size: 14px;
	font-weight: 500;
	transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}
.ekv-terminfilter .e-filter-item:hover {
	border-color: #782373;
	color: #782373;
}
.ekv-terminfilter .e-filter-item[aria-pressed="true"] {
	border-color: #782373;
	background: #782373;
	color: #FFFFFF;
}
.ekv-terminzeile .ekv-termin-bild img,
.ekv-termin-einzel .ekv-termin-bild img {
	width: 100%;
	aspect-ratio: 1;
	object-fit: cover;
	border-radius: 12px;
}
.ekv-termin-titel .elementor-heading-title {
	font-size: 24px;
	line-height: 1.3;
}
.ekv-termin-titel .elementor-heading-title a {
	color: #181818;
}
.ekv-termin-titel .elementor-heading-title a:hover {
	color: #782373;
}
.ekv-termin-mehr .elementor-heading-title {
	font-family: 'Poppins', sans-serif;
	font-size: 15px;
	font-weight: 600;
}
.ekv-termin-mehr .elementor-heading-title a {
	color: #782373;
	text-decoration: underline;
	text-underline-offset: 3px;
}
.ekv-termin-mehr .elementor-heading-title a:hover {
	color: #5C1A58;
}

/* Einzelansicht: Bild bleibt beim Lesen der Termine stehen (Desktop) */
@media (min-width: 1025px) {
	.ekv-termin-einzel__bild {
		position: sticky;
		top: 120px;
	}
}
.ekv-termin-einzel .ekv-termin-titel .elementor-heading-title {
	font-size: clamp(28px, 3vw, 40px);
}
.ekv-termin-einzel .ekv-zeitleiste li {
	font-size: 16px;
	padding-bottom: 18px;
}
.ekv-termin-hinweise p {
	margin: 0 0 10px;
	max-width: 65ch;
	color: #505050;
}
.ekv-terminfilter .e-filter {
	justify-content: flex-start;        /* linksbündig wie Überschrift und Liste */
}

/*=== Nächste Kurstermine dynamisch (Session 04, Runde 10) ===*/
/* Ohne aktuelle Termine verschwinden Raster und Überschrift (Elementor gibt dann
   .e-loop-nothing-found-message aus); die Vorlagen-Sektion entfällt, wenn die Produktseite eine eigene
   Sektion hat (04-termine-dynamisch.php). Kein :has() in :has() – das verwirft der Browser ganz. */
.ekv-termine-raster:has(.e-loop-nothing-found-message),
.e-con:has(> .ekv-termine-raster .e-loop-nothing-found-message),
.ekv-termine-vorlage:has(.e-loop-nothing-found-message),
body:has(.ekv-termine-raster--produkt) .ekv-termine-vorlage {
	display: none;
}

/* Warenkorb-Symbol zoomt kurz beim Hinzufügen (functions.php, Ereignis added_to_cart) */
@keyframes ekv-zoom {
	0% { transform: scale(1); }
	35% { transform: scale(1.35); }
	65% { transform: scale(0.92); }
	100% { transform: scale(1); }
}
.ekv-zoom {
	animation: ekv-zoom 0.8s ease;
}
@media (prefers-reduced-motion: reduce) {
	.ekv-zoom { animation: none; }
}

/*=== Warenkorb Runde 10 (Session 04, Leonhard 10.11.) ===*/
/* Mengenauswahl wie auf der Produktseite (112 px: − Feld +); EduBlink setzt das Feld im Warenkorb auf 144 px */
.woocommerce-cart-form .quantity.ekv-qty input.qty {
	width: 36px !important;             /* gegen EduBlink-Warenkorbbreite */
	min-width: 0 !important;
	flex: 0 0 36px !important;
	padding: 0 !important;
}
/* Entfernen „×“: Lila, beim Hover helles Lila */
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove,
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove i {
	color: var(--ekv-lila) !important;  /* gegen EduBlink-Schwarz (Symbol-Schrift am <i>) */
	background: transparent !important;
	transition: color 0.2s ease;
}
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove:is(:hover, :focus-visible),
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove:is(:hover, :focus-visible) i {
	color: var(--ekv-akzent) !important;
	background: transparent !important;
}
/* Meldungen unter der Tabelle mit „Aktualisieren“ */
.woocommerce-cart .woocommerce:has(> .woocommerce-cart-form) {
	display: flex;
	flex-direction: column;
}
.woocommerce-cart .woocommerce:has(> .woocommerce-cart-form) > .woocommerce-cart-form { order: 1; }
.woocommerce-cart .woocommerce:has(> .woocommerce-cart-form) > .woocommerce-notices-wrapper { order: 2; }
.woocommerce-cart .woocommerce:has(> .woocommerce-cart-form) > .cart-collaterals { order: 3; }
.woocommerce-cart .woocommerce-notices-wrapper:not(:empty) {
	margin: 8px 0 32px;
}
/* „Das interessiert dich vielleicht“: Kurzbeschreibung näher an die Buttons */
.ekv-crosssells .e-loop-item .ekv-portrait-overlay {
	--row-gap: 10px;
	--gap: 10px 10px;
	gap: 10px;
}
.ekv-crosssells .e-loop-item .ekv-portrait-overlay .elementor-widget-woocommerce-product-short-description p:last-child {
	margin-bottom: 0;
}
/* Klarna-Hinweis im CI: Rahmen, Radius, Schrift (Teile der Klarna-Komponente) */
.cart-collaterals .klarna-onsite-messaging {
	display: block;
}
.klarna-onsite-messaging > *::part(osm-container) {
	border: 1px solid #E2E2E2;
	border-radius: 12px;
	padding: 14px 18px;
	font-family: 'Open Sans', sans-serif;
}
/* Warenkorb-Summe: Satz nach Typografie-Regeln – Bezeichnung links leise, Betrag rechts bündig
   (Ziffern tabellarisch), gemeinsame Grundlinie; Gesamtsumme hervorgehoben, MwSt. direkt darunter */
.woocommerce-cart .cart_totals table.shop_table {
	border: 0;
	margin: 0 0 20px;
}
.woocommerce-cart .cart_totals table.shop_table :is(th, td) {
	padding: 12px 0;
	border: 0;
	border-top: 1px solid #E2E2E2;
	vertical-align: baseline;
	font-family: 'Poppins', sans-serif;
	font-size: 15px;
	line-height: 1.45;
}
.woocommerce-cart .cart_totals table.shop_table tr:first-child :is(th, td) {
	border-top: 0;
}
.woocommerce-cart .cart_totals table.shop_table th {
	width: 45%;
	font-weight: 500;
	color: #505050;
	text-align: left;
}
.woocommerce-cart .cart_totals table.shop_table td {
	font-weight: 600;
	color: #181818;
	text-align: right;
	font-variant-numeric: tabular-nums;
}
.woocommerce-cart .cart_totals table.shop_table td :is(strong, .amount, bdi, span) {
	font-weight: inherit;
	font-size: inherit;
	color: inherit;
}
.woocommerce-cart .cart_totals tr.shipping td ul,
.woocommerce-cart .cart_totals tr.shipping td p {
	margin: 0;
	padding: 0;
	list-style: none;
	text-align: right;
}
.woocommerce-cart .cart_totals tr.shipping td .woocommerce-shipping-destination {
	font-size: 13px;
	font-weight: 400;
	color: #505050;
}
.woocommerce-cart .cart_totals tr.order-total :is(th, td) {
	padding-top: 16px;
	border-top: 2px solid #181818;
	font-size: 18px;
	font-weight: 700;
	color: #181818;
}
.woocommerce-cart .cart_totals tr.order-tax :is(th, td) {
	padding-top: 0;
	border-top: 0;
	font-size: 13px;
	font-weight: 400;
	color: #505050;
}
/* Linien: nur eine klare Trennlinie vor der Gesamtsumme (EduBlink setzt eigene Zeilenrahmen) */
.woocommerce-cart .cart_totals table.shop_table :is(tr, th, td) {
	border-top: 0 !important;           /* gegen EduBlink-Zeilenrahmen */
	border-bottom: 0 !important;
}
.woocommerce-cart .cart_totals table.shop_table tr.order-total :is(th, td) {
	border-top: 1px solid #181818 !important; /* gegen die Rücksetzung oben (EduBlink) */
}
/* Versand: Bezeichnung oben bündig, Rechner-Link klein und einzeilig */
.woocommerce-cart .cart_totals tr.shipping th {
	vertical-align: top;
}
.woocommerce-cart .cart_totals tr.shipping .shipping-calculator-button {
	font-size: 13px;
	font-weight: 500;
	white-space: nowrap;
	color: var(--ekv-lila);
}
.woocommerce-cart .cart_totals tr.shipping td {
	vertical-align: top;
}
.woocommerce-cart .cart_totals tr.shipping td :is(p, form, ul, .woocommerce-shipping-calculator) {
	margin-top: 0 !important;           /* gegen WooCommerce/EduBlink-Abstand → gleiche Linie wie „Versand“ */
	padding-top: 0 !important;
}
.woocommerce-cart .cart_totals tr.order-total :is(th, td) {
	padding-bottom: 2px;                /* MwSt. direkt unter der Gesamtsumme */
}
/* EduBlink erzwingt 15 px Innenabstand in allen Summenzellen → Abstände hier verbindlich */
.woocommerce-cart .cart_totals table.shop_table :is(th, td) {
	padding: 10px 0 !important;         /* gegen EduBlink 15 px */
}
.woocommerce-cart .cart_totals table.shop_table tr.order-total :is(th, td) {
	padding: 14px 0 2px !important;     /* gegen EduBlink; MwSt. direkt darunter */
}
.woocommerce-cart .cart_totals table.shop_table tr.order-tax :is(th, td) {
	padding: 0 0 10px !important;       /* gegen EduBlink */
}
.woocommerce-cart .cart_totals tr.shipping .shipping-calculator-button {
	margin: 0 !important;               /* gegen WooCommerce 6,5 px → gleiche Linie wie „Versand“ */
	line-height: 1.45;
}

/*=== Kasse Runde 10 (Session 04, Leonhard 10.11.) ===*/
/* Reihenfolge: Zahlungsart → Bestellübersicht → AGB-Haken → „Jetzt kaufen“ */
.woocommerce-checkout #order_review {
	display: flex;
	flex-direction: column;
}
.woocommerce-checkout #order_review > * { order: 6; }
.woocommerce-checkout #order_review > h3 { order: 1; }
.woocommerce-checkout #order_review > .ppcp-messages,
.woocommerce-checkout #order_review > #payment { order: 2; }
.woocommerce-checkout #order_review > .woocommerce-checkout-review-order-table { order: 3; }
.woocommerce-checkout #order_review > .wc-gzd-checkbox-placeholder { order: 2; } /* AGB wieder nach der Zahlungsart (Leonhard 10.11., Runde 11) */
.woocommerce-checkout #order_review > .wc-gzd-order-submit { order: 5; }
.woocommerce-checkout #order_review > .wc-gzd-checkbox-placeholder-legal p.legal {
	margin: 20px 0 0;
}
/* Zahlungsart-Kasten: ohne Linie am Ende, gleich breit wie die Übersicht */
.woocommerce-checkout #payment ul.wc_payment_methods {
	border-bottom: 0 !important;        /* gegen WooCommerce-Linie */
}
.woocommerce-checkout #order_review > .woocommerce-checkout-review-order-table {
	width: 100% !important;             /* gegen WooCommerce/EduBlink-Breite (war 18 px breiter) */
	box-sizing: border-box;
}
/* Spalten: Abstand Produkt | Zwischensumme, Beträge rechtsbündig in einer Linie, rechts Platz für „×“ */
.woocommerce-checkout table.woocommerce-checkout-review-order-table :is(thead th, tbody td, tfoot th, tfoot td):last-child {
	padding-left: 20px;
	padding-right: 34px;
	text-align: right;
	font-variant-numeric: tabular-nums;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.ekv-gutschein-zeile td:last-child {
	padding-left: 0;
	padding-right: 0;
	text-align: left;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table td.product-total {
	position: relative;
}
.ekv-entfernen {
	position: absolute;
	top: 10px;
	right: 0;
	width: 28px;
	height: 28px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	color: var(--ekv-lila);
	font-size: 20px;
	line-height: 1;
	cursor: pointer;
	transition: color 0.2s ease, background-color 0.2s ease;
}
.ekv-entfernen:hover,
.ekv-entfernen:focus-visible {
	color: var(--ekv-akzent);
	background: rgba(255, 255, 255, 0.6);
}
/* „inkl. MwSt.“ direkt unter der Gesamtsumme */
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total :is(th, td) {
	padding-bottom: 2px !important;     /* gegen EduBlink-Zellabstand */
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-tax :is(th, td) {
	padding-top: 0 !important;          /* gegen EduBlink-Zellabstand */
	padding-bottom: 14px !important;
}
/* Übersicht exakt so breit wie der Zahlungsart-Kasten (Tabelle wuchs mit langen Produktnamen) */
.woocommerce-checkout #order_review > .woocommerce-checkout-review-order-table {
	table-layout: fixed;
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table thead th:first-child { width: 56%; }
.woocommerce-checkout table.woocommerce-checkout-review-order-table td.product-name { overflow-wrap: anywhere; }
.woocommerce-checkout table.woocommerce-checkout-review-order-table :is(thead th, tbody td, tfoot th, tfoot td):last-child {
	padding-right: 34px !important;     /* gegen EduBlink-Zellabstand: Platz für die „×“-Spalte, alle Beträge bündig */
}
.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.ekv-gutschein-zeile td:last-child {
	padding-right: 0 !important;
}

/*=== Therapeut:innen-Seite (04-therapeuten.php, Session 04 Runde 10) ===*/
.ekv-therapeutenfilter .e-filter { gap: 8px; justify-content: flex-start; }
.ekv-therapeutenfilter .e-filter-item {
	padding: 8px 18px; border: 1px solid #E2E2E2; border-radius: 50px; background: #FFFFFF; color: #505050;
	font-family: 'Poppins', sans-serif; font-size: 14px; font-weight: 500;
	transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}
.ekv-therapeutenfilter .e-filter-item:hover { border-color: #782373; color: #782373; }
.ekv-therapeutenfilter .e-filter-item[aria-pressed="true"] { border-color: #782373; background: #782373; color: #FFFFFF; }
.ekv-therapeutenseite .e-loop-item > .ekv-therapeut-karte { height: 100%; }
.ekv-therapeut-karte__kontakte { margin-top: auto; }
.ekv-therapeut-karte__kontakt .elementor-heading-title { overflow-wrap: anywhere; }
.ekv-therapeut-karte__kontakt .elementor-heading-title a:hover { color: #5C1A58; text-decoration: underline; text-underline-offset: 3px; }

/*=== Runde 11 (Session 04, Leonhard 10.11.) ===*/
/* Therapeut:innen: Titel links, Suchfeld rechts (mobil darunter, volle Breite) */
.ekv-therapeuten-kopf .elementor-heading-title { margin: 0; }
.ekv-therapeuten-suche { flex: 0 1 320px; }
.ekv-suche { position: relative; }
.ekv-suche input[type="search"] {
	width: 100%; height: 48px; padding: 0 44px 0 20px; box-sizing: border-box;
	border: 1px solid #E2E2E2; border-radius: 50px; background: #FFFFFF; color: #505050;
	font-family: 'Open Sans', sans-serif; font-size: 15px;
	transition: border-color 0.3s ease;
}
.ekv-suche input[type="search"]:focus { border-color: #782373; outline: 2px solid #782373; outline-offset: 2px; }
.ekv-suche svg { position: absolute; right: 18px; top: 50%; transform: translateY(-50%); color: #782373; pointer-events: none; }
@media (max-width: 767px) { .ekv-therapeuten-suche { flex-basis: 100%; } }
.ekv-therapeutenseite .e-loop-item[hidden] { display: none !important; } /* Elementor-Raster setzt display an den Karten */
/* Therapeut:innen-Karte: Hover wie alle ekvedo-Karten (Klasse ekv-karte); Hintergrund weiß, damit der Schatten wirkt */
.ekv-therapeut-karte.ekv-karte { background-color: #FFFFFF; }

/* Warenkorb: +/− und „×“ helles Lila, beim Hover dunkles Lila (ersetzt Runde 10) */
body.woocommerce-cart .woocommerce-cart-form .quantity.ekv-qty .ekv-step {
	color: var(--ekv-akzent) !important;      /* gegen Snippet 25372 (Lila mit !important) */
	background: transparent !important;
	transition: color 0.2s ease !important;
}
body.woocommerce-cart .woocommerce-cart-form .quantity.ekv-qty .ekv-step:is(:hover, :focus-visible) {
	color: var(--ekv-lila) !important;
	background: transparent !important;
}
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove,
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove i { color: var(--ekv-akzent) !important; } /* gegen EduBlink-Schwarz; Kasse bleibt dunkel (Flieder-Hintergrund, Kontrast) */
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove:is(:hover, :focus-visible),
body.woocommerce-cart .woocommerce-cart-form table.cart a.remove:is(:hover, :focus-visible) i { color: var(--ekv-lila) !important; }
/* „Aktualisieren“ und „Weiter zur Kasse“ so hoch wie „Gutschein einlösen“ (50 px) */
body.woocommerce-cart .woocommerce-cart-form button[name="update_cart"],
body.woocommerce-cart .wc-proceed-to-checkout a.checkout-button {
	height: 50px !important;                   /* gegen EduBlink 60 px */
	line-height: 50px !important;
	padding-top: 0 !important;
	padding-bottom: 0 !important;
}
/* Kasse: Versandart unter „Sendung“, Betrag rechts in der Betragsspalte */
.woocommerce-checkout-review-order-table .ekv-versandart { display: block; margin-top: 2px; font-family: 'Open Sans', sans-serif; font-size: 13px; font-weight: 400; color: #505050; }
body.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.woocommerce-shipping-totals > :is(th, td) { vertical-align: top; }
body.woocommerce-checkout table.woocommerce-checkout-review-order-table tfoot tr.woocommerce-shipping-totals td :is(label, .amount) { font-weight: inherit !important; } /* gegen WooCommerce/EduBlink-Fettdruck (!important) */
.woocommerce-checkout-review-order-table tr.woocommerce-shipping-totals td ul#shipping_method { margin: 0; padding: 0; list-style: none; }
.woocommerce-checkout-review-order-table tr.woocommerce-shipping-totals td ul#shipping_method li { margin: 0; padding: 0; text-align: right; white-space: nowrap; }

/* ==== Session 03 Mobil BEGIN (Quelle: #01 Claude/aenderungen/03-dateien/ekvedo-s03.css) ==== */
/* Breakpoints wie Elementor-Kit: Mobil ≤ 767 px, Tablet ≤ 1024 px. Desktop (≥ 1025 px) bleibt unverändert.
   !important nur gegen Element-CSS/Plugin-Regeln, jeweils kommentiert. Schriftgrößen von Elementor-Widgets
   sind nativ (…_font_size_mobile, aenderungen/03-mobil.php); hier nur Plugin-/Shortcode-Markup. */

/*--- M2: Kasse unter 992 px – EduBlink-Breite/-Rand von #customer_details aufheben (war +5 px über den Rand) ---*/
@media (max-width: 991px) {
	.woocommerce-checkout form.checkout > #customer_details {
		float: none;
		width: auto !important;     /* gegen EduBlink width: inherit !important */
		min-width: 0 !important;    /* gegen EduBlink min-width: 100 % */
		margin: 0 !important;       /* gegen EduBlink −15 px */
	}
}

/*--- M5/M6: lange Links und Wörter umbrechen (Inhalt bleibt unverändert) ---*/
@media (max-width: 767px) {
	.elementor-widget-text-editor,
	.elementor-widget-theme-post-content,
	.woocommerce-product-details__short-description {
		overflow-wrap: anywhere;
	}
	/* Zitat-Widget (Produktinhalt 28216): 40 px Schrift sprengte die 240 px breite Spalte */
	.elementor-widget-blockquote .elementor-blockquote__content {
		font-size: clamp(22px, 7vw, 32px) !important;   /* gegen Widget-Typografie (Element-CSS) */
		overflow-wrap: anywhere;
		hyphens: auto;
	}
}

/*--- M4: Danke-Seite – Container mit 100 % Breite plus 16 px Seitenrand ragten 16 px heraus ---*/
@media (max-width: 767px) {
	.elementor .elementor-element.e-con.ekv-seitenrand {   /* 0,4,0 gegen Element-CSS */
		--width: auto;
	}
}

/*--- M3: WPC Grouped Products (Sets): Zeile mit „In den Warenkorb“ passt in die Spalte (Mobil und Tablet) ---*/
@media (max-width: 1024px) {
	.woosg-products .woosg-item-product {
		flex-wrap: wrap;                  /* Warenkorb-Zeile unter Bild/Name statt rechts daneben (ragte 60 px heraus) */
	}
	.woosg-products .woosg-item-product .woosg-atc {
		flex: 1 1 100%;
		width: 100%;
	}
	.woosg-atc,
	.woosg-atc form.cart,
	.woosg-atc .woosg-quantity {
		max-width: 100%;
		box-sizing: border-box;
	}
	.woosg-atc form.cart {
		display: flex;
		flex-wrap: wrap;
		gap: 12px;
	}
	.woosg-atc .single_add_to_cart_button.woosg_single_add_to_cart_button,
	.woosg-products .woosg-atc .single_add_to_cart_button {
		flex: 1 1 100%;
		max-width: 100%;
		height: auto !important;                 /* gegen feste 48 px weiter oben (ekvedo.css, Sets) */
		min-height: 48px;
		padding-block: 12px !important;         /* gegen padding: 0 … !important weiter oben */
		white-space: normal !important;         /* gegen nowrap weiter oben */
	}
}

/*--- M2: Gutschein in der Kasse – Feld und Button untereinander ---*/
@media (max-width: 767px) {
	.ekv-gutschein {
		flex-wrap: wrap;
	}
	.ekv-gutschein input,
	.ekv-gutschein button.ekv-welle {
		flex: 1 1 100%;
		min-width: 0;
		border-radius: 50px !important;   /* gegen die Pill-Hälften weiter oben (EduBlink-Radius) */
		border-right: 1px solid #E2E2E2;
	}
	.ekv-gutschein button.ekv-welle {
		justify-content: center;
		border-right: 0;
	}
}

/*--- M2: Kasse – Bestellübersicht auf schmalen Bildschirmen (Spalten, Schrift, Entfernen-Fläche 44 px) ---*/
@media (max-width: 767px) {
	.woocommerce-checkout table.woocommerce-checkout-review-order-table :is(thead th, tbody td, tfoot th, tfoot td):first-child {
		padding-left: 12px;
	}
	.woocommerce-checkout table.woocommerce-checkout-review-order-table :is(thead th, tbody td, tfoot th, tfoot td):last-child {
		padding-left: 8px;
		padding-right: 36px !important;   /* gegen die Platz-für-„×“-Regel weiter oben (!important); 36 px = Tap-Fläche des „×“ ohne Überdeckung der Beträge */
	}
	.woocommerce-checkout table.woocommerce-checkout-review-order-table thead th {
		font-size: 14px;
		overflow-wrap: normal;
		hyphens: auto;                    /* „Zwischen-summe“ statt Bruch mitten im Wort */
	}
	.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total th,
	.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total td,
	.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total td strong,
	.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.order-total td .amount {
		font-size: 18px;
	}
	.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper {
		grid-template-columns: 44px auto;
		column-gap: 10px;
	}
	.woocommerce-checkout table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper .wc-gzd-cart-item-thumbnail {
		width: 44px;
	}
	.ekv-entfernen {
		width: 44px;                      /* Tap-Ziel; Symbol bleibt an gleicher Stelle (Mitte 14 px vom Rand), Fläche endet 36 px vom Rand = Zellabstand */
		height: 44px;
		top: 2px;
		right: -8px;
	}
}

/*--- M2: Warenkorb auf schmalen Bildschirmen – Tabelle in der Containerbreite, Gutschein-Feld mit Innenabstand ---*/
@media (max-width: 767px) {
	.woocommerce-cart table.cart {
		width: 100%;
		table-layout: fixed;              /* sonst richtet sich die Breite nach der längsten Zeile (bis 27 px zu breit bei 360 px) */
	}
	.woocommerce-cart table.cart td.actions .coupon .input-text {
		min-width: 0;                     /* sonst bleibt das Feld bei 330 px stehen (Breite regelt Block 03b Shop) */
		box-sizing: border-box;
	}
}
/* Kasse: unsichtbare Feld-Beschriftungen (screen-reader-text) hatten 340 px Breite und machten die Seite 4 px breiter */
@media (max-width: 767px) {
	.woocommerce-checkout .form-row label.screen-reader-text {
		width: 1px !important;            /* gegen die Zeilenregel der Kasse (width: 100 %) */
	}
}

/*=== Paket 2: Schrift mobil (≤ 767 px) ===*/
@media (max-width: 767px) {
	:root {
		--edublink-font-size-b1: 16px;   /* EduBlink-Basis 15 px → 16 px (Variable des Themes) */
	}
	/* Plugin-/Shortcode-Texte: Kasse 16 px; Etiketten, Pflichtangaben, Chips, Breadcrumb 14 px */
	.mollie-components-description,
	.mollie-component-label {
		font-size: 16px !important;       /* gegen Plugin-Stil */
	}
	.wc-gzd-additional-info,
	.wc-gzd-additional-info a,
	.woocommerce-breadcrumb,
	.woocommerce-breadcrumb a,
	.ekv-termin-module__datum,
	.ekv-termin-module__name,
	.ekv-chip,
	.post-navigation__prev--label,
	.post-navigation__next--label {
		font-size: 14px !important;       /* gegen Element-/Plugin-CSS */
	}
}

/*=== Paket 3: Tap-Ziele (WCAG 2.2 AA ≥ 24 px, Hauptbedienelemente 44 px) – nur Mobil und Tablet ===*/
@media (max-width: 1024px) {
	/* Kopfzeile: Menü-Symbol, Suche, Logo-Link */
	.edublink-mobile-hamburger-menu,
	button.search-trigger,
	button.close-trigger {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		min-width: 44px;
		min-height: 44px;
	}
	.edublink-mobile-hamburger-menu > a {
		display: flex;                    /* der Link füllt die 44-px-Fläche (war 18 × 28 px) */
		align-items: center;
		justify-content: center;
		width: 100%;
		min-height: 44px;
	}
	/* Logo-Links: nur Mindesthöhe, KEIN display – sonst hebt es das Ausblenden des zweiten Logos
	   im transparenten Kopf auf (.white-logo-enable .site-main-logo { display: none }) → Logo doppelt */
	a.navbar-brand.site-main-logo img,
	.elementor-widget-edublink-site-logo a.elementor-clickable {
		min-height: 44px;
		object-fit: contain;
	}
	/* Navigation im Footer: Zeilenhöhe ≥ 44 px */
	.elementor-widget-edublink-footer-menu a.nav-link {
		display: inline-flex;
		align-items: center;
		min-height: 32px;                 /* ≥ 24 px (WCAG), kompakter als 44 px (Leonhard 11.11.) */
	}
	/* Link-Zeilen (Therapeuten-Kontakt, Beitrags-Meta, Archivlisten): Höhe ≥ 24 px über Innenabstand */
	.elementor-widget-heading a,
	.elementor-widget-theme-post-content li > a,
	.elementor-widget-text-editor li > a,
	.elementor-widget-text-editor a:only-child {
		display: inline-block;
		padding-block: 4px;
		min-height: 24px;
		box-sizing: border-box;
	}
	/* Karussell-Punkte: Treffer-Fläche 24 px, Mittelpunktabstand 24 px */
	.elementor-widget .swiper-pagination-bullet {
		position: relative;
		--swiper-pagination-bullet-horizontal-gap: 8.5px;
	}
	.elementor-widget .swiper-pagination-bullet::before {
		content: "";
		position: absolute;
		inset: -8.5px;
	}
	/* Kasse: Kontrollkästchen und Optionsfelder 24 px */
	.woocommerce-checkout input[type="checkbox"],
	.woocommerce-checkout input[type="radio"] {
		width: 24px;
		height: 24px;
		flex: none;
	}
}

/*=== 03b: Feinschliff nach Durchsicht Leonhard (11.11.) ===*/

/*--- Suche (EduBlink-Overlay): ruhiges Einblenden statt Strecken, Logo passend, Suchfeld wie Therapeuten-Suche ---*/
.edu-search-popup {
	transform: none !important;       /* gegen EduBlink scale(1,0) → (1,1): streckte das Logo */
	opacity: 0;
	visibility: hidden;
	height: auto !important;          /* gegen EduBlink height: 100 % (leere Fläche unter dem Feld) */
	transition: opacity 0.2s ease, visibility 0s linear 0.2s;
}
.edu-search-popup.open {
	opacity: 1;
	visibility: visible;
	transition: opacity 0.2s ease;
}
.edu-search-popup .content-wrap {
	min-height: 0 !important;         /* gegen EduBlink 560/450 px */
	display: grid;
	grid-template-columns: 1fr auto;
	align-items: center;
	gap: 24px 16px;
	padding: 20px 20px 28px;
	box-sizing: border-box;
}
.edu-search-popup .logo-wrapper,
.edu-search-popup .close-button {
	position: static;                 /* statt absolut: Logo und Schließen in einer Zeile */
}
.edu-search-popup .logo-wrapper img {
	display: block;
	width: auto;
	height: 48px;
	max-width: 100%;
	object-fit: contain;
}
.edu-search-popup .close-button .close-trigger {
	transition: color 0.2s ease;
}
.edu-search-popup .close-button .close-trigger:hover {
	transform: none;                  /* keine Drehung */
	color: var(--ekv-lila);
}
.edu-search-popup .inner {
	grid-column: 1 / -1;
	max-width: 720px;
}
.edu-search-popup .inner .search-form {
	border-bottom: 0;
}
.edu-search-popup .inner .search-form input {
	height: 52px;
	padding: 0 56px 0 22px;
	border: 1px solid #E2E2E2;
	border-radius: 50px;
	background: #FFFFFF;
	color: #505050;
	font-family: 'Open Sans', sans-serif;
	font-size: 16px;
	box-sizing: border-box;
	transition: border-color 0.2s ease;
}
.edu-search-popup .inner .search-form input:focus {
	border-color: var(--ekv-lila);
	outline: none;                    /* 1 px Rahmen genügt (kein Doppelrahmen) */
}
.edu-search-popup .inner .search-form .submit-button {
	right: 6px;
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--ekv-lila);
}
@media (min-width: 768px) {
	.edu-search-popup .content-wrap {
		padding: 28px 40px 40px;
	}
}
@media (prefers-reduced-motion: reduce) {
	.edu-search-popup,
	.edu-search-popup.open {
		transition: none;
	}
}

/*--- Fokus: Eingabefelder 1 px Lila-Rahmen ohne zweiten Ring (überall); Links/Buttons bei Tastatur 2 px Lila ---*/
.ekv-suche input[type="search"]:focus {
	outline: none;                    /* ersetzt den früheren Doppelrahmen (Rand + Outline) */
	border-color: var(--ekv-lila);
}
:is(input:not([type="checkbox"]):not([type="radio"]):not([type="submit"]):not([type="button"]), textarea, select):focus {
	outline: none;
	border-color: var(--ekv-lila);
}
:is(a, button, [role="button"], summary, .elementor-button, .e-filter-item):focus-visible {
	outline: 2px solid var(--ekv-lila);
	outline-offset: 2px;
}
a.skip-link.screen-reader-text:focus {
	clip: auto;
	clip-path: none;
	width: auto;
	height: auto;
	top: 8px;
	left: 8px;
	z-index: 100000;
	padding: 12px 20px;
	border-radius: 50px;
	background: #FFFFFF;
	color: var(--ekv-lila);
	font-weight: 600;
	box-shadow: 0 4px 16px rgba(24, 24, 24, 0.15);
}

/*--- Touch-Geräte: Karten mit Hover-Inhalt (Startseite product-focus-card, Buch-Portrait-Karten) zeigen Text und Buttons dauerhaft ---*/
@media (hover: none) {
	.elementor .elementor-element.e-con.product-focus-card .description-container,
	.elementor .elementor-element.e-con.product-focus-card .elementor-widget-button {   /* 0,5,0 gegen Element-CSS der Karte */
		max-height: none;
		opacity: 1;
		transform: none;
	}
	.ekv-portrait-overlay {
		opacity: 1;
		transform: none;
	}
}
/* Kurzbeschreibung in Produktkarten: etwas mehr Zeilenabstand */
.ekv-portrait-overlay .elementor-widget-woocommerce-product-short-description p,
.product-focus-card .product-description,
.product-focus-card .product-description * {
	line-height: 1.6 !important;      /* gegen enge Zeilenhöhe im Element-CSS der Karte */
}
/* Touch: weißer Text auf hellem Foto → dunkler Verlauf von unten für Lesbarkeit (Kontrast) */
@media (hover: none) {
	.elementor .elementor-element.e-con.product-focus-card {
		box-shadow: inset 0 -320px 200px -80px rgba(24, 24, 24, 0.72);
	}
}

/*--- „Nach oben“-Button: gleiche Höhe/Größe wie der Cookie-Button (unten links), rechts gespiegelt, CI-Lila ---*/
.devsblink-progress-parent {
	right: 15px !important;           /* gegen Plugin-Inline-Abstand 30 px */
	bottom: 15px !important;
	width: 45px !important;
	height: 45px !important;
	background: #FFFFFF;
	box-shadow: 0 4px 14px rgba(24, 24, 24, 0.12) !important;   /* statt rotem Ring */
}
.devsblink-progress-parent svg.devsblink-back-circle path {
	stroke: var(--ekv-lila) !important;   /* Fortschrittsring Lila statt Rot */
}
.devsblink-progress-parent::after {
	color: var(--ekv-lila) !important;
}
/*--- Suche: Seite dahinter abdunkeln (Fokus auf das Feld) ---*/
.edu-search-popup.open .content-wrap {
	box-shadow: 0 0 0 100vmax rgba(24, 24, 24, 0.35);
}

/*--- Aus-/Fortbildungskarten (24501): Trennlinie genau so breit wie der Preis ---*/
/* Statt Trenner-Widget (feste 50 %) eine Linie über dem Preis selbst: passt sich jeder Preisbreite an */
.ekv-preisblock .elementor-widget-divider {
	display: none;
}
.ekv-preisblock .ekv-preisvarianten,
.ekv-preisblock .elementor-widget-woocommerce-product-price .price {
	display: inline-flex;
	padding-top: 16px;
	border-top: 1px solid var(--ekv-lila);
}
.ekv-preisblock > .ekv-preisvarianten-widget {
	align-self: stretch;              /* volle Breite: mit container-type (Schriftgröße per cqi) war das Widget sonst 0 px breit und 120 px hoch */
	width: 100%;
}
.ekv-preisblock > .elementor-widget-edublink-button {
	margin-top: 8px;
}

/*--- Referenz-Karten (Vorlage 28036) im Raster: mobil Foto links, Text rechts daneben ---*/
@media (max-width: 767px) {
	.elementor-widget-loop-grid .e-loop-item .ekv-karte > .e-con:first-child:has(> .elementor-widget-image) {
		flex-direction: row !important;   /* gegen Element-CSS der Vorlage */
		flex-wrap: nowrap !important;
		align-items: flex-start;
		gap: 16px;
	}
	.elementor-widget-loop-grid .e-loop-item .ekv-karte > .e-con:first-child > .elementor-widget-image {
		flex: 0 0 72px;
		width: 72px !important;           /* gegen Element-Breite der Vorlage */
		margin: 0 !important;
	}
	.elementor-widget-loop-grid .e-loop-item .ekv-karte > .e-con:first-child > .elementor-widget-image img {
		width: 72px;
		height: 72px;
	}
	.elementor-widget-loop-grid .e-loop-item .ekv-karte > .e-con:first-child > .elementor-widget-text-editor {
		flex: 1 1 auto;
		width: auto !important;           /* gegen Element-Breite der Vorlage */
		min-width: 0;
	}
}

/*--- Bildergalerien (Akademie): mobil zweispaltig, volle Breite, quadratische Bilder ---*/
@media (max-width: 767px) {
	.elementor-widget-image-gallery .gallery {
		display: grid !important;         /* gegen WordPress-Galerie (Float, eine Spalte) */
		grid-template-columns: 1fr 1fr;
		gap: 12px;
		margin: 0 !important;
	}
	.elementor-widget-image-gallery .gallery .gallery-item {
		max-width: none !important;
		width: auto !important;
		margin: 0 !important;
		padding: 0 !important;
	}
	.elementor-widget-image-gallery .gallery .gallery-item img {
		width: 100%;
		aspect-ratio: 1;
		object-fit: cover;
	}
}

/*--- Termine: zweispaltige Liste – Spalten dürfen schmaler als ihr längster Inhalt werden (sonst 13 px Überbreite bei 768 px) ---*/
.ekv-terminseite .elementor-loop-container.elementor-grid {
	grid-template-columns: repeat(var(--grid-columns), minmax(0, 1fr));
}
.ekv-terminseite .ekv-terminzeile,
.ekv-terminseite .ekv-terminzeile .e-con {
	min-width: 0;                     /* Karteninhalt darf schrumpfen (lief 11 px über die Spalte) */
}
/*--- Termine: Modulnamen umbrechen (zweispaltige Liste ab Tablet) ---*/
.ekv-termin-module li {
	grid-template-columns: auto minmax(0, 1fr);   /* Namensspalte darf schrumpfen, Text bricht um */
}
.ekv-termin-module__name {
	white-space: normal;
	overflow-wrap: anywhere;
}

/*--- Termine: Bilder füllen die Kartenbreite (kleine Originale waren nur 300 px breit) ---*/
.ekv-termin-bild img {
	width: 100%;
	height: auto;
}

/*--- Therapeut:innen-Filter: mobil Auswahlliste im ekvedo-Stil (inc/ekv-session03.php erzeugt das <select>) ---*/
.ekv-filterwahl {
	display: none;
}
@media (max-width: 767px) {
	.ekv-therapeutenfilter .e-filter {
		display: none !important;         /* gegen Elementor-Filter (flex); Bedienung über die Auswahlliste */
	}
	.ekv-filterwahl {
		display: block;
		width: 100%;
		height: 48px;
		padding: 0 48px 0 20px;
		border: 1px solid #E2E2E2;
		border-radius: 50px;
		background: #FFFFFF url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 1l6 6 6-6' fill='none' stroke='%23782373' stroke-width='2'/%3E%3C/svg%3E") no-repeat right 20px center;
		color: #181818;
		font-family: 'Open Sans', sans-serif;
		font-size: 16px;
		appearance: none;
		-webkit-appearance: none;
		box-sizing: border-box;
	}
	.ekv-filterwahl:focus {
		border-color: var(--ekv-lila);
		outline: none;
	}
	.ekv-therapeutenfilter {
		gap: 12px !important;             /* gegen Element-CSS des Filter-Containers */
	}
}

/*=== 03d: Seitenrand mobil mindestens 20 px (Leonhard 12.11.) ===*/
/* Oberste Container jeder Seite/Vorlage: mindestens 20 px links/rechts, größere eigene Werte bleiben (max()).
   Ausgenommen Kopfbereich, Popups und Loop-Karten (deren Innenabstand ist Teil der Karte). Hintergründe bleiben randlos. */
@media (max-width: 767px) {
	.elementor:not([data-elementor-type="header"]):not([data-elementor-type="popup"]):not([data-elementor-type="loop-item"]) > .e-con.e-parent {
		padding-left: max(20px, var(--padding-left, 0px)) !important;    /* gegen Element-CSS mit 0/10 px */
		padding-right: max(20px, var(--padding-right, 0px)) !important;
	}
	/* Alte Abschnitte (Section/Column): 10 px Abschnitt + 10 px Spalte = 20 px (auch bei Spalten ohne Innenabstand) */
	.elementor:not([data-elementor-type="header"]) > .elementor-section.elementor-top-section > .elementor-container {
		padding-left: 10px;
		padding-right: 10px;
	}
	.elementor:not([data-elementor-type="header"]) > .elementor-section.elementor-top-section > .elementor-container > .elementor-column > .elementor-element-populated {
		padding-left: 10px !important;      /* gegen Spalten-Innenabstand 0 im Element-CSS */
		padding-right: 10px !important;
	}
	/* Theme-Inhalte ohne Elementor (Beiträge, Konto-Anmeldung): 20 statt 15 px */
	.site-content :is(.container, .edublink-container, .edu-container) {
		padding-left: 20px;
		padding-right: 20px;
	}
}

/*--- Produkt-Sets (WPC Grouped): Bild quadratisch links, Titel/Preis/Beschreibung rechts, Button rechtsbündig ---*/
.woosg-products .woosg-item-product {
	display: grid !important;           /* gegen woosg-Flex */
	grid-template-columns: 88px minmax(0, 1fr);
	grid-template-areas: "bild text" "kauf kauf";
	column-gap: 16px;
	row-gap: 12px;
	align-items: start;
}
.woosg-products .woosg-item-product > .woosg-thumb {
	grid-area: bild;
	width: 88px !important;             /* gegen woosg-/ekvedo-Breite (Rahmen war 150 px breit) */
	max-width: 88px;
	height: 88px;
	margin: 0;
	overflow: hidden;
	border-radius: 12px;
	box-sizing: border-box;
}
.woosg-products .woosg-item-product > .woosg-thumb :is(a, .woosg-thumb-ori) {
	display: block;
	width: 100%;
	height: 100%;
}
.woosg-products .woosg-item-product > .woosg-thumb img {
	width: 100% !important;             /* gegen woosg/Theme-Bildbreite */
	height: 100% !important;
	aspect-ratio: 1;
	object-fit: cover;
	border-radius: 12px;
}
.woosg-products .woosg-item-product > .woosg-title {
	grid-area: text;
	min-width: 0;
}
.woosg-products .woosg-item-product > .woosg-atc {
	grid-area: kauf;
	justify-self: end;
	margin: 0 !important;               /* gegen woosg-Abstand oben (großer Leerraum vor dem Button) */
	padding: 0 !important;
	width: auto !important;             /* gegen Mobilregel oben (100 %) */
	flex: none !important;
}
.woosg-products .woosg-item-product > .woosg-atc .single_add_to_cart_button {
	flex: none !important;
	width: auto !important;
}
/* Set-Zeile: Name kompakt, Preis darunter, Beschreibung ruhig */
.woosg-products .woosg-item-product .woosg-name,
.woosg-products .woosg-item-product .woosg-name a {
	font-family: 'Poppins', sans-serif;
	font-size: 17px !important;         /* gegen Theme-/woosg-Größe (26 px, große Zeilenhöhe) */
	font-weight: 600;
	line-height: 1.35 !important;
	color: #181818;
}
.woosg-products .woosg-item-product .woosg-price,
.woosg-products .woosg-item-product .woosg-price .amount {
	margin: 4px 0 6px;
	font-size: 18px !important;         /* gegen woosg-/ekvedo-Preisgröße */
	line-height: 1.3;
}
.woosg-products .woosg-item-product .woosg-description {
	margin: 0;
	line-height: 1.55;
}
/* Beschreibung im Set: Überschriften aus dem Produkttext klein, höchstens 4 Zeilen */
.woosg-products .woosg-item-product .woosg-description :is(h1, h2, h3, h4, h5, h6) {
	font-size: 16px !important;         /* gegen Theme-Überschriften (Produkttext enthält H1/H2) */
	line-height: 1.5;
	margin: 0 0 4px;
}
.woosg-products .woosg-item-product .woosg-description {
	display: -webkit-box;
	-webkit-line-clamp: 4;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
/* Shop-Untermenü „Produkt Sets | Bücher | Arbeitshilfen“: mittig, nicht umbrechen */
@media (max-width: 767px) {
	.elementor .e-con.ekv-shopmenue {    /* Raster-Container der Vorlage 23544 */
		--e-con-grid-template-columns: repeat(3, auto);
		justify-content: center;
		column-gap: 24px;
	}
}
.ekv-shopmenue .elementor-heading-title {
	white-space: nowrap;
}
/*--- 03e (Leonhard 12.11., 2. Sichtprüfung): Ausbildungsseiten ---*/
/* Termin-Raster: im Flex-Container mit Umbruch (Spaltenrichtung) berechnete Chrome die Höhe bei falscher Breite –
   die Karten ragten 110 px in den folgenden Ausbildungskasten. Volle Breite = richtige Höhe. */
.elementor-widget-loop-grid.ekv-termine-raster {
	width: 100%;
}
/* Mobil zweispaltig: nativ (columns_mobile 2, 03b-feinschliff.php). Preis-Shortcode: container-type:inline-size
   lässt das Widget in einer umbrechenden Elementor-Spalte (mobil Standard --flex-wrap-mobile: wrap) in Mindestbreite
   messen – 136 px hoch statt 58 px, weiße Lücke unter dem Preis. Volle Breite = richtige Höhe. */
.e-con > .ekv-preisvarianten-widget:not(.ekv-rechts) {
	width: 100%;
}
/* „Dein Weg als …“ (Klasse ekv-textbox, Rahmen nativ wie „Bausteine“): eingefügte Tabelle ohne Gitter/Grau, linksbündig */
.ekv-textbox :is(table, tbody, tr, td) {
	border: 0 !important;             /* gegen EduBlink-Tabellenrahmen */
	background: transparent !important;
	text-align: left !important;      /* gegen zentrierte Tabellenzellen (EduBlink) */
}
.ekv-textbox table { width: 100%; margin: 0; }
.ekv-textbox td { padding: 0 !important; }
@media (max-width: 767px) {
	.ekv-textbox h2 { font-size: 22px; line-height: 1.3; }   /* „Pferdeosteopath|in“ bleibt im Rahmen ganz */

	/* Zweispaltige Loops mobil (columns_mobile 2 → Elementor-Klasse elementor-grid-mobile-2), Leonhard 12.11.:
	   Terminkarten zeigen in der halben Breite nur Bild + Titel; die Modulliste (Touch: dauerhaft offen) passt nicht
	   in 135 px und steht vollständig hinter „Zu den Terminen“. */
	.elementor-grid-mobile-2 .ekv-terminkarte .ekv-terminkarte__module {
		display: none;
	}
	/* Spalten dürfen schrumpfen (Elementor: repeat(n, 1fr) = Mindestbreite des Inhalts → 23 px Überbreite) */
	.elementor-grid-mobile-2 > .elementor-widget-container > .elementor-loop-container,
	.elementor-grid-mobile-2 > .elementor-loop-container {
		grid-template-columns: repeat(2, minmax(0, 1fr)) !important;   /* gegen Element-CSS der Loop-Spalten */
		column-gap: 12px !important;
	}
	.elementor-grid-mobile-2 .ekv-terminkarte .ekv-terminkarte__titel .elementor-heading-title {
		overflow-wrap: normal;
		hyphens: auto;                    /* „Pferde-osteo-path|in“ statt Bruch mitten im Wort (lang=de) */
	}
	/* Produktkarten (Vorlage 25836, Up-/Cross-Sells): kompakt für ~160 px Breite – keine Wortbrüche in Titel/Buttons */
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .e-con {
		--padding-top: 12px; --padding-right: 12px; --padding-bottom: 12px; --padding-left: 12px;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .e-con .e-con {
		--padding-top: 0px; --padding-right: 0px; --padding-bottom: 0px; --padding-left: 0px;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-widget-woocommerce-product-title {
		--e-transform-origin-x: left;
		padding: 0 !important;            /* gegen Element-CSS 10 px */
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-widget-woocommerce-product-title .elementor-heading-title {
		font-size: 15px !important;       /* gegen Widget-Typografie der Kartenvorlage */
		line-height: 1.35 !important;
		overflow-wrap: normal;
		hyphens: auto;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte :is(.price, .price .woocommerce-Price-amount, .ekv-preisvariante__preis) {
		font-size: 18px !important;       /* gegen Widget-Typografie; Betrag bleibt in einer Zeile */
		white-space: nowrap;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-widget-text-editor {
		font-size: 12px;
		line-height: 1.4;
		text-align: right;                /* Preise und Hinweis rechtsbündig (Leonhard 12.11.) */
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-widget-woocommerce-product-price { text-align: right; }
	/* Einfacher Preis: Element-CSS der Kartenvorlage (25836/cee569d) setzt 30 px !important (0,6,1) – in der halben
	   Breite füllte der Betrag die Spalte; jetzt so groß wie die Variantenpreise, sichtbar rechtsbündig. */
	body .elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-element p.price .woocommerce-Price-amount.amount {
		font-size: 22px !important;
		margin-right: 0 !important;       /* gegen 12 px Element-CSS: bündig mit „inkl. MwSt.“ */
	}
	/* Variable Produkte: Preisvarianten untereinander, rechtsbündig; „oder“ klein dazwischen */
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-preisvarianten {
		flex-direction: column;
		flex-wrap: nowrap;
		align-items: flex-end;
		gap: 2px;
		text-align: right;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-preisvarianten-widget { width: 100%; }   /* Höhe richtig messen (container-type, s. o.) */
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-preisvariante { align-items: flex-end; }
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-preisvarianten__oder {
		align-self: flex-end;
		font-size: 12px;
		line-height: 1.2;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-preisvariante__name { font-size: 13px; }
	/* Raten-Hinweis (i) in der halben Kartenbreite: an der vollen Breite des Preis-Widgets (container-type macht es zum
	   Bezugsrahmen) unter den Preisen statt am Knopf – sonst ragte er aus der linken Karte über den Bildschirmrand
	   (Codex-Review s03f/01). */
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-info { position: static; }
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-preisvarianten-widget { position: relative; }
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .ekv-info__inhalt {
		inset: calc(100% + 4px) 0 auto 0 !important;   /* gegen right:-12px der Basisregel */
		width: auto !important;           /* gegen min(320px, 80vw) */
		z-index: 20;
		text-align: left;
		white-space: normal;              /* erbte nowrap → 37 px innere Überbreite */
		overflow-wrap: anywhere;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .e-con:has(> .elementor-widget-button) {
		--gap: 8px; gap: 8px;             /* Ansehen/Warenkorb dicht untereinander */
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-widget-button,
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-button {
		width: 100%;
	}
	.elementor-grid-mobile-2 .e-loop-item .ekv-karte .elementor-button {
		justify-content: center;
		padding: 10px 8px !important;     /* gegen Button-Innenabstand der Vorlage */
		font-size: 13px !important;
		white-space: nowrap;
	}
}
/* Zitat im lila Feld: EduBlink setzt unter 992 px 35/30/35/100 px Innenabstand (für sein Zitat-Icon links) –
   der Text stand in einer 180 px schmalen Spalte. Jetzt gleichmäßiger Rand, Text füllt das Feld. */
@media (max-width: 991px) {
	.elementor-widget-blockquote blockquote.elementor-blockquote {
		margin: 0;
		padding: 32px 24px !important;   /* gegen EduBlink main.css blockquote padding … !important */
	}
	.elementor-widget-blockquote blockquote.elementor-blockquote::after {
		display: none;                    /* EduBlink-Icon gehört zum 100-px-Einzug; Elementor-Anführungszeichen bleibt */
	}
}
@media (max-width: 767px) {
	.elementor-widget-blockquote .elementor-blockquote__content {
		font-size: clamp(20px, 6vw, 26px) !important;   /* ersetzt 7vw aus M5/M6; gegen Widget-Typografie */
		line-height: 1.35;
		hyphens: manual;                  /* keine Trennung mitten in „Struktur“, „Bewegung“ */
		overflow-wrap: normal;
	}
}
/* ==== Session 03 Mobil END ==== */

/* ==== Session 03b Shop BEGIN ====
 * Vollständig NACH „Session 03 Mobil END“ an ekvedo.css anhängen.
 * Bei Wiederholung diesen BEGIN/END-Block ersetzen; ältere Blöcke behalten.
 * Klassische Shortcodes, EduBlink, Germanized, Elementor V3; kein Block-Checkout.
 * Neue Namen: ekv-; vorhandene Woo-/Theme-Klassen und stabile Formular-IDs bleiben.
 * #main ist der in allen fünf Exporten belegte Theme-Inhaltsbereich, keine Elementor-ID.
 * 767/1024 sind die vorgegebenen Kit-Grenzen; 768/1025 deren Gegenbereiche.
 * Jede !important-Ausnahme nennt den kollidierenden Theme-/Plugin-Bestand.
 */

/* CI-Tokens nur auf den drei Shop-Seitentypen; keine neue Schriftdatei laden. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) {
	--ekv-shop-primary: #782373;
	--ekv-shop-hover: #5C1A58;
	--ekv-shop-tint: #EDCBF6;
	--ekv-shop-gold: #D98F1F;
	--ekv-shop-text: #505050;
	--ekv-shop-heading: #181818;
	--ekv-shop-line: #E2E2E2;
	--ekv-shop-surface: #F4F4F4;
	--ekv-shop-body: 'Open Sans', sans-serif;
	--ekv-shop-title: 'Poppins', sans-serif;
}

/* Intrinsische Breiten dürfen innerhalb der Shortcodes schrumpfen. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce :is(form, nav, table, th, td, input, button, .button) {
	box-sizing: border-box;
	min-width: 0;
}

/* Aktionsbuttons: natürliche Höhe verhindert abgeschnittene mehrzeilige Texte. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce :is(.button, .ekv-gutschein button, .ekv-crosssells .elementor-button) {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-width: 44px;
	min-height: 48px;
	height: auto !important; /* EduBlink und dessen 50/60-px-Korrekturen, E:2979–2985. */
	padding: 8px 16px !important; /* EduBlink-Buttonabstände inkl. E:2983–2984. */
	border: 1px solid var(--ekv-shop-primary);
	border-radius: 999px;
	/* Grundfläche Lila (sonst z. B. „Warenkorb anzeigen“ in Hinweisen weiß auf weiß). Die Verlaufswelle liegt als
	   eigene Ebene (::before/::after, ekvedo.css „ekv-welle“) darüber und bleibt erhalten – Leonhard 12.11.: Welle behalten */
	background: var(--ekv-shop-primary) !important; /* EduBlink/WooCommerce weiße Hinweisbuttons. */
	color: #FFFFFF !important; /* EduBlink-Buttonfarben, auch :hover/:focus. */
	font-family: var(--ekv-shop-title);
	font-size: 14px !important; /* EduBlink 12-px-Buttonregel, vgl. E:854. */
	font-weight: 600 !important; /* EduBlink 700, vgl. E:855. */
	line-height: 1.5 !important; /* EduBlink feste Button-Zeilenhöhen. */
	letter-spacing: 0;
	text-transform: none;
	text-decoration: none;
	text-align: center;
	white-space: normal;
	overflow-wrap: anywhere;
	box-shadow: none;
}

/* Hover: Textfarbe weiß; Fläche/Verlaufswelle kommt aus der bestehenden ekv-welle-Regel (Welle behalten, Leonhard 12.11.). */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce :is(.button, .ekv-gutschein button, .ekv-crosssells .elementor-button):not(:disabled):not(.disabled):is(:hover, :focus-visible) {
	color: #FFFFFF !important; /* EduBlink-Linkfarben. */
}

/* „Zur Kasse“/„Zahlungspflichtig bestellen“ bleiben Lila wie alle Shop-Buttons (Leonhard 12.11.2026: kein Gold). */

/* Sekundäre Konto-Aktionen und Aktualisieren als Kontur; alle Rechnungsnummern abgedeckt. */
body.woocommerce-account #main .woocommerce .woocommerce-orders-table__cell-order-actions .button:not(.view):not(.pay),
body.woocommerce-cart #main .woocommerce button[name="update_cart"] {
	background: #FFFFFF !important; /* EduBlink gefüllte Sekundärbuttons. */
	color: var(--ekv-shop-primary) !important; /* EduBlink weißer Buttontext. */
}

/* Kontur-Hover mit gut lesbarer Fliederfläche. */
body.woocommerce-account #main .woocommerce .woocommerce-orders-table__cell-order-actions .button:not(.view):not(.pay):is(:hover, :focus-visible),
body.woocommerce-cart #main .woocommerce button[name="update_cart"]:not(:disabled):is(:hover, :focus-visible) {
	background: var(--ekv-shop-tint) !important; /* EduBlink-Hover/Welle. */
	color: var(--ekv-shop-hover) !important; /* EduBlink-Hovertext. */
}

/* Gutscheine bleiben auch mobil ein gemeinsames Feld/Button-Paar; Label bleibt im DOM. */
body.woocommerce-cart #main table.cart td.actions .coupon,
body.woocommerce-checkout #main .ekv-gutschein {
	display: flex;
	flex-direction: row !important; /* Korrektur Claude: EduBlink stellt mobil auf column um. */
	flex-wrap: nowrap;
	align-items: stretch;
	gap: 0;
	width: 100%;
	max-width: 560px;
	min-width: 0;
	margin: 0;
	float: none;
}

/* Nur das Gutscheinlabel wird visuell verborgen, bleibt für das Eingabefeld verknüpft. */
body.woocommerce-cart #main table.cart td.actions .coupon > label {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

/* Feld erhält die linke Pill-Hälfte; 16 px verhindert iOS-Eingabezoom. */
body.woocommerce-cart #main table.cart td.actions .coupon input.input-text,
body.woocommerce-checkout #main .ekv-gutschein input {
	flex: 1 1 45%;
	width: 0;
	min-width: 0;
	max-width: none;
	min-height: 48px;
	height: auto;
	margin: 0;
	padding: 8px 16px;
	border: 1px solid var(--ekv-shop-primary);
	border-right: 0;
	border-radius: 999px 0 0 999px !important; /* Session-03-Pluginoverride E:3069 auf volle Pill. */
	background: #FFFFFF;
	color: var(--ekv-shop-heading);
	font: 400 16px/1.5 var(--ekv-shop-body);
}

/* Button teilt dieselbe Zeile; Text darf bei Zoom innerhalb seiner Hälfte umbrechen. */
body.woocommerce-cart #main table.cart td.actions .coupon button,
body.woocommerce-checkout #main .ekv-gutschein button.ekv-welle {
	flex: 0 1 55%;
	width: auto;
	max-width: 55%;
	min-width: 44px;
	margin: 0;
	border-radius: 0 999px 999px 0 !important; /* EduBlink-Radius und Session-03-Gegenregel. */
	white-space: normal;
}

/* Rückmeldungen stehen wieder in DOM-/Lesereihenfolge vor dem Warenkorb. */
body.woocommerce-cart #main .woocommerce:has(> .woocommerce-cart-form) {
	display: block;
	padding-top: 24px;
}

/* Hinweise bleiben vollständig, mit Icon-Freiraum und klarer Trennung zur Produktliste. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce-notices-wrapper:not(:empty) {
	margin: 0 0 24px;
}

/* Erfolg/Info auf heller Fläche: Fokus Lila ist sichtbar; Fehlerfarben bleiben separat. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main :is(.woocommerce-message, .woocommerce-info) {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px;
	margin: 0 0 16px;
	padding: 16px 16px 16px 48px;
	border-radius: 12px;
	background: var(--ekv-shop-surface);
	color: var(--ekv-shop-text);
	font: 400 16px/1.5 var(--ekv-shop-body);
	overflow-wrap: anywhere;
}

/* Hinweis-Icons behalten Bedeutung, erhalten aber eine kontrastreiche Farbe. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main :is(.woocommerce-message, .woocommerce-info)::before {
	top: 16px;
	left: 16px;
	color: var(--ekv-shop-primary);
}

/* Hinweisbuttons ohne Theme-Float; Meldungstext bleibt vor der Aktion. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main :is(.woocommerce-message, .woocommerce-info, .woocommerce-error) a.button {
	float: none;
	margin: 0;
}

/* Stepper im Warenkorb hat drei jeweils mindestens 44 px breite Bedienfelder. */
body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty {
	display: inline-flex;
	align-items: stretch;
	width: 144px;
	height: 48px;
	margin: 0;
	padding: 0;
	float: none;
	border: 0;
	border-radius: 999px;
	background: #FFFFFF;
	box-shadow: inset 0 0 0 1px var(--ekv-shop-primary);
	overflow: visible;
}

/* Auch die Desktop-Tabelle zeigt quadratische Medien, ohne die sechs Spalten umzubauen. */
body.woocommerce-cart #main table.cart .product-thumbnail img {
	width: 64px;
	height: 64px;
	max-width: 100%;
	aspect-ratio: 1;
	object-fit: contain;
	border-radius: 8px;
	background: var(--ekv-shop-surface);
}

/* +/- ersetzen die kontrastärmeren Akzente aus Runde 11. */
body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty .ekv-step {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 1 0 48px;
	width: 48px;
	min-height: 44px;
	height: auto;
	padding: 0;
	margin: 0;
	border: 0;
	border-radius: 999px;
	background: transparent !important; /* EduBlink-/Snippet-Override E:2965–2972. */
	color: var(--ekv-shop-primary) !important; /* EduBlink-/Snippet-Override E:2966. */
	font: 600 20px/1 var(--ekv-shop-body);
	box-shadow: none;
	transition: none !important; /* EduBlink-/Snippet-Override E:2968. */
}

/* Zahlenfeld wird 48 px breit, statt der vorhandenen 36-px-Themekorrektur. */
body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty input.qty {
	flex: 0 0 48px !important; /* E:2699–2703 korrigiert EduBlink mit !important. */
	width: 48px !important; /* Derselbe EduBlink-Override. */
	min-height: 44px;
	height: 100%;
	margin: 0;
	border: 0;
	border-radius: 0;
	background: #FFFFFF;
	color: var(--ekv-shop-heading);
	font: 400 16px/1.5 var(--ekv-shop-body);
	text-align: center;
	appearance: textfield;
}

/* Native Zusatzpfeile würden die Zahleneingabe verengen; eigene Stepper bleiben. */
body.woocommerce-cart #main .woocommerce-cart-form input.qty::-webkit-inner-spin-button,
body.woocommerce-cart #main .woocommerce-cart-form input.qty::-webkit-outer-spin-button {
	-webkit-appearance: none;
	margin: 0;
}

/* Entfernen erhält eine reale 44×44-Fläche ohne absolute Überlagerung. */
body.woocommerce-cart #main .woocommerce-cart-form table.cart a.remove,
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table .ekv-entfernen {
	position: static;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	min-width: 44px;
	height: 44px;
	min-height: 44px;
	padding: 0;
	margin: 0;
	border: 1px solid var(--ekv-shop-primary);
	border-radius: 999px;
	background: transparent !important; /* EduBlink Entfernen-Override E:2706ff. */
	color: var(--ekv-shop-primary) !important; /* EduBlink Entfernen-Override E:2974ff. */
	font-size: 20px;
	line-height: 1;
	text-decoration: none;
}

/* Iconfont folgt der kontrollierten Farbe seines Entfernen-Links. */
body.woocommerce-cart #main .woocommerce-cart-form table.cart a.remove i {
	color: inherit !important; /* EduBlink-Iconfarbe und E:2974–2977. */
}

/* Hover/Fokus für kleine Aktionen bleibt gut sichtbar und kontrastreich. */
body.woocommerce-cart #main .woocommerce-cart-form a.remove:is(:hover, :focus-visible),
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table .ekv-entfernen:is(:hover, :focus-visible) {
	background: var(--ekv-shop-tint) !important; /* EduBlink/Plugin-Hover. */
	color: var(--ekv-shop-hover) !important; /* EduBlink/Plugin-Hover. */
}

/* +/- im Mengenfeld: nur Farbwechsel, keine Fläche (Fläche erschien als Quadrat in der Pille, Leonhard 12.11.2026). */
body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty .ekv-step:is(:hover, :focus-visible) {
	background: transparent !important; /* EduBlink/Plugin-Hover. */
	color: var(--ekv-shop-hover) !important; /* EduBlink/Plugin-Hover. */
}

/* Summenblock: nur horizontale Trennung, auch tr/tbody verlieren Bootstrap-Seitenlinien. */
body.woocommerce-cart #main .cart_totals table.shop_table,
body.woocommerce-cart #main .cart_totals table.shop_table :is(tbody, tr, th, td) {
	border-left: 0 !important; /* EduBlink .table-bordered. */
	border-right: 0 !important; /* EduBlink .table-bordered. */
	box-shadow: none;
	background: transparent;
}

/* Summen im 8-px-Rhythmus, Schrift wie die übrigen Daten. */
body.woocommerce-cart #main .cart_totals table.shop_table :is(th, td) {
	padding: 8px 0 !important; /* EduBlink-Zellabstände samt E:2837–2845. */
	font-family: var(--ekv-shop-body);
	font-size: 16px;
	line-height: 1.5;
	vertical-align: top;
}

/* Gesamtsumme ist durch Gewicht/Linie hervorgehoben, nicht durch einen Fontwechsel. */
body.woocommerce-cart #main .cart_totals table.shop_table tr.order-total :is(th, td) {
	padding-top: 16px !important; /* EduBlink-Zellabstand E:2840–2841. */
	font-size: 18px;
	font-weight: 600;
}

/* Beschriftung links, Zahl rechts; Versand darf auch bei langen Ortsnamen wachsen. */
body.woocommerce-cart #main .cart_totals table.shop_table :is(th, td, label, p) {
	white-space: normal;
	overflow-wrap: anywhere;
}

/* Preisziffern bleiben innerhalb einzelner Beträge zusammen und sind vergleichbar breit. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce .amount {
	font-variant-numeric: tabular-nums;
	white-space: nowrap;
}

/* Summenaktionen/Versandrechner haben Platz für Finger und Tastatur. */
body.woocommerce-cart #main .cart_totals .shipping-calculator-button {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	white-space: normal;
	color: var(--ekv-shop-primary);
	text-decoration: underline;
}

/* Cross-Sell-Abschnitt bekommt Abstand und kann seine natürliche Höhe einnehmen. */
body.woocommerce-cart #main .cart-collaterals .ekv-crosssells {
	margin-block: 32px 0;
	padding-bottom: 32px;
	height: auto;
	max-height: none;
	overflow: visible;
}

/* Rasterabstände schlagen das eingebettete Elementor-Widget-CSS ohne Element-ID. */
body.woocommerce-cart #main .ekv-crosssells .elementor-widget-loop-grid {
	--grid-row-gap: 24px;
	--grid-column-gap: 24px;
}

/* Bild bleibt Hintergrund; ein quadratischer Bildbereich steht über dem normalen Textfluss. */
body.woocommerce-cart #main .ekv-crosssells .e-loop-item > .ekv-portrait-card.e-con {
	--overflow: visible;
	--justify-content: flex-start;
	--overlay-opacity: 0;
	display: flex;
	flex-direction: column;
	aspect-ratio: auto;
	height: auto;
	min-height: 0;
	max-height: none;
	padding: 100% 0 0;
	background-position: center top;
	background-size: 100% auto;
	background-repeat: no-repeat;
	background-color: var(--ekv-shop-surface);
	border: 1px solid var(--ekv-shop-line);
	border-radius: 12px;
	overflow: visible !important; /* Elementor-Loop 26022: overflow:hidden !important im Export W:241. */
	box-shadow: none;
	transform: none;
	transition: none;
}

/* Dekorative Verlaufsabdeckung entfällt; Titel/Text liegen auf Weiß statt auf dem Bild. */
body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-card.e-con::before,
body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay.e-con::before {
	display: none;
}

/* Overlay wird ein wachsender Inhaltsbereich; Touch braucht keinen Hover zum Lesen. */
body.woocommerce-cart #main .ekv-crosssells .e-loop-item .ekv-portrait-overlay.e-con {
	--position: static;
	--overflow: visible;
	--row-gap: 16px;
	--gap: 16px;
	position: static;
	inset: auto;
	display: flex;
	flex-direction: column;
	gap: 16px;
	width: 100%;
	height: auto;
	min-height: 0;
	max-height: none;
	margin: 0;
	padding: 16px;
	border-radius: 0 0 12px 12px;
	background: #FFFFFF;
	opacity: 1;
	transform: none;
	overflow: visible;
	transition: none;
}

/* Cross-Sell-Titel folgen der CI statt weißer Overlay-Schrift. */
body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .elementor-heading-title {
	color: var(--ekv-shop-heading);
	font-family: var(--ekv-shop-title);
	font-weight: 600;
	font-size: 18px;
	line-height: 1.5;
	text-shadow: none;
	overflow-wrap: anywhere;
}

/* Beschreibungen bleiben vollständig und ohne feste Höhe. */
body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .woocommerce-product-details__short-description {
	color: var(--ekv-shop-text);
	font: 400 16px/1.5 var(--ekv-shop-body);
	max-height: none;
	overflow: visible;
}

/* Bestehender Buttoncontainer darf seine zwei Aktionen umbrechen. */
body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay > .e-con {
	--flex-wrap: wrap;
	--gap: 8px;
	flex-wrap: wrap;
	gap: 8px;
	max-width: 100%;
}

/* Jeder Button darf seine Widget-Breite verkleinern; Elementor setzt sonst flex-shrink:0. */
body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .elementor-widget-button {
	flex: 1 1 120px;
	min-width: 0;
	max-width: 100%;
}

/* Cross-Sell-Aktionen füllen ihre Zelle mit mindestens 44 px Höhe. */
body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .elementor-button {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 48px;
	padding: 8px 16px;
	font: 600 14px/1.5 var(--ekv-shop-title);
	border-radius: 999px;
	color: #FFFFFF;
	background: var(--ekv-shop-primary);
}

/* Checkout-Felder: Beschriftungen und Eingaben bleiben in natürlicher DOM-Reihenfolge. */
body.woocommerce-checkout #main form.checkout :is(.woocommerce-billing-fields__field-wrapper, .woocommerce-shipping-fields__field-wrapper) {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr)); /* Korrektur Claude (Leonhard 11.11.): Paare auch mobil zweispaltig */
	gap: 16px;
}

/* Zeilenbreiten übersteuern die alten first/last-Floats, nicht display:none von Länderfeldern. */
body.woocommerce-checkout #main form.checkout :is(.woocommerce-billing-fields__field-wrapper, .woocommerce-shipping-fields__field-wrapper) > .form-row {
	grid-column: 1 / -1;
	float: none;
	clear: none;
	width: auto;
	margin: 0;
	padding: 0;
}

/* Eingabeflächen mit sichtbarer Begrenzung: E2E2E2 bleibt für dekorative Boxen reserviert. */
body.woocommerce-checkout #main form.checkout .form-row :is(input.input-text, textarea),
body.woocommerce-checkout #main form.checkout .select2-container .select2-selection--single {
	min-height: 48px;
	border-color: var(--ekv-shop-primary);
	font: 400 16px/1.5 var(--ekv-shop-body);
}

/* Vorhandene Validierungszustände bleiben zusätzlich zur Textmeldung erkennbar. */
body.woocommerce-checkout #main form.checkout .form-row.woocommerce-invalid :is(input.input-text, textarea, .select2-selection--single) {
	border-color: #C0342B;
}

/* Select2-Höhe bleibt bei 200-%-Textzoom flexibel. */
body.woocommerce-checkout #main form.checkout .select2-container .select2-selection--single {
	height: auto;
	padding-block: 8px;
}

/* Ländername darf mehrzeilig werden, ohne hinter dem Pfeil zu verschwinden. */
body.woocommerce-checkout #main form.checkout .select2-container .select2-selection--single .select2-selection__rendered {
	line-height: 1.5;
	white-space: normal;
	overflow-wrap: anywhere;
}

/* Pflichtzustimmungen getrennt, ohne leere Germanized-Platzhalter aufzublasen. */
body.woocommerce-checkout #main #order_review > .wc-gzd-checkbox-placeholder:has(p.legal) {
	margin-block: 24px 0;
}

/* Alte AGB-Sondermarge wird vereinheitlicht; Text und Kontrollkästchen bleiben unverändert. */
body.woocommerce-checkout #main #order_review > .wc-gzd-checkbox-placeholder p.legal {
	margin: 0;
	padding: 0;
}

/* Die ganze Checkbox-Beschriftung ist mindestens 44 px hoch anklickbar. */
body.woocommerce-checkout #main form.checkout :is(.woocommerce-form__label-for-checkbox, .wc_payment_method > label) {
	display: block;
	min-height: 44px;
	padding-block: 8px;
	font: 400 16px/1.5 var(--ekv-shop-body);
	color: var(--ekv-shop-text);
	cursor: pointer;
}

/* Native Kontrollkästchen bleiben erhalten; sichtbare Fläche 24 px, Ziel über das Label ≥44 px. */
body.woocommerce-checkout #main form.checkout input:is([type="checkbox"], [type="radio"]) {
	width: 24px;
	height: 24px;
	margin-inline: 0 8px;
	vertical-align: middle;
	accent-color: var(--ekv-shop-primary);
}

/* Rechtstextlinks erhalten Unterstreichung und bleiben im Textfluss. */
body.woocommerce-checkout #main form.checkout .legal a {
	color: var(--ekv-shop-primary);
	text-decoration: underline;
	text-underline-offset: 3px;
}

/* Bestellübersicht hält Abstand zu den Zustimmungen. */
body.woocommerce-checkout #main #order_review > table.woocommerce-checkout-review-order-table {
	margin-block: 24px;
	padding: 16px !important; /* EduBlink-Override E:574 setzt zuvor 20 px !important. */
}

/* Datenhierarchie: Open Sans 16 px für Produktnamen, Menge, Beträge und Summen. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table :is(th, td, .ekv-artikel, .ekv-artikel__name, .ekv-menge, .amount, .ekv-zeilensumme, strong) {
	font-family: var(--ekv-shop-body);
	font-size: 16px;
	line-height: 1.5;
	color: var(--ekv-shop-text);
}

/* Namen bleiben normalgewichtig; semantische Summenhervorhebung darf bestehen. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table :is(.ekv-artikel, .ekv-artikel__name, .ekv-menge) {
	font-weight: 400;
}

/* Bild/Name-Raster: feste quadratische Medienfläche und schrumpfbare Textspalte. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper {
	display: grid;
	grid-template-columns: 48px minmax(0, 1fr);
	gap: 8px;
	align-items: start;
}

/* Thumbnail-Wrapping löst die frühere 44/60-px-Mischung auf. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tr.wc-gzd-cart-item-has-thumbnail .wc-gzd-cart-item-name-wrapper .wc-gzd-cart-item-thumbnail {
	width: 48px;
	height: 48px;
	margin: 0;
}

/* Thumbnail füllt das Quadrat (cover, keine weißen Balken – Leonhard 12.11., 2. Sichtprüfung). */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table .wc-gzd-cart-item-thumbnail img {
	display: block;
	width: 100%;
	height: 100%;
	aspect-ratio: 1;
	object-fit: cover;
	border-radius: 8px;
	background: #FFFFFF;
}

/* Rechte Betragsspalte benötigt keinen Platzhalter für absolut positioniertes Entfernen mehr. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table :is(thead th, tbody td, tfoot th, tfoot td):last-child {
	padding-inline: 8px 0 !important; /* EduBlink-Abstand und E:2925/3084 mit 34/36 px rechts. */
	text-align: right;
	font-variant-numeric: tabular-nums;
}

/* Entfernen liegt nach dem Betrag im Fluss, auf eigener 44-px-Zeile. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table td.product-total .ekv-entfernen {
	display: flex;
	margin: 8px 0 0 auto;
}

/* Variante ändern ist ein eigenständiges, gut erreichbares Ziel. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table a.ekv-auswahl-aendern {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	align-self: flex-start;
}

/* Gutschein belegt beide Tabellenspalten ohne alten Rechtsabstand. */
body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tfoot tr.ekv-gutschein-zeile td:last-child {
	padding: 16px 0 !important; /* EduBlink-Zellabstände und E:2928/3084. */
	text-align: left;
}

/* Kleine Banner-Vorschau; PHP verlegt denselben Plugin-Block ans Formularende. */
body.woocommerce-checkout #main .wc-gzd-legal-guarantee-checkout {
	clear: both;
	width: 100%;
	margin-block: 32px 0;
	padding: 16px;
	border: 1px solid var(--ekv-shop-line);
	border-radius: 12px;
	background: var(--ekv-shop-surface);
	font: 400 14px/1.5 var(--ekv-shop-body);
}

/* Vorschau-Link bleibt die vorhandene, tastaturfähige Vergrößerungsaktion. */
body.woocommerce-checkout #main .wc-gzd-legal-guarantee-checkout .wc-gzd-popover-trigger {
	display: inline-flex;
	min-width: 44px;
	min-height: 44px;
	max-width: 100%;
	align-items: center;
	cursor: zoom-in;
}

/* Nur die Vorschau schrumpft; das vollständige Bild und sein Alt-Text bleiben unangetastet. */
body.woocommerce-checkout #main .wc-gzd-legal-guarantee-checkout img.wc-gzd-legal-guarantee-image-preview {
	width: 160px;
	max-width: 100%;
	height: auto;
}

/* Plugin-Popover passt in das Viewport; kein erzwungenes display, das es geschlossen sichtbar macht. */
body.woocommerce-checkout #main .wc-gzd-legal-guarantee-checkout .wc-gzd-popover {
	max-width: calc(100vw - 32px);
	max-height: calc(100dvh - 32px);
	overflow: auto;
	overscroll-behavior: contain;
}

/* Vollbildhinweis bleibt proportional und scrollbar. */
body.woocommerce-checkout #main .wc-gzd-legal-guarantee-checkout .wc-gzd-popover-image {
	max-width: 100%;
	height: auto;
}

/* Schließen im bestehenden Plugin-Dialog mit Finger und Tastatur erreichbar. */
body.woocommerce-checkout #main .wc-gzd-legal-guarantee-checkout .wc-gzd-popover-close {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	color: var(--ekv-shop-primary);
}

/* Konto-Navigation: CI-Liste ohne Rahmen um die Gruppe; mobil/Tablet zweispaltig (Leonhard 12.11., 2. Sichtprüfung). */
body.woocommerce-account #main .woocommerce-MyAccount-navigation,
body.woocommerce-account #main .woocommerce-MyAccount-navigation ul {
	border: 0 !important;             /* EduBlink-Rahmen um die Navigationsliste */
	box-shadow: none;
	background: transparent;
}
body.woocommerce-account #main .woocommerce-MyAccount-navigation ul {
	display: grid;
	gap: 8px;
	margin: 0 0 24px;
	padding: 0;
	list-style: none;
}
@media (max-width: 1024px) {
	body.woocommerce-account #main .woocommerce-MyAccount-navigation ul { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Listeneinträge tragen keine zusätzlichen Theme-Abstände/Rahmen. */
body.woocommerce-account #main .woocommerce-MyAccount-navigation li {
	margin: 0;
	padding: 0;
	border: 0;
}

/* Ein vollständiger Navigationseintrag ist das Tap-Ziel. */
body.woocommerce-account #main .woocommerce-MyAccount-navigation li a {
	display: flex;
	align-items: center;
	gap: 10px;
	min-height: 48px;
	padding: 8px 16px 8px 14px;
	border: 1px solid var(--ekv-shop-primary);
	border-radius: 999px;
	background: #FFFFFF;
	color: var(--ekv-shop-primary);
	font: 400 16px/1.5 var(--ekv-shop-body);
	text-decoration: none;
	overflow-wrap: anywhere;
}

/* Aktuelle Kontoseite zusätzlich durch Gewicht und vorhandenes aria-current erkennbar. */
body.woocommerce-account #main .woocommerce-MyAccount-navigation li.is-active a {
	background: var(--ekv-shop-primary);
	color: #FFFFFF;
	font-weight: 600;
}

/* Navigationshover für aktive und inaktive Einträge. */
body.woocommerce-account #main .woocommerce-MyAccount-navigation li a:is(:hover, :focus-visible) {
	background: var(--ekv-shop-hover);
	color: #FFFFFF;
}

/* Kontoinhalt/Tabellen dürfen innerhalb der bestehenden Desktop-Spalten schrumpfen. */
body.woocommerce-account #main .woocommerce-MyAccount-content {
	min-width: 0;
	font: 400 16px/1.5 var(--ekv-shop-body);
}

/* Bestellaktionen sind im normalen Fluss, mit Umbruch und Abstand auch ohne Zusatzwrapper. */
body.woocommerce-account #main table.woocommerce-orders-table .woocommerce-orders-table__cell-order-actions {
	white-space: normal;
	text-align: start;
	min-width: 0;
}

/* Natürliche Buttonhöhe und Außenabstand verhindern Rechnung/Anzeigen-Überlappung. */
body.woocommerce-account #main table.woocommerce-orders-table .woocommerce-orders-table__cell-order-actions .button {
	position: static;
	float: none;
	max-width: 100%;
	margin: 0 8px 8px 0;
	vertical-align: top;
}

/* Bestellnummer als deutliches Ziel; Inhalt und Link bleiben original. */
body.woocommerce-account #main .woocommerce-orders-table__cell-order-number a {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	color: var(--ekv-shop-primary);
	text-decoration: underline;
}

/* Downloads werden über alle Breiten als Karten dargestellt; Tabelle bleibt im DOM. */
body.woocommerce-account #main table.woocommerce-table--order-downloads {
	display: block;
	width: 100%;
	border: 0;
	margin: 0;
	background: transparent;
}

/* Tabellenkopf bleibt für Assistenztechnik im Dokument; sichtbare Labels kommen aus data-title. */
body.woocommerce-account #main table.woocommerce-table--order-downloads thead {
	position: absolute;
	display: block;
	width: 1px;
	height: 1px;
	padding: 0;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

/* Downloadkarten stehen mobil untereinander und wachsen später auf zwei Spalten. */
body.woocommerce-account #main table.woocommerce-table--order-downloads tbody {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: 24px;
}

/* Jede Datei bekommt eine volle, inhaltlich wachsende Karte ohne Clip. */
body.woocommerce-account #main table.woocommerce-table--order-downloads tbody tr {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	align-content: start;
	gap: 16px;
	min-width: 0;
	height: auto;
	padding: 16px;
	border: 1px solid var(--ekv-shop-line);
	border-radius: 12px;
	background: #FFFFFF;
	overflow: visible;
}

/* Download-Metadaten als Label/Wert, ohne EduBlink-Streifen und Zellrahmen. */
body.woocommerce-account #main table.woocommerce-table--order-downloads tbody td {
	display: block;
	width: auto;
	padding: 0;
	border: 0;
	background: transparent;
	text-align: left !important; /* Woo responsive tables setzt text-align:right !important. */
	white-space: normal;
	overflow-wrap: anywhere;
}

/* data-title enthält die bestehenden Labels, keine neu erfundenen Inhalte. */
body.woocommerce-account #main table.woocommerce-table--order-downloads tbody td::before {
	content: attr(data-title);
	display: block;
	float: none;
	margin-bottom: 8px;
	color: var(--ekv-shop-text);
	font: 400 14px/1.5 var(--ekv-shop-body);
}

/* Produktlink ist die Kartenüberschrift und bleibt vollständig lesbar. */
body.woocommerce-account #main table.woocommerce-table--order-downloads .download-product a {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	font: 600 18px/1.5 var(--ekv-shop-title);
	color: var(--ekv-shop-primary);
}

/* Download-Aktion füllt die Karte und wächst bei langen Dateinamen nach unten. */
body.woocommerce-account #main table.woocommerce-table--order-downloads a.woocommerce-MyAccount-downloads-file.button {
	width: 100%;
	max-width: 100%;
	margin: 0;
	white-space: normal;
	overflow-wrap: anywhere;
}

@media (max-width: 1024px) {
	/* Mobil/Tablet: Warenkorb-Abstand folgt dem 8-px-Raster, ohne am Header zu positionieren. */
	body.woocommerce-cart #main .woocommerce-cart-form { margin: 0 0 24px; }
	/* Nur die Produkttabelle wird zum Kartencontainer; Summen/Versandform bleiben getrennt. */
	body.woocommerce-cart #main table.shop_table.cart { display: block; width: 100%; border: 0; margin: 0; background: transparent; }
	/* Tabellenkopf bleibt lesbar für Assistenztechnik statt display:none. */
	body.woocommerce-cart #main table.cart thead { position: absolute; display: block; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
	/* Produkte/Actions bekommen gleichmäßige Abstände. */
	body.woocommerce-cart #main table.cart > tbody { display: grid; gap: 16px; width: 100%; }
	/* Drei Inhaltszeilen: Bild/Name, Preis/Menge, Summe/Entfernen; Namen werden niemals gekürzt. */
	body.woocommerce-cart #main table.cart tr.cart_item { display: grid; grid-template-columns: 64px minmax(0, 1fr) 144px; grid-template-rows: auto auto auto; gap: 8px; padding: 16px; border: 1px solid var(--ekv-shop-line); border-radius: 12px; background: #FFFFFF; }
	/* Woo-Responsive-Etiketten/Floats werden für dieses eindeutige Kartenraster gelöst. */
	body.woocommerce-cart #main table.cart tr.cart_item > td { display: block; width: auto; padding: 0; margin: 0; border: 0; background: transparent; text-align: left !important; /* Woo responsive text-align:right !important. */ font: 400 16px/1.5 var(--ekv-shop-body); }
	/* Nur automatisch duplizierte Tabellenlabels entfallen, nicht Produkt-/Germanized-Inhalt. */
	body.woocommerce-cart #main table.cart tr.cart_item > td::before { display: none; }
	/* Bild oben links: 64×64 und eigenes großes Linkziel. */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-thumbnail { grid-column: 1; grid-row: 1; }
	/* Link/Bild füllen das Quadrat; contain erhält Buchcover vollständig. */
	body.woocommerce-cart #main table.cart .product-thumbnail a,
	body.woocommerce-cart #main table.cart .product-thumbnail img { display: block; width: 64px; height: 64px; max-width: 100%; aspect-ratio: 1; object-fit: contain; border-radius: 8px; background: var(--ekv-shop-surface); }
	/* Name und Variante teilen den oberen Inhaltsbereich mit beliebiger Texthöhe. */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-name { grid-column: 2 / -1; grid-row: 1; overflow-wrap: anywhere; }
	/* Titel-Link ist auch bei kurzem Namen mindestens 44 px hoch. */
	body.woocommerce-cart #main table.cart td.product-name > a { display: flex; align-items: center; min-height: 44px; color: var(--ekv-shop-primary); font-weight: 600; }
	/* Metadaten bleiben im Fluss und haben 8 px Abstand, keine Ellipse/line-clamp. */
	body.woocommerce-cart #main table.cart td.product-name :is(.wc-gzd-cart-info, dl.variation) { margin: 8px 0 0; font-size: 14px; line-height: 1.5; }
	/* Innere Absatzmargen würden den Kartenrhythmus verdoppeln. */
	body.woocommerce-cart #main table.cart td.product-name :is(.wc-gzd-cart-info, dl.variation) p { margin: 0; }
	/* Einheitspreis hat links genug Breite auch für vier-/fünfstellige Beträge. */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-price { grid-column: 1 / 3; grid-row: 2; align-self: center; }
	/* Menge rechts in derselben Zeile. */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-quantity { grid-column: 3; grid-row: 2; justify-self: end; }
	/* Zwischensumme links in Zeile drei mit bestehendem Tabellenlabel. */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-subtotal { grid-column: 1 / 3; grid-row: 3; align-self: center; font-weight: 600; }
	/* Summentitel stammt aus data-title und bleibt oberhalb des Betrags kurz lesbar. */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-subtotal::before { content: attr(data-title); display: block; float: none; color: var(--ekv-shop-text); font-size: 14px; font-weight: 400; }
	/* Entfernen beendet die dritte Zeile, ohne die Zahlen zu überdecken. */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-remove { grid-column: 3; grid-row: 3; justify-self: end; align-self: end; }
	/* Gutschein/Aktualisieren stehen außerhalb der Produktkarten untereinander. */
	body.woocommerce-cart #main table.cart tbody > tr:not(.cart_item) { display: block; border: 0; background: transparent; }
	/* Actions bleiben im Dokumentfluss und halten 16 px Abstand. */
	body.woocommerce-cart #main table.cart td.actions { display: grid; gap: 16px; width: 100%; padding: 0; border: 0; background: transparent; }
	/* Kein automatisches Woo-Zellenlabel vor dem Gutschein. */
	body.woocommerce-cart #main table.cart td.actions::before { display: none; }
	/* Mobil füllt Aktualisieren eine ganze Zeile. */
	body.woocommerce-cart #main table.cart td.actions > button[name="update_cart"] { width: 100%; margin: 0; }
	/* Summenzeilen behalten die echten th-Labels und zwei Spalten, auch bei Woo-Responsive-CSS. */
	body.woocommerce-cart #main .cart_totals table.shop_table tbody { display: block; }
	/* Mehr Platz für Versandadresse als für ihr Label; keine vertikalen Linien. */
	body.woocommerce-cart #main .cart_totals table.shop_table tr { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); column-gap: 16px; }
	/* Echte Label-/Wertzellen wieder sichtbar; Plugin-Hintergründe nicht streifenförmig. */
	body.woocommerce-cart #main .cart_totals table.shop_table tr > :is(th, td) { display: block; width: auto; background: transparent; }
	/* Dupliziertes mobiles data-title-Label entfällt neben echtem th. */
	body.woocommerce-cart #main .cart_totals table.shop_table td::before { display: none; }
	/* Checkout-Produkttabelle: Namen volle Breite, colspan bleibt im tfoot unverändert; nur Artikelzeilen werden gestapelt. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tbody tr.cart_item { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; padding-block: 16px; border-bottom: 1px solid #FFFFFF; }
	/* Volle Produktbreite statt 56-%-Spalte in der mobilen Bestellübersicht. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tbody tr.cart_item > td { display: block; width: auto; padding: 0 !important; /* EduBlink-Zellabstände und Session-03-Override. */ border: 0; }
	/* Menge, Preis, Zeilensumme und Entfernen dürfen als unabhängige Teile umbrechen. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tbody td.product-total { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 8px; }
	/* Mobile Entfernen-Aktion steht rechts neben den Beträgen, ohne negative Position. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table td.product-total .ekv-entfernen { margin: 0; }
	/* Tabellenbereiche belegen eine gemeinsame Breite; Kopf/Fuß behalten je zwei echte Zellen. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table { display: block; }
	/* Artikelcontainer wird voll breit; keine anonyme Tabellenzelle neben dem Kopf. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tbody { display: block; }
	/* Kopf/Fuß verwenden feste Zweispaltentabellen unabhängig von den Artikelkarten. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table :is(thead, tfoot) { display: table; width: 100%; table-layout: fixed; }
	/* Kopf-/Fußlabel erhält keinen zusätzlichen 12-px-Einzug aus Session 03. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table :is(thead th, tfoot th):first-child { padding-left: 0; width: 48%; overflow-wrap: anywhere; }
	/* Steuerzusatz bleibt auf eigener Zeile lesbar statt einen Betrag zu verlängern. */
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table .includes_tax { display: block; font-size: 14px; white-space: normal; }
	/* Hauptaktion mobil volle Breite mit natürlicher Texthöhe. */
	body.woocommerce-checkout #main form.checkout #place_order,
	body.woocommerce-cart #main .wc-proceed-to-checkout a.checkout-button { width: 100%; }
	/* Kontonavigation und Inhalt nutzen die vollständige Mobilbreite. */
	body.woocommerce-account #main :is(.woocommerce-MyAccount-navigation, .woocommerce-MyAccount-content) { float: none; width: 100%; }
	/* Bestellungen mobil als responsive Datensätze, keine Desktop-Spaltenänderung. */
	body.woocommerce-account #main table.woocommerce-orders-table { display: block; width: 100%; border: 0; }
	/* Spaltenkopf bleibt im Accessibility-Baum statt per display:none entfernt zu werden. */
	body.woocommerce-account #main table.woocommerce-orders-table thead { position: absolute; display: block; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
	/* Bestelldatensätze mit gleichmäßigem Abstand. */
	body.woocommerce-account #main table.woocommerce-orders-table tbody { display: grid; gap: 16px; }
	/* Kartenhöhe richtet sich einschließlich mehrerer Rechnungen nach dem Inhalt. */
	body.woocommerce-account #main table.woocommerce-orders-table tbody tr { display: grid; gap: 8px; padding: 16px; border: 1px solid var(--ekv-shop-line); border-radius: 12px; background: #FFFFFF; }
	/* Auch Bestellnummer-th wird mobil explizit sichtbar, Woo blendet th sonst aus. */
	body.woocommerce-account #main table.woocommerce-orders-table tbody tr > :is(th, td) { display: block; width: auto; padding: 8px 0; border: 0; background: transparent; text-align: left !important; /* Woo responsive text-align:right !important. */ overflow-wrap: anywhere; }
	/* Labels oberhalb der Daten vermeiden schmale Wertspalten bei 360 px/Zoom. */
	body.woocommerce-account #main table.woocommerce-orders-table tbody :is(th, td)::before { content: attr(data-title); display: block; float: none; margin-bottom: 8px; font: 400 14px/1.5 var(--ekv-shop-body); color: var(--ekv-shop-text); }
	/* Aktionen erhalten ein Flex-Raster ohne Änderung der Tab-Reihenfolge. */
	body.woocommerce-account #main table.woocommerce-orders-table tbody td.woocommerce-orders-table__cell-order-actions { display: flex; flex-wrap: wrap; gap: 8px; }
	/* Das vorhandene Aktionslabel belegt eine eigene volle Zeile. */
	body.woocommerce-account #main table.woocommerce-orders-table tbody td.woocommerce-orders-table__cell-order-actions::before { flex: 1 0 100%; margin-bottom: 0; }
	/* Flex-gap ersetzt die Desktop-Buttonmargen. */
	body.woocommerce-account #main table.woocommerce-orders-table .woocommerce-orders-table__cell-order-actions .button { margin: 0; }
}

@media (max-width: 1024px) {
	/* Auch der Eltern-Gridwechsel ab 992 px entfällt bis zur Kit-Desktopgrenze. */
	body.woocommerce-checkout #main form.checkout { display: block; }
	/* Unterhalb der Kit-Desktopgrenze Summe vor Cross-Sells, auch zwischen 992 und 1024 px. */
	body.woocommerce-cart #main .cart-collaterals { display: flex; flex-direction: column; gap: 32px; align-items: stretch; }
	/* Theme-Spaltenbreiten/-Floats werden nur für dieses Tablet-/Mobil-Layout aufgehoben. */
	body.woocommerce-cart #main .cart-collaterals > :is(.cart_totals, .cross-sells) { float: none !important; /* EduBlink/Woo und E:2135–2145. */ width: 100% !important; /* EduBlink/Woo und E:2135–2145. */ margin: 0; }
	/* Kasse bis 1024 einspaltig; ersetzt die frühere Sondergrenze 991 px. */
	body.woocommerce-checkout #main form.checkout > :is(#customer_details, #order_review, #order_review_heading) { float: none; width: 100% !important; /* EduBlink width:inherit !important, E:3000ff. */ min-width: 0 !important; /* EduBlink min-width:100%. */ margin-inline: 0 !important; /* EduBlink −15-px-Ränder. */ }
	/* Innere Kundenspalten bleiben untereinander; nur gezielte Feldpaare werden zweispaltig. */
	body.woocommerce-checkout #main form.checkout #customer_details > :is(.col-1, .col-2) { float: none; width: 100%; max-width: 100%; padding-inline: 0; }
	/* Nach den Kundendaten folgt ein klarer Abschnittswechsel. */
	body.woocommerce-checkout #main form.checkout #customer_details { margin-bottom: 32px !important; /* EduBlink-Margenreset E:3004 setzt margin:0 !important. */ }
}

@media (min-width: 768px) {
	/* Tablet+: nur bei mehr Platz Vor-/Nachname und PLZ/Stadt nebeneinander. */
	body.woocommerce-checkout #main form.checkout :is(.woocommerce-billing-fields__field-wrapper, .woocommerce-shipping-fields__field-wrapper) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	/* Stabile Woo-Feld-IDs, keine Elementor-IDs; Inline-Verstecken von State-Feldern bleibt erhalten. */
	body.woocommerce-checkout #main form.checkout :is(#billing_first_name_field, #billing_last_name_field, #billing_postcode_field, #billing_city_field, #shipping_first_name_field, #shipping_last_name_field, #shipping_postcode_field, #shipping_city_field) { grid-column: auto; }
	/* Zwei Downloads nur wenn der reale Kontoinhalt genug Platz bietet, sonst eine Karte. */
	body.woocommerce-account #main table.woocommerce-table--order-downloads tbody { grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
}

@media (min-width: 1025px) {
	/* Desktop-Spalten des Warenkorbs bleiben wie im Bestand; kein zusätzlicher Cross-Sell-Versatz. */
	body.woocommerce-cart #main .cart-collaterals .ekv-crosssells { margin-top: 0; }
}

/* Fokus zuletzt: überstimmt die alten outline:none-Regeln und weißen Hinweisbutton-Ringe. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce :is(a, button, input, select, textarea, summary, [tabindex]):focus-visible,
body.woocommerce-checkout #main form.checkout #place_order:focus-visible {
	outline: 2px solid var(--ekv-shop-primary);
	outline-offset: 3px;
	box-shadow: 0 0 0 3px #FFFFFF;
}

/* Programmgesteuert fokussierte Status-/Fehlermeldungen ebenfalls deutlich sichtbar. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main :is(.woocommerce-message, .woocommerce-info, .woocommerce-error, .woocommerce-NoticeGroup):focus {
	outline: 2px solid var(--ekv-shop-primary);
	outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
	/* Nur deklarative Shop-Bewegungen stoppen; Woo-BlockUI/Loading-Feedback bleibt funktional. */
	body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce :is(.button, .ekv-gutschein button, .ekv-step, .ekv-entfernen, .ekv-karte, .ekv-portrait-overlay, .elementor-button, .woocommerce-MyAccount-navigation a) { transition: none !important; /* EduBlink/Elementor-Transitions inkl. wichtiger Wellenregel. */ scroll-behavior: auto; }
	/* Verbleibende Wellen-Pseudoelemente springen ohne Animation in ihren Status. */
	body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce :is(.button, .ekv-gutschein button, .ekv-step, .elementor-button)::before,
	body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce :is(.button, .ekv-gutschein button, .ekv-step, .elementor-button)::after { transition: none !important; /* EduBlink-Welle E:1124–1141. */ animation: none !important; /* EduBlink/Plugin-Effekte. */ }
}

/* Korrektur Claude: Vor-/Nachname und PLZ/Stadt auf allen Breiten nebeneinander (Leonhard: „wo es Sinn macht zweispaltig“) */
body.woocommerce-checkout #main form.checkout :is(#billing_first_name_field, #billing_last_name_field, #billing_postcode_field, #billing_city_field, #shipping_first_name_field, #shipping_last_name_field, #shipping_postcode_field, #shipping_city_field) {
	grid-column: auto;
}
/* Korrektur Claude: Warenkorb-Summe – Beschriftung in Inhaltsbreite, kein Umbruch im Wort; Wert rechtsbündig, Umbruch nur an Leerzeichen */
body.woocommerce-cart #main .cart_totals table.shop_table tr {
	grid-template-columns: max-content minmax(0, 1fr) !important;   /* gegen 2fr/3fr weiter oben */
}
body.woocommerce-cart #main .cart_totals table.shop_table th {
	white-space: nowrap !important;
	overflow-wrap: normal !important;
}
body.woocommerce-cart #main .cart_totals table.shop_table td {
	text-align: right;
	overflow-wrap: normal !important;
}
/* Korrektur Claude: Gutschein-Button so hoch wie das Feld (Pill-Paar bündig) */
body.woocommerce-cart #main table.cart td.actions .coupon button,
body.woocommerce-checkout #main .ekv-gutschein button.ekv-welle {
	height: 48px !important;          /* Feld und Button exakt gleich hoch (Theme-Höhen wichen ab) */
	min-height: 0;
	margin: 0 !important;
	padding-block: 0 !important;
	align-self: center;
}
body.woocommerce-cart #main table.cart td.actions .coupon input.input-text {
	height: 48px !important;          /* wie der Button */
	min-height: 0;
	margin: 0 !important;             /* gegen Theme-Abstand oben (Feld saß tiefer als der Button) */
	align-self: center;
	border-bottom: 1px solid var(--ekv-shop-primary);   /* Unterkante war abgeschnitten */
	box-sizing: border-box;
}
/* Korrektur Claude: Summenlinie über der Gesamtsumme durchgehend (Linie an der Zeile statt an zwei Zellen) */
body.woocommerce-cart #main .cart_totals table.shop_table tr.order-total {
	border-top: 2px solid #181818;
	column-gap: 16px;
}
body.woocommerce-cart #main .cart_totals table.shop_table tr.order-total :is(th, td) {
	border-top: 0 !important;         /* gegen Zellenlinie weiter oben */
}
/* Korrektur Claude: Beträge einheitlich gesetzt (Dezimalstellen waren fett, Rest normal) */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main .woocommerce .amount :is(bdi, span, strong) {
	font-family: inherit !important;  /* Dezimalstellen/Währung kamen in Poppins (Theme), Ziffern in Open Sans → wirkte halbfett */
	font-weight: inherit !important;
	color: inherit !important;        /* Dezimalstellen waren dunkler als die Ziffern */
	font-size: inherit;
}
/* Korrektur Claude: Kasse-Übersicht – „×“ oben rechts in der Artikelzeile statt in eigener Zeile */
@media (max-width: 1024px) {
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tbody tr.cart_item {
		position: relative;
	}
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tbody tr.cart_item td.product-name {
		padding-right: 60px !important;   /* Platz für „×“ (44 px) plus 16 px Abstand zum Text (Leonhard 12.11.) */
	}
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table tbody tr.cart_item td.product-total {
		position: static !important;      /* „×“ bezieht sich auf die ganze Zeile, nicht auf die Betragszelle */
	}
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table td.product-total .ekv-entfernen {
		position: absolute !important;    /* gegen Fluss-Regel weiter oben */
		top: 8px;
		right: 0;
		margin: 0;
	}
}
/* Korrektur Claude: Cross-Sells mobil zweispaltig ohne Kurzbeschreibung (Leonhard 12.11., 2. Sichtprüfung) */
@media (max-width: 767px) {
	body.woocommerce-cart #main .ekv-crosssells .elementor-widget-loop-grid {
		--grid-columns: 2;
	}
	body.woocommerce-cart #main .ekv-crosssells .elementor-loop-container {
		grid-template-columns: repeat(2, minmax(0, 1fr)) !important;   /* gegen Element-CSS der Loop-Spalten */
		gap: 16px 12px !important;        /* gegen Element-CSS der Loop-Abstände */
	}
	body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .woocommerce-product-details__short-description,
	body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .elementor-widget-woocommerce-product-short-description {
		display: none !important;         /* nur mobil ausgeblendet; Inhalt bleibt auf der Produktseite */
	}
	body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .elementor-heading-title {
		font-size: 16px !important;       /* gegen Widget-Typografie: Titel passt in die halbe Breite */
		line-height: 1.35 !important;
	}
	body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay :is(.elementor-heading-title, .woocommerce-product-details__short-description) {
		overflow-wrap: normal;
		hyphens: auto;
	}
	/* Korrektur Claude: Buttons in schmalen Cross-Sell-Karten nicht im Wort umbrechen („Ansehe-n“) */
	body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .elementor-button {
		width: 100%;
		padding-inline: 12px !important;  /* gegen Button-Innenabstand der Vorlage */
		font-size: 14px;
		white-space: nowrap;
		justify-content: center;
	}
	body.woocommerce-cart #main .ekv-crosssells .ekv-portrait-overlay .elementor-widget-button {
		width: 100%;
	}
}
/* Korrektur Claude: Konto-Bestellungen kompakt – Beschriftung links, Wert rechts in einer Zeile */
@media (max-width: 1024px) {
	body.woocommerce-account #main table.woocommerce-orders-table tr > :is(th, td) {
		display: flex !important;         /* gegen Karten-Stapel weiter oben */
		justify-content: space-between;
		align-items: center;
		gap: 16px;
		padding: 6px 0 !important;
		text-align: right;
	}
	body.woocommerce-account #main table.woocommerce-orders-table tr > :is(th, td)::before {
		margin: 0 !important;
		text-align: left;
		font-weight: 600;
		color: #181818;
	}
	body.woocommerce-account #main table.woocommerce-orders-table td.woocommerce-orders-table__cell-order-actions {
		flex-wrap: wrap;
		justify-content: flex-end;
		padding-top: 12px !important;
	}
}

/* ---- Korrektur Claude 12.11. Warenkorb (Leonhard, 2. Sichtprüfung): Zeile 1 Bild + Name,
   Zeile 2 alles in einer Reihe: Mengenwahl ganz links | Einzelpreis | Summe | „×“ ---- */
@media (max-width: 1024px) {
	body.woocommerce-cart #main table.cart tr.cart_item {
		grid-template-columns: 64px auto minmax(0, 1fr) minmax(0, 1fr) auto;
		grid-template-rows: auto auto;
		column-gap: 8px;
		row-gap: 12px;
	}
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-thumbnail { grid-column: 1; grid-row: 1; }
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-name { grid-column: 2 / -1; grid-row: 1; }
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-quantity { grid-column: 1 / 3; grid-row: 2; justify-self: start; align-self: center; }
	body.woocommerce-cart #main table.cart tr.cart_item > :is(td.product-price, td.product-subtotal) {
		grid-row: 2;
		justify-self: start;              /* linksbündig (Leonhard 12.11., 4. Sichtprüfung) */
		align-self: center;
		text-align: left !important;      /* gegen Woo responsive text-align:right !important */
		font-size: 14px;
		line-height: 1.4;
		white-space: nowrap;
		color: var(--ekv-shop-heading);
	}
	body.woocommerce-cart #main table.cart tr.cart_item > :is(td.product-price, td.product-subtotal) .woocommerce-Price-amount { font-size: inherit !important; font-weight: inherit !important; }   /* gegen 16-px-/Gewicht-Datenregel */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-price { grid-column: 3; font-weight: 400; padding-left: 8px !important; }   /* Abstand zur Mengenwahl; !important gegen Zellen-Reset */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-subtotal { grid-column: 4; font-weight: 600; }
	/* Kleine Spaltenbeschriftung über beiden Beträgen; „Summe“ statt „Zwischensumme“ passt in die schmale Spalte. */
	body.woocommerce-cart #main table.cart tr.cart_item > :is(td.product-price, td.product-subtotal)::before {
		content: attr(data-title);
		display: block !important;        /* gegen das Ausblenden der Woo-Zellenlabels weiter oben */
		float: none;
		margin: 0 0 2px;
		color: var(--ekv-shop-text);
		font-size: 12px;
		font-weight: 400;
		line-height: 1.3;
	}
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-subtotal::before { content: "Summe"; }
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-remove { grid-column: 5; grid-row: 2; justify-self: end; align-self: center; padding-left: 4px !important; }   /* Abstand der Summe zum „ד */
	/* Kompakte Mengenwahl 30 | 36 | 30 px (Zielgröße ≥ 24 px, WCAG 2.5.8) */
	body.woocommerce-cart #main table.cart tr.cart_item > td.product-quantity { width: max-content; }
	body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty {
		width: 96px !important;           /* 30 + 36 + 30; gegen Snippet „Quantity Selector“ width:max-content !important (nova: 108 px) */
		height: 40px;
		gap: 0;
		margin: 0 !important;             /* gegen 12-px-Rand rechts aus dem Snippet (Abstand kommt vom Preis) */
	}
	body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty > label { position: absolute; }   /* Screenreader-Label bleibt, nimmt keine Breite */
	body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty .ekv-step {
		flex: 0 0 30px !important;        /* gegen EduBlink-Stepperbreite */
		width: 30px !important;
		min-width: 0 !important;
		min-height: 40px;
		font-size: 18px;
	}
	body.woocommerce-cart #main .woocommerce-cart-form .quantity.ekv-qty input.qty {
		flex: 0 0 36px !important;        /* gegen die 48-px-Regel weiter oben (dort !important gegen EduBlink) */
		width: 36px !important;
		min-height: 40px;
	}
}
@media (max-width: 480px) {
	body.woocommerce-cart #main table.cart tr.cart_item { padding: 12px; column-gap: 6px; }
	body.woocommerce-cart #main table.cart tr.cart_item td.product-remove a.remove {   /* tr.cart_item: schlägt die 40-px-Regel weiter unten */
		width: 36px !important;           /* gegen 40/44 px weiter oben – Platz für vierstellige Beträge */
		min-width: 36px;
		height: 36px !important;
		min-height: 36px;
	}
}
@media (max-width: 400px) {
	body.woocommerce-cart #main table.cart tr.cart_item { column-gap: 4px; }
}
@media (max-width: 374px) {
	body.woocommerce-cart #main table.cart tr.cart_item > :is(td.product-price, td.product-subtotal) { font-size: 12px; }
}
/* „×“ (Artikel entfernen): Kreis 40 px, Lila-Symbol, heller Rand; Hover Flieder */
body.woocommerce-cart #main table.cart td.product-remove a.remove {
	display: inline-flex !important;
	align-items: center;
	justify-content: center;
	width: 40px !important;
	min-width: 40px;                        /* sonst gewinnt min-width 44 px der Basisregel (Codex-Review s03e/08) */
	height: 40px !important;
	min-height: 40px;
	border: 1px solid #E2E2E2 !important;   /* gegen Theme-/Plugin-Rand */
	border-radius: 50% !important;
	background: #FFFFFF !important;
	color: var(--ekv-lila) !important;
	font-size: 16px;
	line-height: 1;
	transition: background-color 0.2s ease, border-color 0.2s ease;
}
body.woocommerce-cart #main table.cart td.product-remove a.remove i,
body.woocommerce-cart #main table.cart td.product-remove a.remove::before {
	color: var(--ekv-lila) !important;
}
body.woocommerce-cart #main table.cart td.product-remove a.remove:is(:hover, :focus-visible) {
	background: #EDCBF6 !important;
	border-color: #EDCBF6 !important;
}
/* ---- Korrektur Claude 12.11. (Leonhard, 2. Sichtprüfung): Warenkorb-Summe, Konto-Icons, Kasse ---- */
/* Warenkorb-Summe: „Zwischensumme“ nur zeigen, wenn Versand, Gutschein oder Gebühr dazwischen stehen –
   sonst ist sie identisch mit der Gesamtsumme. Zusätzlich ausgewiesene Steuer (tax-rate/tax-total, Netto-Anzeige) lässt sie
   ebenfalls stehen (Codex-Review s03e/01); die Germanized-Zeile „inkl. MwSt.“ (order-tax) steht nach der Gesamtsumme. Steuerzeile rückt an die Gesamtsumme heran. */
body.woocommerce-cart #main .cart_totals table.shop_table:not(:has(tr.shipping, tr.woocommerce-shipping-totals, tr.cart-discount, tr.fee, tr.tax-rate, tr.tax-total)) tr.cart-subtotal {
	display: none !important;         /* gegen die Grid-Darstellung der Summenzeilen weiter oben */
}
body.woocommerce-cart #main .cart_totals table.shop_table tr.order-total > :is(th, td) { padding-bottom: 0 !important; }   /* gegen 8-px-Zellabstand weiter oben */
body.woocommerce-cart #main .cart_totals table.shop_table tr:is(.order-tax, .tax-rate) > :is(th, td) { padding-top: 2px !important; border-top: 0 !important; }

/* Konto-Navigation: Icon vor jedem Eintrag (Inline-SVG als Maske, folgt der Textfarbe; keine Zusatzdatei). */
body.woocommerce-account #main .woocommerce-MyAccount-navigation li a::before {
	content: "";
	flex: 0 0 20px;
	width: 20px;
	height: 20px;
	background-color: currentColor;
	-webkit-mask: var(--ekv-icon) center / contain no-repeat;
	mask: var(--ekv-icon) center / contain no-repeat;
}
body.woocommerce-account #main .woocommerce-MyAccount-navigation-link--dashboard a::before { --ekv-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E"); }
body.woocommerce-account #main .woocommerce-MyAccount-navigation-link--orders a::before { --ekv-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z'/%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M16 10a4 4 0 0 1-8 0'/%3E%3C/svg%3E"); }
body.woocommerce-account #main .woocommerce-MyAccount-navigation-link--downloads a::before { --ekv-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpath d='m7 10 5 5 5-5'/%3E%3Cpath d='M12 15V3'/%3E%3C/svg%3E"); }
body.woocommerce-account #main .woocommerce-MyAccount-navigation-link--edit-address a::before { --ekv-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 10c0 6-8 12-8 12S4 16 4 10a8 8 0 0 1 16 0z'/%3E%3Ccircle cx='12' cy='10' r='3'/%3E%3C/svg%3E"); }
body.woocommerce-account #main .woocommerce-MyAccount-navigation-link--edit-account a::before { --ekv-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E"); }
body.woocommerce-account #main .woocommerce-MyAccount-navigation-link--customer-logout a::before { --ekv-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'/%3E%3Cpath d='m16 17 5-5-5-5'/%3E%3Cpath d='M21 12H9'/%3E%3C/svg%3E"); }

/* Kasse – Zahlungsarten: Auswahlknopf und Bezeichnung in einer Zeile, Logo rechts; Zahlungsdetails darunter volle Breite
   (Leonhard 12.11., 3. Sichtprüfung). Label bleibt das ≥ 44 px hohe Klickziel. */
body.woocommerce-checkout #main #payment ul.wc_payment_methods li.wc_payment_method {
	display: grid;
	grid-template-columns: 24px minmax(0, 1fr);
	column-gap: 12px;
	align-items: center;
}
body.woocommerce-checkout #main #payment li.wc_payment_method > input.input-radio { grid-column: 1; grid-row: 1; margin: 0; }
body.woocommerce-checkout #main #payment li.wc_payment_method > label {
	grid-column: 2;
	grid-row: 1;
	display: flex;
	align-items: center;
	gap: 12px;
	margin: 0;
}
body.woocommerce-checkout #main #payment li.wc_payment_method > label img {
	float: none;                      /* Mollie-Logo: statt float rechts per margin-left:auto */
	margin: 0 0 0 auto;
}
body.woocommerce-checkout #main #payment li.wc_payment_method > .payment_box { grid-column: 1 / -1; }
/* Nur eine Zahlungsart: WooCommerce blendet den Auswahlknopf aus → Beschriftung volle Breite (Codex-Review s03f/04) */
body.woocommerce-checkout #main #payment li.wc_payment_method:has(> input.input-radio[style*="none"]) > label { grid-column: 1 / -1; }

/* Kasse: „×“ schließt oben bündig mit der ersten Textzeile des Produktnamens ab (Zeilenabstand 16 px). */
@media (max-width: 1024px) {
	body.woocommerce-checkout #main table.woocommerce-checkout-review-order-table td.product-total .ekv-entfernen {
		top: 16px;
	}
}
/* ---- Korrektur Claude 12.11. Kasse (Session 04, Leonhard): Fehler nach 03b ---- */
/* Textlinks in hellen Hinweisen (z. B. „Klicke hier, um dich anzumelden“) waren weiß auf #F4F4F4 (WooCommerce .woocommerce-info a) → Lila, 8,6 : 1. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main :is(.woocommerce-message, .woocommerce-info) a:not(.button) {
	color: var(--ekv-shop-primary);
	text-decoration: underline;
}
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main :is(.woocommerce-message, .woocommerce-info) a:not(.button):hover {
	color: var(--ekv-shop-hover);
}
/* Meldungen werden nur für Screenreader fokussiert, sind kein Bedienelement: kein zweiter Rahmen um die Fehlerbox
   (Session-04-Entscheidung Leonhard, ekvedo.css „Meldungen … kein sichtbarer Fokusrahmen“); Tastaturfokus bleibt. */
body:is(.woocommerce-cart, .woocommerce-checkout, .woocommerce-account) #main :is(.woocommerce-message, .woocommerce-info, .woocommerce-error, .woocommerce-NoticeGroup):focus:not(:focus-visible) {
	outline: none;
}
/* ==== Session 03b Shop END ==== */
