/** Central tone → className map. Use this instead of ternary chains throughout dashboard components. */ export type Tone = "default" | "success" | "warning" | "danger"; export type BadgeTone = "online" | "offline" | "neutral"; export type MetricToneKey = "accent" | "success" | "warning" | "danger"; export type SectionToneKey = "neutral" | MetricToneKey; /** Inline text color for a data value. */ export const toneText: Record = { default: "text-strong", success: "text-[color:var(--success)]", warning: "text-[color:var(--warning)]", danger: "text-[color:var(--danger)]", }; /** Soft background + text for banners and empty-state callouts. */ export const toneBanner: Record = { default: "border-[color:var(--border)] bg-[color:var(--surface-muted)] text-muted", success: "border-[color:rgba(52,211,153,0.35)] bg-[color:rgba(52,211,153,0.08)] text-[color:var(--success)]", warning: "border-[color:rgba(251,191,36,0.35)] bg-[color:rgba(251,191,36,0.08)] text-[color:var(--warning)]", danger: "border-[color:rgba(248,113,113,0.35)] bg-[color:rgba(248,113,113,0.08)] text-[color:var(--danger)]", }; /** Small pill / badge background + text. */ export const toneBadge: Record = { online: "bg-[color:rgba(52,211,153,0.15)] text-[color:var(--success)]", offline: "bg-[color:rgba(248,113,113,0.12)] text-[color:var(--danger)]", neutral: "bg-[color:var(--surface-strong)] text-muted", }; /** Icon container background + icon color for metric cards. */ export const toneIcon: Record = { accent: "border border-[color:rgba(96,165,250,0.3)] bg-[color:var(--accent-soft)] text-[color:var(--accent-strong)]", success: "border border-[color:rgba(52,211,153,0.3)] bg-[color:rgba(52,211,153,0.15)] text-[color:var(--success)]", warning: "border border-[color:rgba(251,191,36,0.32)] bg-[color:rgba(251,191,36,0.15)] text-[color:var(--warning)]", danger: "border border-[color:rgba(248,113,113,0.3)] bg-[color:rgba(248,113,113,0.12)] text-[color:var(--danger)]", }; /** Card-level background + border tint for metric cards. */ export const toneCard: Record = { accent: "border border-[color:rgba(96,165,250,0.3)] bg-[linear-gradient(145deg,rgba(96,165,250,0.16),var(--surface)_44%)]", success: "border border-[color:rgba(52,211,153,0.3)] bg-[linear-gradient(145deg,rgba(52,211,153,0.14),var(--surface)_44%)]", warning: "border border-[color:rgba(251,191,36,0.3)] bg-[linear-gradient(145deg,rgba(251,191,36,0.13),var(--surface)_44%)]", danger: "border border-[color:rgba(248,113,113,0.3)] bg-[linear-gradient(145deg,rgba(248,113,113,0.13),var(--surface)_44%)]", }; export const toneGlow: Record = { accent: "bg-[color:rgba(96,165,250,0.34)]", success: "bg-[color:rgba(52,211,153,0.28)]", warning: "bg-[color:rgba(251,191,36,0.3)]", danger: "bg-[color:rgba(248,113,113,0.28)]", }; export const sectionTone: Record = { neutral: "border-[color:var(--border)] bg-[linear-gradient(180deg,rgba(255,255,255,0.035),rgba(255,255,255,0)_72%),var(--surface)]", accent: "border-[color:rgba(96,165,250,0.22)] bg-[linear-gradient(180deg,rgba(96,165,250,0.08),rgba(255,255,255,0)_72%),var(--surface)]", success: "border-[color:rgba(52,211,153,0.22)] bg-[linear-gradient(180deg,rgba(52,211,153,0.075),rgba(255,255,255,0)_72%),var(--surface)]", warning: "border-[color:rgba(251,191,36,0.24)] bg-[linear-gradient(180deg,rgba(251,191,36,0.075),rgba(255,255,255,0)_72%),var(--surface)]", danger: "border-[color:rgba(248,113,113,0.24)] bg-[linear-gradient(180deg,rgba(248,113,113,0.075),rgba(255,255,255,0)_72%),var(--surface)]", }; export const sectionRail: Record = { neutral: "bg-[linear-gradient(90deg,rgba(96,165,250,0),rgba(96,165,250,0.28),rgba(52,211,153,0.2),rgba(96,165,250,0))]", accent: "bg-[linear-gradient(90deg,rgba(96,165,250,0),rgba(96,165,250,0.82),rgba(96,165,250,0))]", success: "bg-[linear-gradient(90deg,rgba(52,211,153,0),rgba(52,211,153,0.78),rgba(52,211,153,0))]", warning: "bg-[linear-gradient(90deg,rgba(251,191,36,0),rgba(251,191,36,0.82),rgba(251,191,36,0))]", danger: "bg-[linear-gradient(90deg,rgba(248,113,113,0),rgba(248,113,113,0.78),rgba(248,113,113,0))]", };