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() {
-