@keyframes screen-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes sheet-in { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
@keyframes toast-in { from { opacity: 0; transform: translateY(-12px); } to { opacity: 1; transform: translateY(0); } }
@keyframes receipt-in { from { opacity: 0; transform: translateY(-70px) rotate(-1deg); } to { opacity: 1; transform: translateY(0) rotate(0); } }
@keyframes stamp-in { 0%,55% { opacity: 0; transform: scale(1.7) rotate(-9deg); } 75% { opacity: 1; transform: scale(.9) rotate(-9deg); } 100% { opacity: .92; transform: scale(1) rotate(-9deg); } }
@keyframes combo-pop { 0% { transform: scale(.65); opacity: 0; } 70% { transform: scale(1.12); } 100% { transform: scale(1); opacity: 1; } }
@keyframes title-dash { to { background-position-y: 37px; } }
@keyframes route-draw { from { transform: rotate(-13deg) scaleX(0); } to { transform: rotate(-13deg) scaleX(1); } }
@keyframes result-line { from { opacity: 0; transform: translateX(-8px); } to { opacity: 1; transform: translateX(0); } }

.screen.active { animation: screen-in .16s ease both; }
.panel-screen.active .panel-sheet, .panel-screen.active .intro-sheet { animation: sheet-in .22s ease-out both; }
.toast { animation: toast-in .18s ease-out both; }
.toast.leaving { opacity: 0; transform: translateY(-8px); transition: .2s ease; }
.title-route { animation: title-dash 1.6s linear infinite; }
.job-card:hover .route-mini { animation: route-draw .25s ease-out both; }
.route-preview .route-line { animation: route-draw .38s .08s ease-out both; }
.results-screen.active .receipt { animation: receipt-in .34s cubic-bezier(.16,.8,.24,1) both; }
.results-screen.active .rank-stamp { animation: stamp-in .75s .12s ease both; }
.results-screen.active .result-line { animation: result-line .2s ease both; }
.results-screen.active .result-line:nth-child(2) { animation-delay: .08s; }.results-screen.active .result-line:nth-child(3) { animation-delay: .13s; }.results-screen.active .result-line:nth-child(4) { animation-delay: .18s; }.results-screen.active .result-line:nth-child(5) { animation-delay: .23s; }
.combo:not(.hidden) { animation: combo-pop .2s ease-out both; }

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