@@ -4,12 +4,13 @@ import styles from "./MitigationCard.module.css";
44
55export default function MitigationCard ( { group, active, accent, t } ) {
66 const [ open , setOpen ] = useState ( false ) ;
7+
78 return (
89 < div
910 className = { `${ styles . card } ${ active ? "" : styles . cardInactive } ` }
1011 style = { {
11- border : `2px solid ${ active ? accent : "var(--border-subtle)" } ` ,
12- background : active ? `${ accent } 10` : "var(--bg-main) " ,
12+ border : `1px solid ${ active ? accent : "var(--border-subtle)" } ` ,
13+ background : active ? `${ accent } 10` : "transparent " ,
1314 } }
1415 >
1516 < div
@@ -18,34 +19,48 @@ export default function MitigationCard({ group, active, accent, t }) {
1819 style = { { cursor : active ? "pointer" : "default" } }
1920 >
2021 < div className = { styles . headerInfo } >
21- < span className = { styles . icon } > { group . icon } </ span >
22+ < span className = { styles . icon } style = { { opacity : active ? 1 : 0.35 } } >
23+ { active ? group . icon : "🔒" }
24+ </ span >
2225 < div >
23- < div className = { styles . title } style = { { color : active ? "var(--text-heading)" : "var(--text-secondary)" } } >
26+ < div
27+ className = { styles . title }
28+ style = { {
29+ color : active ? "var(--text-heading)" : "var(--text-secondary)" ,
30+ opacity : active ? 1 : 0.5 ,
31+ } }
32+ >
2433 { group . title }
2534 </ div >
26- < div className = { styles . subtitle } >
27- { group . measures . length } { group . measures . length !== 1 ? t . measures : t . measure }
35+ < div className = { styles . subtitle } style = { { opacity : active ? 1 : 0.4 } } >
36+ { active
37+ ? `${ group . measures . length } ${ group . measures . length !== 1 ? t . measures : t . measure } `
38+ : `Unlocks at Tier ${ group . tier } ` }
2839 </ div >
2940 </ div >
3041 </ div >
3142 { active && < span className = { `${ styles . chevron } ${ open ? styles . chevronOpen : "" } ` } > ▾</ span > }
3243 </ div >
33- { active && open && (
34- < div className = { styles . measures } >
35- { group . measures . map ( ( m , i ) => {
36- const tc = TYPE_COLORS [ m . type ] ;
37- return (
38- < div key = { i } className = { styles . measure } style = { { borderLeft : `3px solid ${ tc . color } ` } } >
39- < div className = { styles . measureHeader } >
40- < span className = { styles . measureName } > { m . name } </ span >
41- < span className = { styles . typeBadge } style = { { color : tc . color , background : tc . bg } } >
42- { t . typeBadges [ m . type ] }
43- </ span >
44+
45+ { /* Always rendered — grid-template-rows animates open/close smoothly */ }
46+ { active && (
47+ < div className = { `${ styles . measuresWrapper } ${ open ? styles . measuresWrapperOpen : "" } ` } >
48+ < div className = { styles . measures } >
49+ { group . measures . map ( ( m , i ) => {
50+ const tc = TYPE_COLORS [ m . type ] ;
51+ return (
52+ < div key = { i } className = { styles . measure } style = { { borderLeft : `3px solid ${ tc . color } ` } } >
53+ < div className = { styles . measureHeader } >
54+ < span className = { styles . measureName } > { m . name } </ span >
55+ < span className = { styles . typeBadge } style = { { color : tc . color , background : tc . bg } } >
56+ { t . typeBadges [ m . type ] }
57+ </ span >
58+ </ div >
59+ < div className = { styles . measureDesc } > { m . desc } </ div >
4460 </ div >
45- < div className = { styles . measureDesc } > { m . desc } </ div >
46- </ div >
47- ) ;
48- } ) }
61+ ) ;
62+ } ) }
63+ </ div >
4964 </ div >
5065 ) }
5166 </ div >
0 commit comments