@keyframes spin { to { transform: rotate(360deg); } }
@keyframes reveal { from { opacity: 0; transform: translateY(10px) scale(.992); } to { opacity: 1; transform: none; } }
@keyframes statusIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@keyframes shake { 0%,100%{transform:translateX(0)} 30%{transform:translateX(-5px)} 70%{transform:translateX(5px)} }
.button-loader { animation: spin .8s linear infinite; }
.result-card.is-revealing { animation: reveal .32s cubic-bezier(.2,.8,.2,1) both; }
.analysis-status.is-changing #analysisText { animation: statusIn .13s ease both; }
.input-card.has-error { animation: shake .25s ease; }
@media (prefers-reduced-motion: reduce) { *,*::before,*::after { animation-duration: .01ms !important; transition-duration: .01ms !important; scroll-behavior: auto !important; } }
