@ltm-blueverse/alpha-semantic-hub 0.7.0

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 (146) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1674 -0
  3. package/explorer/README.md +282 -0
  4. package/explorer/src/App.css +0 -0
  5. package/explorer/src/App.tsx +2035 -0
  6. package/explorer/src/ErrorBoundary.tsx +112 -0
  7. package/explorer/src/ExploreWorkspaceTabs.tsx +29 -0
  8. package/explorer/src/assets/hero.png +0 -0
  9. package/explorer/src/assets/react.svg +1 -0
  10. package/explorer/src/assets/vite.svg +1 -0
  11. package/explorer/src/explorerCapabilities.ts +24 -0
  12. package/explorer/src/index.css +71 -0
  13. package/explorer/src/main.tsx +7 -0
  14. package/explorer/src/store/edgePairKeys.d.ts +2 -0
  15. package/explorer/src/store/edgePairKeys.js +7 -0
  16. package/explorer/src/store/graphStore.ts +183 -0
  17. package/explorer/src/store/registryStore.ts +78 -0
  18. package/explorer/src/types.d.ts +16 -0
  19. package/explorer/src/ui/primitives.css +414 -0
  20. package/explorer/src/ui/primitives.tsx +170 -0
  21. package/explorer/src/workspaces/DecisionWorkspace/DecisionWorkspace.tsx +279 -0
  22. package/explorer/src/workspaces/DiffMergeWorkspace/DiffMergeWorkspace.tsx +121 -0
  23. package/explorer/src/workspaces/EnrichWorkspace/EntityResolutionTab.tsx +454 -0
  24. package/explorer/src/workspaces/EnrichWorkspace/RegistryTab.tsx +285 -0
  25. package/explorer/src/workspaces/GraphWorkspace/GraphCanvas.tsx +2673 -0
  26. package/explorer/src/workspaces/GraphWorkspace/GraphInspectorPanel.tsx +771 -0
  27. package/explorer/src/workspaces/GraphWorkspace/GraphLoadingOverlay.tsx +410 -0
  28. package/explorer/src/workspaces/GraphWorkspace/GraphWorkspace.tsx +3584 -0
  29. package/explorer/src/workspaces/GraphWorkspace/MarkdownContentViewer.tsx +705 -0
  30. package/explorer/src/workspaces/GraphWorkspace/SigmaSceneAdapter.tsx +55 -0
  31. package/explorer/src/workspaces/GraphWorkspace/TimelinePanel.tsx +193 -0
  32. package/explorer/src/workspaces/GraphWorkspace/behaviors/clickSelectionBehavior.ts +29 -0
  33. package/explorer/src/workspaces/GraphWorkspace/behaviors/fitViewBehavior.ts +15 -0
  34. package/explorer/src/workspaces/GraphWorkspace/behaviors/focusCameraBehavior.ts +25 -0
  35. package/explorer/src/workspaces/GraphWorkspace/behaviors/hoverActivationBehavior.ts +15 -0
  36. package/explorer/src/workspaces/GraphWorkspace/behaviors/pathHighlightBehavior.ts +52 -0
  37. package/explorer/src/workspaces/GraphWorkspace/behaviors/searchFocusBehavior.ts +36 -0
  38. package/explorer/src/workspaces/GraphWorkspace/behaviors/types.ts +41 -0
  39. package/explorer/src/workspaces/GraphWorkspace/behaviors/viewModeSwitchBehavior.ts +29 -0
  40. package/explorer/src/workspaces/GraphWorkspace/graphAnalytics.ts +779 -0
  41. package/explorer/src/workspaces/GraphWorkspace/graphColorLegend.ts +36 -0
  42. package/explorer/src/workspaces/GraphWorkspace/graphConfig.ts +102 -0
  43. package/explorer/src/workspaces/GraphWorkspace/graphEntityShape.ts +34 -0
  44. package/explorer/src/workspaces/GraphWorkspace/graphLoading.ts +84 -0
  45. package/explorer/src/workspaces/GraphWorkspace/graphSceneLayers.ts +775 -0
  46. package/explorer/src/workspaces/GraphWorkspace/graphSceneState.ts +2753 -0
  47. package/explorer/src/workspaces/GraphWorkspace/graphStructureLayer.ts +335 -0
  48. package/explorer/src/workspaces/GraphWorkspace/graphTheme.ts +1078 -0
  49. package/explorer/src/workspaces/GraphWorkspace/graphViewCopy.ts +41 -0
  50. package/explorer/src/workspaces/GraphWorkspace/localGraphTransition.ts +9 -0
  51. package/explorer/src/workspaces/GraphWorkspace/markdownEditorState.ts +114 -0
  52. package/explorer/src/workspaces/GraphWorkspace/markdownResourceClient.ts +103 -0
  53. package/explorer/src/workspaces/GraphWorkspace/markdownUrlSafety.ts +29 -0
  54. package/explorer/src/workspaces/GraphWorkspace/nodeMarkdownSync.ts +81 -0
  55. package/explorer/src/workspaces/GraphWorkspace/pluginRegistryPredicates.ts +24 -0
  56. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPlugin.tsx +353 -0
  57. package/explorer/src/workspaces/GraphWorkspace/plugins/explorationEffectsPluginPhaseC.tsx +522 -0
  58. package/explorer/src/workspaces/GraphWorkspace/plugins/index.ts +16 -0
  59. package/explorer/src/workspaces/GraphWorkspace/plugins/legendPlugin.tsx +120 -0
  60. package/explorer/src/workspaces/GraphWorkspace/plugins/neighborhoodPanelPlugin.tsx +231 -0
  61. package/explorer/src/workspaces/GraphWorkspace/plugins/temporalOverlayPlugin.tsx +142 -0
  62. package/explorer/src/workspaces/GraphWorkspace/plugins/types.ts +106 -0
  63. package/explorer/src/workspaces/GraphWorkspace/realtimeGraphAttributes.ts +50 -0
  64. package/explorer/src/workspaces/GraphWorkspace/scene.ts +79 -0
  65. package/explorer/src/workspaces/GraphWorkspace/sigmaNativeRendering.ts +421 -0
  66. package/explorer/src/workspaces/GraphWorkspace/smallGraphLayout.ts +135 -0
  67. package/explorer/src/workspaces/GraphWorkspace/temporalLifecyclePredicates.ts +31 -0
  68. package/explorer/src/workspaces/GraphWorkspace/temporalScrubberBounds.ts +46 -0
  69. package/explorer/src/workspaces/GraphWorkspace/temporalSnapshotGuards.ts +113 -0
  70. package/explorer/src/workspaces/GraphWorkspace/types.ts +395 -0
  71. package/explorer/src/workspaces/GraphWorkspace/useLoadGraph.ts +746 -0
  72. package/explorer/src/workspaces/GraphWorkspace/useMarkdownEditor.ts +177 -0
  73. package/explorer/src/workspaces/ImportExportWorkspace/ImportExportWorkspace.tsx +196 -0
  74. package/explorer/src/workspaces/LineageWorkspace/LineageDiagram.tsx +177 -0
  75. package/explorer/src/workspaces/ManageWorkspace/KGOverviewTab.tsx +291 -0
  76. package/explorer/src/workspaces/ManageWorkspace/OntologySummaryTab.tsx +346 -0
  77. package/explorer/src/workspaces/MemoryWorkspace.tsx +464 -0
  78. package/explorer/src/workspaces/OntologyWorkspace/AlignmentsTab.tsx +437 -0
  79. package/explorer/src/workspaces/OntologyWorkspace/HealthTab.tsx +214 -0
  80. package/explorer/src/workspaces/OntologyWorkspace/OntologyEditor.tsx +770 -0
  81. package/explorer/src/workspaces/OntologyWorkspace/OntologyLoader.tsx +913 -0
  82. package/explorer/src/workspaces/OntologyWorkspace/OntologyManager.tsx +930 -0
  83. package/explorer/src/workspaces/OntologyWorkspace/OntologySearch.tsx +590 -0
  84. package/explorer/src/workspaces/OntologyWorkspace/ProposalReview.tsx +429 -0
  85. package/explorer/src/workspaces/OntologyWorkspace/SKOSVocabularyManager.tsx +696 -0
  86. package/explorer/src/workspaces/OntologyWorkspace/ShaclStudio.tsx +363 -0
  87. package/explorer/src/workspaces/OntologyWorkspace/VersionsTab.tsx +546 -0
  88. package/explorer/src/workspaces/OntologyWorkspace/api.ts +164 -0
  89. package/explorer/src/workspaces/OntologyWorkspace/index.tsx +101 -0
  90. package/explorer/src/workspaces/OntologyWorkspace/ontologyEditorModel.ts +87 -0
  91. package/explorer/src/workspaces/OntologyWorkspace/ontologyUrlState.ts +94 -0
  92. package/explorer/src/workspaces/OntologyWorkspace/types.ts +119 -0
  93. package/explorer/src/workspaces/ReasoningWorkspace.tsx +243 -0
  94. package/explorer/src/workspaces/SparqlWorkspace/SparqlWorkspace.tsx +271 -0
  95. package/explorer/src/workspaces/VocabularyWorkspace/ConceptTree.tsx +97 -0
  96. package/explorer/src/workspaces/VocabularyWorkspace/ImportDropzone.tsx +95 -0
  97. package/explorer/src/workspaces/VocabularyWorkspace/PropertyPanel.tsx +116 -0
  98. package/explorer/src/workspaces/VocabularyWorkspace/Sidebar.tsx +112 -0
  99. package/explorer/src/workspaces/VocabularyWorkspace/VocabularyWorkspace.tsx +70 -0
  100. package/explorer/src/workspaces/VocabularyWorkspace/queries.ts +52 -0
  101. package/explorer/src/workspaces/VocabularyWorkspace/types.ts +24 -0
  102. package/package.json +31 -0
  103. package/plugins/.claude-plugin/README.md +262 -0
  104. package/plugins/.claude-plugin/marketplace.json +20 -0
  105. package/plugins/.claude-plugin/plugin.json +33 -0
  106. package/plugins/.cline-plugin/README.md +32 -0
  107. package/plugins/.cline-plugin/marketplace.json +17 -0
  108. package/plugins/.cline-plugin/plugin.json +35 -0
  109. package/plugins/.codex-plugin/marketplace.json +21 -0
  110. package/plugins/.codex-plugin/plugin.json +35 -0
  111. package/plugins/.continue-plugin/README.md +34 -0
  112. package/plugins/.continue-plugin/marketplace.json +17 -0
  113. package/plugins/.continue-plugin/plugin.json +33 -0
  114. package/plugins/.cursor-plugin/marketplace.json +18 -0
  115. package/plugins/.cursor-plugin/plugin.json +32 -0
  116. package/plugins/.openclaw-plugin/README.md +62 -0
  117. package/plugins/.openclaw-plugin/marketplace.json +18 -0
  118. package/plugins/.openclaw-plugin/plugin.json +46 -0
  119. package/plugins/.pi-plugin/README.md +35 -0
  120. package/plugins/.vscode-plugin/README.md +48 -0
  121. package/plugins/.vscode-plugin/marketplace.json +17 -0
  122. package/plugins/.vscode-plugin/plugin.json +35 -0
  123. package/plugins/.windsurf-plugin/README.md +39 -0
  124. package/plugins/.windsurf-plugin/marketplace.json +17 -0
  125. package/plugins/.windsurf-plugin/plugin.json +35 -0
  126. package/plugins/agents/decision-advisor.md +126 -0
  127. package/plugins/agents/explainability.md +129 -0
  128. package/plugins/agents/kg-assistant.md +73 -0
  129. package/plugins/hooks/hooks.json +12 -0
  130. package/plugins/skills/causal/SKILL.md +74 -0
  131. package/plugins/skills/change/SKILL.md +80 -0
  132. package/plugins/skills/decision/SKILL.md +197 -0
  133. package/plugins/skills/deduplicate/SKILL.md +41 -0
  134. package/plugins/skills/embed/SKILL.md +230 -0
  135. package/plugins/skills/explain/SKILL.md +44 -0
  136. package/plugins/skills/export/SKILL.md +67 -0
  137. package/plugins/skills/extract/SKILL.md +93 -0
  138. package/plugins/skills/ingest/SKILL.md +38 -0
  139. package/plugins/skills/ontology/SKILL.md +89 -0
  140. package/plugins/skills/policy/SKILL.md +66 -0
  141. package/plugins/skills/provenance/SKILL.md +70 -0
  142. package/plugins/skills/query/SKILL.md +84 -0
  143. package/plugins/skills/reason/SKILL.md +201 -0
  144. package/plugins/skills/temporal/SKILL.md +164 -0
  145. package/plugins/skills/validate/SKILL.md +228 -0
  146. package/plugins/skills/visualize/SKILL.md +249 -0
@@ -0,0 +1,414 @@
1
+ .sem-workspace-frame {
2
+ width: 100%;
3
+ height: 100%;
4
+ min-width: 0;
5
+ display: flex;
6
+ flex-direction: column;
7
+ flex: 1;
8
+ gap: 18px;
9
+ padding: 20px;
10
+ background:
11
+ radial-gradient(circle at top, rgba(255, 107, 129, 0.08), transparent 24%),
12
+ linear-gradient(180deg, rgba(10, 5, 8, 0.94), rgba(3, 7, 14, 0.98));
13
+ }
14
+
15
+ .sem-workspace-frame > :last-child {
16
+ width: 100%;
17
+ min-width: 0;
18
+ min-height: 0;
19
+ flex: 1;
20
+ align-self: stretch;
21
+ }
22
+
23
+ .sem-workspace-hero {
24
+ width: 100%;
25
+ display: flex;
26
+ justify-content: space-between;
27
+ align-items: flex-start;
28
+ gap: 18px;
29
+ padding: 20px 22px;
30
+ border-radius: 16px;
31
+ border: 1px solid var(--panel-border);
32
+ background:
33
+ linear-gradient(180deg, rgba(10, 5, 9, 0.88), rgba(14, 7, 11, 0.72)),
34
+ radial-gradient(circle at top right, rgba(255, 179, 109, 0.08), transparent 28%);
35
+ box-shadow: var(--shadow-strong), inset 0 1px 0 rgba(255,255,255,0.04);
36
+ backdrop-filter: blur(18px);
37
+ -webkit-backdrop-filter: blur(18px);
38
+ }
39
+
40
+ .sem-workspace-kicker {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: 8px;
44
+ color: var(--text-2);
45
+ font-size: 11px;
46
+ font-weight: 800;
47
+ letter-spacing: 0.08em;
48
+ text-transform: uppercase;
49
+ margin-bottom: 12px;
50
+ }
51
+
52
+ .sem-workspace-kicker::before {
53
+ content: "";
54
+ width: 7px;
55
+ height: 7px;
56
+ border-radius: 999px;
57
+ background: linear-gradient(135deg, var(--accent-2), var(--warm));
58
+ box-shadow: 0 0 14px rgba(255, 154, 171, 0.45);
59
+ }
60
+
61
+ .sem-workspace-title {
62
+ color: var(--text-1);
63
+ font-size: 28px;
64
+ line-height: 0.98;
65
+ letter-spacing: -0.05em;
66
+ font-weight: 800;
67
+ margin: 0;
68
+ }
69
+
70
+ .sem-workspace-subtitle {
71
+ margin-top: 8px;
72
+ color: var(--text-2);
73
+ font-size: 13px;
74
+ line-height: 1.6;
75
+ max-width: 58ch;
76
+ }
77
+
78
+ .sem-workspace-actions {
79
+ display: flex;
80
+ gap: 8px;
81
+ flex-wrap: wrap;
82
+ justify-content: flex-end;
83
+ }
84
+
85
+ .sem-grid-two {
86
+ display: grid;
87
+ grid-template-columns: minmax(0, 1.12fr) minmax(320px, 0.88fr);
88
+ gap: 20px;
89
+ min-height: 0;
90
+ flex: 1;
91
+ }
92
+
93
+ .sem-grid-split {
94
+ display: grid;
95
+ grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
96
+ gap: 18px;
97
+ min-height: 0;
98
+ flex: 1;
99
+ }
100
+
101
+ .sem-surface {
102
+ border-radius: 14px;
103
+ border: 1px solid var(--panel-border);
104
+ background:
105
+ linear-gradient(180deg, rgba(11, 6, 9, 0.84), rgba(12, 6, 9, 0.72)),
106
+ radial-gradient(circle at top, rgba(255, 107, 129, 0.05), transparent 34%);
107
+ box-shadow: 0 18px 44px rgba(0, 0, 0, 0.28), inset 0 1px 0 rgba(255,255,255,0.04);
108
+ backdrop-filter: blur(18px);
109
+ -webkit-backdrop-filter: blur(18px);
110
+ }
111
+
112
+ .sem-surface--subtle {
113
+ background: linear-gradient(180deg, rgba(11, 6, 9, 0.7), rgba(11, 5, 8, 0.52));
114
+ }
115
+
116
+ .sem-surface--accent {
117
+ border-color: var(--panel-border-strong);
118
+ }
119
+
120
+ .sem-surface-body {
121
+ padding: 20px;
122
+ }
123
+
124
+ .sem-surface-body--tight {
125
+ padding: 14px;
126
+ }
127
+
128
+ .sem-section-header {
129
+ display: flex;
130
+ justify-content: space-between;
131
+ align-items: flex-start;
132
+ gap: 12px;
133
+ margin-bottom: 16px;
134
+ }
135
+
136
+ .sem-section-eyebrow {
137
+ color: var(--text-3);
138
+ font-size: 11px;
139
+ font-weight: 800;
140
+ letter-spacing: 0.08em;
141
+ text-transform: uppercase;
142
+ margin-bottom: 8px;
143
+ }
144
+
145
+ .sem-section-title {
146
+ color: var(--text-1);
147
+ font-size: 18px;
148
+ font-weight: 800;
149
+ letter-spacing: -0.04em;
150
+ margin: 0;
151
+ }
152
+
153
+ .sem-section-copy {
154
+ margin-top: 6px;
155
+ color: var(--text-2);
156
+ font-size: 13px;
157
+ line-height: 1.55;
158
+ }
159
+
160
+ .sem-chip {
161
+ display: inline-flex;
162
+ align-items: center;
163
+ gap: 8px;
164
+ padding: 6px 10px;
165
+ border-radius: 999px;
166
+ border: 1px solid rgba(255, 107, 129, 0.16);
167
+ background: rgba(255, 107, 129, 0.08);
168
+ color: #ff9aab;
169
+ font-size: 12px;
170
+ font-weight: 700;
171
+ }
172
+
173
+ .sem-chip--warm {
174
+ color: #ffce97;
175
+ border-color: rgba(255, 179, 109, 0.16);
176
+ background: rgba(255, 179, 109, 0.08);
177
+ }
178
+
179
+ .sem-chip--success {
180
+ color: #8bf0bf;
181
+ border-color: rgba(80, 210, 159, 0.16);
182
+ background: rgba(80, 210, 159, 0.08);
183
+ }
184
+
185
+ .sem-command-bar {
186
+ display: flex;
187
+ align-items: center;
188
+ justify-content: space-between;
189
+ gap: 10px;
190
+ flex-wrap: wrap;
191
+ padding: 12px 14px;
192
+ border-radius: 12px;
193
+ border: 1px solid rgba(255, 138, 153, 0.12);
194
+ background: rgba(0, 0, 0, 0.18);
195
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.03);
196
+ }
197
+
198
+ .sem-command-group {
199
+ display: flex;
200
+ align-items: center;
201
+ gap: 8px;
202
+ flex-wrap: wrap;
203
+ }
204
+
205
+ .sem-segmented {
206
+ display: inline-flex;
207
+ gap: 4px;
208
+ padding: 4px;
209
+ border-radius: 999px;
210
+ border: 1px solid rgba(255, 138, 153, 0.12);
211
+ background: rgba(10, 5, 8, 0.58);
212
+ }
213
+
214
+ .sem-button,
215
+ .sem-button-secondary {
216
+ display: inline-flex;
217
+ align-items: center;
218
+ justify-content: center;
219
+ gap: 8px;
220
+ min-height: 40px;
221
+ padding: 10px 14px;
222
+ border-radius: 14px;
223
+ cursor: pointer;
224
+ transition: transform 180ms ease, border-color 180ms ease, background 180ms ease, opacity 180ms ease;
225
+ }
226
+
227
+ .sem-button:hover,
228
+ .sem-button-secondary:hover {
229
+ transform: translateY(-1px);
230
+ }
231
+
232
+ .sem-button {
233
+ color: white;
234
+ border: 1px solid rgba(255, 107, 129, 0.2);
235
+ background: linear-gradient(180deg, rgba(53, 130, 245, 0.3), rgba(25, 88, 185, 0.18));
236
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.05);
237
+ font-weight: 700;
238
+ }
239
+
240
+ .sem-button-secondary {
241
+ color: #d8e8fb;
242
+ border: 1px solid rgba(255, 255, 255, 0.06);
243
+ background: rgba(255, 255, 255, 0.035);
244
+ font-weight: 600;
245
+ }
246
+
247
+ .sem-button:disabled,
248
+ .sem-button-secondary:disabled {
249
+ opacity: 0.55;
250
+ cursor: not-allowed;
251
+ transform: none;
252
+ }
253
+
254
+ .sem-segmented button {
255
+ min-height: 36px;
256
+ padding: 8px 12px;
257
+ border-radius: 999px;
258
+ }
259
+
260
+ .sem-segmented button[data-active="true"] {
261
+ background: linear-gradient(180deg, rgba(53, 130, 245, 0.34), rgba(25, 88, 185, 0.2));
262
+ border-color: rgba(255, 138, 153, 0.2);
263
+ }
264
+
265
+ .sem-input,
266
+ .sem-select,
267
+ .sem-textarea {
268
+ width: 100%;
269
+ border-radius: 14px;
270
+ border: 1px solid rgba(255, 138, 153, 0.14);
271
+ background: rgba(0, 0, 0, 0.22);
272
+ color: var(--text-1);
273
+ padding: 12px 14px;
274
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.03);
275
+ }
276
+
277
+ .sem-input::placeholder,
278
+ .sem-textarea::placeholder {
279
+ color: var(--text-3);
280
+ }
281
+
282
+ .sem-textarea {
283
+ min-height: 160px;
284
+ resize: vertical;
285
+ }
286
+
287
+ .sem-inspector {
288
+ height: 100%;
289
+ overflow: auto;
290
+ }
291
+
292
+ .sem-empty-state,
293
+ .sem-loading-state {
294
+ height: 100%;
295
+ min-height: 240px;
296
+ display: flex;
297
+ flex-direction: column;
298
+ justify-content: center;
299
+ align-items: center;
300
+ text-align: center;
301
+ padding: 28px;
302
+ color: var(--text-2);
303
+ }
304
+
305
+ .sem-empty-state-title,
306
+ .sem-loading-state-title {
307
+ color: var(--text-1);
308
+ font-size: 16px;
309
+ font-weight: 700;
310
+ margin: 14px 0 6px;
311
+ }
312
+
313
+ .sem-empty-state-copy,
314
+ .sem-loading-state-copy {
315
+ font-size: 13px;
316
+ line-height: 1.6;
317
+ max-width: 42ch;
318
+ }
319
+
320
+ .sem-list {
321
+ display: flex;
322
+ flex-direction: column;
323
+ gap: 10px;
324
+ }
325
+
326
+ .sem-list-item {
327
+ width: 100%;
328
+ text-align: left;
329
+ padding: 14px;
330
+ border-radius: 16px;
331
+ border: 1px solid rgba(255, 138, 153, 0.08);
332
+ background: rgba(255, 255, 255, 0.025);
333
+ color: var(--text-1);
334
+ transition: transform 180ms ease, border-color 180ms ease, background 180ms ease;
335
+ cursor: pointer;
336
+ }
337
+
338
+ .sem-list-item:hover {
339
+ transform: translateY(-1px);
340
+ border-color: rgba(255, 138, 153, 0.18);
341
+ background: rgba(255, 107, 129, 0.08);
342
+ }
343
+
344
+ .sem-list-item[data-active="true"] {
345
+ border-color: rgba(255, 138, 153, 0.22);
346
+ background: linear-gradient(180deg, rgba(53, 130, 245, 0.18), rgba(25, 88, 185, 0.1));
347
+ }
348
+
349
+ .sem-table {
350
+ width: 100%;
351
+ border-collapse: collapse;
352
+ color: var(--text-1);
353
+ }
354
+
355
+ .sem-table th {
356
+ text-align: left;
357
+ color: var(--text-2);
358
+ font-size: 12px;
359
+ font-weight: 700;
360
+ padding: 10px 12px;
361
+ border-bottom: 1px solid rgba(255,255,255,0.08);
362
+ }
363
+
364
+ .sem-table td {
365
+ padding: 12px;
366
+ border-bottom: 1px solid rgba(255,255,255,0.05);
367
+ font-size: 13px;
368
+ }
369
+
370
+ @media (max-width: 1180px) {
371
+ .sem-grid-two,
372
+ .sem-grid-split {
373
+ grid-template-columns: 1fr;
374
+ }
375
+
376
+ .sem-workspace-hero {
377
+ flex-direction: column;
378
+ align-items: stretch;
379
+ }
380
+
381
+ .sem-workspace-actions {
382
+ justify-content: flex-start;
383
+ }
384
+ }
385
+
386
+ /* ── Alpha Semantic Hub: futuristic HUD layer ── */
387
+ .sem-workspace-frame {
388
+ background-image:
389
+ linear-gradient(rgba(255, 45, 75, 0.028) 1px, transparent 1px),
390
+ linear-gradient(90deg, rgba(255, 45, 75, 0.028) 1px, transparent 1px),
391
+ radial-gradient(circle at top, rgba(255, 45, 75, 0.1), transparent 24%),
392
+ linear-gradient(180deg, rgba(10, 5, 8, 0.94), rgba(6, 3, 5, 0.98));
393
+ background-size: 44px 44px, 44px 44px, 100% 100%, 100% 100%;
394
+ }
395
+ .sem-section-title {
396
+ text-shadow: 0 0 22px rgba(255, 45, 75, 0.35);
397
+ letter-spacing: -0.03em;
398
+ }
399
+ .sem-button {
400
+ border-radius: 10px;
401
+ text-transform: uppercase;
402
+ letter-spacing: 0.06em;
403
+ font-size: 12px;
404
+ box-shadow: 0 0 18px rgba(255, 45, 75, 0.18), inset 0 1px 0 rgba(255,255,255,0.05);
405
+ }
406
+ .sem-button:hover {
407
+ box-shadow: 0 0 26px rgba(255, 45, 75, 0.4), inset 0 1px 0 rgba(255,255,255,0.05);
408
+ }
409
+ .sem-chip {
410
+ border-radius: 6px;
411
+ text-transform: uppercase;
412
+ letter-spacing: 0.07em;
413
+ font-size: 10.5px;
414
+ }
@@ -0,0 +1,170 @@
1
+ import type { CSSProperties, ReactNode } from "react";
2
+
3
+ type SurfaceTone = "default" | "subtle" | "accent";
4
+ type SurfacePadding = "default" | "tight" | "none";
5
+ type ChipTone = "default" | "warm" | "success";
6
+
7
+ function cx(...parts: Array<string | false | null | undefined>) {
8
+ return parts.filter(Boolean).join(" ");
9
+ }
10
+
11
+ export function WorkspaceFrame({
12
+ kicker,
13
+ title,
14
+ subtitle,
15
+ actions,
16
+ children,
17
+ }: {
18
+ kicker?: string;
19
+ title: string;
20
+ subtitle?: string;
21
+ actions?: ReactNode;
22
+ children: ReactNode;
23
+ }) {
24
+ return (
25
+ <div className="sem-workspace-frame">
26
+ <header className="sem-workspace-hero">
27
+ <div>
28
+ {kicker ? <div className="sem-workspace-kicker">{kicker}</div> : null}
29
+ <h2 className="sem-workspace-title">{title}</h2>
30
+ {subtitle ? <p className="sem-workspace-subtitle">{subtitle}</p> : null}
31
+ </div>
32
+ {actions ? <div className="sem-workspace-actions">{actions}</div> : null}
33
+ </header>
34
+ {children}
35
+ </div>
36
+ );
37
+ }
38
+
39
+ export function SurfaceCard({
40
+ children,
41
+ tone = "default",
42
+ padding = "default",
43
+ className,
44
+ style,
45
+ }: {
46
+ children: ReactNode;
47
+ tone?: SurfaceTone;
48
+ padding?: SurfacePadding;
49
+ className?: string;
50
+ style?: CSSProperties;
51
+ }) {
52
+ return (
53
+ <div className={cx("sem-surface", tone !== "default" && `sem-surface--${tone}`, className)} style={style}>
54
+ {padding === "none" ? children : <div className={cx("sem-surface-body", padding === "tight" && "sem-surface-body--tight")}>{children}</div>}
55
+ </div>
56
+ );
57
+ }
58
+
59
+ export function SectionHeader({
60
+ eyebrow,
61
+ title,
62
+ description,
63
+ actions,
64
+ }: {
65
+ eyebrow?: string;
66
+ title: string;
67
+ description?: string;
68
+ actions?: ReactNode;
69
+ }) {
70
+ return (
71
+ <div className="sem-section-header">
72
+ <div>
73
+ {eyebrow ? <div className="sem-section-eyebrow">{eyebrow}</div> : null}
74
+ <h3 className="sem-section-title">{title}</h3>
75
+ {description ? <p className="sem-section-copy">{description}</p> : null}
76
+ </div>
77
+ {actions ? <div className="sem-command-group">{actions}</div> : null}
78
+ </div>
79
+ );
80
+ }
81
+
82
+ export function MetricChip({
83
+ children,
84
+ tone = "default",
85
+ }: {
86
+ children: ReactNode;
87
+ tone?: ChipTone;
88
+ }) {
89
+ return <span className={cx("sem-chip", tone !== "default" && `sem-chip--${tone}`)}>{children}</span>;
90
+ }
91
+
92
+ export function CommandBar({
93
+ left,
94
+ right,
95
+ }: {
96
+ left?: ReactNode;
97
+ right?: ReactNode;
98
+ }) {
99
+ return (
100
+ <div className="sem-command-bar">
101
+ <div className="sem-command-group">{left}</div>
102
+ <div className="sem-command-group">{right}</div>
103
+ </div>
104
+ );
105
+ }
106
+
107
+ export function InspectorPanel({
108
+ children,
109
+ open = true,
110
+ className,
111
+ }: {
112
+ children: ReactNode;
113
+ open?: boolean;
114
+ className?: string;
115
+ }) {
116
+ return (
117
+ <SurfaceCard className={cx("sem-inspector", className)} padding="none" style={{ display: open ? "block" : "none" }}>
118
+ {children}
119
+ </SurfaceCard>
120
+ );
121
+ }
122
+
123
+ export function EmptyState({
124
+ title,
125
+ description,
126
+ icon,
127
+ }: {
128
+ title: string;
129
+ description: string;
130
+ icon?: ReactNode;
131
+ }) {
132
+ return (
133
+ <div className="sem-empty-state">
134
+ {icon}
135
+ <div className="sem-empty-state-title">{title}</div>
136
+ <div className="sem-empty-state-copy">{description}</div>
137
+ </div>
138
+ );
139
+ }
140
+
141
+ export function LoadingState({
142
+ title,
143
+ description,
144
+ }: {
145
+ title: string;
146
+ description: string;
147
+ }) {
148
+ return (
149
+ <div className="sem-loading-state">
150
+ <div className="animate-spin" style={{
151
+ width: 24,
152
+ height: 24,
153
+ borderRadius: "999px",
154
+ border: "2px solid rgba(255, 107, 129, 0.18)",
155
+ borderTopColor: "rgba(255, 154, 171, 0.92)",
156
+ marginBottom: 12,
157
+ }} />
158
+ <div className="sem-loading-state-title">{title}</div>
159
+ <div className="sem-loading-state-copy">{description}</div>
160
+ </div>
161
+ );
162
+ }
163
+
164
+ export function SegmentedControl({
165
+ children,
166
+ }: {
167
+ children: ReactNode;
168
+ }) {
169
+ return <div className="sem-segmented">{children}</div>;
170
+ }