import type { Recommendation, Severity } from "./types"; // Full literal class strings (not built dynamically) so Tailwind's content scanner keeps them. // Decision colors stay semantic and legible (green/red/amber), with dark variants; the brand // pine/gold is reserved for chrome so the verdict never competes with the brand. export const REC: Record< Recommendation, { bg: string; text: string; border: string; solid: string; label: string } > = { APPROVE: { bg: "bg-emerald-50 dark:bg-emerald-500/10", text: "text-emerald-800 dark:text-emerald-300", border: "border-emerald-300 dark:border-emerald-500/30", solid: "bg-emerald-600", label: "Approve", }, REJECT: { bg: "bg-rose-50 dark:bg-rose-500/10", text: "text-rose-800 dark:text-rose-300", border: "border-rose-300 dark:border-rose-500/30", solid: "bg-rose-600", label: "Reject", }, ESCALATE: { bg: "bg-amber-50 dark:bg-amber-500/10", text: "text-amber-800 dark:text-amber-300", border: "border-amber-300 dark:border-amber-500/30", solid: "bg-amber-500", label: "Escalate", }, }; export const SEV: Record = { high: { dot: "bg-rose-500", text: "text-rose-700 dark:text-rose-300" }, medium: { dot: "bg-amber-500", text: "text-amber-700 dark:text-amber-300" }, low: { dot: "bg-stone-400 dark:bg-stone-500", text: "text-muted" }, }; // "9,978 in / 928 out · 1.2s" — compact run telemetry for the verdict footer. export function fmtTokens(n?: number | null): string | null { return n == null ? null : n.toLocaleString(); } export function fmtLatency(ms?: number | null): string | null { if (ms == null) return null; return ms < 1000 ? `${ms}ms` : `${(ms / 1000).toFixed(1)}s`; }