ltcai 4.3.3 → 4.5.1

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 (138) hide show
  1. package/README.md +53 -20
  2. package/docs/CHANGELOG.md +122 -0
  3. package/docs/V4_4_0_EXTRACTION_REPORT.md +239 -0
  4. package/docs/V4_5_0_GEMMA_RUNTIME_COMPATIBILITY_REPORT.md +49 -0
  5. package/docs/V4_5_0_GRAPH_UX_REPORT.md +34 -0
  6. package/docs/V4_5_0_MODEL_RUNTIME_UX_REPORT.md +40 -0
  7. package/docs/V4_5_0_ONBOARDING_REPORT.md +31 -0
  8. package/docs/V4_5_0_PRODUCT_EXPERIENCE_RECOVERY_REPORT.md +49 -0
  9. package/docs/V4_5_0_VALIDATION_REPORT.md +60 -0
  10. package/docs/V4_5_1_GRAPH_EXPERIENCE_REPORT.md +33 -0
  11. package/docs/V4_5_1_MODEL_EXPERIENCE_REPORT.md +37 -0
  12. package/docs/V4_5_1_NAVIGATION_REPORT.md +37 -0
  13. package/docs/V4_5_1_ONBOARDING_REPORT.md +29 -0
  14. package/docs/V4_5_1_PRODUCT_REIMAGINING_REPORT.md +61 -0
  15. package/docs/V4_5_1_RC_ARTIFACTS.md +44 -0
  16. package/docs/V4_5_1_UX_REPORT.md +45 -0
  17. package/docs/V4_5_1_VALIDATION_REPORT.md +54 -0
  18. package/docs/V4_5_1_VISUAL_DESIGN_REPORT.md +30 -0
  19. package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +16 -16
  20. package/docs/architecture.md +8 -4
  21. package/frontend/src/App.tsx +152 -91
  22. package/frontend/src/api/client.ts +83 -1
  23. package/frontend/src/components/FirstRunGuide.tsx +99 -0
  24. package/frontend/src/components/primitives.tsx +131 -25
  25. package/frontend/src/components/ui/badge.tsx +2 -2
  26. package/frontend/src/components/ui/button.tsx +7 -7
  27. package/frontend/src/components/ui/card.tsx +5 -5
  28. package/frontend/src/components/ui/input.tsx +1 -1
  29. package/frontend/src/components/ui/textarea.tsx +1 -1
  30. package/frontend/src/pages/Act.tsx +58 -28
  31. package/frontend/src/pages/Ask.tsx +51 -19
  32. package/frontend/src/pages/Brain.tsx +60 -42
  33. package/frontend/src/pages/Capture.tsx +24 -24
  34. package/frontend/src/pages/Library.tsx +222 -32
  35. package/frontend/src/pages/System.tsx +56 -34
  36. package/frontend/src/routes.ts +15 -13
  37. package/frontend/src/store/appStore.ts +8 -1
  38. package/frontend/src/styles.css +666 -36
  39. package/lattice_brain/__init__.py +38 -23
  40. package/lattice_brain/_kg_common.py +11 -1
  41. package/lattice_brain/context.py +212 -2
  42. package/lattice_brain/conversations.py +234 -1
  43. package/lattice_brain/discovery.py +11 -1
  44. package/lattice_brain/documents.py +11 -1
  45. package/lattice_brain/graph/__init__.py +28 -0
  46. package/lattice_brain/graph/_kg_common.py +1123 -0
  47. package/lattice_brain/graph/curator.py +473 -0
  48. package/lattice_brain/graph/discovery.py +1455 -0
  49. package/lattice_brain/graph/documents.py +218 -0
  50. package/lattice_brain/graph/identity.py +175 -0
  51. package/lattice_brain/graph/ingest.py +644 -0
  52. package/lattice_brain/graph/network.py +205 -0
  53. package/lattice_brain/graph/projection.py +571 -0
  54. package/lattice_brain/graph/provenance.py +401 -0
  55. package/lattice_brain/graph/retrieval.py +1341 -0
  56. package/lattice_brain/graph/schema.py +640 -0
  57. package/lattice_brain/graph/store.py +237 -0
  58. package/lattice_brain/graph/write_master.py +225 -0
  59. package/lattice_brain/identity.py +11 -13
  60. package/lattice_brain/ingest.py +11 -1
  61. package/lattice_brain/ingestion.py +318 -0
  62. package/lattice_brain/memory.py +100 -1
  63. package/lattice_brain/network.py +11 -1
  64. package/lattice_brain/portability.py +431 -0
  65. package/lattice_brain/projection.py +11 -1
  66. package/lattice_brain/provenance.py +11 -1
  67. package/lattice_brain/retrieval.py +11 -1
  68. package/lattice_brain/runtime/__init__.py +32 -0
  69. package/lattice_brain/runtime/agent_runtime.py +569 -0
  70. package/lattice_brain/runtime/hooks.py +754 -0
  71. package/lattice_brain/runtime/multi_agent.py +795 -0
  72. package/lattice_brain/schema.py +11 -1
  73. package/lattice_brain/store.py +10 -2
  74. package/lattice_brain/workflow.py +461 -0
  75. package/lattice_brain/write_master.py +11 -1
  76. package/latticeai/__init__.py +1 -1
  77. package/latticeai/api/agents.py +2 -2
  78. package/latticeai/api/browser.py +1 -1
  79. package/latticeai/api/chat.py +1 -1
  80. package/latticeai/api/computer_use.py +1 -1
  81. package/latticeai/api/hooks.py +2 -2
  82. package/latticeai/api/mcp.py +1 -1
  83. package/latticeai/api/models.py +107 -18
  84. package/latticeai/api/tools.py +1 -1
  85. package/latticeai/api/workflow_designer.py +2 -2
  86. package/latticeai/app_factory.py +4 -4
  87. package/latticeai/brain/__init__.py +24 -6
  88. package/latticeai/brain/_kg_common.py +11 -1117
  89. package/latticeai/brain/context.py +12 -208
  90. package/latticeai/brain/conversations.py +12 -231
  91. package/latticeai/brain/discovery.py +13 -1451
  92. package/latticeai/brain/documents.py +13 -214
  93. package/latticeai/brain/identity.py +11 -169
  94. package/latticeai/brain/ingest.py +13 -640
  95. package/latticeai/brain/memory.py +12 -97
  96. package/latticeai/brain/network.py +12 -200
  97. package/latticeai/brain/projection.py +13 -567
  98. package/latticeai/brain/provenance.py +13 -397
  99. package/latticeai/brain/retrieval.py +13 -1337
  100. package/latticeai/brain/schema.py +12 -635
  101. package/latticeai/brain/store.py +13 -233
  102. package/latticeai/brain/write_master.py +13 -221
  103. package/latticeai/core/agent.py +1 -1
  104. package/latticeai/core/agent_registry.py +2 -2
  105. package/latticeai/core/builtin_hooks.py +2 -2
  106. package/latticeai/core/graph_curator.py +6 -468
  107. package/latticeai/core/hooks.py +6 -749
  108. package/latticeai/core/marketplace.py +1 -1
  109. package/latticeai/core/model_compat.py +250 -0
  110. package/latticeai/core/multi_agent.py +6 -790
  111. package/latticeai/core/workflow_engine.py +6 -456
  112. package/latticeai/core/workspace_os.py +1 -1
  113. package/latticeai/models/router.py +136 -32
  114. package/latticeai/services/agent_runtime.py +6 -564
  115. package/latticeai/services/ingestion.py +6 -313
  116. package/latticeai/services/kg_portability.py +6 -426
  117. package/latticeai/services/model_catalog.py +2 -2
  118. package/latticeai/services/model_recommendation.py +8 -1
  119. package/latticeai/services/model_runtime.py +18 -3
  120. package/latticeai/services/platform_runtime.py +3 -3
  121. package/latticeai/services/run_executor.py +1 -1
  122. package/latticeai/services/upload_service.py +1 -1
  123. package/p_reinforce.py +1 -1
  124. package/package.json +1 -1
  125. package/scripts/build_frontend_assets.mjs +12 -1
  126. package/scripts/bump_version.py +1 -1
  127. package/scripts/wheel_smoke.py +7 -0
  128. package/src-tauri/Cargo.lock +1 -1
  129. package/src-tauri/Cargo.toml +1 -1
  130. package/src-tauri/tauri.conf.json +1 -1
  131. package/static/app/asset-manifest.json +5 -5
  132. package/static/app/assets/index-3G8qcrIS.js +336 -0
  133. package/static/app/assets/index-3G8qcrIS.js.map +1 -0
  134. package/static/app/assets/index-C0wYZp7k.css +2 -0
  135. package/static/app/index.html +2 -2
  136. package/static/app/assets/index-CHHal8Zl.css +0 -2
  137. package/static/app/assets/index-pdzil9ac.js +0 -333
  138. package/static/app/assets/index-pdzil9ac.js.map +0 -1
@@ -3,46 +3,46 @@
3
3
 
4
4
  :root {
5
5
  color-scheme: dark;
6
- --background: 220 18% 8%;
7
- --foreground: 210 30% 96%;
8
- --card: 220 16% 11%;
9
- --card-foreground: 210 30% 96%;
10
- --muted: 218 13% 18%;
11
- --muted-foreground: 215 14% 66%;
12
- --primary: 176 68% 48%;
13
- --primary-foreground: 212 26% 8%;
14
- --secondary: 221 14% 20%;
15
- --secondary-foreground: 210 30% 96%;
16
- --destructive: 355 78% 58%;
6
+ --background: 28 18% 7%;
7
+ --foreground: 43 24% 94%;
8
+ --card: 30 14% 11%;
9
+ --card-foreground: 43 24% 94%;
10
+ --muted: 31 12% 17%;
11
+ --muted-foreground: 39 10% 66%;
12
+ --primary: 166 68% 52%;
13
+ --primary-foreground: 28 20% 7%;
14
+ --secondary: 258 22% 22%;
15
+ --secondary-foreground: 43 24% 94%;
16
+ --destructive: 356 73% 59%;
17
17
  --destructive-foreground: 0 0% 100%;
18
- --border: 218 13% 23%;
19
- --input: 218 13% 24%;
20
- --ring: 176 68% 48%;
21
- --brain: 176 68% 48%;
22
- --ask: 216 78% 66%;
23
- --capture: 142 58% 56%;
24
- --act: 33 92% 58%;
25
- --library: 262 68% 70%;
26
- --system: 350 72% 68%;
18
+ --border: 34 10% 26%;
19
+ --input: 34 10% 30%;
20
+ --ring: 166 68% 52%;
21
+ --brain: 166 68% 52%;
22
+ --ask: 205 80% 67%;
23
+ --capture: 136 58% 56%;
24
+ --act: 38 91% 60%;
25
+ --library: 278 62% 70%;
26
+ --system: 5 72% 66%;
27
27
  }
28
28
 
29
29
  :root[data-theme="light"] {
30
30
  color-scheme: light;
31
- --background: 210 30% 98%;
32
- --foreground: 222 38% 9%;
33
- --card: 0 0% 100%;
34
- --card-foreground: 222 38% 9%;
35
- --muted: 213 24% 92%;
36
- --muted-foreground: 219 11% 38%;
37
- --primary: 178 72% 32%;
31
+ --background: 42 29% 96%;
32
+ --foreground: 26 18% 11%;
33
+ --card: 40 31% 99%;
34
+ --card-foreground: 26 18% 11%;
35
+ --muted: 42 18% 90%;
36
+ --muted-foreground: 30 10% 38%;
37
+ --primary: 170 70% 30%;
38
38
  --primary-foreground: 0 0% 100%;
39
- --secondary: 211 24% 90%;
40
- --secondary-foreground: 222 38% 9%;
41
- --destructive: 355 72% 48%;
39
+ --secondary: 254 18% 88%;
40
+ --secondary-foreground: 26 18% 11%;
41
+ --destructive: 356 70% 47%;
42
42
  --destructive-foreground: 0 0% 100%;
43
- --border: 214 20% 83%;
44
- --input: 214 20% 78%;
45
- --ring: 178 72% 32%;
43
+ --border: 38 14% 76%;
44
+ --input: 38 14% 70%;
45
+ --ring: 170 70% 30%;
46
46
  }
47
47
 
48
48
  @theme inline {
@@ -67,12 +67,21 @@
67
67
  box-sizing: border-box;
68
68
  }
69
69
 
70
+ html {
71
+ background: hsl(var(--background));
72
+ }
73
+
70
74
  body {
71
75
  min-width: 320px;
72
76
  margin: 0;
73
77
  background: hsl(var(--background));
74
78
  color: hsl(var(--foreground));
75
79
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
80
+ letter-spacing: 0;
81
+ }
82
+
83
+ body::selection {
84
+ background: hsl(var(--primary) / 0.28);
76
85
  }
77
86
 
78
87
  button,
@@ -82,17 +91,567 @@ select {
82
91
  font: inherit;
83
92
  }
84
93
 
94
+ button {
95
+ touch-action: manipulation;
96
+ }
97
+
98
+ .app-backdrop {
99
+ position: relative;
100
+ isolation: isolate;
101
+ overflow-x: hidden;
102
+ background:
103
+ linear-gradient(135deg, hsl(28 18% 7%) 0%, hsl(31 17% 9%) 46%, hsl(258 18% 10%) 100%),
104
+ repeating-linear-gradient(90deg, hsl(var(--border) / 0.16) 0 1px, transparent 1px 56px);
105
+ }
106
+
107
+ :root[data-theme="light"] .app-backdrop {
108
+ background:
109
+ linear-gradient(135deg, hsl(42 29% 96%) 0%, hsl(43 30% 92%) 52%, hsl(254 28% 94%) 100%),
110
+ repeating-linear-gradient(90deg, hsl(var(--border) / 0.24) 0 1px, transparent 1px 56px);
111
+ }
112
+
113
+ .ambient-brain {
114
+ pointer-events: none;
115
+ position: fixed;
116
+ inset: 0;
117
+ z-index: -1;
118
+ overflow: hidden;
119
+ opacity: 0.64;
120
+ }
121
+
122
+ .ambient-brain::before {
123
+ content: "";
124
+ position: absolute;
125
+ inset: 0;
126
+ background-image:
127
+ linear-gradient(hsl(var(--border) / 0.14) 1px, transparent 1px),
128
+ linear-gradient(90deg, hsl(var(--border) / 0.14) 1px, transparent 1px);
129
+ background-size: 64px 64px;
130
+ mask-image: linear-gradient(180deg, black, transparent 72%);
131
+ }
132
+
133
+ .signal-line,
134
+ .signal-tile {
135
+ position: absolute;
136
+ display: block;
137
+ border: 1px solid hsl(var(--border) / 0.5);
138
+ background: hsl(var(--card) / 0.42);
139
+ }
140
+
141
+ .signal-line {
142
+ height: 1px;
143
+ transform-origin: left center;
144
+ }
145
+
146
+ .signal-line-a {
147
+ left: 8%;
148
+ top: 22%;
149
+ width: 42rem;
150
+ transform: rotate(11deg);
151
+ }
152
+
153
+ .signal-line-b {
154
+ right: -8%;
155
+ top: 42%;
156
+ width: 52rem;
157
+ transform: rotate(-15deg);
158
+ }
159
+
160
+ .signal-line-c {
161
+ left: 18%;
162
+ bottom: 18%;
163
+ width: 46rem;
164
+ transform: rotate(-8deg);
165
+ }
166
+
167
+ .signal-tile {
168
+ width: 5.5rem;
169
+ height: 3.25rem;
170
+ border-radius: 8px;
171
+ }
172
+
173
+ .signal-tile-a {
174
+ left: 12%;
175
+ top: 16%;
176
+ border-color: hsl(var(--primary) / 0.45);
177
+ }
178
+
179
+ .signal-tile-b {
180
+ right: 14%;
181
+ top: 34%;
182
+ border-color: hsl(var(--act) / 0.42);
183
+ }
184
+
185
+ .signal-tile-c {
186
+ left: 48%;
187
+ bottom: 12%;
188
+ border-color: hsl(var(--library) / 0.42);
189
+ }
190
+
191
+ .premium-surface {
192
+ border: 1px solid hsl(var(--border) / 0.78);
193
+ background:
194
+ linear-gradient(180deg, hsl(var(--card) / 0.94), hsl(var(--card) / 0.82)),
195
+ linear-gradient(90deg, hsl(var(--primary) / 0.08), transparent 36%, hsl(var(--library) / 0.06));
196
+ box-shadow: 0 18px 52px hsl(25 24% 3% / 0.28);
197
+ }
198
+
199
+ :root[data-theme="light"] .premium-surface {
200
+ box-shadow: 0 18px 48px hsl(32 17% 54% / 0.16);
201
+ }
202
+
203
+ .app-chrome {
204
+ position: sticky;
205
+ top: 0;
206
+ z-index: 40;
207
+ display: grid;
208
+ grid-template-columns: minmax(13rem, 1fr) auto minmax(13rem, 1fr);
209
+ align-items: center;
210
+ gap: 1rem;
211
+ min-height: 5rem;
212
+ padding: 0.85rem 1.15rem;
213
+ border-bottom: 1px solid hsl(var(--border) / 0.72);
214
+ background: hsl(var(--background) / 0.78);
215
+ backdrop-filter: blur(22px);
216
+ }
217
+
218
+ .brand-lockup,
219
+ .chrome-actions,
220
+ .ribbon-meta,
221
+ .arrival-actions,
222
+ .journey-head,
223
+ .command-search {
224
+ display: flex;
225
+ align-items: center;
226
+ }
227
+
228
+ .brand-lockup {
229
+ min-width: 0;
230
+ gap: 0.75rem;
231
+ }
232
+
233
+ .brand-mark,
234
+ .mobile-menu {
235
+ display: grid;
236
+ place-items: center;
237
+ border: 1px solid hsl(var(--border));
238
+ background: hsl(var(--card) / 0.76);
239
+ color: hsl(var(--foreground));
240
+ }
241
+
242
+ .brand-mark {
243
+ width: 2.75rem;
244
+ height: 2.75rem;
245
+ border-radius: 8px;
246
+ color: hsl(var(--primary));
247
+ }
248
+
249
+ .mobile-menu {
250
+ width: 2.5rem;
251
+ height: 2.5rem;
252
+ border-radius: 7px;
253
+ }
254
+
255
+ .brand-name {
256
+ font-size: 1rem;
257
+ font-weight: 780;
258
+ line-height: 1.1;
259
+ }
260
+
261
+ .brand-subtitle {
262
+ margin-top: 0.15rem;
263
+ color: hsl(var(--muted-foreground));
264
+ font-size: 0.72rem;
265
+ font-weight: 650;
266
+ text-transform: uppercase;
267
+ }
268
+
269
+ .primary-dock {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: 0.35rem;
273
+ max-width: 100%;
274
+ padding: 0.3rem;
275
+ border: 1px solid hsl(var(--border) / 0.78);
276
+ border-radius: 8px;
277
+ background: hsl(var(--card) / 0.66);
278
+ }
279
+
280
+ .dock-button {
281
+ display: inline-flex;
282
+ align-items: center;
283
+ justify-content: center;
284
+ gap: 0.45rem;
285
+ min-width: 5.25rem;
286
+ min-height: 2.35rem;
287
+ padding: 0 0.72rem;
288
+ border: 1px solid transparent;
289
+ border-radius: 6px;
290
+ color: hsl(var(--muted-foreground));
291
+ font-size: 0.86rem;
292
+ font-weight: 720;
293
+ transition: background 160ms ease, color 160ms ease, border-color 160ms ease;
294
+ }
295
+
296
+ .dock-button:hover,
297
+ .dock-button.is-active {
298
+ border-color: hsl(var(--border));
299
+ background: hsl(var(--background) / 0.72);
300
+ color: hsl(var(--foreground));
301
+ }
302
+
303
+ .dock-button.is-active svg {
304
+ color: hsl(var(--primary));
305
+ }
306
+
307
+ .chrome-actions {
308
+ justify-content: flex-end;
309
+ gap: 0.5rem;
310
+ }
311
+
312
+ .status-chip,
313
+ .meta-card {
314
+ display: inline-flex;
315
+ align-items: center;
316
+ gap: 0.45rem;
317
+ min-height: 2.5rem;
318
+ max-width: 100%;
319
+ border: 1px solid hsl(var(--border));
320
+ border-radius: 7px;
321
+ background: hsl(var(--card) / 0.7);
322
+ color: hsl(var(--foreground));
323
+ padding: 0 0.8rem;
324
+ font-size: 0.84rem;
325
+ font-weight: 700;
326
+ }
327
+
328
+ .status-light {
329
+ width: 0.55rem;
330
+ height: 0.55rem;
331
+ border-radius: 999px;
332
+ background: hsl(var(--act));
333
+ }
334
+
335
+ .status-light.is-ready {
336
+ background: hsl(var(--primary));
337
+ }
338
+
339
+ .status-light.is-waiting {
340
+ background: hsl(var(--act));
341
+ }
342
+
343
+ .page-shell {
344
+ width: min(100% - 2rem, 1440px);
345
+ margin-inline: auto;
346
+ padding: 1.25rem 0 4rem;
347
+ }
348
+
349
+ .workspace-ribbon {
350
+ display: grid;
351
+ grid-template-columns: minmax(0, 1fr) auto;
352
+ gap: 1rem;
353
+ align-items: end;
354
+ margin-bottom: 1rem;
355
+ padding: 1rem;
356
+ border: 1px solid hsl(var(--border) / 0.62);
357
+ border-radius: 8px;
358
+ background: hsl(var(--background) / 0.54);
359
+ backdrop-filter: blur(18px);
360
+ }
361
+
362
+ .workspace-ribbon h1 {
363
+ margin: 0.35rem 0 0;
364
+ max-width: 52rem;
365
+ font-size: 1.55rem;
366
+ line-height: 1.18;
367
+ font-weight: 780;
368
+ }
369
+
370
+ .ribbon-kicker,
371
+ .page-kicker {
372
+ display: inline-flex;
373
+ align-items: center;
374
+ gap: 0.45rem;
375
+ color: hsl(var(--primary));
376
+ font-size: 0.78rem;
377
+ font-weight: 760;
378
+ text-transform: uppercase;
379
+ }
380
+
381
+ .ribbon-meta {
382
+ justify-content: flex-end;
383
+ flex-wrap: wrap;
384
+ gap: 0.5rem;
385
+ }
386
+
387
+ .mode-switch {
388
+ display: inline-flex;
389
+ gap: 0.25rem;
390
+ min-height: 2.5rem;
391
+ padding: 0.22rem;
392
+ border: 1px solid hsl(var(--border));
393
+ border-radius: 8px;
394
+ background: hsl(var(--card) / 0.72);
395
+ }
396
+
397
+ .mode-switch button {
398
+ min-width: 3.5rem;
399
+ border-radius: 6px;
400
+ padding: 0 0.65rem;
401
+ color: hsl(var(--muted-foreground));
402
+ font-size: 0.8rem;
403
+ font-weight: 760;
404
+ }
405
+
406
+ .mode-switch button.is-active {
407
+ background: hsl(var(--primary));
408
+ color: hsl(var(--primary-foreground));
409
+ }
410
+
411
+ .arrival-panel {
412
+ display: grid;
413
+ grid-template-columns: minmax(0, 0.86fr) minmax(22rem, 1.14fr);
414
+ gap: 1rem;
415
+ margin-bottom: 1.25rem;
416
+ border: 1px solid hsl(var(--border) / 0.78);
417
+ border-radius: 8px;
418
+ background:
419
+ linear-gradient(135deg, hsl(var(--card) / 0.94), hsl(var(--card) / 0.76)),
420
+ linear-gradient(90deg, hsl(var(--primary) / 0.12), transparent 42%, hsl(var(--act) / 0.08));
421
+ box-shadow: 0 18px 52px hsl(25 24% 3% / 0.25);
422
+ }
423
+
424
+ .arrival-copy {
425
+ padding: 1.35rem;
426
+ }
427
+
428
+ .arrival-copy h2 {
429
+ margin: 0.7rem 0 0;
430
+ max-width: 36rem;
431
+ font-size: 2.25rem;
432
+ line-height: 1.02;
433
+ font-weight: 800;
434
+ }
435
+
436
+ .arrival-copy p {
437
+ margin: 0.85rem 0 0;
438
+ max-width: 39rem;
439
+ color: hsl(var(--muted-foreground));
440
+ font-size: 0.98rem;
441
+ line-height: 1.65;
442
+ }
443
+
444
+ .arrival-actions {
445
+ flex-wrap: wrap;
446
+ gap: 0.5rem;
447
+ margin-top: 1.15rem;
448
+ }
449
+
450
+ .journey-panel {
451
+ margin: 0.55rem;
452
+ padding: 0.8rem;
453
+ border: 1px solid hsl(var(--border) / 0.72);
454
+ border-radius: 8px;
455
+ background: hsl(var(--background) / 0.5);
456
+ }
457
+
458
+ .journey-head {
459
+ justify-content: space-between;
460
+ gap: 1rem;
461
+ }
462
+
463
+ .journey-progress {
464
+ height: 0.42rem;
465
+ margin: 0.8rem 0;
466
+ overflow: hidden;
467
+ border-radius: 999px;
468
+ background: hsl(var(--muted));
469
+ }
470
+
471
+ .journey-progress span {
472
+ display: block;
473
+ height: 100%;
474
+ border-radius: inherit;
475
+ background: linear-gradient(90deg, hsl(var(--primary)), hsl(var(--act)));
476
+ }
477
+
478
+ .journey-steps {
479
+ display: grid;
480
+ grid-template-columns: repeat(2, minmax(0, 1fr));
481
+ gap: 0.45rem;
482
+ }
483
+
484
+ .journey-step {
485
+ display: grid;
486
+ grid-template-columns: auto minmax(0, 1fr) auto;
487
+ align-items: center;
488
+ gap: 0.65rem;
489
+ min-height: 4rem;
490
+ border: 1px solid hsl(var(--border) / 0.72);
491
+ border-radius: 7px;
492
+ background: hsl(var(--card) / 0.56);
493
+ padding: 0.65rem;
494
+ text-align: left;
495
+ }
496
+
497
+ .journey-step:hover {
498
+ background: hsl(var(--muted) / 0.62);
499
+ }
500
+
501
+ .journey-icon,
502
+ .command-icon {
503
+ display: grid;
504
+ place-items: center;
505
+ width: 2rem;
506
+ height: 2rem;
507
+ border-radius: 7px;
508
+ background: hsl(var(--primary) / 0.14);
509
+ color: hsl(var(--primary));
510
+ }
511
+
512
+ .command-scrim,
513
+ .mobile-drawer {
514
+ position: fixed;
515
+ inset: 0;
516
+ z-index: 60;
517
+ }
518
+
519
+ .command-scrim {
520
+ padding: 1rem;
521
+ background: hsl(var(--background) / 0.78);
522
+ backdrop-filter: blur(18px);
523
+ }
524
+
525
+ .command-panel {
526
+ width: min(100%, 42rem);
527
+ margin: 4.5rem auto 0;
528
+ overflow: hidden;
529
+ border: 1px solid hsl(var(--border));
530
+ border-radius: 8px;
531
+ background: hsl(var(--card) / 0.96);
532
+ box-shadow: 0 24px 70px hsl(25 24% 3% / 0.34);
533
+ }
534
+
535
+ .command-search {
536
+ gap: 0.5rem;
537
+ border-bottom: 1px solid hsl(var(--border));
538
+ padding: 0.65rem;
539
+ }
540
+
541
+ .command-list {
542
+ max-height: 25rem;
543
+ overflow: auto;
544
+ padding: 0.45rem;
545
+ }
546
+
547
+ .command-row {
548
+ display: grid;
549
+ grid-template-columns: auto minmax(0, 1fr);
550
+ align-items: center;
551
+ gap: 0.75rem;
552
+ width: 100%;
553
+ min-height: 3.5rem;
554
+ border-radius: 7px;
555
+ padding: 0.6rem;
556
+ text-align: left;
557
+ }
558
+
559
+ .command-row:hover {
560
+ background: hsl(var(--muted) / 0.62);
561
+ }
562
+
563
+ .drawer-scrim {
564
+ position: absolute;
565
+ inset: 0;
566
+ background: hsl(var(--background) / 0.72);
567
+ }
568
+
569
+ .drawer-panel {
570
+ position: relative;
571
+ width: min(22rem, calc(100vw - 2rem));
572
+ height: 100%;
573
+ padding: 1rem;
574
+ border-right: 1px solid hsl(var(--border));
575
+ background: hsl(var(--card) / 0.98);
576
+ box-shadow: 18px 0 48px hsl(25 24% 3% / 0.34);
577
+ }
578
+
579
+ .drawer-header {
580
+ display: flex;
581
+ align-items: center;
582
+ justify-content: space-between;
583
+ gap: 1rem;
584
+ margin-bottom: 0.8rem;
585
+ }
586
+
587
+ .drawer-panel .primary-dock {
588
+ display: grid;
589
+ align-items: stretch;
590
+ }
591
+
592
+ .drawer-panel .dock-button {
593
+ justify-content: flex-start;
594
+ min-width: 0;
595
+ }
596
+
597
+ .page-hero {
598
+ position: relative;
599
+ overflow: hidden;
600
+ border: 1px solid hsl(var(--border) / 0.74);
601
+ border-radius: 8px;
602
+ background:
603
+ linear-gradient(120deg, hsl(var(--card) / 0.9), hsl(var(--muted) / 0.44)),
604
+ linear-gradient(90deg, hsl(var(--primary) / 0.1), transparent 56%);
605
+ padding: 1.35rem;
606
+ }
607
+
608
+ .page-title {
609
+ margin-top: 0.58rem;
610
+ max-width: 56rem;
611
+ font-size: 3.1rem;
612
+ line-height: 0.98;
613
+ font-weight: 810;
614
+ letter-spacing: 0;
615
+ }
616
+
617
+ .page-copy {
618
+ margin-top: 0.82rem;
619
+ max-width: 48rem;
620
+ color: hsl(var(--muted-foreground));
621
+ font-size: 0.98rem;
622
+ line-height: 1.62;
623
+ }
624
+
625
+ .control-pill {
626
+ border: 1px solid hsl(var(--border));
627
+ border-radius: 999px;
628
+ background: hsl(var(--card) / 0.72);
629
+ color: hsl(var(--foreground));
630
+ }
631
+
85
632
  .brain-grid {
86
633
  background-image:
87
- linear-gradient(hsl(var(--border) / 0.34) 1px, transparent 1px),
88
- linear-gradient(90deg, hsl(var(--border) / 0.34) 1px, transparent 1px);
89
- background-size: 32px 32px;
634
+ linear-gradient(hsl(var(--border) / 0.22) 1px, transparent 1px),
635
+ linear-gradient(90deg, hsl(var(--border) / 0.22) 1px, transparent 1px);
636
+ background-size: 28px 28px;
90
637
  }
91
638
 
92
639
  .scrollbar-thin {
93
640
  scrollbar-width: thin;
94
641
  }
95
642
 
643
+ .soft-scrollbar::-webkit-scrollbar {
644
+ height: 10px;
645
+ width: 10px;
646
+ }
647
+
648
+ .soft-scrollbar::-webkit-scrollbar-thumb {
649
+ border: 3px solid transparent;
650
+ border-radius: 999px;
651
+ background: hsl(var(--border));
652
+ background-clip: content-box;
653
+ }
654
+
96
655
  .react-flow__node {
97
656
  border: 1px solid hsl(var(--border));
98
657
  border-radius: 8px;
@@ -105,3 +664,74 @@ select {
105
664
  .react-flow__edge-path {
106
665
  stroke: hsl(var(--primary));
107
666
  }
667
+
668
+ @media (max-width: 1100px) {
669
+ .app-chrome {
670
+ grid-template-columns: minmax(0, 1fr) auto;
671
+ }
672
+
673
+ .desktop-dock {
674
+ display: none;
675
+ }
676
+
677
+ .workspace-ribbon,
678
+ .arrival-panel {
679
+ grid-template-columns: 1fr;
680
+ }
681
+
682
+ .ribbon-meta {
683
+ justify-content: flex-start;
684
+ }
685
+ }
686
+
687
+ @media (min-width: 1101px) {
688
+ .mobile-menu {
689
+ display: none;
690
+ }
691
+ }
692
+
693
+ @media (max-width: 760px) {
694
+ .app-chrome {
695
+ min-height: 4.4rem;
696
+ padding: 0.75rem;
697
+ }
698
+
699
+ .brand-copy,
700
+ .status-chip,
701
+ .chrome-actions .mode-switch {
702
+ display: none;
703
+ }
704
+
705
+ .page-shell {
706
+ width: min(100% - 1rem, 1440px);
707
+ padding-top: 0.7rem;
708
+ }
709
+
710
+ .workspace-ribbon {
711
+ align-items: start;
712
+ }
713
+
714
+ .workspace-ribbon h1 {
715
+ font-size: 1.25rem;
716
+ }
717
+
718
+ .ribbon-meta {
719
+ gap: 0.4rem;
720
+ }
721
+
722
+ .arrival-copy h2 {
723
+ font-size: 1.85rem;
724
+ }
725
+
726
+ .journey-steps {
727
+ grid-template-columns: 1fr;
728
+ }
729
+
730
+ .page-title {
731
+ font-size: 2.15rem;
732
+ }
733
+
734
+ .page-hero {
735
+ padding: 1rem;
736
+ }
737
+ }