/*
Theme Name: Wahlportal Theme
Theme URI: https://wahlen-organisieren.de/
Author: Electric Paper Informationssysteme GmbH
Author URI: https://briangardner.com/
Description: Wahlportal Theme for EPI Wahlportal Plugin, based on Powder 2.0 Theme by Brian Gardner.
Version: 2.0-beta1.1-145
Requires at least: 6.9
Tested up to: 6.9
Requires PHP: 7.2
License: GNU General Public License v3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Text Domain: wahlportal-theme
Tags: block-patterns, block-styles, custom-colors, custom-logo, editor-style, full-site-editing, one-column, two-columns, wide-blocks
*/

/* =========================================================
   INHALTSVERZEICHNIS
   ─────────────────
   1.  Basis & Reset
   2.  Block-Anpassungen (Navigation, Submenu)
   3.  Utility-Klassen
   4.  Sticky Header (Motion)
   5.  Kandidaten-Grid (Profilkarten-Übersicht)
   6.  Filter-Formular
   7.  Detail-Pane (Inline-Ansicht)
   8.  Einzelprofil – Header-Detail-View
   9.  Profil-Shortcode V4 (Monolithisch)
  10.  Responsive Breakpoints
   ========================================================= */


/* =========================================================
   1. BASIS & RESET
   ---------------------------------------------------------
   Globale Grundlagen: Smooth Scroll, Transition-Defaults,
   Formulare. Farben und Spacing kommen primär aus theme.json,
   CSS nur für Ergänzungen, die dort nicht abbildbar sind.
   Token-System ist identisch mit dem Dashboard (dashboard.css):
   --c-bg, --c-surface, --c-surface-dim, --c-text,
   --c-text-secondary, --c-primary, --c-on-primary,
   --c-outline, --c-outline-faint, --c-hover, --c-active,
   --radius-s/m/l/full, --ease-emphasized, --shadow-sm/card.
   ========================================================= */

html {
	scroll-behavior: smooth;
}

/* M3 Emphasized Easing für alle interaktiven Elemente */
a,
button,
.wp-element-button {
	transition: background-color 300ms var(--ease-emphasized, cubic-bezier(0.2, 0, 0, 1)),
	            color 200ms linear,
	            transform 300ms var(--ease-emphasized, cubic-bezier(0.2, 0, 0, 1)),
	            box-shadow 300ms var(--ease-emphasized, cubic-bezier(0.2, 0, 0, 1));
}

input,
textarea {
	transition: border-color 200ms ease, box-shadow 200ms ease;
}

b,
strong {
	font-weight: 600;
}

/* -- Formulare -- */

input,
select,
textarea {
	box-sizing: border-box;
	font-family: inherit;
	font-size: inherit;
	font-weight: inherit;
	line-height: var(--wp--custom--line-height--medium);
	width: 100%;
}

input:not([type="submit"]):focus {
	border-color: var(--c-primary);
	outline: none;
	box-shadow: 0 0 0 2px rgba(0, 139, 143, 0.2);
}

input[type="checkbox"],
input[type="image"],
input[type="radio"] {
	width: auto;
}

::placeholder {
	color: var(--c-text-secondary);
	font-size: var(--wp--preset--font-size--x-small);
	opacity: 0.6;
}

/* Basis-Bild-Resilienz */
img {
	height: auto;
	max-width: 100%;
	display: block;
}


/* =========================================================
   2. BLOCK-ANPASSUNGEN
   ========================================================= */

/* -- Navigation -- */

/* -- Header-Navigation Links als M3-Pill-Buttons (FIX-01: vereinheitlicht) -- */
.site-header .wp-block-navigation .wp-block-navigation-item__content {
	padding: 8px 20px;
	border-radius: var(--radius-full);
	border: 1.5px solid var(--c-outline-faint);
	color: var(--c-text);
	font-weight: 600;
	font-size: 0.88rem;
	transition: background-color 300ms var(--ease-emphasized),
	            border-color 300ms var(--ease-emphasized),
	            color 300ms var(--ease-emphasized),
	            transform 300ms var(--ease-emphasized),
	            box-shadow 300ms var(--ease-emphasized);
}

.site-header .wp-block-navigation .wp-block-navigation-item__content:hover {
	background-color: var(--c-hover);
	border-color: var(--c-primary);
	color: var(--c-primary);
	transform: scale(1.03);
	box-shadow: var(--shadow-sm);
}

/* -- Logo: Breite per CSS-Variable aus WP-Admin-Einstellung (epi_logo_max_width).
   PHP-Filter setzt --epi-logo-width als Inline-Variable, CSS konsumiert sie.
   WP-Core rendert: .wp-block-site-logo a { display:inline-block } – dadurch wird
   width:100% auf dem img zirkulär (kein block-level Containing Block).
   Fix: <a> auf display:block setzen, dann löst 100% korrekt auf. -- */
.site-header .wp-block-site-logo {
	width: var(--epi-logo-width, 120px);
}
.site-header .wp-block-site-logo a {
	display: block;
}
.site-header .wp-block-site-logo img {
	width: 100%;
	height: auto;
}

/* -- Mobile Navigation (X-007) --
   ≤2 Menüeinträge: Inline-Icon-Buttons (kein Hamburger)
   ≥3 Menüeinträge: WordPress-natives Hamburger-Menü (overlayMenu: "mobile")
   Erkennung per CSS :has() – kein JS nötig.

   Icons per CSS-Klasse im Site Editor zuweisen:
     Navigation-Item → Erweitert → Zusätzliche CSS-Klasse(n)
   Verfügbare Klassen:
     nav-icon-submit   → Stift (fa-file-pen \f31c)
     nav-icon-people   → Person (fa-user \f007)
     nav-icon-info     → Info (fa-circle-info \f05a)
     nav-icon-home     → Haus (fa-house \f015)
   Ohne Klasse: Positions-Fallback (1.=Stift, 2.=Personen).
*/
@media (max-width: 600px) {
	/* Logo: fluid, abgeleitet von Desktop-Einstellung (65% von --epi-logo-width) */
	.site-header .wp-block-site-logo {
		width: clamp(56px, 35vw, calc(var(--epi-logo-width, 120px) * 0.65));
	}
	/* Positionierungskontext für Dropdown-Panel:
	   alignfull-Wrapper (direkt in .site-header) wird Anker.
	   Nav auf static, damit das Dropdown sich am Wrapper orientiert. */
	.site-header > .wp-block-group.alignfull {
		position: relative;
		z-index: 1000;
	}
	.site-header .wp-block-navigation {
		position: static;
	}
	/* Header-Flex: Abstand per Spacing-Token */
	.site-header .wp-block-group.alignwide {
		align-items: center;
		gap: var(--wp--preset--spacing--20);
	}
	/* Logo- und Nav-Gruppen nicht schrumpfen */
	.site-header .wp-block-group.alignwide > .wp-block-group:first-child,
	.site-header .wp-block-navigation {
		flex-shrink: 0;
	}

	/* ============================================================
	   Hamburger-Button: M3-Pill-Style mit FA7-Icon
	   ============================================================ */
	.site-header .wp-block-navigation__responsive-container-open {
		width: 44px;
		height: 44px;
		display: inline-flex;
		align-items: center;
		justify-content: center;
		border: 1.5px solid var(--c-outline-faint);
		border-radius: var(--radius-full);
		background: none;
		color: var(--c-text);
		cursor: pointer;
		transition: background-color 300ms var(--ease-emphasized),
		            border-color 300ms var(--ease-emphasized),
		            color 300ms var(--ease-emphasized);
	}
	.site-header .wp-block-navigation__responsive-container-open:hover {
		background-color: var(--c-hover);
		border-color: var(--c-primary);
		color: var(--c-primary);
	}
	/* WP-Default-SVG verstecken, FA7-Icon per Pseudo-Element */
	.site-header .wp-block-navigation__responsive-container-open svg {
		display: none;
	}
	.site-header .wp-block-navigation__responsive-container-open::before {
		font-family: 'Font Awesome 7 Free';
		font-weight: 900;
		font-size: 1.1rem;
		color: inherit;
		content: "\f0c9";
	}
	/* Hamburger → X wenn Menü offen */
	.site-header .wp-block-navigation:has(.is-menu-open) .wp-block-navigation__responsive-container-open::before {
		content: "\f00d";
	}

	/* ============================================================
	   Dropdown-Panel (≥3 Items): unter dem Header, nicht Fullscreen
	   ============================================================ */
	/* WP Close-Button verstecken – Hamburger-Toggle übernimmt (header.js) */
	.site-header .wp-block-navigation__responsive-container-close {
		display: none;
	}
	.site-header .wp-block-navigation__responsive-container.is-menu-open {
		position: absolute;
		top: 100%;
		left: 0;
		right: 0;
		bottom: auto;
		height: auto;
		max-width: 100vw;
		overflow: hidden;
		background: var(--c-surface);
		padding: var(--wp--preset--spacing--30);
		box-shadow: var(--shadow-card);
		border-radius: 0 0 var(--radius-l) var(--radius-l);
		display: flex;
		flex-direction: column;
		box-sizing: border-box;
	}
	/* WP-Wrapper zurücksetzen (entfernt Whitespace über den Items) */
	.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-close,
	.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-dialog,
	.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
		display: contents;
	}
	/* Dropdown-Items: volle Breite, konsistente Pill-Buttons */
	.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
		display: flex;
		flex-direction: column;
		gap: var(--wp--preset--spacing--20);
		width: 100%;
	}
	.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item {
		width: 100%;
	}
	.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 100%;
		box-sizing: border-box;
		padding: 14px 24px;
		border: 1.5px solid var(--c-outline-faint);
		border-radius: var(--radius-full);
		color: var(--c-text);
		font-weight: 600;
		font-size: 0.95rem;
		text-decoration: none;
		transition: background-color 300ms var(--ease-emphasized),
		            border-color 300ms var(--ease-emphasized),
		            color 300ms var(--ease-emphasized);
	}
	.site-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content:hover {
		background-color: var(--c-hover);
		border-color: var(--c-primary);
		color: var(--c-primary);
	}

	/* ============================================================
	   ≤2 Items: Hamburger ausblenden, Items als Icon-Buttons inline
	   :not(:has(…:nth-child(3))) = kein drittes Kind vorhanden
	   ============================================================ */

	/* Hamburger-Toggle verbergen */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation__responsive-container-open {
		display: none;
	}
	/* Responsive-Container inline zeigen statt als Modal (auch mit [hidden]) */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation__responsive-container,
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation__responsive-container[hidden] {
		display: flex;
		position: static;
		width: auto;
		height: auto;
		background: none;
		padding: 0;
		overflow: visible;
		box-shadow: none;
		border-radius: 0;
	}
	/* Close-Button für ≤2 Items verbergen */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation__responsive-container-close {
		display: none;
	}
	/* Dialog-Wrapper transparent (Layout nicht stören) */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation__responsive-dialog {
		display: contents;
	}

	/* Text ausblenden, 44×44 Touch-Target (WCAG 2.5.8), Pill-Shape */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item__content {
		font-size: 0;
		padding: 0;
		width: 44px;
		height: 44px;
		display: inline-flex;
		align-items: center;
		justify-content: center;
		border-radius: var(--radius-full);
		color: var(--c-primary);
		border-color: var(--c-primary);
		transition: background-color 300ms var(--ease-emphasized),
		            border-color 300ms var(--ease-emphasized),
		            color 300ms var(--ease-emphasized);
	}
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item__content:hover {
		background-color: var(--c-hover);
		color: var(--c-text);
	}

	/* FA7-Icon-Basis – Farbe von Link erben */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item__content::before {
		font-family: 'Font Awesome 7 Free';
		font-weight: 900;
		font-size: clamp(0.95rem, 3vw, 1.15rem);
		color: inherit;
	}

	/* Positions-Fallback (funktioniert sofort ohne Klassen im Editor) */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item:first-child .wp-block-navigation-item__content::before {
		content: "\f31c";
	}
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item:nth-child(2) .wp-block-navigation-item__content::before {
		content: "\f007";
	}

	/* Klassen-basierte Icons – höhere Spezifität überschreibt Positions-Fallback */
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item.nav-icon-submit .wp-block-navigation-item__content::before { content: "\f31c"; }
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item.nav-icon-people .wp-block-navigation-item__content::before { content: "\f007"; }
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item.nav-icon-info .wp-block-navigation-item__content::before   { content: "\f05a"; }
	.site-header .wp-block-navigation:not(:has(.wp-block-navigation-item:nth-child(3))) .wp-block-navigation-item.nav-icon-home .wp-block-navigation-item__content::before   { content: "\f015"; }
}

/* -- Navigation Submenu: M3 Surface statt harter Border -- */
.wp-block-navigation__submenu-container {
	min-width: 150px !important;
	padding: 10px !important;
	border-radius: var(--radius-m) !important;
	border: none !important;
	background: var(--c-surface) !important;
	box-shadow: var(--shadow-card) !important;
}

.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	padding: 2px 10px !important;
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
	padding: 5px 10px 0 !important;
}


/* =========================================================
   3. UTILITY-KLASSEN
   ========================================================= */

.is-style-overflow-hidden {
	overflow: hidden;
}

.is-style-position-fixed {
	position: fixed;
}

.is-style-position-relative {
	position: relative;
}

.is-style-negative-zindex {
	z-index: -99;
}

.is-style-positive-zindex {
	z-index: 99;
}


/* =========================================================
   4. STICKY HEADER (Motion)
   ---------------------------------------------------------
   Header verschwindet beim Runterscrollen, erscheint
   beim Hochscrollen. Nur ab 600px Viewport-Breite aktiv.
   ========================================================= */

@media only screen and (min-width: 600px) {

	.has-motion .site-header {
		position: sticky;
		top: 0;
		transition: transform 400ms var(--ease-emphasized);
		z-index: 1000;
	}

	.has-motion body.scroll-down .site-header {
		transform: translateY(-100%);
	}

	.has-motion body.scroll-up .site-header {
		transform: translateY(0);
	}

}

@media only screen and (max-width: 600px) {

	.is-style-hidden-mobile {
		display: none !important;
	}

}

@media only screen and (max-width: 782px) {

	.wp-block-columns.is-style-column-reverse {
		flex-direction: column-reverse;
	}

}


/* =========================================================
   5. KANDIDATEN-GRID (Profilkarten-Übersicht)
   ---------------------------------------------------------
   Konsistent mit Dashboard: Surface-Tokens, generöse Radien,
   subtile Schatten, keine harten 1px-Bordüren.
   ========================================================= */

/* Kontext-Titel im Header (nur auf Profilseite sichtbar) */
.site-header-context-title {
	display: none;
	margin: 0 0 0 10px;
	font-size: clamp(1.05rem, 1.6vw, 1.45rem);
	font-weight: 700;
	color: var(--c-text);
}

body.wahlportal-profiles-page .site-header-context-title {
	display: block;
}

body.wahlportal-profiles-page .entry-header {
	display: none;
}

body.wahlportal-profiles-page main.wp-block-group {
	padding-top: 0;
	padding-bottom: 0;
	padding-left: clamp(10px, 1.6vw, 22px);
	padding-right: clamp(10px, 1.6vw, 22px);
	max-width: none;
}

body.wahlportal-profiles-page .site-header .wp-block-group.alignfull {
	padding-top: clamp(4px, 0.8vw, 10px);
	padding-bottom: clamp(4px, 0.8vw, 10px);
}

/* M3: Trennung über Surface-Tint statt 1px-Linie */
body.wahlportal-profiles-page .site-header {
	border-bottom: 2px solid var(--c-outline-faint);
}

body.wahlportal-profiles-page {
	overflow: hidden;
	background-color: var(--wp--preset--color--surface-low, var(--c-surface-low, #EDF3F3));
}

/* Profilkarten-Grid */
.wahlportal-profiles-grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(16px, 3vw, 24px);
	align-content: start; /* verhindert, dass das Grid Leerraum auf Zeilen verteilt */
	margin-top: 0;
}

/* Breite bündig mit dem Header-Inhalt (alignwide = wideSize 1400px) */
.wahlportal-profiles-wrapper {
	display: flex;
	flex-direction: column;
	gap: 10px;
	height: calc(100vh - var(--wahlportal-profiles-offset, 0px));
	overflow: hidden;
	width: 100%;
	max-width: var(--wp--style--global--wide-size, 1400px);
	margin-left: auto;
	margin-right: auto;
}

/* Profilkarte – M3 Expressive Card */
.wahlportal-profile-card {
	display: flex;
	flex-direction: row;
	background: var(--c-surface);
	border: none;
	border-radius: var(--radius-l, 24px);
	overflow: hidden;
	box-shadow: var(--shadow-card);
	transition: transform var(--motion-duration-medium, 300ms) var(--ease-emphasized),
	            box-shadow var(--motion-duration-medium, 300ms) ease;
	min-height: 135px;
	height: clamp(135px, 21vh, 255px);
	position: relative;
	cursor: pointer;
}

.wahlportal-profile-card:hover {
	transform: translateY(-6px);
	box-shadow: var(--shadow-lg);
}

.wahlportal-profile-card:focus-within {
	transform: translateY(-6px);
	box-shadow: var(--shadow-lg);
}

.wahlportal-profile-card.is-active {
	box-shadow: var(--shadow-lg);
	outline: 2px solid var(--c-primary);
	outline-offset: 0px;
}

/*
 * Media-Bereich: Höhe = volle Kartenhöhe, Breite wird aus Höhe × 3/4 berechnet.
 * Dadurch ist der sichtbare Bildbereich IMMER 3:4 (Breite×Höhe).
 */
.profile-card-media {
	height: 100%;
	aspect-ratio: 3 / 4;
	flex-shrink: 0;
	position: relative;
	overflow: hidden;
	background-color: var(--wp--preset--color--surface-high, var(--c-surface-dim));
}

.profile-card-media img {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform var(--motion-duration-long, 500ms) var(--ease-emphasized);
}

.wahlportal-profile-card:hover .profile-card-media img {
	transform: scale(1.05);
}

.profile-card-placeholder {
	width: 100%;
	height: 100%;
}

.profile-card-content {
	flex-grow: 1;
	padding: 14px 16px 16px;
	display: flex;
	flex-direction: column;
	justify-content: flex-start;
	gap: 6px;
	min-height: 110px;
	align-items: flex-start;
	overflow: hidden;
	min-width: 0;
}

.wahlportal-profile-card .profile-name {
	font-size: clamp(1.05rem, 1.6vw, 1.25rem);
	font-weight: 700;
	margin: 0 0 5px;
	line-height: 1.2;
	color: var(--c-text);
	width: 100%; /* Firefox-Fix: -webkit-line-clamp braucht definitive Breite */
	flex-shrink: 0; /* Verhindert Kollaps in flex-column bei knappem Platz */
	display: -webkit-box;
	-webkit-line-clamp: 2;
	line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.profile-bezirk {
	display: block;
	padding: 3px 10px;
	border-radius: var(--radius-full);
	background: var(--c-surface);
	border: 1px solid var(--c-outline-faint);
	font-size: 0.78rem;
	font-weight: 600;
	color: var(--c-text-secondary);
	margin: 0;
	line-height: 1.4;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	align-self: flex-start; /* Chip-Breite = Inhalt, nicht volle Zeile */
	max-width: 100%;
	flex-shrink: 0;
}

/* Kachel-Stil: Überschrift / hervorgehoben */
.profile-card-heading {
	margin: 2px 0 0;
	font-size: 0.95rem;
	font-weight: 800;
	color: var(--c-primary);
	line-height: 1.2;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Kachel-Stil: Normaler Text */
.profile-card-text {
	margin: 2px 0 0;
	font-size: 0.82rem;
	font-weight: 400;
	color: var(--c-text-secondary);
	line-height: 1.4;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.profile-occupation {
	margin: 6px 0 0 0;
	color: var(--c-primary);
	font-weight: 600;
	font-size: 0.9rem;
	width: 100%; /* Firefox-Fix: -webkit-line-clamp braucht definitive Breite */
	flex-shrink: 0; /* Nicht schrumpfen – stattdessen Text abschneiden */
	display: -webkit-box;
	-webkit-line-clamp: 1;
	line-clamp: 1;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

/* Karten-Chips (Gremium, Fachrichtung) */
.profile-card-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin-top: auto;
}

.profile-card-chip {
	font-size: 0.75rem;
	font-weight: 500;
	padding: 4px 12px;
	border-radius: var(--radius-full, 9999px);
	background: var(--wp--preset--color--primary-container, var(--c-primary-container, #C4E7E8));
	color: var(--c-primary);
	line-height: 1.3;
}

.profile-card-link-overlay {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	z-index: 5;
	text-decoration: none;
	display: block;
	pointer-events: auto;
}

/* Grid-Responsive */
@media (max-width: 1100px) {
	.wahlportal-profiles-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

/* Tablet: Karten-Höhe angemessen begrenzen (P4) */
@media (min-width: 640px) and (max-width: 1100px) {
	.wahlportal-profile-card {
		height: clamp(140px, 18vh, 180px);
		min-height: 140px;
	}
}

/* Layout: Grid + Inline Detail Pane */
.wahlportal-profiles-layout {
	display: grid;
	grid-template-columns: 1fr;
	gap: 12px;
	align-items: start;
	margin-top: 0;
	height: 100%;
	min-height: 0;
	overflow: hidden;
}

.wahlportal-profiles-layout.has-selection {
	grid-template-columns: minmax(370px, 1fr) minmax(540px, 2fr);
}

.wahlportal-profiles-layout.has-selection .wahlportal-profiles-grid {
	grid-template-columns: 1fr;
}

.wahlportal-profiles-grid {
	flex: 1 1 auto;
	min-height: 0;
	overflow-y: auto;
	padding: 14px 6px 24px 6px;
}

.wahlportal-profiles-column {
	display: flex;
	flex-direction: column;
	min-height: 0;
	height: 100%;
	overflow: hidden;
	min-width: 280px;
}


/* =========================================================
   6. FILTER-FORMULAR
   ========================================================= */

.wahlportal-filter-form {
	margin: 0 0 12px 0;
	flex: 0 0 auto;
}

.wahlportal-filter-row {
	display: flex;
	flex-direction: row;
	gap: 8px;
	align-items: center;
}

/* Wenn Kandidat geöffnet: Filter untereinander */
.wahlportal-profiles-layout.has-selection .wahlportal-filter-row {
	flex-direction: column;
	align-items: stretch;
}

/* M3 Expressive: Abgerundete Inputs, Surface-Hintergrund */
.wahlportal-filter-select {
	width: 100%;
	min-height: 44px;
	padding: 10px 14px;
	border-radius: var(--radius-s);
	border: 1px solid var(--c-outline-faint);
	background: var(--c-surface);
	color: var(--c-text);
	font-size: 1rem;
	box-shadow: var(--shadow-sm);
	transition: border-color 200ms ease, box-shadow 200ms ease;
}

.wahlportal-filter-select:focus-visible {
	outline: 2px solid var(--c-primary);
	outline-offset: 2px;
	border-color: var(--c-primary);
}

.wahlportal-filter-actions {
	display: flex;
	justify-content: flex-end;
	flex: 0 0 auto;
}

.wahlportal-filter-row > .wahlportal-filter-select {
	flex: 1;
	width: auto;
}

.wahlportal-profiles-layout.has-selection .wahlportal-filter-row > .wahlportal-filter-select {
	flex: none;
	width: 100%;
}

/* Reset-Button: subtiler Text-Link rechtsbündig */
.wahlportal-filter-reset {
	appearance: none;
	border: none;
	background: none;
	color: var(--c-text-secondary);
	padding: 2px 4px;
	border-radius: var(--radius-s);
	font-size: 0.82rem;
	font-weight: 500;
	cursor: pointer;
	text-decoration: underline;
	text-decoration-color: transparent;
	text-underline-offset: 3px;
	transition: color 200ms ease, text-decoration-color 200ms ease;
}

.wahlportal-filter-reset:hover {
	color: var(--c-primary);
	text-decoration-color: currentColor;
	background: none;
	box-shadow: none;
}

.wahlportal-filter-reset:focus-visible {
	outline: 2px solid var(--c-primary);
	outline-offset: 2px;
}

/* Durchsuchbare Combobox (ersetzt <select>) */
.wahlportal-filter-combobox {
	position: relative;
	flex: 1;
}

.wahlportal-profiles-layout.has-selection .wahlportal-filter-combobox {
	flex: none;
}

.wahlportal-filter-trigger {
	display: flex;
	align-items: center;
	justify-content: space-between;
	width: 100%;
	min-height: 44px;
	padding: 10px 14px;
	border-radius: var(--radius-s);
	border: 1px solid var(--c-outline-faint);
	background: var(--c-surface);
	color: var(--c-text);
	font-size: 1rem;
	box-shadow: var(--shadow-sm);
	cursor: pointer;
	gap: 8px;
	text-align: left;
	transition: border-color 200ms ease, box-shadow 200ms ease;
}

.wahlportal-filter-trigger:hover {
	border-color: var(--c-primary);
}

.wahlportal-filter-trigger:focus-visible {
	outline: 2px solid var(--c-primary);
	outline-offset: 2px;
	border-color: var(--c-primary);
}

.wahlportal-filter-trigger.is-filtered {
	border-color: var(--c-primary);
}

.wahlportal-filter-trigger-text {
	flex: 1;
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.wahlportal-filter-trigger-icon {
	flex-shrink: 0;
	font-size: 0.75rem;
	transition: transform 200ms ease;
}

.wahlportal-filter-trigger[aria-expanded="true"] .wahlportal-filter-trigger-icon {
	transform: rotate(180deg);
}

.wahlportal-filter-dropdown {
	position: absolute;
	top: calc(100% + 4px);
	left: 0;
	z-index: 200;
	background: var(--c-surface);
	border: 1px solid var(--c-outline);
	border-radius: var(--radius-m);
	box-shadow: var(--shadow-lg);
	overflow: hidden;
	min-width: 100%;
	width: max-content;
	max-width: 320px;
	display: flex;
	flex-direction: column;
}

.wahlportal-filter-dropdown[hidden] {
	display: none;
}

.wahlportal-filter-search {
	display: block;
	width: 100%;
	padding: 8px 12px;
	border: none;
	border-bottom: 1px solid var(--c-outline-faint);
	background: transparent;
	color: var(--c-text);
	font-size: 0.875rem;
	outline: none;
	box-sizing: border-box;
}

.wahlportal-filter-search:focus {
	border-bottom-color: var(--c-primary);
}

.wahlportal-filter-options {
	list-style: none;
	margin: 0;
	padding: 4px 0;
	max-height: 240px;
	overflow-y: auto;
}

.wahlportal-filter-option {
	padding: 8px 14px;
	font-size: 0.9375rem;
	cursor: pointer;
	color: var(--c-text);
	transition: background 120ms ease;
}

.wahlportal-filter-option:hover {
	background: var(--c-surface-high, rgba(0,0,0,0.04));
}

.wahlportal-filter-option.is-selected {
	color: var(--c-primary);
	font-weight: 500;
}

/* Filter + Dropdown: Mobile-Layout (P1, P2, P5, P6) */
@media (max-width: 640px) {
	.wahlportal-filter-row {
		flex-direction: column;
		align-items: stretch;
	}

	.wahlportal-filter-combobox {
		flex: none;
		width: 100%;
	}

	.wahlportal-filter-actions {
		justify-content: flex-start;
	}

	.wahlportal-filter-reset {
		font-size: 0.875rem;
	}

	/* Dropdown öffnet nach unten auf Mobile (oben kein Platz) */
	.wahlportal-filter-dropdown {
		top: calc(100% + 4px);
		bottom: auto;
	}
}


/* =========================================================
   7. DETAIL-PANE (Inline-Ansicht)
   ---------------------------------------------------------
   Rechte Spalte bei Auswahl eines Kandidaten im Grid.
   ========================================================= */

.profile-detail-pane {
	background: transparent;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	padding: 4px clamp(10px, 1.4vw, 16px) 30px;
	min-height: 320px;
	align-self: stretch;
	height: 100%;
	max-height: 100%;
	overflow-y: auto;
	margin-top: 0;
	overscroll-behavior: contain;
	position: relative;
}

.profile-detail-pane[hidden] {
	display: none;
}

/* Drag-Handle: Desktop unsichtbar */
.profile-detail-pane .pane-drag-handle {
	display: none;
}

.profile-detail-pane .profile-detail-placeholder {
	color: var(--c-text-secondary);
	font-weight: 600;
}

.profile-detail-pane .profile-detail-body {
	max-height: none;
	overflow: visible;
	padding-right: 0;
	padding-bottom: 24px;
}

.profile-detail-pane .profile-detail-pane-header {
	position: absolute;
	top: 8px;
	right: 8px;
	display: flex;
	justify-content: flex-end;
	padding: 0;
	z-index: 3;
}

/* Schließen-Button: Pill-Shape, Surface-Hintergrund */
.profile-pane-close {
	appearance: none;
	border: 1px solid var(--c-outline-faint);
	background: var(--c-surface);
	border-radius: var(--radius-full);
	width: 36px;
	height: 36px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 1.2rem;
	cursor: pointer;
	box-shadow: var(--shadow-sm);
	transition: background-color 200ms ease,
	            box-shadow 200ms ease;
}

.profile-pane-close:hover {
	background-color: var(--c-hover);
	box-shadow: var(--shadow-card);
}

.profile-detail-placeholder.is-hidden {
	display: none;
}

.profile-detail-pane .wahlportal-profile-container {
	padding: 0;
	box-shadow: none;
	max-width: 100%;
}

.profile-detail-pane .profile-hero {
	padding: 0 0 20px 0;
	box-shadow: none;
	border-radius: 0;
	background: transparent;
	border: 0;
	border-bottom: 1px solid var(--c-outline-faint);
	margin-bottom: 8px;
}

.profile-detail-pane .hero-inner {
	grid-template-columns: minmax(140px, 200px) minmax(0, 1fr);
	gap: 16px;
	align-items: stretch;
}

.profile-detail-pane .hero-facts {
	display: block;
	margin-top: 12px;
}

.profile-detail-pane .hero-tags {
	gap: 6px;
}

.profile-detail-pane .pill {
	padding: 5px 12px;
	font-weight: 600;
	font-size: 0.82rem;
}

.profile-detail-pane .pill-badge {
	background: var(--c-primary);
	color: var(--c-on-primary);
}

.profile-detail-pane .hero-facts .fact-row {
	border-bottom: 0;
	padding: 3px 0;
	justify-content: flex-start;
	gap: 10px;
	font-size: 0.9rem;
}

.profile-detail-pane .hero-facts .fact-row dt {
	color: var(--c-text-secondary);
	font-weight: 600;
	min-width: 72px;
	font-size: 0.85rem;
}

.profile-detail-pane .hero-facts .fact-row dd {
	font-size: 0.85rem;
	margin: 0;
}

.profile-detail-pane .hero-content {
	min-width: 0;
}

.profile-detail-pane .hero-content .profile-name {
	margin-bottom: 4px;
	font-size: clamp(1.3rem, 2vw, 1.65rem);
	line-height: 1.15;
}

.profile-detail-pane .hero-summary {
	gap: 4px;
}

.profile-detail-pane .hero-summary-item {
	font-size: 0.92rem;
	color: var(--c-text-secondary, #555);
}

/* portrait-card hat in der Basis keine Optik mehr – Override nur noch für Panel-spezifische Breite */
.profile-detail-pane .portrait-card {
	border-radius: var(--radius-m, 16px);
}

.profile-detail-pane .portrait-media {
	border-radius: var(--radius-m, 16px);
}

.profile-detail-pane .profile-card {
	box-shadow: var(--shadow-sm);
	padding: clamp(14px, 1.6vw, 18px);
	border: 1px solid var(--c-outline-faint);
	border-radius: var(--radius-s);
}

.profile-detail-pane .profile-footer-nav {
	display: none;
}

@media (max-width: 1080px) {
	/* body + wrapper: normales Seitenscrolling statt interner Scroll-Bereiche */
	body.wahlportal-profiles-page {
		overflow: auto;
	}

	.wahlportal-profiles-wrapper {
		height: auto;
		overflow: visible;
	}

	/* has-selection muss mit zurückgesetzt werden (höhere Spezifität) */
	.wahlportal-profiles-layout,
	.wahlportal-profiles-layout.has-selection {
		grid-template-columns: 1fr;
		height: auto;
		overflow: visible;
	}

	.wahlportal-profiles-grid {
		height: auto;
		overflow: visible;
		padding-right: 0;
	}

	.profile-detail-pane .profile-detail-body {
		max-height: none;
	}

	/* --- Bottom-Sheet für alle Geräte ≤1080px --- */
	.wahlportal-profiles-layout.has-selection .profile-detail-pane {
		position: fixed;
		bottom: 0;
		left: 0;
		right: 0;
		top: auto;
		height: 85dvh;
		max-height: 85dvh;
		padding-top: 28px; /* Platz für Drag-Handle (20px) + Abstand */
		border-radius: var(--radius-xl, 48px) var(--radius-xl, 48px) 0 0;
		overflow-y: auto;
		z-index: 1100;
		background: var(--c-surface, #fff);
		box-shadow: var(--shadow-lg);
		animation: slide-up 400ms var(--ease-decelerate, cubic-bezier(0, 0, 0.2, 1)) both;
	}

	/* Drag-Handle-Pill */
	.profile-detail-pane .pane-drag-handle {
		display: block;
		position: absolute;
		top: 10px;
		left: 50%;
		transform: translateX(-50%);
		width: 40px;
		height: 4px;
		border-radius: 2px;
		background: color-mix(in srgb, var(--c-on-surface, #1A1A1A) 22%, transparent);
		touch-action: none;
		cursor: grab;
	}

	@keyframes slide-up {
		from { transform: translateY(100%); }
		to   { transform: none; }
	}

	/* Scrim/Backdrop hinter dem Bottom-Sheet */
	.wahlportal-profiles-layout.has-selection::before {
		content: '';
		position: fixed;
		inset: 0;
		z-index: 1099;
		background: color-mix(in srgb, var(--c-on-surface, #1A1A1A) 32%, transparent);
		animation: scrim-fade 300ms ease both;
		pointer-events: auto;
	}

	@keyframes scrim-fade {
		from { opacity: 0; }
		to   { opacity: 1; }
	}

	/* Hero im Bottom-Sheet: Portrait + Content nebeneinander, aber kompakt */
	.profile-detail-pane .hero-inner {
		grid-template-columns: minmax(120px, 150px) minmax(0, 1fr);
		gap: 14px;
	}
}


/* =========================================================
   7b. PANEL-SKELETON (Lade-Animation Detail-Pane)
   ---------------------------------------------------------
   Shimmer-Skeleton, das das echte Profil-Layout nachahmt,
   bis die AJAX-Antwort eintrifft.
   ========================================================= */

@keyframes psk-shimmer {
	0%   { background-position: -600px 0; }
	100% { background-position: 600px 0; }
}

@keyframes psk-fade-in {
	from { opacity: 0; }
	to   { opacity: 1; }
}

@keyframes psk-fade-out {
	from { opacity: 1; }
	to   { opacity: 0; }
}

.skel {
	border-radius: var(--radius-s, 6px);
	background: linear-gradient(
		90deg,
		var(--c-surface-dim, #e8e8e8) 0%,
		var(--c-surface, #f4f4f4) 40%,
		var(--c-surface-dim, #e8e8e8) 80%
	);
	background-size: 600px 100%;
	animation: psk-shimmer 1.4s ease-in-out infinite;
}

/* Skeleton erscheint erst nach 150 ms – bei schnellen Antworten bleibt es unsichtbar */
.panel-skeleton {
	padding: 4px 0 24px;
	display: flex;
	flex-direction: column;
	gap: 0;
	opacity: 0;
	animation: psk-fade-in 250ms 150ms ease-out forwards;
}

/* Geladener Inhalt blendet weich ein */
.psk-reveal {
	animation: psk-fade-in 200ms ease-out;
}

/* Aktueller Inhalt blendet beim Wechsel weg (Split-View) */
.psk-fade-out {
	animation: psk-fade-out 150ms ease-in forwards;
	pointer-events: none;
}

/* Hero-Bereich: Bild + Meta */
.psk-hero {
	display: grid;
	grid-template-columns: minmax(140px, 200px) minmax(0, 1fr);
	gap: 16px;
	align-items: start;
	padding-bottom: 20px;
}

.psk-image {
	width: 100%;
	aspect-ratio: 3 / 4;
	max-width: 200px;
	border-radius: var(--radius-s, 6px);
}

.psk-hero-meta {
	display: flex;
	flex-direction: column;
	gap: 12px;
	padding-top: 4px;
}

.psk-pills {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
}

.psk-pill {
	height: 26px;
	width: 100px;
	border-radius: var(--radius-full, 999px);
}

.psk-name {
	height: 28px;
	width: 65%;
	border-radius: var(--radius-s, 6px);
}

/* Trennlinie */
.psk-divider {
	height: 2px;
	background: var(--c-outline-faint, #e0e0e0);
	margin: 4px 0 20px;
}

/* Body */
.psk-body {
	display: grid;
	grid-template-columns: minmax(0, 1.6fr) minmax(180px, 0.9fr);
	gap: 16px;
}

.psk-section {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.psk-label {
	height: 12px;
	width: 80px;
	border-radius: 3px;
	margin-bottom: 4px;
}

.psk-line {
	height: 14px;
	border-radius: 4px;
}

.psk-contact {
	display: flex;
	flex-direction: column;
	gap: 10px;
}

.psk-contact-row {
	display: flex;
	align-items: center;
	gap: 10px;
	margin-top: 4px;
}

.psk-icon {
	width: 20px;
	height: 20px;
	border-radius: 50%;
	flex-shrink: 0;
}

/* =========================================================
   8. EINZELPROFIL – HEADER-DETAIL-VIEW
   ---------------------------------------------------------
   Vollseiten-Profil mit Header-Grid, Bio und Kontaktbereich.
   M3 Expressive: Surfaces statt Bordüren, großzügige Radien.
   ========================================================= */

/* Wrapper */
.wahlportal-detail-view {
	max-width: var(--wp--style--global--content-size, 1200px);
	margin: 0 auto;
	padding: 0 20px;
	box-sizing: border-box;
	margin-bottom: var(--wp--preset--spacing--80);
}

/* Header Grid: Bild | Info | Kontakt */
.wahlportal-detail-header {
	display: grid;
	grid-template-columns: auto 1fr 300px;
	gap: var(--wp--preset--spacing--60);
	align-items: flex-start;
	margin-bottom: var(--wp--preset--spacing--60);
	padding-bottom: var(--wp--preset--spacing--60);
	/* M3: Trennung über Fläche, keine harte Linie */
	border-bottom: 2px solid var(--c-outline-faint);
}

/* Bild-Bereich */
.detail-header-left {
	display: contents;
}

.detail-header-image {
	width: 220px;
}

.detail-header-image img {
	border-radius: var(--radius-s);
	width: 100%;
	aspect-ratio: 4/5;
	object-fit: cover;
	display: block;
	box-shadow: var(--shadow-card);
}

/* Info-Bereich (Mitte) */
.detail-header-info {
	padding-top: var(--wp--preset--spacing--20);
}

.detail-bezirk {
	text-transform: uppercase;
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 1px;
	color: var(--c-primary);
	margin-bottom: 0.5rem;
}

.detail-title {
	font-size: clamp(2rem, 4vw, 2.75rem);
	margin: 0 0 1rem 0;
	line-height: 1.1;
	font-weight: 800;
	color: var(--c-text);
	letter-spacing: -0.02em;
}

.detail-badge-wrapper {
	margin-bottom: 1.5rem;
}

.profile-badge {
	display: inline-flex;
	align-items: center;
	padding: 0.4em 1em;
	font-size: 0.8rem;
	font-weight: 700;
	background-color: var(--c-primary);
	color: var(--c-on-primary);
	border-radius: var(--radius-full);
	box-shadow: var(--shadow-card);
}

.detail-meta-list {
	margin-top: 1rem;
	font-size: 1.1rem;
	color: var(--c-text);
}

.detail-meta-list .meta-row {
	display: flex;
	margin-bottom: 0.5rem;
	align-items: baseline;
}

.detail-meta-list dt {
	width: 100px;
	font-weight: 600;
	color: var(--c-text-secondary);
	flex-shrink: 0;
}

.detail-meta-list dd {
	margin: 0;
	font-weight: 500;
}

/* Kontaktbereich (rechts) – Surface-Container */
.detail-header-right {
	background-color: var(--c-surface-dim);
	padding: 2rem;
	border-radius: var(--radius-m);
	height: 100%;
}

.contact-header-title {
	font-size: 0.85rem;
	margin: 0 0 1.5rem 0;
	text-transform: uppercase;
	letter-spacing: 0.6px;
	font-weight: 700;
	color: var(--c-text-secondary);
}

.contact-list-header {
	list-style: none;
	padding: 0;
	margin: 0;
}

.contact-list-header li {
	margin-bottom: 1rem;
	display: flex;
	align-items: center;
	gap: 12px;
}

.contact-icon {
	font-size: 1rem;
	background: var(--c-surface);
	width: 36px;
	height: 36px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: var(--radius-s);
	box-shadow: var(--shadow-sm);
	color: var(--c-text);
}

.contact-list-header a {
	text-decoration: none;
	color: var(--c-text);
	font-weight: 600;
	transition: color 200ms ease;
	font-size: 0.95rem;
	word-break: break-all;
}

.contact-list-header a:hover {
	color: var(--c-primary);
}

/* Hauptinhalt – Optimale Lesebreite */
.wahlportal-detail-main {
	max-width: 720px;
	margin: 0 auto 4rem auto;
}

.detail-bio-column h2.section-title {
	font-family: var(--wp--preset--font-family--google-sans);
	font-size: 1.75rem;
	margin-bottom: 1.5rem;
	font-weight: 700;
	color: var(--c-text);
}

.section-title {
	margin-top: 0;
	margin-bottom: 20px;
}

.detail-bio-text {
	font-size: 1.15rem;
	line-height: 1.75;
	color: var(--c-text);
}

.detail-bio-text p {
	margin-bottom: 1.5em;
}

/* Kontaktbox (alte Variante, falls verwendet) */
.detail-contact-box {
	background-color: var(--c-surface-dim);
	border: none;
	border-radius: var(--radius-m);
	padding: 25px;
}

.detail-contact-box h3 {
	margin-top: 0;
	font-size: 1.25rem;
	margin-bottom: 15px;
}

.detail-contact-box ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

.detail-contact-box li {
	margin-bottom: 15px;
}

.detail-contact-box strong {
	display: block;
	font-size: 0.9rem;
	color: var(--c-text-secondary);
	margin-bottom: 2px;
}

.detail-contact-box a {
	color: var(--c-primary);
	text-decoration: none;
	font-weight: 600;
	font-size: 1.1rem;
}

/* Footer – Trennung über Surface statt 1px-Linie */
.wahlportal-detail-footer {
	border-top: 2px solid var(--c-outline-faint);
	padding-top: 2rem;
	display: flex;
	justify-content: center;
	margin-bottom: var(--wp--preset--spacing--60);
}

.back-button {
	text-decoration: none;
	font-weight: 600;
	color: var(--c-text);
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 12px 24px;
	border-radius: var(--radius-full);
	transition: background-color 200ms ease, transform 200ms ease;
}

.back-button:hover {
	background-color: var(--c-hover);
	transform: translateX(-4px);
}

/* Detail-Header Responsive */
@media (max-width: 1024px) {
	.wahlportal-detail-header {
		grid-template-columns: 200px 1fr;
		gap: 2rem;
	}
	.detail-header-right {
		grid-column: span 2;
		display: flex;
		justify-content: space-between;
		align-items: center;
	}
	.contact-header-title {
		margin-bottom: 0;
		margin-right: 20px;
	}
	.contact-list-header {
		display: flex;
		gap: 20px;
	}
	.contact-list-header li {
		margin-bottom: 0;
	}
}

@media (max-width: 768px) {
	.wahlportal-detail-header {
		grid-template-columns: 1fr;
		text-align: center;
		gap: 2rem;
	}
	.detail-header-image {
		width: 100%;
		max-width: 280px;
		margin: 0 auto;
	}
	.detail-header-info {
		padding-top: 0;
	}
	.detail-meta-list .meta-row {
		justify-content: center;
	}
	.detail-header-right {
		grid-column: span 1;
		flex-direction: column;
		align-items: flex-start;
		text-align: left;
	}
	.contact-header-title {
		margin-bottom: 1rem;
	}
	.contact-list-header {
		flex-direction: column;
		align-items: flex-start;
	}
	.wahlportal-detail-main {
		padding-left: 20px;
		padding-right: 20px;
	}
}


/* =========================================================
   9. PROFIL-SHORTCODE V4 (Monolithische Einzelansicht)
   ---------------------------------------------------------
   Modernes Profil-Layout: Hero + Body-Grid + Footer.
   Nutzt durchgehend Design-Tokens für Konsistenz mit
   dem Wahlleitungsdashboard.
   ========================================================= */

/* Container */
/* Breite ebenfalls auf wideSize – Vollseiten-Profil fluchtet mit Header und Kandidatenübersicht */
.wahlportal-profile-container {
	max-width: var(--wp--style--global--wide-size, 1400px);
	margin: 0 auto;
	padding: var(--wp--preset--spacing--40) 24px;
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--40);
	box-sizing: border-box;
}

/* X-010: Full-Page – Wrapper erbt das gesamte Panel-CSS (.profile-detail-pane),
   nur die Layout-Properties die das Seitenscrolling brechen werden resettet,
   plus Card-Optik und Margin damit die Seite wie die Übersicht aussieht. */

/* Seitenhintergrund = --c-bg (#F5FAFA), identisch mit der Übersichtsseite */
body.single-profil,
body.single-profil main.wp-block-group {
	background-color: var(--c-bg);
}

/* Wrapper: Panel-CSS erben, aber scroll-brechende Properties zurücksetzen.
   Card-Optik auf dem --c-bg-Hintergrund. */
.profile-detail-pane.is-full-page-pane {
	height: auto;
	max-height: none;
	overflow-y: visible;
	overscroll-behavior: auto;
	align-self: auto;
	max-width: 900px;
	margin: clamp(16px, 2vw, 28px) auto;
	background: var(--c-surface);
	border-radius: var(--radius-l);
	box-shadow: var(--shadow-card);
}

/* Portrait: auf Full-Page etwas breiter als im Panel (180–240px statt 140–200px) */
.is-full-page .hero-inner {
	grid-template-columns: minmax(180px, 240px) minmax(0, 1fr);
	gap: clamp(20px, 2.5vw, 32px);
}

/* Name: etwas größer als Panel-Kompaktgröße */
.is-full-page .profile-name {
	font-size: clamp(1.8rem, 2.2vw, 2.2rem);
}

/* Footer-Navigation: auf Full-Page sichtbar (Panel versteckt sie mit display:none) */
.is-full-page .profile-footer-nav {
	display: flex;
}

/* Hero-Sektion – M3 Surface-Gradient */
.profile-hero {
	background: linear-gradient(150deg, var(--c-surface-dim) 0%, var(--c-surface) 70%);
	border: none;
	border-radius: var(--radius-l);
	padding: clamp(22px, 2.6vw, 32px);
	box-shadow: var(--shadow-card);
}

.hero-inner {
	display: grid;
	grid-template-columns: minmax(240px, 300px) 1fr;
	gap: clamp(22px, 2.8vw, 36px);
	align-items: stretch;
}

/* Portrait-Karte – nur Overflow-Container, keine eigene Optik (Redesign 2026-03) */
.portrait-card {
	border-radius: var(--radius-m);
	overflow: hidden;
}

.portrait-media {
	position: relative;
	overflow: hidden;
	border-radius: var(--radius-s);
	aspect-ratio: 3 / 4;
	background: linear-gradient(180deg, rgba(0, 139, 143, 0.1), rgba(0, 26, 27, 0.05));
}

.portrait-img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.portrait-placeholder {
	width: 100%;
	height: 100%;
	background: repeating-linear-gradient(
		45deg,
		rgba(0, 26, 27, 0.06),
		rgba(0, 26, 27, 0.06) 12px,
		rgba(0, 26, 27, 0.04) 12px,
		rgba(0, 26, 27, 0.04) 24px
	);
}

/* Pills & Badges – Pill-Shape wie Buttons */
.pill {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 8px 14px;
	border-radius: var(--radius-full);
	font-weight: 700;
	font-size: 0.88rem;
	letter-spacing: 0.2px;
	width: fit-content;
}

.pill-district {
	background: var(--c-surface);
	color: var(--c-text);
	border: 1px solid var(--c-outline-faint);
	box-shadow: var(--shadow-sm);
}

.pill-badge {
	position: static;
	align-self: center;
	margin-top: 0;
	background: var(--c-primary);
	color: var(--c-on-primary);
	padding: 6px 12px;
	font-size: 0.8rem;
	border-radius: var(--radius-full);
	box-shadow: var(--shadow-card);
}

.hero-tags {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	align-items: center;
}

/* Steckbrief immer volle Breite im Hero-Grid (Vollseite + Panel) */
.hero-facts {
	grid-column: 1 / -1;
}

/* Hero-Inhalt */
.hero-content {
	display: flex;
	flex-direction: column;
	gap: 12px;
	justify-content: flex-start; /* Inhalt oben, Kontakt via margin-top:auto unten */
	min-width: 0; /* Grid-Item darf schrumpfen → overflow-wrap greift korrekt */
}

.hero-summary {
	display: flex;
	flex-direction: column;
	gap: 6px;
	margin-top: 2px;
}

.hero-summary-item {
	margin: 0;
	font-size: 1rem;
	color: var(--c-text);
}

.profile-name {
	margin: 0;
	font-size: clamp(2.3rem, 2.8vw, 2.8rem);
	line-height: 1.05;
	color: var(--c-text);
	font-weight: 800;
}

/* Meta-Chips */
.hero-meta {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.meta-chip {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 8px 12px;
	border-radius: var(--radius-s);
	background: var(--c-surface);
	border: 1px solid var(--c-outline-faint);
	color: var(--c-text);
	font-weight: 600;
	box-shadow: var(--shadow-sm);
}

.meta-chip-muted {
	background: var(--c-hover);
	border-color: rgba(0, 139, 143, 0.2);
}

.chip-label {
	font-size: 0.78rem;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--c-text-secondary);
}

.chip-value {
	font-size: 1rem;
	font-weight: 700;
}

/* section-label wird nur noch im Kontakt-Body-Block genutzt */
.section-label {
	font-size: 0.85rem;
	text-transform: uppercase;
	letter-spacing: 0.6px;
	color: var(--c-text-secondary);
	font-weight: 700;
	margin-bottom: 4px;
}

.contact-hint {
	color: var(--c-text-secondary);
	font-size: 0.95rem;
}

/* Kontakt-Bereich im Hero – horizontal, unten bündig mit dem Foto */
.hero-contact-inline {
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem 0.5rem;
	list-style: none;
	padding: 0;
	margin: auto 0 0 0;
}

.hero-contact-inline li {
	display: flex;
	align-items: center;
	gap: 6px;
	padding: 4px 11px 4px 9px;
	border-radius: var(--radius-full);
	background: color-mix(in srgb, var(--c-surface) 60%, transparent);
	border: 1px solid var(--c-outline-faint);
	transition: border-color 150ms ease, background 150ms ease;
}

.hero-contact-inline li:has(a:hover),
.hero-contact-inline li:has(a:focus-visible) {
	background: var(--c-hover);
	border-color: color-mix(in srgb, var(--c-primary) 50%, transparent);
}

.hero-contact-inline li i {
	font-size: 0.72rem;
	color: var(--c-primary);
	flex-shrink: 0;
}

.hero-contact-inline li a,
.hero-contact-inline li span {
	color: var(--c-text-secondary);
	font-weight: 500;
	font-size: 0.83rem;
	text-decoration: none;
	word-break: break-all;
}

.hero-contact-inline li a:hover,
.hero-contact-inline li a:focus-visible {
	color: var(--c-primary);
}

/* Bio + Kontakt – gestapelt (Full-Page und Panel) */
.profile-body-stack {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--40);
}

/* Karten im Body – M3 Surface, keine Border */
.profile-card {
	background: var(--c-surface);
	border-radius: var(--radius-m);
	padding: clamp(18px, 2vw, 24px);
	border: none;
	box-shadow: var(--shadow-card);
}


.card-label {
	font-size: 0.85rem;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--c-text-secondary);
	font-weight: 700;
	margin-bottom: 10px;
}

.bio-text {
	font-size: 1.05rem;
	line-height: 1.7;
	color: var(--c-text);
}

.bio-text p {
	margin-bottom: 1.1rem;
}

/* Bio-Felder mit individuellen Labels */
.bio-field-item {
	margin-bottom: var(--wp--preset--spacing--30);
}

.bio-field-item:last-child {
	margin-bottom: 0;
}

.bio-field-label {
	font-size: 0.85rem;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	color: var(--c-text-secondary);
	font-weight: 700;
	margin-bottom: 10px;
}

/* Sidebar-Spalte */
.profile-side-column {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--30);
}

.fact-list {
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
}

/* M3: Trennung über Surface-Tint statt 1px solid */
.fact-row {
	display: flex;
	justify-content: space-between;
	gap: 10px;
	padding: 8px 0;
	border-bottom: 2px solid var(--c-outline-faint);
}

.fact-row:last-child {
	border-bottom: none;
}

.fact-row dt {
	font-weight: 700;
	color: var(--c-text-secondary);
}

.fact-row dd {
	margin: 0;
	color: var(--c-text);
	font-weight: 600;
}

/* Mehrfachauswahl im Steckbrief: Werte als einzelne Pills nebeneinander */
.fact-multiselect {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	align-items: center;
}

.contact-list-vertical {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 12px;
}

.contact-list-vertical li {
	display: grid;
	grid-template-columns: 36px 1fr;
	gap: 10px;
	align-items: center;
}

/* Kontakt-Detail */
.contact-detail {
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.contact-detail .label {
	font-size: 0.78rem;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--c-text-secondary);
	font-weight: 700;
}

.contact-detail a {
	text-decoration: none;
	color: var(--c-text);
	font-weight: 700;
	overflow-wrap: break-word;
	word-break: break-word;
	transition: color 200ms ease;
}

.contact-detail a:hover,
.contact-detail a:focus-visible {
	color: var(--c-primary);
	text-decoration: underline;
}

.detail-no-text {
	color: var(--c-text-secondary);
	margin: 0;
}

/* Footer-Navigation */
.profile-footer-nav {
	display: flex;
	justify-content: flex-start;
	border-top: 2px solid var(--c-outline-faint);
	padding-top: 1.25rem;
}

.btn-back {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	text-decoration: none;
	color: var(--c-text);
	font-weight: 700;
	font-size: 0.95rem;
	padding: 10px 20px;
	border-radius: var(--radius-full);
	transition: transform 200ms ease,
	            color 200ms ease,
	            background-color 200ms ease;
}

.btn-back:hover,
.btn-back:focus-visible {
	color: var(--c-primary);
	background-color: var(--c-hover);
	transform: translateX(-4px);
}


/* =========================================================
  10. RESPONSIVE BREAKPOINTS
   ========================================================= */

@media (max-width: 1100px) {
	.hero-inner {
		grid-template-columns: 1fr;
	}

	.portrait-card {
		max-width: 420px;
	}
}

@media (max-width: 900px) {
	.hero-contact-inline {
		gap: 0.5rem 1.25rem;
	}
}

@media (max-width: 640px) {
	.wahlportal-profile-container {
		padding: var(--wp--preset--spacing--40) 16px;
	}

	.profile-name {
		font-size: 2.1rem;
	}

	/* Auf kleinen Screens auch den Panel-Stack kollabieren */
	.profile-detail-pane .profile-body-stack {
		grid-template-columns: 1fr;
	}

	.fact-row {
		flex-direction: column;
		align-items: flex-start;
	}

	.contact-list-vertical li {
		grid-template-columns: 1fr;
	}
}


/* =========================================================
  11. GRAVITY FORMS – MD3 OVERRIDES
   ---------------------------------------------------------
   Styling für das Nominierungsformular unter /nominierung.
   GF 2.5+ nutzt .gravity-theme auf dem Wrapper, daher
   brauchen wir hohe Spezifität (body-Prefix + !important).
   Temporäre Lösung bis GF durch nativen Plugin-Ersatz
   abgelöst wird (Feature C3 – Unified Pipeline).
   ========================================================= */

/* Labels: MD3 Body-Style */
body .gform_wrapper .gfield_label,
body .gform_wrapper.gravity-theme .gfield_label {
	font-size: 0.875rem !important;
	font-weight: 500 !important;
	color: var(--wp--preset--color--on-surface-variant, #49454F) !important;
	margin-bottom: 6px !important;
	letter-spacing: 0.01em;
}

/* Required-Markierung in Primärfarbe */
body .gform_wrapper .gfield_required,
body .gform_wrapper.gravity-theme .gfield_required {
	color: var(--c-primary, var(--wp--preset--color--primary)) !important;
	font-weight: 700;
}

/* Input-Felder: MD3 Outlined Style */
body .gform_wrapper input[type="text"],
body .gform_wrapper input[type="email"],
body .gform_wrapper input[type="tel"],
body .gform_wrapper input[type="url"],
body .gform_wrapper input[type="number"],
body .gform_wrapper textarea,
body .gform_wrapper select,
body .gform_wrapper.gravity-theme input[type="text"],
body .gform_wrapper.gravity-theme input[type="email"],
body .gform_wrapper.gravity-theme input[type="tel"],
body .gform_wrapper.gravity-theme input[type="url"],
body .gform_wrapper.gravity-theme input[type="number"],
body .gform_wrapper.gravity-theme textarea,
body .gform_wrapper.gravity-theme select {
	width: 100% !important;
	padding: 12px 16px !important;
	border: 1.5px solid var(--wp--preset--color--outline, #79747E) !important;
	border-radius: var(--radius-s, 12px) !important;
	background: var(--c-surface, #ffffff) !important;
	font-size: 1rem !important;
	line-height: 1.5 !important;
	min-height: 48px !important;
	height: auto !important;
	color: var(--wp--preset--color--on-surface, var(--c-text, #001A1B)) !important;
	transition: border-color 200ms ease, box-shadow 200ms ease !important;
	outline: none !important;
	appearance: none;
	-webkit-appearance: none;
	box-shadow: none !important;
	font-family: inherit !important;
	box-sizing: border-box !important;
	overflow: visible !important;
}

body .gform_wrapper input:focus,
body .gform_wrapper textarea:focus,
body .gform_wrapper select:focus,
body .gform_wrapper.gravity-theme input:focus,
body .gform_wrapper.gravity-theme textarea:focus,
body .gform_wrapper.gravity-theme select:focus {
	border-color: var(--c-primary, var(--wp--preset--color--primary)) !important;
	box-shadow: 0 0 0 2px rgba(0, 139, 143, 0.15) !important;
}

/* Select: Dropdown-Pfeil (SVG) da appearance:none den nativen entfernt */
body .gform_wrapper select,
body .gform_wrapper.gravity-theme select {
	padding-right: 42px !important;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23008B8F' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E") !important;
	background-repeat: no-repeat !important;
	background-position: right 14px center !important;
	background-size: 18px 18px !important;
	cursor: pointer !important;
	color: #001A1B !important;
	-webkit-text-fill-color: #001A1B !important;
}

/* Select-Optionen: Textfarbe explizit setzen (WebKit ignoriert text-fill-color auf options) */
body .gform_wrapper select option,
body .gform_wrapper.gravity-theme select option {
	color: #001A1B !important;
	background: #ffffff !important;
}

/* Submit-Button: Pill-Shape im Brand-Style */
body .gform_wrapper .gform_button,
body .gform_wrapper input[type="submit"],
body .gform_wrapper.gravity-theme .gform_button,
body .gform_wrapper.gravity-theme input[type="submit"],
body .gform_wrapper .gform_footer input[type="submit"],
body .gform_wrapper.gravity-theme .gform_footer input[type="submit"] {
	background: var(--c-primary, var(--wp--preset--color--primary)) !important;
	color: #fff !important;
	border: none !important;
	border-radius: var(--radius-button, 9999px) !important;
	padding: 14px 36px !important;
	font-size: 1rem !important;
	font-weight: 600 !important;
	cursor: pointer !important;
	transition: transform 200ms ease, box-shadow 200ms ease !important;
	font-family: inherit !important;
	letter-spacing: 0.02em;
	line-height: 1.4 !important;
	min-width: 160px;
	text-align: center;
}

body .gform_wrapper .gform_button:hover,
body .gform_wrapper input[type="submit"]:hover,
body .gform_wrapper.gravity-theme .gform_button:hover,
body .gform_wrapper.gravity-theme input[type="submit"]:hover {
	transform: scale(1.03) translateY(-1px);
	box-shadow: var(--shadow-lg) !important;
}

/* Abschnitts-Header (gsection): dezente Trennlinie */
body .gform_wrapper .gsection,
body .gform_wrapper.gravity-theme .gsection {
	border: none !important;
	background: transparent !important;
	border-radius: 0 !important;
	padding: 10px 0 !important;
	margin: 36px 0 20px !important;
	position: relative !important;
}

/* Leere gsection (nur Trennlinie, kein Titel): kompakter */
body .gform_wrapper .gsection:has(.gsection_title:empty),
body .gform_wrapper.gravity-theme .gsection:has(.gsection_title:empty) {
	padding: 0 !important;
	margin: 24px 0 20px !important;
}

/* Trennlinie als Pseudo-Element unterhalb der Section-Überschrift */
body .gform_wrapper .gsection::after,
body .gform_wrapper.gravity-theme .gsection::after {
	content: "" !important;
	display: block !important;
	position: static !important;
	margin-top: 14px !important;
	height: 1px !important;
	background: var(--c-outline-faint, #D6E8E8) !important;
}

body .gform_wrapper .gsection_title,
body .gform_wrapper.gravity-theme .gsection_title {
	font-size: 1.15rem !important;
	font-weight: 700 !important;
	color: var(--wp--preset--color--on-surface, var(--c-text, #1C1B1F)) !important;
	margin: 0 !important;
	padding: 0 0 0 16px !important;
	letter-spacing: -0.01em;
	border: none !important;
	border-left: 4px solid var(--c-primary, var(--wp--preset--color--primary)) !important;
}

/* Beschreibung unter gsection-Titel */
body .gform_wrapper .gsection_description,
body .gform_wrapper.gravity-theme .gsection_description {
	color: var(--wp--preset--color--on-surface-variant, #49454F) !important;
	font-size: 0.875rem !important;
	margin-top: 4px !important;
	margin-left: 16px !important;
}



/* Formular-Body als Karte */
body .gform_wrapper .gform_body,
body .gform_wrapper.gravity-theme .gform_body {
	background: var(--wp--preset--color--surface, var(--c-surface, #FAFAFA)) !important;
	border-radius: var(--radius-l, 24px) !important;
	padding: clamp(24px, 4vw, 40px) !important;
	box-shadow: var(--shadow-sm) !important;
}

/* GF Feld-Abstände normalisieren */
body .gform_wrapper .gform_fields,
body .gform_wrapper.gravity-theme .gform_fields {
	gap: 16px 24px !important;
}

body .gform_wrapper .gfield,
body .gform_wrapper.gravity-theme .gfield {
	margin-bottom: 0 !important;
	padding: 0 !important;
}

/* GF Progress Bar → MD3 Linear Indicator (dünn!) */
body .gf_progressbar_wrapper,
body .gform_wrapper .gf_progressbar_wrapper {
	margin-bottom: 32px !important;
}

body .gf_progressbar,
body .gform_wrapper .gf_progressbar {
	height: 4px !important;
	background: var(--wp--preset--color--surface-high, #E0E0E4) !important;
	border-radius: 9999px !important;
	overflow: hidden !important;
	border: none !important;
}

body .gf_progressbar_percentage,
body .gform_wrapper .gf_progressbar_percentage {
	height: 100% !important;
	background: var(--c-primary, var(--wp--preset--color--primary)) !important;
	border-radius: 9999px !important;
	transition: width 400ms ease !important;
}

body .gf_progressbar_percentage span,
body .gform_wrapper .gf_progressbar_percentage span {
	display: none !important;
}

/* GF Fortschritts-Schritte (Step-Indicators) */
body .gf_progressbar_title,
body .gform_wrapper .gf_progressbar_title {
	font-size: 0.8rem !important;
	font-weight: 600 !important;
	color: var(--wp--preset--color--on-surface-variant, #49454F) !important;
	text-transform: uppercase !important;
	letter-spacing: 0.05em !important;
	margin-bottom: 8px !important;
}

/* GF Page Steps: Separator / Trenner dünn */
body .gform_wrapper .gf_step_clear,
body .gform_wrapper.gravity-theme .gf_step_clear {
	display: none !important;
}

body .gform_wrapper .gf_page_steps,
body .gform_wrapper.gravity-theme .gf_page_steps {
	border: none !important;
	margin-bottom: 24px !important;
	padding-bottom: 12px !important;
	border-bottom: 1px solid var(--wp--preset--color--outline, #79747E33) !important;
}

/* Nächste/Zurück-Buttons in Multi-Step */
body .gform_wrapper .gform_previous_button,
body .gform_wrapper.gravity-theme .gform_previous_button {
	background: transparent !important;
	color: var(--c-primary, var(--wp--preset--color--primary)) !important;
	border: 1.5px solid var(--c-primary, var(--wp--preset--color--primary)) !important;
	border-radius: var(--radius-button, 9999px) !important;
	padding: 12px 28px !important;
	font-weight: 600 !important;
	font-size: 0.95rem !important;
	cursor: pointer !important;
	font-family: inherit !important;
}

body .gform_wrapper .gform_next_button,
body .gform_wrapper.gravity-theme .gform_next_button {
	background: var(--c-primary, var(--wp--preset--color--primary)) !important;
	color: #fff !important;
	border: none !important;
	border-radius: var(--radius-button, 9999px) !important;
	padding: 12px 28px !important;
	font-weight: 600 !important;
	font-size: 0.95rem !important;
	cursor: pointer !important;
	font-family: inherit !important;
}

/* GF Footer (Button-Bereich) */
body .gform_wrapper .gform_footer,
body .gform_wrapper.gravity-theme .gform_footer {
	padding: 24px 0 0 !important;
	margin: 16px 0 0 !important;
	border: none !important;
}

/* Validierungsfehler */
body .gform_wrapper .gfield_error input,
body .gform_wrapper .gfield_error textarea,
body .gform_wrapper .gfield_error select {
	border-color: #B3261E !important;
}

body .gform_wrapper .gfield_error .gfield_label {
	color: #B3261E !important;
}

body .gform_wrapper .validation_message,
body .gform_wrapper.gravity-theme .validation_message {
	color: #B3261E !important;
	font-size: 0.8rem !important;
	margin-top: 4px !important;
}


/* =========================================================
  12. PAGE TRANSITIONS & MOTION
   ---------------------------------------------------------
   Subtile Einblende-Animation beim Seitenaufruf.
   Ergänzt das bestehende data-motion / IntersectionObserver
   System (motion.js) um globale Seitentransitionen.
   ========================================================= */

/* Sanftes Einblenden beim Seitenaufruf */
@keyframes page-enter {
	from { opacity: 0; transform: translateY(8px); }
	to   { opacity: 1; transform: none; }
}

main:not(.epi-dashboard-body main) {
	animation: page-enter 400ms var(--ease-decelerate, cubic-bezier(0, 0, 0.2, 1)) both;
}

/* Profil-Übersicht: page-enter Animation entfernen, weil animation-fill-mode: both
   den transform-Wert (auch transform: none) als Containing Block beibehält.
   Das bricht position: fixed des Bottom-Sheets. */
body.wahlportal-profiles-page main:not(.epi-dashboard-body main) {
	animation: none;
}

/* Scroll-Reveal (ergänzend zu data-motion) */
[data-reveal] {
	opacity: 0;
	transform: translateY(24px);
	transition: opacity var(--motion-duration-long, 500ms) var(--ease-decelerate, cubic-bezier(0, 0, 0.2, 1)),
	            transform var(--motion-duration-long, 500ms) var(--ease-decelerate, cubic-bezier(0, 0, 0.2, 1));
}

[data-reveal].is-visible {
	opacity: 1;
	transform: none;
}

/* Staggered Delay für Karten-Grids */
[data-reveal]:nth-child(2) { transition-delay: 80ms; }
[data-reveal]:nth-child(3) { transition-delay: 160ms; }
[data-reveal]:nth-child(4) { transition-delay: 240ms; }
[data-reveal]:nth-child(5) { transition-delay: 320ms; }
[data-reveal]:nth-child(6) { transition-delay: 400ms; }


/* =========================================================
  13. STICKY HEADER – GLASS EFFECT
   ---------------------------------------------------------
   Backdrop-Blur für den Header beim Scrollen.
   Erweitert das bestehende Sticky-Header-System (Abschnitt 4).
   ========================================================= */

@media only screen and (min-width: 600px) {
	.has-motion .site-header {
		background: rgba(255, 255, 255, 0.85);
		backdrop-filter: blur(12px);
		-webkit-backdrop-filter: blur(12px);
		border-bottom: 1px solid rgba(0,0,0,0.05);
		transition: transform 400ms var(--ease-emphasized),
		            box-shadow var(--motion-duration-short, 200ms) ease;
	}

	.has-motion body.scroll-up .site-header {
		box-shadow: var(--shadow-card);
	}
}


/* =========================================================
  14. MOBILE POLISH
   ---------------------------------------------------------
   Bottom-Sheet für Profildetails auf Mobilgeräten.
   Verbesserte Abstände und Typografie auf kleinen Screens.
   ========================================================= */

@media (max-width: 767px) {
	/* ── Mobile Bottom-Sheet: Kompaktes Profilfoto-Layout ──
	   Zentriertes Porträtfoto (Thumbnail), Name darunter, Tags als Zeile.
	   Profilfotos sind Headshots – daher KEIN vollbreites Banner,
	   sondern ein kleineres, abgerundetes Bild als visueller Anker. */

	/* Bottom-Sheet mit Innenabstand */
	.wahlportal-profiles-layout.has-selection .profile-detail-pane {
		padding: 20px 0 30px;
	}

	/* ── Visitenkarten-Layout: Foto links, Name + Tags rechts ──
	   Darunter Facts + Kontakt über volle Breite mit Luft dazwischen.
	   hero-content nutzt display:contents damit seine Kinder direkte
	   Grid-Items von hero-inner werden → grid-column: 1/-1 wirkt. */

	/* Close-Button: Abstand zum gerundeten Sheet-Rand */
	.profile-detail-pane .profile-detail-pane-header {
		top: 20px;
		right: 24px;
	}

	/* Hero: 2-spaltiges Grid. hero-content wird aufgelöst (display: contents),
	   damit Name+Tags in Spalte 2 bleiben, Facts+Kontakt auf volle Breite gehen. */
	.profile-detail-pane .hero-inner {
		grid-template-columns: 110px minmax(0, 1fr);
		gap: 16px 16px;
		align-items: start;
	}

	/* hero-content auflösen: Kinder werden direkte Grid-Items */
	.profile-detail-pane .hero-content {
		display: contents;
	}

	/* Portrait-Card: mittelgroßes Thumbnail mit stärkerer Rundung */
	.profile-detail-pane .portrait-card {
		max-width: 110px;
		width: 110px;
		overflow: hidden;
		border-radius: var(--radius-l, 28px);
		grid-row: 1 / 3; /* Portrait über Name + Tags-Zeile */
	}

	/* Portrait-Media: Hochformat */
	.profile-detail-pane .portrait-media {
		width: 110px;
		height: 130px;
		aspect-ratio: auto;
		border-radius: var(--radius-l, 28px);
	}

	.profile-detail-pane .portrait-media img,
	.profile-detail-pane .portrait-media .portrait-img {
		width: 100%;
		height: 100%;
		object-fit: cover;
		object-position: center 20%;
		border-radius: var(--radius-l, 28px);
	}

	/* Name: rechte Spalte, prominent */
	.profile-detail-pane .hero-content .profile-name {
		font-size: clamp(1.25rem, 4.8vw, 1.55rem);
		line-height: 1.2;
		padding-right: 40px;
		margin-bottom: 0;
		grid-column: 2;
		align-self: end;
	}

	/* Tags: rechte Spalte */
	.profile-detail-pane .hero-tags {
		flex-direction: row;
		flex-wrap: wrap;
		gap: 6px;
		justify-content: flex-start;
		grid-column: 2;
		align-self: start;
	}

	/* ── Unter dem Foto+Name: Facts + Kontakt über volle Breite ── */

	/* Facts: volle Breite */
	.profile-detail-pane .hero-facts {
		margin-top: 8px;
		grid-column: 1 / -1;
	}

	.profile-detail-pane .hero-facts .fact-row {
		padding: 3px 0;
	}

	/* Kontakt: volle Breite, gestapelt */
	.profile-detail-pane .hero-contact-inline {
		flex-direction: column;
		gap: 8px;
		grid-column: 1 / -1;
		margin-top: 4px;
	}

	.profile-detail-pane .hero-contact-inline a {
		word-break: break-all;
	}

	/* Hero-Section: KEIN seitliches Padding – .profile-detail-body hat bereits 24px */
	.profile-detail-pane .profile-hero {
		padding: 0 0 16px;
		margin-bottom: 8px;
	}

	/* Body-Content: seitliches Padding für alles (Hero + Body-Inhalt) */
	.profile-detail-pane .profile-detail-body {
		padding-left: 24px;
		padding-right: 24px;
	}
}

/* Grid + Karten: sm-Breakpoint (639px) – Tablets (640–767px) behalten 2-Spalten-Grid (P3) */
@media (max-width: 639px) {
	/* Wrapper aus dem entry-content-Padding ausbrechen → mehr Platz für Karten.
	   entry-content hat ~25px padding + main ~10px = 35px pro Seite.
	   Wir kompensieren nur das entry-content-Padding (var kommt aus WP).
	   overflow-x: hidden auf dem Wrapper verhindert horizontalen Scrollbar. */
	/* WP-Core .is-layout-constrained setzt margin: auto !important auf alle Kinder.
	   Daher brauchen wir hier ebenfalls !important zum Überschreiben. */
	.wahlportal-profiles-wrapper {
		margin-left: -25px !important;
		margin-right: -25px !important;
		width: calc(100% + 50px);
		overflow-x: hidden;
	}

	.wahlportal-profiles-grid {
		grid-template-columns: 1fr;
		padding: 8px 12px;
	}

	.wahlportal-profile-card {
		height: clamp(130px, 20vh, 200px);
		min-height: 130px;
	}
}


/* =========================================================
  15. STARTSEITE – LANDING FINETUNING
   ---------------------------------------------------------
   Alle Verfeinerungen für die Startseite. Keine Google Fonts.
   Schriften: System-Font-Stack / Google Sans (self-hosted).
   ========================================================= */

/* --- Content-Breite der Landing-Sektionen (schmaler als Hero) --- */
.home main .wp-block-group.alignfull:not(.hero-section) > .alignwide {
	max-width: 1060px;
}

/* --- Typografie-Hierarchie (3 Ebenen) ---
   Level 1: Display →  hero h1 (clamp via Inline-Attribut)
   Level 2: Section-Labels → .section-label (CAPS, teal)
   Level 3: Body → 18px / 1.6
*/
html {
	/* 112.5 % = 18 px – skaliert alle rem-Werte und respektiert Browser-Zugänglichkeitseinstellungen */
	font-size: 112.5%;
}
body {
	font-size: 1rem;
	line-height: 1.6;
}

/* Highlight-Wort im Hero-H1 */
h1 mark {
	background: var(--wp--preset--color--primary-container, #C4E7E8);
	color: inherit;
	border-radius: 6px;
	padding: 2px 8px;
	-webkit-box-decoration-break: clone;
	box-decoration-break: clone;
}

/* Section-Label (Überlabel in ALL CAPS) */
.section-label,
[style*="text-transform:uppercase"][style*="letter-spacing:0.1em"] p,
[style*="text-transform: uppercase"][style*="letter-spacing: 0.1em"] p {
	font-size: 0.85rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}

/* Versalien-Labels eng an die folgende Überschrift setzen. */

/* Schritt-Karten (surface-low Section):
   Label → Heading eng (negativer margin-top auf Heading),
   Heading → Fließtext behält den normalen Gap) */
.has-surface-low-background-color .wp-block-group.is-layout-flex.is-vertical.has-base-background-color > .wp-block-heading {
	margin-top: calc((-1 * var(--wp--preset--spacing--30, 1.5rem)) + 6px) !important;
	margin-bottom: 0 !important;
}
/* Paragraph-Margins im Flex-Container zurücksetzen (WP setzt sonst 30px top) */
.has-surface-low-background-color .wp-block-group.is-layout-flex.is-vertical.has-base-background-color > p {
	margin-top: 0 !important;
	margin-bottom: 0 !important;
}

/* Schritt-Karten: gleiche Höhe – Karte füllt Spalte komplett aus */
.has-surface-low-background-color .wp-block-column {
	display: flex;
	flex-direction: column;
}
.has-surface-low-background-color .wp-block-column > .wp-block-group.has-base-background-color {
	flex: 1;
	height: 100%;
	box-sizing: border-box;
}

/* Kandidatur (surface Section): Label-H2-Abstand reduzieren */
.has-surface-background-color .wp-block-column > p.has-primary-color {
	margin-bottom: 4px !important;
}
.has-surface-background-color .wp-block-column > p.has-primary-color + .wp-block-heading {
	margin-top: 0 !important;
}

/* Spalten-Layout (Kandidatur): Label klein, Heading folgt natürlich */
.wp-block-column > p[style*="text-transform"],
.wp-block-group:not(.is-layout-flex) > p[style*="text-transform"] {
	margin-bottom: 4px !important;
}
.wp-block-column:has(> p[style*="text-transform"]) > .wp-block-heading {
	margin-top: 0 !important;
}

/* --- Hero: geometrisches Hintergrundmuster --- */
.hero-section {
	position: relative;
}

.hero-section::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image:
		radial-gradient(circle at 15% 85%, color-mix(in srgb, var(--c-tint) 6%, transparent) 0%, transparent 50%),
		radial-gradient(circle at 85% 15%, color-mix(in srgb, var(--c-tint) 4%, transparent) 0%, transparent 45%),
		radial-gradient(circle at 50% 50%, color-mix(in srgb, var(--c-tint) 8%, transparent) 0%, transparent 60%);
	pointer-events: none;
	z-index: 0;
}

.hero-section > * {
	position: relative;
	z-index: 1;
}

/* --- Hero: "Bloom + Dot Grid" ---
   ::before: weiche primärfarbene Bloom-Wolke hinter dem Bild – keine harte Form.
   ::after:  Dot-Grid-Ecke unten-rechts, CSS-only via radial-gradient mit mask.
   Kein Rotation-Gimmick. Funktioniert mit jedem Kundenbild und CI-Farbe. */
.hero-photo {
	position: relative;
	margin: 0;
	padding: 0;
}

/* Weiche Bloom-Wolke – strahlt hinter dem Bild hervor.
   Rechts bündig (0) damit nichts am Seitenrand abgeschnitten wird. */
.hero-photo::before {
	content: "";
	position: absolute;
	inset: -20% 0 -10% -15%;
	background: radial-gradient(
		ellipse 75% 65% at 58% 42%,
		color-mix(in srgb, var(--c-tint) 18%, transparent) 0%,
		transparent 68%
	);
	z-index: 0;
	pointer-events: none;
}

/* Dot-Grid unten-rechts: Raster kleiner Primärpunkte, aus Ecke ausblendet */
.hero-photo::after {
	content: "";
	position: absolute;
	width: 108px;
	height: 108px;
	bottom: -4px;
	right: 0;
	background-image: radial-gradient(
		circle,
		color-mix(in srgb, var(--c-tint) 55%, transparent) 1.5px,
		transparent 1.5px
	);
	background-size: 13px 13px;
	mask-image: radial-gradient(ellipse 90% 90% at 100% 100%, black 30%, transparent 80%);
	-webkit-mask-image: radial-gradient(ellipse 90% 90% at 100% 100%, black 30%, transparent 80%);
	z-index: 2;
	pointer-events: none;
}

.hero-photo img {
	position: relative;
	z-index: 1;
	border-radius: var(--radius-l, 20px);
	outline: 1.5px solid rgba(255, 255, 255, 0.55);
	outline-offset: -1.5px;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	width: 100%;
	height: auto;
	display: block;
	box-shadow: var(--shadow-lg);
}

/* --- Section-Foto (Info-Card) ---
   Gleichmäßige Rundung (24px) + sauberer Schatten. Hover: Zoom + Aufhellung. */
.section-photo {
	position: relative;
	margin: 0;
	border-radius: var(--radius-l, 24px);
	overflow: hidden;
	box-shadow: var(--shadow-lg);
}

.section-photo img {
	aspect-ratio: 5 / 4;
	object-fit: cover;
	object-position: center top; /* Gesichter bevorzugen */
	width: 100%;
	height: auto;
	display: block;
	transition:
		transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94),
		filter     0.6s ease;
}

.section-photo:hover img {
	transform: scale(1.04);
	filter: brightness(1.04) saturate(1.07);
}

/* --- CTA-Buttons: Radius aus Design-Preset, Padding, Shadow --- */
.hero-section .wp-block-button .wp-element-button {
	border-radius: var(--radius-button, 9999px);
	padding: 14px 32px;
	font-weight: 600;
}

.hero-section .wp-block-button.is-style-outline .wp-element-button {
	padding: 13px 28px;
	border: 1.5px solid var(--wp--preset--color--primary);
}

.wp-block-button:not(.is-style-outline) .wp-element-button {
	box-shadow: var(--shadow-sm);
}

.wp-block-button.is-style-outline .wp-element-button {
	background: transparent !important;
	color: var(--wp--preset--color--primary) !important;
	font-weight: 500;
}

/* --- Kontakt-Links: Pill-Buttons mit Gap --- */
.kontakt-links {
	margin-top: 12px !important;
	gap: 8px;
}

.kontakt-links .wp-block-button .wp-element-button {
	border-radius: var(--radius-button, 9999px);
	padding: 8px 20px;
	font-size: 0.88rem;
}

/* --- Kontaktkarte (Standard-Blöcke mit CSS-Klasse) --- */
.kontakt-card {
	border: 1px solid color-mix(in srgb, var(--c-tint) 12%, transparent);
	box-shadow: var(--shadow-card);
}

/* Kontakt-Foto: Kreisrund, feste Größe */
.kontakt-photo {
	width: 88px !important;
	flex-shrink: 0;
}

.kontakt-photo img {
	width: 88px !important;
	height: 88px !important;
	object-fit: cover;
	border-radius: 50% !important;
	border: 3px solid var(--wp--preset--color--primary-container, #C4E7E8);
}

/* Kontakt-Links: Pill-Buttons kleiner gestalten */
/* FIX-01: Kontakt-Buttons vereinheitlicht mit Header-Navigation */
.kontakt-links .wp-block-button.is-style-outline .wp-element-button {
	border-color: var(--c-outline-faint, var(--wp--preset--color--outline, #79747E)) !important;
	border-width: 1.5px !important;
	background: transparent !important;
	color: var(--c-text) !important;
	font-weight: 600;
}

.kontakt-links .wp-block-button.is-style-outline .wp-element-button:hover {
	background: var(--c-hover, var(--wp--preset--color--primary-container, #C4E7E8)) !important;
	border-color: var(--c-primary, var(--wp--preset--color--primary, #008B8F)) !important;
	color: var(--c-primary, var(--wp--preset--color--primary, #008B8F)) !important;
}

@media (max-width: 600px) {
	.kontakt-card {
		flex-direction: column !important;
		align-items: center !important;
		text-align: center;
	}
	.kontakt-links .wp-block-buttons {
		justify-content: center;
	}
}

/* --- 3-Schritte-Cards: Hover-Lift + Deko-Nummer --- */
.wp-block-column .wp-block-group[style*="border-radius:16px"] {
	position: relative;
	overflow: hidden;
	transition: transform 250ms ease-out, box-shadow 250ms ease-out;
}

.wp-block-column .wp-block-group[style*="border-radius:16px"]:hover {
	transform: translateY(-3px);
	box-shadow: var(--shadow-lg);
}

/* Deko-Nummer als großes Background-Element */
.wp-block-column .wp-block-group[style*="border-radius:20px"] [class*="stat-value"],
.wp-block-column .wp-block-group[style*="border-radius:20px"] p[style*="font-size:clamp(2rem"] {
	position: relative;
	z-index: 1;
}

/* --- Allgemein: Transitions, Focus, Spacing --- */
*,
*::before,
*::after {
	transition-timing-function: ease-out;
}

:focus-visible {
	outline: 2px solid var(--wp--preset--color--primary, #008B8F);
	outline-offset: 3px;
	border-radius: 3px;
}

/* Section-Spacing: einheitliche vertikale Abstände */
.wp-block-group.alignfull + .wp-block-group.alignfull {
	margin-top: 0;
}

/* =========================================================
  16. FOOTER (hell, surface-low)
   ---------------------------------------------------------
   Farbe via Preset im Pattern gesetzt (surface-low).
   CSS hier nur Links-Feintuning.
   ========================================================= */

.site-footer a,
.site-footer .wp-block-navigation a {
	color: var(--wp--preset--color--on-surface-variant, #3F5252);
	text-decoration: none;
	transition: color 200ms ease-out;
}

.site-footer a:hover,
.site-footer .wp-block-navigation a:hover {
	color: var(--wp--preset--color--primary, #008B8F);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.site-footer p {
	color: var(--wp--preset--color--on-surface-variant, #3F5252);
	opacity: 0.7;
}

/* =========================================================
  17. LANDING PAGE – SCROLL-ANIMATIONEN
   ---------------------------------------------------------
   Kein Eingriff in Hero (page-enter deckt das ab).
   Nur scrollbare Sektionen: einheitliches fade-up.
   Hover-Lift für Schritt-Karten.
   ========================================================= */

/* Initiale Versteckung */
.lm-ready {
	opacity: 0;
	transform: translateY(18px);
	transition:
		opacity   540ms var(--ease-decelerate, cubic-bezier(0, 0, 0.2, 1)),
		transform 540ms var(--ease-decelerate, cubic-bezier(0, 0, 0.2, 1));
}

.lm-ready.lm-show {
	opacity: 1;
	transform: none;
}

/* Hover-Lift: Schritt-Karten */
.has-surface-low-background-color .wp-block-column .has-base-background-color {
	transition:
		transform  260ms var(--ease-decelerate, cubic-bezier(0, 0, 0.2, 1)),
		box-shadow 260ms ease;
	will-change: transform;
}

.has-surface-low-background-color .wp-block-column:hover .has-base-background-color {
	transform: translateY(-4px);
	box-shadow: var(--shadow-lg);
}

/* Reduced Motion */
@media (prefers-reduced-motion: reduce) {
	.lm-ready {
		opacity: 1 !important;
		transform: none !important;
		transition: none !important;
	}

	.has-surface-low-background-color .wp-block-column .has-base-background-color,
	.has-surface-low-background-color .wp-block-column:hover .has-base-background-color {
		transition: none !important;
		transform: none !important;
		box-shadow: none !important;
	}
}
