/* ==========================================================================
   BAUWERT Unterseiten-Motion — "Ruhige Präzision"
   Wird NUR auf den öffentlichen Unterseiten eingebunden (nicht index.html).
   subpage-motion.js löst dort AOS + .reveal-up ab und steuert diese Klassen.
   Alle Zustände hängen am Gate html.bw-motion, das ausschließlich das Skript
   setzt (nie ohne JS, nie bei prefers-reduced-motion, nie ohne
   IntersectionObserver). Ohne Gate ist jedes Element sofort sichtbar.
   ========================================================================== */

html.bw-motion .bwm {
    opacity: 0;
    transform: translate3d(0, 18px, 0);
    transition:
        opacity 0.65s cubic-bezier(0.22, 1, 0.36, 1),
        transform 0.65s cubic-bezier(0.22, 1, 0.36, 1);
    transition-delay: var(--bwm-delay, 0ms);
}

/* Bildflächen setzen sich minimal weicher (leichte Skalierung, längerer Lauf) */
html.bw-motion .bwm--media {
    transform: translate3d(0, 18px, 0) scale(0.985);
    transition-duration: 0.85s, 0.85s;
}

/* Elemente, die schon beim Seitenaufbau im Viewport stehen, blenden nur weich
   ein — ohne Verschiebung oder Skalierung. Bewegung gibt es erst beim Scrollen. */
html.bw-motion .bwm--flat {
    transform: none;
    transition: opacity 0.5s ease-out;
}

html.bw-motion .bwm.bwm-in {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}

/* Während einer Cross-Document View Transition übernimmt die Transition die
   erste Bewegung — Elemente im ersten Viewport erscheinen dann ohne zweite,
   eigene Einblendung (gleiches Muster wie für [data-aos] in style.css). */
html.bw-cross-page-enter .bwm {
    transition: none !important;
}

/* Doppelter Boden zusätzlich zur JS-Prüfung */
@media (prefers-reduced-motion: reduce) {
    html.bw-motion .bwm {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}
