fix: migrate hardcoded hex values to CSS vars for light mode

Replace dark hex values with CSS custom properties across all panel,
card, modal, and focus components so light mode renders correctly.
Backgrounds, borders, and text colors now respond to data-theme attribute.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
“BeeRad”
2026-03-17 20:15:24 +11:00
co-authored by Claude Sonnet 4.6
parent bf175ad125
commit ffefc7b332
19 changed files with 474 additions and 474 deletions
+34 -34
View File
@@ -569,9 +569,9 @@ function MapPaneInner({
padding: '6px 10px',
background: viewMode === 'dimension' ? 'rgba(34, 197, 94, 0.12)' : 'transparent',
border: '1px solid',
borderColor: viewMode === 'dimension' ? 'rgba(34, 197, 94, 0.35)' : '#2a2a2a',
borderColor: viewMode === 'dimension' ? 'rgba(34, 197, 94, 0.35)' : 'var(--rah-border-strong)',
borderRadius: '6px',
color: viewMode === 'dimension' ? '#a7f3b8' : '#888',
color: viewMode === 'dimension' ? '#a7f3b8' : 'var(--rah-text-muted)',
fontSize: '12px',
cursor: 'pointer',
}}
@@ -584,9 +584,9 @@ function MapPaneInner({
padding: '6px 10px',
background: viewMode === 'hub' ? 'rgba(34, 197, 94, 0.12)' : 'transparent',
border: '1px solid',
borderColor: viewMode === 'hub' ? 'rgba(34, 197, 94, 0.35)' : '#2a2a2a',
borderColor: viewMode === 'hub' ? 'rgba(34, 197, 94, 0.35)' : 'var(--rah-border-strong)',
borderRadius: '6px',
color: viewMode === 'hub' ? '#a7f3b8' : '#888',
color: viewMode === 'hub' ? '#a7f3b8' : 'var(--rah-text-muted)',
fontSize: '12px',
cursor: 'pointer',
}}
@@ -606,9 +606,9 @@ function MapPaneInner({
padding: '6px 10px',
background: selectedDimension ? 'rgba(34, 197, 94, 0.1)' : 'transparent',
border: '1px solid',
borderColor: selectedDimension ? 'rgba(34, 197, 94, 0.3)' : '#2a2a2a',
borderColor: selectedDimension ? 'rgba(34, 197, 94, 0.3)' : 'var(--rah-border-strong)',
borderRadius: '6px',
color: selectedDimension ? '#22c55e' : '#888',
color: selectedDimension ? '#22c55e' : 'var(--rah-text-muted)',
fontSize: '12px',
cursor: 'pointer',
transition: 'all 0.15s ease',
@@ -627,8 +627,8 @@ function MapPaneInner({
top: '100%',
left: 0,
marginTop: '4px',
background: '#1a1a1a',
border: '1px solid #2a2a2a',
background: 'var(--rah-bg-active)',
border: '1px solid var(--rah-border-strong)',
borderRadius: '8px',
padding: '4px',
minWidth: '180px',
@@ -641,9 +641,9 @@ function MapPaneInner({
onClick={() => { setSelectedDimension(null); setDimensionDropdownOpen(false); }}
style={{
display: 'flex', alignItems: 'center', width: '100%', padding: '8px 12px',
background: !selectedDimension ? '#2a2a2a' : 'transparent',
background: !selectedDimension ? 'var(--rah-bg-active)' : 'transparent',
border: 'none', borderRadius: '4px',
color: !selectedDimension ? '#fff' : '#888',
color: !selectedDimension ? 'var(--rah-text-active)' : 'var(--rah-text-muted)',
fontSize: '12px', cursor: 'pointer', textAlign: 'left',
}}
>
@@ -657,21 +657,21 @@ function MapPaneInner({
onClick={() => { setSelectedDimension(dim.dimension); setDimensionDropdownOpen(false); }}
style={{
display: 'flex', alignItems: 'center', width: '100%', padding: '8px 12px',
background: selectedDimension === dim.dimension ? '#2a2a2a' : 'transparent',
background: selectedDimension === dim.dimension ? 'var(--rah-bg-active)' : 'transparent',
border: 'none', borderRadius: '4px',
color: selectedDimension === dim.dimension ? '#fff' : '#888',
color: selectedDimension === dim.dimension ? 'var(--rah-text-active)' : 'var(--rah-text-muted)',
fontSize: '12px', cursor: 'pointer', textAlign: 'left',
}}
onMouseEnter={e => {
if (selectedDimension !== dim.dimension) {
e.currentTarget.style.background = '#222';
e.currentTarget.style.color = '#ccc';
e.currentTarget.style.background = 'var(--rah-bg-active)';
e.currentTarget.style.color = 'var(--rah-text-secondary)';
}
}}
onMouseLeave={e => {
if (selectedDimension !== dim.dimension) {
e.currentTarget.style.background = 'transparent';
e.currentTarget.style.color = '#888';
e.currentTarget.style.color = 'var(--rah-text-muted)';
}
}}
>
@@ -685,9 +685,9 @@ function MapPaneInner({
</PaneHeader>
{/* Map content */}
<div style={{ position: 'relative', flex: 1, background: '#080808' }}>
<div style={{ position: 'relative', flex: 1, background: 'var(--rah-bg-base)' }}>
{loading ? (
<div style={{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#666' }}>
<div style={{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'var(--rah-text-muted)' }}>
Loading map...
</div>
) : error ? (
@@ -695,7 +695,7 @@ function MapPaneInner({
{error}
</div>
) : rfNodes.length === 0 ? (
<div style={{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#666' }}>
<div style={{ height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'var(--rah-text-muted)' }}>
No nodes to display
</div>
) : (
@@ -717,9 +717,9 @@ function MapPaneInner({
proOptions={{ hideAttribution: true }}
colorMode="dark"
>
<Background color="#1a1a1a" gap={40} size={1} />
<Background color="var(--rah-border)" gap={40} size={1} />
<MiniMap
style={{ background: '#0a0a0a', border: '1px solid #1f1f1f', borderRadius: 6 }}
style={{ background: 'var(--rah-bg-base)', border: '1px solid var(--rah-bg-active)', borderRadius: 6 }}
maskColor="rgba(0, 0, 0, 0.7)"
nodeColor={(node) => {
const data = node.data as RahNodeData | undefined;
@@ -737,7 +737,7 @@ function MapPaneInner({
position: 'absolute',
transform: `translate(${label.x}px, ${label.y}px)`,
pointerEvents: 'none',
color: '#7a7a7a',
color: 'var(--rah-text-muted)',
fontSize: '11px',
letterSpacing: '0.05em',
textTransform: 'uppercase',
@@ -761,10 +761,10 @@ function MapPaneInner({
style={{
padding: '4px 8px',
fontSize: 10,
background: '#1a1a1a',
border: '1px solid #2a2a2a',
background: 'var(--rah-bg-active)',
border: '1px solid var(--rah-border-strong)',
borderRadius: 4,
color: '#888',
color: 'var(--rah-text-muted)',
cursor: 'pointer',
}}
title="Fit all nodes"
@@ -777,10 +777,10 @@ function MapPaneInner({
style={{
padding: '4px 8px',
fontSize: 10,
background: '#1a1a1a',
border: '1px solid #2a2a2a',
background: 'var(--rah-bg-active)',
border: '1px solid var(--rah-border-strong)',
borderRadius: 4,
color: '#888',
color: 'var(--rah-text-muted)',
cursor: 'pointer',
}}
title="Fit to hub nodes"
@@ -794,17 +794,17 @@ function MapPaneInner({
{selectedDbNode && (
<div style={infoPanel}>
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'start', marginBottom: 8 }}>
<div style={{ fontWeight: 600, fontSize: 14, color: '#e5e7eb' }}>
<div style={{ fontWeight: 600, fontSize: 14, color: 'var(--rah-text-base)' }}>
{selectedDbNode.title || 'Untitled'}
</div>
<button
onClick={() => setSelectedNodeId(null)}
style={{ background: 'none', border: 'none', color: '#666', cursor: 'pointer', fontSize: 16, lineHeight: 1 }}
style={{ background: 'none', border: 'none', color: 'var(--rah-text-muted)', cursor: 'pointer', fontSize: 16, lineHeight: 1 }}
>
&times;
</button>
</div>
<div style={{ fontSize: 12, color: '#666', marginBottom: 8 }}>
<div style={{ fontSize: 12, color: 'var(--rah-text-muted)', marginBottom: 8 }}>
{connectedNodeIds.size} connected nodes
</div>
<div style={{ fontSize: 11, color: '#22c55e', marginBottom: 8 }}>
@@ -817,8 +817,8 @@ function MapPaneInner({
key={dim}
style={{
padding: '2px 8px', borderRadius: 999, fontSize: 11,
background: lockedDimensionNames.has(dim) ? '#132018' : '#1a1a1a',
color: lockedDimensionNames.has(dim) ? '#86efac' : '#888',
background: lockedDimensionNames.has(dim) ? '#132018' : 'var(--rah-bg-active)',
color: lockedDimensionNames.has(dim) ? '#86efac' : 'var(--rah-text-muted)',
}}
>
{dim}
@@ -869,8 +869,8 @@ const infoPanel: CSSProperties = {
bottom: 16,
left: 16,
width: 260,
background: '#0a0a0a',
border: '1px solid #1f1f1f',
background: 'var(--rah-bg-base)',
border: '1px solid var(--rah-bg-active)',
borderRadius: 8,
padding: 14,
zIndex: 10,