/* Page enter animation */
.page { animation: fadeIn .25s ease; }
@keyframes fadeIn {
    from { opacity:0; transform:translateY(8px); }
    to   { opacity:1; transform:translateY(0); }
}

/* Toast slide-in */
.toast-enter { animation: slideIn .3s ease; }
@keyframes slideIn {
    from { transform:translateX(100%); opacity:0; }
    to   { transform:translateX(0); opacity:1; }
}

/* Spinner — pure CSS, no external dependencies */
.spinner {
    width: 24px; height: 24px;
    border: 3px solid #e2e8f0;
    border-top-color: #3b82f6;
    border-radius: 50%;
    animation: spin .7s linear infinite;
    display: inline-block;
    flex-shrink: 0;
}
.spinner-lg { width: 40px; height: 40px; border-width: 4px; }
.spinner-sm { width: 16px; height: 16px; border-width: 2px; }
@keyframes spin { to { transform: rotate(360deg); } }

/* Text selection */
::selection { background: #bfdbfe; color: #1e3a5f; }
