// ───────────────────────────────────────────────────────────────────────────── // Component: Toasts // File: src/scss/components/_toasts.scss // // Variants: .empty-state .empty-title .empty-desc .loading .error // [data-tooltip] .tooltip // Tokens: --bg-overlay, --border-default, --color-danger, --text-muted // Usage:
// // Notes: Tooltips are CSS-only via data-tooltip attribute. // ───────────────────────────────────────────────────────────────────────────── .loading { color: var(--text-muted); font-size: var(--text-base); } .error { color: var(--color-danger); font-size: var(--text-base); margin: var(--space-2) 0; } .empty-state { text-align: center; padding: var(--space-12) var(--space-6); color: var(--text-muted); font-size: var(--text-base); } .empty-state .empty-icon { display: flex; align-items: center; justify-content: center; width: 56px; height: 56px; border-radius: var(--radius-lg); background: var(--bg-overlay); border: 1px solid var(--border-subtle); margin: 0 auto var(--space-4); color: var(--text-muted); svg, i[data-lucide] { width: 24px; height: 24px; stroke: currentColor; } } .empty-title { font-size: var(--text-md); font-weight: var(--weight-semibold); color: var(--text-primary); margin-bottom: var(--space-2); letter-spacing: -0.01em; } .empty-desc { font-size: var(--text-sm); color: var(--text-muted); margin-bottom: var(--space-5); max-width: 360px; margin-left: auto; margin-right: auto; line-height: var(--line-height-relaxed); } // Toast notifications .toast { display: flex; align-items: flex-start; gap: var(--space-3); padding: var(--space-3) var(--space-4); border-radius: var(--radius-md); border: 1px solid var(--border-default); background: var(--bg-elevated); font-size: var(--text-sm); color: var(--text-secondary); box-shadow: var(--shadow-md); max-width: 400px; } .toast--success { border-color: color-mix(in srgb, var(--color-success) 30%, transparent); background: color-mix(in srgb, var(--color-success) 8%, var(--bg-elevated)); color: var(--color-success); } .toast--error { border-color: color-mix(in srgb, var(--color-danger) 30%, transparent); background: color-mix(in srgb, var(--color-danger) 8%, var(--bg-elevated)); color: var(--color-danger); } .toast--info { border-color: color-mix(in srgb, var(--color-accent) 30%, transparent); background: color-mix(in srgb, var(--color-accent) 8%, var(--bg-elevated)); color: var(--color-accent); } // CSS-only tooltips [data-tooltip] { position: relative; } [data-tooltip]::after { content: attr(data-tooltip); position: absolute; bottom: calc(100% + var(--space-1)); left: 50%; transform: translateX(-50%); background: var(--bg-overlay); color: var(--text-primary); border: 1px solid var(--border-default); border-radius: var(--radius-sm); padding: 4px var(--space-2); font-size: var(--text-xs); white-space: nowrap; pointer-events: none; opacity: 0; transition: opacity var(--transition-base); z-index: var(--z-tooltip); box-shadow: var(--shadow-md); } [data-tooltip]:hover::after { opacity: 1; } .tooltip { position: relative; } // Notification badge .notif-badge { position: absolute; top: -4px; right: -4px; background: var(--color-danger); color: #fff; font-size: 10px; border-radius: var(--radius-full); min-width: 16px; height: 16px; display: flex; align-items: center; justify-content: center; padding: 0 4px; }