import { formatUsd } from "@/app/lib/units"; /** Herb sage under 85%, saffron amber up to 100%, chili red over budget. */ function budgetTone(spent: number, budget: number) { const ratio = budget > 0 ? spent / budget : 0; if (ratio > 1) return { bar: "bg-status-danger", text: "text-status-danger", label: "Over budget" }; if (ratio > 0.85) return { bar: "bg-status-warn", text: "text-status-warn", label: "Close to budget" }; return { bar: "bg-status-ok", text: "text-status-ok", label: "Under budget" }; } interface BudgetMeterProps { spent: number; budget: number; compact?: boolean; } export function BudgetMeter({ spent, budget, compact = false }: BudgetMeterProps) { const tone = budgetTone(spent, budget); const percent = budget > 0 ? Math.min(100, (spent / budget) * 100) : 0; return (