@ibgib/space-gib 0.0.33 → 0.0.34

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 (112) hide show
  1. package/dist/client/bootstrap.mjs +24 -51
  2. package/dist/client/chunk-25PXC4HP.mjs +9914 -0
  3. package/dist/client/chunk-RXWLL2AI.mjs +30 -0
  4. package/dist/client/css/activity-bar.css +417 -0
  5. package/dist/client/css/base.css +167 -0
  6. package/dist/client/css/components.css +218 -0
  7. package/dist/client/css/cosmic.css +557 -0
  8. package/dist/client/css/dev-tools.css +163 -0
  9. package/dist/client/css/landing.css +184 -0
  10. package/dist/client/css/layout.css +896 -0
  11. package/dist/client/css/onboarding.css +181 -0
  12. package/dist/client/css/repos.css +740 -0
  13. package/dist/client/css/variables.css +64 -0
  14. package/dist/client/index.html +202 -31
  15. package/dist/client/index.mjs +32 -32
  16. package/dist/client/script.mjs +1 -1
  17. package/dist/client/style.css +11 -1056
  18. package/dist/respec-gib.node.mjs +5 -0
  19. package/dist/server/server.mjs +6879 -3109
  20. package/package.json +6 -6
  21. package/src/client/AUTO-GENERATED-version.mts +1 -1
  22. package/src/client/cosmos/seed-cosmos-workspace.mts +69 -0
  23. package/src/client/css/activity-bar.css +417 -0
  24. package/src/client/css/base.css +167 -0
  25. package/src/client/css/components.css +218 -0
  26. package/src/client/css/cosmic.css +557 -0
  27. package/src/client/css/dev-tools.css +163 -0
  28. package/src/client/css/landing.css +184 -0
  29. package/src/client/css/layout.css +896 -0
  30. package/src/client/css/onboarding.css +181 -0
  31. package/src/client/css/repos.css +740 -0
  32. package/src/client/css/variables.css +64 -0
  33. package/src/client/dev-tools/vcs-workspace.mts +3 -3
  34. package/src/client/index.html +202 -31
  35. package/src/client/style.css +11 -1056
  36. package/src/client/ui/component/chat-view/IMPLEMENTATION.md +48 -0
  37. package/src/client/ui/component/chat-view/chat-view.css +381 -0
  38. package/src/client/ui/component/chat-view/chat-view.html +104 -0
  39. package/src/client/ui/component/chat-view/chat-view.mts +277 -0
  40. package/src/client/ui/component/chat-view/index.mts +9 -0
  41. package/src/client/ui/component/clone/IMPLEMENTATION.md +68 -0
  42. package/src/client/ui/component/clone/clone-constants.mts +16 -0
  43. package/src/client/ui/component/clone/clone-types.mts +60 -0
  44. package/src/client/ui/component/clone/clone.css +383 -0
  45. package/src/client/ui/component/clone/clone.html +89 -0
  46. package/src/client/ui/component/clone/clone.mts +620 -0
  47. package/src/client/ui/component/clone/index.mts +11 -0
  48. package/src/client/ui/component/code-editor/IMPLEMENTATION.md +89 -0
  49. package/src/client/ui/component/code-editor/code-editor.css +275 -0
  50. package/src/client/ui/component/code-editor/code-editor.html +54 -0
  51. package/src/client/ui/component/code-editor/code-editor.mts +427 -0
  52. package/src/client/ui/component/code-editor/index.mts +9 -0
  53. package/src/client/ui/component/cosmos-navigator/IMPLEMENTATION.md +31 -0
  54. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.css +864 -0
  55. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.html +97 -0
  56. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.mts +1084 -0
  57. package/src/client/ui/component/cosmos-navigator/index.mts +18 -0
  58. package/src/client/ui/component/file-explorer/IMPLEMENTATION.md +42 -0
  59. package/src/client/ui/component/file-explorer/file-explorer.css +256 -0
  60. package/src/client/ui/component/file-explorer/file-explorer.html +75 -0
  61. package/src/client/ui/component/file-explorer/file-explorer.mts +346 -0
  62. package/src/client/ui/component/file-explorer/index.mts +9 -0
  63. package/src/client/ui/component/nested-chat/IMPLEMENTATION.md +18 -0
  64. package/src/client/ui/component/nested-chat/chat/IMPLEMENTATION.md +14 -0
  65. package/src/client/ui/component/nested-chat/chat/chat-constants.mts +14 -0
  66. package/src/client/ui/component/nested-chat/chat/chat-helpers.mts +66 -0
  67. package/src/client/ui/component/nested-chat/chat/chat.css +654 -0
  68. package/src/client/ui/component/nested-chat/chat/chat.html +90 -0
  69. package/src/client/ui/component/nested-chat/chat/chat.mts +646 -0
  70. package/src/client/ui/component/nested-chat/chat/index.mts +7 -0
  71. package/src/client/ui/component/nested-chat/index.mts +14 -0
  72. package/src/client/ui/component/nested-chat/nested-chat-constants.mts +12 -0
  73. package/src/client/ui/component/nested-chat/nested-chat-types.mts +53 -0
  74. package/src/client/ui/component/nested-chat/nested-chat.css +142 -0
  75. package/src/client/ui/component/nested-chat/nested-chat.html +11 -0
  76. package/src/client/ui/component/nested-chat/nested-chat.mts +393 -0
  77. package/src/client/ui/component/notes-explorer/index.mts +9 -0
  78. package/src/client/ui/component/notes-explorer/notes-explorer.css +313 -0
  79. package/src/client/ui/component/notes-explorer/notes-explorer.html +136 -0
  80. package/src/client/ui/component/notes-explorer/notes-explorer.mts +240 -0
  81. package/src/client/ui/component/notes-inspector/index.mts +9 -0
  82. package/src/client/ui/component/notes-inspector/notes-inspector.css +244 -0
  83. package/src/client/ui/component/notes-inspector/notes-inspector.html +97 -0
  84. package/src/client/ui/component/notes-inspector/notes-inspector.mts +152 -0
  85. package/src/client/ui/component/pitch/IMPLEMENTATION.md +48 -0
  86. package/src/client/ui/component/pitch/index.mts +9 -0
  87. package/src/client/ui/component/pitch/pitch.css +295 -0
  88. package/src/client/ui/component/pitch/pitch.html +97 -0
  89. package/src/client/ui/component/pitch/pitch.mts +135 -0
  90. package/src/client/ui/component/timeline/IMPLEMENTATION.md +33 -0
  91. package/src/client/ui/component/timeline/index.mts +9 -0
  92. package/src/client/ui/component/timeline/timeline.css +264 -0
  93. package/src/client/ui/component/timeline/timeline.html +23 -0
  94. package/src/client/ui/component/timeline/timeline.mts +317 -0
  95. package/src/client/ui/component/timeline-item-details/IMPLEMENTATION.md +28 -0
  96. package/src/client/ui/component/timeline-item-details/index.mts +9 -0
  97. package/src/client/ui/component/timeline-item-details/timeline-item-details.css +286 -0
  98. package/src/client/ui/component/timeline-item-details/timeline-item-details.html +64 -0
  99. package/src/client/ui/component/timeline-item-details/timeline-item-details.mts +194 -0
  100. package/src/client/ui/router/index.mts +3 -0
  101. package/src/client/ui/router/space-gib-router-helpers.mts +272 -0
  102. package/src/client/ui/router/space-gib-router-helpers.respec.mts +353 -0
  103. package/src/client/ui/router/space-gib-router-service.mts +186 -0
  104. package/src/client/ui/router/space-gib-router-types.mts +93 -0
  105. package/src/client/ui/shell/cosmic-big-bang.mts +844 -0
  106. package/src/client/ui/shell/space-gib-shell-constants.mts +7 -0
  107. package/src/client/ui/shell/space-gib-shell-service.mts +1728 -31
  108. package/src/server/server.mts +20 -1
  109. package/tsconfig.test.json +5 -1
  110. package/dist/client/chunk-CRJV762I.mjs +0 -3102
  111. package/dist/client/chunk-LXRCF5OS.mjs +0 -25
  112. package/dist/client/chunk-UBDQUZZV.mjs +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/space-gib",
3
- "version": "0.0.33",
3
+ "version": "0.0.34",
4
4
  "type": "module",
5
5
  "description": "ibgib storage and provider service — SaaS at ibgib.space",
6
6
  "scripts": {
@@ -12,11 +12,11 @@
12
12
  "build:test": "tsc -p tsconfig.test.json"
13
13
  },
14
14
  "dependencies": {
15
- "@ibgib/core-gib": "^0.1.87",
16
- "@ibgib/helper-gib": "^0.0.39",
17
- "@ibgib/ts-gib": "^0.5.36",
18
- "@ibgib/web-gib": "^0.0.73",
19
- "@ibgib/node-gib": "^0.0.34"
15
+ "@ibgib/core-gib": "^0.1.88",
16
+ "@ibgib/helper-gib": "^0.0.40",
17
+ "@ibgib/ts-gib": "^0.5.37",
18
+ "@ibgib/web-gib": "^0.0.74",
19
+ "@ibgib/node-gib": "^0.0.35"
20
20
  },
21
21
  "engines": {
22
22
  "node": ">=20.0.0"
@@ -8,4 +8,4 @@
8
8
  /**
9
9
  * Version of space-gib, auto-updated by the build process.
10
10
  */
11
- export const AUTO_GENERATED_VERSION = '0.0.33';
11
+ export const AUTO_GENERATED_VERSION = '0.0.34';
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @module client/cosmos/seed-cosmos-workspace
3
+ *
4
+ * Seeds the in-memory @playground Cosmos ('welcome-cosmos') backed by an
5
+ * in-memory temporary Metaspace.
6
+ */
7
+
8
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
9
+ import { createInMemoryTempMetaspaceAndSpace } from '@ibgib/core-gib/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
10
+ import { createCosmosIbGib } from '@ibgib/core-gib/dist/vcs/cosmos/cosmos-helpers.mjs';
11
+ import { Metaspace_Innerspace } from '@ibgib/core-gib/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
12
+ import { IbGibSpaceAny } from '@ibgib/core-gib/dist/witness/space/space-base-v1.mjs';
13
+
14
+ import { CosmosInfo } from '../ui/component/cosmos-navigator/cosmos-navigator.mjs';
15
+
16
+ const lc = `[seed-cosmos-workspace]`;
17
+
18
+ let prewarmedMetaspacePromise: Promise<{ metaspace: Metaspace_Innerspace; space: IbGibSpaceAny }> | undefined;
19
+ let cachedSeededCosmos: CosmosInfo | undefined;
20
+
21
+ /**
22
+ * Pre-warms the in-memory temporary metaspace in the background during cold landing
23
+ * so it is immediately warm and available upon Big Bang initiation.
24
+ */
25
+ export function prewarmPlaygroundMetaspace(): Promise<{ metaspace: Metaspace_Innerspace; space: IbGibSpaceAny }> {
26
+ if (!prewarmedMetaspacePromise) {
27
+ console.log(`${lc} Pre-warming in-memory temporary metaspace in background...`);
28
+ prewarmedMetaspacePromise = createInMemoryTempMetaspaceAndSpace();
29
+ }
30
+ return prewarmedMetaspacePromise;
31
+ }
32
+
33
+ /**
34
+ * Seeds the initial @playground cosmos ('welcome-cosmos') without auto-generating galaxies.
35
+ */
36
+ export async function seedInMemoryCosmosWorkspace(): Promise<CosmosInfo> {
37
+ if (cachedSeededCosmos) {
38
+ return cachedSeededCosmos;
39
+ }
40
+
41
+ try {
42
+ console.log(`${lc} Initializing in-memory @playground cosmos 'welcome-cosmos'...`);
43
+ const { metaspace, space } = await (prewarmedMetaspacePromise || prewarmPlaygroundMetaspace());
44
+
45
+ // Create the first-class CosmosIbGib
46
+ const cosmosName = 'welcome-cosmos';
47
+ const cosmosIbGib = await createCosmosIbGib({
48
+ cosmosName,
49
+ description: 'In-Memory Playground Cosmos',
50
+ space,
51
+ metaspace,
52
+ });
53
+
54
+ console.log(`${lc} Materialized CosmosIbGib for ${cosmosName}: ${cosmosIbGib.ib}`);
55
+
56
+ cachedSeededCosmos = {
57
+ id: cosmosName,
58
+ name: cosmosName,
59
+ isTemporary: true,
60
+ spaces: [], // No galaxies auto-created yet
61
+ createdAt: Date.now(),
62
+ };
63
+
64
+ return cachedSeededCosmos;
65
+ } catch (err) {
66
+ console.error(`${lc} Failed to seed in-memory cosmos: ${extractErrorMsg(err)}`);
67
+ throw err;
68
+ }
69
+ }
@@ -0,0 +1,417 @@
1
+ /* =========================================================================
2
+ Activity Bar & Multi-Space Navigation (VS Code Pattern)
3
+ ========================================================================= */
4
+
5
+ .activity-bar {
6
+ width: 52px;
7
+ background: #03060c;
8
+ border-right: 1px solid var(--clr-border);
9
+ display: flex;
10
+ flex-direction: column;
11
+ justify-content: space-between;
12
+ align-items: center;
13
+ padding: 0.6rem 0;
14
+ z-index: 25;
15
+ flex-shrink: 0;
16
+ transition: width 0.35s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease;
17
+ }
18
+
19
+ .activity-bar.collapsed {
20
+ width: 0 !important;
21
+ opacity: 0;
22
+ pointer-events: none;
23
+ overflow: hidden;
24
+ border: none;
25
+ padding: 0;
26
+ }
27
+
28
+ .activity-bar.expanded {
29
+ width: 52px !important;
30
+ opacity: 1;
31
+ pointer-events: auto;
32
+ }
33
+
34
+ .activity-bar-top,
35
+ .activity-bar-bottom {
36
+ display: flex;
37
+ flex-direction: column;
38
+ align-items: center;
39
+ gap: 0.5rem;
40
+ width: 100%;
41
+ }
42
+
43
+ .activity-bar-btn {
44
+ width: 42px;
45
+ height: 42px;
46
+ border-radius: var(--radius-sm);
47
+ background: transparent;
48
+ border: none;
49
+ cursor: pointer;
50
+ display: flex;
51
+ flex-direction: column;
52
+ align-items: center;
53
+ justify-content: center;
54
+ color: var(--clr-text-secondary);
55
+ position: relative;
56
+ transition: all var(--t-fast);
57
+ }
58
+
59
+ .activity-bar-btn:hover {
60
+ color: var(--clr-text-primary);
61
+ background: rgba(255, 255, 255, 0.05);
62
+ }
63
+
64
+ .activity-bar-btn.active {
65
+ color: var(--clr-accent);
66
+ background: rgba(120, 248, 126, 0.08);
67
+ }
68
+
69
+ .activity-bar-btn.active::before {
70
+ content: '';
71
+ position: absolute;
72
+ left: 0;
73
+ top: 6px;
74
+ bottom: 6px;
75
+ width: 2.5px;
76
+ border-radius: 0 2px 2px 0;
77
+ background: var(--clr-accent);
78
+ }
79
+
80
+ .activity-icon {
81
+ font-size: 1.15rem;
82
+ line-height: 1;
83
+ }
84
+
85
+ .activity-label {
86
+ font-size: 0.48rem;
87
+ font-weight: 600;
88
+ text-transform: uppercase;
89
+ letter-spacing: 0.04em;
90
+ margin-top: 2px;
91
+ margin-left: 1px;
92
+ }
93
+
94
+ .activity-divider {
95
+ width: 28px;
96
+ height: 1px;
97
+ background: var(--clr-border);
98
+ margin: 0.25rem 0;
99
+ }
100
+
101
+ .activity-spaces-container {
102
+ display: flex;
103
+ flex-direction: column;
104
+ align-items: center;
105
+ gap: 0.5rem;
106
+ width: 100%;
107
+ }
108
+
109
+ .activity-polycosmos-btn {
110
+ color: #fbbf24;
111
+ }
112
+
113
+ .activity-polycosmos-btn:hover {
114
+ color: #fef08a;
115
+ background: rgba(251, 191, 36, 0.1);
116
+ }
117
+
118
+ .activity-polycosmos-btn.active {
119
+ color: #fbbf24;
120
+ background: rgba(251, 191, 36, 0.18);
121
+ }
122
+
123
+ .activity-polycosmos-btn.active::before {
124
+ background: #fbbf24;
125
+ }
126
+
127
+ .activity-cosmos-btn {
128
+ color: #c084fc;
129
+ }
130
+
131
+ .activity-cosmos-btn:hover {
132
+ color: #e9d5ff;
133
+ background: rgba(192, 132, 252, 0.1);
134
+ }
135
+
136
+ .activity-cosmos-btn.active {
137
+ color: #c084fc !important;
138
+ background: rgba(192, 132, 252, 0.18) !important;
139
+ }
140
+
141
+ .activity-cosmos-btn.active::before {
142
+ content: '' !important;
143
+ position: absolute !important;
144
+ left: 0 !important;
145
+ top: 6px !important;
146
+ bottom: 6px !important;
147
+ width: 3px !important;
148
+ border-radius: 0 2px 2px 0 !important;
149
+ background: #c084fc !important;
150
+ box-shadow: 0 0 10px rgba(192, 132, 252, 0.7) !important;
151
+ }
152
+
153
+ .activity-space-btn {
154
+ animation: space-btn-pop 0.35s cubic-bezier(0.16, 1, 0.3, 1);
155
+ }
156
+
157
+ @keyframes space-btn-pop {
158
+ from {
159
+ transform: scale(0.6);
160
+ opacity: 0;
161
+ }
162
+
163
+ to {
164
+ transform: scale(1);
165
+ opacity: 1;
166
+ }
167
+ }
168
+
169
+ /* Cosmos Project Meta Card & Spaces Summary */
170
+ .cosmos-meta-card {
171
+ background: rgba(255, 255, 255, 0.03);
172
+ border: 1px solid var(--clr-border);
173
+ border-radius: var(--radius-md);
174
+ padding: 0.85rem;
175
+ display: flex;
176
+ flex-direction: column;
177
+ gap: 0.5rem;
178
+ margin-bottom: 1.25rem;
179
+ }
180
+
181
+ .cosmos-meta-row {
182
+ display: flex;
183
+ justify-content: space-between;
184
+ align-items: center;
185
+ font-size: 0.8rem;
186
+ }
187
+
188
+ .meta-label {
189
+ color: var(--clr-text-secondary);
190
+ }
191
+
192
+ .meta-val {
193
+ font-family: var(--font-mono);
194
+ color: var(--clr-accent);
195
+ font-weight: 600;
196
+ }
197
+
198
+ .cosmos-spaces-summary {
199
+ display: flex;
200
+ flex-direction: column;
201
+ gap: 0.6rem;
202
+ }
203
+
204
+ .summary-header {
205
+ display: flex;
206
+ justify-content: space-between;
207
+ align-items: center;
208
+ font-size: 0.75rem;
209
+ font-weight: 700;
210
+ text-transform: uppercase;
211
+ letter-spacing: 0.05em;
212
+ color: var(--clr-text-secondary);
213
+ }
214
+
215
+ .summary-counter {
216
+ background: rgba(120, 248, 126, 0.15);
217
+ color: var(--clr-accent);
218
+ padding: 0.1rem 0.45rem;
219
+ border-radius: 999px;
220
+ font-size: 0.75rem;
221
+ font-family: var(--font-mono);
222
+ }
223
+
224
+ .cosmos-spaces-list {
225
+ display: flex;
226
+ flex-direction: column;
227
+ gap: 0.4rem;
228
+ }
229
+
230
+ .empty-list-note {
231
+ font-size: 0.78rem;
232
+ color: var(--clr-text-secondary);
233
+ line-height: 1.4;
234
+ text-align: center;
235
+ padding: 1.5rem 0.5rem;
236
+ border: 1px dashed var(--clr-border);
237
+ border-radius: var(--radius-sm);
238
+ }
239
+
240
+ .cosmos-space-item {
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: space-between;
244
+ padding: 0.5rem 0.65rem;
245
+ background: rgba(255, 255, 255, 0.02);
246
+ border: 1px solid var(--clr-border);
247
+ border-radius: var(--radius-sm);
248
+ font-size: 0.8rem;
249
+ cursor: pointer;
250
+ transition: all var(--t-fast);
251
+ }
252
+
253
+ .cosmos-space-item:hover {
254
+ border-color: var(--clr-accent);
255
+ background: rgba(120, 248, 126, 0.05);
256
+ }
257
+
258
+ .cosmos-space-item.active {
259
+ border-color: var(--clr-accent);
260
+ background: rgba(120, 248, 126, 0.1);
261
+ }
262
+
263
+ .space-item-name {
264
+ display: flex;
265
+ align-items: center;
266
+ gap: 0.5rem;
267
+ color: var(--clr-text-primary);
268
+ font-weight: 500;
269
+ }
270
+
271
+ .space-item-icon {
272
+ font-family: var(--font-mono);
273
+ color: var(--clr-accent);
274
+ }
275
+
276
+ .space-item-type {
277
+ font-size: 0.68rem;
278
+ color: var(--clr-text-secondary);
279
+ font-family: var(--font-mono);
280
+ background: rgba(255, 255, 255, 0.04);
281
+ padding: 0.1rem 0.35rem;
282
+ border-radius: 3px;
283
+ }
284
+
285
+ .badge-text-space {
286
+ color: #d18aff !important;
287
+ background: rgba(180, 100, 255, 0.1) !important;
288
+ border-color: rgba(180, 100, 255, 0.25) !important;
289
+ }
290
+
291
+ /* Left Panel Views (New User POV) */
292
+ .space-side-view {
293
+ display: flex;
294
+ flex-direction: column;
295
+ height: 100%;
296
+ }
297
+
298
+ .side-view-header {
299
+ display: flex;
300
+ align-items: center;
301
+ justify-content: space-between;
302
+ padding: 0.65rem 0.5rem 0.85rem;
303
+ border-bottom: 1px solid var(--clr-border);
304
+ margin-bottom: 1rem;
305
+ }
306
+
307
+ .side-view-title {
308
+ font-size: 0.78rem;
309
+ font-weight: 700;
310
+ text-transform: uppercase;
311
+ letter-spacing: 0.06em;
312
+ color: var(--clr-text-secondary);
313
+ display: flex;
314
+ align-items: center;
315
+ gap: 0.45rem;
316
+ }
317
+
318
+ .side-icon {
319
+ font-family: var(--font-mono);
320
+ color: var(--clr-accent);
321
+ }
322
+
323
+ .side-view-actions {
324
+ display: flex;
325
+ gap: 0.25rem;
326
+ }
327
+
328
+ .side-icon-btn {
329
+ background: rgba(255, 255, 255, 0.04);
330
+ border: 1px solid var(--clr-border);
331
+ color: var(--clr-text-secondary);
332
+ width: 24px;
333
+ height: 24px;
334
+ border-radius: 4px;
335
+ font-size: 0.8rem;
336
+ display: flex;
337
+ align-items: center;
338
+ justify-content: center;
339
+ cursor: pointer;
340
+ transition: all var(--t-fast);
341
+ }
342
+
343
+ .side-icon-btn:hover {
344
+ color: var(--clr-accent);
345
+ border-color: var(--clr-border-hover);
346
+ background: rgba(255, 255, 255, 0.08);
347
+ }
348
+
349
+ .empty-spaces-box {
350
+ display: flex;
351
+ flex-direction: column;
352
+ align-items: center;
353
+ text-align: center;
354
+ padding: 2.5rem 0.75rem;
355
+ background: rgba(255, 255, 255, 0.02);
356
+ border: 1px dashed var(--clr-border);
357
+ border-radius: var(--radius-md);
358
+ margin-top: 0.5rem;
359
+ }
360
+
361
+ .empty-icon {
362
+ font-size: 2.4rem;
363
+ margin-bottom: 0.6rem;
364
+ opacity: 0.75;
365
+ }
366
+
367
+ .empty-title {
368
+ font-size: 0.95rem;
369
+ font-weight: 600;
370
+ color: var(--clr-text-primary);
371
+ margin-bottom: 0.4rem;
372
+ }
373
+
374
+ .empty-desc {
375
+ font-size: 0.8rem;
376
+ color: var(--clr-text-secondary);
377
+ line-height: 1.5;
378
+ margin-bottom: 1.25rem;
379
+ }
380
+
381
+ .btn-empty-cta {
382
+ background: var(--clr-accent);
383
+ border: none;
384
+ color: var(--clr-bg-deep);
385
+ font-weight: 600;
386
+ font-size: 0.8rem;
387
+ padding: 0.45rem 1rem;
388
+ border-radius: var(--radius-sm);
389
+ cursor: pointer;
390
+ box-shadow: 0 0 16px var(--clr-accent-glow);
391
+ transition: all var(--t-fast);
392
+ }
393
+
394
+ .btn-empty-cta:hover {
395
+ background: #9fffa5;
396
+ transform: translateY(-1px);
397
+ }
398
+
399
+ /* ── Docking Pulse for newly arrived space buttons ── */
400
+ .space-btn-docked-pulse {
401
+ animation: space-dock-pulse 1.8s cubic-bezier(0.16, 1, 0.3, 1);
402
+ }
403
+
404
+ @keyframes space-dock-pulse {
405
+ 0% {
406
+ transform: scale(0.85);
407
+ box-shadow: 0 0 24px rgba(56, 189, 248, 0.9), inset 0 0 12px rgba(56, 189, 248, 0.6);
408
+ }
409
+ 30% {
410
+ transform: scale(1.18);
411
+ box-shadow: 0 0 35px rgba(56, 189, 248, 0.95), inset 0 0 18px rgba(56, 189, 248, 0.7);
412
+ }
413
+ 100% {
414
+ transform: scale(1);
415
+ box-shadow: none;
416
+ }
417
+ }
@@ -0,0 +1,167 @@
1
+ /* ── Reset ── */
2
+ *,
3
+ *::before,
4
+ *::after {
5
+ box-sizing: border-box;
6
+ margin: 0;
7
+ padding: 0;
8
+ }
9
+
10
+ html {
11
+ font-size: 16px;
12
+ -webkit-text-size-adjust: 100%;
13
+ height: 100%;
14
+ overflow: hidden;
15
+ }
16
+
17
+ body {
18
+ font-family: var(--font-sans);
19
+ background: var(--clr-bg-deep);
20
+ color: var(--clr-text-primary);
21
+ height: 100dvh;
22
+ overflow: hidden;
23
+ line-height: 1.6;
24
+ }
25
+
26
+ /* ── Global Scrollbar Customization ── */
27
+ /* Custom scrollbar properties for Firefox */
28
+ * {
29
+ scrollbar-width: thin;
30
+ scrollbar-color: var(--clr-accent-dim) transparent;
31
+ }
32
+
33
+ /* Chrome, Safari, Edge, Opera */
34
+ ::-webkit-scrollbar {
35
+ width: 6px;
36
+ height: 6px;
37
+ }
38
+
39
+ ::-webkit-scrollbar-track {
40
+ background: transparent;
41
+ }
42
+
43
+ ::-webkit-scrollbar-thumb {
44
+ background: var(--clr-accent-dim);
45
+ border-radius: var(--radius-sm);
46
+ background-clip: padding-box;
47
+ }
48
+
49
+ ::-webkit-scrollbar-thumb:hover {
50
+ background: var(--clr-accent);
51
+ }
52
+
53
+ /* Subtle animated background gradient */
54
+ body::before {
55
+ content: '';
56
+ position: fixed;
57
+ inset: 0;
58
+ background:
59
+ radial-gradient(ellipse 80% 60% at 10% 5%, rgba(120, 248, 126, 0.06) 0%, transparent 60%),
60
+ radial-gradient(ellipse 60% 50% at 90% 95%, rgba(68, 170, 255, 0.05) 0%, transparent 55%);
61
+ pointer-events: none;
62
+ z-index: 0;
63
+ }
64
+
65
+ /* ── Fullscreen dialog (required by @ibgib/web-gib) ── */
66
+ .fullscreen-dialog {
67
+ border: 1px solid var(--clr-border);
68
+ border-radius: var(--radius-lg);
69
+ background: var(--clr-bg-surface);
70
+ color: var(--clr-text-primary);
71
+ box-shadow: var(--shadow-dialog);
72
+ max-width: min(520px, 92vw);
73
+ width: 100%;
74
+ padding: 0;
75
+ outline: none;
76
+ margin: auto;
77
+ }
78
+
79
+ .fullscreen-dialog::backdrop {
80
+ background: rgba(0, 0, 0, 0.72);
81
+ backdrop-filter: blur(4px);
82
+ }
83
+
84
+ .fullscreen-dialog-content {
85
+ display: flex;
86
+ flex-direction: column;
87
+ }
88
+
89
+ .fullscreen-dialog-header {
90
+ padding: 1.5rem 1.5rem 0.5rem;
91
+ border-bottom: 1px solid var(--clr-border);
92
+ }
93
+
94
+ .fullscreen-dialog-header h2 {
95
+ font-size: 1.1rem;
96
+ font-weight: 600;
97
+ color: var(--clr-accent);
98
+ }
99
+
100
+ .fullscreen-dialog-body {
101
+ padding: 1rem 1.5rem;
102
+ display: flex;
103
+ flex-direction: column;
104
+ gap: 0.75rem;
105
+ }
106
+
107
+ .fullscreen-dialog-message {
108
+ font-size: 0.9375rem;
109
+ color: var(--clr-text-primary);
110
+ white-space: pre-wrap;
111
+ }
112
+
113
+ #fullscreen-dialog-prompt-input {
114
+ background: rgba(255, 255, 255, 0.04);
115
+ border: 1px solid var(--clr-border);
116
+ border-radius: var(--radius-sm);
117
+ padding: 0.6rem 0.75rem;
118
+ color: var(--clr-text-primary);
119
+ font-family: var(--font-sans);
120
+ font-size: 0.9375rem;
121
+ outline: none;
122
+ transition: border-color var(--t-fast), box-shadow var(--t-fast);
123
+ }
124
+
125
+ #fullscreen-dialog-prompt-input:focus {
126
+ border-color: var(--clr-accent);
127
+ box-shadow: 0 0 0 3px var(--clr-accent-glow);
128
+ }
129
+
130
+ #fullscreen-dialog-prompt-input.collapsed {
131
+ display: none;
132
+ }
133
+
134
+ .fullscreen-dialog-footer {
135
+ display: flex;
136
+ justify-content: flex-end;
137
+ gap: 0.5rem;
138
+ padding: 0.75rem 1.5rem 1.25rem;
139
+ }
140
+
141
+ .dialog-button {
142
+ padding: 0.5rem 1.25rem;
143
+ border-radius: var(--radius-sm);
144
+ border: 1px solid var(--clr-border);
145
+ background: transparent;
146
+ color: var(--clr-text-primary);
147
+ font-family: var(--font-sans);
148
+ font-size: 0.875rem;
149
+ cursor: pointer;
150
+ transition: background var(--t-fast), border-color var(--t-fast), color var(--t-fast);
151
+ }
152
+
153
+ .dialog-button:first-child {
154
+ background: var(--clr-accent);
155
+ border-color: var(--clr-accent);
156
+ color: var(--clr-bg-deep);
157
+ font-weight: 600;
158
+ }
159
+
160
+ .dialog-button:first-child:hover {
161
+ background: #9fffa5;
162
+ }
163
+
164
+ .dialog-button:last-child:hover {
165
+ border-color: var(--clr-border-hover);
166
+ background: rgba(255, 255, 255, 0.04);
167
+ }