@ibgib/space-gib 0.0.33 → 0.0.35

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 (118) hide show
  1. package/dist/client/bootstrap.mjs +24 -51
  2. package/dist/client/chunk-FIAGRVBY.mjs +10933 -0
  3. package/dist/client/chunk-XLQ3UCQY.mjs +53 -0
  4. package/dist/client/css/activity-bar.css +435 -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 +1017 -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 +208 -31
  15. package/dist/client/index.mjs +22 -45
  16. package/dist/client/privacy.html +22 -22
  17. package/dist/client/script.mjs +1 -1
  18. package/dist/client/style.css +11 -1056
  19. package/dist/respec-gib.node.mjs +5 -0
  20. package/dist/server/server.mjs +6880 -3110
  21. package/package.json +6 -6
  22. package/src/client/AUTO-GENERATED-version.mts +1 -1
  23. package/src/client/cosmos/seed-cosmos-workspace.mts +83 -0
  24. package/src/client/css/activity-bar.css +435 -0
  25. package/src/client/css/base.css +167 -0
  26. package/src/client/css/components.css +218 -0
  27. package/src/client/css/cosmic.css +557 -0
  28. package/src/client/css/dev-tools.css +163 -0
  29. package/src/client/css/landing.css +184 -0
  30. package/src/client/css/layout.css +1017 -0
  31. package/src/client/css/onboarding.css +181 -0
  32. package/src/client/css/repos.css +740 -0
  33. package/src/client/css/variables.css +64 -0
  34. package/src/client/dev-tools/vcs-workspace.mts +7 -7
  35. package/src/client/index.html +208 -31
  36. package/src/client/privacy.html +22 -22
  37. package/src/client/style.css +11 -1056
  38. package/src/client/ui/component/changes/changes.css +413 -0
  39. package/src/client/ui/component/changes/changes.html +37 -0
  40. package/src/client/ui/component/changes/changes.mts +766 -0
  41. package/src/client/ui/component/changes/index.mts +9 -0
  42. package/src/client/ui/component/chat-view/IMPLEMENTATION.md +48 -0
  43. package/src/client/ui/component/chat-view/chat-view.css +381 -0
  44. package/src/client/ui/component/chat-view/chat-view.html +52 -0
  45. package/src/client/ui/component/chat-view/chat-view.mts +264 -0
  46. package/src/client/ui/component/chat-view/index.mts +9 -0
  47. package/src/client/ui/component/clone/IMPLEMENTATION.md +68 -0
  48. package/src/client/ui/component/clone/clone-constants.mts +16 -0
  49. package/src/client/ui/component/clone/clone-types.mts +60 -0
  50. package/src/client/ui/component/clone/clone.css +383 -0
  51. package/src/client/ui/component/clone/clone.html +89 -0
  52. package/src/client/ui/component/clone/clone.mts +648 -0
  53. package/src/client/ui/component/clone/index.mts +11 -0
  54. package/src/client/ui/component/code-editor/IMPLEMENTATION.md +89 -0
  55. package/src/client/ui/component/code-editor/code-editor.css +357 -0
  56. package/src/client/ui/component/code-editor/code-editor.html +67 -0
  57. package/src/client/ui/component/code-editor/code-editor.mts +643 -0
  58. package/src/client/ui/component/code-editor/index.mts +9 -0
  59. package/src/client/ui/component/cosmos-navigator/IMPLEMENTATION.md +31 -0
  60. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.css +864 -0
  61. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.html +92 -0
  62. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.mts +1317 -0
  63. package/src/client/ui/component/cosmos-navigator/index.mts +18 -0
  64. package/src/client/ui/component/file-explorer/IMPLEMENTATION.md +42 -0
  65. package/src/client/ui/component/file-explorer/file-explorer.css +720 -0
  66. package/src/client/ui/component/file-explorer/file-explorer.html +55 -0
  67. package/src/client/ui/component/file-explorer/file-explorer.mts +1412 -0
  68. package/src/client/ui/component/file-explorer/index.mts +9 -0
  69. package/src/client/ui/component/nested-chat/IMPLEMENTATION.md +18 -0
  70. package/src/client/ui/component/nested-chat/chat/IMPLEMENTATION.md +14 -0
  71. package/src/client/ui/component/nested-chat/chat/chat-constants.mts +14 -0
  72. package/src/client/ui/component/nested-chat/chat/chat-helpers.mts +66 -0
  73. package/src/client/ui/component/nested-chat/chat/chat.css +654 -0
  74. package/src/client/ui/component/nested-chat/chat/chat.html +90 -0
  75. package/src/client/ui/component/nested-chat/chat/chat.mts +561 -0
  76. package/src/client/ui/component/nested-chat/chat/index.mts +7 -0
  77. package/src/client/ui/component/nested-chat/index.mts +14 -0
  78. package/src/client/ui/component/nested-chat/nested-chat-constants.mts +12 -0
  79. package/src/client/ui/component/nested-chat/nested-chat-types.mts +53 -0
  80. package/src/client/ui/component/nested-chat/nested-chat.css +142 -0
  81. package/src/client/ui/component/nested-chat/nested-chat.html +11 -0
  82. package/src/client/ui/component/nested-chat/nested-chat.mts +395 -0
  83. package/src/client/ui/component/notes-explorer/index.mts +9 -0
  84. package/src/client/ui/component/notes-explorer/notes-explorer.css +313 -0
  85. package/src/client/ui/component/notes-explorer/notes-explorer.html +136 -0
  86. package/src/client/ui/component/notes-explorer/notes-explorer.mts +240 -0
  87. package/src/client/ui/component/notes-inspector/index.mts +9 -0
  88. package/src/client/ui/component/notes-inspector/notes-inspector.css +244 -0
  89. package/src/client/ui/component/notes-inspector/notes-inspector.html +97 -0
  90. package/src/client/ui/component/notes-inspector/notes-inspector.mts +152 -0
  91. package/src/client/ui/component/pitch/IMPLEMENTATION.md +48 -0
  92. package/src/client/ui/component/pitch/index.mts +9 -0
  93. package/src/client/ui/component/pitch/pitch.css +295 -0
  94. package/src/client/ui/component/pitch/pitch.html +97 -0
  95. package/src/client/ui/component/pitch/pitch.mts +135 -0
  96. package/src/client/ui/component/timeline/IMPLEMENTATION.md +33 -0
  97. package/src/client/ui/component/timeline/index.mts +9 -0
  98. package/src/client/ui/component/timeline/timeline.css +279 -0
  99. package/src/client/ui/component/timeline/timeline.html +23 -0
  100. package/src/client/ui/component/timeline/timeline.mts +261 -0
  101. package/src/client/ui/component/timeline-item-details/IMPLEMENTATION.md +28 -0
  102. package/src/client/ui/component/timeline-item-details/index.mts +9 -0
  103. package/src/client/ui/component/timeline-item-details/timeline-item-details.css +286 -0
  104. package/src/client/ui/component/timeline-item-details/timeline-item-details.html +64 -0
  105. package/src/client/ui/component/timeline-item-details/timeline-item-details.mts +194 -0
  106. package/src/client/ui/router/index.mts +3 -0
  107. package/src/client/ui/router/space-gib-router-helpers.mts +72 -0
  108. package/src/client/ui/router/space-gib-router-helpers.respec.mts +529 -0
  109. package/src/client/ui/router/space-gib-router-service.mts +63 -0
  110. package/src/client/ui/router/space-gib-router-types.mts +49 -0
  111. package/src/client/ui/shell/cosmic-big-bang.mts +853 -0
  112. package/src/client/ui/shell/space-gib-shell-constants.mts +7 -0
  113. package/src/client/ui/shell/space-gib-shell-service.mts +2297 -32
  114. package/src/server/server.mts +20 -1
  115. package/tsconfig.test.json +5 -1
  116. package/dist/client/chunk-CRJV762I.mjs +0 -3102
  117. package/dist/client/chunk-LXRCF5OS.mjs +0 -25
  118. 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.35",
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.89",
16
+ "@ibgib/helper-gib": "^0.0.41",
17
+ "@ibgib/ts-gib": "^0.5.38",
18
+ "@ibgib/web-gib": "^0.0.75",
19
+ "@ibgib/node-gib": "^0.0.36"
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.35';
@@ -0,0 +1,83 @@
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, pre-registered with default Code & Notes galaxies.
6
+ */
7
+
8
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
9
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
10
+ import { createInMemoryTempMetaspaceAndSpace } from '@ibgib/core-gib/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
11
+ import { createCosmosIbGib, addGalaxyToCosmos } from '@ibgib/core-gib/dist/cosmology/cosmos/cosmos-helpers.mjs';
12
+ import { createGalaxyIbGib } from '@ibgib/core-gib/dist/cosmology/galaxy/galaxy-helpers.mjs';
13
+ import { GalaxyPresetType } from '@ibgib/core-gib/dist/cosmology/galaxy/galaxy-configs.mjs';
14
+ import { getSpaceQualifiedIbGibAddr } from '@ibgib/core-gib/dist/common/other/ibgib-helper.mjs';
15
+ import { getSpaceIdFromIb } from '@ibgib/core-gib/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs';
16
+ import { Metaspace_Innerspace } from '@ibgib/core-gib/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
17
+ import { IbGibSpaceAny } from '@ibgib/core-gib/dist/witness/space/space-base-v1.mjs';
18
+
19
+ import { CosmosInfo } from '../ui/component/cosmos-navigator/cosmos-navigator.mjs';
20
+ import { getSpaceGibRouterSvc } from '../ui/router/index.mjs';
21
+
22
+ const lc = `[seed-cosmos-workspace]`;
23
+
24
+ let prewarmedMetaspacePromise: Promise<{ metaspace: Metaspace_Innerspace; space: IbGibSpaceAny }> | undefined;
25
+ let cachedSeededCosmos: CosmosInfo | undefined;
26
+
27
+ /**
28
+ * Pre-warms the in-memory temporary metaspace in the background during cold landing
29
+ * so it is immediately warm and available upon Big Bang initiation.
30
+ */
31
+ export function prewarmPlaygroundMetaspace(): Promise<{ metaspace: Metaspace_Innerspace; space: IbGibSpaceAny }> {
32
+ if (!prewarmedMetaspacePromise) {
33
+ console.log(`${lc} Pre-warming in-memory temporary metaspace in background...`);
34
+ prewarmedMetaspacePromise = createInMemoryTempMetaspaceAndSpace();
35
+ }
36
+ return prewarmedMetaspacePromise;
37
+ }
38
+
39
+ export function getPlaygroundMetaspaceAndSpace(): Promise<{ metaspace: Metaspace_Innerspace; space: IbGibSpaceAny }> {
40
+ return prewarmPlaygroundMetaspace();
41
+ }
42
+
43
+ /**
44
+ * Seeds the initial @playground cosmos ('welcome-cosmos') with pre-registered
45
+ * Code ('code-1') and Notes ('notes-1') member galaxies in the manifest.
46
+ */
47
+ export async function seedInMemoryCosmosWorkspace(): Promise<CosmosInfo> {
48
+ if (cachedSeededCosmos) {
49
+ return cachedSeededCosmos;
50
+ }
51
+
52
+ try {
53
+ console.log(`${lc} Initializing in-memory @playground cosmos 'welcome-cosmos'...`);
54
+ const { metaspace, space } = await (prewarmedMetaspacePromise || prewarmPlaygroundMetaspace());
55
+
56
+ // Create the first-class pristine CosmosIbGib with zero initial galaxies
57
+ const cosmosName = 'welcome-cosmos';
58
+ const cosmosIbGib = await createCosmosIbGib({
59
+ cosmosName,
60
+ description: 'In-Memory Playground Cosmos',
61
+ space,
62
+ metaspace,
63
+ });
64
+
65
+ const ibGibAddr = getIbGibAddr({ ibGib: cosmosIbGib });
66
+ console.log(`${lc} Materialized pristine CosmosIbGib for ${cosmosName}: ${cosmosIbGib.ib} (addr: ${ibGibAddr}, 0 initial galaxies)`);
67
+ getSpaceGibRouterSvc().setCosmosManifest(cosmosName, cosmosIbGib);
68
+
69
+ cachedSeededCosmos = {
70
+ id: cosmosName,
71
+ name: cosmosName,
72
+ ibGibAddr,
73
+ isTemporary: true,
74
+ spaces: [],
75
+ createdAt: Date.now(),
76
+ };
77
+
78
+ return cachedSeededCosmos;
79
+ } catch (err) {
80
+ console.error(`${lc} Failed to seed in-memory cosmos: ${extractErrorMsg(err)}`);
81
+ throw err;
82
+ }
83
+ }
@@ -0,0 +1,435 @@
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: none;
294
+ flex-direction: column;
295
+ height: 100%;
296
+ flex: 1;
297
+ min-height: 0;
298
+ overflow: hidden;
299
+ box-sizing: border-box;
300
+ }
301
+
302
+ /* Force flex column whenever the side-view is visible, overriding any inline display: block */
303
+ .space-side-view:not([style*="display: none"]):not([style*="display:none"]),
304
+ .space-side-view.active {
305
+ display: flex !important;
306
+ flex-direction: column !important;
307
+ }
308
+
309
+ .space-side-view[style*="display: none"],
310
+ .space-side-view[style*="display:none"] {
311
+ display: none !important;
312
+ }
313
+
314
+ .side-view-header {
315
+ display: flex;
316
+ align-items: center;
317
+ justify-content: space-between;
318
+ padding: 0.35rem 0.5rem 0.4rem;
319
+ border-bottom: 1px solid var(--clr-border);
320
+ margin-bottom: 0.35rem;
321
+ flex: 0 0 auto !important;
322
+ flex-shrink: 0 !important;
323
+ }
324
+
325
+ .side-view-title {
326
+ font-size: 0.78rem;
327
+ font-weight: 700;
328
+ text-transform: uppercase;
329
+ letter-spacing: 0.06em;
330
+ color: var(--clr-text-secondary);
331
+ display: flex;
332
+ align-items: center;
333
+ gap: 0.45rem;
334
+ }
335
+
336
+ .side-icon {
337
+ font-family: var(--font-mono);
338
+ color: var(--clr-accent);
339
+ }
340
+
341
+ .side-view-actions {
342
+ display: flex;
343
+ gap: 0.25rem;
344
+ }
345
+
346
+ .side-icon-btn {
347
+ background: rgba(255, 255, 255, 0.04);
348
+ border: 1px solid var(--clr-border);
349
+ color: var(--clr-text-secondary);
350
+ width: 24px;
351
+ height: 24px;
352
+ border-radius: 4px;
353
+ font-size: 0.8rem;
354
+ display: flex;
355
+ align-items: center;
356
+ justify-content: center;
357
+ cursor: pointer;
358
+ transition: all var(--t-fast);
359
+ }
360
+
361
+ .side-icon-btn:hover {
362
+ color: var(--clr-accent);
363
+ border-color: var(--clr-border-hover);
364
+ background: rgba(255, 255, 255, 0.08);
365
+ }
366
+
367
+ .empty-spaces-box {
368
+ display: flex;
369
+ flex-direction: column;
370
+ align-items: center;
371
+ text-align: center;
372
+ padding: 2.5rem 0.75rem;
373
+ background: rgba(255, 255, 255, 0.02);
374
+ border: 1px dashed var(--clr-border);
375
+ border-radius: var(--radius-md);
376
+ margin-top: 0.5rem;
377
+ }
378
+
379
+ .empty-icon {
380
+ font-size: 2.4rem;
381
+ margin-bottom: 0.6rem;
382
+ opacity: 0.75;
383
+ }
384
+
385
+ .empty-title {
386
+ font-size: 0.95rem;
387
+ font-weight: 600;
388
+ color: var(--clr-text-primary);
389
+ margin-bottom: 0.4rem;
390
+ }
391
+
392
+ .empty-desc {
393
+ font-size: 0.8rem;
394
+ color: var(--clr-text-secondary);
395
+ line-height: 1.5;
396
+ margin-bottom: 1.25rem;
397
+ }
398
+
399
+ .btn-empty-cta {
400
+ background: var(--clr-accent);
401
+ border: none;
402
+ color: var(--clr-bg-deep);
403
+ font-weight: 600;
404
+ font-size: 0.8rem;
405
+ padding: 0.45rem 1rem;
406
+ border-radius: var(--radius-sm);
407
+ cursor: pointer;
408
+ box-shadow: 0 0 16px var(--clr-accent-glow);
409
+ transition: all var(--t-fast);
410
+ }
411
+
412
+ .btn-empty-cta:hover {
413
+ background: #9fffa5;
414
+ transform: translateY(-1px);
415
+ }
416
+
417
+ /* ── Docking Pulse for newly arrived space buttons ── */
418
+ .space-btn-docked-pulse {
419
+ animation: space-dock-pulse 1.8s cubic-bezier(0.16, 1, 0.3, 1);
420
+ }
421
+
422
+ @keyframes space-dock-pulse {
423
+ 0% {
424
+ transform: scale(0.85);
425
+ box-shadow: 0 0 24px rgba(56, 189, 248, 0.9), inset 0 0 12px rgba(56, 189, 248, 0.6);
426
+ }
427
+ 30% {
428
+ transform: scale(1.18);
429
+ box-shadow: 0 0 35px rgba(56, 189, 248, 0.95), inset 0 0 18px rgba(56, 189, 248, 0.7);
430
+ }
431
+ 100% {
432
+ transform: scale(1);
433
+ box-shadow: none;
434
+ }
435
+ }
@@ -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
+ }