@keyframes fadeUp   { from{opacity:0;transform:translateY(20px)} to{opacity:1;transform:none} }
@keyframes fadeIn   { from{opacity:0} to{opacity:1} }
@keyframes ticker   { from{transform:translateX(0)} to{transform:translateX(-50%)} }
@keyframes scanBar  { 0%{transform:translateY(-100%)} 100%{transform:translateY(300%)} }
@keyframes pulse    { 0%,100%{opacity:1} 50%{opacity:.3} }
@keyframes blink    { 0%,100%{opacity:1} 50%{opacity:0} }
@keyframes slideIn  { from{opacity:0;transform:translateX(-8px)} to{opacity:1;transform:none} }
@keyframes spin     { to{transform:rotate(360deg)} }

.rv { opacity:0; transform:translateY(24px); transition:opacity .7s cubic-bezier(.22,1,.36,1), transform .7s cubic-bezier(.22,1,.36,1); transition-delay:var(--d,0s); }
.rv.on { opacity:1; transform:none; }

@media(prefers-reduced-motion:reduce){ *,*::before,*::after{ animation-duration:.01ms!important; transition-duration:.01ms!important; } }
