/* Shared keyframes. Motion is subtle: fades and short slides only. */
@keyframes fade-in { from { opacity: 0; } }
@keyframes rise-in { from { opacity: 0; transform: translateY(12px); } }
@keyframes scale-in { from { opacity: 0; transform: translateY(10px) scale(.98); } }
@keyframes slide-in-right { from { transform: translateX(100%); } }
@keyframes slide-in-left { from { transform: translateX(-100%); } }
@keyframes bump { 50% { transform: scale(1.08); } }

.bump { animation: bump .35s var(--ease); }

/* Scroll reveal (see src/lib/reveal.js). Only hides content once JS has opted in. */
[data-reveal] { transition: opacity .8s var(--ease), transform .8s var(--ease); }
.reveal-ready [data-reveal]:not(.is-revealed) { opacity: 0; transform: translateY(28px); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}
