body { min-height: 100vh; }
[x-cloak] { display: none !important; }

.spinner { display: inline-block; width: 24px; height: 24px; border: 3px solid rgba(59,130,246,.2); border-radius: 50%; border-top-color: #3b82f6; animation: spin .6s linear infinite; }
.spinner-sm { width: 16px; height: 16px; border-width: 2px; }
.spinner-white { border-color: rgba(255,255,255,.3); border-top-color: #fff; }
@keyframes spin { to { transform: rotate(360deg); } }

.toast-container { position: fixed; top: 1rem; right: 1rem; z-index: 9999; display: flex; flex-direction: column; gap: .5rem; pointer-events: none; }
.toast { pointer-events: auto; display: flex; align-items: center; gap: .75rem; padding: .75rem 1rem; border-radius: .5rem; box-shadow: 0 4px 12px rgba(0,0,0,.15); font-size: .875rem; max-width: 24rem; animation: toastIn .3s ease-out; transition: opacity .3s, transform .3s; }
.toast-error { background: #fef2f2; color: #dc2626; border: 1px solid #fecaca; }
.toast-success { background: #f0fdf4; color: #16a34a; border: 1px solid #bbf7d0; }
.toast-info { background: #eff6ff; color: #2563eb; border: 1px solid #bfdbfe; }
.toast-leaving { opacity: 0; transform: translateX(100%); }
@keyframes toastIn { from { opacity: 0; transform: translateX(100%); } to { opacity: 1; transform: translateX(0); } }