/* ═══════════════════════════════════════════════════════════════
   GLASS ANIMATIONS — BotLuna Admin Panel
   ═══════════════════════════════════════════════════════════════ */

/* Page Enter */
@keyframes pageEnter {
  from { opacity: 0; transform: translateY(15px); }
  to   { opacity: 1; transform: translateY(0); }
}
body > .container {
  animation: pageEnter 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

/* Card Stagger */
@keyframes cardFadeUp {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}
.stats-grid > .stat-card,
.row > [class*="col-"] > .glass-card,
.row > [class*="col-"] > .card {
  opacity: 0;
  animation: cardFadeUp 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
.stats-grid > .stat-card:nth-child(1),
.row > [class*="col-"]:nth-child(1) > .glass-card,
.row > [class*="col-"]:nth-child(1) > .card { animation-delay: 0.05s; }
.stats-grid > .stat-card:nth-child(2),
.row > [class*="col-"]:nth-child(2) > .glass-card,
.row > [class*="col-"]:nth-child(2) > .card { animation-delay: 0.10s; }
.stats-grid > .stat-card:nth-child(3),
.row > [class*="col-"]:nth-child(3) > .glass-card,
.row > [class*="col-"]:nth-child(3) > .card { animation-delay: 0.15s; }
.stats-grid > .stat-card:nth-child(4),
.row > [class*="col-"]:nth-child(4) > .glass-card,
.row > [class*="col-"]:nth-child(4) > .card { animation-delay: 0.20s; }

/* Dropdown */
@keyframes dropdownFadeIn {
  from { opacity: 0; transform: translateY(-8px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}

/* Row slide in (for JS stagger) */
@keyframes rowFadeIn {
  from { opacity: 0; transform: translateX(-8px); }
  to   { opacity: 1; transform: translateX(0); }
}

/* Toast slide */
@keyframes slideInRight {
  from { opacity: 0; transform: translateX(100px); }
  to   { opacity: 1; transform: translateX(0); }
}

/* Skeleton shimmer */
.skeleton {
  background: linear-gradient(90deg,
    rgba(0, 0, 0, 0.04) 25%,
    rgba(0, 0, 0, 0.08) 50%,
    rgba(0, 0, 0, 0.04) 75%
  ) !important;
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  border-radius: 8px;
  color: transparent !important;
}
@keyframes shimmer {
  0%   { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

/* Pulse for status dots */
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
.status-dot-pulse {
  animation: pulse 2s ease-in-out infinite;
}

/* Row flash after action */
@keyframes rowFlashGreen {
  0%   { background: rgba(16,185,129,0.20); }
  100% { background: transparent; }
}
@keyframes rowFlashRed {
  0%   { background: rgba(239,68,68,0.20); }
  100% { background: transparent; }
}
.row-flash-green { animation: rowFlashGreen 1s ease; }
.row-flash-red   { animation: rowFlashRed 1s ease; }

/* Spin */
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.btn-loading .spinner { animation: spin 0.8s linear infinite; }
