// ─────────────────────────────────────────────────────────────────────────────
// 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;
}