/* Leviatã — motion v5 Obsidiana */

@keyframes authIn {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes tabIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes toastIn {
  from { opacity: 0; transform: translateX(12px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes brandIn {
  from { opacity: 0; transform: translateY(18px) scale(0.98); }
  to { opacity: 1; transform: none; }
}

.login-deco {
  animation: brandIn 0.55s cubic-bezier(0.22, 1, 0.36, 1) both;
}
.login-auth-stage {
  animation: authIn 0.45s cubic-bezier(0.22, 1, 0.36, 1) 0.08s both;
}

.dropper-mode-card,
.upload-zone,
.stat-card,
.nav-link,
.btn-gold,
.btn-ghost,
.btn-icon,
.table-wrap tbody tr,
.card {
  transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease, background 0.18s ease, color 0.18s ease;
}

.stat-card:hover {
  border-color: rgba(var(--accent-rgb), 0.35);
}

.upload-zone:hover,
.upload-zone.drag-over {
  border-color: rgba(var(--accent-rgb), 0.45) !important;
}

.btn-gold:hover {
  filter: brightness(1.06);
}
.btn-gold:active,
.btn-ghost:active {
  transform: scale(0.98);
}

.nav-link:hover {
  color: var(--gold2);
  transform: translateX(2px);
}

.tab-content.active {
  animation: tabIn 0.28s ease both !important;
}

.toast {
  animation: toastIn 0.25s ease both !important;
}

.preview-live-dot {
  opacity: 0.85;
}

.build-progress-bar,
.progress-fill,
#buildProgressBar {
  transition: width 0.3s ease;
}

.table-wrap tbody tr:hover {
  background: rgba(var(--accent-rgb), 0.06);
}

.fx-spotlight,
#fx-particles,
.fx-confetti,
.fx-reveal {
  display: none !important;
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation: none !important;
    transition: none !important;
  }
}
