@keyframes shimmer {
    0%   { background-position: -200% 0; }
    100% { background-position:  200% 0; }
}

@keyframes fadeIn {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@keyframes fadeInUp {
    from { opacity: 0; transform: translateY(20px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeInDown {
    from { opacity: 0; transform: translateY(-10px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes slideInRight {
    from { opacity: 0; transform: translateX(30px); }
    to   { opacity: 1; transform: translateX(0); }
}

@keyframes scaleIn {
    from { opacity: 0; transform: scale(0.94); }
    to   { opacity: 1; transform: scale(1); }
}

@keyframes pulse {
    0%, 100% { opacity: 1; }
    50%       { opacity: 0.5; }
}

@keyframes heroEntrance {
    from { opacity: 0; transform: translateY(32px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes dotExpand {
    from { width: 6px; }
    to   { width: 24px; }
}

@keyframes rotateIn {
    from { opacity: 0; transform: rotate(-8deg) scale(0.9); }
    to   { opacity: 1; transform: rotate(0) scale(1); }
}

.anim-fade-in      { animation: fadeIn 0.4s var(--ease-out) both; }
.anim-fade-in-up   { animation: fadeInUp 0.5s var(--ease-out) both; }
.anim-fade-in-down { animation: fadeInDown 0.35s var(--ease-out) both; }
.anim-scale-in     { animation: scaleIn 0.35s var(--ease-out) both; }
.anim-slide-right  { animation: slideInRight 0.4s var(--ease-out) both; }

.hero-slide__meta    { animation: heroEntrance 0.7s 0.1s var(--ease-out) both; }
.hero-slide__title   { animation: heroEntrance 0.7s 0.2s var(--ease-out) both; }
.hero-slide__desc    { animation: heroEntrance 0.7s 0.3s var(--ease-out) both; }
.hero-slide__actions { animation: heroEntrance 0.7s 0.4s var(--ease-out) both; }

.card { animation: fadeInUp 0.4s var(--ease-out) both; }

@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
    .hero-slide__bg { transform: none !important; }
}

.transition-opacity { transition: opacity var(--t-normal); }
.transition-transform { transition: transform var(--t-normal); }
.transition-all { transition: all var(--t-normal); }
