@@ -2,7 +2,7 @@ import { useState, useRef, useEffect, useMemo } from "react";
22import Asciidoctor from "@asciidoctor/core" ;
33import T from "./i18n.js" ;
44
5- const VERSION = "1.1 .0" ;
5+ const VERSION = "1.2 .0" ;
66
77const TIER_BG = [ "#10b981" , "#f59e0b" , "#f97316" , "#ef4444" ] ;
88const TYPE_COLORS = {
@@ -57,16 +57,16 @@ function RadarChart({ values, dimensions, size = 320 }) {
5757function 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