Skip to content

Commit 346794f

Browse files
rdmuellerclaude
andcommitted
Improve contrast for WCAG accessibility compliance
Replace low-contrast colors (#475569, #64748b) with #94a3b8 (6.96:1 ratio) for text elements, inactive buttons, footer, and slider labels. Increase inactive card opacity from 0.35 to 0.5. Bump to v1.2.0. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 04b418e commit 346794f

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vibe-coding-risk-radar",
3-
"version": "1.1.0",
3+
"version": "1.2.0",
44
"description": "MECE risk framework for AI-generated code — interactive React component with AsciiDoc documentation",
55
"type": "module",
66
"scripts": {

src/RiskRadar.jsx

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useState, useRef, useEffect, useMemo } from "react";
22
import Asciidoctor from "@asciidoctor/core";
33
import T from "./i18n.js";
44

5-
const VERSION = "1.1.0";
5+
const VERSION = "1.2.0";
66

77
const TIER_BG = ["#10b981", "#f59e0b", "#f97316", "#ef4444"];
88
const TYPE_COLORS = {
@@ -57,16 +57,16 @@ function RadarChart({ values, dimensions, size = 320 }) {
5757
function MitigationCard({ group, active, accent, t }) {
5858
const [open, setOpen] = useState(false);
5959
return (
60-
<div style={{ border: `2px solid ${active ? accent : "#1e293b"}`, borderRadius: 12, background: active ? `${accent}10` : "#0f172a", padding: "12px 14px", opacity: active ? 1 : 0.35, transition: "all 0.3s" }}>
60+
<div style={{ border: `2px solid ${active ? accent : "#1e293b"}`, borderRadius: 12, background: active ? `${accent}10` : "#0f172a", padding: "12px 14px", opacity: active ? 1 : 0.5, transition: "all 0.3s" }}>
6161
<div onClick={() => active && setOpen(!open)} style={{ display: "flex", justifyContent: "space-between", alignItems: "center", cursor: active ? "pointer" : "default" }}>
6262
<div style={{ display: "flex", alignItems: "center", gap: 8 }}>
6363
<span style={{ fontSize: 18 }}>{group.icon}</span>
6464
<div>
65-
<div style={{ fontWeight: 700, fontSize: 13, color: active ? "#f8fafc" : "#64748b" }}>{group.title}</div>
66-
<div style={{ fontSize: 10, color: "#64748b" }}>{group.measures.length} {group.measures.length !== 1 ? t.measures : t.measure}</div>
65+
<div style={{ fontWeight: 700, fontSize: 13, color: active ? "#f8fafc" : "#94a3b8" }}>{group.title}</div>
66+
<div style={{ fontSize: 10, color: "#94a3b8" }}>{group.measures.length} {group.measures.length !== 1 ? t.measures : t.measure}</div>
6767
</div>
6868
</div>
69-
{active && <span style={{ fontSize: 16, color: "#64748b", transform: open ? "rotate(180deg)" : "rotate(0)", transition: "transform 0.2s" }}></span>}
69+
{active && <span style={{ fontSize: 16, color: "#94a3b8", transform: open ? "rotate(180deg)" : "rotate(0)", transition: "transform 0.2s" }}></span>}
7070
</div>
7171
{active && open && (
7272
<div style={{ marginTop: 10, display: "flex", flexDirection: "column", gap: 6 }}>
@@ -155,7 +155,7 @@ function DocSidebar({ docs, open, onClose }) {
155155
/>
156156
</div>
157157
))}
158-
<div style={{ borderTop: "1px solid #1e293b", paddingTop: 16, marginTop: 8, fontSize: 11, color: "#475569", textAlign: "center" }}>
158+
<div style={{ borderTop: "1px solid #1e293b", paddingTop: 16, marginTop: 8, fontSize: 11, color: "#94a3b8", textAlign: "center" }}>
159159
Generated with data from Veracode, CodeRabbit, BaxBench, Unit 42, Aikido Security, CSA, and others.
160160
</div>
161161
</div>
@@ -194,14 +194,14 @@ export default function RiskRadar() {
194194
</div>
195195

196196
<h1 style={{ fontSize: 22, fontWeight: 700, textAlign: "center", margin: "0 0 4px", color: "#f8fafc" }}>{t.title}</h1>
197-
<p style={{ textAlign: "center", color: "#64748b", fontSize: 13, margin: "0 0 18px" }}>{t.subtitle}</p>
197+
<p style={{ textAlign: "center", color: "#94a3b8", fontSize: 13, margin: "0 0 18px" }}>{t.subtitle}</p>
198198

199199
{/* Presets */}
200200
<div style={{ display: "flex", flexWrap: "wrap", gap: 5, justifyContent: "center", marginBottom: 18 }}>
201201
{t.presets.map((p) => {
202202
const active = JSON.stringify(values) === JSON.stringify(p.values);
203203
return (
204-
<button key={p.name} onClick={() => setValues(p.values)} style={{ padding: "4px 9px", fontSize: 11, borderRadius: 6, border: active ? `2px solid ${tc}` : "1px solid #334155", background: active ? `${tc}22` : "#1e293b", color: active ? "#f8fafc" : "#94a3b8", cursor: "pointer", fontWeight: active ? 600 : 400, transition: "all 0.15s" }}>
204+
<button key={p.name} onClick={() => setValues(p.values)} style={{ padding: "4px 9px", fontSize: 11, borderRadius: 6, border: active ? `2px solid ${tc}` : "1px solid #334155", background: active ? `${tc}22` : "#1e293b", color: active ? "#f8fafc" : "#cbd5e1", cursor: "pointer", fontWeight: active ? 600 : 400, transition: "all 0.15s" }}>
205205
{p.name}
206206
</button>
207207
);
@@ -232,7 +232,7 @@ export default function RiskRadar() {
232232
<span style={{ fontSize: 10, color: sc, fontWeight: 600 }}>{dim.levels[v]}</span>
233233
</div>
234234
<input type="range" min={0} max={4} step={1} value={v} onChange={(e) => set(dim.key, parseInt(e.target.value))} style={{ width: "100%", accentColor: sc, height: 5, cursor: "pointer" }} />
235-
<div style={{ display: "flex", justifyContent: "space-between", fontSize: 9, color: "#475569", marginTop: 1 }}>
235+
<div style={{ display: "flex", justifyContent: "space-between", fontSize: 9, color: "#94a3b8", marginTop: 1 }}>
236236
<span>{t.low}</span><span>{t.high}</span>
237237
</div>
238238
</div>
@@ -244,7 +244,7 @@ export default function RiskRadar() {
244244
<div style={{ width: "100%", maxWidth: 500, borderTop: "1px solid #1e293b", paddingTop: 18 }}>
245245
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "baseline", marginBottom: 12 }}>
246246
<h2 style={{ fontSize: 16, fontWeight: 700, margin: 0 }}>{t.mitigationHeading}</h2>
247-
<span style={{ fontSize: 11, color: "#64748b" }}>{activeCount} {t.active}</span>
247+
<span style={{ fontSize: 11, color: "#94a3b8" }}>{activeCount} {t.active}</span>
248248
</div>
249249
<div style={{ display: "flex", gap: 10, flexWrap: "wrap", marginBottom: 12 }}>
250250
{Object.entries(TYPE_COLORS).map(([key, c]) => (
@@ -262,9 +262,9 @@ export default function RiskRadar() {
262262
</div>
263263
</div>
264264

265-
<div style={{ marginTop: 24, fontSize: 10, color: "#475569", textAlign: "center", lineHeight: 1.8 }}>
266-
<div>v{VERSION} · <a href="https://github.com/LLM-Coding/vibe-coding-risk-radar" target="_blank" rel="noopener" style={{ color: "#64748b" }}>{t.footer.github}</a> · <a href={`docs/risk-radar${lang === "en" ? "-en" : ""}.html`} target="_blank" rel="noopener" style={{ color: "#64748b" }}>{t.footer.fullDocs}</a></div>
267-
<div>{t.footer.madeBy} <a href="https://www.linkedin.com/in/rdmueller" target="_blank" rel="noopener" style={{ color: "#64748b" }}>Ralf D. Müller</a></div>
265+
<div style={{ marginTop: 24, fontSize: 10, color: "#94a3b8", textAlign: "center", lineHeight: 1.8 }}>
266+
<div>v{VERSION} · <a href="https://github.com/LLM-Coding/vibe-coding-risk-radar" target="_blank" rel="noopener" style={{ color: "#94a3b8" }}>{t.footer.github}</a> · <a href={`docs/risk-radar${lang === "en" ? "-en" : ""}.html`} target="_blank" rel="noopener" style={{ color: "#94a3b8" }}>{t.footer.fullDocs}</a></div>
267+
<div>{t.footer.madeBy} <a href="https://www.linkedin.com/in/rdmueller" target="_blank" rel="noopener" style={{ color: "#94a3b8" }}>Ralf D. Müller</a></div>
268268
</div>
269269
</div>
270270

0 commit comments

Comments
 (0)