/* Transition and animation utilities for admin pages.
   These are required by Phoenix JS.show/JS.hide in core_components.ex
   and by various admin UI interactions (spinners, hover effects, etc.).

   Placed in @layer admin so they integrate with the cascade. */

@layer admin {

/* ── Transition properties ── */

.transition {
  transition-property: color, background-color, border-color, text-decoration-color,
    fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-all {
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-colors {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-transform {
  transition-property: transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-\[left\] {
  transition-property: left;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

/* ── Duration overrides ── */

.duration-200 { transition-duration: 200ms; }
.duration-300 { transition-duration: 300ms; }

/* ── Easing overrides ── */

.ease-in { transition-timing-function: cubic-bezier(0.4, 0, 1, 1); }
.ease-out { transition-timing-function: cubic-bezier(0, 0, 0.2, 1); }

/* ── Opacity states (JS.show / JS.hide) ── */

.opacity-0 { opacity: 0; }
.opacity-100 { opacity: 1; }

/* ── Transform states (JS.show / JS.hide) ── */

.translate-y-4 { translate: 0 1rem; }
.translate-y-0 { translate: 0 0; }
.scale-95 { scale: 0.95; }
.scale-100 { scale: 1; }

@media (min-width: 640px) {
  .sm\:translate-y-0 { translate: 0 0; }
  .sm\:scale-95 { scale: 0.95; }
  .sm\:scale-100 { scale: 1; }
}

/* ── Spin animation ── */

@keyframes spin { to { transform: rotate(360deg); } }

.animate-spin { animation: spin 1s linear infinite; }

@media (prefers-reduced-motion: no-preference) {
  .motion-safe\:animate-spin { animation: spin 1s linear infinite; }
}

} /* @layer admin */
