/* === /assets/css/transitions.css — layout-level route cross-fade (C186 A4) ===
 *
 * 150ms opacity fade-OUT on navigation. Honors reduced-motion.
 *
 * ROBUSTNESS (2026-07-04): visibility NEVER depends on JavaScript or on an
 * animation completing. The original rule was `body { opacity: 0 }`, which
 * required transitions.js to fade the page back in — so any page shipped
 * without the paired JS (or where the JS 404'd) rendered permanently BLANK.
 * That bug shipped twice (thank-you, notes). An `opacity:0 → 1` fade-IN was
 * then tried, but any fade that *starts* at opacity 0 can strand the page
 * invisible if the animation is interrupted/throttled before it completes —
 * the same failure class. So there is deliberately no fade-in: the page is
 * always fully opaque, and JS adds only a fade-OUT on link click as pure
 * progressive enhancement. If JS never runs, links simply navigate instantly.
 *
 * Behavior:
 *   - Every page: body opacity 1, always. No JS, no animation required.
 *   - Link click: transitions.js sets body.style.opacity = '0'; the
 *     `transition` animates the fade-out, then navigates.
 *   - prefers-reduced-motion: reduce → no transition; links snap.
 */

body { opacity: 1; }

@media (prefers-reduced-motion: no-preference) {
  body { transition: opacity 150ms ease-out; }
}
