From ffefc7b332943788106ddb0a11ce42780ad84d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CBeeRad=E2=80=9D?= Date: Tue, 17 Mar 2026 20:15:24 +1100 Subject: [PATCH] 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 --- src/components/focus/FocusPanel.tsx | 258 +++++++++--------- src/components/focus/source/SourceReader.tsx | 10 +- src/components/layout/SplitHandle.tsx | 4 +- src/components/layout/ThreePanelLayout.tsx | 8 +- src/components/nodes/FolderViewOverlay.tsx | 102 +++---- src/components/nodes/SearchModal.tsx | 26 +- src/components/panes/GuidesPane.tsx | 60 ++-- src/components/panes/MapPane.tsx | 68 ++--- src/components/panes/NodePane.tsx | 32 +-- src/components/panes/PaneHeader.tsx | 14 +- .../panes/map/EdgeExplanationModal.tsx | 24 +- src/components/panes/map/RahEdge.tsx | 6 +- src/components/settings/DatabaseViewer.tsx | 80 +++--- src/components/settings/GuidesViewer.tsx | 44 +-- src/components/settings/LogsRow.tsx | 36 +-- src/components/settings/LogsViewer.tsx | 4 +- src/components/settings/SettingsModal.tsx | 42 +-- src/components/views/DatabaseTableView.tsx | 68 ++--- src/components/views/ViewsOverlay.tsx | 62 ++--- 19 files changed, 474 insertions(+), 474 deletions(-) diff --git a/src/components/focus/FocusPanel.tsx b/src/components/focus/FocusPanel.tsx index 7750f7a..378f76e 100644 --- a/src/components/focus/FocusPanel.tsx +++ b/src/components/focus/FocusPanel.tsx @@ -1256,7 +1256,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli const renderConnectionsBody = () => { if (!activeTab) { - return
Open a node to manage connections.
; + return
Open a node to manage connections.
; } return ( @@ -1282,11 +1282,11 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli placeholder="Search for a node to connect..." style={{ width: '100%', - background: '#111', - border: '1px solid #2a2a2a', + background: 'var(--rah-bg-surface)', + border: '1px solid var(--rah-border-strong)', borderRadius: '6px', padding: '8px 12px', - color: '#e5e5e5', + color: 'var(--rah-text-base)', fontSize: '12px', fontFamily: 'inherit', outline: 'none', @@ -1300,8 +1300,8 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli left: 0, right: 0, marginTop: '4px', - background: '#141414', - border: '1px solid #262626', + background: 'var(--rah-bg-panel)', + border: '1px solid var(--rah-border-strong)', borderRadius: '8px', maxHeight: '200px', overflowY: 'auto', @@ -1315,8 +1315,8 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli style={{ padding: '10px 14px', cursor: 'pointer', - borderBottom: index < nodeSearchSuggestions.length - 1 ? '1px solid #1f1f1f' : 'none', - background: index === selectedSearchIndex ? '#1a1a1a' : 'transparent', + borderBottom: index < nodeSearchSuggestions.length - 1 ? '1px solid var(--rah-bg-active)' : 'none', + background: index === selectedSearchIndex ? 'var(--rah-bg-active)' : 'transparent', transition: 'background 100ms ease', display: 'flex', alignItems: 'center', @@ -1324,7 +1324,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli }} onMouseEnter={(e) => { if (index !== selectedSearchIndex) { - e.currentTarget.style.background = '#1a1a1a'; + e.currentTarget.style.background = 'var(--rah-bg-active)'; } }} onMouseLeave={(e) => { @@ -1339,7 +1339,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli justifyContent: 'center', fontSize: '9px', fontWeight: 600, - color: '#0a0a0a', + color: 'var(--rah-bg-base)', background: '#22c55e', padding: '3px 6px', borderRadius: '6px', @@ -1352,7 +1352,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli {index === selectedSearchIndex && ( - + )} ))} @@ -1373,11 +1373,11 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli {/* Connections List */}
{loadingEdges.has(activeTab) ? ( -
Loading connections…
+
Loading connections…
) : (() => { const list = edgesData[activeTab] || []; if (list.length === 0) { - return
No connections yet.
; + return
No connections yet.
; } return (
@@ -1386,7 +1386,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli key={connection.id} style={{ padding: '6px 0', - borderBottom: '1px solid #141414', + borderBottom: '1px solid var(--rah-bg-panel)', display: 'flex', flexDirection: 'column', gap: '2px', @@ -1408,7 +1408,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli onNodeClick?.(connection.connected_node.id)} style={{ fontSize: '12px', - color: '#e5e5e5', + color: 'var(--rah-text-base)', fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis', @@ -1434,7 +1434,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli cursor: 'pointer', }} onMouseEnter={(e) => { e.currentTarget.style.color = '#22c55e'; }} - onMouseLeave={(e) => { e.currentTarget.style.color = '#e5e5e5'; }} + onMouseLeave={(e) => { e.currentTarget.style.color = 'var(--rah-text-base)'; }} > {connection.connected_node.title} @@ -1442,7 +1442,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli onClick={() => deleteEdge(connection.edge.id)} disabled={deletingEdge === connection.edge.id} style={{ - color: '#444', + color: 'var(--rah-border-stronger)', fontSize: '14px', background: 'transparent', border: 'none', @@ -1452,7 +1452,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli lineHeight: 1, }} onMouseEnter={(e) => { if (deletingEdge !== connection.edge.id) e.currentTarget.style.color = '#dc2626'; }} - onMouseLeave={(e) => { if (deletingEdge !== connection.edge.id) e.currentTarget.style.color = '#444'; }} + onMouseLeave={(e) => { if (deletingEdge !== connection.edge.id) e.currentTarget.style.color = 'var(--rah-border-stronger)'; }} > {deletingEdge === connection.edge.id ? '...' : '×'} @@ -1475,9 +1475,9 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli style={{ flex: 1, fontSize: '11px', - color: '#ddd', - background: '#111', - border: '1px solid #2a2a2a', + color: 'var(--rah-text-base)', + background: 'var(--rah-bg-surface)', + border: '1px solid var(--rah-border-strong)', borderRadius: '4px', padding: '3px 6px', outline: 'none', @@ -1508,7 +1508,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli onClick={cancelEditEdgeExplanation} style={{ fontSize: '10px', - color: '#666', + color: 'var(--rah-text-muted)', background: 'transparent', border: 'none', padding: '3px 4px', @@ -1536,9 +1536,9 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli {typeof connection.edge.context?.type === 'string' && ( No tabs open
@@ -1658,9 +1658,9 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli style={{ display: 'flex', alignItems: 'center', - borderRight: '1px solid #1a1a1a', - background: isActive ? '#121212' : '#0f0f0f', - borderBottom: isActive ? '2px solid #666' : 'none', + borderRight: '1px solid var(--rah-border)', + background: isActive ? 'var(--rah-bg-subtle)' : 'var(--rah-bg-surface)', + borderBottom: isActive ? '2px solid var(--rah-text-muted)' : 'none', paddingBottom: isActive ? '0' : '2px', minWidth: '120px', maxWidth: '200px', @@ -1674,7 +1674,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli padding: '8px 12px', fontSize: '12px', fontFamily: 'inherit', - color: isActive ? '#fff' : '#999', + color: isActive ? 'var(--rah-text-active)' : 'var(--rah-text-muted)', background: 'transparent', border: 'none', cursor: 'pointer', @@ -1694,14 +1694,14 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli style={{ padding: '4px 8px', fontSize: '14px', - color: '#666', + color: 'var(--rah-text-muted)', background: 'transparent', border: 'none', cursor: 'pointer', transition: 'color 0.2s' }} - onMouseEnter={(e) => { e.currentTarget.style.color = '#fff'; }} - onMouseLeave={(e) => { e.currentTarget.style.color = '#666'; }} + onMouseEnter={(e) => { e.currentTarget.style.color = 'var(--rah-text-active)'; }} + onMouseLeave={(e) => { e.currentTarget.style.color = 'var(--rah-text-muted)'; }} > × @@ -1721,7 +1721,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli }}> {!activeTab ? (
) : loadingNodes.has(activeTab) ? (
Loading...
) : !currentNode ? ( -
Node not found.
+
Node not found.
) : nodesData[activeTab] ? (
{/* URL Row - Above Title */} @@ -1800,7 +1800,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli color: '#3b82f6', fontSize: '11px', background: 'transparent', - border: '1px solid #1a1a1a', + border: '1px solid var(--rah-border)', borderRadius: '4px', padding: '4px 6px', fontFamily: 'inherit', @@ -1847,7 +1847,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli startEdit('link', '')} style={{ - color: '#555', + color: 'var(--rah-text-muted)', fontSize: '11px', cursor: 'pointer', fontStyle: 'italic' @@ -1879,7 +1879,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli style={{ display: 'inline-block', background: '#22c55e', - color: '#0a0a0a', + color: 'var(--rah-bg-base)', fontSize: '10px', fontWeight: 600, padding: '2px 6px', @@ -1911,9 +1911,9 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli style={{ fontSize: '20px', fontWeight: 'bold', - color: '#fff', + color: 'var(--rah-text-active)', background: 'transparent', - border: '1px solid #1a1a1a', + border: '1px solid var(--rah-border)', borderRadius: '0', padding: '4px 8px', fontFamily: 'inherit', @@ -1937,7 +1937,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli style={{ fontSize: '20px', fontWeight: 'bold', - color: '#fff', + color: 'var(--rah-text-active)', fontFamily: 'inherit', cursor: 'pointer', padding: '4px 8px', @@ -1958,7 +1958,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli }) }} onMouseEnter={(e) => { - e.currentTarget.style.borderColor = '#1a1a1a'; + e.currentTarget.style.borderColor = 'var(--rah-border)'; }} onMouseLeave={(e) => { e.currentTarget.style.borderColor = 'transparent'; @@ -1966,7 +1966,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli title={titleExpanded[activeTab] ? undefined : (nodesData[activeTab].title || 'Untitled')} > {nodesData[activeTab].title || 'Untitled'} - {savingField === 'title' && saving...} + {savingField === 'title' && saving...} )} @@ -1980,10 +1980,10 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli padding: '4px 8px', fontSize: '10px', fontWeight: 500, - color: activeContentTab === 'edges' ? '#22c55e' : '#666', + color: activeContentTab === 'edges' ? '#22c55e' : 'var(--rah-text-muted)', background: activeContentTab === 'edges' ? '#0f2417' : 'transparent', border: '1px solid', - borderColor: activeContentTab === 'edges' ? '#22c55e' : '#262626', + borderColor: activeContentTab === 'edges' ? '#22c55e' : 'var(--rah-border-strong)', borderRadius: '4px', cursor: 'pointer', transition: 'all 0.2s', @@ -1997,8 +1997,8 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli }} onMouseLeave={(e) => { if (activeContentTab !== 'edges') { - e.currentTarget.style.color = '#666'; - e.currentTarget.style.borderColor = '#262626'; + e.currentTarget.style.color = 'var(--rah-text-muted)'; + e.currentTarget.style.borderColor = 'var(--rah-border-strong)'; } }} title="Connections" @@ -2016,8 +2016,8 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli alignItems: 'center', justifyContent: 'center', padding: '0 6px', - background: activeContentTab === 'edges' ? 'rgba(34, 197, 94, 0.18)' : '#1a1a1a', - color: activeContentTab === 'edges' ? '#a7f3b8' : '#888', + background: activeContentTab === 'edges' ? 'rgba(34, 197, 94, 0.18)' : 'var(--rah-bg-active)', + color: activeContentTab === 'edges' ? '#a7f3b8' : 'var(--rah-text-muted)', fontSize: '10px', lineHeight: 1, }} @@ -2039,7 +2039,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli padding: '4px', color: deletingNode === activeTab ? '#994444' : '#525252', background: 'transparent', - border: '1px solid #262626', + border: '1px solid var(--rah-border-strong)', borderRadius: '4px', cursor: deletingNode === activeTab ? 'wait' : 'pointer', transition: 'all 0.2s', @@ -2055,7 +2055,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli onMouseLeave={(e) => { if (deletingNode !== activeTab) { e.currentTarget.style.color = '#525252'; - e.currentTarget.style.borderColor = '#262626'; + e.currentTarget.style.borderColor = 'var(--rah-border-strong)'; e.currentTarget.style.background = 'transparent'; } }} @@ -2132,7 +2132,7 @@ export default function FocusPanel({ openTabs, activeTab, onTabSelect, onNodeCli alignItems: 'center', gap: '0', marginBottom: '12px', - borderBottom: '1px solid #1a1a1a' + borderBottom: '1px solid var(--rah-border)' }}> ))} {nodesLoading && ( -
Loading...
+
Loading...
)} {!nodesLoading && nodes.length === 0 && ( -
+
No nodes in this dimension yet.
)} @@ -1224,8 +1224,8 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o alignItems: 'center', gap: '8px', padding: '8px 24px', - borderBottom: '1px solid #1a1a1a', - background: '#0a0a0a', + borderBottom: '1px solid var(--rah-border)', + background: 'var(var(--rah-bg-base))', flexShrink: 0 }}> @@ -1233,7 +1233,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o {kanbanColumns.length === 0 && ( - + Add dimensions to create columns )} @@ -1246,11 +1246,11 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o alignItems: 'center', gap: '4px', padding: '4px 8px', - background: '#1a1a1a', + background: 'var(var(--rah-bg-active))', border: '1px solid #333', borderRadius: '6px', fontSize: '11px', - color: '#888', + color: 'var(var(--rah-text-muted))', cursor: 'pointer' }} > @@ -1266,7 +1266,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o marginTop: '4px', width: '200px', maxHeight: '300px', - background: '#1a1a1a', + background: 'var(var(--rah-bg-active))', border: '1px solid #333', borderRadius: '8px', overflow: 'hidden', @@ -1281,10 +1281,10 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o style={{ width: '100%', padding: '8px 12px', - background: '#0a0a0a', + background: 'var(var(--rah-bg-base))', border: 'none', borderBottom: '1px solid #333', - color: '#fff', + color: 'var(var(--rah-text-active))', fontSize: '12px', outline: 'none' }} @@ -1295,7 +1295,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o
No dimensions available @@ -1310,7 +1310,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o padding: '8px 12px', background: 'transparent', border: 'none', - color: '#ccc', + color: 'var(var(--rah-text-secondary))', fontSize: '12px', textAlign: 'left', cursor: 'pointer' @@ -1357,7 +1357,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o display: 'flex', flexDirection: 'column', background: isDropTarget ? '#0f2417' : '#0a0a0a', - border: '1px solid #1a1a1a', + border: '1px solid var(--rah-border)', borderRadius: '12px', transition: 'all 0.2s' }} @@ -1371,7 +1371,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o alignItems: 'center', justifyContent: 'space-between', padding: '12px', - borderBottom: '1px solid #1a1a1a' + borderBottom: '1px solid var(--rah-border)' }}>
@@ -1404,7 +1404,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o border: 'none', padding: '4px', cursor: 'pointer', - color: '#666', + color: 'var(var(--rah-text-muted))', display: 'flex', alignItems: 'center' }} @@ -1433,7 +1433,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o padding: '10px', marginBottom: '6px', background: draggedNodeId === node.id ? '#1a1a1a' : '#111', - border: '1px solid #222', + border: '1px solid var(--rah-border-strong)', borderRadius: '8px', cursor: 'pointer', opacity: draggedNodeId === node.id ? 0.5 : 1, @@ -1478,10 +1478,10 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o key={dim} style={{ padding: '2px 6px', - background: '#1a1a1a', + background: 'var(var(--rah-bg-active))', borderRadius: '4px', fontSize: '10px', - color: '#666' + color: 'var(var(--rah-text-muted))' }} > {dim} @@ -1514,7 +1514,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o display: 'flex', alignItems: 'center', justifyContent: 'center', - color: '#666', + color: 'var(var(--rah-text-muted))', fontSize: '13px' }}> Add dimension columns to organize your nodes @@ -1548,8 +1548,8 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o style={{ padding: '10px 18px', borderRadius: '999px', - border: '1px solid #1f1f1f', - background: '#111', + border: '1px solid var(--rah-bg-active)', + background: 'var(var(--rah-bg-surface))', color: '#f1f5f9', cursor: nodesLoading ? 'not-allowed' : 'pointer' }} @@ -1578,7 +1578,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o style={{ padding: '6px', borderRadius: '6px', - border: '1px solid #1f1f1f', + border: '1px solid var(--rah-bg-active)', background: 'transparent', cursor: 'pointer', color: '#cbd5f5' @@ -1611,9 +1611,9 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o justifyContent: 'center', width: '28px', height: '28px', - color: '#555', + color: 'var(var(--rah-text-muted))', background: 'transparent', - border: '1px solid #1f1f1f', + border: '1px solid var(--rah-bg-active)', borderRadius: '6px', cursor: 'pointer', transition: 'all 0.15s' @@ -1636,10 +1636,10 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o width: '28px', height: '28px', borderRadius: '6px', - border: '1px solid #1f1f1f', + border: '1px solid var(--rah-bg-active)', background: 'transparent', cursor: 'pointer', - color: '#555', + color: 'var(var(--rah-text-muted))', transition: 'all 0.15s' }} onMouseEnter={(e) => { e.currentTarget.style.color = '#888'; e.currentTarget.style.background = '#1a1a1a'; }} @@ -1668,7 +1668,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o }} > {toolbarHost ? createPortal(toolbar, toolbarHost) : ( -
+
{toolbar}
)} @@ -1716,7 +1716,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o >
Edit Dimension
@@ -1779,7 +1779,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o alignItems: 'center', justifyContent: 'center', cursor: 'pointer', - color: '#666' + color: 'var(var(--rah-text-muted))' }} > @@ -1800,7 +1800,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o display: 'block', fontSize: '12px', fontWeight: 600, - color: '#888', + color: 'var(var(--rah-text-muted))', marginBottom: '8px', textTransform: 'uppercase', letterSpacing: '0.05em' @@ -1816,10 +1816,10 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o width: '100%', minHeight: '80px', padding: '12px', - background: '#111', + background: 'var(var(--rah-bg-surface))', border: '1px solid #333', borderRadius: '8px', - color: '#e5e5e5', + color: 'var(var(--rah-text-base))', fontSize: '13px', resize: 'vertical', outline: 'none' @@ -1834,7 +1834,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o
{editModalDescription.length}/500 @@ -1847,7 +1847,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o display: 'block', fontSize: '12px', fontWeight: 600, - color: '#888', + color: 'var(var(--rah-text-muted))', marginBottom: '8px', textTransform: 'uppercase', letterSpacing: '0.05em' @@ -1864,7 +1864,7 @@ export default function FolderViewOverlay({ onClose, onNodeOpen, refreshToken, o {/* Footer */}
{ e.currentTarget.style.color = '#ccc'; }} - onMouseLeave={e => { e.currentTarget.style.color = '#888'; }} + onMouseEnter={e => { e.currentTarget.style.color = 'var(--rah-text-secondary)'; }} + onMouseLeave={e => { e.currentTarget.style.color = 'var(--rah-text-muted)'; }} > - + {selectedGuide.immutable && } {selectedGuide.name}
) : ( - + {userGuides.length} of 10 custom guides )} @@ -134,22 +134,22 @@ export default function GuidesPane({
{loading ? ( -
+
Loading...
) : selectedGuide ? ( -
+
( -

{children}

+

{children}

), h2: ({ children }) => ( -

{children}

+

{children}

), h3: ({ children }) => ( -

{children}

+

{children}

), p: ({ children }) => (

{children}

@@ -168,7 +168,7 @@ export default function GuidesPane({ if (isInline) { return ( {children} ); @@ -194,17 +194,17 @@ export default function GuidesPane({
{children}
), strong: ({ children }) => ( - {children} + {children} ), hr: () => ( -
+
), blockquote: ({ children }) => (
{children}
), }} @@ -215,13 +215,13 @@ export default function GuidesPane({ ) : (
{guides.length === 0 ? ( -
+
No guides found
) : ( <> {systemGuides.length > 0 && ( -
+
System Guides
)} @@ -235,7 +235,7 @@ export default function GuidesPane({ /> ))} {userGuides.length > 0 && ( -
+
Custom Guides
)} @@ -276,30 +276,30 @@ function GuideCard({ alignItems: 'center', gap: '8px', padding: '12px', - background: '#161616', - border: '1px solid #222', + background: 'var(--rah-bg-elevated)', + border: '1px solid var(--rah-bg-active)', borderRadius: '8px', cursor: 'pointer', textAlign: 'left', transition: 'all 0.15s ease', }} onMouseEnter={e => { - e.currentTarget.style.background = '#1a1a1a'; - e.currentTarget.style.borderColor = '#333'; + e.currentTarget.style.background = 'var(--rah-bg-active)'; + e.currentTarget.style.borderColor = 'var(--rah-border-stronger)'; }} onMouseLeave={e => { - e.currentTarget.style.background = '#161616'; - e.currentTarget.style.borderColor = '#222'; + e.currentTarget.style.background = 'var(--rah-bg-elevated)'; + e.currentTarget.style.borderColor = 'var(--rah-bg-active)'; }} > {guide.immutable && ( )}
- + {guide.name} - + {guide.description}
@@ -310,7 +310,7 @@ function GuideCard({ style={{ background: 'none', border: 'none', - color: '#555', + color: 'var(--rah-text-muted)', cursor: 'pointer', padding: '4px', borderRadius: '4px', @@ -320,7 +320,7 @@ function GuideCard({ opacity: deleting === guide.name ? 0.3 : 1, }} onMouseEnter={e => { e.currentTarget.style.color = '#ef4444'; }} - onMouseLeave={e => { e.currentTarget.style.color = '#555'; }} + onMouseLeave={e => { e.currentTarget.style.color = 'var(--rah-text-muted)'; }} > diff --git a/src/components/panes/MapPane.tsx b/src/components/panes/MapPane.tsx index b5a9f70..93efc45 100644 --- a/src/components/panes/MapPane.tsx +++ b/src/components/panes/MapPane.tsx @@ -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({ {/* Map content */} -
+
{loading ? ( -
+
Loading map...
) : error ? ( @@ -695,7 +695,7 @@ function MapPaneInner({ {error}
) : rfNodes.length === 0 ? ( -
+
No nodes to display
) : ( @@ -717,9 +717,9 @@ function MapPaneInner({ proOptions={{ hideAttribution: true }} colorMode="dark" > - + { 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 && (
-
+
{selectedDbNode.title || 'Untitled'}
-
+
{connectedNodeIds.size} connected nodes
@@ -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, diff --git a/src/components/panes/NodePane.tsx b/src/components/panes/NodePane.tsx index 0a4aa4d..6c2ceff 100644 --- a/src/components/panes/NodePane.tsx +++ b/src/components/panes/NodePane.tsx @@ -95,7 +95,7 @@ export default function NodePane({ {/* Tabs rendered inline */} {openTabs.length === 0 ? ( - No tabs open + No tabs open ) : ( openTabs.map((tabId) => { const title = nodeTitles[tabId] || 'Loading...'; @@ -118,7 +118,7 @@ export default function NodePane({ alignItems: 'center', gap: '4px', padding: '4px 8px', - background: isActiveTab ? '#1f1f1f' : 'transparent', + background: isActiveTab ? 'var(--rah-bg-active)' : 'transparent', borderRadius: '4px', cursor: 'grab', flexShrink: 0, @@ -128,7 +128,7 @@ export default function NodePane({ onClick={() => onTabSelect(tabId)} style={{ fontSize: '11px', - color: isActiveTab ? '#fff' : '#888', + color: isActiveTab ? 'var(--rah-text-active)' : 'var(--rah-text-muted)', background: 'transparent', border: 'none', cursor: 'pointer', @@ -145,15 +145,15 @@ export default function NodePane({ }} style={{ fontSize: '12px', - color: '#666', + color: 'var(--rah-text-muted)', background: 'transparent', border: 'none', cursor: 'pointer', padding: '0 2px', lineHeight: 1, }} - onMouseEnter={(e) => { e.currentTarget.style.color = '#fff'; }} - onMouseLeave={(e) => { e.currentTarget.style.color = '#666'; }} + onMouseEnter={(e) => { e.currentTarget.style.color = 'var(--rah-text-active)'; }} + onMouseLeave={(e) => { e.currentTarget.style.color = 'var(--rah-text-muted)'; }} > × @@ -186,8 +186,8 @@ export default function NodePane({ position: 'fixed', top: contextMenu.y, left: contextMenu.x, - background: '#1a1a1a', - border: '1px solid #2a2a2a', + background: 'var(--rah-bg-active)', + border: '1px solid var(--rah-border-strong)', borderRadius: '6px', padding: '4px', zIndex: 9999, @@ -211,18 +211,18 @@ export default function NodePane({ background: 'transparent', border: 'none', borderRadius: '4px', - color: '#ccc', + color: 'var(--rah-text-secondary)', fontSize: '12px', cursor: 'pointer', textAlign: 'left', }} onMouseEnter={(e) => { - e.currentTarget.style.background = '#2a2a2a'; - e.currentTarget.style.color = '#fff'; + e.currentTarget.style.background = 'var(--rah-bg-active)'; + e.currentTarget.style.color = 'var(--rah-text-active)'; }} onMouseLeave={(e) => { e.currentTarget.style.background = 'transparent'; - e.currentTarget.style.color = '#ccc'; + e.currentTarget.style.color = 'var(--rah-text-secondary)'; }} > @@ -243,18 +243,18 @@ export default function NodePane({ background: 'transparent', border: 'none', borderRadius: '4px', - color: '#ccc', + color: 'var(--rah-text-secondary)', fontSize: '12px', cursor: 'pointer', textAlign: 'left', }} onMouseEnter={(e) => { - e.currentTarget.style.background = '#2a2a2a'; - e.currentTarget.style.color = '#fff'; + e.currentTarget.style.background = 'var(--rah-bg-active)'; + e.currentTarget.style.color = 'var(--rah-text-active)'; }} onMouseLeave={(e) => { e.currentTarget.style.background = 'transparent'; - e.currentTarget.style.color = '#ccc'; + e.currentTarget.style.color = 'var(--rah-text-secondary)'; }} > × diff --git a/src/components/panes/PaneHeader.tsx b/src/components/panes/PaneHeader.tsx index a6c0eaf..5af39f9 100644 --- a/src/components/panes/PaneHeader.tsx +++ b/src/components/panes/PaneHeader.tsx @@ -91,7 +91,7 @@ export default function PaneHeader({ /> ) : null} {!tabBar && !children && !toolbarHostRef ? ( -
+
) : null}
@@ -102,9 +102,9 @@ export default function PaneHeader({ width: '32px', height: '32px', borderRadius: '8px', - border: '1px solid #3a3a3a', - background: '#161616', - color: '#c2c2c2', + border: '1px solid var(--rah-border-stronger)', + background: 'var(--rah-bg-elevated)', + color: 'var(--rah-text-secondary)', display: 'flex', alignItems: 'center', justifyContent: 'center', @@ -119,9 +119,9 @@ export default function PaneHeader({ e.currentTarget.style.color = '#fca5a5'; }} onMouseLeave={(e) => { - e.currentTarget.style.background = '#161616'; - e.currentTarget.style.borderColor = '#3a3a3a'; - e.currentTarget.style.color = '#c2c2c2'; + e.currentTarget.style.background = 'var(--rah-bg-elevated)'; + e.currentTarget.style.borderColor = 'var(--rah-border-stronger)'; + e.currentTarget.style.color = 'var(--rah-text-secondary)'; }} > diff --git a/src/components/panes/map/EdgeExplanationModal.tsx b/src/components/panes/map/EdgeExplanationModal.tsx index eb79b99..610e77d 100644 --- a/src/components/panes/map/EdgeExplanationModal.tsx +++ b/src/components/panes/map/EdgeExplanationModal.tsx @@ -94,7 +94,7 @@ export default function EdgeExplanationModal({ .edge-modal-backdrop { position: fixed; inset: 0; - background: rgba(0, 0, 0, 0.85); + background: var(--rah-backdrop); backdrop-filter: blur(8px); display: flex; justify-content: center; @@ -110,8 +110,8 @@ export default function EdgeExplanationModal({ } .edge-modal-card { - background: #141414; - border: 1px solid #262626; + background: var(--rah-bg-panel); + border: 1px solid var(--rah-border-strong); border-radius: 16px; padding: 24px; box-shadow: @@ -144,14 +144,14 @@ export default function EdgeExplanationModal({ } .edge-modal-input-wrapper { - border: 1px solid #262626; + border: 1px solid var(--rah-border-strong); border-radius: 12px; - background: #0a0a0a; + background: var(--rah-bg-base); transition: border-color 0.15s ease; } .edge-modal-input-wrapper:focus-within { - border-color: #333; + border-color: var(--rah-border-stronger); } .edge-modal-textarea { @@ -188,12 +188,12 @@ export default function EdgeExplanationModal({ align-items: center; justify-content: center; padding: 2px 6px; - background: #262626; + background: var(--rah-border-strong); border-radius: 4px; font-size: 10px; font-family: inherit; color: #737373; - border: 1px solid #333; + border: 1px solid var(--rah-border-stronger); } .edge-modal-actions { @@ -213,17 +213,17 @@ export default function EdgeExplanationModal({ .edge-modal-btn--cancel { background: transparent; - border: 1px solid #262626; + border: 1px solid var(--rah-border-strong); color: #737373; } .edge-modal-btn--cancel:hover { - border-color: #333; - color: #a3a3a3; + border-color: var(--rah-border-stronger); + color: var(--rah-text-soft); } .edge-modal-btn--submit { - background: #262626; + background: var(--rah-border-strong); border: 1px solid transparent; color: #525252; cursor: default; diff --git a/src/components/panes/map/RahEdge.tsx b/src/components/panes/map/RahEdge.tsx index d19a994..5495fec 100644 --- a/src/components/panes/map/RahEdge.tsx +++ b/src/components/panes/map/RahEdge.tsx @@ -56,12 +56,12 @@ function RahEdgeComponent({ >
+
Loading database...
); @@ -212,7 +212,7 @@ export default function DatabaseViewer() { if (nodes.length === 0) { return ( -
+
No nodes found
); @@ -223,30 +223,30 @@ export default function DatabaseViewer() {
-