@ltm-blueverse/alpha-semantic-hub 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +307 -1567
  2. package/explorer/src/App.tsx +83 -83
  3. package/explorer/src/index.css +3 -3
  4. package/explorer/src/ui/primitives.css +25 -25
  5. package/explorer/src/workspaces/DecisionWorkspace/DecisionWorkspace.tsx +7 -7
  6. package/explorer/src/workspaces/DiffMergeWorkspace/DiffMergeWorkspace.tsx +4 -4
  7. package/explorer/src/workspaces/EnrichWorkspace/EntityResolutionTab.tsx +24 -24
  8. package/explorer/src/workspaces/EnrichWorkspace/RegistryTab.tsx +22 -22
  9. package/explorer/src/workspaces/GraphWorkspace/GraphCanvas.tsx +1 -1
  10. package/explorer/src/workspaces/GraphWorkspace/GraphInspectorPanel.tsx +18 -18
  11. package/explorer/src/workspaces/GraphWorkspace/GraphLoadingOverlay.tsx +25 -25
  12. package/explorer/src/workspaces/GraphWorkspace/GraphWorkspace.tsx +28 -28
  13. package/explorer/src/workspaces/GraphWorkspace/MarkdownContentViewer.tsx +15 -15
  14. package/explorer/src/workspaces/GraphWorkspace/graphAnalytics.ts +1 -1
  15. package/explorer/src/workspaces/GraphWorkspace/graphConfig.ts +15 -15
  16. package/explorer/src/workspaces/GraphWorkspace/graphSceneLayers.ts +8 -8
  17. package/explorer/src/workspaces/GraphWorkspace/graphSceneState.ts +11 -11
  18. package/explorer/src/workspaces/GraphWorkspace/graphTheme.ts +66 -66
  19. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPlugin.tsx +17 -17
  20. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPluginPhaseC.tsx +22 -22
  21. package/explorer/src/workspaces/GraphWorkspace/plugins/legendPlugin.tsx +7 -7
  22. package/explorer/src/workspaces/GraphWorkspace/plugins/neighborhoodPanelPlugin.tsx +10 -10
  23. package/explorer/src/workspaces/GraphWorkspace/plugins/temporalOverlayPlugin.tsx +9 -9
  24. package/explorer/src/workspaces/ImportExportWorkspace/ImportExportWorkspace.tsx +4 -4
  25. package/explorer/src/workspaces/LineageWorkspace/LineageDiagram.tsx +8 -8
  26. package/explorer/src/workspaces/ManageWorkspace/KGOverviewTab.tsx +5 -5
  27. package/explorer/src/workspaces/ManageWorkspace/OntologySummaryTab.tsx +19 -19
  28. package/explorer/src/workspaces/MemoryWorkspace.tsx +2 -2
  29. package/explorer/src/workspaces/OntologyWorkspace/AlignmentsTab.tsx +30 -30
  30. package/explorer/src/workspaces/OntologyWorkspace/HealthTab.tsx +26 -26
  31. package/explorer/src/workspaces/OntologyWorkspace/OntologyEditor.tsx +32 -32
  32. package/explorer/src/workspaces/OntologyWorkspace/OntologyLoader.tsx +22 -22
  33. package/explorer/src/workspaces/OntologyWorkspace/OntologyManager.tsx +40 -40
  34. package/explorer/src/workspaces/OntologyWorkspace/OntologySearch.tsx +22 -22
  35. package/explorer/src/workspaces/OntologyWorkspace/ProposalReview.tsx +31 -31
  36. package/explorer/src/workspaces/OntologyWorkspace/SKOSVocabularyManager.tsx +26 -26
  37. package/explorer/src/workspaces/OntologyWorkspace/ShaclStudio.tsx +21 -21
  38. package/explorer/src/workspaces/OntologyWorkspace/VersionsTab.tsx +38 -38
  39. package/explorer/src/workspaces/OntologyWorkspace/ontologyEditorModel.ts +3 -3
  40. package/explorer/src/workspaces/ReasoningWorkspace.tsx +4 -4
  41. package/explorer/src/workspaces/SparqlWorkspace/SparqlWorkspace.tsx +3 -3
  42. package/explorer/src/workspaces/VocabularyWorkspace/ConceptTree.tsx +3 -3
  43. package/explorer/src/workspaces/VocabularyWorkspace/ImportDropzone.tsx +4 -4
  44. package/explorer/src/workspaces/VocabularyWorkspace/PropertyPanel.tsx +8 -8
  45. package/explorer/src/workspaces/VocabularyWorkspace/Sidebar.tsx +4 -4
  46. package/explorer/src/workspaces/VocabularyWorkspace/VocabularyWorkspace.tsx +3 -3
  47. package/package.json +1 -1
@@ -61,10 +61,10 @@ function sourceAttribution(properties: Record<string, unknown>) {
61
61
  /* ─── Path Distance Intelligence Panel ──────────────────────────── */
62
62
 
63
63
  const BAND_COLORS: Record<string, string> = {
64
- direct: "#3fb950",
65
- near: "#ff8fa0",
66
- "mid-range": "#e3b341",
67
- distant: "#ff7b72",
64
+ direct: "#22863a",
65
+ near: "#d9455e",
66
+ "mid-range": "#9a6700",
67
+ distant: "#ec2315",
68
68
  };
69
69
 
70
70
  function PathDistanceIntelPanel({ result }: { result: PathResponse }) {
@@ -105,7 +105,7 @@ function PathDistanceIntelPanel({ result }: { result: PathResponse }) {
105
105
  <div
106
106
  style={{
107
107
  ...metricValueStyle,
108
- color: result.confidence_decay > 0.6 ? "#3fb950" : result.confidence_decay > 0.3 ? "#e3b341" : "#ff7b72",
108
+ color: result.confidence_decay > 0.6 ? "#22863a" : result.confidence_decay > 0.3 ? "#9a6700" : "#ec2315",
109
109
  }}
110
110
  >
111
111
  {(result.confidence_decay * 100).toFixed(1)}%
@@ -116,7 +116,7 @@ function PathDistanceIntelPanel({ result }: { result: PathResponse }) {
116
116
  ...metricBarFillStyle,
117
117
  width: `${result.confidence_decay * 100}%`,
118
118
  background:
119
- result.confidence_decay > 0.6 ? "#3fb950" : result.confidence_decay > 0.3 ? "#e3b341" : "#ff7b72",
119
+ result.confidence_decay > 0.6 ? "#22863a" : result.confidence_decay > 0.3 ? "#9a6700" : "#ec2315",
120
120
  }}
121
121
  />
122
122
  </div>
@@ -125,11 +125,11 @@ function PathDistanceIntelPanel({ result }: { result: PathResponse }) {
125
125
  {result.semantic_similarity != null && (
126
126
  <div style={metricCardStyle}>
127
127
  <div style={metricLabelStyle}>Semantic Sim.</div>
128
- <div style={{ ...metricValueStyle, color: "#ff8fa0" }}>
128
+ <div style={{ ...metricValueStyle, color: "#d9455e" }}>
129
129
  {(result.semantic_similarity * 100).toFixed(1)}%
130
130
  </div>
131
131
  <div style={metricBarTrackStyle}>
132
- <div style={{ ...metricBarFillStyle, width: `${result.semantic_similarity * 100}%`, background: "#ff8fa0" }} />
132
+ <div style={{ ...metricBarFillStyle, width: `${result.semantic_similarity * 100}%`, background: "#d9455e" }} />
133
133
  </div>
134
134
  </div>
135
135
  )}
@@ -147,7 +147,7 @@ function PathDistanceIntelPanel({ result }: { result: PathResponse }) {
147
147
  <div
148
148
  style={{
149
149
  ...metricValueStyle,
150
- color: "#e3b341",
150
+ color: "#9a6700",
151
151
  fontSize: 11,
152
152
  overflow: "hidden",
153
153
  textOverflow: "ellipsis",
@@ -281,7 +281,7 @@ function PathFlowViz({
281
281
  {/* Weight badge */}
282
282
  <div style={{ marginTop: 8, display: "flex", alignItems: "center", gap: 8 }}>
283
283
  <span style={{ color: "#9c7a82", fontSize: 11 }}>Total weight:</span>
284
- <span style={{ color: "#ff8fa0", fontSize: 12, fontWeight: 700 }}>{totalWeight.toFixed(3)}</span>
284
+ <span style={{ color: "#d9455e", fontSize: 12, fontWeight: 700 }}>{totalWeight.toFixed(3)}</span>
285
285
  <span style={{ color: "#9c7a82", fontSize: 11 }}>·</span>
286
286
  <span style={{ color: "#9c7a82", fontSize: 11 }}>{path.length} hops</span>
287
287
  </div>
@@ -593,7 +593,7 @@ const inputStyle: CSSProperties = {
593
593
  borderRadius: 12,
594
594
  padding: "11px 13px",
595
595
  fontSize: 13,
596
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.035)",
596
+ boxShadow: "inset 0 1px 0 rgba(28, 20, 24,0.035)",
597
597
  };
598
598
 
599
599
  const groupedSelectionNoticeStyle: CSSProperties = {
@@ -616,7 +616,7 @@ const actionButtonStyle: CSSProperties = {
616
616
  display: "inline-flex",
617
617
  alignItems: "center",
618
618
  justifyContent: "center",
619
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.07), 0 10px 24px rgba(0,0,0,0.18)",
619
+ boxShadow: "inset 0 1px 0 rgba(28, 20, 24,0.07), 0 10px 24px rgba(0,0,0,0.18)",
620
620
  };
621
621
 
622
622
  const secondaryActionButtonStyle: CSSProperties = {
@@ -630,7 +630,7 @@ const secondaryActionButtonStyle: CSSProperties = {
630
630
  const predictionCardStyle: CSSProperties = {
631
631
  textAlign: "left",
632
632
  padding: "10px 12px",
633
- background: "rgba(255, 255, 255, 0.035)",
633
+ background: "rgba(28, 20, 24, 0.035)",
634
634
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
635
635
  borderRadius: 10,
636
636
  cursor: "pointer",
@@ -638,7 +638,7 @@ const predictionCardStyle: CSSProperties = {
638
638
  };
639
639
 
640
640
  const propertyCardStyle: CSSProperties = {
641
- background: "rgba(255, 255, 255, 0.028)",
641
+ background: "rgba(28, 20, 24, 0.028)",
642
642
  padding: "10px 12px",
643
643
  borderRadius: 10,
644
644
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
@@ -651,7 +651,7 @@ const emptyTextStyle: CSSProperties = {
651
651
  };
652
652
 
653
653
  const subtleChipStyle: CSSProperties = {
654
- background: "rgba(255, 255, 255, 0.04)",
654
+ background: "rgba(28, 20, 24, 0.04)",
655
655
  color: GRAPH_THEME.ui.text.body,
656
656
  padding: "4px 8px",
657
657
  borderRadius: 999,
@@ -736,7 +736,7 @@ const metricCardStyle: CSSProperties = {
736
736
  background: "rgba(0,0,0,0.18)",
737
737
  borderRadius: 8,
738
738
  padding: "8px 10px",
739
- border: "1px solid rgba(255,255,255,0.05)",
739
+ border: "1px solid rgba(28, 20, 24,0.05)",
740
740
  display: "flex",
741
741
  flexDirection: "column",
742
742
  gap: 3,
@@ -753,13 +753,13 @@ const metricLabelStyle: CSSProperties = {
753
753
  const metricValueStyle: CSSProperties = {
754
754
  fontSize: 14,
755
755
  fontWeight: 700,
756
- color: "#ffeaed",
756
+ color: "#2d1619",
757
757
  };
758
758
 
759
759
  const metricBarTrackStyle: CSSProperties = {
760
760
  height: 3,
761
761
  borderRadius: 999,
762
- background: "rgba(255,255,255,0.07)",
762
+ background: "rgba(28, 20, 24,0.07)",
763
763
  overflow: "hidden",
764
764
  marginTop: 4,
765
765
  };
@@ -29,8 +29,8 @@ const LOADING_OVERLAY_CSS = `
29
29
  background:
30
30
  radial-gradient(circle at top right, rgba(242, 182, 109, 0.12), transparent 28%),
31
31
  radial-gradient(circle at top left, rgba(255, 107, 129, 0.14), transparent 30%),
32
- linear-gradient(145deg, rgba(11, 5, 8, 0.94), rgba(12, 25, 43, 0.82));
33
- box-shadow: 0 26px 90px rgba(0, 0, 0, 0.34), inset 0 1px 0 rgba(255,255,255,0.05);
32
+ linear-gradient(145deg, rgba(255, 255, 255, 0.94), rgba(255, 255, 255, 0.82));
33
+ box-shadow: 0 26px 90px rgba(0, 0, 0, 0.34), inset 0 1px 0 rgba(28, 20, 24,0.05);
34
34
  backdrop-filter: blur(18px) saturate(1.08);
35
35
  -webkit-backdrop-filter: blur(18px) saturate(1.08);
36
36
  }
@@ -39,8 +39,8 @@ const LOADING_OVERLAY_CSS = `
39
39
  background:
40
40
  radial-gradient(circle at top right, rgba(242, 182, 109, 0.08), transparent 26%),
41
41
  radial-gradient(circle at top left, rgba(255, 107, 129, 0.12), transparent 28%),
42
- linear-gradient(145deg, rgba(11, 5, 8, 0.84), rgba(11, 24, 40, 0.72));
43
- box-shadow: 0 18px 54px rgba(0, 0, 0, 0.26), inset 0 1px 0 rgba(255,255,255,0.04);
42
+ linear-gradient(145deg, rgba(255, 255, 255, 0.84), rgba(255, 255, 255, 0.72));
43
+ box-shadow: 0 18px 54px rgba(0, 0, 0, 0.26), inset 0 1px 0 rgba(28, 20, 24,0.04);
44
44
  }
45
45
  .graph-stage-loader-beacon {
46
46
  position: relative;
@@ -73,7 +73,7 @@ const LOADING_OVERLAY_CSS = `
73
73
  text-transform: uppercase;
74
74
  border: 1px solid rgba(255, 107, 129, 0.08);
75
75
  color: rgba(143, 168, 198, 0.72);
76
- background: rgba(255, 255, 255, 0.02);
76
+ background: rgba(28, 20, 24, 0.02);
77
77
  }
78
78
  .graph-stage-loader-step[data-state="done"] {
79
79
  color: rgba(214, 232, 250, 0.92);
@@ -81,10 +81,10 @@ const LOADING_OVERLAY_CSS = `
81
81
  background: rgba(89, 155, 220, 0.14);
82
82
  }
83
83
  .graph-stage-loader-step[data-state="active"] {
84
- color: #eff7ff;
84
+ color: #16222d;
85
85
  border-color: rgba(242, 182, 109, 0.24);
86
86
  background: linear-gradient(135deg, rgba(49, 108, 172, 0.28), rgba(242, 182, 109, 0.16));
87
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
87
+ box-shadow: inset 0 1px 0 rgba(28, 20, 24, 0.06);
88
88
  }
89
89
  .graph-stage-loader-bar {
90
90
  position: relative;
@@ -93,7 +93,7 @@ const LOADING_OVERLAY_CSS = `
93
93
  overflow: hidden;
94
94
  border-radius: 999px;
95
95
  border: 1px solid rgba(255, 107, 129, 0.1);
96
- background: rgba(255, 255, 255, 0.05);
96
+ background: rgba(28, 20, 24, 0.05);
97
97
  }
98
98
  .graph-stage-loader-bar-fill {
99
99
  display: block;
@@ -127,7 +127,7 @@ const LOADING_OVERLAY_CSS = `
127
127
  border-color: rgba(255, 123, 114, 0.32);
128
128
  background:
129
129
  radial-gradient(circle at top left, rgba(255, 123, 114, 0.12), transparent 32%),
130
- linear-gradient(145deg, rgba(11, 5, 8, 0.96), rgba(24, 14, 18, 0.86));
130
+ linear-gradient(145deg, rgba(255, 255, 255, 0.96), rgba(255, 255, 255, 0.86));
131
131
  }
132
132
  .graph-stage-loader-error-mark {
133
133
  width: 38px;
@@ -136,7 +136,7 @@ const LOADING_OVERLAY_CSS = `
136
136
  border-radius: 12px;
137
137
  display: grid;
138
138
  place-items: center;
139
- color: #ff9e97;
139
+ color: #46211e;
140
140
  background: rgba(255, 123, 114, 0.12);
141
141
  border: 1px solid rgba(255, 123, 114, 0.28);
142
142
  }
@@ -145,7 +145,7 @@ const LOADING_OVERLAY_CSS = `
145
145
  border-radius: 10px;
146
146
  background: rgba(0, 0, 0, 0.32);
147
147
  border: 1px solid rgba(255, 123, 114, 0.18);
148
- color: #ffb4ae;
148
+ color: #562925;
149
149
  font-family: "JetBrains Mono", "Fira Code", Consolas, monospace;
150
150
  font-size: 12px;
151
151
  line-height: 1.55;
@@ -162,7 +162,7 @@ const LOADING_OVERLAY_CSS = `
162
162
  cursor: pointer;
163
163
  border: 1px solid rgba(255, 107, 129, 0.4);
164
164
  background: linear-gradient(135deg, rgba(255, 45, 75, 0.28), rgba(56, 210, 160, 0.16));
165
- color: #ffeef1;
165
+ color: #2d161a;
166
166
  transition: 160ms ease;
167
167
  }
168
168
  .graph-stage-loader-retry:hover {
@@ -171,7 +171,7 @@ const LOADING_OVERLAY_CSS = `
171
171
  transform: translateY(-1px);
172
172
  }
173
173
  .graph-stage-loader-retry:focus-visible {
174
- outline: 2px solid #ff6b81;
174
+ outline: 2px solid #d41736;
175
175
  outline-offset: 2px;
176
176
  }
177
177
  `;
@@ -213,8 +213,8 @@ const loadingMetricStyle = {
213
213
  padding: "7px 10px",
214
214
  borderRadius: 999,
215
215
  border: "1px solid rgba(255, 107, 129, 0.12)",
216
- background: "rgba(255, 255, 255, 0.03)",
217
- color: "#b8cade",
216
+ background: "rgba(28, 20, 24, 0.03)",
217
+ color: "#25313f",
218
218
  fontSize: 11,
219
219
  fontWeight: 600,
220
220
  } satisfies CSSProperties;
@@ -288,7 +288,7 @@ export function GraphLoadingOverlay({
288
288
  <div
289
289
  className="graph-stage-loader"
290
290
  data-exiting={exiting}
291
- style={{ background: "linear-gradient(180deg, rgba(1,4,9,0.22), rgba(1,4,9,0.5))" }}
291
+ style={{ background: "linear-gradient(180deg, rgba(255, 255, 255,0.22), rgba(255, 255, 255,0.5))" }}
292
292
  >
293
293
  <style>{LOADING_OVERLAY_CSS}</style>
294
294
  <div className="graph-stage-loader-card" data-error="true" role="alert">
@@ -297,10 +297,10 @@ export function GraphLoadingOverlay({
297
297
  <AlertTriangle size={18} strokeWidth={2.2} />
298
298
  </div>
299
299
  <div style={{ minWidth: 0 }}>
300
- <div style={{ color: "#ffffff", fontSize: 20, fontWeight: 700, letterSpacing: "-0.03em", marginBottom: 6 }}>
300
+ <div style={{ color: "#16181d", fontSize: 20, fontWeight: 700, letterSpacing: "-0.03em", marginBottom: 6 }}>
301
301
  Could not load the graph
302
302
  </div>
303
- <div style={{ color: "#c99aa3", fontSize: 13, lineHeight: 1.5 }}>
303
+ <div style={{ color: "#aa485b", fontSize: 13, lineHeight: 1.5 }}>
304
304
  The Explorer API did not return graph data. Check that the backend is running and reachable, then try again.
305
305
  </div>
306
306
  </div>
@@ -324,8 +324,8 @@ export function GraphLoadingOverlay({
324
324
  const activeProgress = progress ?? displayProgress;
325
325
  const isLiveStage = activeProgress.phase === "stabilizing_layout" || activeProgress.showGraphBehind || showGraphBehind;
326
326
  const overlayBackground = isLiveStage
327
- ? "linear-gradient(180deg, rgba(1,4,9,0.04), rgba(1,4,9,0.18))"
328
- : "linear-gradient(180deg, rgba(1,4,9,0.22), rgba(1,4,9,0.5))";
327
+ ? "linear-gradient(180deg, rgba(255, 255, 255,0.04), rgba(255, 255, 255,0.18))"
328
+ : "linear-gradient(180deg, rgba(255, 255, 255,0.22), rgba(255, 255, 255,0.5))";
329
329
  const determinateRatio = activeProgress.progressKind === "determinate" && activeProgress.total
330
330
  ? Math.max(0.05, Math.min(activeProgress.loaded ?? 0, activeProgress.total) / Math.max(activeProgress.total, 1))
331
331
  : null;
@@ -342,16 +342,16 @@ export function GraphLoadingOverlay({
342
342
  <div className="graph-stage-loader-card" data-live={isLiveStage}>
343
343
  <div style={{ display: "flex", alignItems: "flex-start", justifyContent: "space-between", gap: 14, marginBottom: 14 }}>
344
344
  <div style={{ minWidth: 0 }}>
345
- <div style={{ color: "#ffffff", fontSize: 20, fontWeight: 700, letterSpacing: "-0.03em", marginBottom: 6 }}>
345
+ <div style={{ color: "#16181d", fontSize: 20, fontWeight: 700, letterSpacing: "-0.03em", marginBottom: 6 }}>
346
346
  {activeProgress.title}
347
347
  </div>
348
- <div style={{ color: "#c99aa3", fontSize: 13, lineHeight: 1.5 }}>
348
+ <div style={{ color: "#aa485b", fontSize: 13, lineHeight: 1.5 }}>
349
349
  {activeProgress.message}
350
350
  </div>
351
351
  </div>
352
352
  <div style={{ display: "inline-flex", alignItems: "center", gap: 10, flexShrink: 0 }}>
353
353
  <div className="graph-stage-loader-beacon" aria-hidden="true" />
354
- <div style={{ color: "#d7e9fb", fontSize: 11, fontWeight: 700, letterSpacing: "0.08em", textTransform: "uppercase" }}>
354
+ <div style={{ color: "#16222e", fontSize: 11, fontWeight: 700, letterSpacing: "0.08em", textTransform: "uppercase" }}>
355
355
  Stage {activeProgress.stageIndex ?? 1}/{activeProgress.stageCount ?? GRAPH_LOAD_STAGE_SEQUENCE.length}
356
356
  </div>
357
357
  </div>
@@ -370,7 +370,7 @@ export function GraphLoadingOverlay({
370
370
  </div>
371
371
 
372
372
  <div style={{ display: "flex", justifyContent: "space-between", gap: 12, alignItems: "baseline", marginBottom: 8 }}>
373
- <div style={{ color: "#dce9f6", fontSize: 12, fontWeight: 600 }}>
373
+ <div style={{ color: "#17222d", fontSize: 12, fontWeight: 600 }}>
374
374
  {activeProgress.progressKind === "determinate" && activeProgress.total
375
375
  ? `${(activeProgress.loaded ?? 0).toLocaleString()} / ${activeProgress.total.toLocaleString()} in current stage`
376
376
  : "Working through this stage"}
@@ -398,7 +398,7 @@ export function GraphLoadingOverlay({
398
398
  {activeProgress.edgesTotal ? ` / ${activeProgress.edgesTotal.toLocaleString()}` : ""} relationships
399
399
  </span>
400
400
  {layoutSource ? (
401
- <span style={{ ...loadingMetricStyle, color: "#a9ddff", borderColor: withAlpha(GRAPH_THEME.palette.accent.hovered, 0.22) }}>
401
+ <span style={{ ...loadingMetricStyle, color: "#234053", borderColor: withAlpha(GRAPH_THEME.palette.accent.hovered, 0.22) }}>
402
402
  {layoutSource}
403
403
  {layoutState ? ` · ${layoutState}` : ""}
404
404
  </span>
@@ -522,7 +522,7 @@ const HUD_CSS = `
522
522
  .node-panel-collapse {
523
523
  border: 1px solid ${GRAPH_THEME.ui.surface.panelBorder};
524
524
  border-radius: 12px;
525
- background: rgba(255, 255, 255, 0.026);
525
+ background: rgba(28, 20, 24, 0.026);
526
526
  overflow: hidden;
527
527
  }
528
528
  .node-panel-collapse + .node-panel-collapse {
@@ -610,7 +610,7 @@ const HUD_CSS = `
610
610
  height: 10px;
611
611
  border-radius: 999px;
612
612
  overflow: hidden;
613
- background: rgba(255, 255, 255, 0.052);
613
+ background: rgba(28, 20, 24, 0.052);
614
614
  border: 1px solid ${GRAPH_THEME.ui.surface.panelBorder};
615
615
  }
616
616
  .graph-loading-bar > span {
@@ -736,10 +736,10 @@ const HUD_CSS = `
736
736
  border-radius: 16px;
737
737
  border: 1px solid ${GRAPH_THEME.ui.control.inputBorder};
738
738
  background:
739
- linear-gradient(135deg, rgba(255,255,255,0.06), rgba(255,255,255,0.018)),
739
+ linear-gradient(135deg, rgba(28, 20, 24,0.06), rgba(28, 20, 24,0.018)),
740
740
  ${GRAPH_THEME.ui.control.inputBg};
741
741
  color: ${GRAPH_THEME.ui.text.muted};
742
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.045), 0 14px 30px rgba(0,0,0,0.16);
742
+ box-shadow: inset 0 1px 0 rgba(28, 20, 24,0.045), 0 14px 30px rgba(0,0,0,0.16);
743
743
  }
744
744
  .explore-search-suggestions {
745
745
  position: absolute;
@@ -755,7 +755,7 @@ const HUD_CSS = `
755
755
  border-radius: 14px;
756
756
  border: 1px solid ${GRAPH_THEME.ui.control.inputBorder};
757
757
  background: ${GRAPH_THEME.ui.surface.cardStrong};
758
- box-shadow: 0 18px 40px rgba(0,0,0,0.32), inset 0 1px 0 rgba(255,255,255,0.04);
758
+ box-shadow: 0 18px 40px rgba(0,0,0,0.32), inset 0 1px 0 rgba(28, 20, 24,0.04);
759
759
  }
760
760
  .explore-search-suggestions li {
761
761
  display: flex;
@@ -787,7 +787,7 @@ const HUD_CSS = `
787
787
  }
788
788
  .explore-search-command:focus-within {
789
789
  border-color: ${GRAPH_THEME.ui.control.activeBorder};
790
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.06), 0 0 0 1px ${GRAPH_THEME.ui.control.focusRing}, 0 16px 32px rgba(0,0,0,0.18);
790
+ box-shadow: inset 0 1px 0 rgba(28, 20, 24,0.06), 0 0 0 1px ${GRAPH_THEME.ui.control.focusRing}, 0 16px 32px rgba(0,0,0,0.18);
791
791
  }
792
792
  .explore-search-command input {
793
793
  width: 100%;
@@ -811,7 +811,7 @@ const HUD_CSS = `
811
811
  font-size: 12px;
812
812
  font-weight: 800;
813
813
  cursor: pointer;
814
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
814
+ box-shadow: inset 0 1px 0 rgba(28, 20, 24,0.08);
815
815
  }
816
816
  .explore-search-command button:disabled {
817
817
  cursor: not-allowed;
@@ -824,8 +824,8 @@ const HUD_CSS = `
824
824
  padding: 4px;
825
825
  border-radius: 16px;
826
826
  border: 1px solid ${GRAPH_THEME.ui.control.defaultBorder};
827
- background: rgba(255, 255, 255, 0.026);
828
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.035);
827
+ background: rgba(28, 20, 24, 0.026);
828
+ box-shadow: inset 0 1px 0 rgba(28, 20, 24,0.035);
829
829
  }
830
830
  .explore-mode-segment {
831
831
  min-width: 0;
@@ -846,8 +846,8 @@ const HUD_CSS = `
846
846
  min-height: 43px;
847
847
  padding: 4px;
848
848
  border-radius: 16px;
849
- border: 1px solid rgba(211, 205, 190, 0.075);
850
- background: rgba(255, 255, 255, 0.022);
849
+ border: 1px solid rgba(70, 60, 48, 0.075);
850
+ background: rgba(28, 20, 24, 0.022);
851
851
  }
852
852
  .explore-tool-cluster-label {
853
853
  padding: 0 4px 0 7px;
@@ -880,12 +880,12 @@ const HUD_CSS = `
880
880
  line-height: 1;
881
881
  cursor: pointer;
882
882
  white-space: nowrap;
883
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.035);
883
+ box-shadow: inset 0 1px 0 rgba(28, 20, 24,0.035);
884
884
  transition: background 140ms ease, border-color 140ms ease, color 140ms ease, transform 140ms ease;
885
885
  }
886
886
  .explore-tool-button:hover:not(:disabled) {
887
887
  background: ${GRAPH_THEME.ui.control.hoverBg};
888
- border-color: rgba(211, 205, 190, 0.18);
888
+ border-color: rgba(70, 60, 48, 0.18);
889
889
  transform: translateY(-1px);
890
890
  }
891
891
  .explore-tool-button:disabled {
@@ -898,7 +898,7 @@ const HUD_CSS = `
898
898
  color: ${GRAPH_THEME.ui.control.activeText};
899
899
  background: ${GRAPH_THEME.ui.control.activeBg};
900
900
  border-color: ${GRAPH_THEME.ui.control.activeBorder};
901
- box-shadow: 0 0 0 1px ${GRAPH_THEME.ui.control.focusRing}, inset 0 1px 0 rgba(255,255,255,0.06);
901
+ box-shadow: 0 0 0 1px ${GRAPH_THEME.ui.control.focusRing}, inset 0 1px 0 rgba(28, 20, 24,0.06);
902
902
  }
903
903
  .explore-tool-button-primary {
904
904
  color: ${GRAPH_THEME.ui.control.primaryText};
@@ -951,7 +951,7 @@ const HUD_CSS = `
951
951
  height: 10px;
952
952
  flex-shrink: 0;
953
953
  border-radius: 50%;
954
- box-shadow: inset 0 0 0 1px rgba(255,255,255,0.16);
954
+ box-shadow: inset 0 0 0 1px rgba(28, 20, 24,0.16);
955
955
  }
956
956
  .explore-search-results {
957
957
  display: flex;
@@ -3152,17 +3152,17 @@ export function GraphWorkspace({ externalFocusNodeId, externalFocusToken, onDirt
3152
3152
 
3153
3153
  {egoModeEnabled && (
3154
3154
  <div style={{ display: "flex", alignItems: "center", gap: 10, fontSize: 12, color: "#a0b4cc" }}>
3155
- <span style={{ fontWeight: 600, color: "#ff8fa0" }}>Ego depth:</span>
3155
+ <span style={{ fontWeight: 600, color: "#d9455e" }}>Ego depth:</span>
3156
3156
  <input
3157
3157
  type="range"
3158
3158
  min={1}
3159
3159
  max={8}
3160
3160
  value={egoMaxHops}
3161
3161
  onChange={(e) => setEgoMaxHops(Number(e.target.value))}
3162
- style={{ width: 90, accentColor: "#ff8fa0" }}
3162
+ style={{ width: 90, accentColor: "#d9455e" }}
3163
3163
  title={`Ego depth: ${egoMaxHops} hops`}
3164
3164
  />
3165
- <span style={{ fontFamily: "monospace", color: "#e6f2ff" }}>{egoMaxHops} hop{egoMaxHops !== 1 ? "s" : ""}</span>
3165
+ <span style={{ fontFamily: "monospace", color: "#16212e" }}>{egoMaxHops} hop{egoMaxHops !== 1 ? "s" : ""}</span>
3166
3166
  </div>
3167
3167
  )}
3168
3168
 
@@ -3206,7 +3206,7 @@ export function GraphWorkspace({ externalFocusNodeId, externalFocusToken, onDirt
3206
3206
  </div>
3207
3207
  ) : null}
3208
3208
 
3209
- {searchError ? <div style={{ color: "#ff7b72", fontSize: 12 }}>{searchError}</div> : null}
3209
+ {searchError ? <div style={{ color: "#ec2315", fontSize: 12 }}>{searchError}</div> : null}
3210
3210
 
3211
3211
  {searchResults.length ? (
3212
3212
  <div style={{ display: "flex", flexDirection: "column", gap: 8 }}>
@@ -3229,7 +3229,7 @@ export function GraphWorkspace({ externalFocusNodeId, externalFocusToken, onDirt
3229
3229
  <button key={result.node.id} style={predictionCardStyle} onClick={() => focusNode(result.node.id)}>
3230
3230
  <div style={{ display: "flex", justifyContent: "space-between", gap: 12 }}>
3231
3231
  <div style={{ minWidth: 0 }}>
3232
- <div style={{ color: "#fff", fontWeight: 600 }}>{result.node.content || result.node.id}</div>
3232
+ <div style={{ color: "#16181d", fontWeight: 600 }}>{result.node.content || result.node.id}</div>
3233
3233
  <div style={{ color: "#b08b93", fontSize: 12 }}>{result.node.type}</div>
3234
3234
  </div>
3235
3235
  <div style={{ color: "#ff2d4b", fontSize: 12, whiteSpace: "nowrap" }}>
@@ -3249,7 +3249,7 @@ export function GraphWorkspace({ externalFocusNodeId, externalFocusToken, onDirt
3249
3249
  <div style={{ color: "rgba(255, 107, 129, 0.76)", fontSize: 11, fontWeight: 700, letterSpacing: "0.08em", textTransform: "uppercase" }}>
3250
3250
  Relationship
3251
3251
  </div>
3252
- <div style={{ color: "#f4f8ff", fontSize: 15, fontWeight: 700, marginTop: 6 }}>
3252
+ <div style={{ color: "#161e2d", fontSize: 15, fontWeight: 700, marginTop: 6 }}>
3253
3253
  {selectedEdgeState.edgeType}
3254
3254
  </div>
3255
3255
  </div>
@@ -3299,7 +3299,7 @@ export function GraphWorkspace({ externalFocusNodeId, externalFocusToken, onDirt
3299
3299
  <div style={{ color: "rgba(255, 107, 129, 0.68)", fontSize: 10, letterSpacing: "0.06em", textTransform: "uppercase" }}>
3300
3300
  {key}
3301
3301
  </div>
3302
- <div style={{ color: "#dce7f4", fontSize: 12, marginTop: 4, wordBreak: "break-word" }}>
3302
+ <div style={{ color: "#18212c", fontSize: 12, marginTop: 4, wordBreak: "break-word" }}>
3303
3303
  {typeof value === "object" ? JSON.stringify(value) : String(value)}
3304
3304
  </div>
3305
3305
  </div>
@@ -3432,7 +3432,7 @@ const actionButtonStyle: React.CSSProperties = {
3432
3432
  display: "inline-flex",
3433
3433
  alignItems: "center",
3434
3434
  justifyContent: "center",
3435
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.07), 0 10px 24px rgba(0,0,0,0.18)",
3435
+ boxShadow: "inset 0 1px 0 rgba(28, 20, 24,0.07), 0 10px 24px rgba(0,0,0,0.18)",
3436
3436
  };
3437
3437
 
3438
3438
  const secondaryActionButtonStyle: React.CSSProperties = {
@@ -3446,7 +3446,7 @@ const secondaryActionButtonStyle: React.CSSProperties = {
3446
3446
  const predictionCardStyle: React.CSSProperties = {
3447
3447
  textAlign: "left",
3448
3448
  padding: 12,
3449
- background: "rgba(255, 255, 255, 0.035)",
3449
+ background: "rgba(28, 20, 24, 0.035)",
3450
3450
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
3451
3451
  borderRadius: 10,
3452
3452
  cursor: "pointer",
@@ -3460,7 +3460,7 @@ const selectedEdgeCardStyle: React.CSSProperties = {
3460
3460
  background: "linear-gradient(135deg, rgba(98, 226, 205, 0.1), rgba(233, 196, 122, 0.045))",
3461
3461
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
3462
3462
  borderRadius: 14,
3463
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
3463
+ boxShadow: "inset 0 1px 0 rgba(28, 20, 24,0.03)",
3464
3464
  };
3465
3465
 
3466
3466
  const selectedEdgeNodeChipStyle: React.CSSProperties = {
@@ -3479,7 +3479,7 @@ const distanceStatusStripStyle: React.CSSProperties = {
3479
3479
  background: "linear-gradient(135deg, rgba(98, 226, 205, 0.09), rgba(227, 179, 65, 0.045))",
3480
3480
  borderRadius: 16,
3481
3481
  padding: "9px 12px",
3482
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.045)",
3482
+ boxShadow: "inset 0 1px 0 rgba(28, 20, 24,0.045)",
3483
3483
  };
3484
3484
 
3485
3485
  const distanceStatusTitleStyle: React.CSSProperties = {
@@ -3541,14 +3541,14 @@ const selectedEdgePropertyGridStyle: React.CSSProperties = {
3541
3541
  const selectedEdgePropertyCardStyle: React.CSSProperties = {
3542
3542
  borderRadius: 10,
3543
3543
  padding: 10,
3544
- background: "rgba(255, 255, 255, 0.03)",
3544
+ background: "rgba(28, 20, 24, 0.03)",
3545
3545
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
3546
3546
  };
3547
3547
 
3548
3548
  const pluginDockContentStyle: React.CSSProperties = {
3549
3549
  borderRadius: 16,
3550
3550
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
3551
- background: "rgba(255, 255, 255, 0.02)",
3551
+ background: "rgba(28, 20, 24, 0.02)",
3552
3552
  padding: 14,
3553
3553
  };
3554
3554
 
@@ -287,8 +287,8 @@ export function MarkdownContentViewer({
287
287
  <button type="button" onClick={() => void handleCopy()} style={copyBtnStyle} title="Copy raw content">
288
288
  {copied ? (
289
289
  <>
290
- <Check size={12} color="#3fb950" style={{ marginRight: 4 }} aria-hidden="true" />
291
- <span style={{ color: "#3fb950", fontSize: 11 }}>Copied</span>
290
+ <Check size={12} color="#22863a" style={{ marginRight: 4 }} aria-hidden="true" />
291
+ <span style={{ color: "#22863a", fontSize: 11 }}>Copied</span>
292
292
  </>
293
293
  ) : (
294
294
  <>
@@ -460,7 +460,7 @@ const MARKDOWN_COMPONENTS: Components = {
460
460
  <table style={{ width: "100%", borderCollapse: "collapse", fontSize: 12 }}>{children}</table>
461
461
  </div>
462
462
  ),
463
- thead: ({ children }) => <thead style={{ background: "rgba(255, 255, 255, 0.04)" }}>{children}</thead>,
463
+ thead: ({ children }) => <thead style={{ background: "rgba(28, 20, 24, 0.04)" }}>{children}</thead>,
464
464
  tbody: ({ children }) => <tbody>{children}</tbody>,
465
465
  tr: ({ children }) => <tr style={{ borderBottom: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}` }}>{children}</tr>,
466
466
  th: ({ children }) => <th style={{ padding: "6px 8px", textAlign: "left", fontWeight: 700, color: GRAPH_THEME.ui.text.strong, borderRight: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}` }}>{children}</th>,
@@ -483,7 +483,7 @@ const MARKDOWN_COMPONENTS: Components = {
483
483
  const viewerContainerStyle: CSSProperties = {
484
484
  display: "flex",
485
485
  flexDirection: "column",
486
- background: "rgba(255, 255, 255, 0.025)",
486
+ background: "rgba(28, 20, 24, 0.025)",
487
487
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
488
488
  borderRadius: 12,
489
489
  overflow: "hidden",
@@ -526,7 +526,7 @@ const copyBtnStyle: CSSProperties = {
526
526
  padding: "3px 8px",
527
527
  borderRadius: 6,
528
528
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
529
- background: "rgba(255, 255, 255, 0.04)",
529
+ background: "rgba(28, 20, 24, 0.04)",
530
530
  color: GRAPH_THEME.ui.text.subtle,
531
531
  fontSize: 11,
532
532
  cursor: "pointer",
@@ -546,7 +546,7 @@ const errorStyle: CSSProperties = {
546
546
  justifyContent: "space-between",
547
547
  gap: 8,
548
548
  padding: "8px 12px",
549
- color: "#ffb4ad",
549
+ color: "#552925",
550
550
  background: "rgba(248, 81, 73, 0.1)",
551
551
  borderBottom: "1px solid rgba(248, 81, 73, 0.25)",
552
552
  fontSize: 12,
@@ -556,7 +556,7 @@ const errorStyle: CSSProperties = {
556
556
  const errorActionStyle: CSSProperties = {
557
557
  ...copyBtnStyle,
558
558
  flexShrink: 0,
559
- color: "#ffb4ad",
559
+ color: "#552925",
560
560
  border: "1px solid rgba(248, 81, 73, 0.32)",
561
561
  };
562
562
 
@@ -594,7 +594,7 @@ const sourcePreStyle: CSSProperties = {
594
594
  padding: 10,
595
595
  borderRadius: 8,
596
596
  background: "rgba(0, 0, 0, 0.3)",
597
- border: "1px solid rgba(255, 255, 255, 0.05)",
597
+ border: "1px solid rgba(28, 20, 24, 0.05)",
598
598
  overflowX: "auto",
599
599
  };
600
600
 
@@ -660,7 +660,7 @@ const blockquoteStyle: CSSProperties = {
660
660
  };
661
661
 
662
662
  const linkStyle: CSSProperties = {
663
- color: "#ff8fa0",
663
+ color: "#d9455e",
664
664
  textDecoration: "underline",
665
665
  textUnderlineOffset: "3px",
666
666
  wordBreak: "break-all",
@@ -670,7 +670,7 @@ const imageBadgeStyle: CSSProperties = {
670
670
  display: "inline-flex",
671
671
  alignItems: "center",
672
672
  padding: "3px 7px",
673
- background: "rgba(255, 255, 255, 0.04)",
673
+ background: "rgba(28, 20, 24, 0.04)",
674
674
  border: `1px solid ${GRAPH_THEME.ui.surface.panelBorder}`,
675
675
  borderRadius: 6,
676
676
  color: GRAPH_THEME.ui.text.muted,
@@ -683,9 +683,9 @@ const inlineCodeStyle: CSSProperties = {
683
683
  fontSize: 12,
684
684
  padding: "2px 5px",
685
685
  borderRadius: 4,
686
- background: "rgba(255, 255, 255, 0.07)",
687
- color: "#ffeaed",
688
- border: "1px solid rgba(255, 255, 255, 0.08)",
686
+ background: "rgba(28, 20, 24, 0.07)",
687
+ color: "#2d1619",
688
+ border: "1px solid rgba(28, 20, 24, 0.08)",
689
689
  };
690
690
 
691
691
  const preBlockStyle: CSSProperties = {
@@ -693,7 +693,7 @@ const preBlockStyle: CSSProperties = {
693
693
  padding: 10,
694
694
  borderRadius: 8,
695
695
  background: "rgba(0, 0, 0, 0.35)",
696
- border: "1px solid rgba(255, 255, 255, 0.08)",
696
+ border: "1px solid rgba(28, 20, 24, 0.08)",
697
697
  overflowX: "auto",
698
698
  };
699
699
 
@@ -701,5 +701,5 @@ const blockCodeStyle: CSSProperties = {
701
701
  fontFamily: "'JetBrains Mono', monospace",
702
702
  fontSize: 12,
703
703
  lineHeight: 1.5,
704
- color: "#ffeaed",
704
+ color: "#2d1619",
705
705
  };
@@ -64,7 +64,7 @@ function getNodeLabel(graphRef: GraphRef, nodeId: string): string {
64
64
 
65
65
  function getNodeColor(graphRef: GraphRef, nodeId: string): string {
66
66
  const attrs = graphRef.getNodeAttributes(nodeId) as NodeAttributes;
67
- return String(attrs.baseColor || attrs.color || "#63E6FF");
67
+ return String(attrs.baseColor || attrs.color || "#0e8fb5");
68
68
  }
69
69
 
70
70
  function getNodeSemanticGroup(graphRef: GraphRef, nodeId: string): string {