
@keyframes cardShake{0%,100%{transform:translateX(0) rotate(0)}18%{transform:translateX(-8px) rotate(-.4deg)}36%{transform:translateX(7px) rotate(.35deg)}54%{transform:translateX(-5px) rotate(-.2deg)}72%{transform:translateX(3px) rotate(.1deg)}}
@keyframes textSwap{0%{opacity:1;transform:translateY(0);filter:blur(0)}45%{opacity:0;transform:translateY(7px);filter:blur(4px)}55%{opacity:0;transform:translateY(-7px);filter:blur(4px)}100%{opacity:1;transform:translateY(0);filter:blur(0)}}
@keyframes viewIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.story-card.shaking{animation:cardShake .48s cubic-bezier(.36,.07,.19,.97)}
.card-content.swapping{animation:textSwap .52s ease}
.view.active{animation:viewIn .3s ease}
@media(prefers-reduced-motion:reduce){.story-card.shaking,.card-content.swapping,.view.active{animation:none!important}}
