/*
  REST-CSS für Elementor-Dokumente (Theme 3.0). Lädt NACH allen Stylesheets von Elementor, und zwar nur
    - auf Ansichten, die ein Elementor-Dokument trägt (Vorlage „Elementor Volle Breite“ oder „Canvas“), und
    - in der Vorschau des Elementor-Editors, damit die Leinwand das echte Aussehen zeigt.
  Auf PHP-Ansichten lädt diese Datei nicht; dort gelten komponenten.css und die seitenbezogenen Stylesheets.
  Abgrenzung zu elementor-kit.css (beide Welten) und elementor-bruecke.css (nur PHP-Ansichten): siehe elementor-kit.css.

  Herkunft: docs/elementor-pilot-rest.css (Stand 20.09.2026, nach „Nativ zuerst“), Regel für Regel gemessen gegen die
  HTML-Fassung. Geändert sind nur der Symbolpfad (hier relativ zur Datei) und der Umbruch des Pausenknopfs (640 statt
  700 px, siehe dort). Hinzugekommen sind am Ende die Blöcke „Lichtkasten“, „Module“ und „Brotkrumen-Modul“ – Markup,
  das nicht aus Elementor stammt.

  Grundsatz: Was Elementor selbst ausdrücken kann, steht in Elementor (globale Klasse, lokaler Stil, Kit-Standardstil) und ist
  damit im Editor sichtbar. Hier steht nur, was Elementor NICHT kann; jeder Block nennt den Grund („WARUM NICHT NATIV“).
  Rangfolge: Elementor schreibt Klassen als ".elementor .name" (0,2,0). Jede Regel hier braucht deshalb mindestens (0,2,1)
  oder einen Pseudo-Teil. Umbruchpunkte folgen dem Kit (920/700).
  Symbole: ../icons/ (Phosphor, liegen im Theme).
  Ab 3.1 steht am Ende der Nachtrag für die 18 Infoseiten (docs/elementor-rest-nachtrag.css, Symbolpfad umgestellt).
  3.1.1 (Gegenmessung am Staging mit Elementor 4.3.2): Fokusring an Links in Absatz- und Überschriften-Widgets („Reparaturen an
  Elementors all: unset“) und Textlink als direktes Kind von .prosa.
*/


/* ---------- Symbole als Maske ---------- */
/* WARUM NICHT NATIV: Pseudo-Elemente (::before/::after) kennt das Stil-Panel nicht. Elementor-Schaltflächen nehmen keine Kinder auf,
   ein Symbol-Widget im Knopf geht also nicht, und die Mediathek hat keine SVG. Der Abstand zum Symbol (gap) steht dagegen in den Klassen.
   Achtung: frontend.min.css belegt .e-con::before (position: absolute, 100 % Breite und Höhe, content aus --background-overlay).
   Auf Containern (e-div-block, e-flexbox) deshalb ::after mit order: -1 nehmen, ::before nur auf Text- und Schaltflächen-Elementen. */
.elementor .mit-pfeil::after,
.elementor .mit-herz::before,
.elementor .medien-laden::before,
.elementor .krume + .krume::before,
.elementor .hinweis::after,
.elementor .kachel-pfeil::after,
.elementor .aktuell-eintrag::after,
.elementor .medien-platz::after {
  content: ''; flex: none; background: currentColor;
  -webkit-mask: var(--symbol) center / contain no-repeat; mask: var(--symbol) center / contain no-repeat;
}
.elementor .mit-pfeil::after { --symbol: url(../icons/arrow-right.svg); width: 1.15em; height: 1.15em; }
.elementor .textlink.mit-pfeil::after { width: 1.1em; height: 1.1em; transition: transform 200ms var(--ease-out); }
.elementor .mit-herz::before { --symbol: url(../icons/fill/heart.svg); width: 1.15em; height: 1.15em; }
.elementor .medien-laden::before { --symbol: url(../icons/fill/play.svg); width: 1.15em; height: 1.15em; }
.elementor .krume + .krume::before { --symbol: url(../icons/caret-right.svg); width: 1em; height: 1em; }
.elementor .hinweis::after { order: -1; --symbol: url(../icons/info.svg); width: 1.25rem; height: 1.25rem; margin-top: 0.15rem; color: var(--akzent-text); }
.elementor .kachel-pfeil::after { --symbol: url(../icons/arrow-up-right.svg); width: 1em; height: 1em; }
.elementor .aktuell-eintrag::after { --symbol: url(../icons/arrow-right.svg); width: 1.25rem; height: 1.25rem; color: var(--akzent-text); transition: transform 250ms var(--ease-out); }
.elementor .medien-platz::after { order: -1; width: 2.75rem; height: 2.75rem; color: var(--blau); }
.elementor .medien-audio .medien-platz::after { --symbol: url(../icons/fill/spotify-logo.svg); }
.elementor .medien-video .medien-platz::after { --symbol: url(../icons/fill/youtube-logo.svg); }

/* ---------- Seitenkopf: Link im Brotkrumen ---------- */
/* WARUM NICHT NATIV: Der Link liegt IM Absatz-Widget (a.e-paragraph-link-base), eine Klasse lässt sich ihm nicht geben; Elementor
   setzt ihn auf "all: unset". Die Zeilenhöhe der Krume (min-height 2.75rem) steht nativ in der Klasse krume; hier bleibt nur die
   Klickfläche des Links selbst und die Unterstreichung für Zeigergeräte (Medienabfrage hover/pointer kennt Elementor nicht). */
.elementor .krume a { display: inline-flex; align-items: center; min-height: 2.75rem; color: inherit; text-decoration: none; }
@media (hover: hover) and (pointer: fine) { .elementor .krume a:hover { text-decoration: underline; } }

/* ---------- Fließtext: Auszeichnung INNERHALB der Text-Widgets ---------- */
/* WARUM NICHT NATIV: ul/ol/li/strong/a sind Inline-HTML im Absatz-Widget, keine eigenen Elemente – sie haben kein Stil-Panel.
   ::marker ist ein Pseudo-Element; der Link im Absatz steht auf "all: unset" und muss Farbe und Unterstreichung zurückbekommen.
   Der Absatzrhythmus selbst (1.15em, 2.4em/0.7em um h2, 2em um h3) steht NICHT mehr hier: Klasse prosa (Flex-Spalte, gap 1.15em)
   und prosa-h2/prosa-h3. */
.elementor .prosa :is(ul, ol) { padding-left: 1.25rem; }
.elementor .prosa li + li { margin-top: 0.45em; }
.elementor .prosa li::marker { color: var(--akzent-text); }
.elementor .prosa strong { font-weight: 700; }
.elementor .prosa p a { font-weight: 600; text-decoration: underline; text-decoration-thickness: 1px; color: var(--akzent-text); cursor: pointer; }

/* ---------- Kurz erklärt: Stern vor jedem Punkt ---------- */
/* WARUM NICHT NATIV: Pseudo-Element mit clip-path (Form). Der Einzug für den Stern (padding-inline-start) steht in der Klasse kurz-punkt. */
.elementor .kurz-punkt::before {
  content: ''; position: absolute; left: 0; top: 0.5em; width: 0.6rem; height: 0.6rem; background: var(--blau);
  clip-path: polygon(50% 0, 62% 38%, 100% 50%, 62% 62%, 50% 100%, 38% 62%, 0 50%, 38% 38%);
}

/* ---------- Galerie: Bildzoom beim Überfahren ---------- */
/* WARUM NICHT NATIV: Eltern-Hover wirkt auf ein Kind (.galerie-feld:hover .galerie-bild), und nur für Zeigergeräte.
   Das Raster selbst (groß/mittel/normal, Mobilfassung) steht nativ in galerie-feld und seinen Spielarten – kein :nth-child mehr. */
@media (hover: hover) and (pointer: fine) { .elementor .galerie-feld:hover .galerie-bild { transform: scale(1.04); } }

/* ---------- Schaltflächen: Farbschema und Zeigergeräte ---------- */
/* WARUM NICHT NATIV: Das dunkle Schema hängt an :root[data-theme] bzw. prefers-color-scheme – Elementor-Klassen kennen keinen
   Vorfahren-Selektor und keine solche Medienabfrage. Hover auf ein Pseudo-Element (::after) ebenfalls nicht. */
:root[data-theme='dark'] .elementor .btn-tief { background-color: var(--blau); color: var(--auf-akzent); }
@media (prefers-color-scheme: dark) { :root:not([data-theme='light']) .elementor .btn-tief { background-color: var(--blau); color: var(--auf-akzent); } }
@media (hover: hover) and (pointer: fine) { .elementor .textlink:hover::after { transform: translateX(4px); } }

/* ---------- Startseite: Hero ---------- */
/* WARUM NICHT NATIV: Schleier als Pseudo-Element zwischen Bildstapel und Inhalt; Kamerafahrt und Einlauf sind @keyframes;
   ist-aktiv/ist-raus/ist-pausiert setzt hero.js zur Laufzeit; :nth-child für Verzögerung und Gegenfahrt.
   Höhe, Raster, Farbe, Innenabstände und die Überblendung (opacity 1600ms) stehen nativ in hero, hero-inhalt, hero-buehne, hero-bild. */
.elementor .hero::after {
  content: ''; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgb(7 21 34 / 0.6) 0%, rgb(7 21 34 / 0.08) 26%, rgb(7 21 34 / 0.2) 50%, rgb(7 21 34 / 0.92) 100%), linear-gradient(90deg, rgb(7 21 34 / 0.5), rgb(7 21 34 / 0) 60%);
}
@media (max-width: 700px) { .elementor .hero::after { background: linear-gradient(180deg, color-mix(in srgb, var(--schleier) 60%, transparent) 0%, color-mix(in srgb, var(--schleier) 15%, transparent) 20%, color-mix(in srgb, var(--schleier) 62%, transparent) 45%, color-mix(in srgb, var(--schleier) 94%, transparent) 100%); } }
.elementor .hero-bild.ist-aktiv, .elementor .hero-bild.ist-raus { animation: kamerafahrt 9s linear both; }
.elementor .hero-bild:nth-child(even).ist-aktiv, .elementor .hero-bild:nth-child(even).ist-raus { animation-name: kamerafahrt-b; }
@keyframes kamerafahrt { from { transform: scale(1.02) translate3d(0, 0, 0); } to { transform: scale(1.12) translate3d(-1.5%, -1%, 0); } }
@keyframes kamerafahrt-b { from { transform: scale(1.12) translate3d(1.5%, 0, 0); } to { transform: scale(1.02) translate3d(0, 0.5%, 0); } }
.elementor .ist-pausiert .hero-bild, .elementor .hero.ist-pausiert .hero-bild { animation-play-state: paused; }
.elementor .hero-inhalt > * { animation: hero-rein 900ms var(--ease-out) both; }
.elementor .hero-inhalt > :nth-child(2) { animation-delay: 80ms; }
.elementor .hero-inhalt > :nth-child(3) { animation-delay: 180ms; }
.elementor .hero-inhalt > :nth-child(4) { animation-delay: 280ms; }
@keyframes hero-rein { from { opacity: 0; transform: translateY(22px); filter: blur(6px); } }
/* WARUM NICHT NATIV: Pausenknopf und Wächter brauchen aria-label und aria-pressed und tragen Zustände aus hero.js. Seit der Startseite
   als Dokument (Nachbesserung „umschalten“ 30.09.2026, live-r1-5) steht der Knopf IM DOKUMENT – Div-Block mit Tag button, globale Klasse
   hero-pause (Lage, Größe, Farbe, Übergang nativ in der Klasse) und den Attributen type/aria-label/aria-pressed –, damit er auch ohne
   JavaScript da ist wie in der HTML-Fassung; hero.js findet ihn und erzeugt ihn nur noch dort, wo er fehlt (PHP-Ansicht, andere
   Dokumente). Diese Regel gestaltet den erzeugten Knopf (kein Stil-Panel); der Wächter kommt weiter aus dem Skript. */
.hero-pause { position: absolute; right: var(--rand); bottom: clamp(1.25rem, 4vh, 2.5rem); display: grid; place-items: center; width: 3rem; height: 3rem; border-radius: 50%; border: 0; background: rgb(255 255 255 / 0.92); color: var(--lapis); font-size: 1.1rem; cursor: pointer; transition: transform 160ms var(--ease-out), background-color 160ms ease; }
.hero-pause:active { transform: scale(0.94); }
.hero-pause .ic-play { display: none; }
.hero-pause[aria-pressed='true'] .ic-play { display: block; }
.hero-pause[aria-pressed='true'] .ic-pause { display: none; }
/* Knopf im Dokument: Elementor-Schaltflächen und -Container nehmen keine SVG-Kinder auf (Mediathek ohne SVG) – Symbol als Maske im
   ::after (::before belegt frontend.min.css an .e-con), Wechsel Pause/Play am Zustand aria-pressed, den hero.js setzt. Nur am nativen
   Element (e-div-block-base); der vom Skript erzeugte Knopf bringt seine zwei SVG mit. */
.elementor .hero-pause.e-div-block-base::after { content: ''; --symbol: url(../icons/fill/pause.svg); width: 1em; height: 1em; background: currentColor; -webkit-mask: var(--symbol) center / contain no-repeat; mask: var(--symbol) center / contain no-repeat; }
.elementor .hero-pause.e-div-block-base[aria-pressed='true']::after { --symbol: url(../icons/fill/play.svg); }
.hero-waechter { position: absolute; top: 0; left: 0; width: 1px; height: 60%; pointer-events: none; }
/* 640 px wie Hero.astro, nicht der Umbruchpunkt des Kits (700 px – den einzigen, den die Klasse hero-pause kennt). Gemessen am
   20.09.2026 mit Theme 3.0: Mit 700 px saß er bei 700 px Breite 732 px zu hoch. Rangfolge (0,3,0), damit die Regel am Knopf im
   Dokument die Klasse (0,2,0) überstimmt; ohne .elementor für den erzeugten Knopf. */
@media (max-width: 640px) { .hero-pause, .elementor .hero-pause.hero-pause { width: 2.75rem; height: 2.75rem; bottom: auto; top: 0.75rem; } }
/* WARUM NICHT NATIV: Die HTML-Fassung senkt die Mindesthöhe erst ab 640 px, Elementor kennt nur den mobilen Umbruchpunkt des Kits (700 px).
   Der mobile Wert steht nativ in der Klasse hero; diese Regel stellt nur im Band 641–700 px den Desktop-Wert wieder her
   (ohne sie ist der Hero dort 72 px niedriger – gemessen bei 700 px). */
@media (min-width: 641px) and (max-width: 700px) { .elementor .hero.hero { min-height: min(calc(100dvh - var(--header-h)), 54rem); } }

/* ---------- Startseite: Willkommen ---------- */
/* WARUM NICHT NATIV: Farbschema-Selektor auf :root (siehe Schaltflächen). */
@media (prefers-color-scheme: dark) { :root:not([data-theme='light']) .elementor .willkommen-logo { padding: 1rem; } }
:root[data-theme='dark'] .elementor .willkommen-logo { padding: 1rem; }

/* ---------- Startseite: Kacheln ---------- */
/* WARUM NICHT NATIV: Schleier als Pseudo-Element; Eltern-Hover wirkt auf Kinder (Bild, Pfeil); Bewegungskurve var(--ease-out).
   Der gelbe Pfeil beim Überfahren (--sonne) gehört zu den Kacheln der Startseite (Angebote in startseite.css). Die Projekt-Kacheln
   auf /projekte/ tragen dieselben Klassen (kachel, kachel-pfeil), stehen aber als Schleifen-Elemente in Pros Schleifenraster
   (Hülle div.e-loop-item) und behalten dort ihre Pfeilfarbe – projekte/index.astro bewegt den Pfeil nur (3/−3 px) und zoomt das
   Bild (1,05). Theme-Nachtrag 5 (28.09.2026): Farbwechsel nur außerhalb eines Schleifen-Elements; :where() hält die Rangfolge
   der Regel bei (0,4,0). Der Block „/projekte/: Projekt-Kacheln im Schleifenraster“ unten ergänzt Schleier und Staffel. */
.elementor .kachel::after { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, transparent 35%, color-mix(in srgb, var(--schleier) 86%, transparent)); }
.elementor .kachel-logo::after { display: none; }
.elementor .kachel > img { transition: transform var(--dauer-bildzoom) var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .elementor .kachel:hover > img { transform: scale(1.05); }
  .elementor .kachel:hover .kachel-pfeil { transform: translate(3px, -3px); }
  .elementor .kachel:hover .kachel-pfeil:where(:not(.e-loop-item *)) { background: var(--sonne); color: var(--auf-sonne); }
}

/* ---------- Startseite: Medien (Schleier mit Vorschaubild, Zustände aus site.js) ---------- */
/* WARUM NICHT NATIV: Elementor zerlegt mehrlagige Hintergründe und wirft die Lage var(--vorschau) weg (im Pilot belegt); deshalb
   Pseudo-Element. ist-geladen/ist-da setzt site.js, das iframe erzeugt das Skript – beides gibt es im Editor nicht. */
.elementor .medien::before { content: ''; position: absolute; inset: 0; width: auto; height: auto; opacity: 1; border: 0; mix-blend-mode: normal; background: linear-gradient(color-mix(in srgb, var(--lapis) 72%, transparent), color-mix(in srgb, var(--lapis) 90%, transparent)), var(--vorschau, none) center / cover; }
.elementor .medien.ist-geladen::before { display: none; }
.elementor .medien iframe { position: relative; width: 100%; height: 100%; min-height: inherit; border: 0; display: block; opacity: 0; transition: opacity 300ms ease; }
.elementor .medien iframe.ist-da { opacity: 1; }

/* ---------- Startseite: Aktuelles, Shop, Wege ---------- */
/* WARUM NICHT NATIV: Eltern-Hover auf Kind bzw. Pseudo-Element; Schleier als Pseudo-Element. */
@media (hover: hover) and (pointer: fine) {
  .elementor .aktuell-eintrag:hover::after { transform: translateX(5px); }
  .elementor .aktuell-top:hover .aktuell-top-titel, .elementor .aktuell-eintrag:hover .aktuell-eintrag-titel { color: var(--akzent-text); }
  .elementor .shop-karte:hover .shop-bild { transform: translateY(-4px); }
}
.elementor .weg-jugend::after { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, color-mix(in srgb, var(--schleier) 5%, transparent) 25%, color-mix(in srgb, var(--schleier) 90%, transparent)); }
@media (max-width: 920px) { .elementor .weg-jugend::after { background: linear-gradient(180deg, color-mix(in srgb, var(--schleier) 45%, transparent) 0%, color-mix(in srgb, var(--schleier) 78%, transparent) 35%, color-mix(in srgb, var(--schleier) 92%, transparent) 100%); } }

/* ---------- Einblenden beim Scrollen: Klasse statt data-zeig ---------- */
/* WARUM NICHT NATIV: Zustände aus site.js (zeig-bereit am <html>, ist-da am Element) und prefers-reduced-motion. Im Editor läuft
   das Skript nicht, dort ist alles sichtbar. */
.zeig-bereit .elementor .zeig:not(.ist-da) { opacity: 0; transform: translateY(18px); }
.zeig-bereit .elementor .zeig.ist-da { transition: opacity 600ms var(--ease-out), transform 600ms var(--ease-out); transition-delay: calc(var(--i, 0) * 60ms); }
/* Galerie-Knöpfe (Schlussabnahme Runde 1, schluss-seiten-2-r1-6): In dist sitzt der Einblende-Haken am li (Gallery.astro), der Knopf
   darin behält seinen eigenen Übergang „transform 160ms“ für das Drück-Feedback scale(0.98) bei :active. Hier steckt der Knopf in einer
   Listen-Hülle mit display: contents (role="listitem", Schlussabnahme schluss-seiten-1-r1-5/-2-r1-1) – ohne Kasten lässt sie sich nicht
   einblenden, der Haken zeig sitzt am Knopf selbst, und die Regel oben überschrieb dessen Übergang: Das Drücken lief 600 ms und je nach
   Staffel 0–240 ms verzögert. Am Galerie-Knopf führt die Einblendung den Versatz deshalb über die Eigenschaft translate (dasselbe Bild:
   18 px tiefer, dann an seinen Platz), transform bleibt für :active frei und läuft wie in dist 160 ms ohne Verzögerung. Endwerte, Staffel
   und Hover-Zoom unverändert; bei reduzierter Bewegung gilt weiter der Block darunter. (0,5,0) über der allgemeinen Regel (0,4,0).
   WARUM NICHT NATIV: Zustände aus site.js (zeig-bereit, ist-da) und Bewegungsvorliebe. */
@media (prefers-reduced-motion: no-preference) {
  .zeig-bereit .elementor .galerie-feld.zeig:not(.ist-da) { transform: none; translate: 0 18px; }
  .zeig-bereit .elementor .galerie-feld.zeig.ist-da { transition: opacity 600ms var(--ease-out), translate 600ms var(--ease-out), transform 160ms var(--ease-out); transition-delay: calc(var(--i, 0) * 60ms), calc(var(--i, 0) * 60ms), 0s; }
}
@media (prefers-reduced-motion: reduce) {
  .zeig-bereit .elementor .zeig { opacity: 1; transform: none; transition: none; }
  .elementor .hero-bild.ist-aktiv, .elementor .hero-bild.ist-raus, .elementor .hero-inhalt > * { animation: none; }
  .elementor .hero-bild, .elementor .kachel > img, .elementor .kachel-pfeil, .elementor .aktuell-eintrag::after, .elementor .shop-bild, .elementor .partner-logo, .elementor .galerie-bild, .elementor .galerie-feld, .elementor .textlink.mit-pfeil::after { transition: none; }
}
/* WARUM NICHT NATIV: Elementors custom-frontend.min.css setzt bei prefers-reduced-motion JEDEN Übergang der Seite auf 0 s
   („html * { transition-duration: 0s !important }“ – seitenweit, auch in PHP-Ansichten). Die HTML-Fassung nimmt dort nur Bewegung
   zurück (Block oben: Einblenden, Kamerafahrt, Bildzoom, Pfeile, Karten) und behält die kurzen Farb-/Versatzübergänge der
   Schaltflächen (global.css .btn: 160/180 ms), des Pausenknopfs (Hero.astro: 160 ms) und des Einbettungs-iframes (Medien.astro:
   opacity 300 ms). Diese Regel stellt genau diese Dauern wieder her – dieselben Werte wie in den Klassen btn/hero-pause und in der
   Regel .medien iframe oben; !important und Rangfolge (0,1,1) überstimmen Elementors (0,0,1). Nachbesserung 30.09.2026 (live-r1-3). */
@media (prefers-reduced-motion: reduce) {
  a.btn, button.btn { transition-duration: 160ms, 180ms, 180ms, 180ms, 180ms !important; transition-delay: 0s, 0s, 0s, 0s, 0s !important; }
  button.hero-pause { transition-duration: 160ms, 160ms !important; transition-delay: 0s, 0s !important; }
  .medien iframe { transition-duration: 300ms !important; transition-delay: 0s !important; }
}

/* ---------- Bewegungskurven ---------- */
/* WARUM NICHT NATIV: Elementor speichert bei transition nur Eigenschaft und Dauer, die Kurve geht verloren. */
.elementor a.btn, .elementor button.btn { transition-timing-function: var(--ease-out), ease, ease, ease, ease; }
.elementor :is(a, button).galerie-feld, .elementor a.partner-logo, .elementor .shop-karte .shop-bild { transition-timing-function: var(--ease-out); }
/* Kachel-Pfeil: transform 300 ms ease-out, background-color 200 ms ease (index.astro, projekte/index.astro – bis 30.09.2026 stand hier
   nur eine Kurve, die auch die Farbe bekam, live-r1-2); Pausenknopf im Dokument ebenso (Hero.astro); Hero-Bild: opacity 1600 ms
   ease-in-out (Hero.astro – die Klasse hero-bild trägt nur „opacity 1600ms“, ohne diese Regel läuft die Überblendung mit ease). */
.elementor .kachel .kachel-pfeil, .elementor button.hero-pause { transition-timing-function: var(--ease-out), ease; }
.elementor img.hero-bild { transition-timing-function: ease-in-out; }

/* ---------- Hover nur für Zeigergeräte ---------- */
/* WARUM NICHT NATIV: Elementor schreibt &:hover ohne Medienabfrage und zusätzlich für :focus-visible; die HTML-Fassung beschränkt
   Hover auf (hover: hover) and (pointer: fine). Diese Regeln nehmen den Hover auf Touch-Geräten zurück. */
@media not ((hover: hover) and (pointer: fine)) {
  .elementor a.btn:hover, .elementor button.btn:hover { background-color: var(--blau); }
  .elementor a.btn.btn-tief:hover { background-color: var(--lapis); }
  .elementor a.btn.btn-sonne:hover { background-color: var(--sonne); }
  .elementor a.btn.btn-hell:hover, .elementor button.btn.btn-hell:hover { background-color: rgb(255 255 255 / 0.92); }
  .elementor a.btn.btn-linie:hover, .elementor button.btn.btn-linie:hover { background-color: transparent; border-color: var(--linie-stark); }
  .elementor a.btn.btn-linie.medien-extern:hover { border-color: rgb(255 255 255 / 0.5); }
  .elementor a.partner-logo:hover { transform: none; }
  .elementor a.bereich-link:not(.bereich-link-aktiv):hover { color: var(--text); }
}

/* ---------- Schaltflächen: Tastaturfokus ohne Überfahren zeigt nur den Ring (29.09.2026, Klassen Teil B, Prüfung teil-b-r1-2) ---------- */
/* WARUM NICHT NATIV: Elementor schreibt den Zustand „Überfahren“ einer globalen Klasse zugleich für :focus-visible – erzeugtes CSS
   „.elementor .btn:hover, .elementor .btn:focus-visible { background-color: var(--blau-hover) }“, ebenso btn-tief (var(--lapis-2)),
   btn-sonne (var(--sonne-hover)), btn-hell (#fff), btn-linie (Fläche var(--flaeche-2), Rand var(--text)). Das Stil-Panel kennt die
   Zustände normal, hover, focus und active (Elementor 4.3.2), aber keinen Zustand „Tastaturfokus ohne Überfahren“: ein Zustand
   „focus“ erzeugt „.elementor .btn:focus { … }“ (0,3,0) in derselben Datei und gälte auch nach dem Mausklick (Fokus + Überfahren) –
   je nach Reihenfolge der Zustände verlöre entweder das Überfahren nach dem Klick oder der Tastaturfokus zeigte weiter die
   Überfahren-Farbe. Die HTML-Fassung färbt nur beim Überfahren und nur auf Zeigergeräten („@media (hover: hover) and (pointer:
   fine) { .btn:hover … }“, global.css); der Tastaturfokus zeigt allein den Ring (:focus-visible aus global.css).
   Gemessen (Prüfung Klassen Teil B, Runde 1): Fokus auf „Gruppe finden oder gründen“ (btn-tief) rgb(18, 58, 99) statt rgb(11, 39, 68),
   „E-Mail schreiben“ (btn) rgb(86, 180, 230) statt rgb(60, 164, 220), „Spenden über PayPal“ (btn-sonne) rgb(255, 232, 79) statt
   rgb(255, 222, 29), „Alle Antworten öffnen“ (btn-linie) Fläche rgb(230, 240, 247) und Rand rgb(10, 26, 43) statt durchsichtig und
   rgb(169, 188, 203). Hier deshalb für den Fokus OHNE Überfahren die Grundwerte derselben Klassen – dieselben Werte wie im Block
   „Hover nur für Zeigergeräte“ direkt darüber und wie die Einstellung „Hintergrundfarbe“ der Klasse im Editor (btn var(--blau); btn-tief
   var(--lapis), im dunklen Schema var(--blau) wie oben im Block „Schaltflächen: Farbschema“; btn-sonne var(--sonne); btn-hell
   rgb(255 255 255 / 0.92); btn-linie durchsichtig mit Rand var(--linie-stark), Spielart medien-extern Rand weiß 50 %). Überfahren
   (auch mit Fokus) und Ruhe bleiben unberührt (:not(:hover)).
   GRENZE (Prüfung Klassen Teil B, Runde 2, teil-b-r2-3; dieselbe Grenze trägt der Block „Hover nur für Zeigergeräte“ seit dem Pilot):
   Die Grundfarben stehen hier fest – als Design-Variablen, Änderungen an --blau, --lapis, --sonne im Design-System wirken mit.
   Stellt der Kunde die Hintergrundfarbe einer dieser Klassen im Editor auf einen anderen Wert oder legt er an der Klasse oder am
   Element einen Zustand „focus“ an, gilt beim TASTATURFOKUS weiter der Wert von hier: Rangfolge Grundregel (0,4,1), Spielarten
   (0,5,1), medien-extern (0,6,1), Schema-Regeln für btn-tief (0,7,1) – alle über dem Elementor-Zustand der Klasse (0,3,0) und über
   einem lokalen Zustands-Stil (0,3,0). Tiefer geht es nicht: Elementors Regelpaar „:hover, :focus-visible“ hat selbst (0,3,0), und
   diese Datei lädt danach; eine Regel, die nur dieses Paar, nicht aber einen Zustand „focus“ überstimmt, gibt es nicht. Ändert jemand
   die Grundfarbe einer Klasse im Editor, hier mitziehen. Ob der Block bleibt (Tastaturfokus wie die HTML-Fassung) oder entfällt
   (Tastaturfokus zeigt wie in Elementor die Überfahren-Farbe, Zustände aus dem Editor gelten), entscheidet der Auftraggeber
   (docs/ELEMENTOR-KLASSEN.md 9.11). Der Shop trägt dieselben Regeln für a.btn-tief/a.btn-linie in shop.css (Block „Fragen zum
   Shop?“ …); auf Shop-Seiten gelten beide mit gleichen Werten. */
.elementor :is(a, button).btn:focus-visible:not(:hover) { background-color: var(--blau); }
.elementor :is(a, button).btn.btn-tief:focus-visible:not(:hover) { background-color: var(--lapis); }
:root[data-theme='dark'] .elementor :is(a, button).btn.btn-tief:focus-visible:not(:hover) { background-color: var(--blau); }
@media (prefers-color-scheme: dark) { :root:not([data-theme='light']) .elementor :is(a, button).btn.btn-tief:focus-visible:not(:hover) { background-color: var(--blau); } }
.elementor :is(a, button).btn.btn-sonne:focus-visible:not(:hover) { background-color: var(--sonne); }
.elementor :is(a, button).btn.btn-hell:focus-visible:not(:hover) { background-color: rgb(255 255 255 / 0.92); }
.elementor :is(a, button).btn.btn-linie:focus-visible:not(:hover) { background-color: transparent; border-color: var(--linie-stark); }
.elementor :is(a, button).btn.btn-linie.medien-extern:focus-visible:not(:hover) { border-color: rgb(255 255 255 / 0.5); }
/* Bereichsnavigation der Randspalte („Unsere Projekte“, „Über uns“, „Rechtliches“ …; Klasse bereich-link): dieselbe Ursache –
   Elementor schreibt den Hover der Klasse zugleich für :focus-visible („.elementor .bereich-link:hover, .elementor .bereich-link:focus-visible
   { color: var(--akzent-text) }“, global-114-frontend-desktop.css). Die HTML-Fassung färbt nur beim Überfahren auf Zeigergeräten
   (Inhaltsseite.astro: „.bereich a { color: var(--text) }“, „@media (hover: hover) and (pointer: fine) { .bereich a:hover { color:
   var(--akzent-text) } }“); im Tastaturfokus bleibt die Textfarbe, nur der Ring erscheint (gemessen: hell rgb(10, 26, 43) statt
   rgb(15, 106, 156), dunkel rgb(233, 241, 248) statt rgb(108, 192, 238) an 7 Links je Projektseite). Der aktive Link (bereich-link-aktiv,
   --akzent-text) bleibt außen vor; die Grundfarbe steht wie oben fest (var(--text) = Farbe der Klasse). (0,5,1) über Elementors Paar
   (0,3,0). Theme-Nachtrag 7, Punkt 13 (Abnahme design3-r1-1/-r2-1/-r3-1).
   GRENZE (Prüfung teil-a-r1-6, dieselbe wie oben bei den Schaltflächen, teil-b-r2-3): Die Regel überstimmt beim TASTATURFOKUS auch eine
   im Editor geänderte Grundfarbe der Klasse bereich-link oder eines lokalen Stils (0,2,0) und einen Zustand „focus“ (0,3,0). Tiefer geht
   es nicht: Um Elementors Paar „:hover, :focus-visible“ (0,3,0, früher geladen) zu schlagen, braucht sie mindestens (0,3,0) – und liegt
   damit zwangsläufig über jeder Grundfarbe (0,2,0); auf die Grundfarbe aus dem Editor kann CSS nicht verweisen (kein Wert „wie im Zustand
   normal“; inherit wäre die Farbe des Elternteils nav.bereich, revert/revert-layer die Linkfarbe des Browsers, weil Elementor ohne
   Kaskadenebene schreibt). Der native Weg – Zustand „focus“ an der Klasse (Farbe var(--text)) statt dieser Regel – wiche an drei Stellen von
   der HTML-Fassung ab: Fokus und Überfahren zugleich (Tab, dann Maus darauf) zeigte die Grundfarbe statt --akzent-text, ebenso der
   Mausklick bis zum Seitenwechsel (:focus), und der aktive Link (bereich-link-aktiv, --akzent-text) bekäme im Fokus var(--text). Ändert
   jemand die Grundfarbe der Klasse im Editor, hier mitziehen. Ob die Regel bleibt (Tastaturfokus wie die HTML-Fassung) oder entfällt
   (Tastaturfokus zeigt wie in Elementor die Überfahren-Farbe), entscheidet der Auftraggeber zusammen mit dem Block oben
   (docs/ELEMENTOR-KLASSEN.md 9.11, 9.13). */
.elementor a.bereich-link:not(.bereich-link-aktiv):focus-visible:not(:hover) { color: var(--text); }
/* Kontaktzeilen, Links der Kontaktbox, Verzeichnis-Links, Partnerlogos und Partnerkarten (Schlussabnahme 03.10.2026,
   schluss-seiten-1-r1-9): dieselbe Ursache – erzeugtes CSS „.elementor .kontakt-zeile:hover, .elementor .kontakt-zeile:focus-visible
   { color: var(--akzent-text) }“, ebenso box-link (/faq/: info@ und Telefon) und inhalt-link (/agb/), bei partner-logo (Startseite)
   und partner-karte (/partner-foerderer/) „transform: translate3d(0px, -3px, 0px)“. Die HTML-Fassung färbt bzw. hebt nur beim
   Überfahren auf Zeigergeräten; im Tastaturfokus bleiben Farbe und Lage, nur der Ring erscheint (gemessen: info@ hell rgb(10, 26, 43)
   statt rgb(15, 106, 156), dunkel rgb(233, 241, 248) statt rgb(108, 192, 238); Partnerlogo/-karte transform none statt
   matrix(1, 0, 0, 1, 0, -3)). Grundwerte wie die Klassen im Editor: Farbe var(--text), keine Verschiebung. (0,4,1) über Elementors
   Paar (0,3,0). GRENZE wie bei bereich-link oben: Ändert jemand die Grundfarbe dieser Klassen im Editor, gilt beim Tastaturfokus
   weiter var(--text) – hier mitziehen; ob die Regeln bleiben, entscheidet der Auftraggeber zusammen mit den beiden Blöcken oben. */
.elementor a:is(.kontakt-zeile, .box-link, .inhalt-link):focus-visible:not(:hover) { color: var(--text); }
.elementor a:is(.partner-logo, .partner-karte):focus-visible:not(:hover) { transform: none; }

/* ---------- Reparaturen an Elementors "all: unset" ---------- */
/* WARUM NICHT NATIV: base-desktop.css setzt .e-paragraph-link-base, .e-heading-link-base und .e-image-link-base auf "all: unset" (0,2,0).
   Damit verlieren alle Links in Absätzen, Überschriften und an Bildern den Fokusring aus global.css (:focus-visible, 0,1,0)
   sowie text-underline-offset. Die Links liegen im Widget und haben kein eigenes Stil-Panel; :focus-visible kennt Elementor nicht. */
.elementor :is(.e-paragraph-link-base, .e-heading-link-base, .e-image-link-base):focus-visible { outline: 3px solid var(--fokus); outline-offset: 3px; border-radius: 4px; }
.elementor a.e-paragraph-link-base, .elementor a.e-heading-link-base { text-underline-offset: 0.18em; }
/* WARUM NICHT NATIV: Seit Elementor 4.3.2 (stabil) kommt dazu eine Inline-Regel (style#elementor-frontend-inline-css):
   ".e-heading-base a, .e-paragraph-base a { all: unset; cursor: pointer }" (0,1,1). Sie löscht an JEDEM Link in einem Absatz- oder
   Überschriften-Widget den Fokusring aus global.css (":focus-visible", 0,1,0) und die Unterstreichungswerte aus "a { … }" (0,0,1)
   – gemessen am 25.09.2026 an /impressum/, /mitmachen/, /ueber-uns/verbandsgeschichte/, /datenschutz/ (outline none per Tab-Taste).
   Hier deshalb mit (0,3,1) bzw. (0,2,1); --fokus wird auf tiefen Flächen von global.css auf --fokus-auf-tief umgestellt (hell/dunkel). */
.elementor :is(.e-heading-base, .e-paragraph-base) a:focus-visible { outline: 3px solid var(--fokus); outline-offset: 3px; border-radius: 4px; }
.elementor :is(.e-heading-base, .e-paragraph-base) a { text-underline-offset: 0.18em; text-decoration-thickness: 1px; }
/* WARUM NICHT NATIV: :focus-visible kennt Elementor nicht. global.css rundet den Fokusring (":focus-visible { border-radius: 4px }", 0,1,0).
   Die Klassen textlink und bereich-link setzen border-radius: 0 (0,2,0), um die 2 px aus dem Grundstil der Schaltfläche zu löschen,
   klickbare Container (Tag a) bringen 0 aus dem Grundstil mit – beides löscht auch die Rundung des Rings (gemessen am 20.09.2026:
   0 statt 4 px an Textlinks, Bereichsnavigation, Aufmacher, Aktuelles-Zeilen und Shop-Karten). Kacheln behalten ihren Kartenradius. */
.elementor :is(a, button).textlink:focus-visible, .elementor a.bereich-link:focus-visible,
.elementor a.aktuell-top:focus-visible, .elementor a.aktuell-eintrag:focus-visible, .elementor a.shop-karte:focus-visible { border-radius: 4px; }

/* ---------- Dunkles Schema: Hover auf btn-tief ---------- */
/* WARUM NICHT NATIV: Farbschema-Selektor (siehe oben). Die Regel für .btn-tief oben (0,4,0) überstimmt den Hover aus Elementor (0,3,0);
   die HTML-Fassung zeigt auch im dunklen Schema var(--lapis-2) beim Überfahren. Auf Touch-Geräten bleibt es bei var(--blau). */
@media (hover: hover) and (pointer: fine) {
  :root[data-theme='dark'] .elementor a.btn.btn-tief:hover { background-color: var(--lapis-2); }
  @media (prefers-color-scheme: dark) { :root:not([data-theme='light']) .elementor a.btn.btn-tief:hover { background-color: var(--lapis-2); } }
}
@media not ((hover: hover) and (pointer: fine)) {
  :root[data-theme='dark'] .elementor a.btn.btn-tief:hover { background-color: var(--blau); }
  @media (prefers-color-scheme: dark) { :root:not([data-theme='light']) .elementor a.btn.btn-tief:hover { background-color: var(--blau); } }
}

/* ---------- Lichtkasten der Galerie ---------- */
/* WARUM NICHT NATIV: Den <dialog> baut galerie.js zur Laufzeit und hängt ihn an <body>; er ist kein Elementor-Element.
   Werte wie .galerie .lichtkasten in komponenten.css (Gallery.astro), nur ohne die Wurzelklasse .galerie. */
dialog.lichtkasten { width: 100vw; height: 100dvh; max-width: none; max-height: none; margin: 0; padding: clamp(0.75rem, 3vw, 2.5rem); border: 0; background: rgb(4 16 27 / 0.94); color: #fff; }
dialog.lichtkasten { opacity: 0; transition: opacity 150ms var(--ease-out), overlay 150ms allow-discrete, display 150ms allow-discrete; }
dialog.lichtkasten[open] { opacity: 1; transition-duration: 220ms; }
@starting-style { dialog.lichtkasten[open] { opacity: 0; } }
dialog.lichtkasten[open] { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 0.75rem; }
dialog.lichtkasten figure { margin: 0; height: 100%; min-height: 0; display: grid; grid-template-rows: 1fr auto; gap: 0.75rem; justify-items: center; }
dialog.lichtkasten .lk-bild { max-width: 100%; max-height: 100%; min-height: 0; width: auto; height: auto; object-fit: contain; border-radius: var(--r-karte); }
dialog.lichtkasten .lk-bild[hidden] { display: none; }
dialog.lichtkasten figcaption { font-size: var(--fs-s); color: rgb(255 255 255 / 0.85); text-align: center; max-width: 60rem; }
dialog.lichtkasten .lk-zu, dialog.lichtkasten .lk-nav { display: grid; place-items: center; width: 3rem; height: 3rem; padding: 0; border-radius: 50%; border: 1px solid rgb(255 255 255 / 0.35); background: rgb(255 255 255 / 0.08); color: #fff; font-size: 1.35rem; cursor: pointer; transition: background-color 160ms ease, transform 160ms var(--ease-out); }
dialog.lichtkasten .lk-zu:active, dialog.lichtkasten .lk-nav:active { transform: scale(0.94); }
dialog.lichtkasten .lk-zu { position: absolute; top: 1rem; right: 1rem; z-index: 1; }
@media (max-width: 700px) { dialog.lichtkasten[open] { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr auto; } dialog.lichtkasten figure { grid-column: 1 / -1; } dialog.lichtkasten .lk-vor { justify-self: end; } }
@media (prefers-reduced-motion: reduce) { dialog.lichtkasten { transition: none; } }
/* Das Galeriefeld ist in Elementor ein Container mit Tag button: Zeiger wie im Original. */
.elementor button.galerie-feld { cursor: zoom-in; }

/* ---------- Module: Theme-Markup in einem Elementor-Container ---------- */
/* WARUM NICHT NATIV: Katalog, Suche, Aktuelles, Formulare und Brotkrumen füllt das Theme beim Ausliefern in Container mit
   einer Klasse ajm-modul-… (inc/32-module.php). Ihr Markup benutzt dieselben Klassennamen wie global.css (.btn, .textlink,
   .hinweis …). Elementor schreibt für gleichnamige globale Klassen ".elementor .btn { background-color: … }" (0,2,0) und
   überstimmt damit die Spielarten aus global.css (.btn-tief, .btn-linie, .btn-klein: 0,1,0), sobald die Seite nur die
   Grundklasse benutzt. Diese Regeln stellen im Modul die Werte aus global.css wieder her. */
.elementor [class*='ajm-modul-'] .btn { color: var(--btn-fg); background: var(--btn-bg); border-color: transparent; transition: transform 160ms var(--ease-out), background-color 180ms ease, border-color 180ms ease, color 180ms ease, box-shadow 180ms ease; }
.elementor [class*='ajm-modul-'] .btn-linie { border-color: var(--linie-stark); }
.elementor [class*='ajm-modul-'] .btn-klein { min-height: 2.75rem; padding: 0.45rem 1rem; font-size: var(--fs-xs); }
.elementor [class*='ajm-modul-'] .btn[hidden] { display: none; }
.elementor [class*='ajm-modul-'] .btn:active { transform: scale(0.97); }
/* Elementors gleichnamige Klasse setzt außerdem text-align (inherit; ab „Klassen, Teil B“ nativ start) und cursor: pointer
   (0,2,0). Ein <button class="btn"> im Modul verlöre damit die Mitte aus dem Browser-Grundstil, ein gesperrter Knopf den
   Zeiger aus global.css (gemessen am Katalog- und Such-Modul gegen die PHP-Ansicht, 20.09.2026). */
.elementor [class*='ajm-modul-'] button.btn { text-align: center; }
.elementor [class*='ajm-modul-'] .btn:is([disabled], [aria-disabled='true']) { cursor: not-allowed; transform: none; }
@media (hover: hover) and (pointer: fine) {
  .elementor [class*='ajm-modul-'] .btn:hover { background: var(--blau-hover); }
  .elementor [class*='ajm-modul-'] .btn-tief:hover { background: var(--lapis-2); }
  .elementor [class*='ajm-modul-'] .btn-sonne:hover { background: var(--sonne-hover); }
  .elementor [class*='ajm-modul-'] .btn-linie:hover { background: var(--flaeche-2); border-color: var(--text); }
  .elementor [class*='ajm-modul-'] .btn-hell:hover { background: #fff; }
}
@media not ((hover: hover) and (pointer: fine)) {
  .elementor [class*='ajm-modul-'] .btn:hover { background: var(--btn-bg); }
  .elementor [class*='ajm-modul-'] .btn-linie:hover { border-color: var(--linie-stark); }
}
/* Das Info-Symbol des Hinweises ist im Elementor-Dokument ein Pseudo-Element (siehe „Symbole als Maske“), im Theme-Markup
   ein eingebettetes <svg>. Im Modul gäbe es sonst zwei (gemessen am Katalog: Text 32 px nach rechts, Kasten 24 px höher). */
.elementor [class*='ajm-modul-'] .hinweis::after { content: none; }
/* Elementor nimmt jedem Link die Unterstreichung (".elementor a { text-decoration: none }", 0,1,1). Links ohne Klasse im
   Fließtext eines Moduls bekommen sie zurück. :where() hält die Regel bei (0,1,1): Sie gewinnt nur gegen Elementor (weil
   sie später lädt), nie gegen das Stylesheet des Moduls. */
.elementor :where([class*='ajm-modul-']) :where(p, span, dd, address, figcaption) > a:where(:not([class])) { text-decoration-line: underline; text-decoration-thickness: 1px; }
@media (hover: hover) and (pointer: fine) { .elementor :where([class*='ajm-modul-']) :where(p, span, dd, address, figcaption) > a:where(:not([class]):hover) { text-decoration-thickness: 2px; } }
/* Hinweis des Kontakt-Moduls (ohne gewähltes Formular): Link wie .kontakt-raster .hinweis a in kontakt.css. */
.elementor .ajm-modul-formular-kontakt .hinweis a { font-weight: 650; overflow-wrap: anywhere; }
/* Der Platzhalter-Absatz („Hier erscheint automatisch …“) ist nur im Editor zu sehen; ausgeliefert wird das Modul. */

/* ---------- Brotkrumen-Modul (ajm-modul-krumen) ---------- */
/* WARUM NICHT NATIV: Das Theme baut die Liste aus den Vorfahren der Seite (nav > ol > li wie PageHeader.astro).
   Werte wie .seitenkopf .krumen in komponenten.css. Der Container trägt nur die Klasse ajm-modul-krumen. */
.elementor .ajm-modul-krumen .ajm-krumen ol { display: flex; flex-wrap: wrap; align-items: center; gap: 0.15rem 0.35rem; list-style: none; margin: 0 0 1.1rem; padding: 0; font-size: var(--fs-xs); }
.elementor .ajm-modul-krumen .ajm-krumen li { display: inline-flex; align-items: center; gap: 0.35rem; color: rgb(255 255 255 / 0.85); }
.elementor .ajm-modul-krumen .ajm-krumen a { color: inherit; text-decoration: none; display: inline-flex; align-items: center; min-height: 2.75rem; }
@media (hover: hover) and (pointer: fine) { .elementor .ajm-modul-krumen .ajm-krumen a:hover { text-decoration: underline; } }
.elementor .ajm-modul-krumen .ajm-krumen [aria-current] { color: #fff; font-weight: 650; }


/* ==================================================================================================================
   NACHTRAG (Theme 3.1, Klassenvorrat der 18 Infoseiten, docs/ELEMENTOR-KLASSEN.md Abschnitt 5). Übernommen aus
   docs/elementor-rest-nachtrag.css (Stand 21.09.2026), geändert ist nur der Symbolpfad (../icons/ statt ab Wurzel).
   Zwei Regeln ergänzen Blöcke oben (".prosa :is(ul, ol)" bekommt margin: 0, ".prosa … a" overflow-wrap); keine
   überschneidet sich. Grundsatz und Rangfolge wie im Dateikopf. Geprüft am Prüfstand (Entwurf 816) bei 1440, 860, 680
   und 375 px; nicht geprüft: Hover/Fokus/aktiv, dunkles Schema, Bewegung, Zustände nach Skriptlauf.
   ================================================================================================================== */

/* ---------- Symbole als Maske: neue Haken ---------- */
/* WARUM NICHT NATIV: Pseudo-Elemente kennt das Stil-Panel nicht, Schaltflächen nehmen keine Kinder auf, die Mediathek hat keine SVG.
   Die Haken-Klassen (mit-brief, mit-handy, mit-telefon, mit-download, mit-pfeil-extern, mit-pfeil-unten) tragen selbst keine Gestaltung.
   Symbol VOR dem Text: ::before – nur auf Text- und Schaltflächen-Elementen (e-button, e-paragraph), nie auf Containern
   (dort gehört ::before Elementor). Symbol NACH dem Text: ::after. */
.elementor .mit-brief::before,
.elementor .mit-handy::before,
.elementor .mit-telefon::before,
.elementor .mit-download::before,
.elementor .mit-pfeil-extern::after,
.elementor .mit-pfeil-unten::after,
.elementor .liste-zeile::after,
.elementor .datei-zeile::before,
.elementor .datei-zeile::after,
.elementor .inhalt-kopf::after,
.elementor .fakten-titel::before {
  content: ''; flex: none; background: currentColor;
  -webkit-mask: var(--symbol) center / contain no-repeat; mask: var(--symbol) center / contain no-repeat;
}
/* Größe wie ".btn svg" in global.css (1.15em); Abweichungen je Baustein darunter. */
.elementor .mit-brief::before { --symbol: url(../icons/envelope-simple.svg); width: 1.15em; height: 1.15em; }
.elementor .mit-handy::before { --symbol: url(../icons/device-mobile.svg); width: 1.15em; height: 1.15em; }
.elementor .mit-telefon::before { --symbol: url(../icons/phone.svg); width: 1.15em; height: 1.15em; }
.elementor .mit-download::before { --symbol: url(../icons/download-simple.svg); width: 1.15em; height: 1.15em; }
.elementor .mit-pfeil-extern::after { --symbol: url(../icons/arrow-up-right.svg); width: 1.15em; height: 1.15em; }
.elementor .mit-pfeil-unten::after { --symbol: url(../icons/arrow-down.svg); width: 1.15em; height: 1.15em; }
/* Textlink: wie ".textlink svg" (1.1em, fährt beim Überfahren 4 px nach rechts – die Hover-Regel ".textlink:hover::after" steht schon im Rest-CSS). */
.elementor .textlink.mit-pfeil-extern::after { width: 1.1em; height: 1.1em; transition: transform 200ms var(--ease-out); }
/* Kontaktwege (Vorstand, Team): Icon.astro ohne weitere Regel = 1em. */
.elementor .kontaktweg::before { width: 1em; height: 1em; }
.elementor .partner-karte-adresse::after { width: 1em; height: 1em; }
/* KontaktBox: "li a svg { font-size: 1.15rem; color: var(--akzent-text) }" */
.elementor .box-link::before { width: 1.15rem; height: 1.15rem; color: var(--akzent-text); }
/* Kontaktseite: ".wege a svg { font-size: 1.35rem; color: var(--akzent-text); transition: transform 200ms }" */
.elementor .kontakt-zeile::before { width: 1.35rem; height: 1.35rem; color: var(--akzent-text); transition: transform 200ms var(--ease-out); }


/* ---------- Übersicht „Über uns“: Pfeil der Listenzeile ---------- */
/* WARUM NICHT NATIV: Pseudo-Element; Eltern-Hover wirkt auf Kind und Pseudo-Element; nur für Zeigergeräte.
   Die Zeile ist ein Container mit Tag a – deshalb ::after (steht ohnehin am Ende des Rasters). */
.elementor .liste-zeile::after { --symbol: url(../icons/arrow-right.svg); width: 1.75rem; height: 1.75rem; color: var(--akzent-text); transition: transform 300ms var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .elementor .liste-zeile:hover .liste-titel { color: var(--akzent-text); }
  .elementor .liste-zeile:hover::after { transform: translateX(8px); }
}


/* ---------- Angebote und Partner: Eltern-Hover, Bewegungskurve ---------- */
/* WARUM NICHT NATIV: Eltern-Hover auf Kinder; Elementor speichert bei transition keine Kurve; Hover nur für Zeigergeräte.
   Das Logo-Feld (Bibliothek) zoomt in der HTML-Fassung nicht: Dort steckt das Bild nicht in bild-deckend, sondern hat lokalen Stil. */
@media (hover: hover) and (pointer: fine) {
  .elementor .angebot-karte:hover .bild-deckend { transform: scale(1.04); }
  .elementor .angebot-karte:hover .kachel-titel { color: var(--akzent-text); }
  .elementor .kontaktweg:hover { text-decoration-thickness: 2px; }
}
.elementor a.partner-karte { transition-timing-function: var(--ease-out); }


/* ---------- Downloadcenter: Datei-Symbole ---------- */
/* WARUM NICHT NATIV: zwei Pseudo-Elemente je Zeile. Die Zeile ist ein Container (Tag a); dessen ::before belegt Elementor
   (frontend.min.css: .e-con::before – absolut, 100 % groß, content aus --background-overlay). Hier wird es ausdrücklich
   zurückgesetzt und als Rasterkind benutzt (gleiches Vorgehen wie .medien::before). Spielarten: datei-zip (Symbol vorn),
   datei-extern (Pfeil statt Download hinten). */
.elementor .datei-zeile::before {
  --symbol: url(../icons/file-pdf.svg);
  position: static; display: block; width: 2rem; height: 2rem; opacity: 1; border: 0; border-radius: 0; mix-blend-mode: normal; transition: none;
  color: var(--akzent-text);
}
.elementor .datei-zeile.datei-zip::before { --symbol: url(../icons/file-zip.svg); }
.elementor .datei-zeile::after { --symbol: url(../icons/download-simple.svg); width: 1.35rem; height: 1.35rem; color: var(--akzent-text); transition: transform 250ms var(--ease-out); }
.elementor .datei-zeile.datei-extern::after { --symbol: url(../icons/arrow-up-right.svg); }
@media (hover: hover) and (pointer: fine) {
  .elementor .datei-zeile:hover .datei-titel { color: var(--akzent-text); }
  .elementor .datei-zeile:hover::after { transform: translateY(3px); }
}


/* ---------- FAQ: Akkordeon (e-accordion = details/summary) ---------- */
/* WARUM NICHT NATIV: Das Zeichen ist ein Pseudo-Element (das Icon-Feld von e-accordion braucht eine SVG aus der Mediathek, die es
   nicht gibt – deshalb show_icon: false); der Zustand details[open] ist kein Zustand, den das Stil-Panel kennt; die Nummer ist ein
   <span> im Überschriften-Widget (Inline-HTML, Klassen werden beim Speichern entfernt – am Prüfstand belegt); Liste und Link der
   Antwort sind Inline-HTML; @keyframes. Raster, Abstände, Schrift und Umbruch stehen nativ in faq-eintrag, faq-kopf, faq-frage, faq-antwort.
   Das Plus besteht aus zwei Verläufen in currentColor (Länge und Stärke wie Phosphor „plus“ bei 1.1rem: 0.756rem × 0.069rem). */
.elementor .faq-kopf::-webkit-details-marker { display: none; }
.elementor .faq-kopf::after {
  content: ''; flex: none; width: 2.5rem; height: 2.5rem; border-radius: 50%; border: 1.5px solid var(--linie-stark);
  background-color: transparent;
  background-image: linear-gradient(currentColor, currentColor), linear-gradient(currentColor, currentColor);
  background-size: 0.756rem 0.069rem, 0.069rem 0.756rem; background-position: center; background-repeat: no-repeat;
  transition: transform 260ms var(--ease-out), background-color 180ms ease, border-color 180ms ease, color 180ms ease;
}
.elementor .faq-eintrag[open] > .faq-kopf::after { transform: rotate(45deg); background-color: var(--lapis); border-color: var(--lapis); color: var(--auf-tief); }
.elementor .faq-kopf:active::after { transform: scale(0.97); }
.elementor .faq-eintrag[open] > .faq-kopf:active::after { transform: rotate(45deg) scale(0.97); }
@media (hover: hover) and (pointer: fine) {
  .elementor .faq-kopf:hover .faq-frage { color: var(--akzent-text); }
  .elementor .faq-kopf:hover::after { border-color: var(--text); }
  .elementor .faq-eintrag[open] > .faq-kopf:hover::after { border-color: var(--lapis); }
}
.elementor .faq-frage > span:first-child { font: 650 var(--fs-s) / 1 var(--font-display); font-stretch: 100%; font-variant-numeric: tabular-nums; color: var(--akzent-text); }
.elementor .faq-antwort :is(ul, ol) { margin: 0; padding-left: 1.2rem; display: grid; gap: 0.4rem; }
.elementor .faq-antwort li::marker { color: var(--akzent-text); }
/* Hohle Kreise wie dist (Schlussabnahme 03.10.2026, schluss-seiten-1-r1-10): Dort steckt die Antwortliste in der Fragenliste
   (ol.faq-liste > li > … > ul), und der Browser gibt einer verschachtelten ul „list-style-type: circle“. Im Elementor-Dokument ist die
   Fragenliste ein Div-Block, die ul der Antwort steht also auf oberster Ebene und bekäme gefüllte Punkte (disc). WARUM NICHT NATIV:
   Die Liste ist Inline-HTML im e-paragraph und hat kein Stil-Panel. */
.elementor .faq-antwort ul { list-style-type: circle; }
.elementor .faq-antwort .e-paragraph-base a:not([class]) { font-weight: 600; overflow-wrap: anywhere; }
@media (prefers-reduced-motion: no-preference) { .elementor .faq-eintrag[open] > .faq-antwort { animation: antwort-auf 260ms var(--ease-out); } }
@keyframes antwort-auf { from { opacity: 0; transform: translateY(-6px); } }
/* Ohne JavaScript gibt es nichts zu schalten (wie ".no-js [data-faq-alle]" in faq/index.astro). */
.no-js .elementor .faq-alle { display: none; }


/* ---------- AGB: Inhaltsverzeichnis (e-accordion mit einem Eintrag) ---------- */
/* WARUM NICHT NATIV: Pseudo-Element, Zustand details[open], :first-child. Kasten = Klasse kurz mit lokalem padding: 0;
   Kopfzeile = inhalt-kopf; Links = inhalt-link (tragen border-top, der erste verliert ihn hier – wie "li + li" im Original). */
.elementor .inhalt-kopf::-webkit-details-marker { display: none; }
.elementor .inhalt-kopf::after { --symbol: url(../icons/caret-down.svg); width: 1.2rem; height: 1.2rem; transition: transform 240ms var(--ease-out); }
.elementor details[open] > .inhalt-kopf::after { transform: rotate(180deg); }
/* Die Klasse rechnet 1 px Linie in die Mindesthöhe ein (Original: li mit Linie + a mit 2.75rem); der erste Link hat keine Linie.
   Seit der Schlussabnahme 03.10.2026 (schluss-seiten-1-r1-5) steckt jeder Link wie in dist (ol > li > a) in einem Listeneintrag
   (Div-Block mit role="listitem", lokal display: contents); dann zählt der erste EINTRAG der Liste, nicht der Link in seinem Eintrag
   (dort ist jeder Link :first-child). Beide Schreibweisen, damit ein Verzeichnis ohne Einträge weiter gilt; (0,2,0) wie bisher. */
:where(.elementor :not([role="listitem"])) > .inhalt-link:first-child,
:where(.elementor [role="list"] > [role="listitem"]:first-child) > .inhalt-link:first-child { border-top-width: 0; min-height: 2.75rem; }


/* ---------- Mitgliedsgruppen: Liste, deren Einträge in dist Absätze sind (Haken absatz-liste) ---------- */
/* Schlussabnahme 03.10.2026 (schluss-seiten-1-r1-11): In dist steht in jedem Listenpunkt der Mitgliedsgruppen ein p
   (ueber-uns/mitgliedsgruppen, „<li><p>Assyrisch-Deutscher Verein Paderborn e.V.</p></li>“ – die einzige solche Liste der Website),
   und p bricht mit „text-wrap: pretty“ (global.css). Im Elementor-Dokument steht der Text direkt im li und brach bei 375 px anders
   um („… Verein Paderborn / e.V.“ statt „… Verein / Paderborn e.V.“). WARUM NICHT NATIV: Die Liste ist Inline-HTML im e-paragraph
   (ohne Stil-Panel); ein p im li nimmt Elementor zwar an, gibt es beim Ausliefern aber nicht aus (am Staging belegt), und text-wrap
   hat im Stil-Panel keinen Regler. Der leere Haken absatz-liste (globale Klasse ohne Werte) am Absatz-Widget wählt genau diese Liste;
   (0,1,1) – kein anderer Wert setzt text-wrap am li. */
:where(.elementor) .absatz-liste li { text-wrap: pretty; }

/* ---------- Datenschutz (Platzhalterseite): Symbole ---------- */
/* WARUM NICHT NATIV: Pseudo-Elemente. Die fünf Symbole der Faktenliste hängen an der POSITION der Zeile (text-aa, cookie, play,
   hard-drives, paper-plane-tilt) – für fünf Hakenklassen ist eine Seite, die der Kunde ohnehin ersetzt, zu wenig. Wer die
   Zeilen umsortiert, sortiert die Symbole nicht mit. Entfällt, sobald die echte Datenschutzerklärung steht. */
.elementor .hinweis.hinweis-platzhalter::after { --symbol: url(../icons/warning-circle.svg); width: 1.6rem; height: 1.6rem; margin-top: 0.1rem; }
.elementor .fakten-titel::before { --symbol: url(../icons/text-aa.svg); width: 1.25rem; height: 1.25rem; margin-top: 0.1rem; color: var(--akzent-text); }
.elementor .fakten-zeile:nth-child(2) .fakten-titel::before { --symbol: url(../icons/cookie.svg); }
.elementor .fakten-zeile:nth-child(3) .fakten-titel::before { --symbol: url(../icons/play.svg); }
.elementor .fakten-zeile:nth-child(4) .fakten-titel::before { --symbol: url(../icons/hard-drives.svg); }
.elementor .fakten-zeile:nth-child(5) .fakten-titel::before { --symbol: url(../icons/paper-plane-tilt.svg); }


/* ---------- Kontakt: Karte (Zwei-Klick) und Kontaktzeilen ---------- */
/* WARUM NICHT NATIV: Pseudo-Elemente der Medien-Einbettung bekommen für die Spielart medien-karte andere Symbole; Eltern-Hover
   auf Pseudo-Element; .no-js am <html>. Höhe, Farbe und Abstand stehen nativ in medien-karte. */
.elementor .medien-karte .medien-platz::after { --symbol: url(../icons/fill/map-pin.svg); }
.elementor .medien-karte .medien-laden::before { --symbol: url(../icons/map-trifold.svg); }
.elementor .medien-karte iframe { background: var(--flaeche-2); }
.no-js .elementor .medien-karte :is(.medien-laden, .medien-text) { display: none; }
/* Ersatz für das Feld „Eigenes CSS“ lokaler Stile auf /kontakt/ (Prüfung „Klassen, Teil A“ Runde 2, 28.09.2026, teil-a-r2-3;
   docs/ELEMENTOR-KLASSEN.md 9.7). WARUM NICHT NATIV: white-space und Gewicht 650 kennt das Stil-Panel von Elementor 4.3.2 nicht
   (Prüfstand 1236, KLASSEN.md 9.1). Die Felder selbst werden erst in Teil B geleert (nach dem Upload dieses Themes), bis dahin
   doppeln die Regeln sie nur.
   – Knopf „Karte von OpenStreetMap laden“ (Stil e-15a547b0-57fb): dist Karte.astro .karte-laden { white-space: normal } – er darf
     umbrechen, anders als .btn (nowrap). (0,3,0), weil die Regel heute das Eigene CSS der Klasse btn (.elementor .btn
     { white-space: nowrap }, 0,2,0, vor dieser Datei geladen) und ab Teil B die btn-Regel im Block unten (0,1,1) schlagen muss;
     einen Editor-Regler für white-space gibt es nicht, also überstimmt sie keine Einstellung des Kunden.
   – Namen im „Team der Geschäftsstelle“ (Stile e-74aa770b-f87c, e-129bb0bb-3a67): dist kontakt/index.astro .team strong
     { font-weight: 650 }. Haken-Klasse team-name (leer, all: null) am Absatz-Widget; Regel wie im Block unten unter (0,2,0)
     (BAUPLAN Abschnitt 9, Regel 3, Ausnahme), damit jeder lokale Stil des Kunden weiter gewinnt. */
.elementor .medien-karte .medien-laden { white-space: normal; }
:where(.elementor) .team-name { font-weight: 650; }
@media (hover: hover) and (pointer: fine) { .elementor .kontakt-zeile:hover::before { transform: translateX(3px); } }


/* ---------- Links und Listen als Inline-HTML außerhalb von .prosa ---------- */
/* WARUM NICHT NATIV: <a>, <ul>, <li> im Absatz-Widget sind Inline-HTML ohne Stil-Panel. Elementor nimmt jedem Link die
   Unterstreichung (".elementor a { text-decoration: none }"); in .prosa stellt das Rest-CSS sie schon wieder her, hier für die
   übrigen Textstellen der Infoseiten (Verweis beim Vorstand, Adresse der Geschäftsstelle, Datenschutz, FAQ-Antwort, Hinweis).
   Links MIT Klasse (Widget-Link, Schaltflächen) bleiben unberührt.
   Listen: Der Browser gibt ul/ol 1em Außenabstand; in der HTML-Fassung regelt ".prosa > * + *" den Abstand, in Elementor die
   Klasse prosa (gap). Eine Liste steht IMMER in einem Absatz-Widget mit Tag span (ein <p> darf keine Liste enthalten – der Browser
   reißt es auseinander; am Prüfstand belegt). */
.elementor :is(.haupt, .faq-antwort, .hinweis) .e-paragraph-base a:not([class]) { color: var(--akzent-text); text-decoration-line: underline; text-decoration-thickness: 1px; text-underline-offset: 0.18em; cursor: pointer; }
@media (hover: hover) and (pointer: fine) { .elementor :is(.haupt, .faq-antwort, .hinweis) .e-paragraph-base a:not([class]):hover { text-decoration-thickness: 2px; } }
.elementor .hinweis .e-paragraph-base a:not([class]) { font-weight: 650; overflow-wrap: anywhere; }
.elementor .prosa :is(ul, ol) { margin: 0; }
/* Links in Listen des Fließtexts: Die Liste steckt in einem Absatz-Widget mit Tag span – die Regel ".prosa p a" des Rest-CSS erreicht sie nicht. */
.elementor .prosa .e-paragraph-base a:not([class]) { font-weight: 600; color: var(--akzent-text); text-decoration-line: underline; text-decoration-thickness: 1px; text-underline-offset: 0.18em; overflow-wrap: anywhere; cursor: pointer; }


/* Die Regel „.elementor .prosa > :is(a, button).textlink { margin-top: 0; font-weight: 600 }“ ist seit der Schlussabnahme Runde 3
   (03.10.2026) gestrichen: Ihr einziges Ziel „Zur Website des AJM“ (Partner & Förderer) steht jetzt wie in der HTML-Fassung in einem
   eigenen Absatz-Block (Div-Block 77dc60dd, role=paragraph), dessen Abstand der Absatz-Regel von global.css folgt; Schriftgewicht über
   den lokalen Stil des Links. Crawl aller 43 öffentlichen Seiten: kein Textlink mehr als direktes Kind von .prosa. */
/* WARUM NICHT NATIV: text-wrap kennt das Stil-Panel nicht (es landete im Feld „Eigenes CSS“ – Vorgabe: leer). Im Original steht
   der Textlink in einem <p> und erbt dessen text-wrap: pretty („p { text-wrap: pretty }“, global.css); in Elementor ist er ein
   Knopf-Widget in einem Container ohne <p> und rechnet auto (Prüfung Klassen Teil B, Runde 2, teil-b-r2-6: „Zur Website des AJM“,
   Partner & Förderer). Drei Stellen (Crawl aller dist-Seiten, Theme-Nachtrag 7, Punkt 2 – Abnahme design1-r2-3/-r3-3): Textlinks
   direkt in prosa; „Unsere Partner & Förderer“ auf /projekte/ (dist p.huelle.partnerlink) und „Zurück zu Aktuelles“ auf
   /aktuelles/positionspapiere/ (dist p.zurueck) – dort über die gleichnamigen Haken-Klassen partnerlink (1194, Hülle 453147a6)
   und zurueck (1228, 309431a9). Die Verweise in p.leer-links auf /aktuelles/ gibt das Modul ajm-modul-aktuelles-liste als echtes <p>
   aus (erbt aus global.css), die p.projekt der Produktseiten gehören zum Shop (ruht). Sichtbar erst, wenn der Linktext umbricht.
   (0,1,1) unter jedem lokalen Stil. */
:where(.elementor .prosa, .elementor .partnerlink, .elementor .zurueck) :is(a, button, span, p).textlink { text-wrap: pretty; }


/* ---------- Zusatztext für Vorleseprogramme in Schaltflächen ---------- */
/* WARUM NICHT NATIV: Der Zusatz ist ein <span> im Text des Schaltflächen-Widgets (Inline-HTML); Klassen an Inline-HTML entfernt
   Elementor beim Speichern, „sr-only“ lässt sich dort also nicht setzen. Abmachung: Ein <span> direkt in einer Schaltfläche (.btn)
   ist IMMER der unsichtbare Zusatz – Fördern: „Spenden<span> über PayPal (öffnet in neuem Tab)</span>“. Werte wie .sr-only in
   global.css. Für ganze Elemente (Überschrift „Weitere Partner und Förderer“) gibt es die globale Klasse sr-only.
   Gemessen am 25.09.2026 auf /foerdern/ im echten Chrome: OHNE diese Regel (Theme 3.0.0 am Staging) steht der Zusatz als 239 px
   breiter Block im Knopf (white-space: nowrap) und die Seite läuft bei 375 px auf 401 px über; MIT ihr ist der Span 1 × 1 px,
   scrollWidth 375 (bei 320 px 331 wie in dist – dort ragt der Kopf hinaus, nicht der Knopf), und der Text bleibt im Zugänglichkeitsbaum.
   Theme-Nachtrag 1 (28.09.2026): Die Abmachung gilt nur für Schaltflächen-WIDGETS (Klasse e-button-base aus Elementors Grundstil).
   Als „.elementor .btn > span“ traf die Regel auch das Markup der Module, das dieselbe Klasse btn trägt: im Katalog-Modul
   (/bibliothek/katalog/) die Knöpfe „Filter“ (span.zaehler) und „Merkliste“ (span.merk-schalter-text, span.zaehler) sowie
   „Auf die Merkliste“ im Detaildialog – Beschriftung und Zähler unsichtbar, Knopf 49 statt 146 px breit. Modul-Markup versteckt
   seinen Vorlese-Zusatz selbst (span.sr-only, global.css); der PayPal-Zusatz auf /foerdern/ ist ein Widget und bleibt versteckt. */
.elementor .btn.e-button-base > span { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }


/* ---------- Anker ---------- */
/* WARUM NICHT NATIV: gehört zur Sprungmarken-Funktion, die das Theme erst herstellen muss (Elementor kann keine id setzen,
   siehe docs/ELEMENTOR-KLASSEN.md, „Offene Punkte fürs Theme“). Abstand wie agb/index.astro. */
.elementor .prosa :is(.prosa-h2, .prosa-h3) { scroll-margin-top: calc(var(--header-h) + 1.5rem); }


/* ---------- Umbrüche, die nicht auf 920/700 liegen ---------- */
/* WARUM NICHT NATIV: Elementor kennt nur die Umbruchpunkte des Kits (920/700). Die HTML-Fassung bricht an diesen Stellen bei
   800, 640, 600, 560 und 480 px um. Der Tablet- bzw. Mobil-Zweig steht nativ in der Klasse (der Editor zeigt ihn); die Regeln hier
   stellen nur im Band dazwischen den Desktop-Wert wieder her – gleiches Vorgehen wie beim Hero (641–700 px). Die verdoppelte
   Klasse hebt die Regel auf (0,3,0), über die Medienregel von Elementor (0,2,0).
   800 px: Angebote, Partnerkarten, Dachverband, Spendenband (Klasse zweispaltig; --spalten setzt der lokale Stil, Standard sind
   zwei gleiche Spalten) und der Einstiegsabsatz von „Über uns“. Im Band liegen iPads hochkant (810–834 px). */
@media (min-width: 801px) and (max-width: 920px) {
  .elementor .zweispaltig.zweispaltig { grid-template-columns: var(--spalten, repeat(2, minmax(0, 1fr))); }
  .elementor .einstieg.einstieg { padding-inline-end: min(30%, 24rem); }
}
/* 640 px: Listenzeile „Über uns“ (Bild neben dem Text statt darüber). */
@media (min-width: 641px) and (max-width: 700px) {
  .elementor .liste-zeile.liste-zeile { grid-template-columns: clamp(9rem, 22vw, 20rem) 1fr auto; }
  .elementor .liste-bild.liste-bild { grid-column: auto; }
}
/* 600 px: Faktenliste der Datenschutzseite. */
@media (min-width: 601px) and (max-width: 700px) { .elementor .fakten-zeile.fakten-zeile { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); } }
/* 560 px: FAQ (Nummernspalte, Einzug der Antwort). */
@media (min-width: 561px) and (max-width: 700px) {
  .elementor .faq-frage.faq-frage { grid-template-columns: 2.25rem minmax(0, 1fr); gap: 0.75rem; }
  .elementor .faq-antwort.faq-antwort { padding-inline-start: 3rem; }
}
/* 480 px: Beiträge der Fördermitgliedschaft (drei Spalten bis 481 px). Nur die Karten IM Raster beitraege: Das Modul
   ajm-modul-aktuelles-liste (/aktuelles/) benennt seine Beitragskarten ebenfalls li.beitrag (modul-aktuelles-liste.css) – die
   Regel „.elementor .beitrag.beitrag“ traf sie bis 28.09.2026 im Band 481–700 px mit (Karte 16 px zu schmal durch
   padding-inline-end; Theme-Nachtrag 8). */
@media (min-width: 481px) and (max-width: 700px) {
  .elementor .beitraege.beitraege { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .elementor .beitraege > .beitrag.beitrag { grid-template-columns: none; align-items: normal; gap: 0.2rem; padding-inline-end: 1rem; }
  .elementor .beitrag-folge.beitrag-folge { padding-inline-start: clamp(1rem, 3vw, 1.75rem); border-width: 0 0 0 1px; }
}
/* NICHT abgedeckt (lokale Stile haben keinen festen Namen): „Schreib uns“ auf Mitmachen (Original 600 px, in Elementor 700 px)
   und das Kontakt-Raster (Original 900 px, in Elementor 920 px – dieselbe Lage wie das Band 901–920 px der Startseite). */
/* 359 px: Abschnitt „Teilnahmebedingungen und Kontakt“ auf /veranstaltungen/ (Haken-Klasse abschluss an der section 1986108c von 1227,
   Name wie section.abschluss in dist). Unter 360 px bricht der Knopf „Teilnahmebedingungen lesen“ (btn btn-linie) um, statt aus der
   Karte zu ragen – dist veranstaltungen/index.astro Z. 210–213: „@media (max-width: 359px) { .abschluss .btn { white-space: normal;
   text-align: left; line-height: 1.25 } }“ (Kommentar dort: Überlauf 29 px bei 320); die PHP-Ansicht trägt dieselbe Regel in
   veranstaltungen.css. WARUM NICHT NATIV: white-space hat im Stil-Panel keinen Regler (nowrap kommt aus dem Block „AUS DEN ALLGEMEINEN
   GLOBALEN KLASSEN“), und 359 px ist kein Kit-Umbruchpunkt (920/700, Entscheidung des Auftraggebers). (0,4,0) über Klasse (0,2,0) und
   lokalem Stil, nur unter 360 px. Gemessen bei 320: Knopf 283,2 × 48 → 241,1 × 61,9 px, scrollWidth 324 → 320 = dist (Abnahme
   design1-r1-1 … funktion-r3-3; Theme-Nachtrag 7, Punkt 1). */
@media (max-width: 359px) {
  .elementor .abschluss .btn.e-button-base { white-space: normal; text-align: left; line-height: 1.25; }
}


/* ---------- Hover nur für Zeigergeräte, Fokusring, Bewegung ---------- */
/* WARUM NICHT NATIV: wie die gleichnamigen Blöcke im Rest-CSS – Elementor schreibt &:hover ohne Medienabfrage (und zusätzlich für
   :focus-visible), kennt :focus-visible nicht und keine prefers-reduced-motion-Abfrage. */
@media not ((hover: hover) and (pointer: fine)) {
  .elementor a.box-link:hover, .elementor a.kontakt-zeile:hover, .elementor a.inhalt-link:hover { color: var(--text); }
  .elementor a.partner-karte:hover { transform: none; }
}
.elementor :is(a, button):is(.kontaktweg, .box-link, .kontakt-zeile, .inhalt-link):focus-visible,
.elementor a:is(.liste-zeile, .datei-zeile, .angebot-karte):focus-visible { border-radius: 4px; }
@media (prefers-reduced-motion: reduce) {
  .elementor .liste-zeile::after, .elementor .bild-deckend, .elementor a.partner-karte, .elementor .faq-kopf::after,
  .elementor .inhalt-kopf::after, .elementor .kontakt-zeile::before, .elementor .textlink.mit-pfeil-extern::after { transition: none; }
}


/* ==================================================================================================================
   ÜBERSICHTEN ALS SEITEN (Theme 3.2, docs/ELEMENTOR-UEBERSICHTEN.md): /aktuelles/, /projekte/, /veranstaltungen/,
   /aktuelles/positionspapiere/. Die Listen liefern Module (Stylesheets modul-*.css), die statischen Teile baut der
   Umsteller nativ. Hier steht nur, was Elementor für diese statischen Teile nicht kann. Quellen: die <style>-Blöcke von
   src/pages/aktuelles/index.astro, projekte/index.astro, veranstaltungen/index.astro, aktuelles/positionspapiere/index.astro.
   ================================================================================================================== */

/* ---------- Symbole als Maske: neue Haken der Übersichten ---------- */
/* WARUM NICHT NATIV: Pseudo-Elemente; die Mediathek hat keine SVG. mit-instagram: Instagram-Zeichen VOR dem Text der
   Schaltflächen „Auf Instagram folgen“ (/aktuelles/ Instagram-Block, /veranstaltungen/ Abschluss). mit-pfeil-links: Pfeil nach
   links VOR dem Text („Zurück zu Aktuelles“ auf /aktuelles/positionspapiere/). insta-icon: das freistehende Instagram-Zeichen
   im Instagram-Block (im Original ein <svg> als Rasterkind, Größe clamp(2.5rem, 5vw, 3.5rem) und Farbe --blau nativ am
   Element; hier nur die Form). Auf Containern ::after mit order: -1, weil Elementor .e-con::before belegt. */
.elementor .mit-instagram::before,
.elementor .mit-pfeil-links::before,
.elementor .insta-icon::after {
  content: ''; flex: none; background: currentColor;
  -webkit-mask: var(--symbol) center / contain no-repeat; mask: var(--symbol) center / contain no-repeat;
}
.elementor .mit-instagram::before { --symbol: url(../icons/instagram-logo.svg); width: 1.15em; height: 1.15em; }
.elementor .mit-pfeil-links::before { --symbol: url(../icons/arrow-left.svg); width: 1.1em; height: 1.1em; transition: transform 200ms var(--ease-out); }
.elementor .insta-icon::after { --symbol: url(../icons/instagram-logo.svg); order: -1; display: block; width: 1em; height: 1em; }
@media (hover: hover) and (pointer: fine) { .elementor .textlink.mit-pfeil-links:hover::before { transform: translateX(4px); } }

/* ---------- /aktuelles/: Karte „Veranstaltungen“ (a.termine) ---------- */
/* WARUM NICHT NATIV: Schleier als Pseudo-Element (Original: transparent 30 % → --lapis 92 %, anders als .kachel::after), Eltern-Hover
   auf Bild und Pfeil, Bewegungskurve var(--ease-out). Bild = e-image [bild-fuellt], Pfeil = div [kachel-pfeil] (lokal background
   var(--auf-tief), color var(--lapis)); Raster, Höhe, Innenabstand, Radius, Farbe stehen nativ an der Karte. */
.elementor .termine::after { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(180deg, transparent 30%, color-mix(in srgb, var(--lapis) 92%, transparent)); }
.elementor .termine .bild-fuellt { transition: transform 700ms var(--ease-out); }
.elementor .termine .kachel-pfeil { transition: transform 300ms var(--ease-out); }
@media (hover: hover) and (pointer: fine) {
  .elementor .termine:hover .bild-fuellt { transform: scale(1.05); }
  .elementor .termine:hover .kachel-pfeil { transform: translate(3px, -3px); }
}

/* ---------- /projekte/: Projekt-Kacheln im Schleifenraster (Theme-Nachträge 3, 6, 7 vom 28.09.2026) ---------- */
/* Die Kacheln sind die Schleifen-Elemente 1188 (Foto) und 1189 (Logo) in Pros Schleifenraster (Seite 1194, ELEMENTOR-UEBERSICHTEN
   10.3); die Hülle jedes Eintrags ist div.e-loop-item – Pro-Markup ohne Stil-Panel. Die Kacheln tragen dieselben Klassen wie auf
   der Startseite (kachel, kachel-logo, kachel-pfeil, zeig), unterscheiden sich aber in drei Punkten von Angebote (Block „Kacheln“):
   WARUM NICHT NATIV:
   – Schleier: Pseudo-Element; projekte/index.astro zeichnet ihn von 30 % auf 88 % (Startseite 35 %/86 %). (0,3,1) über (0,2,1);
     die Logo-Kachel behält display: none aus „.kachel-logo::after“.
   – Bildausschnitt je Karte: Elementor kann keinen Stilwert je Eintrag setzen. Das Foto in 1188 liest nativ im Stil-Panel
     (object-position = Paar {x, y}, je ein Größenwert mit Einheit „custom“) object-position: var(--bild-fokus-x, 50%)
     var(--bild-fokus-y, 50%); die Werte je Projekt schreibt inc/56-uebersichten.php an die Hülle des Schleifen-Elements
     (elementor/document/wrapper_attributes, wie --pf im Shop). Bis 28.09.2026 hieß die Variable --fokus und kollidierte mit dem
     Fokusring-Token aus tokens.css (global.css stellt --fokus auf .kachel um; eine Farbe ist als object-position ungültig →
     50 % 50 % bei allen Karten); bis zur Nachbesserung vom 29.09.2026 stand var(--bild-fokus, 50% 50%) im Feld „Eigenes CSS“.
     Keine Regel hier – der Wert kommt aus dem Markup.
   – Gestaffeltes Einblenden: dist gibt jeder Kachel --i = Position mod 3 (0/1/2 je Reihe: 1., 4., 7. Karte 0; 2., 5., 8. Karte 1;
     3., 6. Karte 2). Im Schleifenraster geht das nur über die Position der Hülle; „.zeig-bereit .elementor .zeig.ist-da“ (Block
     „Einblenden beim Scrollen“) liest var(--i) am Element mit zeig. :nth-of-type statt :nth-child, weil Pro zwischen die Einträge
     <style>-Elemente mit dem CSS der Schleifen-Elemente setzt (gemessen 29.09.2026: style, Eintrag, style, Eintrag … – :nth-child
     zählte sie mit und verschob die Staffel). Bei prefers-reduced-motion setzt derselbe Block transition: none, die Staffel bleibt
     dann ohne Wirkung (wie dist). */
.elementor .e-loop-item > .kachel::after { background: linear-gradient(180deg, transparent 30%, color-mix(in srgb, var(--schleier) 88%, transparent)); }
.elementor div.e-loop-item:nth-of-type(3n + 2) > .zeig { --i: 1; }
.elementor div.e-loop-item:nth-of-type(3n) > .zeig { --i: 2; }

/* ---------- Bewegung und Zeigergeräte ---------- */
/* WARUM NICHT NATIV: prefers-reduced-motion kennt Elementor nicht; Hover nur für Zeigergeräte (Elementor schreibt &:hover ohne Medienabfrage). */
@media (prefers-reduced-motion: reduce) {
  .elementor .termine .bild-fuellt, .elementor .termine .kachel-pfeil, .elementor .mit-pfeil-links::before { transition: none; }
}


/* ================================================================================================================
   PROJEKTSEITEN – FEINSCHLIFF (Theme 3.2, Gegenmessung der acht Projektseiten am 26.09.2026, docs/ELEMENTOR-PILOT.md)
   ================================================================================================================ */

/* ---------- Seitenkopf: Kicker („Projekt im Rückblick“) – KEINE Theme-Regel mehr ---------- */
/* Bis Theme-Nachtrag 7 (Punkt 5, Abnahme funktion-r2-3/-r3-8) stand hier „.elementor .seitenkopf .kicker { color: var(--akzent-auf-tief);
   margin-block-end: 0.75rem }“ (0,3,0). Die Datei lädt nach den lokalen Stilen, die Regel überstimmte deshalb jeden Wert, den der Kunde
   im Editor am Kicker setzt (nachgestellt: lokaler Stil rot/3 rem ohne Wirkung). Farbe und Abstand sind nativ ausdrückbar und stehen
   seit dem 30.09.2026 als lokaler Stil am Kicker von Seite 135 (e-6a32126f-7b4c: Farbvariable akzent-auf-tief, Abstand unten 0,75 rem;
   docs/ELEMENTOR-UEBERSICHTEN.md 10.11). PHP-Ansichten nutzen komponenten.css (.seitenkopf .kicker ohne .elementor), die Startseite
   trägt kicker ohne seitenkopf – die Regel traf nur 135. Wer einen weiteren Kicker in einen Seitenkopf setzt, gibt ihm Farbe und
   Abstand im Editor (lokaler Stil), nicht hier. */

/* ---------- Förderleiste: Fokusring folgt dem Kartenradius ---------- */
/* WARUM NICHT NATIV: :focus-visible kennt Elementor nicht. Die Karte trägt den Radius var(--r-karte) (16 px, Foerderleiste.astro:
   li a) auch mit Fokus; die Sammelregel „Fokusring“ oben setzte hier bis 3.1.1 4 px (gemessen 26.09.2026 per Tab-Taste auf
   /projekte/akitu/, hell und dunkel: 4 px statt 16 px in dist). */
.elementor a.foerder-logo:focus-visible { border-radius: var(--r-karte); }

/* ---------- „Weitere Projekte“: Pfeil der Zeilen ---------- */
/* WARUM NICHT NATIV: ::after. Die Zeilen tragen aktuell-eintrag (Pfeil 1,25 rem wie im Aktuellen-Block); der Maßstab zeichnet
   unter „Weitere Projekte“ das SVG mit 1,2 rem ([slug].astro: .weitere svg { font-size: 1.2rem }, gemessen 19,2 statt 20 px).
   Das nav trägt am Staging keine eigene Klasse – Zeilen in einem nav gibt es sonst nirgends. */
.elementor nav .aktuell-eintrag::after { width: 1.2rem; height: 1.2rem; }
@media (prefers-reduced-motion: reduce) { .elementor nav .aktuell-eintrag::after { transition: none; } }


/* ==================================================================================================================
   BIBLIOTHEK ALS SEITE (Theme 3.2, docs/ELEMENTOR-UEBERSICHTEN.md Abschnitt 9): /bibliothek/ und /bibliothek/katalog/.
   Katalogsuche, Kennzahlen, Register und digitale Dokumente liefern Module (modul-bibliothek.css, cover.css), den Katalog
   das Katalog-Modul (katalog.css); Intro, Logo-Karte, Randspalte, Bänder und Kopfzeilen baut der Umsteller nativ. Hier
   steht nur, was Elementor für diese statischen Teile nicht kann. Quelle: der <style>-Block von src/pages/bibliothek/index.astro.
   ================================================================================================================== */

/* ---------- „Unsere Bibliothek bietet:“ – die Liste mit Stern ---------- */
/* WARUM NICHT NATIV: Die sechs Punkte sind Kundentext in EINEM Absatz-Widget (Tag span, Haken-Klasse bietet-liste) als
   <ul><li>…</li></ul> – Listen sind Inline-HTML ohne Stil-Panel (ELEMENTOR-KLASSEN Regel 3); der Stern ist ein Pseudo-Element
   mit clip-path. Werte wie .bietet-liste, .bietet-liste li und li::before in bibliothek.css; der Umbruch bei 700 px fällt mit
   dem mobilen Umbruchpunkt des Kits zusammen. Breite und Blockfluss des Widgets (display: block; width: 100%) lokal. */
.elementor .bietet-liste ul { list-style: none; margin: 0; padding: 0; width: 100%; border-top: 1px solid var(--linie-stark); }
.elementor .bietet-liste li { position: relative; padding: 0.95rem 0 0.95rem 1.75rem; border-bottom: 1px solid var(--linie); font-size: var(--fs-l); line-height: 1.4; }
.elementor .bietet-liste li::before { content: ''; position: absolute; left: 0; top: 1.4rem; width: 0.7rem; height: 0.7rem; background: var(--blau); clip-path: polygon(50% 0, 62% 38%, 100% 50%, 62% 62%, 50% 100%, 38% 62%, 0 50%, 38% 38%); }
@media (max-width: 700px) {
  .elementor .bietet-liste li { font-size: var(--fs-m); }
  .elementor .bietet-liste li::before { top: 1.25rem; }
}


/* ==================================================================================================================
   AUS DEN ALLGEMEINEN GLOBALEN KLASSEN (28.09.2026, „Klassen, Teil A“ – docs/ELEMENTOR-KLASSEN.md Abschnitt 9)
   Bis dahin standen diese Werte im Feld „Eigenes CSS“ der globalen Klassen btn, textlink, hinweis, titel-1, krumen,
   krume-aktiv und seitenkopf (Vorgabe: kein eigenes CSS in Elementor). WARUM NICHT NATIV: Das Stil-Panel von Elementor 4.3.2
   kennt diese Eigenschaften bzw. Werte nicht und legt sie im Feld „Eigenes CSS“ ab – am 28.09.2026 am Entwurf 1236 („PRÜFSTAND
   Klassen“) mit eigenen Klassen pruefstand-… belegt (erzeugtes global-1236-frontend-desktop.css gelesen): Gewicht 650 (das
   Panel kennt nur Hunderterstufen; 600 speichert es nativ), font-stretch, white-space, text-align: inherit (start speichert es
   nativ), text-wrap, overflow-wrap, isolation.
   NICHT mehr hier (Theme-Nachtrag 12, 29.09.2026): row-gap der Klasse krumen. row-gap ist in Elementor 4.3.2 nativ – Stil-Panel
   Layout → Abstand, Eigenschaft gap vom Typ layout-direction {row, column}; das Staging erzeugt solche Werte schon (lokale Stile
   auf /shop/: „column-gap:1rem;…row-gap:0.25rem“ ohne Leerzeichen = nativ). Nur die SCHNITTSTELLE (manage-classes, CSS-Text)
   legt „row-gap: …“ und „gap: a b“ im Feld „Eigenes CSS“ ab und verwirft bei „gap: a b“ sogar das native column-gap (belegt
   29.09.2026 an shop-karte-zeile/ajm-summe-neben, drei Schreibweisen, danach auf den nativen Stand zurückgesetzt). Teil B setzt
   den Zeilenabstand der Krumen deshalb im Editor (KLASSEN.md 9.4); bis dahin trägt ihn das eigene CSS der Klasse.
   Nativ in Elementor bleiben bzw. wandern (Teil B): alle übrigen Werte der Klassen, beim Seitenkopf die Innenabstände
   (padding-block-start/-end clamp(2.5rem, 6vw, 4.5rem), padding-inline-start/-end 0 – am Prüfstand nativ gespeichert) und
   die Ausrichtung von btn/textlink: text-align: start (nativ; „inherit“ legt das Panel im Feld „Eigenes CSS“ ab). Wo ein
   Knopf bis dahin „center“ erbt – Kontakt „Karte von OpenStreetMap laden“, Mesopod und Shooshla „… laden“ und „Direkt bei …
   öffnen“ (medien-platz), Warenkorb „Zum Shop“ (ajm-korb-leer) –, gehört text-align: center als lokaler Stil ans Element
   (= dist: <button> zentriert im Browser-Grundstil, <a> erbt die Mitte): an Kontakt seit 28.09.2026 gesetzt, an Warenkorb,
   Mesopod und Shooshla erst unmittelbar vor Teil B (KLASSEN.md 9.4 Schritt 0b; der Warenkorb ist eine Shop-Seite, die
   Projektseiten werden parallel umgebaut). KEINE Theme-Regel für text-align: Sie müsste Elementors
   Grundstil „.elementor .e-button-base { text-align: center }“ (0,2,0, base-desktop.css) schlagen, läge damit selbst auf (0,2,0)
   und – weil diese Datei NACH den lokalen Stilen lädt – über jeder Ausrichtung, die der Kunde im Editor setzt (Prüfung
   Runde 1, teil-a-r1-1: lokaler Stil text-align: right am Knopf „Zum Shop“ ergab mit der Regel center).
   Werte verbatim wie bis dahin in den Klassen (= dist: global.css .btn/.textlink/.hinweis, PageHeader.astro .seitenkopf,
   .seitenkopf h1, .seitenkopf .krumen ol/[aria-current]).
   Rangfolge wie bis dahin im Feld der Klasse (.elementor .klasse, 0,2,0 – vor den lokalen Stilen der Elemente geladen). Weil
   diese Datei nach den lokalen Stilen lädt, liegt jede Regel dieses Blocks bewusst UNTER (0,2,0) (BAUPLAN Abschnitt 9, Regel 3,
   Ausnahme); kein Grundstil von Elementor (base-desktop.css) setzt eine dieser Eigenschaften:
   – Schrift, Umbruch: :where(.elementor) + Element.Klasse (0,1,1): über global.css (.btn 0,1,0 und .prosa a 0,1,1 –
     „.prosa a { font-weight: 600 }“ gewänne gegen 0,1,0, heute verliert es gegen die Klasse), unter jedem lokalen Stil
     (.elementor .e-…, 0,2,0), der wie heute gewinnt (z. B. font-weight: 600 am Textlink in prosa, Partner & Förderer; der
     Umbruch des Knopfs „Karte laden“ steht seit Runde 2 im Block „Kontakt“ oben, nicht mehr im lokalen Stil). Die Klassen
     hängen nur an a/button (Schaltflächen-Widget, Modul-Markup) und span/p (Absatz-Widget); für hinweis (div/p), krumen
     (div/nav), krume-aktiv (span), seitenkopf (section) gibt es keine Theme-Regel mit 0,1,1 zur selben Eigenschaft, deshalb
     dort :where(.elementor) .klasse (0,1,0).
   – „.elementor [class*='ajm-modul-'] button.btn { text-align: center }“ (0,3,1, Block „Module“) bleibt für Modul-Knöpfe
     stärker als Klasse und lokaler Stil.
   – krumen: keine Theme-Regel (row-gap nativ, siehe oben).
   ================================================================================================================== */
:where(.elementor) :is(a, button, span, p).btn { font-weight: 650; font-stretch: 100%; white-space: nowrap; }
:where(.elementor) :is(a, button, span, p).textlink { font-weight: 650; font-stretch: 100%; }
:where(.elementor) .hinweis { text-wrap: pretty; }
:where(.elementor) .titel-1 { overflow-wrap: break-word; }
:where(.elementor) .krume-aktiv { font-weight: 650; }
:where(.elementor) .seitenkopf { isolation: isolate; }


/* ==================================================================================================================
   STARTSEITE ALS DOKUMENT (Theme 3.3.0, 30.09.2026, docs/ELEMENTOR-UEBERSICHTEN.md Abschnitt 12): Seite 57 als Elementor-
   Dokument. Hero, Willkommen, Kacheln, Medien, Wege und Partner stehen nativ im Dokument (Klassen des Piloten 238); der
   Aufmacher ist das Modul ajm-modul-aufmacher (modul-aktuelles.css), Positionspapier-Verweise und Shop-Teaser sind Pros
   V4-Schleifen (e-collection-loop) mit Karten im Dokument. Hier steht nur, was Elementor dafür nicht kann.
   ================================================================================================================== */

/* ---------- Startseite: Shop-Teaser (Schleife) ---------- */
/* WARUM NICHT NATIV: Die Schnittstelle legt overflow-x, scroll-snap-type, scroll-padding-inline, scrollbar-width und
   scroll-snap-align im Feld „Eigenes CSS“ ab (Rohdaten Prüfstand 1330, custom_css.raw; Vorgabe: leer). overflow: auto ist
   nativ und ersetzt overflow-x (eine nicht sichtbare Achse macht die andere auto); Raster, Spaltenbreite, Abstände,
   Innen- und Außenabstand mit var(--rand) stehen nativ am Schleifen-Layout (Haken-Klasse ajm-shop-leiste, Attribute
   tabindex/aria-label nativ). Rangfolge (0,1,0) bzw. (0,1,0)+*, unter jedem Stil des Kunden (wie der Block „AUS DEN
   ALLGEMEINEN GLOBALEN KLASSEN“). Werte wie .shopband .shop-leiste in startseite.css (index.astro). */
:where(.elementor) .ajm-shop-leiste { scroll-snap-type: x proximity; scroll-padding-inline: var(--rand); scrollbar-width: thin; }
:where(.elementor) .ajm-shop-leiste > * { scroll-snap-align: start; }
/* WARUM NICHT NATIV: :focus-visible kennt Elementor nicht. Die Leiste ist per tabindex="0" fokussierbar (Tastatur scrollt sie); global.css
   rundet den Fokusring (":focus-visible { border-radius: 4px }", 0,1,0), Elementors Grundstil des Containers setzt den Radius auf 0 (0,2,0) –
   gemessen 30.09.2026: 0 statt 4 px wie in dist (ul.shop-leiste). Gleiches Muster wie der Block „Reparaturen an Elementors all: unset“. */
.elementor .ajm-shop-leiste:focus-visible { border-radius: 4px; }

/* ---------- Startseite: Staffel der Einblendung ---------- */
/* WARUM NICHT NATIV: --i ist Bewegung (Verzögerung 60 ms je Stufe für die Klasse zeig, Block „Einblenden beim Scrollen“)
   und als lokaler Stil Eigenes CSS (Vorgabe: leer; im Pilot 238 trugen 13 lokale Stile „--i: n“). Die Werte hängen an der
   Position wie in index.astro (Logo und Textspalte 1; Kacheln 0…3; zweite Medienspalte 1; zweite Wege-Karte 1; Papiere 1…4,
   hier bis 6 vorgesehen). Die Schleife kann keinen Wert je Eintrag (10.6 Nr. 7). Seit der Nachbesserung Runde 2
   (30.09.2026, ELEMENTOR-UEBERSICHTEN.md 12.10) liegt jede Kachel wie in dist (ul > li > a) in einem Listeneintrag:
   Div-Block mit role="listitem" (nativ, Feld „Attributes“) im Raster mit role="list"; gezählt wird deshalb der Eintrag,
   der Wert steht weiter am a.kachel (dort sitzt zeig). Die Kacheln von /projekte/ liegen in Pros V3-Schleifenraster
   (div.e-loop-item, ebenfalls role="listitem") und bleiben über :not(.e-loop-item) außen vor (dist staffelt dort nicht);
   die Papiere auf /aktuelles/ liegen im loop-grid, nicht in e-collection-loop-layout-base. :nth-of-type bei den Schleifen-
   Einträgen, falls Pro einmal <style> zwischen die Einträge setzt (wie beim Schleifenraster, 10.6 Nr. 7). Erster Eintrag
   und erste Kachel bleiben ohne Wert (= --i 0, dist ebenso). :where() hält die Rangfolge bei (0,2,0). */
.elementor .willkommen-logo, .elementor .willkommen-text { --i: 1; }
.elementor :where([role="listitem"]:not(.e-loop-item):nth-child(2)) > .kachel { --i: 1; }
.elementor :where([role="listitem"]:not(.e-loop-item):nth-child(3)) > .kachel { --i: 2; }
.elementor :where([role="listitem"]:not(.e-loop-item):nth-child(4)) > .kachel { --i: 3; }
.elementor .medien-spalte:nth-child(2) { --i: 1; }
.elementor .weg:nth-child(2) { --i: 1; }
.elementor .e-collection-loop-layout-base > :nth-of-type(1) > .aktuell-eintrag { --i: 1; }
.elementor .e-collection-loop-layout-base > :nth-of-type(2) > .aktuell-eintrag { --i: 2; }
.elementor .e-collection-loop-layout-base > :nth-of-type(3) > .aktuell-eintrag { --i: 3; }
.elementor .e-collection-loop-layout-base > :nth-of-type(4) > .aktuell-eintrag { --i: 4; }
.elementor .e-collection-loop-layout-base > :nth-of-type(5) > .aktuell-eintrag { --i: 5; }
.elementor .e-collection-loop-layout-base > :nth-of-type(6) > .aktuell-eintrag { --i: 6; }

/* ---------- Startseite: Hero-Typografie ---------- */
/* WARUM NICHT NATIV: Gewicht 650 (das Panel kennt nur Hunderterstufen) und font-stretch landen im Feld „Eigenes CSS“
   (KLASSEN.md 9.8, SHOP.md 17; im Pilot 238 als Eigenes CSS am Kicker und an der h1). Haken-Klassen hero-kicker und
   hero-titel (Namen wie Hero.astro), Muster wie team-name (KLASSEN.md 9.7): (0,1,0), unter jedem lokalen Stil des Kunden.
   Werte wie .hero .hero-kicker / .hero h1 in startseite.css. Familie, Größe, Farbe, Laufweite, Zeilenhöhe, Versalien und
   Abstände stehen nativ am Element. */
:where(.elementor) .hero-kicker { font-weight: 650; }
:where(.elementor) .hero-titel { font-weight: 650; font-stretch: 78%; }

/* ---------- Startseite: Werte aus dem Feld „Eigenes CSS“ der Pilot-Klassen (Nachbesserung Runde 1, 30.09.2026, bauen-r1-4) ---------- */
/* WARUM NICHT NATIV: 22 globale Klassen der Startseite trugen seit dem Pilot 238 Werte im Feld „Eigenes CSS“ (Vorgabe: leer; belegt am
   erzeugten global-238-frontend-desktop.css, angehängtes „\n“): Gewicht 650 (das Panel kennt nur Hunderterstufen), font-stretch, isolation,
   overflow: clip, min-height: inherit, row-gap (nur im Editor nativ, KLASSEN.md 9.8), font-variant-numeric, text-wrap (KLASSEN.md 9.1).
   Muster wie der Block „AUS DEN ALLGEMEINEN GLOBALEN KLASSEN“ (KLASSEN.md 9, Teil A/B): Rangfolge (0,1,0), unter jedem lokalen Stil des
   Kunden; kein Grundstil von Elementor setzt eine dieser Eigenschaften (base-desktop.css: .e-div-block-base nur min-width, padding, display;
   .e-paragraph-base nur margin – am 30.09.2026 an 238 nachgelesen). Werte verbatim wie bis dahin in den Klassen (= dist: startseite.css,
   komponenten.css). Nativ in Elementor bleiben bzw. wandern: alles Übrige der Klassen; bei partner-logo place-items als align-items +
   justify-items, bei aktuell-eintrag border-style/-color (Rahmen je Seite) und column-gap (Teil B); scroll-snap-align der shop-karte entfällt
   (dist: am li = Schleifen-Eintrag, oben „.ajm-shop-leiste > *“). Haken ohne Stil (zeig, dekorativ, kachel-logo-bild, weg-jugend) sind
   geleert (KLASSEN.md 3.1; Skripte und dieses Stylesheet greifen am Klassennamen, kein Code liest --zeig/--haken/--weg). Klassen, die auch
   auf ausgelieferten Seiten stehen (kachel 1194; kachel-titel 61, 1194; medien-titel/medien-platz 63, 140, 144; kicker 135; kopfzeile 62;
   aktuell-eintrag/-titel 58, 114–149; aktuell-meta 58 – Crawl 30.09.2026), behalten ihr Feld bis zum Upload dieses Themes (Falle,
   KLASSEN.md 9: sonst sähen diese Seiten bis dahin falsch aus); bis dahin doppeln die Regeln hier nur (Teil B: ELEMENTOR-UEBERSICHTEN.md 12.9). */
:where(.elementor) .hero { isolation: isolate; overflow: clip; }
:where(.elementor) :is(.kachel, .weg) { isolation: isolate; }
:where(.elementor) :is(.kachel-titel, .medien-titel) { font-stretch: 84%; }
:where(.elementor) .kicker { font-weight: 650; font-stretch: 100%; }
/* kopfzeile (row-gap 1rem) und aktuell-eintrag (row-gap 0.3rem): seit der Schlussabnahme Runde 1, Gruppe „seiten-rest“ (03.10.2026,
   vorgabe-r1-6) NATIV in den Klassen – Stil-Panel, Layout → Lücken entkoppelt (gap als layout-direction {Spalte 2rem/Zeile 1rem bzw.
   Spalte 1rem/Zeile 0.3rem}); die doppelte Einzeleigenschaft column-gap ist per manage-classes entfernt. Die beiden Regeln hier sind
   gestrichen (ELEMENTOR-UEBERSICHTEN.md 10.17). */
:where(.elementor) .fakt-begriff { font-weight: 650; text-wrap: wrap; }
:where(.elementor) .fakt-wert { font-weight: 650; font-stretch: 92%; text-wrap: wrap; }
:where(.elementor) .medien-platz { min-height: inherit; }
:where(.elementor) .aktuell-eintrag-titel { font-weight: 650; font-stretch: 88%; }
:where(.elementor) :is(.aktuell-meta, .shop-name) { font-weight: 650; }
:where(.elementor) .shop-preis { font-variant-numeric: tabular-nums; }
/* WARUM NICHT NATIV: background-color: var(--logo-grund) nimmt der Klassen-Parser nicht (belegt 30.09.2026: replace an willkommen-logo legte
   den Wert wieder im Feld „Eigenes CSS“ ab – --logo-grund ist ein Theme-Token aus tokens.css, keine Elementor-Variable, anders als
   --flaeche-2 bei hinweis). Wert wie .willkommen-logo in startseite.css; das Token wechselt mit dem Farbschema. */
:where(.elementor) .willkommen-logo { background-color: var(--logo-grund); }


/* ==================================================================================================================
   THEME-BUILDER-VORLAGEN „AJM – Fehlerseite 404“ (Elementor-Dokument 1497) und „AJM – Einzelbeitrag“ (1498)
   Schlussabnahme Runde 1, Gruppe „seiten-rest“ (03.10.2026, vorgabe-r1-1/-2; ELEMENTOR-UEBERSICHTEN.md 10.17). Texte, Raster,
   Abstände, Farben und Schriftgrößen stehen nativ in den globalen Klassen fehlseite, fehl-raster, fehl-code, fehl-vorspann,
   fehl-suche, fehl-nav-titel, fehl-nav-liste, fehl-nav-eintrag, fehl-link, beitrag-fuss, verweis, verweis-icon,
   beitrag-rand-titel, beitrag-rand-text, beitrag-mitmachen und in lokalen Stilen. Werte aus komponenten.css (404) und
   aktuelles.css (Beitrag) = dist (404.astro, aktuelles/[slug].astro). Hier steht nur, was Elementor nicht kann.
   ================================================================================================================== */

/* WARUM NICHT NATIV: Gewicht 650 (das Stil-Panel kennt nur Hunderterstufen) und font-stretch kennt das Stil-Panel nicht
   (KLASSEN.md 9.1). Rangfolge (0,1,0) wie im Block „Startseite: Werte aus dem Feld“: unter jedem lokalen Stil des Kunden. */
:where(.elementor) .fehl-code { font-weight: 650; font-stretch: 100%; }
:where(.elementor) .fehl-link { font-weight: 650; font-stretch: 88%; }
:where(.elementor) :is(.fehl-nav-titel, .beitrag-rand-titel) { font-stretch: 100%; }

/* WARUM NICHT NATIV: Pfeil als Pseudo-Element mit Maske (Elementor-Schaltflächen nehmen keine Kinder auf, die Mediathek hat keine
   SVG); Farbe --blau und Bewegung beim Überfahren nur für Zeigergeräte wie in dist (.fehlseite .fehl-nav a svg); Elementor schreibt
   &:hover ohne Medienabfrage und zugleich für :focus-visible – der Tastaturfokus zeigt in dist nur den Ring in --auf-tief. */
.elementor .fehl-link::after {
  content: ''; flex: none; width: 1em; height: 1em; background: var(--blau);
  -webkit-mask: url(../icons/arrow-right.svg) center / contain no-repeat; mask: url(../icons/arrow-right.svg) center / contain no-repeat;
  transition: transform 220ms var(--ease-out);
}
@media (hover: hover) and (pointer: fine) { .elementor .fehl-link:hover::after { transform: translateX(5px); } }
@media not ((hover: hover) and (pointer: fine)) { .elementor a.fehl-link:hover { color: var(--auf-tief); } }
.elementor a.fehl-link:focus-visible:not(:hover) { color: var(--auf-tief); }
/* Ring in --auf-tief wie dist; die Klasse setzt border-radius: 0 (Grundstil der Schaltfläche) und löscht damit auch die Rundung
   des Rings aus global.css (4px) – wie bei textlink/bereich-link oben. */
.elementor a.fehl-link:focus-visible { outline-color: var(--auf-tief); border-radius: 4px; }
@media (prefers-reduced-motion: reduce) { .elementor .fehl-link::after { transition: none; } }

/* WARUM NICHT NATIV: Innenmarkup des Moduls ajm-modul-suchfeld (inc/70-suche.php). Auf dem dunklen Grund wird nur die Beschriftung
   hell, das Feld behält seine Fläche (dist: .fehlseite .fehl-suche label / .suchfeld-zeile). Grundstil des Suchfelds: Block „Suchfeld“
   aus komponenten.css, vom Modul als Inline-Stil mitgebracht. */
.elementor .fehl-suche .suchfeld label { color: var(--auf-tief); }
.elementor .fehl-suche .suchfeld-zeile { border-color: transparent; }

/* WARUM NICHT NATIV: Innenmarkup des Moduls ajm-modul-beitrag-meta (single.php): Datum, Kategorien, Instagram-Verweis – Werte wie
   .ajm-beitrag .kopf-meta … in aktuelles.css (dist aktuelles/[slug].astro); Hover nur für Zeigergeräte. */
.elementor .kopf-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem 1.5rem; margin-top: 1.5rem; }
.elementor .kopf-meta .datum { display: inline-flex; align-items: center; gap: 0.5rem; font: 650 var(--fs-s) / 1 var(--font-display); font-stretch: 100%; letter-spacing: 0.04em; color: var(--auf-tief); font-variant-numeric: tabular-nums; }
.elementor .kopf-meta .datum svg { font-size: 1.2rem; color: var(--blau); }
.elementor .kopf-tags { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.4rem; }
.elementor .kopf-tags .tag { min-height: 2.75rem; padding-inline: 0.95rem; transition: background-color 160ms ease, color 160ms ease; }
.elementor .kopf-insta { display: inline-flex; align-items: center; gap: 0.45rem; min-height: 2.75rem; color: var(--auf-tief); font-weight: 600; font-size: var(--fs-s); }
.elementor .kopf-insta svg { font-size: 1.2rem; }
@media (hover: hover) and (pointer: fine) {
  .elementor .kopf-tags .tag:hover { background: var(--blau); color: var(--auf-akzent); }
  .elementor .kopf-insta:hover { text-decoration-thickness: 2px; }
}

/* WARUM NICHT NATIV: Innenmarkup des Moduls ajm-modul-beitrag-bild (div.huelle.held > img aus der Mediathek; Lage und Rang trägt die
   globale Klasse held). Schatten mit einem Token, das mit dem Farbschema wechselt (--schatten-hoch). */
.elementor .held > img { display: block; width: 100%; height: clamp(15rem, 44vw, 34rem); object-fit: cover; border-radius: var(--r-karte); box-shadow: var(--schatten-hoch); }

/* WARUM NICHT NATIV: Beitragstext aus dem Pro-Widget „Beitragsinhalt“ (Inhalt des WordPress-Editors, keine Elementor-Elemente):
   Abstände über Geschwister-Selektoren wie .prosa > * + * in global.css – das Widget liegt zwischen .prosa und den Absätzen, die
   Kind-Selektoren von global.css greifen deshalb nicht. Gleiche Rangfolge wie global.css ((0,1,0) bzw. (0,2,0)), damit .prosa h2/h3
   (0,1,1) weiter gewinnen. Erster Absatz größer wie .ajm-beitrag .beitrag-text .prosa p:first-child. */
.elementor-widget-theme-post-content > * + * { margin-top: 1.15em; }
.elementor-widget-theme-post-content > :first-child { margin-top: 0; }
.elementor .beitrag-text .prosa p:first-child { font-size: var(--fs-l); line-height: 1.5; }
/* Das Pro-Widget bringt die Text-Typografie des Kits mit („font-family: var(--e-global-typography-text-font-family), Sans-serif“, post-<id>.css,
   (0,1,0)) – dieselbe Schrift wie der Fließtext, aber mit angehängtem „Sans-serif“; hier erbt es wie in dist die Schrift von .prosa. */
.elementor .beitrag-text .elementor-widget-theme-post-content { font-family: inherit; }

/* WARUM NICHT NATIV: Pfeil vor „Zurück zu Aktuelles“ (mit-pfeil-links) im Knopf 1.15em groß wie .btn svg in global.css (die Klasse
   setzt 1.1em für Textlinks). Fokusfarbe: dist setzt --fokus: var(--fokus-auf-tief) für .fuss (global.css) – das gilt dort auch für den
   Fuß des Beitragstexts; die Klasse heißt hier beitrag-fuss. Schatten des Kastens „Unsere Mitgliedsgruppen“ mit Token (--schatten,
   wechselt mit dem Farbschema). Symbol des Kastens als Maske. Leerer Ortsgruppen-Zusatz (dynamisches Feld leer) entfällt wie in dist.
   Der Link „info@…“ im Absatz-Widget steht auf „all: unset“ (Block „Links und Listen als Inline-HTML“) und bekommt Farbe,
   Unterstreichung und Gewicht 600 wie .ajm-beitrag .mitmachen p a in dist zurück. */
.elementor .btn.mit-pfeil-links::before { width: 1.15em; height: 1.15em; }
.elementor .beitrag-fuss { --fokus: var(--fokus-auf-tief); }
.elementor .verweis { box-shadow: var(--schatten); }
.elementor .verweis-icon { background: currentColor; -webkit-mask: url(../icons/users-three.svg) center / contain no-repeat; mask: url(../icons/users-three.svg) center / contain no-repeat; }
.elementor .beitrag-rand-text:empty { display: none; }
.elementor .beitrag-mitmachen .e-paragraph-base a:not([class]) { color: var(--akzent-text); text-decoration-line: underline; text-decoration-thickness: 1px; text-underline-offset: 0.18em; cursor: pointer; font-weight: 600; overflow-wrap: anywhere; }
@media (hover: hover) and (pointer: fine) { .elementor .beitrag-mitmachen .e-paragraph-base a:not([class]):hover { text-decoration-thickness: 2px; } }

/* WARUM NICHT NATIV: Bedingungen über Beitragsdaten (Anzeigebedingungen lassen sich über die Schnittstelle nicht setzen und hängen
   am Editor-Speichern). Der Kasten „Unsere Mitgliedsgruppen“ (Haken ajm-nur-ortsgruppen) erscheint nur bei Beiträgen der Kategorie
   Ortsgruppen – Elementor Pro schreibt die Beitragsklassen (category-…) an die Hülle der Einzelvorlage. Der Abschnitt „Weitere
   Beiträge“ entfällt ganz, wenn das Modul ajm-modul-weitere-beitraege leer ist (das Theme blendet den leeren Container aus). */
.elementor-location-single:not(.category-ortsgruppen) .ajm-nur-ortsgruppen { display: none; }
.elementor .e-div-block-base:has(> .e-div-block-base > .ajm-modul-weitere-beitraege[style*="display:none"]) { display: none; }

/* WARUM NICHT NATIV: Innenmarkup des Moduls ajm-modul-weitere-beitraege (ul.weitere-liste mit template-parts/beitrag-karte; die Karten
   bringen modul-aktuelles-liste.css mit). Werte wie .ajm-beitrag .weitere-liste in aktuelles.css. */
.elementor .weitere-liste { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(2rem, 4vw, 3.5rem) clamp(1.25rem, 2.5vw, 2rem); }
@media (max-width: 1023px) { .elementor .weitere-liste { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 699px) { .elementor .weitere-liste { grid-template-columns: 1fr; } }
