@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
@@ -132,8 +132,8 @@ function ConceptDetailPanel({
132
132
  <div style={detailPanelStyle}>
133
133
  <div style={detailHeaderStyle}>
134
134
  <div style={{ display: "flex", alignItems: "center", gap: 8 }}>
135
- <BookOpen size={13} color="#9ee8d7" />
136
- <span style={{ color: "#fff0f2", fontSize: 13, fontWeight: 700 }}>Concept Detail</span>
135
+ <BookOpen size={13} color="#0e7f66" />
136
+ <span style={{ color: "#2d1619", fontSize: 13, fontWeight: 700 }}>Concept Detail</span>
137
137
  </div>
138
138
  <button onClick={onClose} style={iconBtnStyle}>
139
139
  <X size={14} />
@@ -148,15 +148,15 @@ function ConceptDetailPanel({
148
148
 
149
149
  {error && (
150
150
  <div style={centerStyle}>
151
- <AlertCircle size={16} color="#ff9daf" />
152
- <span style={{ color: "#ff9daf", fontSize: 12, marginTop: 6 }}>{error}</span>
151
+ <AlertCircle size={16} color="#e0556d" />
152
+ <span style={{ color: "#e0556d", fontSize: 12, marginTop: 6 }}>{error}</span>
153
153
  </div>
154
154
  )}
155
155
 
156
156
  {detail && !loading && (
157
157
  <div style={detailBodyStyle}>
158
158
  <div style={{ marginBottom: 14 }}>
159
- <h3 style={{ margin: "0 0 4px", color: "#fff0f2", fontSize: 17, fontWeight: 800, letterSpacing: "-0.03em" }}>
159
+ <h3 style={{ margin: "0 0 4px", color: "#2d1619", fontSize: 17, fontWeight: 800, letterSpacing: "-0.03em" }}>
160
160
  {detail.pref_label}
161
161
  </h3>
162
162
  {detail.alt_labels.length > 0 && (
@@ -178,7 +178,7 @@ function ConceptDetailPanel({
178
178
 
179
179
  {detail.definition && (
180
180
  <PropSection label="Definition">
181
- <p style={{ margin: 0, color: "#f0cdd3", fontSize: 13, lineHeight: 1.6 }}>
181
+ <p style={{ margin: 0, color: "#602b34", fontSize: 13, lineHeight: 1.6 }}>
182
182
  {detail.definition}
183
183
  </p>
184
184
  </PropSection>
@@ -186,7 +186,7 @@ function ConceptDetailPanel({
186
186
 
187
187
  {detail.scope_note && (
188
188
  <PropSection label="Scope Note">
189
- <p style={{ margin: 0, color: "#c99aa3", fontSize: 12, lineHeight: 1.5 }}>
189
+ <p style={{ margin: 0, color: "#aa485b", fontSize: 12, lineHeight: 1.5 }}>
190
190
  {detail.scope_note}
191
191
  </p>
192
192
  </PropSection>
@@ -194,7 +194,7 @@ function ConceptDetailPanel({
194
194
 
195
195
  {detail.editorial_note && (
196
196
  <PropSection label="Editorial Note">
197
- <p style={{ margin: 0, color: "#c99aa3", fontSize: 12, lineHeight: 1.5 }}>
197
+ <p style={{ margin: 0, color: "#aa485b", fontSize: 12, lineHeight: 1.5 }}>
198
198
  {detail.editorial_note}
199
199
  </p>
200
200
  </PropSection>
@@ -210,7 +210,7 @@ function ConceptDetailPanel({
210
210
 
211
211
  {detail.scheme_uri && (
212
212
  <PropSection label="Concept Scheme">
213
- <span style={{ color: "#f0cdd3", fontSize: 11, fontFamily: "monospace", wordBreak: "break-all" }}>
213
+ <span style={{ color: "#602b34", fontSize: 11, fontFamily: "monospace", wordBreak: "break-all" }}>
214
214
  {detail.scheme_uri}
215
215
  </span>
216
216
  </PropSection>
@@ -223,7 +223,7 @@ function ConceptDetailPanel({
223
223
 
224
224
  function PropSection({ label, children }: { label: string; children: React.ReactNode }) {
225
225
  return (
226
- <div style={{ paddingTop: 10, borderTop: "1px solid rgba(255,255,255,0.05)", marginTop: 10 }}>
226
+ <div style={{ paddingTop: 10, borderTop: "1px solid rgba(28, 20, 24,0.05)", marginTop: 10 }}>
227
227
  <div style={{ color: "#9c7a82", fontSize: 10, fontWeight: 700, textTransform: "uppercase" as const, letterSpacing: "0.07em", marginBottom: 5 }}>
228
228
  {label}
229
229
  </div>
@@ -295,7 +295,7 @@ function ConceptTreeNode({
295
295
  overflow: "hidden",
296
296
  textOverflow: "ellipsis",
297
297
  whiteSpace: "nowrap",
298
- color: isSelected ? "#fff0f2" : depth === 0 ? "#f0cdd3" : "#c99aa3",
298
+ color: isSelected ? "#2d1619" : depth === 0 ? "#602b34" : "#aa485b",
299
299
  fontSize: depth === 0 ? 13 : 12,
300
300
  fontWeight: depth === 0 ? 600 : 400,
301
301
  }}
@@ -406,8 +406,8 @@ function SchemePanel({
406
406
  <div style={schemePanelStyle}>
407
407
  <button onClick={() => setExpanded((v) => !v)} style={schemeHeaderBtnStyle}>
408
408
  <div style={{ display: "flex", alignItems: "center", gap: 8 }}>
409
- {expanded ? <ChevronDown size={13} color="#c99aa3" /> : <ChevronRight size={13} color="#c99aa3" />}
410
- <span style={{ color: "#ffeaed", fontSize: 14, fontWeight: 700 }}>{scheme.title}</span>
409
+ {expanded ? <ChevronDown size={13} color="#aa485b" /> : <ChevronRight size={13} color="#aa485b" />}
410
+ <span style={{ color: "#2d1619", fontSize: 14, fontWeight: 700 }}>{scheme.title}</span>
411
411
  </div>
412
412
  <span style={{ color: "#9c7a82", fontSize: 11 }}>
413
413
  {loading ? "…" : `${totalConcepts} concept${totalConcepts !== 1 ? "s" : ""}`}
@@ -509,15 +509,15 @@ export function SKOSVocabularyManager({ schemeUri }: Props) {
509
509
 
510
510
  {error && (
511
511
  <div style={centerStyle}>
512
- <AlertCircle size={16} color="#ff9daf" />
513
- <span style={{ color: "#ff9daf", fontSize: 12, marginTop: 6 }}>{error}</span>
512
+ <AlertCircle size={16} color="#e0556d" />
513
+ <span style={{ color: "#e0556d", fontSize: 12, marginTop: 6 }}>{error}</span>
514
514
  </div>
515
515
  )}
516
516
 
517
517
  {!loading && !error && displayedSchemes.length === 0 && (
518
518
  <div style={{ ...centerStyle, textAlign: "center", padding: 28 }}>
519
519
  <BookOpen size={28} color="rgba(158,232,215,0.15)" />
520
- <span style={{ color: "#c99aa3", fontSize: 12, marginTop: 10 }}>
520
+ <span style={{ color: "#aa485b", fontSize: 12, marginTop: 10 }}>
521
521
  No SKOS concept schemes found
522
522
  </span>
523
523
  <span style={{ color: "#9c7a82", fontSize: 11, marginTop: 4, maxWidth: 220 }}>
@@ -580,7 +580,7 @@ const skosSearchInputStyle: React.CSSProperties = {
580
580
  background: "transparent",
581
581
  border: "none",
582
582
  outline: "none",
583
- color: "#fff0f2",
583
+ color: "#2d1619",
584
584
  fontSize: 12,
585
585
  };
586
586
 
@@ -603,7 +603,7 @@ const detailPanelStyle: React.CSSProperties = {
603
603
  display: "flex",
604
604
  flexDirection: "column",
605
605
  borderLeft: "1px solid rgba(255,107,129,0.1)",
606
- background: "rgba(6,3,5,0.5)",
606
+ background: "rgba(255, 255, 255,0.5)",
607
607
  overflow: "hidden",
608
608
  };
609
609
 
@@ -625,7 +625,7 @@ const detailBodyStyle: React.CSSProperties = {
625
625
  const schemePanelStyle: React.CSSProperties = {
626
626
  borderRadius: 10,
627
627
  border: "1px solid rgba(255,107,129,0.1)",
628
- background: "rgba(255,255,255,0.02)",
628
+ background: "rgba(28, 20, 24,0.02)",
629
629
  overflow: "hidden",
630
630
  marginBottom: 8,
631
631
  };
@@ -639,13 +639,13 @@ const schemeHeaderBtnStyle: React.CSSProperties = {
639
639
  background: "transparent",
640
640
  border: "none",
641
641
  cursor: "pointer",
642
- borderBottom: "1px solid rgba(255,255,255,0.05)",
642
+ borderBottom: "1px solid rgba(28, 20, 24,0.05)",
643
643
  };
644
644
 
645
645
  const expandBtnStyle: React.CSSProperties = {
646
646
  background: "transparent",
647
647
  border: "none",
648
- color: "#c99aa3",
648
+ color: "#aa485b",
649
649
  cursor: "pointer",
650
650
  padding: 0,
651
651
  display: "flex",
@@ -657,16 +657,16 @@ const expandBtnStyle: React.CSSProperties = {
657
657
  const chipStyle: React.CSSProperties = {
658
658
  padding: "2px 8px",
659
659
  borderRadius: 999,
660
- background: "rgba(255,255,255,0.05)",
661
- border: "1px solid rgba(255,255,255,0.08)",
662
- color: "#c99aa3",
660
+ background: "rgba(28, 20, 24,0.05)",
661
+ border: "1px solid rgba(28, 20, 24,0.08)",
662
+ color: "#aa485b",
663
663
  fontSize: 11,
664
664
  };
665
665
 
666
666
  const iconBtnStyle: React.CSSProperties = {
667
667
  background: "transparent",
668
668
  border: "none",
669
- color: "#c99aa3",
669
+ color: "#aa485b",
670
670
  cursor: "pointer",
671
671
  padding: 2,
672
672
  display: "grid",
@@ -684,7 +684,7 @@ const navLinkStyle: React.CSSProperties = {
684
684
  textAlign: "left",
685
685
  };
686
686
 
687
- const errorStyle: React.CSSProperties = { padding: 12, borderRadius: 14, color: "#ffb4c2", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)", margin: "0 10px 10px 10px", fontSize: 12 };
687
+ const errorStyle: React.CSSProperties = { padding: 12, borderRadius: 14, color: "#e98498", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)", margin: "0 10px 10px 10px", fontSize: 12 };
688
688
 
689
689
  const centerStyle: React.CSSProperties = {
690
690
  display: "flex",
@@ -179,8 +179,8 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
179
179
  { token: "delimiter", foreground: "8fa8c6" },
180
180
  ],
181
181
  colors: {
182
- "editor.background": "#050b13",
183
- "editor.foreground": "#d7e7f8",
182
+ "editor.background": "#f5f6f6",
183
+ "editor.foreground": "#16222e",
184
184
  "editorLineNumber.foreground": "#41536b",
185
185
  },
186
186
  });
@@ -233,7 +233,7 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
233
233
  style={{
234
234
  ...shapeRowStyle,
235
235
  cursor: "pointer",
236
- background: isSelected ? "rgba(124,231,211,0.1)" : "rgba(255,255,255,0.03)",
236
+ background: isSelected ? "rgba(124,231,211,0.1)" : "rgba(28, 20, 24,0.03)",
237
237
  border: isSelected ? "1px solid rgba(124,231,211,0.35)" : "1px solid rgba(255,107,129,0.08)",
238
238
  textAlign: "left",
239
239
  width: "100%",
@@ -241,9 +241,9 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
241
241
  onClick={() => handleSelectShape(shape.id)}
242
242
  title="Click to load this shape into the editor"
243
243
  >
244
- <FileCode2 size={14} color={isSelected ? "#7ce7d3" : "#9ee8d7"} />
244
+ <FileCode2 size={14} color={isSelected ? "#0e8571" : "#0e7f66"} />
245
245
  <div>
246
- <div style={{ color: "#fff0f2", fontWeight: 800 }}>{shape.id}</div>
246
+ <div style={{ color: "#2d1619", fontWeight: 800 }}>{shape.id}</div>
247
247
  <div style={mutedStyle}>
248
248
  {shape.constraint_count} constraints
249
249
  {shape.constraints.length ? ` · ${shape.constraints.join(", ")}` : ""}
@@ -306,7 +306,7 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
306
306
  return (
307
307
  <div key={`${violation.node}-${violation.path}-${index}`} style={violationRowStyle}>
308
308
  <div>
309
- <div style={{ color: "#fff0f2", fontWeight: 800 }}>{violation.message}</div>
309
+ <div style={{ color: "#2d1619", fontWeight: 800 }}>{violation.message}</div>
310
310
  <div style={mutedStyle}>{violation.severity} {violation.path ? `· ${violation.path}` : ""}</div>
311
311
  {nodeId ? <div style={monoStyle}>{nodeId}</div> : null}
312
312
  </div>
@@ -330,34 +330,34 @@ export function ShaclStudio({ onJumpToNode }: ShaclStudioProps) {
330
330
  }
331
331
 
332
332
  function validationBadgeStyle(status: string, conforms: boolean): CSSProperties {
333
- const color = status === "unavailable" ? "#ff7a45" : conforms ? "#7ce7d3" : "#ff9daf";
333
+ const color = status === "unavailable" ? "#e86a2e" : conforms ? "#0e8571" : "#e0556d";
334
334
  return { color, border: `1px solid ${color}35`, background: `${color}14`, borderRadius: 999, padding: "4px 9px", fontSize: 11, fontWeight: 900, textTransform: "uppercase" };
335
335
  }
336
336
 
337
337
  const pageStyle: CSSProperties = { height: "100%", overflow: "auto", padding: 22, display: "flex", flexDirection: "column", gap: 16 };
338
- const heroStyle: CSSProperties = { display: "flex", justifyContent: "space-between", gap: 18, padding: 22, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 22, background: "linear-gradient(135deg, rgba(11,25,42,0.94), rgba(7,14,25,0.9))" };
339
- const kickerStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", color: "#9ee8d7", fontSize: 11, fontWeight: 900, letterSpacing: "0.12em", textTransform: "uppercase" };
340
- const titleStyle: CSSProperties = { margin: "8px 0", color: "#fff0f2", fontSize: 26, letterSpacing: "-0.04em" };
341
- const textStyle: CSSProperties = { margin: 0, color: "#c99aa3", lineHeight: 1.6, maxWidth: 680 };
338
+ const heroStyle: CSSProperties = { display: "flex", justifyContent: "space-between", gap: 18, padding: 22, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 22, background: "linear-gradient(135deg, rgba(255, 255, 255,0.94), rgba(255, 255, 255,0.9))" };
339
+ const kickerStyle: CSSProperties = { display: "inline-flex", gap: 8, alignItems: "center", color: "#0e7f66", fontSize: 11, fontWeight: 900, letterSpacing: "0.12em", textTransform: "uppercase" };
340
+ const titleStyle: CSSProperties = { margin: "8px 0", color: "#2d1619", fontSize: 26, letterSpacing: "-0.04em" };
341
+ const textStyle: CSSProperties = { margin: 0, color: "#aa485b", lineHeight: 1.6, maxWidth: 680 };
342
342
  const selectorShellStyle: CSSProperties = { minWidth: 320 };
343
343
  const labelStyle: CSSProperties = { display: "block", color: "#9c7a82", fontSize: 11, fontWeight: 800, margin: "0 0 6px", textTransform: "uppercase", letterSpacing: "0.08em" };
344
- const inputStyle: CSSProperties = { width: "100%", boxSizing: "border-box", border: "1px solid rgba(255,107,129,0.14)", borderRadius: 12, padding: "10px 12px", background: "rgba(6,3,5,0.8)", color: "#fff0f2" };
344
+ const inputStyle: CSSProperties = { width: "100%", boxSizing: "border-box", border: "1px solid rgba(255,107,129,0.14)", borderRadius: 12, padding: "10px 12px", background: "rgba(255, 255, 255,0.8)", color: "#2d1619" };
345
345
  const gridStyle: CSSProperties = { display: "grid", gridTemplateColumns: "360px minmax(0, 1fr)", gap: 16, minHeight: 560 };
346
- const cardStyle: CSSProperties = { padding: 18, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 20, background: "rgba(12,6,9,0.78)" };
346
+ const cardStyle: CSSProperties = { padding: 18, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 20, background: "rgba(255, 255, 255,0.78)" };
347
347
  const editorShellStyle: CSSProperties = { ...cardStyle, display: "flex", flexDirection: "column", minHeight: 560 };
348
348
  const panelHeaderStyle: CSSProperties = { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 12, marginBottom: 12 };
349
- const sectionTitleStyle: CSSProperties = { margin: 0, color: "#fff0f2", fontSize: 16 };
350
- const countBadgeStyle: CSSProperties = { color: "#9ee8d7", border: "1px solid rgba(158,232,215,0.2)", borderRadius: 999, padding: "4px 9px", fontSize: 11, fontWeight: 900 };
349
+ const sectionTitleStyle: CSSProperties = { margin: 0, color: "#2d1619", fontSize: 16 };
350
+ const countBadgeStyle: CSSProperties = { color: "#0e7f66", border: "1px solid rgba(158,232,215,0.2)", borderRadius: 999, padding: "4px 9px", fontSize: 11, fontWeight: 900 };
351
351
  const shapeListStyle: CSSProperties = { display: "flex", flexDirection: "column", gap: 10 };
352
352
  const shapeGroupStyle: CSSProperties = { display: "flex", flexDirection: "column", gap: 6 };
353
353
  const shapeTargetStyle: CSSProperties = { color: "#9c7a82", fontSize: 11, fontWeight: 900, textTransform: "uppercase", letterSpacing: "0.08em" };
354
- const shapeRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "18px 1fr auto", gap: 10, padding: 10, borderRadius: 14, background: "rgba(255,255,255,0.03)", border: "1px solid rgba(255,107,129,0.08)" };
355
- const violationBadgeStyle: CSSProperties = { color: "#ff7a45", fontWeight: 900 };
354
+ const shapeRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "18px 1fr auto", gap: 10, padding: 10, borderRadius: 14, background: "rgba(28, 20, 24,0.03)", border: "1px solid rgba(255,107,129,0.08)" };
355
+ const violationBadgeStyle: CSSProperties = { color: "#e86a2e", fontWeight: 900 };
356
356
  const editorFrameStyle: CSSProperties = { flex: 1, minHeight: 0, border: "1px solid rgba(255,107,129,0.12)", borderRadius: 16, overflow: "hidden" };
357
- const primaryButtonStyle: CSSProperties = { border: "1px solid rgba(124,231,211,0.35)", borderRadius: 12, padding: "9px 11px", background: "linear-gradient(135deg, rgba(20,151,136,0.55), rgba(255,45,75,0.35))", color: "#fff0f2", fontWeight: 900, cursor: "pointer", display: "inline-flex", alignItems: "center", gap: 8 };
357
+ const primaryButtonStyle: CSSProperties = { border: "1px solid rgba(124,231,211,0.35)", borderRadius: 12, padding: "9px 11px", background: "linear-gradient(135deg, rgba(20,151,136,0.55), rgba(255,45,75,0.35))", color: "#2d1619", fontWeight: 900, cursor: "pointer", display: "inline-flex", alignItems: "center", gap: 8 };
358
358
  const secondaryButtonStyle: CSSProperties = { ...primaryButtonStyle, background: "rgba(255,107,129,0.08)", borderColor: "rgba(255,107,129,0.18)" };
359
- const violationRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "1fr auto", gap: 12, padding: 12, borderRadius: 14, background: "rgba(255,255,255,0.03)", border: "1px solid rgba(255,107,129,0.08)" };
360
- const smallButtonStyle: CSSProperties = { border: "1px solid rgba(255,107,129,0.16)", borderRadius: 10, padding: "7px 9px", background: "rgba(255,107,129,0.08)", color: "#fff0f2", cursor: "pointer", fontWeight: 800 };
359
+ const violationRowStyle: CSSProperties = { display: "grid", gridTemplateColumns: "1fr auto", gap: 12, padding: 12, borderRadius: 14, background: "rgba(28, 20, 24,0.03)", border: "1px solid rgba(255,107,129,0.08)" };
360
+ const smallButtonStyle: CSSProperties = { border: "1px solid rgba(255,107,129,0.16)", borderRadius: 10, padding: "7px 9px", background: "rgba(255,107,129,0.08)", color: "#2d1619", cursor: "pointer", fontWeight: 800 };
361
361
  const monoStyle: CSSProperties = { marginTop: 4, color: "#9c7a82", fontSize: 11, fontFamily: "JetBrains Mono, monospace", wordBreak: "break-all" };
362
362
  const mutedStyle: CSSProperties = { margin: 0, color: "#9c7a82", fontSize: 12, lineHeight: 1.5 };
363
- const errorStyle: CSSProperties = { padding: 12, borderRadius: 14, color: "#ffb4c2", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)" };
363
+ const errorStyle: CSSProperties = { padding: 12, borderRadius: 14, color: "#e98498", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)" };
@@ -218,15 +218,15 @@ export function VersionsTab() {
218
218
  const getStateIcon = (state: string) => {
219
219
  switch (state) {
220
220
  case "published":
221
- return <CheckCircle size={16} color="#4cc38a" />;
221
+ return <CheckCircle size={16} color="#1f9d5f" />;
222
222
  case "approved":
223
223
  return <CheckCircle size={16} color="#ff2d4b" />;
224
224
  case "rejected":
225
- return <XCircle size={16} color="#ff6b6b" />;
225
+ return <XCircle size={16} color="#e71313" />;
226
226
  case "proposed":
227
- return <AlertCircle size={16} color="#ff7a45" />;
227
+ return <AlertCircle size={16} color="#e86a2e" />;
228
228
  default:
229
- return <Clock size={16} color="#c99aa3" />;
229
+ return <Clock size={16} color="#aa485b" />;
230
230
  }
231
231
  };
232
232
 
@@ -234,7 +234,7 @@ export function VersionsTab() {
234
234
  display: "flex",
235
235
  flexDirection: "column",
236
236
  height: "100%",
237
- background: "#0b0508",
237
+ background: "#ffffff",
238
238
  padding: "20px",
239
239
  overflow: "auto",
240
240
  };
@@ -248,7 +248,7 @@ export function VersionsTab() {
248
248
 
249
249
  const titleStyle: React.CSSProperties = {
250
250
  margin: 0,
251
- color: "#fff0f2",
251
+ color: "#2d1619",
252
252
  fontSize: "20px",
253
253
  fontWeight: "700",
254
254
  };
@@ -259,7 +259,7 @@ export function VersionsTab() {
259
259
 
260
260
  const sectionTitleStyle: React.CSSProperties = {
261
261
  margin: "0 0 12px",
262
- color: "#fff0f2",
262
+ color: "#2d1619",
263
263
  fontSize: "14px",
264
264
  fontWeight: "600",
265
265
  display: "flex",
@@ -279,7 +279,7 @@ export function VersionsTab() {
279
279
  gap: "12px",
280
280
  padding: "12px 16px",
281
281
  borderRadius: "8px",
282
- background: "rgba(12, 6, 9, 0.8)",
282
+ background: "rgba(255, 255, 255, 0.8)",
283
283
  border: "1px solid rgba(255, 107, 129, 0.12)",
284
284
  transition: "160ms ease",
285
285
  };
@@ -295,7 +295,7 @@ export function VersionsTab() {
295
295
  };
296
296
 
297
297
  const modalStyle: React.CSSProperties = {
298
- background: "rgba(12, 6, 9, 0.95)",
298
+ background: "rgba(255, 255, 255, 0.95)",
299
299
  border: "1px solid rgba(255, 107, 129, 0.2)",
300
300
  borderRadius: "12px",
301
301
  padding: "24px",
@@ -314,7 +314,7 @@ export function VersionsTab() {
314
314
  borderRadius: "6px",
315
315
  border: "1px solid rgba(255, 107, 129, 0.2)",
316
316
  background: "rgba(255, 45, 75, 0.1)",
317
- color: "#fff0f2",
317
+ color: "#2d1619",
318
318
  fontSize: "12px",
319
319
  fontWeight: "600",
320
320
  cursor: "pointer",
@@ -326,13 +326,13 @@ export function VersionsTab() {
326
326
  padding: "10px 12px",
327
327
  borderRadius: "6px",
328
328
  border: "1px solid rgba(255, 107, 129, 0.2)",
329
- background: "rgba(6, 3, 5, 0.8)",
330
- color: "#fff0f2",
329
+ background: "rgba(255, 255, 255, 0.8)",
330
+ color: "#2d1619",
331
331
  fontSize: "13px",
332
332
  marginBottom: "12px",
333
333
  };
334
334
 
335
- const errorStyle: React.CSSProperties = { padding: "12px", borderRadius: "14px", color: "#ffb4c2", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)", marginBottom: "16px" };
335
+ const errorStyle: React.CSSProperties = { padding: "12px", borderRadius: "14px", color: "#e98498", background: "rgba(255,157,175,0.1)", border: "1px solid rgba(255,157,175,0.18)", marginBottom: "16px" };
336
336
 
337
337
  return (
338
338
  <div style={containerStyle}>
@@ -356,16 +356,16 @@ export function VersionsTab() {
356
356
  </h2>
357
357
  <div style={listStyle}>
358
358
  {versions.length === 0 ? (
359
- <div style={{ color: "#c99aa3", fontSize: "13px" }}>No versions found</div>
359
+ <div style={{ color: "#aa485b", fontSize: "13px" }}>No versions found</div>
360
360
  ) : (
361
361
  versions.map((version) => (
362
362
  <div key={version.version_id} style={itemStyle}>
363
363
  {getStateIcon(version.state)}
364
364
  <div style={{ flex: 1 }}>
365
- <div style={{ color: "#fff0f2", fontSize: "13px", fontWeight: "600" }}>
365
+ <div style={{ color: "#2d1619", fontSize: "13px", fontWeight: "600" }}>
366
366
  {version.version_id}
367
367
  </div>
368
- <div style={{ color: "#c99aa3", fontSize: "11px" }}>
368
+ <div style={{ color: "#aa485b", fontSize: "11px" }}>
369
369
  {version.author} • {new Date(version.date).toLocaleDateString()}
370
370
  </div>
371
371
  </div>
@@ -392,16 +392,16 @@ export function VersionsTab() {
392
392
  </h2>
393
393
  <div style={listStyle}>
394
394
  {proposals.length === 0 ? (
395
- <div style={{ color: "#c99aa3", fontSize: "13px" }}>No proposals found</div>
395
+ <div style={{ color: "#aa485b", fontSize: "13px" }}>No proposals found</div>
396
396
  ) : (
397
397
  proposals.map((proposal) => (
398
398
  <div key={proposal.proposal_id} style={itemStyle}>
399
399
  {getStateIcon(proposal.state)}
400
400
  <div style={{ flex: 1 }}>
401
- <div style={{ color: "#fff0f2", fontSize: "13px", fontWeight: "600" }}>
401
+ <div style={{ color: "#2d1619", fontSize: "13px", fontWeight: "600" }}>
402
402
  {proposal.summary}
403
403
  </div>
404
- <div style={{ color: "#c99aa3", fontSize: "11px" }}>
404
+ <div style={{ color: "#aa485b", fontSize: "11px" }}>
405
405
  {proposal.author} • {new Date(proposal.created_at).toLocaleDateString()}
406
406
  </div>
407
407
  </div>
@@ -443,51 +443,51 @@ export function VersionsTab() {
443
443
  <div style={modalOverlayStyle} onClick={() => setShowProposalModal(false)}>
444
444
  <div style={modalStyle} onClick={(e) => e.stopPropagation()}>
445
445
  <div style={{ display: "flex", justifyContent: "space-between", marginBottom: "16px" }}>
446
- <h3 style={{ margin: 0, color: "#fff0f2", fontSize: "16px" }}>Proposal Details</h3>
447
- <button onClick={() => setShowProposalModal(false)} style={{ background: "none", border: "none", color: "#c99aa3", cursor: "pointer" }}>
446
+ <h3 style={{ margin: 0, color: "#2d1619", fontSize: "16px" }}>Proposal Details</h3>
447
+ <button onClick={() => setShowProposalModal(false)} style={{ background: "none", border: "none", color: "#aa485b", cursor: "pointer" }}>
448
448
  <X size={18} />
449
449
  </button>
450
450
  </div>
451
451
  <div style={{ marginBottom: "12px" }}>
452
- <label style={{ display: "block", color: "#c99aa3", fontSize: "12px", marginBottom: "4px" }}>
452
+ <label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
453
453
  Summary
454
454
  </label>
455
- <div style={{ color: "#fff0f2", fontSize: "13px" }}>{selectedProposal.summary}</div>
455
+ <div style={{ color: "#2d1619", fontSize: "13px" }}>{selectedProposal.summary}</div>
456
456
  </div>
457
457
  <div style={{ marginBottom: "12px" }}>
458
- <label style={{ display: "block", color: "#c99aa3", fontSize: "12px", marginBottom: "4px" }}>
458
+ <label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
459
459
  State
460
460
  </label>
461
- <div style={{ display: "flex", alignItems: "center", gap: "6px", color: "#fff0f2", fontSize: "13px" }}>
461
+ <div style={{ display: "flex", alignItems: "center", gap: "6px", color: "#2d1619", fontSize: "13px" }}>
462
462
  {getStateIcon(selectedProposal.state)}
463
463
  {selectedProposal.state}
464
464
  </div>
465
465
  </div>
466
466
  <div style={{ marginBottom: "12px" }}>
467
- <label style={{ display: "block", color: "#c99aa3", fontSize: "12px", marginBottom: "4px" }}>
467
+ <label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
468
468
  Impact Analysis
469
469
  </label>
470
- <pre style={{ background: "rgba(6, 3, 5, 0.8)", padding: "12px", borderRadius: "6px", color: "#fff0f2", fontSize: "12px", overflow: "auto" }}>
470
+ <pre style={{ background: "rgba(255, 255, 255, 0.8)", padding: "12px", borderRadius: "6px", color: "#2d1619", fontSize: "12px", overflow: "auto" }}>
471
471
  {JSON.stringify(selectedProposal.impact_analysis, null, 2)}
472
472
  </pre>
473
473
  </div>
474
474
  <div style={{ marginBottom: "12px" }}>
475
- <label style={{ display: "block", color: "#c99aa3", fontSize: "12px", marginBottom: "4px" }}>
475
+ <label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
476
476
  SHACL Validation
477
477
  </label>
478
- <pre style={{ background: "rgba(6, 3, 5, 0.8)", padding: "12px", borderRadius: "6px", color: "#fff0f2", fontSize: "12px", overflow: "auto" }}>
478
+ <pre style={{ background: "rgba(255, 255, 255, 0.8)", padding: "12px", borderRadius: "6px", color: "#2d1619", fontSize: "12px", overflow: "auto" }}>
479
479
  {JSON.stringify(selectedProposal.shacl_validation, null, 2)}
480
480
  </pre>
481
481
  </div>
482
482
  <div>
483
- <label style={{ display: "block", color: "#c99aa3", fontSize: "12px", marginBottom: "4px" }}>
483
+ <label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
484
484
  Comments ({selectedProposal.comments.length})
485
485
  </label>
486
486
  <div style={{ maxHeight: "120px", overflow: "auto" }}>
487
487
  {selectedProposal.comments.map((comment) => (
488
- <div key={comment.id} style={{ padding: "8px", background: "rgba(6, 3, 5, 0.6)", borderRadius: "4px", marginBottom: "6px" }}>
489
- <div style={{ color: "#fff0f2", fontSize: "12px", fontWeight: "600" }}>{comment.author}</div>
490
- <div style={{ color: "#c99aa3", fontSize: "11px" }}>{comment.text}</div>
488
+ <div key={comment.id} style={{ padding: "8px", background: "rgba(255, 255, 255, 0.6)", borderRadius: "4px", marginBottom: "6px" }}>
489
+ <div style={{ color: "#2d1619", fontSize: "12px", fontWeight: "600" }}>{comment.author}</div>
490
+ <div style={{ color: "#aa485b", fontSize: "11px" }}>{comment.text}</div>
491
491
  </div>
492
492
  ))}
493
493
  </div>
@@ -500,14 +500,14 @@ export function VersionsTab() {
500
500
  <div style={modalOverlayStyle} onClick={() => setShowCompareModal(false)}>
501
501
  <div style={modalStyle} onClick={(e) => e.stopPropagation()}>
502
502
  <div style={{ display: "flex", justifyContent: "space-between", marginBottom: "16px" }}>
503
- <h3 style={{ margin: 0, color: "#fff0f2", fontSize: "16px" }}>Compare Versions</h3>
504
- <button onClick={() => setShowCompareModal(false)} style={{ background: "none", border: "none", color: "#c99aa3", cursor: "pointer" }}>
503
+ <h3 style={{ margin: 0, color: "#2d1619", fontSize: "16px" }}>Compare Versions</h3>
504
+ <button onClick={() => setShowCompareModal(false)} style={{ background: "none", border: "none", color: "#aa485b", cursor: "pointer" }}>
505
505
  <X size={18} />
506
506
  </button>
507
507
  </div>
508
508
  <div style={{ display: "flex", gap: "12px", marginBottom: "16px" }}>
509
509
  <div style={{ flex: 1 }}>
510
- <label style={{ display: "block", color: "#c99aa3", fontSize: "12px", marginBottom: "4px" }}>
510
+ <label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
511
511
  Version 1
512
512
  </label>
513
513
  <input
@@ -518,7 +518,7 @@ export function VersionsTab() {
518
518
  />
519
519
  </div>
520
520
  <div style={{ flex: 1 }}>
521
- <label style={{ display: "block", color: "#c99aa3", fontSize: "12px", marginBottom: "4px" }}>
521
+ <label style={{ display: "block", color: "#aa485b", fontSize: "12px", marginBottom: "4px" }}>
522
522
  Version 2
523
523
  </label>
524
524
  <input
@@ -534,7 +534,7 @@ export function VersionsTab() {
534
534
  {isLoading ? "Comparing..." : "Compare"}
535
535
  </button>
536
536
  {compareResult && (
537
- <pre style={{ marginTop: "16px", background: "rgba(6, 3, 5, 0.8)", padding: "12px", borderRadius: "6px", color: "#fff0f2", fontSize: "12px", overflow: "auto" }}>
537
+ <pre style={{ marginTop: "16px", background: "rgba(255, 255, 255, 0.8)", padding: "12px", borderRadius: "6px", color: "#2d1619", fontSize: "12px", overflow: "auto" }}>
538
538
  {JSON.stringify(compareResult, null, 2)}
539
539
  </pre>
540
540
  )}
@@ -6,12 +6,12 @@ export type RegistryEntry = {
6
6
  };
7
7
 
8
8
  export const ONTOLOGY_MINIMAP_THEME = {
9
- bgColor: "#0b1625",
10
- maskColor: "rgba(11, 5, 8, 0.72)",
9
+ bgColor: "#f7f7f8",
10
+ maskColor: "rgba(255, 255, 255, 0.72)",
11
11
  maskStrokeColor: "#5faeff",
12
12
  maskStrokeWidth: 2,
13
13
  nodeColor: "#2d7fd3",
14
- nodeStrokeColor: "#9acbff",
14
+ nodeStrokeColor: "#1f3348",
15
15
  nodeStrokeWidth: 1,
16
16
  style: {
17
17
  border: "1px solid #29435c",
@@ -145,11 +145,11 @@ export function ReasoningWorkspace() {
145
145
  onChange={(e) => setApplyToGraph(e.target.checked)}
146
146
  style={{ opacity: 0, position: "absolute", inset: 0, cursor: "pointer", margin: 0 }}
147
147
  />
148
- <div style={{ position: "absolute", inset: 0, borderRadius: 999, background: applyToGraph ? "var(--ws-green)" : "rgba(255,255,255,0.12)", transition: "background 180ms ease" }} />
149
- <div style={{ position: "absolute", top: 3, left: applyToGraph ? 19 : 3, width: 14, height: 14, borderRadius: 999, background: "#fff", transition: "left 180ms ease", boxShadow: "0 1px 4px rgba(0,0,0,0.4)" }} />
148
+ <div style={{ position: "absolute", inset: 0, borderRadius: 999, background: applyToGraph ? "var(--ws-green)" : "rgba(28, 20, 24,0.12)", transition: "background 180ms ease" }} />
149
+ <div style={{ position: "absolute", top: 3, left: applyToGraph ? 19 : 3, width: 14, height: 14, borderRadius: 999, background: "#16181d", transition: "left 180ms ease", boxShadow: "0 1px 4px rgba(0,0,0,0.4)" }} />
150
150
  </div>
151
151
  <div>
152
- <div style={{ fontSize: 13, fontWeight: 700, color: applyToGraph ? "#6ee7b7" : "var(--ws-text-muted)" }}>Write inferred facts to graph</div>
152
+ <div style={{ fontSize: 13, fontWeight: 700, color: applyToGraph ? "#0f8f6e" : "var(--ws-text-muted)" }}>Write inferred facts to graph</div>
153
153
  <div style={{ fontSize: 11, color: "var(--ws-text-dim)" }}>Inferred binary facts are added as edges</div>
154
154
  </div>
155
155
  </label>
@@ -194,7 +194,7 @@ export function ReasoningWorkspace() {
194
194
 
195
195
  <div className="ws-scroll ws-padded" style={{ display: "flex", flexDirection: "column", gap: 12 }}>
196
196
  {error && (
197
- <div className="ws-animate-in" style={{ display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#fca5a5", fontSize: 13 }}>
197
+ <div className="ws-animate-in" style={{ display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#4e2121", fontSize: 13 }}>
198
198
  <AlertCircle size={16} style={{ flexShrink: 0, marginTop: 1 }} />
199
199
  <div>{error}</div>
200
200
  </div>
@@ -45,8 +45,8 @@ export function SparqlWorkspace() {
45
45
  { token: "number", foreground: "f2b66d" },
46
46
  ],
47
47
  colors: {
48
- "editor.background": "#050c18",
49
- "editor.lineHighlightBackground": "#0a1628",
48
+ "editor.background": "#f6f6f7",
49
+ "editor.lineHighlightBackground": "#f7f7f8",
50
50
  "editorLineNumber.foreground": "#2a4060",
51
51
  "editorCursor.foreground": "#ff2d4b",
52
52
  "editor.selectionBackground": "#1e3a5a",
@@ -211,7 +211,7 @@ export function SparqlWorkspace() {
211
211
  )}
212
212
 
213
213
  {result?.error && !isLoading && (
214
- <div className="ws-animate-in" style={{ margin: 16, display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#fca5a5", fontSize: 13 }}>
214
+ <div className="ws-animate-in" style={{ margin: 16, display: "flex", gap: 10, padding: "12px 14px", borderRadius: "var(--ws-radius-sm)", background: "var(--ws-red-soft)", border: "1px solid rgba(255,123,114,0.28)", color: "#4e2121", fontSize: 13 }}>
215
215
  <AlertCircle size={16} style={{ flexShrink: 0, marginTop: 1 }} />
216
216
  {result.error}
217
217
  </div>
@@ -52,7 +52,7 @@ export const ConceptTree: React.FC<ConceptTreeProps> = ({ data, onSelectConcept
52
52
  ? 'rgba(255,45,75,0.12)'
53
53
  : 'transparent',
54
54
  userSelect: 'none',
55
- borderBottom: '1px solid rgba(255,255,255,0.04)',
55
+ borderBottom: '1px solid rgba(28, 20, 24,0.04)',
56
56
  transition: 'background 0.15s',
57
57
  }}
58
58
  onMouseEnter={(e) => {
@@ -76,13 +76,13 @@ export const ConceptTree: React.FC<ConceptTreeProps> = ({ data, onSelectConcept
76
76
 
77
77
  <span style={{ marginRight: 8, display: 'flex', alignItems: 'center' }}>
78
78
  {isFolder
79
- ? <Folder size={14} color="#d2a8ff" />
79
+ ? <Folder size={14} color="#7c3aed" />
80
80
  : <FileText size={14} color="#484f58" />
81
81
  }
82
82
  </span>
83
83
 
84
84
  <span style={{
85
- fontSize: 13, color: '#e8ccd1',
85
+ fontSize: 13, color: '#523036',
86
86
  whiteSpace: 'nowrap', overflow: 'hidden',
87
87
  textOverflow: 'ellipsis',
88
88
  }}>