| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| #alerts-container { |
| position: fixed; |
| top: calc(var(--header-height) + var(--status-bar-height) + var(--space-6)); |
| right: var(--space-6); |
| z-index: var(--z-toast); |
| display: flex; |
| flex-direction: column; |
| gap: var(--space-3); |
| max-width: 420px; |
| width: 100%; |
| pointer-events: none; |
| } |
|
|
| |
| |
| |
|
|
| .toast { |
| background: var(--toast-bg); |
| border: 1px solid var(--border-medium); |
| border-left-width: 4px; |
| border-radius: var(--radius-md); |
| backdrop-filter: var(--blur-lg); |
| box-shadow: var(--shadow-lg); |
| padding: var(--space-4) var(--space-5); |
| display: flex; |
| align-items: start; |
| gap: var(--space-3); |
| pointer-events: all; |
| animation: toast-slide-in 0.3s var(--ease-spring); |
| position: relative; |
| overflow: hidden; |
| } |
|
|
| .toast.removing { |
| animation: toast-slide-out 0.25s var(--ease-in) forwards; |
| } |
|
|
| @keyframes toast-slide-in { |
| from { |
| transform: translateX(120%); |
| opacity: 0; |
| } |
| to { |
| transform: translateX(0); |
| opacity: 1; |
| } |
| } |
|
|
| @keyframes toast-slide-out { |
| to { |
| transform: translateX(120%); |
| opacity: 0; |
| } |
| } |
|
|
| |
| |
| |
|
|
| .toast-success { |
| border-left-color: var(--success); |
| box-shadow: var(--shadow-lg), 0 0 0 1px rgba(34, 197, 94, 0.20); |
| } |
|
|
| .toast-error { |
| border-left-color: var(--danger); |
| box-shadow: var(--shadow-lg), 0 0 0 1px rgba(239, 68, 68, 0.20); |
| } |
|
|
| .toast-warning { |
| border-left-color: var(--warning); |
| box-shadow: var(--shadow-lg), 0 0 0 1px rgba(245, 158, 11, 0.20); |
| } |
|
|
| .toast-info { |
| border-left-color: var(--info); |
| box-shadow: var(--shadow-lg), 0 0 0 1px rgba(14, 165, 233, 0.20); |
| } |
|
|
| |
| |
| |
|
|
| .toast-icon { |
| flex-shrink: 0; |
| width: 20px; |
| height: 20px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| } |
|
|
| .toast-success .toast-icon { |
| color: var(--success); |
| } |
|
|
| .toast-error .toast-icon { |
| color: var(--danger); |
| } |
|
|
| .toast-warning .toast-icon { |
| color: var(--warning); |
| } |
|
|
| .toast-info .toast-icon { |
| color: var(--info); |
| } |
|
|
| .toast-content { |
| flex: 1; |
| display: flex; |
| flex-direction: column; |
| gap: var(--space-1); |
| } |
|
|
| .toast-title { |
| font-size: var(--fs-sm); |
| font-weight: var(--fw-semibold); |
| color: var(--text-strong); |
| margin: 0; |
| } |
|
|
| .toast-message { |
| font-size: var(--fs-xs); |
| color: var(--text-soft); |
| line-height: var(--lh-relaxed); |
| } |
|
|
| |
| |
| |
|
|
| .toast-close { |
| flex-shrink: 0; |
| width: 24px; |
| height: 24px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| background: transparent; |
| border: none; |
| color: var(--text-muted); |
| cursor: pointer; |
| border-radius: var(--radius-xs); |
| transition: all var(--transition-fast); |
| } |
|
|
| .toast-close:hover { |
| background: var(--surface-glass); |
| color: var(--text-normal); |
| } |
|
|
| |
| |
| |
|
|
| .toast-progress { |
| position: absolute; |
| bottom: 0; |
| left: 0; |
| height: 3px; |
| background: currentColor; |
| opacity: 0.4; |
| animation: toast-progress-shrink 5s linear forwards; |
| } |
|
|
| @keyframes toast-progress-shrink { |
| from { |
| width: 100%; |
| } |
| to { |
| width: 0%; |
| } |
| } |
|
|
| .toast-success .toast-progress { |
| color: var(--success); |
| } |
|
|
| .toast-error .toast-progress { |
| color: var(--danger); |
| } |
|
|
| .toast-warning .toast-progress { |
| color: var(--warning); |
| } |
|
|
| .toast-info .toast-progress { |
| color: var(--info); |
| } |
|
|
| |
| |
| |
|
|
| @media (max-width: 768px) { |
| #alerts-container { |
| top: auto; |
| bottom: calc(var(--mobile-nav-height) + var(--space-4)); |
| right: var(--space-4); |
| left: var(--space-4); |
| max-width: none; |
| } |
|
|
| @keyframes toast-slide-in { |
| from { |
| transform: translateY(120%); |
| opacity: 0; |
| } |
| to { |
| transform: translateY(0); |
| opacity: 1; |
| } |
| } |
|
|
| @keyframes toast-slide-out { |
| to { |
| transform: translateY(120%); |
| opacity: 0; |
| } |
| } |
| } |
|
|
| |
| |
| |
|
|