@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
  /* ── Reduced motion ────────────────────────────────────────────────
     editor.css carries nine targeted prefers-reduced-motion guards, but they
     only cover the editor. Everything outside it animates unconditionally:
     the sidebar's staggered nav entrance, the profile dropdown, toasts, and
     the public snapshot page's glassSlide / livePulse — plus every
     hover:-translate-y and hover:scale across the app chrome.

     Near-zero durations rather than `animation: none`, and the distinction
     matters: `none` means animationend and transitionend never fire, and three
     controllers listen for them (toast_controller's dismiss, board_drag's
     settle, drag_controller's .fr-drop-landed cleanup). The first two carry
     their own fallback timers; drag_controller's does not — so under
     editor.css's existing `animation: none` guard a reduced-motion user is
     left with a stuck .fr-drop-landed class after every drop. 0.01ms is
     imperceptible AND still fires the event, so this deliberately supersedes
     those rules and fixes that along the way.

     !important is load-bearing: `*` has zero specificity and would otherwise
     lose to essentially every rule in the app. */
  @media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
      animation-duration: 0.01ms !important;
      animation-iteration-count: 1 !important;
      transition-duration: 0.01ms !important;
      scroll-behavior: auto !important;
    }
  }
}
