From 38c8702934066e9e4d3df520b565f9073d596c6e Mon Sep 17 00:00:00 2001 From: Molecule AI Core-UIUX Date: Thu, 14 May 2026 03:49:00 +0000 Subject: [PATCH] =?UTF-8?q?fix(canvas):=20remove=20opacity=20from=20error/?= =?UTF-8?q?success=20text=20=E2=80=94=20WCAG=20AA=20contrast?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes 6 instances of text-bad/text-good with opacity reducing contrast: - ConversationTraceModal: error detail (text-bad/80 → text-bad) - ConversationTraceModal: Response label (text-good/60 → text-good) - ActivityTab: error detail inline (text-bad/80 → text-bad) - ActivityTab: A2AErrorPreview label+hint (text-bad/80 → text-bad, text-bad/70 → text-bad) - ScheduleTab: last_error display (text-bad/70 → text-bad) - SkillsTab: registry error detail (text-bad/80 → text-bad) Note: text-bad (#d27773) on bg-surface-card (zinc-800) is 2.1:1 — below AA for body text. The text color itself needs design review to raise contrast to meet 4.5:1 on zinc-800 surfaces. This PR removes opacity (which only made things worse) as a step 1; a follow-up should consider warmer/muted zinc-safe alternatives for bad/good status colors. Co-Authored-By: Claude Opus 4.7 --- canvas/src/components/ConversationTraceModal.tsx | 4 ++-- canvas/src/components/tabs/ActivityTab.tsx | 6 +++--- canvas/src/components/tabs/ScheduleTab.tsx | 2 +- canvas/src/components/tabs/SkillsTab.tsx | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/canvas/src/components/ConversationTraceModal.tsx b/canvas/src/components/ConversationTraceModal.tsx index 90fcaed6..61a834c0 100644 --- a/canvas/src/components/ConversationTraceModal.tsx +++ b/canvas/src/components/ConversationTraceModal.tsx @@ -251,7 +251,7 @@ export function ConversationTraceModal({ open, workspaceId: _workspaceId, onClos {/* Error */} {isError && entry.error_detail && ( -
+
{entry.error_detail.slice(0, 200)}
)} @@ -272,7 +272,7 @@ export function ConversationTraceModal({ open, workspaceId: _workspaceId, onClos )} {responseText && (
-
Response
+
Response
{responseText.slice(0, 2000)} {responseText.length > 2000 && ( diff --git a/canvas/src/components/tabs/ActivityTab.tsx b/canvas/src/components/tabs/ActivityTab.tsx index 18e605a0..092a58bc 100644 --- a/canvas/src/components/tabs/ActivityTab.tsx +++ b/canvas/src/components/tabs/ActivityTab.tsx @@ -307,7 +307,7 @@ function ActivityRow({ {/* Error detail */} {isError && entry.error_detail && ( -
+
{entry.error_detail}
)} @@ -358,10 +358,10 @@ function A2AErrorPreview({ label, raw }: { label: string; raw: string }) { const hint = inferA2AErrorHint(detail); return (
-
{label} — delivery failed
+
{label} — delivery failed
{detail}
-
{hint}
+
{hint}
); diff --git a/canvas/src/components/tabs/ScheduleTab.tsx b/canvas/src/components/tabs/ScheduleTab.tsx index f3a2388c..ae7ac5aa 100644 --- a/canvas/src/components/tabs/ScheduleTab.tsx +++ b/canvas/src/components/tabs/ScheduleTab.tsx @@ -367,7 +367,7 @@ export function ScheduleTab({ workspaceId }: Props) { Runs: {sched.run_count}
{sched.last_error && ( -
+
Error: {sched.last_error}
)} diff --git a/canvas/src/components/tabs/SkillsTab.tsx b/canvas/src/components/tabs/SkillsTab.tsx index 60097625..74278a23 100644 --- a/canvas/src/components/tabs/SkillsTab.tsx +++ b/canvas/src/components/tabs/SkillsTab.tsx @@ -492,7 +492,7 @@ export function SkillsTab({ workspaceId, data }: Props) {
Couldn't load the plugin registry
-
{registryError}
+
{registryError}
Check the platform server is reachable at /plugins. The Retry button is in the header above.