/* ============================================================================
   File:        _rc-animations.css
   Purpose:     Canonical @keyframes library for ReportCenter. Global rules so
                every component can reference an animation name without
                duplicating it in scoped CSS (the prior "reference only" file
                under Components/Shared/Styles/ never got loaded — this is the
                authoritative replacement).
   Consumes:    Nothing (pure keyframe definitions).
   Rendered by: Any Rc* component that references `animation: rc-<name> ...`.
                Shared primitives that ship keyframes: RcButton (rc-spin for
                IsBusy spinner), RcModal (rc-fadeIn/Out + rc-slideInLeft/Out).
   Loaded via:  <link> in Pages/_Layout.cshtml (second in the rc-* block).
   Layer:       2 (shared primitives — animation library).
   Easing:      cubic-bezier(0.4, 0, 0.2, 1) — Material Design standard curve.
   Reduced-motion behavior lives in each consumer's CSS (not here), because
   only a consumer knows which animations it is actively running.
   ============================================================================ */

/* Modal backdrop + generic opacity fades. */
@keyframes rc-fadeIn  { from { opacity: 0; } to   { opacity: 1; } }
@keyframes rc-fadeOut { from { opacity: 1; } to   { opacity: 0; } }

/* Modal container — mobile bottom-sheet entrance/exit. */
@keyframes rc-slideUp   { from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
@keyframes rc-slideDown { from { transform: translateY(0);    opacity: 1; } to { transform: translateY(100%); opacity: 0; } }

/* Modal container — desktop side-panel entrance/exit (left-aligned). */
@keyframes rc-slideInLeft   { from { transform: translateX(-100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
@keyframes rc-slideOutLeft  { from { transform: translateX(0);    opacity: 1; } to { transform: translateX(-100%); opacity: 0; } }

/* Modal container — desktop centered dialog entrance/exit. */
@keyframes rc-fadeInScale  { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }
@keyframes rc-fadeOutScale { from { opacity: 1; transform: scale(1); }    to { opacity: 0; transform: scale(0.95); } }

/* Selection badge / pop-in entrance. */
@keyframes rc-popIn { from { transform: scale(0); opacity: 0; } to { transform: scale(1); opacity: 1; } }

/* Shimmer sweep — for loading / hover highlight on dashboard cards. */
@keyframes rc-shimmer { to { left: 100%; } }

/* Loading spinner rotation — used by RcButton IsBusy + any async pending state. */
@keyframes rc-spin { to { transform: rotate(360deg); } }

/* Reveal / expand-down — collapsible section body entrance. */
@keyframes rc-expandDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }

/* Error shake — form validation feedback. */
@keyframes rc-shake {
    0%, 100% { transform: translateX(0); }
    25%      { transform: translateX(-5px); }
    75%      { transform: translateX(5px); }
}

/* ============================================================================
   Timing reference (documented here so AI + humans can pick consistent values)
     rc-fadeIn / rc-fadeOut        0.2s  cubic-bezier(0.4, 0, 0.2, 1)
     rc-slideUp                    0.3s  cubic-bezier(0.4, 0, 0.2, 1)
     rc-slideDown                  0.2s  cubic-bezier(0.4, 0, 0.2, 1)
     rc-slideInLeft                0.25s cubic-bezier(0.4, 0, 0.2, 1)
     rc-slideOutLeft               0.2s  cubic-bezier(0.4, 0, 0.2, 1)
     rc-fadeInScale                0.3s  cubic-bezier(0.4, 0, 0.2, 1)
     rc-fadeOutScale               0.2s  cubic-bezier(0.4, 0, 0.2, 1)
     rc-popIn                      0.2s  cubic-bezier(0.4, 0, 0.2, 1)
     rc-shimmer                    2.0s  linear infinite
     rc-spin                       0.7s  linear infinite
     rc-expandDown                 0.25s ease-out
     rc-shake                      0.3s  ease
   ============================================================================ */
