total-recall-brain 3.13.0 → 3.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +91 -108
  2. package/bin/antigravity.mjs +81 -52
  3. package/bin/total-recall.mjs +32 -57
  4. package/extension/background.js +1 -1
  5. package/extension/options/options.js +9 -3
  6. package/extension/sidepanel/sidepanel.js +0 -2
  7. package/frontend/index.html +4 -3
  8. package/frontend/package.json +1 -0
  9. package/frontend/src/App.tsx +109 -152
  10. package/frontend/src/api.ts +605 -23
  11. package/frontend/src/components/BrainSelector.tsx +211 -199
  12. package/frontend/src/components/DocumentEditorModal.tsx +57 -0
  13. package/frontend/src/components/DocumentTable.tsx +47 -0
  14. package/frontend/src/components/Graph3D.tsx +120 -71
  15. package/frontend/src/components/UsageChart.tsx +3 -3
  16. package/frontend/src/components/brand/BrandMark.tsx +95 -0
  17. package/frontend/src/index.css +286 -86
  18. package/frontend/src/pages/ApiKeysPage.tsx +1878 -215
  19. package/frontend/src/pages/ChatPage.tsx +103 -45
  20. package/frontend/src/pages/DesignDocsPage.tsx +5 -5
  21. package/frontend/src/pages/FilesPage.tsx +10 -6
  22. package/frontend/src/pages/GraphPage.tsx +5 -3
  23. package/frontend/src/pages/HelpPage.tsx +2 -2
  24. package/frontend/src/pages/InboxPage.tsx +82 -0
  25. package/frontend/src/pages/InstructionsPage.tsx +1 -1
  26. package/frontend/src/pages/IntegrationsPage.tsx +21 -10
  27. package/frontend/src/pages/LoginPage.tsx +95 -77
  28. package/frontend/src/pages/MemoryPage.tsx +31 -8
  29. package/frontend/src/pages/OnboardingPage.tsx +690 -0
  30. package/frontend/src/pages/OpenWikiPage.tsx +412 -323
  31. package/frontend/src/pages/SettingsPage.tsx +825 -922
  32. package/frontend/src/pages/SkillsPage.tsx +272 -147
  33. package/frontend/src/pages/UsagePage.tsx +23 -31
  34. package/frontend/src/pages/VaultPage.tsx +223 -0
  35. package/frontend/src/types.ts +13 -0
  36. package/package.json +4 -4
  37. package/scaffold/.agent/skills/total-recall/SKILL.md +43 -4
  38. package/scaffold/.agent/skills/total-recall/modules/README.md +10 -0
  39. package/scaffold/.agent/skills/total-recall/modules/agents/README.md +5 -0
  40. package/scaffold/.agent/skills/total-recall/{skills/tr-cli-agents → modules/agents}/agents.yml +8 -0
  41. package/scaffold/.agent/skills/total-recall/modules/skill-deploy/README.md +9 -0
  42. package/scaffold/.agent/skills/total-recall/openwiki/README.md +10 -0
  43. package/scaffold/.agent/skills/total-recall/openwiki/architecture.md +5 -0
  44. package/scaffold/.agent/skills/total-recall/openwiki/ide.md +10 -0
  45. package/scaffold/.agent/skills/total-recall/openwiki/memory.md +11 -0
  46. package/scaffold/.agent/skills/total-recall/openwiki/secrets.md +7 -0
  47. package/scaffold/.agent/skills/total-recall/openwiki/skills.md +7 -0
  48. package/src/cli/brain.mjs +63 -5
  49. package/src/cli/connect.mjs +11 -19
  50. package/src/cli/daemon.mjs +5 -4
  51. package/src/cli/deploy-ui.mjs +8 -3
  52. package/src/cli/deploy.mjs +84 -27
  53. package/src/cli/ingest/index.mjs +1 -1
  54. package/src/cli/init.mjs +63 -34
  55. package/src/cli/remember.mjs +3 -3
  56. package/src/cli/secret.mjs +812 -0
  57. package/src/cli/setup.mjs +34 -7
  58. package/src/cli/share.mjs +2 -2
  59. package/src/cli/skill.mjs +396 -35
  60. package/src/cli/sync.mjs +4 -4
  61. package/src/cli/task.mjs +287 -0
  62. package/src/core/clarity-rewriter.mjs +5 -5
  63. package/src/core/config.mjs +44 -2
  64. package/src/core/conflict-detector.mjs +5 -5
  65. package/src/core/crons.mjs +54 -0
  66. package/src/core/daemon-loop.mjs +87 -235
  67. package/src/core/dream.mjs +170 -10
  68. package/src/core/env-import.mjs +456 -0
  69. package/src/core/fact-seeker.mjs +14 -14
  70. package/src/core/import-rules.mjs +20 -7
  71. package/src/core/inference-engine.mjs +3 -3
  72. package/src/core/migrate.mjs +14 -8
  73. package/src/core/okf-adapter.mjs +2 -2
  74. package/src/core/operation-validator.mjs +39 -331
  75. package/src/core/optimizer.mjs +7 -0
  76. package/src/core/post-mortem.mjs +2 -2
  77. package/src/core/project-brain.mjs +349 -0
  78. package/src/core/provider-catalog.mjs +296 -0
  79. package/src/core/quick-capture.mjs +1 -1
  80. package/src/core/remote-vault-sync.mjs +194 -0
  81. package/src/core/research-queue.mjs +7 -11
  82. package/src/core/runtime.mjs +33 -9
  83. package/src/core/scheduler.mjs +59 -5
  84. package/src/core/schema.mjs +14 -0
  85. package/src/core/search.mjs +1 -1
  86. package/src/core/secrets-env-export.mjs +323 -0
  87. package/src/core/secrets-rotate.mjs +245 -0
  88. package/src/core/secrets-store.mjs +645 -0
  89. package/src/core/semantic-index.mjs +3 -3
  90. package/src/core/skills-registry.mjs +1062 -0
  91. package/src/core/source-adapters.mjs +4 -1
  92. package/src/core/ssss-host-extension.mjs +94 -0
  93. package/src/core/ssss-kernel-bridge.mjs +530 -0
  94. package/src/core/surface.mjs +14 -0
  95. package/src/core/task-envelope.mjs +298 -0
  96. package/src/core/task-executors.mjs +600 -0
  97. package/src/core/validated-write.mjs +124 -56
  98. package/src/core/vault.mjs +21 -34
  99. package/src/core/webauthn-store.mjs +272 -0
  100. package/src/server/api.mjs +26 -16
  101. package/src/server/auth.mjs +51 -0
  102. package/src/server/index.mjs +3 -3
  103. package/src/server/keys.mjs +30 -4
  104. package/src/server/rest.mjs +198 -25
  105. package/src/server/route-manifest.json +156 -0
  106. package/src/server/routes/_shared.mjs +40 -1
  107. package/src/server/routes/docs.mjs +260 -0
  108. package/src/server/routes/memory.mjs +145 -32
  109. package/src/server/routes/research.mjs +30 -0
  110. package/src/server/routes/secrets.mjs +470 -0
  111. package/src/server/routes/share.mjs +2 -2
  112. package/src/server/routes/skills.mjs +452 -54
  113. package/src/server/routes/sync.mjs +48 -0
  114. package/src/server/routes/webauthn.mjs +184 -0
  115. package/src/server/update-route-manifest.mjs +39 -0
  116. package/templates/onboarding-interview.md +32 -22
  117. package/templates/openwiki/README.md +10 -0
  118. package/templates/openwiki/architecture.md +5 -0
  119. package/templates/openwiki/ide.md +10 -0
  120. package/templates/openwiki/memory.md +11 -0
  121. package/templates/openwiki/secrets.md +7 -0
  122. package/templates/openwiki/skills.md +7 -0
  123. package/scaffold/.agent/skills/total-recall/skills/tr-cli-agents/SKILL.md +0 -121
  124. package/scaffold/.agent/skills/total-recall/skills/tr-cli-agents/references/antigravity.txt +0 -20
  125. package/scaffold/.agent/skills/total-recall/skills/tr-cli-agents/references/claude.txt +0 -58
  126. package/scaffold/.agent/skills/total-recall/skills/tr-cli-agents/references/codex.txt +0 -81
  127. package/scaffold/.agent/skills/total-recall/skills/tr-cli-agents/references/gemini.txt +0 -44
  128. package/scaffold/.agent/skills/total-recall/skills/tr-cli-agents/scripts/.gitkeep +0 -0
  129. package/scaffold/.agent/skills/total-recall/skills/tr-cli-agents/subagents/.gitkeep +0 -0
  130. package/scaffold/.agent/skills/total-recall/skills/tr-research/SKILL.md +0 -338
  131. package/scaffold/.agent/skills/total-recall/skills/tr-skill/SKILL.md +0 -282
  132. package/scaffold/.agent/skills/total-recall/skills/tr-skill/assets/skill-template/SKILL.md +0 -20
  133. package/scaffold/.agent/skills/total-recall/skills/tr-skill/evals/evals.json +0 -20
  134. package/scaffold/.agent/skills/total-recall/skills/tr-skill/hooks/on-skill-add.sh +0 -14
  135. package/scaffold/.agent/skills/total-recall/skills/tr-skill/hooks/on-skill-delete.sh +0 -14
  136. package/scaffold/.agent/skills/total-recall/skills/tr-skill/learnings/.gitkeep +0 -0
  137. package/scaffold/.agent/skills/total-recall/skills/tr-skill/references/.gitkeep +0 -0
  138. package/scaffold/.agent/skills/total-recall/skills/tr-skill/scripts/.gitkeep +0 -0
  139. package/scaffold/.agent/skills/total-recall/skills/tr-skill/scripts/create-skill.sh +0 -65
  140. package/scaffold/.agent/skills/total-recall/skills/tr-skill/scripts/enforce-skill-optimization.mjs +0 -135
  141. package/scaffold/.agent/skills/total-recall/skills/tr-skill/scripts/skill-watcher.mjs +0 -64
  142. package/scaffold/.agent/skills/total-recall/skills/tr-skill/subagents/audit-all-skills.md +0 -62
  143. package/scaffold/.agent/skills/total-recall/skills/tr-ssss/SKILL.md +0 -298
  144. package/scaffold/.agent/skills/total-recall/skills/tr-ssss/evals/evals.json +0 -17
  145. package/scaffold/.agent/skills/total-recall/skills/tr-ssss/references/CHANGELOG.md +0 -124
  146. package/scaffold/.agent/skills/total-recall/skills/tr-ssss/references/ssss-spec.md +0 -1325
  147. package/scaffold/.agent/skills/total-recall/skills/tr-ssss/scripts/validate-schema.mjs +0 -232
  148. package/scaffold/.agent/skills/total-recall/skills/tr-ssss/subagents/audit-ssss-node.md +0 -9
  149. /package/scaffold/.agent/skills/total-recall/{skills/tr-cli-agents/evals → modules/skill-deploy/scripts}/.gitkeep +0 -0
  150. /package/scaffold/.agent/skills/total-recall/{skills/tr-skill → modules/skill-deploy}/scripts/find-skills.mjs +0 -0
  151. /package/scaffold/.agent/skills/total-recall/{skills/tr-skill → modules/skill-deploy}/scripts/install-skill.mjs +0 -0
  152. /package/scaffold/.agent/skills/total-recall/{skills/tr-skill → modules/skill-deploy}/scripts/scan-skill.mjs +0 -0
@@ -1,49 +1,71 @@
1
1
  /* ═══════════════════════════════════════════════════════════════════════════════
2
- Total Recall — Design System
2
+ Total Recall — Design System (premium · brand blue vault)
3
+ Brand mark: portfolio-site/assets/logos/total-recall.png (cube lockup)
3
4
  ═══════════════════════════════════════════════════════════════════════════════ */
4
5
 
5
6
  :root {
6
- /* Colors */
7
- --bg-primary: #0a0a0f;
8
- --bg-secondary: #12121a;
9
- --bg-tertiary: #1a1a26;
10
- --bg-elevated: #22222f;
11
- --bg-hover: #2a2a38;
12
- --bg-active: #32324a;
13
-
14
- --accent: #6c5ce7;
15
- --accent-glow: rgba(108, 92, 231, 0.25);
16
- --accent-hover: #7c6ef7;
17
- --accent-muted: rgba(108, 92, 231, 0.12);
18
-
19
- --success: #00cec9;
20
- --success-muted: rgba(0, 206, 201, 0.12);
21
- --warning: #fdcb6e;
22
- --warning-muted: rgba(253, 203, 110, 0.12);
23
- --error: #ff6b6b;
24
- --error-muted: rgba(255, 107, 107, 0.12);
25
-
26
- --text-primary: #e8e8f0;
27
- --text-secondary: #9898b0;
28
- --text-tertiary: #686880;
29
- --text-inverse: #0a0a0f;
30
-
31
- --border: rgba(255, 255, 255, 0.06);
32
- --border-hover: rgba(255, 255, 255, 0.12);
7
+ /* Surfaces — deep slate with cool blue undertone */
8
+ --bg-primary: #070b14;
9
+ --bg-secondary: #0c1220;
10
+ --bg-tertiary: #121a2b;
11
+ --bg-elevated: #172033;
12
+ --bg-hover: #1c2740;
13
+ --bg-active: #243352;
14
+
15
+ /* Brand blues from official cube lockup */
16
+ --accent: #3b82f6;
17
+ --accent-deep: #1e3a8a;
18
+ --accent-glow: rgba(59, 130, 246, 0.28);
19
+ --accent-hover: #60a5fa;
20
+ --accent-muted: rgba(59, 130, 246, 0.14);
21
+ --accent-soft: rgba(147, 197, 253, 0.12);
22
+ /* Legacy alias used by older page components */
23
+ --purple-primary: var(--accent);
24
+ --purple-border: var(--border-accent);
25
+
26
+ --success: #34d399;
27
+ --success-muted: rgba(52, 211, 153, 0.12);
28
+ --warning: #fbbf24;
29
+ --warning-muted: rgba(251, 191, 36, 0.12);
30
+ --error: #f87171;
31
+ --error-muted: rgba(248, 113, 113, 0.12);
32
+
33
+ --text-primary: #f1f5f9;
34
+ --text-secondary: #94a3b8;
35
+ --text-tertiary: #64748b;
36
+ --text-inverse: #070b14;
37
+
38
+ --border: rgba(148, 163, 184, 0.1);
39
+ --border-hover: rgba(148, 163, 184, 0.22);
40
+ --border-accent: rgba(59, 130, 246, 0.35);
41
+
42
+ /* Glass */
43
+ --glass: rgba(12, 18, 32, 0.72);
44
+ --glass-border: rgba(148, 163, 184, 0.12);
45
+ --mesh-1: rgba(30, 58, 138, 0.35);
46
+ --mesh-2: rgba(59, 130, 246, 0.12);
47
+ --mesh-3: rgba(15, 23, 42, 0.9);
33
48
 
34
49
  /* Typography */
35
- --font-sans: 'Inter', -apple-system, sans-serif;
36
- --font-mono: 'JetBrains Mono', 'SF Mono', monospace;
50
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
51
+ --font-mono: 'JetBrains Mono', 'SF Mono', ui-monospace, monospace;
37
52
 
38
53
  /* Spacing */
39
- --sidebar-width: 240px;
40
- --radius-sm: 6px;
41
- --radius-md: 10px;
42
- --radius-lg: 16px;
54
+ --sidebar-width: 252px;
55
+ --radius-sm: 8px;
56
+ --radius-md: 12px;
57
+ --radius-lg: 18px;
58
+ --radius-xl: 24px;
59
+
60
+ /* Shadows */
61
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.35);
62
+ --shadow-md: 0 8px 24px rgba(0, 0, 0, 0.35);
63
+ --shadow-lg: 0 24px 64px rgba(0, 0, 0, 0.45);
64
+ --shadow-glow: 0 0 40px rgba(59, 130, 246, 0.18);
43
65
 
44
66
  /* Transitions */
45
- --transition-fast: 120ms ease;
46
- --transition-normal: 200ms ease;
67
+ --transition-fast: 140ms cubic-bezier(0.23, 1, 0.32, 1);
68
+ --transition-normal: 220ms cubic-bezier(0.23, 1, 0.32, 1);
47
69
  }
48
70
 
49
71
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
@@ -56,6 +78,17 @@ html, body, #root {
56
78
  font-size: 14px;
57
79
  line-height: 1.6;
58
80
  -webkit-font-smoothing: antialiased;
81
+ -moz-osx-font-smoothing: grayscale;
82
+ text-rendering: optimizeLegibility;
83
+ }
84
+
85
+ /* Ambient mesh on root chrome */
86
+ body {
87
+ background:
88
+ radial-gradient(1200px 600px at 10% -10%, var(--mesh-1), transparent 55%),
89
+ radial-gradient(900px 500px at 100% 0%, var(--mesh-2), transparent 50%),
90
+ radial-gradient(800px 400px at 50% 100%, rgba(30, 58, 138, 0.2), transparent 60%),
91
+ var(--bg-primary);
59
92
  }
60
93
 
61
94
  a { color: var(--accent); text-decoration: none; }
@@ -81,40 +114,71 @@ code, pre { font-family: var(--font-mono); }
81
114
  display: flex;
82
115
  height: 100vh;
83
116
  overflow: hidden;
117
+ position: relative;
84
118
  }
85
119
 
86
120
  .sidebar {
87
121
  width: var(--sidebar-width);
88
122
  min-width: var(--sidebar-width);
89
- background: var(--bg-secondary);
90
- border-right: 1px solid var(--border);
123
+ background: var(--glass);
124
+ backdrop-filter: blur(20px) saturate(1.4);
125
+ -webkit-backdrop-filter: blur(20px) saturate(1.4);
126
+ border-right: 1px solid var(--glass-border);
91
127
  display: flex;
92
128
  flex-direction: column;
93
- padding: 16px 0;
129
+ padding: 14px 0 12px;
94
130
  transition: transform var(--transition-normal);
95
131
  z-index: 100;
132
+ box-shadow: 4px 0 40px rgba(0, 0, 0, 0.25);
96
133
  }
97
134
 
98
135
  .sidebar-brand {
99
- padding: 0 20px 20px;
136
+ padding: 4px 16px 18px;
100
137
  border-bottom: 1px solid var(--border);
101
- margin-bottom: 8px;
138
+ margin-bottom: 10px;
139
+ display: flex;
140
+ flex-direction: column;
141
+ gap: 10px;
142
+ }
143
+
144
+ .sidebar-brand-row {
145
+ display: flex;
146
+ align-items: center;
147
+ gap: 12px;
102
148
  }
103
149
 
104
150
  .sidebar-brand h1 {
105
- font-size: 16px;
151
+ font-size: 15px;
106
152
  font-weight: 700;
107
- background: linear-gradient(135deg, var(--accent), var(--success));
108
- -webkit-background-clip: text;
109
- -webkit-text-fill-color: transparent;
110
- background-clip: text;
111
- letter-spacing: -0.02em;
153
+ color: var(--text-primary);
154
+ letter-spacing: -0.03em;
155
+ line-height: 1.2;
112
156
  }
113
157
 
114
158
  .sidebar-brand span {
115
159
  font-size: 11px;
116
160
  color: var(--text-tertiary);
117
- font-weight: 400;
161
+ font-weight: 500;
162
+ letter-spacing: 0.02em;
163
+ }
164
+
165
+ .sidebar-brand-lockup {
166
+ width: 100%;
167
+ border-radius: 12px;
168
+ overflow: hidden;
169
+ background: linear-gradient(180deg, #f8fafc 0%, #e8eef9 100%);
170
+ padding: 10px 12px;
171
+ box-shadow:
172
+ 0 1px 0 rgba(255, 255, 255, 0.7) inset,
173
+ 0 8px 20px rgba(15, 23, 42, 0.35),
174
+ 0 0 0 1px rgba(148, 163, 184, 0.2);
175
+ }
176
+
177
+ .sidebar-brand-lockup img {
178
+ width: 100%;
179
+ height: auto;
180
+ display: block;
181
+ object-fit: contain;
118
182
  }
119
183
 
120
184
  .sidebar-nav {
@@ -122,46 +186,75 @@ code, pre { font-family: var(--font-mono); }
122
186
  display: flex;
123
187
  flex-direction: column;
124
188
  gap: 2px;
125
- padding: 0 8px;
189
+ padding: 0 10px;
126
190
  overflow-y: auto;
191
+ scrollbar-width: thin;
192
+ }
193
+
194
+ .nav-section-label {
195
+ font-size: 10px;
196
+ font-weight: 600;
197
+ text-transform: uppercase;
198
+ letter-spacing: 0.08em;
199
+ color: var(--text-tertiary);
200
+ padding: 12px 12px 6px;
201
+ opacity: 0.85;
127
202
  }
128
203
 
129
204
  .nav-link {
130
205
  display: flex;
131
206
  align-items: center;
132
207
  gap: 10px;
133
- padding: 10px 12px;
134
- border-radius: var(--radius-sm);
208
+ padding: 9px 12px;
209
+ border-radius: 10px;
135
210
  color: var(--text-secondary);
136
211
  font-size: 13px;
137
212
  font-weight: 500;
138
213
  transition: all var(--transition-fast);
139
214
  text-decoration: none;
215
+ border: 1px solid transparent;
216
+ position: relative;
140
217
  }
141
218
 
142
219
  .nav-link:hover {
143
- background: var(--bg-hover);
220
+ background: rgba(148, 163, 184, 0.08);
144
221
  color: var(--text-primary);
145
222
  }
146
223
 
147
224
  .nav-link.active {
148
- background: var(--accent-muted);
149
- color: var(--accent);
225
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.18), rgba(30, 58, 138, 0.22));
226
+ color: #dbeafe;
227
+ border-color: var(--border-accent);
228
+ box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.04);
229
+ }
230
+
231
+ .nav-link.active::before {
232
+ content: '';
233
+ position: absolute;
234
+ left: 0;
235
+ top: 20%;
236
+ bottom: 20%;
237
+ width: 3px;
238
+ border-radius: 0 3px 3px 0;
239
+ background: linear-gradient(180deg, #60a5fa, #2563eb);
240
+ box-shadow: 0 0 12px rgba(59, 130, 246, 0.6);
150
241
  }
151
242
 
152
243
  .nav-link svg {
153
244
  width: 18px;
154
245
  height: 18px;
155
246
  flex-shrink: 0;
156
- opacity: 0.7;
247
+ opacity: 0.72;
157
248
  }
158
249
 
159
- .nav-link.active svg { opacity: 1; }
250
+ .nav-link.active svg { opacity: 1; color: #93c5fd; }
251
+ .nav-link:hover svg { opacity: 0.95; }
160
252
 
161
253
  .sidebar-footer {
162
- padding: 12px 20px;
254
+ padding: 12px 14px;
163
255
  border-top: 1px solid var(--border);
164
256
  margin-top: 8px;
257
+ background: linear-gradient(180deg, transparent, rgba(15, 23, 42, 0.4));
165
258
  }
166
259
 
167
260
  .main-content {
@@ -170,41 +263,51 @@ code, pre { font-family: var(--font-mono); }
170
263
  flex-direction: column;
171
264
  overflow: hidden;
172
265
  min-width: 0;
266
+ background: transparent;
173
267
  }
174
268
 
175
269
  .page {
176
270
  flex: 1;
177
271
  overflow-y: auto;
178
- padding: 28px 32px;
272
+ padding: 28px 32px 40px;
179
273
  }
180
274
 
181
275
  .page-header {
182
- margin-bottom: 24px;
276
+ margin-bottom: 28px;
183
277
  }
184
278
 
185
279
  .page-header h1 {
186
- font-size: 22px;
280
+ font-size: 24px;
187
281
  font-weight: 700;
188
- letter-spacing: -0.02em;
282
+ letter-spacing: -0.03em;
283
+ background: linear-gradient(135deg, #f8fafc 0%, #93c5fd 100%);
284
+ -webkit-background-clip: text;
285
+ -webkit-text-fill-color: transparent;
286
+ background-clip: text;
189
287
  }
190
288
 
191
289
  .page-header p {
192
290
  color: var(--text-secondary);
193
- font-size: 13px;
194
- margin-top: 4px;
291
+ font-size: 13.5px;
292
+ margin-top: 6px;
293
+ max-width: 56ch;
195
294
  }
196
295
 
197
296
  /* ─── Cards ──────────────────────────────────────────────────────────────────── */
198
297
 
199
298
  .card {
200
- background: var(--bg-secondary);
299
+ background: linear-gradient(165deg, rgba(23, 32, 51, 0.9), rgba(12, 18, 32, 0.95));
201
300
  border: 1px solid var(--border);
202
301
  border-radius: var(--radius-md);
203
302
  padding: 20px;
204
- transition: border-color var(--transition-normal);
303
+ transition: border-color var(--transition-normal), box-shadow var(--transition-normal), transform var(--transition-normal);
304
+ box-shadow: var(--shadow-sm);
205
305
  }
206
306
 
207
- .card:hover { border-color: var(--border-hover); }
307
+ .card:hover {
308
+ border-color: var(--border-hover);
309
+ box-shadow: var(--shadow-md);
310
+ }
208
311
 
209
312
  .card-grid {
210
313
  display: grid;
@@ -218,36 +321,126 @@ code, pre { font-family: var(--font-mono); }
218
321
  display: inline-flex;
219
322
  align-items: center;
220
323
  gap: 6px;
221
- padding: 8px 16px;
222
- border-radius: var(--radius-sm);
324
+ padding: 9px 16px;
325
+ border-radius: 10px;
223
326
  font-size: 13px;
224
- font-weight: 500;
327
+ font-weight: 600;
225
328
  transition: all var(--transition-fast);
329
+ letter-spacing: -0.01em;
226
330
  }
227
331
 
228
332
  .btn-primary {
229
- background: var(--accent);
333
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 55%, #1d4ed8 100%);
230
334
  color: #fff;
335
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.15) inset, 0 8px 20px rgba(37, 99, 235, 0.28);
231
336
  }
232
337
 
233
338
  .btn-primary:hover {
234
- background: var(--accent-hover);
235
- box-shadow: 0 0 20px var(--accent-glow);
339
+ background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 50%, #2563eb 100%);
340
+ box-shadow: 0 0 28px var(--accent-glow), 0 8px 24px rgba(37, 99, 235, 0.35);
341
+ transform: translateY(-1px);
236
342
  }
237
343
 
238
344
  .btn-ghost {
239
- background: transparent;
345
+ background: rgba(148, 163, 184, 0.06);
240
346
  color: var(--text-secondary);
241
347
  border: 1px solid var(--border);
242
348
  }
243
349
 
244
350
  .btn-ghost:hover {
245
- background: var(--bg-hover);
351
+ background: rgba(148, 163, 184, 0.12);
246
352
  color: var(--text-primary);
247
353
  border-color: var(--border-hover);
248
354
  }
249
355
 
250
- .btn-sm { padding: 5px 10px; font-size: 12px; }
356
+ .btn-sm { padding: 6px 11px; font-size: 12px; }
357
+
358
+ /* Premium surfaces */
359
+ .surface-premium {
360
+ background: linear-gradient(165deg, rgba(23, 32, 51, 0.92), rgba(12, 18, 32, 0.96));
361
+ border: 1px solid var(--glass-border);
362
+ border-radius: var(--radius-lg);
363
+ box-shadow: var(--shadow-md), inset 0 1px 0 rgba(255, 255, 255, 0.04);
364
+ }
365
+
366
+ .login-shell {
367
+ min-height: 100vh;
368
+ display: flex;
369
+ align-items: center;
370
+ justify-content: center;
371
+ padding: 24px;
372
+ position: relative;
373
+ overflow: hidden;
374
+ }
375
+
376
+ .login-shell::before {
377
+ content: '';
378
+ position: absolute;
379
+ inset: -20%;
380
+ background:
381
+ radial-gradient(ellipse 50% 40% at 20% 20%, rgba(37, 99, 235, 0.28), transparent 55%),
382
+ radial-gradient(ellipse 45% 35% at 80% 70%, rgba(30, 58, 138, 0.35), transparent 50%),
383
+ radial-gradient(ellipse 30% 25% at 50% 50%, rgba(96, 165, 250, 0.08), transparent 60%);
384
+ animation: meshDrift 18s ease-in-out infinite alternate;
385
+ pointer-events: none;
386
+ }
387
+
388
+ @keyframes meshDrift {
389
+ from { transform: translate3d(0, 0, 0) scale(1); }
390
+ to { transform: translate3d(-2%, 2%, 0) scale(1.05); }
391
+ }
392
+
393
+ .login-card {
394
+ width: min(400px, 100%);
395
+ position: relative;
396
+ z-index: 1;
397
+ padding: 40px 36px;
398
+ border-radius: var(--radius-xl);
399
+ background: linear-gradient(165deg, rgba(18, 26, 43, 0.92), rgba(8, 12, 22, 0.96));
400
+ border: 1px solid rgba(148, 163, 184, 0.14);
401
+ box-shadow:
402
+ 0 0 0 1px rgba(59, 130, 246, 0.08),
403
+ 0 32px 80px rgba(0, 0, 0, 0.55),
404
+ 0 0 80px rgba(37, 99, 235, 0.12);
405
+ backdrop-filter: blur(24px);
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: 28px;
409
+ }
410
+
411
+ .onboarding-shell {
412
+ max-width: 680px;
413
+ margin: 0 auto;
414
+ padding: 36px 22px 72px;
415
+ }
416
+
417
+ .onboarding-progress {
418
+ height: 6px;
419
+ background: rgba(148, 163, 184, 0.1);
420
+ border-radius: 99px;
421
+ overflow: hidden;
422
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.3);
423
+ }
424
+
425
+ .onboarding-progress > div {
426
+ height: 100%;
427
+ background: linear-gradient(90deg, #1e40af, #3b82f6, #93c5fd);
428
+ border-radius: 99px;
429
+ box-shadow: 0 0 16px rgba(59, 130, 246, 0.5);
430
+ transition: width 0.3s cubic-bezier(0.23, 1, 0.32, 1);
431
+ }
432
+
433
+ .loop-card {
434
+ background: linear-gradient(145deg, rgba(30, 58, 138, 0.25), rgba(12, 18, 32, 0.8));
435
+ border: 1px solid var(--border-accent);
436
+ border-radius: var(--radius-md);
437
+ padding: 18px 20px;
438
+ font-family: var(--font-mono);
439
+ font-size: 12.5px;
440
+ line-height: 1.85;
441
+ color: #cbd5e1;
442
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
443
+ }
251
444
 
252
445
  /* ─── Status Badges ──────────────────────────────────────────────────────────── */
253
446
 
@@ -319,16 +512,18 @@ code, pre { font-family: var(--font-mono); }
319
512
 
320
513
  .message-user {
321
514
  align-self: flex-end;
322
- background: var(--accent);
515
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
323
516
  color: #fff;
324
517
  border-bottom-right-radius: 4px;
518
+ box-shadow: 0 8px 24px rgba(37, 99, 235, 0.22);
325
519
  }
326
520
 
327
521
  .message-assistant {
328
522
  align-self: flex-start;
329
- background: var(--bg-tertiary);
523
+ background: linear-gradient(165deg, rgba(23, 32, 51, 0.95), rgba(12, 18, 32, 0.98));
330
524
  border: 1px solid var(--border);
331
525
  border-bottom-left-radius: 4px;
526
+ box-shadow: var(--shadow-sm);
332
527
  }
333
528
 
334
529
  .message-assistant code {
@@ -380,18 +575,20 @@ code, pre { font-family: var(--font-mono); }
380
575
  width: 44px;
381
576
  height: 44px;
382
577
  border-radius: var(--radius-md);
383
- background: var(--accent);
578
+ background: linear-gradient(135deg, #3b82f6, #1d4ed8);
384
579
  color: #fff;
385
580
  display: flex;
386
581
  align-items: center;
387
582
  justify-content: center;
388
583
  flex-shrink: 0;
389
584
  transition: all var(--transition-fast);
585
+ box-shadow: 0 4px 14px rgba(37, 99, 235, 0.35);
390
586
  }
391
587
 
392
588
  .chat-send-btn:hover {
393
- background: var(--accent-hover);
394
- box-shadow: 0 0 20px var(--accent-glow);
589
+ background: linear-gradient(135deg, #60a5fa, #2563eb);
590
+ box-shadow: 0 0 24px var(--accent-glow);
591
+ transform: translateY(-1px);
395
592
  }
396
593
 
397
594
  .chat-send-btn:disabled {
@@ -1441,12 +1638,14 @@ code, pre { font-family: var(--font-mono); }
1441
1638
  align-items: center;
1442
1639
  justify-content: space-between;
1443
1640
  padding: 12px 24px;
1444
- background: rgba(18, 18, 26, 0.45);
1641
+ background: rgba(18, 18, 26, 0.92);
1445
1642
  backdrop-filter: blur(16px);
1446
1643
  -webkit-backdrop-filter: blur(16px);
1447
1644
  border-bottom: 1px solid var(--border);
1448
- z-index: 10;
1645
+ z-index: 40;
1449
1646
  flex-shrink: 0;
1647
+ overflow: visible;
1648
+ position: relative;
1450
1649
  }
1451
1650
 
1452
1651
  .chat-header-title {
@@ -1510,18 +1709,19 @@ code, pre { font-family: var(--font-mono); }
1510
1709
  top: 100%;
1511
1710
  right: 0;
1512
1711
  margin-top: 6px;
1513
- width: 220px;
1514
- background: rgba(18, 18, 26, 0.95);
1712
+ width: 240px;
1713
+ background: rgba(18, 18, 26, 0.98);
1515
1714
  backdrop-filter: blur(20px);
1516
1715
  -webkit-backdrop-filter: blur(20px);
1517
1716
  border: 1px solid var(--border);
1518
1717
  border-radius: var(--radius-md);
1519
- box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4);
1718
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.55);
1520
1719
  padding: 6px;
1521
1720
  display: flex;
1522
1721
  flex-direction: column;
1523
1722
  gap: 2px;
1524
- z-index: 100;
1723
+ z-index: 200;
1724
+ pointer-events: auto;
1525
1725
  animation: popoverIn 0.15s ease-out;
1526
1726
  }
1527
1727