/* ── Fade in ── */
@keyframes fadeIn {
    from { opacity: 0; transform: translateY(12px); }
    to   { opacity: 1; transform: translateY(0); }
}

.fade-in {
    animation: fadeIn 0.4s ease both;
}

/* ── Slide in (toasts) ── */
@keyframes slideIn {
    from { opacity: 0; transform: translateX(100%); }
    to   { opacity: 1; transform: translateX(0); }
}

.animate-slide-in {
    animation: slideIn 0.3s ease both;
}

/* ── Spin ── */
@keyframes spin {
    to { transform: rotate(360deg); }
}

.animate-spin {
    animation: spin 0.7s linear infinite;
}

/* ── Toast ── */
@keyframes toast-slide-in {
    from { opacity: 0; transform: translateX(110%); }
    to   { opacity: 1; transform: translateX(0); }
}
@keyframes toast-slide-out {
    from { opacity: 1; transform: translateX(0); }
    to   { opacity: 0; transform: translateX(110%); }
}
@keyframes toast-progress {
    from { transform: scaleX(1); }
    to   { transform: scaleX(0); }
}
.toast-in  { animation: toast-slide-in 0.3s cubic-bezier(0.34,1.56,0.64,1) forwards; }
.toast-out { animation: toast-slide-out 0.3s ease-in forwards; }
.toast-bar { transform-origin: left; animation: toast-progress 4s linear forwards; }
