/* =========================================================
   Keyframes & reusable motion utilities
   ========================================================= */

/* Gentle pulse for the preloader logo (subtle, never disappears) */
@keyframes soft-pulse {
    0%, 100% { opacity: 1;    transform: scale(1); }
    50%      { opacity: 0.85; transform: scale(0.97); }
}

/* Indeterminate sweep used by the preloader progress bar */
@keyframes progress-sweep {
    0%   { transform: translateX(-100%); }
    100% { transform: translateX(250%); }
}

/* Scroll-reveal for future content sections */
@keyframes slideUpFadeIn {
    from { opacity: 0; transform: translateY(30px); }
    to   { opacity: 1; transform: translateY(0); }
}

.reveal-on-scroll {
    opacity: 0;
    transform: translateY(30px);
    transition: transform 0.8s var(--ease-out), opacity 0.8s var(--ease-out);
}
.reveal-on-scroll.revealed {
    opacity: 1;
    transform: translateY(0);
}

/* Respect users who prefer reduced motion */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
        scroll-behavior: auto !important;
    }
}
