/* ============================================================================
   SLAM Design System — Motion
   ----------------------------------------------------------------------------
   Snappy, futuristic micro-interactions. Every transition/animation here is
   limited to GPU-friendly properties (transform / opacity / box-shadow /
   background-color / color / border-color) so interactions stay millisecond
   smooth and never trigger layout (reflow) on large list/report pages.

   A global prefers-reduced-motion block disables non-essential motion for
   users who request it.
   ============================================================================ */

/* Action buttons: subtle lift on hover, press feedback. */
.btn-action {
  transition: background-color var(--slam-dur-fast) var(--slam-ease),
    box-shadow var(--slam-dur-fast) var(--slam-ease),
    transform 80ms var(--slam-ease),
    border-color var(--slam-dur-fast) var(--slam-ease),
    color var(--slam-dur-fast) var(--slam-ease);
}

/* Interactive stat / KPI / info tiles: gentle hover elevation. */
.slam-stat-card,
.slam-kpi-card,
.info-tile {
  transition: transform var(--slam-dur) var(--slam-ease),
    box-shadow var(--slam-dur) var(--slam-ease),
    border-color var(--slam-dur) var(--slam-ease);
}
.slam-stat-card:hover,
.info-tile:hover {
  transform: translateY(-2px);
  box-shadow: var(--slam-shadow-2);
}

/* Badges / pills: keep crisp, no transition needed beyond color. */
.slam-pill {
  transition: background-color var(--slam-dur-fast) var(--slam-ease),
    color var(--slam-dur-fast) var(--slam-ease),
    border-color var(--slam-dur-fast) var(--slam-ease);
}

/* Entrance for newly revealed panels / modals — short and compositor-only. */
@keyframes slamFadeUp {
  from {
    opacity: 0;
    transform: translate3d(0, 6px, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.modal.fade .modal-dialog {
  transition: transform var(--slam-dur) var(--slam-ease-out),
    opacity var(--slam-dur) var(--slam-ease-out);
  transform: translate3d(0, 8px, 0) scale(0.99);
}
.modal.show .modal-dialog {
  transform: translate3d(0, 0, 0) scale(1);
}

.slam-animate-in {
  animation: slamFadeUp var(--slam-dur-slow) var(--slam-ease-out) both;
}

/* Icon-only / link buttons: quick press feedback. */
a,
.nav-link,
.dropdown-item {
  transition: color var(--slam-dur-fast) var(--slam-ease),
    background-color var(--slam-dur-fast) var(--slam-ease);
}

/* Focus-visible: consistent on-brand ring across interactive elements. */
a:focus-visible,
.nav-link:focus-visible,
.page-link:focus-visible,
.form-check-input:focus-visible,
[tabindex]:focus-visible {
  outline: none;
  box-shadow: var(--slam-focus-ring);
  border-radius: var(--slam-radius-sm);
}

/* ----------------------------------------------------------------------------
   Respect user motion preferences — kill non-essential motion.
   ---------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .slam-stat-card:hover,
  .info-tile:hover,
  .card.is-interactive:hover {
    transform: none;
  }
}
