| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
|
|
|
|
| .toast-stack {
|
| position: fixed;
|
| top: 24px;
|
| right: 24px;
|
| display: flex;
|
| flex-direction: column;
|
| gap: 12px;
|
| z-index: 2000;
|
| }
|
|
|
| .toast {
|
| min-width: 260px;
|
| background: #ffffff;
|
| border-radius: 12px;
|
| border: 1px solid var(--ui-border);
|
| padding: 14px 18px;
|
| box-shadow: var(--ui-shadow);
|
| display: flex;
|
| gap: 12px;
|
| align-items: center;
|
| animation: toast-in 220ms ease;
|
| }
|
|
|
| .toast.success { border-color: rgba(22, 163, 74, 0.4); }
|
| .toast.error { border-color: rgba(220, 38, 38, 0.4); }
|
| .toast.info { border-color: rgba(37, 99, 235, 0.4); }
|
|
|
| .toast strong {
|
| font-size: 0.95rem;
|
| color: var(--ui-text);
|
| }
|
|
|
| .toast small {
|
| color: var(--ui-text-muted);
|
| display: block;
|
| }
|
|
|
| @keyframes toast-in {
|
| from { opacity: 0; transform: translateY(-10px); }
|
| to { opacity: 1; transform: translateY(0); }
|
| }
|
|
|
|
|
|
|
| .loading-indicator {
|
| display: inline-flex;
|
| align-items: center;
|
| gap: 10px;
|
| color: var(--ui-text-muted);
|
| font-size: 0.9rem;
|
| }
|
|
|
| .loading-indicator::before {
|
| content: "";
|
| width: 14px;
|
| height: 14px;
|
| border: 2px solid var(--ui-border);
|
| border-top-color: var(--ui-primary);
|
| border-radius: 50%;
|
| animation: spin 0.8s linear infinite;
|
| }
|
|
|
| @keyframes spin {
|
| to { transform: rotate(360deg); }
|
| }
|
|
|
| .fade-in {
|
| animation: fade 250ms ease;
|
| }
|
|
|
| @keyframes fade {
|
| from { opacity: 0; }
|
| to { opacity: 1; }
|
| }
|
|
|
|
|
|
|
| .badge {
|
| display: inline-flex;
|
| align-items: center;
|
| gap: 6px;
|
| padding: 4px 12px;
|
| border-radius: 999px;
|
| font-size: 0.8rem;
|
| letter-spacing: 0.06em;
|
| text-transform: uppercase;
|
| border: 1px solid transparent;
|
| }
|
|
|
| .badge.info {
|
| color: var(--ui-primary);
|
| border-color: var(--ui-primary);
|
| background: rgba(37, 99, 235, 0.08);
|
| }
|
|
|
| .badge.success {
|
| color: var(--ui-success);
|
| border-color: rgba(22, 163, 74, 0.3);
|
| background: rgba(22, 163, 74, 0.08);
|
| }
|
|
|
| .badge.warning {
|
| color: var(--ui-warning);
|
| border-color: rgba(217, 119, 6, 0.3);
|
| background: rgba(217, 119, 6, 0.08);
|
| }
|
|
|
| .badge.danger {
|
| color: var(--ui-danger);
|
| border-color: rgba(220, 38, 38, 0.3);
|
| background: rgba(220, 38, 38, 0.08);
|
| }
|
|
|
| .badge.source-fallback {
|
| border-color: rgba(220, 38, 38, 0.3);
|
| color: var(--ui-danger);
|
| background: rgba(220, 38, 38, 0.06);
|
| }
|
|
|
| .badge.source-live {
|
| border-color: rgba(22, 163, 74, 0.3);
|
| color: var(--ui-success);
|
| background: rgba(22, 163, 74, 0.08);
|
| }
|
|
|
|
|
|
|
| .empty-state {
|
| padding: 20px;
|
| border-radius: 12px;
|
| text-align: center;
|
| border: 1px dashed var(--ui-border);
|
| color: var(--ui-text-muted);
|
| background: #fff;
|
| }
|
|
|
|
|
|
|
| .ws-stream {
|
| display: flex;
|
| flex-direction: column;
|
| gap: 12px;
|
| max-height: 300px;
|
| overflow-y: auto;
|
| }
|
|
|
| .stream-item {
|
| border: 1px solid var(--ui-border);
|
| border-radius: 12px;
|
| padding: 12px 14px;
|
| background: var(--ui-panel-muted);
|
| }
|
|
|
|
|
|
|
| .alert {
|
| border-radius: 12px;
|
| padding: 12px 16px;
|
| display: flex;
|
| justify-content: space-between;
|
| align-items: center;
|
| }
|
|
|
| .alert.info {
|
| background: rgba(37, 99, 235, 0.08);
|
| color: var(--ui-primary);
|
| border: 1px solid rgba(37, 99, 235, 0.2);
|
| }
|
|
|
| .alert.success {
|
| background: rgba(22, 163, 74, 0.08);
|
| color: var(--ui-success);
|
| border: 1px solid rgba(22, 163, 74, 0.2);
|
| }
|
|
|
| .alert.warning {
|
| background: rgba(217, 119, 6, 0.08);
|
| color: var(--ui-warning);
|
| border: 1px solid rgba(217, 119, 6, 0.2);
|
| }
|
|
|
| .alert.danger,
|
| .alert.error {
|
| background: rgba(220, 38, 38, 0.08);
|
| color: var(--ui-danger);
|
| border: 1px solid rgba(220, 38, 38, 0.2);
|
| }
|
|
|