green that means "healthy" becomes the success token

Fifteen sites across thirteen files where a raw green stood in for a
semantic state: connection dots, health lights, completed-job ticks, the
copied-to-clipboard check, the installed badge, the checksum-matched line.
All of them meant "on / connected / succeeded", and matched each other only
because several people happened to pick the same palette number.

The values do move: --success is #16a34a where green-500 was #22c55e and
emerald-500 #10b981. That is the point — one token, so a theme can change
its mind once, and under plain.css (the leak-detection theme, which greys
--success to #404040) these now go colourless instead of staying green.

Left alone, deliberately: the confetti palette and the Start button in
start-confetti-button, the duck-avatar debug HUD, MetricCard's up/down
delta ramp, CommandBlock's check on its hardcoded dark block, the
react-email template, and the plain.css comment that names the anti-pattern.
Reds are untouched — that is a separate pass, so some ternaries now read
bg-success : bg-red-500 until it happens.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 23:35:01 +00:00
co-authored by Claude Opus 5
parent a53b56bbf6
commit b14b1bf678
13 changed files with 15 additions and 15 deletions
@@ -142,7 +142,7 @@ const StatusIcon = ({ status, className }: { status: string; className?: string
switch (status) {
case 'completed':
case 'complete':
return <CheckCircle2 className={`${base} text-green-500`} />;
return <CheckCircle2 className={`${base} text-success`} />;
case 'failed':
case 'error':
return <AlertCircle className={`${base} text-red-500`} />;
@@ -44,7 +44,7 @@ const formatDate = (iso: string) =>
const StatusIcon = ({ status }: { status: JobSummary['status'] }) => {
switch (status) {
case 'completed':
return <CheckCircle2 className="h-4 w-4 text-green-500 shrink-0" />;
return <CheckCircle2 className="h-4 w-4 text-success shrink-0" />;
case 'failed':
return <AlertCircle className="h-4 w-4 text-red-500 shrink-0" />;
case 'running':