@keyframes blink{0%,100%{opacity:1;}50%{opacity:.3;}}

@keyframes wa-pulse{0%{transform:scale(1);opacity:.3;}100%{transform:scale(1.5);opacity:0;}}

/* GENERAL */
@keyframes fadeUp{from{opacity:0;transform:translateY(30px);}to{opacity:1;transform:translateY(0);}}
@keyframes marquee{from{transform:translateX(0);}to{transform:translateX(-50%);}}
.reveal{opacity:0;transform:translateY(40px);transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1);}
.reveal.visible{opacity:1;transform:translateY(0);}

/* GRAIN ANIMATION */
@keyframes grainShift{0%,100%{transform:translate(0,0);}20%{transform:translate(-2px,1px);}40%{transform:translate(2px,-1px);}60%{transform:translate(-1px,2px);}80%{transform:translate(1px,-2px);}}
body::before{animation:grainShift .35s steps(1) infinite;}
