/**
 * agenic Widgets — Zentraler Startzustand der Einblendung (Standardmuster
 * Figma 0.7 · Animation, node 1233:44).
 *
 * WARUM ES DIESE DATEI GIBT
 * Die Einblendung besteht aus zwei Haelften: `assets/js/reveal.js` setzt die
 * Klasse `is-inview`, sobald das Ziel den Ausloesepunkt erreicht — und das CSS
 * liefert den Startzustand davor (unsichtbar, ein Stueck nach unten versetzt).
 * Das Skript ist seit 3.12.1 zentral, der Startzustand stand bis 3.79.0 in
 * jeder Komponenten-CSS einzeln. Wer ihn beim Bauen eines neuen Widgets
 * vergass, bekam ein Widget, das `data-ag-anim="reveal"` sendet, sich aber nie
 * versteckt — und darum auch nie einblendet. Der Fehler ist unsichtbar: nichts
 * bricht, es passiert nur nichts.
 *
 * Gemessen am 24.08.2026: 37 Bausteine senden das Merkmal, 24 hatten den
 * Startzustand, 13 nicht (ag-card-grid, ag-faq, ag-stats-section,
 * ag-media-text-section, ag-media-card-list, ag-media-text-list, ag-media-text,
 * ag-form-panel, ag-form-block, ag-intro-media, ag-table-cta,
 * ag-logo-stats-testimonial, ag-subnavi). Diese Datei schliesst die Luecke
 * ein fuer alle Mal — auch fuer jedes kuenftige Widget.
 *
 * VERHAELTNIS ZU DEN 24 BESTEHENDEN BLOECKEN
 * Sie bleiben und gewinnen weiterhin. Der Selektor hier traegt genau eine
 * Klasse und ein Attribut, die Komponentenbloecke zusaetzlich ihre eigene
 * Klasse — sie sind spezifischer und ueberschreiben diese Basis. Wer eine
 * Komponente abweichend einblenden will (andere Distanz, andere Dauer, ein
 * gestaffelter Aufbau), tut das weiterhin in ihrer eigenen CSS.
 *
 * TOKENS
 * Bewusst L2 (`--motion-*`) statt einer L3-Variablen `--ag-reveal-*`: Die
 * globale Motion-Einstellung (agenic Design → Motion) legt ihren Override als
 * `--motion-reveal` / `--motion-ease-standard` direkt auf
 * `[data-ag-anim="reveal"]` (includes/settings/frontend.php). Eine eigene
 * L3-Ebene dazwischen wuerde diesen Weg kappen.
 *
 * OHNE JS PASSIERT NICHTS: Alle Regeln haengen an `html.ag-anim-ready`, und
 * die Klasse setzt erst `reveal.js` selbst. Bleibt das Skript aus, bleibt der
 * Inhalt sichtbar — dauerhafte Unsichtbarkeit ist ausgeschlossen.
 */

/* Uebergang — liegt auf dem Ziel dauerhaft, damit auch der Rueckweg
   (Editor-Vorschau, erneutes Rendern) weich laeuft. */
html.ag-anim-ready [data-ag-anim="reveal"] {
    transition: opacity var(--motion-reveal) var(--motion-ease-standard),
                transform var(--motion-reveal) var(--motion-ease-standard);
}

/* Startzustand — gilt, bis reveal.js `is-inview` setzt. */
html.ag-anim-ready [data-ag-anim="reveal"]:not(.is-inview) {
    opacity: 0;
    transform: translateY(var(--motion-distance-reveal));
}

/* ── Zweite Art: `inhalt` — Flaeche steht, nur der Inhalt faehrt herein ──
 *
 * WARUM
 * Bei Sektionen mit eigener Hintergrundflaeche (Hero, Kartenraster,
 * Medien-Kartenliste, Kennzahlen-Sektion, FAQ) verschiebt die einfahrende
 * Flaeche die ganze Seitenkante mit. Seit 3.139.0 gibt es deshalb den zweiten
 * Wert: Die Flaeche steht sofort, bewegt wird nur ihr Inhalt (Auftrag Vincent,
 * 28.08.2026). Auslieferungszustand ist `inhalt` — einstellbar unter
 * „agenic Design → Motion → Hintergrundflaechen", je Instanz im Elementor-
 * Stil-Tab unter „Animation → Hintergrundflaeche".
 *
 * WARUM `> *` UND NICHT `__inner`
 * Der Selektor bleibt widgetneutral wie der Rest dieser Datei — sonst muesste
 * jede neue Sektion hier nachgetragen werden, und genau dieses Vergessen war
 * der Grund fuer die Datei (siehe Kopf). Voraussetzung ist ein einziges Kind
 * unter der Wurzel, das den gesamten Inhalt traegt. Genau das pruefen die
 * Widgets ueber AgWidgetBase::ag_hat_trennbare_flaeche(): Nur wer dort `true`
 * zurueckgibt, sendet `inhalt` — kein Widget geraet also versehentlich hierher.
 *
 * DAUER UND EASING
 * Die Variablen liegen auf der WURZEL (`[data-ag-anim="inhalt"]`, gesetzt in
 * includes/settings/frontend.php) und werden nach innen vererbt. Das bewegte
 * Kind erbt sie mit — deshalb greift die globale Motion-Einstellung hier
 * genauso wie bei `reveal`. */

html.ag-anim-ready [data-ag-anim="inhalt"] > * {
    transition: opacity var(--motion-reveal) var(--motion-ease-standard),
                transform var(--motion-reveal) var(--motion-ease-standard);
}

html.ag-anim-ready [data-ag-anim="inhalt"]:not(.is-inview) > * {
    opacity: 0;
    transform: translateY(var(--motion-distance-reveal));
}

/* Barrierefreiheit: Wer Bewegung abbestellt hat, sieht den Inhalt sofort und
   ohne Versatz — nicht etwa gar nicht. */
@media (prefers-reduced-motion: reduce) {
    html.ag-anim-ready [data-ag-anim="reveal"],
    html.ag-anim-ready [data-ag-anim="reveal"]:not(.is-inview),
    html.ag-anim-ready [data-ag-anim="inhalt"] > *,
    html.ag-anim-ready [data-ag-anim="inhalt"]:not(.is-inview) > * {
        transition: none;
        transform: none;
        opacity: 1;
    }
}
