/**
 * STRYKE Base — Grundformatierung für Elementors eigene Bausteine
 *
 * WOFÜR: Zwei Dinge kommen auf praktisch jeder Kundenseite vor, werden aber
 * nicht vom Kunden gebaut, sondern von Elementor ausgegeben — das Formular und
 * die Lightbox. Beide bringen einen Standardlook mit, der neben allem anderen
 * im Theme fremd wirkt: dünn umrandete Kästchen und ein Bildbetrachter mit
 * viel Chrom.
 *
 * WARUM HIER UND NICHT IM BLUEPRINT: Eine Vorlage erreicht nur die Kunden, die
 * genau sie einspielen. Formular und Lightbox erscheinen dagegen überall — auch
 * auf der Seite, die jemand ohne Vorlage von Hand baut, und im freien Download.
 * Im Kit gestaltet, müsste dieselbe Arbeit in jeder weiteren Vorlage noch einmal
 * gemacht werden und liefe beim ersten Nachbessern auseinander.
 *
 * ══ DREI REGELN ════════════════════════════════════════════════════════════
 *
 * 1. NUR GRUNDFORMATIERUNG, keine Gestaltung. Gesetzt werden Fläche, Rahmen,
 *    Radius und Zustände — also das, was aussieht wie „vom Theme". Größe,
 *    Abstand und Anordnung bleiben unberührt: Das ist Panel-Arbeit und gehört
 *    dem Kunden (Elementor-First). Panel-Einstellungen gewinnen deshalb gegen
 *    alles hier — mit GENAU EINER Ausnahme, der Feldfläche. Die Begründung
 *    steht direkt an der Regel und ist nachgemessen, nicht bequem.
 *
 * 2. AUSSCHLIESSLICH GEGEN CSS-VARIABLEN. Der Kunde ändert seine Farben im
 *    Cockpit; ein fester Wert bräche aus dem Schema aus. Auch der Dunkelmodus
 *    fällt damit von selbst richtig aus, weil `--stryke-bg-alt`,
 *    `--stryke-text` und `--stryke-border` sich mit ihm drehen.
 *
 * 3. DIESE DATEI WIRD NUR GELADEN, WENN ELEMENTOR AKTIV IST. Sonst lädt die
 *    halbe Zielgruppe ein Stylesheet für Bausteine, die es bei ihr nicht gibt.
 */

/* ══ Formularfelder ════════════════════════════════════════════════════════

   Flächen statt Rahmen. Ein umrandetes Kästchen auf weißem Grund ist die
   Voreinstellung aus einer Zeit, in der Formulare wie Papierformulare aussehen
   sollten; eine leicht abgesetzte Fläche sagt dasselbe ruhiger und trennt die
   Felder besser voneinander als eine dünne Linie.

   Der Rahmen verschwindet nicht ganz — ohne ihn verlieren Felder auf einer
   farbigen Sektion ihre Kante. Er wird nur leiser.
   ------------------------------------------------------------------------ */

/* Das `!important` auf der Fläche ist nachgemessen und nicht bequem.
   Elementor Pro schreibt `#ffffff` als CONTROL-STANDARD seines Formular-
   Widgets in das seitenbezogene Stylesheet, mit einem Selektor der Bauart
   `.elementor-13 .elementor-element.elementor-element-31d3d9e
   .elementor-field-group .elementor-field:not(.elementor-select-wrapper)` —
   fünf Klassen, an eine Element-ID gebunden. Dagegen kommt keine
   Theme-Regel an, die man vernünftig schreiben kann, und weiße Felder auf
   weißem Grund sind schlicht unsichtbar.

   PREIS, den das kostet, und der hier ausdrücklich benannt sei: Wer im
   Elementor-Panel bewusst eine eigene Feldfarbe wählt, wird davon
   überschrieben. Deshalb hört das `!important` bei der Fläche auf — Rahmen,
   Radius und Innenabstand bleiben normal überschreibbar. Wer eine andere
   Feldfarbe braucht, setzt sie am Kit oder über eigenes CSS.

   Alternative wäre gewesen, gar nichts zu tun; dann sähe jedes Formular
   aus wie Elementors Vorgabe und nicht wie der Rest der Website. */
.elementor-field-group .elementor-field-textual {
	border: 1px solid transparent;
	border-radius: var(--stryke-radius);
	/* Nicht `--stryke-bg-alt`: Diese Rolle steht im Hellmodus auf `#fbfbfb` und
	   unterscheidet sich damit um 1,6 % von `#ffffff` — auf einer weißen Seite
	   ist das Feld schlicht nicht zu sehen. Ein Anteil der TEXTfarbe erzeugt
	   dagegen in beiden Modi denselben spürbaren Absatz: hell wird grau,
	   dunkel wird angehoben. */
	background-color: rgb(var(--stryke-text-rgb) / 5%) !important;
	color: var(--stryke-text);
	font-family: var(--stryke-font-body);
	/* Elementors eigener Innenabstand ist auf die Rahmenoptik gerechnet und
	   sitzt in einer Fläche zu eng. */
	padding: 0.75rem 0.9rem;
	box-shadow: none;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
}

/* Die Textarea braucht dieselbe Behandlung und etwas mehr Luft nach unten. */
.elementor-field-group textarea.elementor-field-textual {
	min-height: 8rem;
	resize: vertical;
}

/* Auswahlfelder: Elementor gibt ein natives <select> aus. Der Pfeil bleibt der
   des Systems — ein nachgebauter würde in jedem Browser anders sitzen. */
.elementor-field-group select.elementor-field-textual {
	-webkit-appearance: none;
	appearance: none;
	/* Platz für den Pfeil, den wir gleich als Hintergrundbild setzen. */
	padding-right: 2.5rem;
	/* Inline-SVG als data:-URI — kein zusätzlicher Netzwerkaufruf, und der
	   Pfeil trägt `currentColor`, folgt also der Textfarbe des Modus. */
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 8l5 5 5-5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 0.9rem center;
	background-size: 1.1rem;
}

/* Die aufgeklappte Liste. NACHGEMESSEN am 2026-08-09, weil `color-scheme`
   allein sie NICHT rettet:

   Das Feld trägt oben `background-color: rgb(var(--stryke-text-rgb) / 5%)` —
   eine Autoren-Angabe. Sobald eine da ist, malt Chrome die Liste nicht mehr
   nach `color-scheme`, sondern auf seiner eigenen weißen Fläche. Die Optionen
   erben dabei die Textfarbe des Feldes (im Dunkelmodus fast weiß) und haben
   selbst `background-color: rgba(0,0,0,0)`. Ergebnis: weiße Schrift auf Weiß,
   lesbar war nur die gerade markierte Zeile.

   Deshalb braucht `option` eine DECKENDE Farbe — `--stryke-bg-alt` und nicht
   die 5-%-Fläche des Feldes, denn eine durchsichtige Fläche ist genau das
   Problem. Beide Werte drehen sich mit dem Modus.

   `color-scheme` bleibt trotzdem stehen: Es erledigt Datumswähler,
   Kalendersymbol und Scrollbalken, an die kein Selektor herankommt. */
.elementor-field-group select.elementor-field-textual option {
	background-color: var(--stryke-bg-alt);
	color: var(--stryke-text);
}

/* SPEZIFITAET, nachgemessen: `flatpickr.min.css` wird von Elementor Pro erst
   im Seitenfuss eingebunden (Zeile 384), diese Datei steht im Kopf (Zeile 68).
   Bei gleicher Spezifitaet gewinnt die spaetere Datei — die Regeln hier waren
   deshalb wirkungslos, obwohl sie richtig standen. Ein vorangestelltes `body`
   hebt jede Regel um eine Stufe und schlaegt flatpickr ohne `!important`.

   Der Datumskalender. Elementor Pro bringt flatpickr mit, und flatpickr malt
   sich seine eigene weiße Fläche — im Dunkelmodus stand darauf die geerbte
   fast weiße Textfarbe des Themes. Gemessen am 2026-08-09:
   `background: rgb(255,255,255)`, `color: rgb(247,250,252)`. Weiß auf Weiß,
   und zwar der ganze Kalender, nicht nur eine Zeile.

   Das Theme stylt flatpickr bis dahin überhaupt nicht — es gab keine einzige
   `flatpickr`-Regel. Hier stehen deshalb nur Flächen und Schriftfarben, keine
   Maße: Wie der Kalender aufgebaut ist, bleibt flatpickrs Sache. */
body .flatpickr-calendar{
	background: var(--stryke-bg-alt);
	color: var(--stryke-text);
	border: 1px solid var(--stryke-border);
	box-shadow: 0 12px 32px rgb(var(--stryke-text-rgb) / 18%);
}

/* Das Zipfelchen über dem Kalender wird aus BORDER gebaut, nicht aus einer
   Fläche — ohne diese Zeilen bleibt es weiß und hängt als heller Zahn über
   einem dunklen Kalender. */
body .flatpickr-calendar.arrowTop::before,
body .flatpickr-calendar.arrowTop::after{
	border-bottom-color: var(--stryke-bg-alt);
}

body .flatpickr-calendar.arrowBottom::before,
body .flatpickr-calendar.arrowBottom::after{
	border-top-color: var(--stryke-bg-alt);
}

body .flatpickr-months,
body .flatpickr-month,
body .flatpickr-current-month,
body .flatpickr-weekdays,
body .flatpickr-weekdaycontainer{
	background: transparent;
	color: var(--stryke-text);
	fill: var(--stryke-text);
}

body .flatpickr-weekday{
	color: var(--stryke-text-muted);
	fill: var(--stryke-text-muted);
}

/* Die Monats- und Jahresauswahl im Kalenderkopf ist ein eigenes <select> und
   braucht dieselbe deckende Fläche wie die Felder im Formular. */
body .flatpickr-current-month .flatpickr-monthDropdown-months,
body .flatpickr-current-month input.cur-year{
	background: var(--stryke-bg-alt);
	color: var(--stryke-text);
}

/* Die Monatsliste eigens, mit der Klasse der Option und als LANGFORM.
   flatpickr setzt `.flatpickr-monthDropdown-month{background-color:transparent}`
   — und `transparent` an einer Option heisst: Chrome malt die aufgeklappte
   Liste auf seiner weissen Systemflaeche. Im Dunkelmodus stand darauf die
   geerbte helle Schrift.

   Die Fläche muss deshalb DECKEND sein, und die Regel braucht die Klasse der
   Option selbst — der Weg über den Elternselektor allein hat sie nicht
   erreicht (nachgemessen: das <select> war bereits dunkel, die <option> nicht). */
body .flatpickr-calendar .flatpickr-current-month .flatpickr-monthDropdown-months option.flatpickr-monthDropdown-month {
	background-color: var(--stryke-bg-alt);
	color: var(--stryke-text);
}

body .flatpickr-months .flatpickr-prev-month svg,
body .flatpickr-months .flatpickr-next-month svg{
	fill: var(--stryke-text);
}

body .flatpickr-day{
	color: var(--stryke-text);
}

body .flatpickr-day:hover,
body .flatpickr-day:focus{
	background: rgb(var(--stryke-text-rgb) / 10%);
	border-color: transparent;
}

/* Ausgewählter Tag in der Markenfarbe statt im Browserblau — `primary-fill`
   ist gegen die Seite gerechnet, `on-primary` gegen die Fläche. */
body .flatpickr-day.selected,
body .flatpickr-day.selected:hover,
body .flatpickr-day.startRange,
body .flatpickr-day.endRange{
	background: var(--stryke-primary-fill);
	border-color: var(--stryke-primary-fill);
	color: var(--stryke-on-primary);
}

body .flatpickr-day.today{
	border-color: var(--stryke-border);
}

body .flatpickr-day.flatpickr-disabled,
body .flatpickr-day.prevMonthDay,
body .flatpickr-day.nextMonthDay{
	color: var(--stryke-text-muted);
	opacity: 0.55;
}

.elementor-field-group .elementor-field-textual:hover {
	background-color: var(--stryke-bg);
	border-color: var(--stryke-border);
}

/* Der Fokusring ist die eigentliche Zugänglichkeitsarbeit an dieser Datei.
   Elementors Vorgabe ist ein kaum sichtbarer Rahmenwechsel; wer mit der
   Tastatur durch ein Formular geht, sieht dann nicht, wo er steht. */
.elementor-field-group .elementor-field-textual:focus,
.elementor-field-group .elementor-field-textual:focus-visible {
	outline: none;
	background-color: var(--stryke-bg);
	border-color: var(--stryke-primary);
	box-shadow: 0 0 0 3px rgb(var(--stryke-primary-rgb) / 22%);
}

.elementor-field-group .elementor-field-textual::placeholder {
	color: var(--stryke-text-muted);
	opacity: 1; /* Firefox dimmt Platzhalter zusätzlich ab. */
}

/* Beschriftungen treten zurück — sie benennen das Feld, sie sind nicht der
   Inhalt. */
.elementor-field-group > .elementor-field-label {
	margin-bottom: 0.375rem;
	color: var(--stryke-text-muted);
	font-family: var(--stryke-font-body);
	font-size: 0.875em;
	font-weight: 500;
}

/* Pflichtfeld-Sternchen in der Akzentfarbe statt in Rot: Es ist ein Hinweis,
   keine Fehlermeldung. */
.elementor-field-group .elementor-mark-required .elementor-field-label::after {
	color: var(--stryke-accent-ink);
}

/* Kästchen und Auswahlknöpfe erben die Feldsprache, damit die Einwilligungs-
   zeile unter dem Formular nicht wie ein Fremdkörper wirkt. */
.elementor-field-subgroup .elementor-field-option input[type="checkbox"],
.elementor-field-subgroup .elementor-field-option input[type="radio"],
.elementor-field-type-acceptance input[type="checkbox"] {
	accent-color: var(--stryke-primary);
	width: 1.05em;
	height: 1.05em;
	margin-right: 0.4em;
	vertical-align: -0.15em;
}

/* Die Absendeschaltfläche folgt der Markenfläche samt berechneter Textfarbe.
   `--stryke-on-primary` ist nach Leuchtdichte gewählt, nicht nach Gefühl —
   dieselbe Rechnung wie im übrigen Theme. */
.elementor-button[type="submit"],
.elementor-form .elementor-button {
	border-radius: var(--stryke-radius);
	font-family: var(--stryke-font-body);
	transition: filter 0.15s ease, box-shadow 0.15s ease;
}

.elementor-form .elementor-button:focus-visible {
	outline: 3px solid rgb(var(--stryke-primary-rgb) / 45%);
	outline-offset: 2px;
}

/* Meldungen nach dem Absenden. */
.elementor-message {
	border-radius: var(--stryke-radius);
	font-family: var(--stryke-font-body);
}

/* ══ Lightbox ══════════════════════════════════════════════════════════════

   Wer ein Bild groß ansieht, will das Bild sehen — sonst nichts. Elementors
   Vorgabe legt eine helle Werkzeugzeile darüber, rahmt das Bild und rundet
   die Ecken; alles drei zieht Aufmerksamkeit auf die Bedienung statt auf den
   Inhalt.

   Hier bleibt: eine fast schwarze Fläche, das Bild, und Bedienelemente als
   nackte Symbole. Keine Flächen, keine Schatten, keine Rundungen.

   Nichts wird versteckt. Alle Bedienelemente bleiben vorhanden, erreichbar
   und tastaturbedienbar — sie treten nur zurück, bis man sie ansteuert.
   ------------------------------------------------------------------------ */

/* Die Fläche gehört auf `.elementor-lightbox` selbst — dort zeichnet
   Elementor sie (Vorgabe `rgba(0,0,0,.8)`). Eine Regel auf
   `.dialog-widget-content` läuft ins Leere: Elementor hält dieses Element
   ausdrücklich durchsichtig und gewinnt bei gleicher Spezifität über die
   Ladereihenfolge. Am laufenden Elementor 4.2.1 nachgemessen.

   `body` davor hebt die Spezifität über Elementors Regel, damit die
   Reihenfolge der Stylesheets keine Rolle mehr spielt.

   Deckend statt Elementors 80 %: Bei 80 % scheint ein fest stehender
   Kopfbereich (`position:fixed`) durch die Fläche und steht als Geisterbild
   über dem Foto. Auch 98 % reichen dafür nicht — nachgemessen. */
/* ══ ZWEI DINGE, DIE HIER JEDE REGEL BETREFFEN ═════════════════════════════

   1. `body` VOR JEDEM SELEKTOR. Elementor liefert die Lightbox-Gestaltung in
      `assets/css/conditionals/lightbox.css` — einem Stylesheet, das ERST BEIM
      ÖFFNEN nachgeladen wird. Seine Regeln haben dieselbe Spezifität wie die
      hier (`.elementor-lightbox .elementor-lightbox-image`), teils sogar eine
      geringere, und gewinnen trotzdem: bei Gleichstand entscheidet die
      Ladereihenfolge, und die ist immer zu ihren Gunsten. Ein vorangestelltes
      `body` hebt jede Regel um ein Element und macht die Reihenfolge
      bedeutungslos.

      Das ist nachgemessen und nicht vorsichtshalber: Ohne `body` blieb das
      Foto bei Elementors `border-radius: 2px` und seinem doppelten Schatten,
      obwohl beide hier auf 0 standen.

   2. ELEMENTORS EIGENE VARIABLEN ZUERST. Version 4 steuert die Bedienelemente
      über `--lightbox-ui-color`, `--lightbox-ui-color-hover` und
      `--lightbox-text-color`. Sie zu setzen ist der vorgesehene Weg und
      wirkt auf Symbole, Zähler, Pfeile und Schließen-Kreuz gleichzeitig —
      sauberer, als jedes Element einzeln zu überschreiben.
   ------------------------------------------------------------------------ */

body .elementor-lightbox {
	/* Die Lightbox dreht sich mit dem Modus: dunkle Fläche mit hellen Symbolen
	   im Dunkelmodus, helle Fläche mit dunklen Symbolen im Hellmodus.
	   Deckend, nicht durchscheinend — bei Teildeckung steht der fixierte
	   Kopfbereich als Geisterbild über dem Foto (nachgemessen, auch 98 %
	   reichen dafür nicht).

	   Bis 2026-08-07 stand hier fest `--stryke-dark` mit weißen Symbolen, mit
	   der Begründung, im Hellmodus wäre `--stryke-text` dunkel und die
	   Bedienelemente unsichtbar. Das war ein Denkfehler: Wenn die FLÄCHE
	   mitdreht, dreht die Textfarbe darauf genau richtig mit. Der Kontrast
	   bleibt in beiden Modi derselbe. */
	background-color: var(--stryke-bg);

	--lightbox-ui-color: rgb(var(--stryke-text-rgb) / 75%);
	--lightbox-ui-color-hover: var(--stryke-text);
	--lightbox-text-color: var(--stryke-text);

	/* Etwas kleiner als Elementors 20 px — die Zeile sitzt jetzt unter dem
	   Bild und soll dort nicht mit ihm konkurrieren. */
	--lightbox-header-icons-size: 16px;
}

body .elementor-lightbox .elementor-lightbox-image {
	/* Kein Rahmen, kein Schatten, keine Rundung — die Kante des Fotos ist
	   die Kante. */
	border-radius: 0;
	box-shadow: none;
}

/* Werkzeugzeile: unter das Bild, mittig, kein Hintergrund, keine Trennlinie.

   Elementor setzt sie mit `top: 0` und `flex-direction: row-reverse` nach oben
   rechts, dazu `padding-inline-end: 2.6em`, damit sie dem Schließen-Kreuz
   ausweicht. Unten in der Mitte braucht sie das alles nicht: `top` wird
   ausdrücklich auf `auto` zurückgesetzt (sonst gilt es weiter und die Zeile
   steht an beiden Kanten), die Laufrichtung wird wieder normal, und die
   Innenabstände werden symmetrisch.

   Das Schließen-Kreuz bleibt oben rechts. Es ist ein eigenes Element neben der
   Zeile, kein Teil von ihr — und es gehört in die Ecke: Wer schließen will,
   greift dorthin, und in einer Reihe mit den Zoom-Symbolen träfe man es
   versehentlich. */
body .elementor-lightbox .elementor-slideshow__header {
	top: auto;
	bottom: 0;
	flex-direction: row;
	justify-content: center;
	padding: 0.75rem 1.5rem 1.25rem;
	padding-inline-start: 1.5rem;
	padding-inline-end: 1.5rem;
	background: none;
	opacity: 0.55;
	transition: opacity 0.2s ease;
}

/* Der Zähler schiebt bei Elementor alles andere zur Seite (`margin-inline-end:
   auto`). Mittig ausgerichtet muss das weg, sonst steht die Zeile wieder
   außermittig. */
body .elementor-lightbox .elementor-slideshow__header .elementor-slideshow__counter {
	margin-inline-end: 0;
	margin-inline-start: 0;
}

/* Bildunterschrift über die Werkzeugzeile heben — beide sitzen sonst auf der
   unteren Kante und überlagern sich. */
body .elementor-lightbox .elementor-slideshow__footer {
	bottom: 4.5rem;
}

/* Und dem Bild unten Platz machen. Elementor gibt dem Rahmen ringsum 70 px;
   unten stehen jetzt Unterschrift UND Werkzeugzeile, sonst schiebt sich das
   Foto darüber — im Test lag die Unterschrift halb hinter dem Bild. */
body .elementor-lightbox .elementor-lightbox-item {
	padding-bottom: 9rem;
}

@media (max-width: 767px) {
	body .elementor-lightbox .elementor-lightbox-item {
		padding-bottom: 8rem;
	}
}

body .elementor-lightbox .elementor-slideshow__header:hover,
body .elementor-lightbox .elementor-slideshow__header:focus-within {
	opacity: 1;
}

/* Der Zähler ist die einzige Schrift in der Zeile — klein, gesperrt, ruhig. */
body .elementor-lightbox .elementor-slideshow__counter {
	font-family: var(--stryke-font-mono);
	font-size: 0.75rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	opacity: 0.7;
}

/* Symbole ohne Fläche. Die Trefferfläche kommt aus dem Innenabstand, nicht
   aus einem sichtbaren Knopf — 2,75 rem bleiben erhalten. */
body .elementor-lightbox .elementor-slideshow__header > i,
body .elementor-lightbox .elementor-slideshow__header > svg,
body .elementor-lightbox .elementor-swiper-button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 2.75rem;
	height: 2.75rem;
	border-radius: 0;
	background: none;
	color: var(--stryke-text);
	opacity: 0.75;
	transition: opacity 0.15s ease;
}

/* Die Symbole in der Zeile etwas kleiner als die Pfeile — die Trefferfläche
   bleibt mit 2,25 rem über den 44 px, die für einen Fingertipp nötig sind. */
body .elementor-lightbox .elementor-slideshow__header > i,
body .elementor-lightbox .elementor-slideshow__header > svg {
	width: 2.25rem;
	height: 2.25rem;
	margin: 0 0.15em;
}

body .elementor-lightbox .elementor-slideshow__header > i:hover,
body .elementor-lightbox .elementor-slideshow__header > svg:hover,
body .elementor-lightbox .elementor-swiper-button:hover {
	background: none;
	opacity: 1;
}

/* Der Fokusrahmen ist die einzige Kante, die hier vorkommen darf — ohne ihn
   wäre die Lightbox mit der Tastatur nicht bedienbar. */
body .elementor-lightbox .elementor-slideshow__header > i:focus-visible,
body .elementor-lightbox .elementor-slideshow__header > svg:focus-visible,
body .elementor-lightbox .elementor-swiper-button:focus-visible {
	outline: 2px solid var(--stryke-text);
	outline-offset: 2px;
	opacity: 1;
}

/* Die Pfeile sitzen bei Elementor sehr weit außen und wandern auf schmalen
   Schirmen aus dem Bild. */
body .elementor-lightbox .elementor-swiper-button-prev {
	left: 1rem;
}

body .elementor-lightbox .elementor-swiper-button-next {
	right: 1rem;
}

/* Titel und Bildunterschrift: die Schrift des Themes, klare Rangfolge,
   zurückhaltend. */
body .elementor-lightbox .elementor-slideshow__title {
	font-family: var(--stryke-font-heading);
	font-weight: 600;
	font-size: 0.8125rem;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}

body .elementor-lightbox .elementor-slideshow__description {
	font-family: var(--stryke-font-body);
	opacity: 0.7;
}

/* Vorschauleiste: die aktive Kachel wird durch volle Deckkraft kenntlich,
   nicht durch einen Rahmen. Nur der Umriss bleibt, damit sie auch dann
   auffindbar ist, wenn zwei Bilder sich ähneln. */
body .elementor-lightbox .elementor-swiper-thumbs img {
	border-radius: 0;
	opacity: 0.4;
	transition: opacity 0.15s ease;
}

body .elementor-lightbox .swiper-slide-thumb-active img,
body .elementor-lightbox .elementor-swiper-thumbs .swiper-slide-active img {
	outline: 1px solid var(--stryke-text);
	outline-offset: -1px;
	border-radius: 0;
	opacity: 1;
}

/* ══ Preisliste: ein langer Name darf die Seite nicht seitwärts schieben ═══

   Das ist ausdrücklich KEINE Gestaltung und damit kein Verstoß gegen Regel 1,
   sondern das Abstellen eines Fehlers: Flex-Kinder haben `min-width: auto` und
   schrumpfen deshalb nicht unter ihre Inhaltsbreite. Elementors Preislisten-
   Kopfzeile (Name · Punktlinie · Preis) wächst dadurch über ihren Behälter
   hinaus, sobald ein Gericht einen längeren Namen hat.

   Am Handy gemessen: „Ziegenkäse aus dem Ofen" bei 15 px und 2,2 px Sperrung
   ergab eine Kopfzeile von 457 px in einem 346 px breiten Listenpunkt — die
   ganze Seite lief auf 479 statt 390 px und ließ sich seitwärts schieben. Mit
   `min-width: 0` bricht der Name um, und alles bleibt, wo es hingehört.

   Betrifft jede Kundenseite mit einer Preisliste, nicht nur die Gastronomie:
   Leistungen einer Werkstatt und Behandlungen eines Friseurs stehen in
   demselben Widget.
   ------------------------------------------------------------------------ */

.elementor-price-list-item,
.elementor-price-list-text,
.elementor-price-list-header,
.elementor-price-list-title {
	min-width: 0;
}

/* Ein einzelnes überlanges Wort — ein Weinname etwa — hat keinen Umbruchpunkt
   und liefe auch mit `min-width: 0` heraus. */
.elementor-price-list-title {
	overflow-wrap: break-word;

	/* DIE GRÖSSE AUS DEM PANEL KOMMT SONST NIE AN, und das ist kein Detail:
	   Der Gerichtname ist ein `<h3>`, und Hello Elementors `reset.css` gibt
	   jedem `h3` 1,75 rem — 28 px. Elementors Typografie-Control der Preisliste
	   setzt seine Größe aber auf der KOPFZEILE
	   (`.elementor-price-list-header`) und verlässt sich darauf, dass der Titel
	   sie erbt. Ein Element mit eigener Größe erbt nichts.

	   Folge: Wer im Panel 15 px einstellt, bekommt 28 px. Am Handy bricht damit
	   jeder zweite Name um — gemessen 10 von 16 Einträgen —, und der Umbruch
	   sieht aus wie ein Layoutfehler. Auf dem Schreibtisch fällt es nicht auf,
	   weil dort Platz ist.

	   `inherit` gibt die Steuerung an das Panel zurück. Das ist Elementor-First
	   im Wortsinn: Nicht das Theme bestimmt die Größe, sondern der Kunde — es
	   sorgt nur dafür, dass seine Einstellung überhaupt ankommt. */
	font-size: inherit;
	line-height: inherit;

	/* Die Überschriften-Abstände des Resets (0,5 rem oben, 1 rem unten) reißen
	   die Zeile auseinander, in der Name, Punktlinie und Preis auf einer
	   Grundlinie stehen sollen. */
	margin: 0;
}

/* Ein Preis bricht nicht um. „8,50 €" auf zwei Zeilen ist keine Preisangabe
   mehr, sondern ein Rätsel — am Handy gemessen, wo der Name den Platz nimmt
   und das Eurozeichen allein in die zweite Zeile fällt. Der Name darf
   umbrechen (siehe oben), der Preis nie. */
.elementor-price-list-price {
	white-space: nowrap;
}

/* ══ Mobile Navigation über den ganzen Schirm ══════════════════════════════

   OPT-IN. Nichts hiervon greift, solange niemand die CSS-Klasse
   `stryke-nav-fullscreen` am Menü-Widget setzt (Elementor-Panel → Erweitert →
   CSS-Klassen). Das ist der Unterschied zu den beiden Blöcken oben und der
   Grund, warum es Regel 1 dieser Datei nicht bricht: Hier wird niemandem eine
   Anordnung aufgezwungen, hier wird eine angeboten.

   WOFÜR: Elementors mobile Vorgabe klappt das Menü als schmale Liste unter dem
   Kopfbereich auf — bei 390 px gemessen ein 110 px breiter Kasten, in dem
   „Speisekarte" auf zwei Zeilen umbricht und „Kontakt & Anfahrt" auf drei. Wer
   ein zweites Element im Kopf hat (einen Reservieren-Knopf etwa), bekommt
   zusätzlich eine Kopfzeile, die auf 324 px Höhe anwächst. Ein Menü über den
   ganzen Schirm löst beides und ist am Handy ohnehin das Erwartete.

   ══ WIE ELEMENTOR AUF- UND ZUKLAPPT, nachgemessen an 4.2.1 ══

   NICHT über `display` — das bleibt immer `block`. Geschaltet wird
   `max-height` (0 ⇄ `var(--menu-height)`), und parallel dazu springt
   `aria-hidden` von `true` auf `false`. Das Attribut ist deshalb der Haken,
   an dem hier alles hängt: Es ist der einzige Zustand, der im CSS lesbar ist,
   und es ist zugleich der, der für Screenreader ohnehin stimmen muss.

   Der geschlossene Zustand wird bewusst NICHT angefasst. Er bleibt Elementors
   `max-height: 0` samt Übergang — dadurch fährt das Menü weiter auf und zu
   statt zu springen, und wenn diese Datei einmal fehlt, ist die Navigation
   nicht kaputt, sondern nur wieder die alte.
   ------------------------------------------------------------------------ */

/* Eine Bedingung an die Breite steht hier bewusst nicht: Oberhalb des
   eingestellten Umschaltpunkts setzt Elementor das Ausklappmenü selbst auf
   `display: none`. Ein eigenes `@media (max-width: 767px)` würde stattdessen
   raten — und läge falsch, sobald jemand im Panel auf „Tablet" umstellt. */
/* Das Ausklappmenü liegt IMMER außerhalb des Textflusses, auch geschlossen.

   Das ist nicht Kosmetik, sondern der Grund für eine kaputte Kopfzeile: Im
   geschlossenen Zustand hat es zwar die Höhe 0, behält aber seine Breite — am
   Handy gemessen 152 px. Als Flex-Kind zog es das Menü-Widget auf ebendiese
   152 px auf, obwohl darin nur ein 33 px breiter Schalter steht. Für Wortmarke
   und Reservieren-Knopf blieb dann zu wenig übrig: Die Wortmarke wurde auf
   63 px gestaucht, der Knopf lief mit seiner Eigenbreite über den rechten Rand
   hinaus (Dokumentbreite 415 statt 390). */
.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown {
	position: fixed;
	inset: 0;
	margin: 0;
}

/* Geschlossen: unsichtbar und für Klicks nicht vorhanden. `max-height: 0`
   kommt von Elementor und bleibt dessen Sache — dadurch fährt das Menü weiter
   auf und zu, statt zu springen. */
.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown[aria-hidden="true"] {
	pointer-events: none;
}

.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown[aria-hidden="false"] {
	position: fixed;
	inset: 0;
	/* Elementor setzt am Ausklappmenü einen Abstand nach oben
	   (`dropdown_top_distance`, Vorgabe 10 px). Zusammen mit `inset: 0` schiebt
	   der die Fläche um genau diese 10 px nach unten und lässt oben einen
	   Streifen der Seite stehen — sichtbar als heller Spalt über dem Menü.
	   Nachgemessen: T10, H834 statt T0, H844. */
	margin: 0;
	z-index: 9990;
	/* Elementors `--menu-height` rechnet den Platz UNTER dem Kopfbereich aus
	   (gemessen 755 px bei 844 px Schirmhöhe). Über den ganzen Schirm soll es
	   aber den ganzen Schirm bekommen.

	   `none` und keine eigene Höhe: `inset: 0` spannt die Fläche exakt über
	   den Schirm. Ein zusätzliches `height: 100dvh` war der erste Versuch und
	   lag um 10 px daneben — `dvh` rechnet gegen die Sichtfläche des Browsers,
	   `inset` gegen den enthaltenden Block, und die beiden sind nicht dasselbe. */
	max-height: none;
	/* Rückfallwert. Er greift nur, wenn im Panel keine Ausklapp-Fläche gesetzt
	   ist — Elementors Control dafür heißt irreführend
	   `background_color_dropdown_item`, zielt aber auf
	   `{{WRAPPER}} .elementor-nav-menu--dropdown`, also auf genau dieses
	   Element, und bringt vier Klassen mit. Es gewinnt damit immer gegen diese
	   Zeile. Wer die Fläche steuern will, steuert sie dort. */
	background-color: var(--stryke-bg);
	overflow-y: auto;
	/* Ohne das scrollt am Handy die Seite HINTER dem Menü weiter, sobald man
	   am Ende der Liste angekommen ist — man klappt zu und steht woanders.
	   Die Alternative wäre, per JavaScript `overflow: hidden` an den Körper zu
	   hängen; das hier kostet keine Zeile Skript. */
	overscroll-behavior: contain;
}

/* Die Liste füllt die Fläche und sitzt in ihrer Mitte. Gestellt wird das an
   der Liste, nicht am Behälter: Dessen `display` gehört Elementor, und ein
   `display: flex` mit `!important` hier würde beim Zuklappen gewinnen und das
   Menü offen stehen lassen. */
.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown[aria-hidden="false"] > ul.elementor-nav-menu {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 0.25rem;
	min-height: 100%;
	/* Oben Platz für den Schließen-Knopf, der an seiner Stelle stehen bleibt. */
	padding: 6rem 1.5rem 4rem;
}

.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown[aria-hidden="false"] .elementor-item {
	/* Farbe und Fläche stehen hier, weil sonst Hello Elementors `reset.css`
	   durchschlägt: `a { color: #c36 }` und `a:hover { color: #336 }` — ein
	   Himbeer- und ein Marineton, die mit keiner Kundenfarbe etwas zu tun
	   haben. Genau das war vorher zu sehen.

	   Wer im Elementor-Panel eine Ausklapp-Farbe wählt, gewinnt trotzdem: Die
	   dortigen Regeln hängen zusätzlich an der Element-ID und sind damit
	   spezifischer. Elementor-First bleibt gewahrt. */
	color: var(--stryke-text);
	background: none;
	font-size: clamp(1.25rem, 6vw, 1.75rem);
	letter-spacing: 0.08em;
	line-height: 1.2;
	text-transform: uppercase;
}

.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown[aria-hidden="false"] .elementor-item:hover,
.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown[aria-hidden="false"] .elementor-item:focus {
	color: var(--stryke-text);
	background: none;
	opacity: 0.6;
}

/* Die aktuelle Seite wird MARKIERT, nicht gedimmt. Der erste Entwurf warf sie
   mit dem Überfahren-Zustand in eine Regel — dadurch stand der Eintrag, auf
   dem man gerade steht, blass zwischen den anderen und sah aus, als wäre er
   abgeschaltet. Ein Unterstrich sagt „hier bist Du", eine halbe Deckkraft
   sagt „das geht nicht". */
.stryke-nav-fullscreen nav.elementor-nav-menu--dropdown[aria-hidden="false"] .elementor-item.elementor-item-active {
	color: var(--stryke-text);
	background: none;
	opacity: 1;
	text-decoration: underline;
	text-underline-offset: 0.35em;
	text-decoration-thickness: 1px;
}

/* Der Schalter bleibt, wo er ist, und liegt über der Fläche — sonst klappt
   sich das Menü auf und verschluckt den Weg zurück. */
.stryke-nav-fullscreen .elementor-menu-toggle {
	position: relative;
	z-index: 9991;
}

/* Elementors Vorgabe für den Schalter ist ein dunkles Grau (#33373D). Auf
   einer dunklen Fläche ist er damit unsichtbar — und zwar genau in dem
   Moment, in dem man ihn braucht. */
.stryke-nav-fullscreen .elementor-menu-toggle,
.stryke-nav-fullscreen .elementor-menu-toggle:hover,
.stryke-nav-fullscreen .elementor-menu-toggle:focus {
	color: var(--stryke-text);
	background: none;
}

/* Wer „Bewegung reduzieren" eingestellt hat, bekommt keine. */
@media (prefers-reduced-motion: reduce) {
	.elementor-field-group .elementor-field-textual,
	.elementor-lightbox .elementor-slideshow__header,
	.elementor-lightbox .elementor-swiper-button,
	.elementor-form .elementor-button {
		transition: none;
	}
}

/* ==========================================================================
   Eintrittsanimationen — weich bleiben, auch bei reduzierter Bewegung
   ========================================================================== */

/*
 * „Bewegung reduzieren" heißt Bewegung, nicht Blende.
 *
 * Elementor wirft bei `prefers-reduced-motion: reduce` die komplette
 * Eintrittsanimation weg (`.animated { animation: none !important }`), das
 * Theme kürzt in style.css zusätzlich jede Dauer auf 0.01ms. Übrig bleibt das
 * blanke Sichtbarschalten durch `GlobalHandler::animate()` — das Element
 * SPRINGT auf volle Deckkraft. Gemessen: 73 verschiedene Deckkraftwerte im
 * Normalfall, genau 1 bei reduzierter Bewegung.
 *
 * Wogegen die Einstellung schützt, ist Bewegung im Sichtfeld — Verschieben,
 * Zoomen, Drehen. Eine reine Deckkraftblende löst das nicht aus. Deshalb wird
 * hier nicht die Animation entfernt, sondern nur ihr Weg: Die Bewegung fällt
 * weg, die Blende bleibt und bleibt weich.
 *
 * Höhere Spezifität als Elementors `.animated` und als der `*`-Block in
 * style.css — sonst gewinnen deren `!important`-Regeln.
 */
@keyframes stryke-fade-in {
	from {
		opacity: 0;
	}
	to {
		opacity: 1;
	}
}

@media (prefers-reduced-motion: reduce) {
	.elementor .animated.fadeIn,
	.elementor .animated.fadeInUp,
	.elementor .animated.fadeInDown,
	.elementor .animated.fadeInLeft,
	.elementor .animated.fadeInRight {
		animation-name: stryke-fade-in !important;
		animation-duration: 1.25s !important;
		animation-timing-function: ease-out !important;
		animation-fill-mode: both !important;
		animation-iteration-count: 1 !important;
	}

	.elementor .animated.animated-slow {
		animation-duration: 2s !important;
	}

	.elementor .animated.animated-fast {
		animation-duration: 0.75s !important;
	}
}
