/* ============================================
COST TRACKING — Token burn + monthly budget
============================================ */
function CostScreen() {
const budget = 18000;
const spent = 12842;
const pct = (spent / budget) * 100;
const dailyBurn = [320, 412, 388, 401, 567, 122, 188, 478, 521, 487, 544, 612, 198, 240, 642, 698, 671, 740, 802, 287, 312, 822, 894, 901, 880, 950, 401, 412, 1024, 1082];
const W = 800, H = 180, P = 26;
const max = Math.max(...dailyBurn);
const stepX = (W - P * 2) / (dailyBurn.length - 1);
return (
<>
Cost Tracking
May 2026 · monthly budget cycle · billing in USD
{/* Hero budget card */}
Monthly Budget vs Actual Spend
${spent.toLocaleString()}
/ ${budget.toLocaleString()} budgeted
{pct.toFixed(1)}% utilized
Day 23 of 31 · pacing 89%
$0
$5,000
$10,000
${budget.toLocaleString()}
{/* Daily burn */}
{/* Cost by model */}
| Model | Tokens | Cost | $/1M |
{[
["claude-haiku-4.5", "44.2M", "$7,156", "$1.00 / $5.00"],
["emb-3-lg", "312.4M","$3,124", "$0.10"],
["gpt-4o-vision", "8.1M", "$1,418", "$15.00"],
["claude-haiku-4.5 (cached)", "12.8M", "$640", "$0.05"],
["reranker-2.1", "4.0M", "$120", "$3.00"],
].map(([m, t, c, r], i) => (
| {m} |
{t} |
{c} |
{r} |
))}
{/* Cost by team */}
{[
{ name: "Plant Operations", v: 4820, pct: 37.5 },
{ name: "Maintenance & Reliability", v: 3140, pct: 24.5 },
{ name: "Quality Assurance", v: 2090, pct: 16.3 },
{ name: "Process Engineering", v: 1782, pct: 13.9 },
{ name: "EHS / Safety", v: 1010, pct: 7.8 },
].map(d => (
{d.name}
${d.v.toLocaleString()}
{d.pct}%
))}
{/* Alerts */}
>
);
}
function AlertRow({ kind, title, sub }) {
const colors = {
warn: { bg: "#FFFBEB", fg: "#92400E", border: "#FDE68A", icon: },
info: { bg: "var(--navy-50)", fg: "var(--navy-700)", border: "var(--navy-100)", icon: },
ok: { bg: "#ECFDF5", fg: "#065F46", border: "#A7F3D0", icon: },
};
const c = colors[kind];
return (
);
}
window.CostScreen = CostScreen;