/* ============================================================
   ANIMATIONS — Minimalist (subtle only)
   ============================================================ */

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

@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}

@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-4px); }
}

@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

@keyframes pageIn {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes slideUp {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes ripple {
  to { transform: scale(3.5); opacity: 0; }
}

@keyframes toastIn {
  from { opacity: 0; transform: translate(-50%, -14px); }
  to   { opacity: 1; transform: translate(-50%, 0); }
}

@keyframes toastOut {
  to { opacity: 0; transform: translate(-50%, -14px); }
}

@keyframes modalBg {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes modalIn {
  from { opacity: 0; transform: scale(0.98) translateY(4px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}

@keyframes typing {
  0%    { content: ''; }
  25%   { content: '.'; }
  50%   { content: '..'; }
  75%, 100% { content: '...'; }
}

/* scroll-reveal */
.reveal {
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 0.5s var(--ease-out), transform 0.5s var(--ease-out);
}
.reveal.on { opacity: 1; transform: translateY(0); }
.reveal.d1 { transition-delay: 0.04s; }
.reveal.d2 { transition-delay: 0.08s; }
.reveal.d3 { transition-delay: 0.12s; }
.reveal.d4 { transition-delay: 0.16s; }

/* typing dots */
.typing::after {
  display: inline-block;
  content: '';
  animation: typing 1.4s steps(4) infinite;
  margin-inline-start: 2px;
  font-weight: 700;
}
.typing span {
  display: inline-block;
  width: 4px; height: 4px;
  border-radius: 50%;
  background: currentColor;
  margin: 0 2px;
  animation: bounce 1.2s infinite;
}
.typing span:nth-child(2) { animation-delay: 0.15s; }
.typing span:nth-child(3) { animation-delay: 0.30s; }

.grad-text { color: var(--gold-600); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  .reveal { opacity: 1 !important; transform: none !important; }
}
