/* === VOAP AutoHub — Frontend v0.1.1 === */
/* --vah-primary / --vah-secondary kommen per wp_head aus den Design-Einstellungen. */

.vah-icon svg { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; }
input[type="checkbox"], input[type="radio"], select { accent-color: var(--vah-primary, #0077B6); }

/* ---------- Archive ---------- */
.vah-archive-page { padding-bottom: 40px; }
/* Dunkler Verlauf über dem Kopfbild, damit der weiße Titel auch auf hellen Fotos lesbar
   bleibt (Kundenfeedback 2026-07-22) — gleiches Prinzip wie beim Detailseiten-Hero. */
.vah-archive-hero {
	position: relative;
	background: #1a1a1a; color: #fff;
	padding: 30px 20px; margin-bottom: 26px;
	min-height: 380px; display: flex; align-items: center;
	background-position: center; background-size: cover;
}
.vah-archive-hero::before { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.35) 0%, rgba(0,0,0,.55) 100%); }
.vah-archive-hero h1 { position: relative; z-index: 1; max-width: 1200px; margin: 0 auto; font-size: 2.4rem; color: #fff; text-shadow: 0 2px 10px rgba(0,0,0,.6); }
.vah-archive { max-width: 1200px; margin: 0 auto; padding: 0 16px; }
@media (max-width: 600px) { .vah-archive-hero { min-height: 160px; padding: 20px 16px; } .vah-archive-hero h1 { font-size: 1.6rem; } }

/* Kundenfeedback 2026-08-31: Option, den dunklen Standard-Hintergrund (samt Verlauf, der eigentlich
   nur ein Kopfbild abdunkelt) abzuschalten — ohne eigenes Kopfbild bleibt sonst immer ein
   voller schwarzer Balken stehen, auch wenn nur der Titel gebraucht wird. */
.vah-archive-hero.vah-archive-hero-no-bg { background: none; min-height: 0; padding: 20px; }
.vah-archive-hero.vah-archive-hero-no-bg::before { content: none; }
.vah-archive-hero.vah-archive-hero-no-bg h1 { color: #1a1a1a; text-shadow: none; }
@media (max-width: 600px) { .vah-archive-hero.vah-archive-hero-no-bg { min-height: 0; padding: 16px; } }

/* Feste Spaltenzahl statt auto-fit: bei mehr als 4 Filtern wirkte die freie Verteilung
   unruhig/krumm (Kundenfeedback 2026-07-22) — jetzt kontrolliert umbrechende Reihen. */
.vah-filter-bar { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; align-items: start; background: #fff; border: 1px solid #dee2e6; border-radius: 10px; padding: 22px; margin-bottom: 26px; box-shadow: 0 2px 8px rgba(0,0,0,.04); }
@media (max-width: 1100px) { .vah-filter-bar { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 820px) { .vah-filter-bar { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .vah-filter-bar { grid-template-columns: 1fr; } }
.vah-filter-field { display: flex; flex-direction: column; gap: 7px; min-width: 0; height: 100%; }
.vah-filter-field label { font-size: 13px; text-transform: uppercase; letter-spacing: .3px; color: #646970; font-weight: 400; }
.vah-filter-bar select {
	padding: 10px 36px 10px 12px;
	border: 1px solid #dee2e6;
	border-radius: 6px;
	font-size: 14px;
	line-height: 1.4;
	height: 42px;
	background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='%23646970'%3E%3Cpath d='M5.5 7.5l4.5 5 4.5-5z'/%3E%3C/svg%3E") no-repeat right 10px center / 16px;
	-webkit-appearance: none; appearance: none;
	color: #1a1a1a;
	box-sizing: border-box;
	width: 100%;
}
.vah-filter-bar select:focus { border-color: var(--vah-primary, #0077B6); outline: none; box-shadow: 0 0 0 1px var(--vah-primary, #0077B6); }
/* Fallback für den seltenen Fall, dass JS nicht läuft und das native <select> sichtbar
   bleibt (siehe frontend.js enhanceFilterSelects) — :hover im OS-Popup lässt sich damit
   trotzdem nicht umfärben, das eigene Dropdown unten löst das vollständig. */
.vah-filter-bar select option:checked,
.vah-filter-bar select option:hover { background: var(--vah-primary, #0077B6); color: #fff; }

.vah-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }

/* Eigenes Dropdown statt nativem <select>-Popup — einzige Möglichkeit, sowohl Auswahl als
   auch Hover zuverlässig in Markenfarbe zu zeigen (Kundenfeedback 2026-07-22, native
   Systemfarbe beim Hover ließ sich per CSS grundsätzlich nicht überschreiben). */
.vah-fancy-select { position: relative; }
/* !important gegen generische Theme-Button-Styles (xstore/WooCommerce setzen auf <button>
   oft global uppercase/bold/Themefarbe) — ohne das sah der Trigger wie ein "Jetzt kaufen"-
   Button statt einem Formularfeld aus (Kundenfeedback 2026-07-23, Screenshot). */
.vah-fancy-trigger {
	display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 8px !important;
	width: 100% !important; box-sizing: border-box !important;
	padding: 10px 12px !important;
	border: 1px solid #dee2e6 !important; border-radius: 6px !important;
	background: #fff !important; color: #1a1a1a !important;
	font-size: 14px !important; line-height: 1.4 !important; height: 42px !important;
	text-align: left !important; text-transform: none !important; font-weight: 400 !important; letter-spacing: normal !important;
	cursor: pointer; -webkit-tap-highlight-color: transparent;
}
.vah-fancy-trigger::after {
	content: ""; flex-shrink: 0; width: 16px; height: 16px;
	background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='%23646970'%3E%3Cpath d='M5.5 7.5l4.5 5 4.5-5z'/%3E%3C/svg%3E") no-repeat center / 16px;
	transition: transform .15s;
}
.vah-fancy-select.is-open .vah-fancy-trigger::after { transform: rotate(180deg); }
.vah-fancy-select.is-open .vah-fancy-trigger,
.vah-fancy-trigger:focus { border-color: var(--vah-primary, #0077B6) !important; outline: none; box-shadow: 0 0 0 1px var(--vah-primary, #0077B6); }
.vah-fancy-list {
	position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 30;
	margin: 0; padding: 6px 0; list-style: none;
	background: #fff; border: 1px solid #dee2e6; border-radius: 6px;
	max-height: 280px; overflow-y: auto;
	box-shadow: 0 8px 24px rgba(0,0,0,.15);
}
/* Hover-/Auswahl-Farbe kommt komplett per Inline-Style aus JS (siehe enhanceFilterSelects
   → paint()), nicht per CSS-Klasse — läuft damit keinem Kaskaden-/Theme-Konflikt hinterher. */
.vah-fancy-list li {
	padding: 9px 14px !important; font-size: 14px !important; text-transform: none !important;
	font-weight: 400 !important; color: #1a1a1a; cursor: pointer;
	-webkit-tap-highlight-color: transparent;
}

.vah-price-range { position: relative; height: 34px; }
.vah-price-range input[type="range"] { position: absolute; width: 100%; top: 12px; height: 4px; -webkit-appearance: none; appearance: none; background: transparent; pointer-events: none; margin: 0; }
.vah-price-range input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; pointer-events: all; width: 18px; height: 18px; border-radius: 50%; background: var(--vah-primary, #0077B6); cursor: pointer; border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,.15); }
.vah-price-range input[type="range"]::-moz-range-thumb { pointer-events: all; width: 18px; height: 18px; border-radius: 50%; background: var(--vah-primary, #0077B6); cursor: pointer; border: 2px solid #fff; }
.vah-price-range .vah-track { position: absolute; top: 15px; left: 0; right: 0; height: 4px; background: #e2e5e8; border-radius: 4px; }
.vah-price-range .vah-track-fill { position: absolute; top: 15px; height: 4px; background: var(--vah-primary, #0077B6); border-radius: 4px; }
.vah-price-values { display: flex; justify-content: space-between; font-size: 12px; color: #1a1a1a; font-weight: 600; margin-top: 2px; }

.vah-grid { display: grid; gap: 24px; }
/* Kundenfeedback 2026-08-08: die alte auto-fit-Regel (fest minmax(240px,1fr) unterhalb 1024px)
   berechnete unabhängig von der konfigurierten Spaltenzahl einfach "so viele wie reinpassen" —
   im Bereich ~814-1024px Fensterbreite ergab das immer 3 Spalten, auch wenn 2 eingestellt war.
   Fix: die minmax-Untergrenze wird jetzt AUS der Spaltenzahl selbst berechnet (was N gleich
   breite Spalten bei der aktuellen Containerbreite bräuchten) statt eines festen 240px-Werts —
   das deckelt auto-fit strukturell auf maximal N Spalten (nie mehr, egal wie breit der
   Bildschirm ist), fällt aber auf schmalen/ungewöhnlichen Breiten (der ursprüngliche Grund für
   auto-fit, siehe Kundenfeedback 2026-08-03 "nicht responsiv auf einigen Android-Tablets")
   weiterhin sauber auf weniger Spalten zurück, statt eine feste Pixel-Schwelle zu erraten.
   auto-fill statt auto-fit (Kundenfeedback 2026-08-27): auto-fit kollabiert nicht belegte
   Spalten auf 0 Breite und lässt die verbleibenden Karten dann per 1fr in den freiwerdenden
   Platz wachsen — bei nur 1 Treffer (z.B. nach starker Filterung) füllte die einzelne Karte
   dadurch die komplette Zeilenbreite statt nur eine von N Spalten einzunehmen. auto-fill legt
   dieselbe Spaltenzahl an, lässt unbenutzte Spalten aber als leeren Platz stehen, statt sie zu
   entfernen — bei ausreichend Treffern (Spalten alle belegt) verhält es sich identisch zu vorher. */
.vah-grid-cols-2 { grid-template-columns: repeat(auto-fill, minmax(max(240px, calc((100% - 24px) / 2)), 1fr)); }
.vah-grid-cols-3 { grid-template-columns: repeat(auto-fill, minmax(max(240px, calc((100% - 48px) / 3)), 1fr)); }
@media (max-width: 600px) {
	.vah-grid-cols-2, .vah-grid-cols-3 { grid-template-columns: 1fr; }
}

/* Flex-Spalte statt Blockfluss (Kundenfeedback 2026-08-03): das Energie & Umwelt-Widget
   erscheint nur bei Autos MIT WLTP-Daten, bei Gebrauchtwagen ohne diese Angaben fehlt es
   komplett — "Details ansehen" landete dadurch je nach Fahrzeug auf unterschiedlicher Höhe.
   .vah-card-body wächst per flex:1 auf die vom Grid gestreckte Kartenhöhe, der Button wird
   per margin-top:auto ganz unten angepinnt, unabhängig davon wieviel Inhalt darüber steht. */
.vah-card { background: #fff; border: 1px solid #dee2e6; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 10px rgba(0,0,0,.06); transition: box-shadow .2s; display: flex; flex-direction: column; }
.vah-card:hover { box-shadow: 0 6px 18px rgba(0,0,0,.12); }
.vah-card-image { position: relative; display: block; height: 340px; overflow: hidden; background: #eef1f2; flex-shrink: 0; }
@media (max-width: 480px) { .vah-card-image { height: 240px; } }
.vah-card-image img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .35s; }
.vah-card-image img.is-active { opacity: 1; }
.vah-card-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: #a7aaad; font-size: 2.2rem; }
.vah-card-price-pill { position: absolute; top: 12px; right: 12px; background: var(--vah-primary, #0077B6); color: #fff; padding: 6px 14px; border-radius: 10px; font-weight: 700; font-size: 14px; z-index: 2; }
/* "Neu"-Badge oben links, dort wo früher die Fahrzeugtyp-Kategorie stand (Kundenfeedback
   2026-07-28) — nur für Fahrzeuge mit Zustand "Neufahrzeug", Akzentfarbe statt Primärfarbe
   damit es sich vom Preis-Pill rechts unterscheidet. */
.vah-card-new-badge { position: absolute; top: 12px; left: 12px; background: var(--vah-secondary, #2E7D32); color: #fff; padding: 6px 14px; border-radius: 10px; font-weight: 700; font-size: 12px; text-transform: uppercase; letter-spacing: .4px; z-index: 2; }
.vah-card-dots { position: absolute; bottom: 10px; left: 0; right: 0; display: flex; justify-content: center; gap: 5px; z-index: 2; }
.vah-card-dots span { width: 6px; height: 6px; border-radius: 50%; background: rgba(255,255,255,.6); }
.vah-card-dots span.is-active { background: #fff; }
/* Gleicher Stil wie die Slider-Pfeile auf der Detailseite (Kundenfeedback 2026-07-25):
   Primärfarbe als Hintergrund, weißes Icon, kein Rand. */
/* padding:0 MUSS !important sein (Kundenfeedback 2026-07-26/27): das Theme (Hello Elementor)
   bringt für <button> eigenes, teils asymmetrisches Padding mit höherer Spezifität mit — ohne
   !important gewinnt das Theme, und der per Flex zentrierte Pfeil sitzt sichtbar schief.
   box-sizing:border-box zusätzlich, falls das Theme dort ebenfalls eingreift. */
.vah-card-arrow { position: absolute !important; top: 50% !important; transform: translateY(-50%) !important; width: 32px !important; height: 32px !important; padding: 0 !important; margin: 0 !important; box-sizing: border-box !important; border-radius: 50% !important; background: var( --vah-primary, #0077B6 ) !important; border: none !important; box-shadow: 0 2px 6px rgba(0,0,0,.35) !important; display: flex !important; align-items: center !important; justify-content: center !important; color: #fff !important; font-size: 13px; line-height: 1 !important; z-index: 3; opacity: 0; transition: opacity .15s; cursor: pointer; }
.vah-card-arrow i { display: block; line-height: 1; }
.vah-card-image-slider:hover .vah-card-arrow { opacity: 1; }
.vah-card-arrow.vah-prev { left: 10px; }
.vah-card-arrow.vah-next { right: 10px; }
.vah-card-body { padding: 16px 18px 18px; display: flex; flex-direction: column; flex: 1; }
/* Feste Höhe für Titel + Kurzbeschreibung, unabhängig vom tatsächlichen Textumfang
   (Kundenfeedback 2026-07-26) — sonst rutschten Specs/Button unterschiedlich weit runter,
   je nachdem wie lang Titel/Beschreibung eines Fahrzeugs waren. min-height reserviert den
   Platz für 2 Zeilen auch bei kürzerem Text, line-clamp kürzt längeren Text mit "…". */
/* Kundenfeedback 2026-08-31: min-height für 2 Zeilen entfernt — reservierte bei kurzen,
   einzeiligen Titeln immer unnötig Platz und streckte die Karte. Auf 1 Zeile mit Ellipsis
   begrenzt statt auf 2, damit ein langer Titel die Karte auch nicht mehr wachsen lässt. */
.vah-card-body h2 { font-size: 1.05rem; margin: 0 0 6px; line-height: 1.3; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }
.vah-card-body h2 a { color: #1a1a1a; text-decoration: none; }
.vah-card-body h2 a:hover { color: var(--vah-primary, #0077B6); }
.vah-card-excerpt { font-size: 13px; color: #646970; margin: 0 0 12px; line-height: 1.5; min-height: calc(1.5em * 2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.vah-card-specs { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin-bottom: 16px; }
.vah-card-specs .vah-spec { display: flex; align-items: center; gap: 10px; }
.vah-card-specs .vah-icon { color: var(--vah-primary, #0077B6); font-size: 26px; flex-shrink: 0; }
.vah-card-specs .vah-spec-text { display: flex; flex-direction: column; line-height: 1.3; min-width: 0; }
.vah-card-specs .vah-spec-label { font-size: 12px; text-transform: uppercase; letter-spacing: .3px; color: #646970; }
.vah-card-specs .vah-spec-value { font-size: 14px; font-weight: 600; color: #1a1a1a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 480px) {
	.vah-card-specs .vah-icon { font-size: 20px; }
	.vah-card-specs .vah-spec-label { font-size: 10px; }
	.vah-card-specs .vah-spec-value { font-size: 13px; }
}
.vah-card-btn { display: block; text-align: center; background: var(--vah-primary, #0077B6); color: #fff !important; padding: 11px; border-radius: 0; text-decoration: none; font-weight: 500; font-size: 13px; transition: background .15s; margin-top: auto; }
.vah-card-btn:hover { background: var(--vah-secondary, #2E7D32); }

/* ---------- Elementor: Fahrzeug-Karussell (Kundenfeedback 2026-08-31/2026-09-01) ---------- */
.vah-vc { position: relative; }
.vah-vc-viewport { overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; -ms-overflow-style: none; }
.vah-vc-viewport::-webkit-scrollbar { display: none; }
/* Kein Überlauf (z.B. weniger Fahrzeuge als "Cards per view") — Pfeile ausblenden statt tote
   Pfeile anzuzeigen (Kundenfeedback 2026-09-01, "Pfeile tun nichts"). */
.vah-vc.vah-vc-no-overflow .vah-vc-arrow { display: none; }
.vah-vc-track { display: flex; gap: 24px; }
/* --vah-vc-visible wird von Elementors responsive control gesetzt (siehe Widget-Klasse) —
   eigene Werte für Desktop/Tablet/Mobile, keine eigenen @media-Regeln hier nötig. */
.vah-vc-item { flex: 0 0 calc((100% - (var(--vah-vc-visible, 3) - 1) * 24px) / var(--vah-vc-visible, 3)); scroll-snap-align: start; min-width: 0; }
.vah-vc-item .vah-card { height: 100%; }
/* Gleicher Stil/dasselbe Hover-Prinzip wie die Karten-eigenen Bild-Pfeile (.vah-card-arrow):
   innerhalb des Karussells liegend statt eigenen Platz links/rechts zu beanspruchen, per
   Default unsichtbar, erst beim Überfahren des GESAMTEN Karussells eingeblendet (Kundenfeedback
   2026-09-01 — "keine Ränder für die Pfeile, sollen innen liegen und bei Hover erscheinen"). */
.vah-vc-arrow {
	position: absolute; top: 50%; transform: translateY(-50%); width: 40px; height: 40px;
	border-radius: 50%; border: none; background: var(--vah-primary, #0077B6) !important;
	color: #fff !important; box-shadow: 0 2px 6px rgba(0,0,0,.35);
	display: flex; align-items: center; justify-content: center; cursor: pointer;
	z-index: 2; opacity: 0; transition: opacity .15s;
}
.vah-vc:hover .vah-vc-arrow { opacity: 1; }
.vah-vc-arrow.vah-vc-prev { left: 8px; }
.vah-vc-arrow.vah-vc-next { right: 8px; }
@media (max-width: 600px) { .vah-vc-arrow { width: 34px; height: 34px; } }

.vah-empty { grid-column: 1/-1; text-align: center; padding: 60px 20px; color: #646970; background: #fff; border-radius: 10px; border: 1px dashed #dee2e6; }
.vah-pagination-links { margin-top: 30px; text-align: center; display: flex; justify-content: center; gap: 6px; flex-wrap: wrap; }
.vah-pagination-links .page-numbers { display: inline-flex; align-items: center; justify-content: center; min-width: 36px; height: 36px; padding: 0 8px; border-radius: 6px; background: #fff; border: 1px solid #dee2e6; color: #1a1a1a; text-decoration: none; font-size: 14px; }
.vah-pagination-links .page-numbers.current { background: var(--vah-primary, #0077B6); color: #fff; border-color: var(--vah-primary, #0077B6); }
/* Bug-Fix (Kundenfeedback 2026-08-01, "kein Hinweis ob gefiltert wird"): das JS setzt
   is-loading auf [data-vah-archive] (= .vah-archive-page), diese Regel zielte aber auf die
   andersnamige .vah-archive (den inneren Container) — die Regel griff dadurch nie, das
   Abdunkeln fand schlicht nicht statt. Jetzt korrekt benannt, plus ein echter Spinner statt
   nur der (leicht zu übersehenden) Abdunklung. */
.vah-archive-page { position: relative; }
.vah-archive-page.is-loading .vah-grid { opacity: .4; pointer-events: none; transition: opacity .15s; }
.vah-archive-page.is-loading::after {
	content: ""; position: fixed; z-index: 50;
	top: 50%; left: 50%; width: 42px; height: 42px; margin: -21px 0 0 -21px;
	border: 4px solid rgba(0,0,0,.12); border-top-color: var(--vah-primary, #0077B6);
	border-radius: 50%; animation: vah-spin .7s linear infinite;
}
@keyframes vah-spin { to { transform: rotate(360deg); } }

/* "Filter zurücksetzen" (Kundenfeedback 2026-08-01) — in Markenfarbe statt neutralem Grau
   (Kundenfeedback 2026-08-03), gleiches Prinzip wie die übrigen Primärfarbe-Buttons des
   Plugins (.vah-card-btn, .vah-btn-email): gefüllt in --vah-primary, beim Hover --vah-secondary
   als Akzent, analog zum Rest der Buttons statt eines eigenen grauen Stils.
   !important auf background/border/color (Kundenfeedback 2026-08-05: "weißer Hintergrund,
   weißer Text, beim Hover übernimmt die Theme-Optik") — wie bei .vah-card-arrow/.vah-fancy-
   trigger bringt das Theme eigene <button>-Defaults mit, die ohne !important gewinnen; hier
   fehlte es auf background/border, nur color hatte es schon — Weiß-auf-Weiß entstand genau
   dadurch (Theme-Weiß im Hintergrund, unser !important-Weiß im Text blieb bestehen).
   [hidden] mit eigener Regel: der native "hidden"-Attribut-Stil ([hidden]{display:none} aus
   dem UA-Stylesheet) hat dieselbe Spezifität wie die Klasse .vah-filter-reset unten — als
   spätere Regel im Stylesheet gewann bisher IMMER unser display:inline-flex, das Attribut
   blieb dadurch wirkungslos und der Button war ständig sichtbar, auch ohne aktiven Filter. */
.vah-filter-reset {
	justify-self: start; align-self: end;
	display: inline-flex; align-items: center; gap: 6px;
	background: var(--vah-primary, #0077B6) !important; border: 1px solid var(--vah-primary, #0077B6) !important; border-radius: 6px;
	padding: 0 14px; height: 42px; font-size: 13px; font-weight: 500; color: #fff !important; cursor: pointer;
	transition: background .15s, border-color .15s;
}
.vah-filter-reset[hidden] { display: none; }
.vah-filter-reset:hover { background: var(--vah-secondary, #2E7D32) !important; border-color: var(--vah-secondary, #2E7D32) !important; }

/* ---------- Single ---------- */
.vah-hero { position: relative; color: #fff; min-height: 460px; display: flex; align-items: flex-end; padding: 60px 20px 40px; margin-bottom: 28px; background: #1a1a1a center/cover no-repeat; }
/* Konfigurierbare Breite (Kundenfeedback 2026-07-23): "full" braucht keine Regel (Standard),
   "1140" boxt die ganze Kopfzeile inkl. Hintergrundbild, "theme" nutzt stattdessen die
   Elementor-Container-Klassen (siehe single-vehicle.php) statt eines festen Werts hier. */
.vah-hero-width-1140 { max-width: 1140px; margin-left: auto; margin-right: auto; }
.vah-hero::before { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.25) 0%, rgba(0,0,0,.8) 100%); }
.vah-hero-inner { position: relative; z-index: 1; width: 100%; max-width: 1180px; margin: 0 auto; display: flex; justify-content: space-between; align-items: flex-end; gap: 20px; flex-wrap: wrap; }
@media (max-width: 600px) { .vah-hero { min-height: 320px; padding: 40px 16px 28px; } .vah-hero h1 { font-size: 1.5rem; } }
.vah-breadcrumbs { font-size: 13px; color: #d5d5d5; margin-bottom: 12px; }
.vah-breadcrumbs a { color: #d5d5d5; text-decoration: none; }
.vah-breadcrumbs a:hover { color: #fff; }
.vah-hero h1 { margin: 0 0 10px; font-size: 2.1rem; color: #fff; }
.vah-subtitle { color: #eee; font-size: 14px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
/* Jetzt <a> statt <span> (Kundenfeedback 2026-09-01: verlinkt zum gefilterten Katalog),
   text-decoration/cursor entsprechend, dezenter Hover über --vah-secondary. */
.vah-subtitle .vah-type-pill { background: var(--vah-primary, #0077B6); color: #fff !important; padding: 4px 14px; border-radius: 20px; font-size: 11px; text-transform: uppercase; letter-spacing: .4px; font-weight: 700; text-decoration: none; cursor: pointer; transition: background .15s; }
.vah-subtitle .vah-type-pill:hover { background: var(--vah-secondary, #2E7D32); }

/* Kundenfeedback 2026-08-31: dasselbe "kein dunkler Standard-Hintergrund"-Prinzip wie bei
   .vah-archive-hero-no-bg, hier für die Detailseiten-Kopfzeile — Breadcrumbs/Titel/Subtitle
   bleiben erhalten, nur Foto/dunkles Grundfarbfeld und der Verlauf fallen weg, Textfarben auf
   dunkel (statt weiß) umgestellt, da sie sonst auf dem hellen Seitenhintergrund unsichtbar wären. */
.vah-hero.vah-hero-no-bg { background: none; min-height: 0; padding: 20px 20px 24px; }
.vah-hero.vah-hero-no-bg::before { content: none; }
.vah-hero.vah-hero-no-bg h1 { color: #1a1a1a; }
.vah-hero.vah-hero-no-bg .vah-breadcrumbs, .vah-hero.vah-hero-no-bg .vah-breadcrumbs a { color: #646970; }
.vah-hero.vah-hero-no-bg .vah-breadcrumbs a:hover { color: var(--vah-primary, #0077B6); }
.vah-hero.vah-hero-no-bg .vah-subtitle { color: #4b4f56; }
@media (max-width: 600px) { .vah-hero.vah-hero-no-bg { min-height: 0; padding: 16px; } }
.vah-subtitle .vah-marke-modell { font-weight: 600; }

.vah-price-note { font-size: 12px; font-weight: 400; color: #646970; }

/* Kundenfeedback 2026-08-31: wenn der ganze Hero ausgeblendet ist (vah_hero_hide), auf Wunsch
   trotzdem die Typ/Marke-Modell/Zustand-Zeile freistehend über dem Hauptinhalt zeigen — gleiche
   Breite/Ausrichtung wie .vah-single, dunkle statt weiße Textfarbe (kein dunkler Hero mehr da). */
.vah-subtitle-standalone { max-width: 1180px; margin: 0 auto 24px; padding: 18px 20px; border-bottom: 1px solid #e5e7eb; }
.vah-subtitle-standalone .vah-subtitle { color: #4b4f56; font-size: 15px; }
.vah-subtitle-standalone .vah-subtitle .vah-marke-modell { color: #1a1a1a; }
@media (max-width: 600px) { .vah-subtitle-standalone { padding: 14px 16px; margin-bottom: 16px; } }

.vah-single { max-width: 1180px; margin: 0 auto; padding: 0 20px 60px; }
/* Nur noch EINE Reihe (Kundenfeedback 2026-08-03: großer Leerraum vor Technische Daten,
   besonders wenn Energie & Umwelt wenig Inhalt hat). Vorher spannte .vah-col-side über zwei
   Reihen ("slider side" / "panels side") — wenn die Seitenleiste (Preis+Fahrzeugdaten+
   Rechner) mehr Höhe brauchte als Slider- und Panels-Reihe zusammen liefern, verteilte Grid
   den Überschuss auf beide Reihen; je weniger Eigenhöhe die Panels-Reihe beisteuerte (kurze
   Energie & Umwelt bei Gebrauchtwagen), desto mehr davon landete in der Slider-Reihe — die
   dadurch höher wurde als der sichtbare Slider selbst und einen unsichtbaren Leerraum
   zwischen Slider-Ende und Technische-Daten-Anfang erzeugte. Fix: Slider und Panels liegen
   jetzt als normaler Blockfluss IN DERSELBEN Spalte (siehe .vah-panels margin-top unten) statt
   als eigene Grid-Reihe — damit gibt es pro Spalte nur noch eine einzige, unabhängige
   Höhenberechnung, keine Verteilung mehr möglich. */
.vah-main-grid {
	display: grid;
	grid-template-columns: 2fr 1fr;
	grid-template-areas: "slider side";
	gap: 30px;
}
/* min-width:0 gegen den klassischen Grid-Bug: Grid-Items haben standardmäßig
   min-width:auto und verweigern das Schrumpfen unter die intrinsische Breite ihres
   Inhalts — der Slider (flex, Bilder mit flex-shrink:0) hat eine riesige Content-Breite
   und sprengte dadurch die ganze Spalte über den Viewport hinaus (Kundenfeedback
   2026-07-23). */
.vah-col-slider { grid-area: slider; min-width: 0; }
.vah-col-side { grid-area: side; min-width: 0; }
/* 1024px statt 900px (Kundenfeedback 2026-08-01: "auf Tablets gar nicht responsiv") — das
   Theme selbst zählt bis 1024px als Tablet (Elementor-Breakpoint), bei 900px blieb die
   Zweispalten-Aufteilung im Tablet-Portrait- und -Querformat-Bereich (768–1024px) aktiv und
   quetschte Slider/Seitenleiste auf ~2/3 bzw. ~1/3 der ohnehin schon schmalen Breite.
   Reihenfolge mobil: Slider-Fotos → Preis/CO2/Fahrzeugdaten/Rechner (.vah-col-side) → die
   langen Detail-Panels (Technische Daten/Energie & Umwelt/Ausstattung) — Kundenfeedback
   2026-08-05: die wichtigen "kaufentscheidenden" Infos sollen direkt nach den Fotos kommen,
   nicht erst nach den langen Spec-Tabellen. .vah-col-slider und .vah-panels liegen im DOM
   (bewusst, siehe oben) in derselben Spalte, damit auf dem Desktop keine Grid-Zeile aufgespannt
   werden muss — display:contents löst .vah-col-slider hier nur FÜRS LAYOUT auf (die
   DOM-Struktur bleibt, `.vah-col-slider > .vah-panels` oben wirkt dadurch unverändert weiter),
   seine Kinder (Slider, Thumbnails, .vah-panels) werden dadurch zu direkten Grid-Kindern von
   .vah-main-grid und lassen sich einzeln per order sortieren. */
@media (max-width: 1024px) {
	.vah-main-grid { grid-template-columns: 1fr; grid-template-areas: none; }
	.vah-col-slider { display: contents; }
	.vah-slider, .vah-gallery-thumbs { order: 1; min-width: 0; }
	.vah-col-side { grid-area: auto; order: 2; }
	.vah-panels { order: 3; }
}
/* Etwas kompakter als der Desktop-Wert 30px (Kundenfeedback 2026-08-03: mobile Abstände
   sollen insgesamt etwas knapper sein). */
@media (max-width: 600px) {
	.vah-main-grid { gap: 20px; }
}

/* Ausstattung/Motor/Fahrwerk/Abmessungen/Ausstattung(Text)/Zusatzinfo unter der vollbreiten
   Beschreibung zweispaltig (Kundenfeedback 2026-07-24) — margin:0 auf den Kindern, damit die
   Karten nicht zusätzlich zum grid-gap noch ihren eigenen vertikalen Abstand aufbauen. */
.vah-two-col-blocks { display: grid; grid-template-columns: 1fr 1fr; gap: 24px 30px; margin: 30px 0; }
/* min-width: 0 überschreibt den Grid-Item-Default "min-width: auto" — sonst zwingt ein langes,
   umbruchloses Wort (z.B. in Ausstattung oder einem Freitext-Block) die ganze Spalte über ihre
   1fr-Breite hinaus und drückt den Inhalt seitlich raus (Kundenfeedback 2026-08-01, mobil). */
.vah-two-col-blocks .vah-description { margin: 0; min-width: 0; }
@media (max-width: 700px) {
	.vah-two-col-blocks { grid-template-columns: 1fr; }
}

.vah-slider { position: relative; border-radius: 10px; overflow: hidden; background: #eee; aspect-ratio: 16/10; }
.vah-slider-track { display: flex; width: 100%; height: 100%; transition: transform .35s ease; touch-action: pan-y; }
.vah-slider-track img { width: 100%; height: 100%; object-fit: cover; flex: 0 0 100%; cursor: zoom-in; }
/* Kein Rand, Hintergrund in Primärfarbe, weißes Icon — statt transparent/Theme-abhängig
   (Kundenfeedback 2026-07-24), gilt identisch für die Lightbox-Pfeile weiter unten. */
.vah-slider-zoom {
	position: absolute !important; top: 12px !important; right: 12px !important; width: 38px !important; height: 38px !important; padding: 0 !important; margin: 0 !important; box-sizing: border-box !important;
	background: var( --vah-primary, #0077B6 ) !important; border: none !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,.35) !important;
	display: flex !important; align-items: center !important; justify-content: center !important; cursor: pointer;
	color: #fff !important; font-size: 18px; line-height: 1 !important; z-index: 2;
}
.vah-slider-zoom i { color: #fff !important; text-shadow: none; display: block; line-height: 1; }

/* ---------- Lightbox: Foto vergrößert anzeigen ---------- */
.vah-lightbox { position: fixed; inset: 0; z-index: 9999; background: rgba(0,0,0,.9); display: flex; align-items: center; justify-content: center; padding: 40px; box-sizing: border-box; }
body.vah-lightbox-open { overflow: hidden; }
.vah-lightbox-img { max-width: 100%; max-height: 100%; object-fit: contain; box-shadow: 0 10px 40px rgba(0,0,0,.5); }
.vah-lightbox-close {
	position: absolute !important; top: 16px !important; right: 16px !important; width: 44px !important; height: 44px !important; padding: 0 !important; margin: 0 !important; box-sizing: border-box !important; border-radius: 50% !important;
	background: var( --vah-primary, #0077B6 ) !important; border: none !important; color: #fff !important; font-size: 18px; line-height: 1 !important;
	display: flex !important; align-items: center !important; justify-content: center !important; cursor: pointer;
}
.vah-lightbox-close i { display: block; line-height: 1; }
.vah-lightbox-close:hover { filter: brightness(1.1); }
.vah-lightbox-nav {
	position: absolute !important; top: 50% !important; transform: translateY(-50%) !important; width: 50px !important; height: 50px !important; padding: 0 !important; margin: 0 !important; box-sizing: border-box !important; border-radius: 50% !important;
	background: var( --vah-primary, #0077B6 ) !important; border: none !important; color: #fff !important; font-size: 18px; line-height: 1 !important;
	display: flex !important; align-items: center !important; justify-content: center !important; cursor: pointer;
}
.vah-lightbox-nav i { display: block; line-height: 1; }
.vah-lightbox-nav:hover { filter: brightness(1.1); }
.vah-lightbox-prev { left: 16px; }
.vah-lightbox-next { right: 16px; }
@media (max-width: 600px) {
	.vah-lightbox { padding: 16px; }
	.vah-lightbox-nav { width: 40px; height: 40px; }
}
/* Kein Rand, Hintergrund in Primärfarbe, weißes Icon — statt transparent/Theme-abhängig
   (Kundenfeedback 2026-07-24, !important gegen Theme-Regeln für <i>/<button>-Farben). */
.vah-slider-nav {
	position: absolute !important; top: 50% !important; transform: translateY(-50%) !important; width: 38px !important; height: 38px !important; padding: 0 !important; margin: 0 !important; box-sizing: border-box !important;
	background: var( --vah-primary, #0077B6 ) !important; border: none !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,.35) !important;
	display: flex !important; align-items: center !important; justify-content: center !important; cursor: pointer;
	color: #fff !important; font-size: 18px; line-height: 1 !important;
}
.vah-slider-nav i { color: #fff !important; text-shadow: none; display: block; line-height: 1; }
.vah-slider-nav.vah-prev { left: 12px; }
.vah-slider-nav.vah-next { right: 12px; }
.vah-slider-dots { position: absolute; bottom: 12px; left: 0; right: 0; display: flex; justify-content: center; gap: 6px; }
.vah-slider-dots button { width: 8px; height: 8px; padding: 0; border-radius: 50%; background: rgba(255,255,255,.55); border: none; cursor: pointer; }
.vah-slider-dots button.is-active { background: #fff; }
.vah-gallery-thumbs { display: flex; gap: 8px; margin-top: 10px; flex-wrap: nowrap; overflow-x: auto; padding-bottom: 4px; -webkit-overflow-scrolling: touch; scrollbar-width: thin; }
.vah-gallery-thumbs img { width: 88px; height: 62px; flex: 0 0 auto; object-fit: cover; border-radius: 6px; cursor: pointer; border: 2px solid transparent; opacity: .75; transition: .15s; }
.vah-gallery-thumbs img:hover, .vah-gallery-thumbs img.is-active { border-color: var(--vah-primary, #0077B6); opacity: 1; }

.vah-side-card { background: #fff; border: 1px solid #dee2e6; border-radius: 10px; padding: 20px; margin-bottom: 20px; }
.vah-side-card h3 { margin: 0 0 14px; font-size: 15px; display: flex; align-items: center; gap: 8px; color: #1a1a1a; }
.vah-side-card h3 .vah-icon, .vah-side-card h3 i { color: var(--vah-primary, #0077B6); }

/* Preis- und Kontaktkarte zu einer Karte zusammengeführt (Kundenfeedback 2026-07-24) —
   padding:0/overflow:hidden auf der Außenkarte, damit die farbige Preis-Zone innen an den
   abgerundeten Ecken der Karte anliegt. */
.vah-price-contact-card { padding: 0; overflow: hidden; }
.vah-price-contact-card .vah-price-block { text-align: center; background: var(--vah-primary, #0077B6); padding: 20px; }
/* Größer + text-shadow (Kundenfeedback 2026-08-27): der Preis-Block hat die konfigurierbare
   vah_color_primary als Hintergrund — bei einer hellen/kräftigen Primärfarbe war reines
   weißes Text schwer lesbar. Der Schatten sichert Kontrast unabhängig davon, welche Farbe
   der Händler wählt, statt für jede mögliche Hintergrundfarbe eine eigene Textfarbe zu pflegen. */
.vah-price-contact-card .vah-price-amount { font-size: 2rem; font-weight: 800; letter-spacing: .3px; color: #fff; text-shadow: 0 1px 3px rgba(0,0,0,.35); }
.vah-price-contact-card .vah-price-note { margin-top: 4px; color: rgba(255,255,255,.85); }
.vah-price-contact-card .vah-price-net { margin-top: 6px; font-size: 13px; color: rgba(255,255,255,.85); }
.vah-price-contact-card .vah-contact-block { padding: 20px; }
/* .vah-price-contact-card hat padding:0 (Preis-/Kontaktblock bringen ihr eigenes mit) — das
   Energie-Widget dazwischen braucht daher einen eigenen horizontalen Abstand passend zu deren
   20px (Kundenfeedback 2026-07-29: Widget zwischen Preis und Kontakt). */
.vah-price-contact-card .vah-energy-widget { margin: 16px 20px 0; }
.vah-price-contact-card .vah-contact-block h3 { margin: 0 0 14px; font-size: 15px; display: flex; align-items: center; gap: 8px; color: #1a1a1a; }

.vah-price-contact-card .vah-btn-call,
.vah-price-contact-card .vah-btn-email { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 12px 18px; border-radius: 8px; text-decoration: none; font-weight: 600; margin-bottom: 10px; transition: background .15s; font-size: 14px; }
.vah-price-contact-card .vah-btn-call { background: var(--vah-secondary, #2E7D32); color: #fff !important; }
.vah-price-contact-card .vah-btn-call:hover { background: var(--vah-primary, #0077B6); }
.vah-price-contact-card .vah-btn-email { background: var(--vah-primary, #0077B6); color: #fff !important; }
.vah-price-contact-card .vah-btn-email:hover { background: var(--vah-secondary, #2E7D32); }
.vah-share-row { display: flex; align-items: center; justify-content: center; gap: 10px; margin-top: 14px; padding-top: 14px; border-top: 1px solid #f0f0f1; }
.vah-share-row a, .vah-share-row button.vah-copy-link { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 50%; background: #f4f6f7; color: #1a1a1a !important; text-decoration: none; font-size: 14px; border: none; cursor: pointer; transition: background .15s, color .15s; padding: 0; }
.vah-share-row a:hover, .vah-share-row button.vah-copy-link:hover { background: var(--vah-primary, #0077B6); color: #fff !important; }
.vah-share-row button.vah-copy-link.is-copied { background: var(--vah-secondary, #2E7D32); color: #fff !important; }
/* "Link kopiert"-Hinweis (Kundenfeedback 2026-08-03) — der Button färbte sich bisher zwar um,
   aber ohne Text war unklar, WAS gerade passiert ist. */
.vah-copy-link { position: relative; }
.vah-copy-link.is-copied::after {
	content: attr(data-copied-label);
	position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%);
	background: #1a1a1a; color: #fff; font-size: 11px; font-weight: 500; white-space: nowrap;
	padding: 5px 10px; border-radius: 4px; pointer-events: none; z-index: 5;
	animation: vah-copy-tooltip 1.5s ease forwards;
}
@keyframes vah-copy-tooltip {
	0% { opacity: 0; }
	12% { opacity: 1; }
	82% { opacity: 1; }
	100% { opacity: 0; }
}

/* Kundenfeedback 2026-08-31: Santander rendert seine eigentliche Oberfläche NICHT in dieses
   Karten-div (siehe santander-widget.php), sondern als eigene fixierte Leiste an anderer Stelle
   der Seite — die Karte selbst bleibt daher immer eine leere weiße Box mit Rahmen. #widget und
   das Script bleiben im DOM (Santander liest/lädt unabhängig von der Sichtbarkeit), nur die
   Rahmen-Optik wird ausgeblendet. Ausnahme: santander-widget.php versucht per JS, die fixierte
   Leiste in `.vah-santander-embed-target` umzuhängen (Experiment, nicht offiziell unterstützt)
   — gelingt das, setzt das Script die Klasse `.vah-santander-embedded`, die die Karte wieder
   zeigt. Schlägt es fehl (Santander ändert ihr Markup o.ä.), bleibt die Karte einfach weiter
   ausgeblendet statt kaputt auszusehen. */
.vah-santander-widget { display: none; }
.vah-santander-widget.vah-santander-embedded { display: block; }
.vah-santander-widget.vah-santander-embedded .san-widget-floating { width: 100%; height: auto; }

/* Kundenfeedback 2026-08-31: der Pfeil-Button im eingebetteten Santander-CTA (Klassen
   san-arrow-icon/san-icon/san-primary + ein build-generierter Hash-Klassenname) trug
   Santanders eigenes Rot statt der auf dieser Seite gewählten Primärfarbe. Bewusst auf die
   Kombination `.san-arrow-icon.san-primary` beschränkt (statt nur `.san-primary` allein) —
   diese Klasse taucht vermutlich auch innerhalb des eigentlichen Antragsformulars/Popups auf
   (deren eigene Buttons), die sollen weiter in Santanders eigener Markenfarbe bleiben.
   Fix (2. Versuch, per DevTools bestätigt): die Farbe steckt nicht am äußeren <svg> selbst,
   sondern fest auf den <path>/<g>-Elementen der VERSCHACHTELTEN "Arrow2@2x"-SVG-Grafik darin
   (typisch für aus Sketch/Figma exportierte Icons ohne fill="currentColor") — `fill` auf dem
   Wrapper allein vererbt sich dadurch nicht nach unten. Jetzt mit `*` auf jedes Kindelement
   erzwungen. */
.san-arrow-icon.san-primary,
.san-arrow-icon.san-primary * { fill: var(--vah-primary, #0077B6) !important; color: var(--vah-primary, #0077B6) !important; }

/* Kundenfeedback 2026-08-31: Santanders eigene fixierte CTA-Leiste (.san-widget-floating, aus
   deren Widget.module.scss) sitzt standardmäßig unten mittig (left:50%+translateX(-50%)) und
   überlagert dort zentrierten Seiteninhalt (z.B. die Ausstattungsliste) — es gibt laut deren
   offizieller technischer Anleitung keinen Konfigurationsparameter dafür, daher hier per
   !important auf unten rechts verschoben. Kein iframe (bestätigt per DevTools), daher von
   unserem CSS aus erreichbar. Falls Santander das Widget-Markup/die Klasse in einem Update
   ändert, greift diese Regel einfach nicht mehr (keine Fehlfunktion, nur wieder die alte
   Standardposition). */
.san-widget-floating {
	left: auto !important;
	right: 20px !important;
	transform: none !important;
}

/* ---------- Finanzierungsrechner ---------- */
.vah-credit-field { margin-bottom: 12px; }
.vah-credit-field label { display: block; font-size: 14px; color: #4b4f56; margin-bottom: 5px; }
.vah-credit-field input, .vah-credit-field select {
	width: 100%; box-sizing: border-box; height: 38px; padding: 0 10px;
	border: 1px solid #dee2e6; border-radius: 6px; font-size: 14px; color: #1a1a1a;
}
.vah-credit-field input:focus, .vah-credit-field select:focus { border-color: var(--vah-primary, #0077B6); outline: none; box-shadow: 0 0 0 1px var(--vah-primary, #0077B6); }
/* Zusammenfassung im Stil der Bank-Konditionstabelle (Kundenfeedback 2026-07-27:
   Nettodarlehen/Zinssätze/Gesamtbetrag sollen wie bei einer echten Finanzierungsübersicht
   aufgelistet werden, die Monatsrate bleibt separat als große Zahl darunter). */
.vah-credit-summary { margin: 14px 0; padding-top: 10px; border-top: 1px solid #f0f0f1; }
.vah-credit-summary-row { display: flex; justify-content: space-between; gap: 10px; padding: 4px 0; font-size: 14px; }
.vah-credit-summary-row span:first-child { color: #4b4f56; }
.vah-credit-summary-row span:last-child { font-weight: 600; color: #1a1a1a; text-align: right; }
.vah-credit-result {
	display: flex; align-items: center; justify-content: space-between;
	background: rgba(0,119,182,.06); border-radius: 8px; padding: 12px 14px; margin: 14px 0 10px;
}
.vah-credit-result-label { font-size: 14px; color: #4b4f56; }
.vah-credit-result-value { font-size: 1.3rem; font-weight: 700; color: var(--vah-primary, #0077B6); }
.vah-credit-disclaimer { font-size: 11px; color: #a7aaad; margin: 0; line-height: 1.4; }

/* Einspaltig statt auto-fit-Grid (Kundenfeedback 2026-08-01) — Technische Daten und Energie &
   Umwelt sollen jeweils die volle Breite nutzen statt nebeneinander zu stehen. */
.vah-panels { display: grid; grid-template-columns: 1fr; gap: 18px; margin: 0 0 30px; }
/* Abstand zum Slider darüber jetzt per margin-top statt Grid-gap (siehe .vah-main-grid oben)
   — der Selektor mit Elternklasse gewinnt unabhängig von der Reihenfolge im Stylesheet gegen
   die margin-Shorthand oben. Auf Mobile etwas knapper (Kundenfeedback 2026-08-03). */
.vah-col-slider > .vah-panels { margin-top: 30px; }
@media (max-width: 600px) {
	.vah-col-slider > .vah-panels { margin-top: 20px; }
}
.vah-panel { background: #fff; border: 1px solid #dee2e6; border-radius: 10px; padding: 18px 20px; }
.vah-panel h4 { margin: 0 0 12px; font-size: 14px; display: flex; align-items: center; gap: 8px; }
.vah-panel h4 .vah-icon, .vah-panel h4 i { color: var(--vah-primary, #0077B6); }
/* !important überall: das Theme bringt eigene Tabellen-/td-Regeln mit (Rahmen, Padding,
   Farben), die sonst unsere Panels überschreiben (Kundenfeedback 2026-07-23 — Fahrzeugdaten/
   Technische Daten sollen ausschließlich unsere Styles zeigen). */
.vah-panel table { width: 100% !important; border-collapse: collapse !important; font-size: 14px !important; border: none !important; margin: 0 !important; background: transparent !important; }
.vah-panel table td { padding: 5px 0 !important; border: none !important; border-bottom: 1px solid #f0f0f1 !important; background: transparent !important; font-size: 14px !important; vertical-align: middle !important; }
.vah-panel table td:first-child { color: #4b4f56 !important; width: 55% !important; font-weight: 400 !important; text-align: left !important; }
.vah-panel table td:last-child { font-weight: 600 !important; text-align: right !important; color: #1a1a1a !important; }
.vah-panel table tr:last-child td { border-bottom: none !important; }
.vah-panel table tr { background: transparent !important; }
/* Freitext-Blöcke (Kraftstoffverbrauch-Aufschlüsselung/CO2-Kosten-Prognose) — mehrzeilig, daher
   eigener Absatz statt Tabellenzeile (Kundenfeedback 2026-07-30). */
.vah-energie-text-block { margin-top: 12px; padding-top: 12px; border-top: 1px solid #f0f0f1; font-size: 14px; }
.vah-energie-text-block strong { display: block; margin-bottom: 4px; color: #4b4f56; font-weight: 600; }
.vah-energie-text-block p { margin: 0; line-height: 1.6; color: #1a1a1a; }

/* Energie & Umwelt intern zweispaltig (Kundenfeedback 2026-08-01): links Lesenka + Beschreibung
   + Kurzwerte-Tabelle, rechts die Freitext-Blöcke (Fahrprofil-Aufschlüsselung, CO2-Kosten). */
.vah-energie-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; align-items: start; }
.vah-energie-col-right .vah-energie-text-block:first-child { margin-top: 0; padding-top: 0; border-top: none; }
@media (max-width: 782px) {
	.vah-energie-cols { grid-template-columns: 1fr; gap: 0; }
}

/* CO2-Effizienzklasse als echte Stufenleiste statt reiner Text (Kundenfeedback 2026-07-28/29)
   — A oben mit kürzestem, G unten mit längstem Balken, Zeigerfahne rechts auf Höhe der
   tatsächlichen Klasse, wie beim EU-Kraftstoffverbrauchslabel. Kein externes Bild nötig:
   vah_co2_ladder_html() liefert Buchstabe+Zeilennummer, die Breiten/Farben kommen von hier. */
.vah-co2-ladder { margin-bottom: 14px; }
.vah-co2-ladder-label { display: block; font-size: 14px; color: #4b4f56; margin-bottom: 6px; }
.vah-co2-ladder-grid { display: grid; grid-template-columns: 1fr 40px; grid-auto-rows: 22px; gap: 3px 8px; }
.vah-co2-bar {
	grid-column: 1; display: flex; align-items: center; padding-left: 10px;
	font-size: 12px; font-weight: 700; color: #fff;
	clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 50%, calc(100% - 12px) 100%, 0 100%);
}
.vah-co2-bar-A { width: 42%; background: hsl(120,65%,32%); }
.vah-co2-bar-B { width: 52%; background: hsl(100,60%,35%); }
.vah-co2-bar-C { width: 62%; background: hsl(80,60%,38%); }
.vah-co2-bar-D { width: 72%; background: hsl(55,80%,42%); }
.vah-co2-bar-E { width: 82%; background: hsl(38,85%,46%); }
.vah-co2-bar-F { width: 92%; background: hsl(20,85%,48%); }
.vah-co2-bar-G { width: 100%; background: hsl(0,70%,42%); }
.vah-co2-pointer {
	grid-column: 2; display: flex; align-items: center; justify-content: center;
	background: #1a1a1a; color: #fff; font-weight: 700; font-size: 13px;
	clip-path: polygon(10px 0, 100% 0, 100% 100%, 10px 100%, 0 50%);
}

/* ---------- Kompaktes Energie & Umwelt-Widget (Preiskarte + Katalogkarte) ---------- */
/* Kundenfeedback 2026-07-29/30/31: gleiche echte Stufenleiter wie im großen Energie &
   Umwelt-Panel (mit Buchstabe+Zeiger, nur kleiner skaliert statt einer vereinfachten
   Deko-Variante) + CO2-Emissionen und Kraftstoffverbrauch (je kombiniert) daneben — der Rest
   bleibt ausschließlich im großen Panel. align-items:flex-end statt center, damit der Text
   unten an der (höheren) Leiter ausgerichtet ist statt mittig zu "schweben". */
.vah-energy-widget { display: flex; gap: 10px; align-items: flex-end; background: #f6f7f7; border-radius: 8px; padding: 12px; margin: 14px 0; }
.vah-energy-widget-icon { flex-shrink: 0; }
.vah-energy-widget-icon-generic { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; background: rgba(0,119,182,.1); border-radius: 8px; color: var(--vah-primary, #0077B6); font-size: 16px; }
.vah-co2-ladder-compact { width: 130px; }
.vah-co2-ladder-compact .vah-co2-ladder-grid { grid-template-columns: 1fr 26px; grid-auto-rows: 14px; gap: 2px 5px; }
.vah-co2-ladder-compact .vah-co2-bar { font-size: 9px; padding-left: 6px; clip-path: polygon(0 0, calc(100% - 7px) 0, 100% 50%, calc(100% - 7px) 100%, 0 100%); }
.vah-co2-ladder-compact .vah-co2-pointer { font-size: 9px; clip-path: polygon(6px 0, 100% 0, 100% 100%, 6px 100%, 0 50%); }
/* Im Katalog etwas kleiner als auf der Preiskarte — die Karte selbst ist schmaler
   (Kundenfeedback 2026-07-31). */
.vah-card-body .vah-co2-ladder-compact { width: 100px; }
.vah-card-body .vah-co2-ladder-compact .vah-co2-ladder-grid { grid-template-columns: 1fr 20px; grid-auto-rows: 11px; gap: 2px 4px; }
.vah-card-body .vah-co2-ladder-compact .vah-co2-bar { font-size: 0; padding-left: 0; clip-path: none; border-radius: 2px; }
.vah-card-body .vah-co2-ladder-compact .vah-co2-pointer { font-size: 8px; clip-path: polygon(5px 0, 100% 0, 100% 100%, 5px 100%, 0 50%); }
.vah-energy-widget-facts { flex: 1; min-width: 0; font-size: 14px; color: #1a1a1a; line-height: 1.5; }
.vah-energy-widget-facts p { margin: 0 0 2px; }
.vah-energy-widget-facts strong { font-weight: 600; }
.vah-energy-widget-footnote { margin: 4px 0 0 !important; font-size: 10px; text-transform: uppercase; letter-spacing: .3px; color: #a7aaad; }
@media (max-width: 420px) {
	.vah-energy-widget { flex-direction: column; align-items: flex-start; padding: 10px; gap: 8px; }
	.vah-co2-ladder-compact { width: 120px; }
	.vah-energy-widget-facts { font-size: 11px; }
}

.vah-features { display: flex; flex-wrap: wrap; gap: 8px; list-style: none; margin: 0; padding: 0; }
.vah-features li { background: #f4f6f7; border-radius: 20px; padding: 6px 14px; font-size: 13px; display: flex; align-items: center; gap: 6px; max-width: 100%; overflow-wrap: break-word; word-break: break-word; }
.vah-features li i { color: var(--vah-secondary, #2E7D32); flex-shrink: 0; }
/* Nur die ersten 5 Punkte anzeigen, Rest per Klick (Kundenfeedback 2026-08-05) — bei langen
   Ausstattungslisten sprengte der Block sonst deutlich die Höhe der Nachbar-Panels. */
.vah-features .vah-features-extra { display: none; }
.vah-features.is-expanded .vah-features-extra { display: flex; }
/* !important auf background/border/color/padding (Kundenfeedback 2026-08-06: "Button nimmt
   Theme-Stil an" — gleicher Grund wie schon bei .vah-filter-reset: das Theme bringt eigene
   <button>-Defaults mit höherer/gleicher Spezifität mit, ohne !important gewinnt es). */
.vah-features-toggle {
	display: inline-flex !important; align-items: center !important; justify-content: flex-start !important; gap: 5px !important;
	margin-top: 10px !important; padding: 0 !important; background: none !important; border: none !important;
	color: var(--vah-primary, #0077B6) !important; font-size: 13px !important; font-weight: 500 !important;
	text-transform: none !important; letter-spacing: normal !important; line-height: 1.4 !important;
	cursor: pointer;
}
.vah-features-toggle:hover { color: var(--vah-secondary, #2E7D32) !important; text-decoration: underline; }

.vah-description { margin: 30px 0; line-height: 1.7; background: #fff; border: 1px solid #dee2e6; border-radius: 10px; padding: 24px; overflow-wrap: break-word; word-break: break-word; }
.vah-description h3 { margin-top: 0; font-size: 16px; }
/* Links im Beschreibungstext (Kundenfeedback 2026-08-08): ohne eigene Regel übernahmen sie
   die Standard-Linkfarbe des Themes statt der eigenen Plugin-Farbe. */
.vah-description a { color: var(--vah-primary, #0077B6); }
.vah-description a:hover { text-decoration: none; }

.vah-legal-block { margin: 30px 0; padding: 18px 22px; background: #fff; border: 1px solid #dee2e6; border-left: 4px solid var(--vah-secondary, #2E7D32); border-radius: 8px; font-size: 13px; }
.vah-legal-block h3 { margin-top: 0; font-size: 15px; }
.vah-legal-list { margin: 0 0 8px; padding-left: 18px; }
.vah-legal-disclaimer { color: #646970; font-size: 12px; }
.vah-legal-disclaimer a { color: var(--vah-primary, #0077B6); }
