Komalpreet Kaur Claude Haiku 4.5 commited on
Commit
7a4a5a0
Β·
unverified Β·
1 Parent(s): 73ee88b

feat: modernize UI with glassmorphism aesthetic

Browse files

Apply iPhone-style frosted glass effects throughout the app:
- Updated theme variables with enhanced blur and opacity
- Applied backdrop-filter blur effects to all panels and cards
- Modernized header, buttons, and interactive elements
- Added glass styling to chat bubbles, input fields, and brain process cards
- Improved shadows and glow effects for visual hierarchy
- Added dark mode support with appropriate glass colors
- Smooth cubic-bezier transitions for polished interactions

All layout and functionality remain unchanged; this is purely visual modernization.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

frontend/src/App.css CHANGED
@@ -21,17 +21,26 @@
21
  height: 56px;
22
  min-height: 56px;
23
  padding: 0 24px;
24
- background: var(--bg-1);
25
  border-bottom: 1px solid var(--border-0);
26
  flex-shrink: 0;
27
  z-index: 20;
28
  gap: 20px;
 
 
 
29
  }
30
 
31
  [data-theme="light"] .app-header {
32
- background: #FFFFFF;
33
- border-bottom: 1px solid rgba(0,0,0,0.07);
34
- box-shadow: 0 1px 12px rgba(0,0,0,0.06);
 
 
 
 
 
 
35
  }
36
 
37
  /* ── Logo ── */
@@ -138,10 +147,17 @@
138
  .view-tabs {
139
  display: flex;
140
  gap: 2px;
141
- background: var(--bg-2);
142
- border: 1px solid var(--border-0);
143
- border-radius: 7px;
144
  padding: 3px;
 
 
 
 
 
 
 
145
  }
146
 
147
  .view-tab {
@@ -150,26 +166,33 @@
150
  letter-spacing: 0.1em;
151
  text-transform: uppercase;
152
  padding: 5px 14px;
153
- border-radius: 5px;
154
  border: 1px solid transparent;
155
  background: transparent;
156
  color: var(--text-2);
157
  cursor: pointer;
158
- transition: all 0.2s ease;
159
  }
160
 
161
  .view-tab:hover {
162
  color: var(--text-1);
163
- background: var(--border-0);
164
  transform: none;
165
  box-shadow: none;
166
  }
167
 
168
  .view-tab.active {
169
- background: var(--bg-3);
170
  color: var(--pulse);
171
  border-color: var(--border-1);
172
  box-shadow: var(--glow-pulse);
 
 
 
 
 
 
 
173
  }
174
 
175
  /* Sleep btn */
@@ -179,17 +202,24 @@
179
  letter-spacing: 0.12em;
180
  text-transform: uppercase;
181
  padding: 6px 14px;
182
- border-radius: 6px;
183
- background: transparent;
184
- border: 1px solid var(--border-1);
185
  color: var(--text-2);
186
- transition: all 0.2s ease;
 
 
 
 
 
 
 
187
  }
188
 
189
  .sleep-btn:hover {
190
- background: var(--border-0);
191
  color: var(--pulse);
192
- border-color: var(--pulse);
193
  box-shadow: var(--glow-pulse);
194
  transform: none;
195
  }
@@ -221,10 +251,22 @@
221
  display: flex;
222
  align-items: center;
223
  gap: 7px;
224
- background: var(--bg-2);
225
- border: 1px solid var(--border-1);
226
  border-radius: 20px;
227
  padding: 4px 10px 4px 12px;
 
 
 
 
 
 
 
 
 
 
 
 
228
  }
229
 
230
  .user-chip-name {
@@ -268,16 +310,23 @@
268
  justify-content: center;
269
  padding: 0;
270
  border-radius: 50%;
271
- background: transparent;
272
- border: 1px solid var(--border-1);
273
  color: var(--text-1);
274
- transition: all 0.3s ease;
 
 
 
 
 
 
 
275
  }
276
 
277
  .theme-toggle:hover {
278
- background: var(--border-0);
279
  color: var(--pulse);
280
- border-color: var(--pulse);
281
  transform: rotate(20deg);
282
  box-shadow: var(--glow-pulse);
283
  }
@@ -292,18 +341,25 @@
292
  padding: 0;
293
  border-radius: 50%;
294
  font-size: 0.65rem;
295
- background: transparent;
296
- border: 1px solid var(--border-1);
297
  color: var(--text-2);
298
- transition: all 0.2s ease;
 
 
 
 
 
 
 
299
  }
300
 
301
  .help-btn:hover {
302
  color: var(--pulse);
303
- border-color: var(--pulse);
304
  transform: none;
305
- box-shadow: none;
306
- background: var(--border-0);
307
  }
308
 
309
  /* ══════════════════════════════════════
@@ -322,15 +378,24 @@
322
  flex-shrink: 0;
323
  overflow: hidden;
324
  min-width: 18%;
 
325
  }
326
 
327
- .col-chat { background: var(--bg-0); }
328
- .col-brain { background: var(--bg-1); border-left: 1px solid var(--border-0); border-right: 1px solid var(--border-0); }
329
- .col-graph { position: relative; background: var(--bg-0); }
 
 
 
 
 
 
 
 
330
 
331
- [data-theme="light"] .col-chat { background: #F2EFEB; }
332
- [data-theme="light"] .col-brain { background: #F8F6F3; border-color: rgba(0,0,0,0.06); }
333
- [data-theme="light"] .col-graph { background: #F2EFEB; }
334
 
335
  /* ── Drag handle ── */
336
  .resize-handle {
@@ -365,8 +430,9 @@
365
  .sleep-modal-overlay {
366
  position: fixed;
367
  inset: 0;
368
- background: rgba(0,0,0,0.55);
369
- backdrop-filter: blur(8px);
 
370
  display: flex;
371
  align-items: center;
372
  justify-content: center;
@@ -375,13 +441,13 @@
375
  }
376
 
377
  [data-theme="light"] .sleep-modal-overlay {
378
- background: rgba(100, 80, 65, 0.35);
379
  }
380
 
381
  .sleep-modal {
382
- background: var(--bg-2);
383
- border: 1px solid var(--border-1);
384
- border-radius: 18px;
385
  padding: 36px 40px;
386
  max-width: 400px;
387
  width: 90%;
@@ -390,8 +456,20 @@
390
  flex-direction: column;
391
  align-items: center;
392
  gap: 18px;
393
- box-shadow: 0 28px 64px rgba(0,0,0,0.45);
 
 
394
  animation: ob-rise 0.35s cubic-bezier(0.22,1,0.36,1);
 
 
 
 
 
 
 
 
 
 
395
  }
396
 
397
  .sm-icon { font-size: 2.4rem; animation: float 3s ease-in-out infinite; }
 
21
  height: 56px;
22
  min-height: 56px;
23
  padding: 0 24px;
24
+ background: rgba(255, 255, 255, 0.55);
25
  border-bottom: 1px solid var(--border-0);
26
  flex-shrink: 0;
27
  z-index: 20;
28
  gap: 20px;
29
+ backdrop-filter: blur(20px);
30
+ -webkit-backdrop-filter: blur(20px);
31
+ box-shadow: 0 4px 20px rgba(0,0,0,0.05);
32
  }
33
 
34
  [data-theme="light"] .app-header {
35
+ background: rgba(255, 255, 255, 0.58);
36
+ border-bottom: 1px solid rgba(0,0,0,0.05);
37
+ box-shadow: 0 4px 20px rgba(0,0,0,0.04);
38
+ }
39
+
40
+ [data-theme="dark"] .app-header {
41
+ background: rgba(20, 20, 35, 0.6);
42
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
43
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
44
  }
45
 
46
  /* ── Logo ── */
 
147
  .view-tabs {
148
  display: flex;
149
  gap: 2px;
150
+ background: rgba(255, 255, 255, 0.5);
151
+ border: 1px solid rgba(255, 255, 255, 0.5);
152
+ border-radius: 10px;
153
  padding: 3px;
154
+ backdrop-filter: blur(12px);
155
+ -webkit-backdrop-filter: blur(12px);
156
+ }
157
+
158
+ [data-theme="dark"] .view-tabs {
159
+ background: rgba(25, 25, 40, 0.6);
160
+ border-color: rgba(255, 255, 255, 0.08);
161
  }
162
 
163
  .view-tab {
 
166
  letter-spacing: 0.1em;
167
  text-transform: uppercase;
168
  padding: 5px 14px;
169
+ border-radius: 8px;
170
  border: 1px solid transparent;
171
  background: transparent;
172
  color: var(--text-2);
173
  cursor: pointer;
174
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
175
  }
176
 
177
  .view-tab:hover {
178
  color: var(--text-1);
179
+ background: rgba(255, 255, 255, 0.2);
180
  transform: none;
181
  box-shadow: none;
182
  }
183
 
184
  .view-tab.active {
185
+ background: rgba(255, 255, 255, 0.7);
186
  color: var(--pulse);
187
  border-color: var(--border-1);
188
  box-shadow: var(--glow-pulse);
189
+ backdrop-filter: blur(12px);
190
+ -webkit-backdrop-filter: blur(12px);
191
+ }
192
+
193
+ [data-theme="dark"] .view-tab.active {
194
+ background: rgba(232, 97, 77, 0.15);
195
+ border-color: rgba(255, 107, 86, 0.2);
196
  }
197
 
198
  /* Sleep btn */
 
202
  letter-spacing: 0.12em;
203
  text-transform: uppercase;
204
  padding: 6px 14px;
205
+ border-radius: 8px;
206
+ background: rgba(255, 255, 255, 0.5);
207
+ border: 1px solid rgba(255, 255, 255, 0.5);
208
  color: var(--text-2);
209
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
210
+ backdrop-filter: blur(12px);
211
+ -webkit-backdrop-filter: blur(12px);
212
+ }
213
+
214
+ [data-theme="dark"] .sleep-btn {
215
+ background: rgba(25, 25, 40, 0.6);
216
+ border-color: rgba(255, 255, 255, 0.08);
217
  }
218
 
219
  .sleep-btn:hover {
220
+ background: rgba(232, 97, 77, 0.2);
221
  color: var(--pulse);
222
+ border-color: rgba(232, 97, 77, 0.4);
223
  box-shadow: var(--glow-pulse);
224
  transform: none;
225
  }
 
251
  display: flex;
252
  align-items: center;
253
  gap: 7px;
254
+ background: rgba(255, 255, 255, 0.5);
255
+ border: 1px solid rgba(255, 255, 255, 0.5);
256
  border-radius: 20px;
257
  padding: 4px 10px 4px 12px;
258
+ backdrop-filter: blur(12px);
259
+ -webkit-backdrop-filter: blur(12px);
260
+ transition: all 0.3s ease;
261
+ }
262
+
263
+ [data-theme="dark"] .user-chip {
264
+ background: rgba(25, 25, 40, 0.6);
265
+ border-color: rgba(255, 255, 255, 0.08);
266
+ }
267
+
268
+ .user-chip:hover {
269
+ border-color: rgba(232, 97, 77, 0.3);
270
  }
271
 
272
  .user-chip-name {
 
310
  justify-content: center;
311
  padding: 0;
312
  border-radius: 50%;
313
+ background: rgba(255, 255, 255, 0.5);
314
+ border: 1px solid rgba(255, 255, 255, 0.5);
315
  color: var(--text-1);
316
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
317
+ backdrop-filter: blur(12px);
318
+ -webkit-backdrop-filter: blur(12px);
319
+ }
320
+
321
+ [data-theme="dark"] .theme-toggle {
322
+ background: rgba(25, 25, 40, 0.6);
323
+ border-color: rgba(255, 255, 255, 0.08);
324
  }
325
 
326
  .theme-toggle:hover {
327
+ background: rgba(232, 97, 77, 0.2);
328
  color: var(--pulse);
329
+ border-color: rgba(232, 97, 77, 0.4);
330
  transform: rotate(20deg);
331
  box-shadow: var(--glow-pulse);
332
  }
 
341
  padding: 0;
342
  border-radius: 50%;
343
  font-size: 0.65rem;
344
+ background: rgba(255, 255, 255, 0.5);
345
+ border: 1px solid rgba(255, 255, 255, 0.5);
346
  color: var(--text-2);
347
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
348
+ backdrop-filter: blur(12px);
349
+ -webkit-backdrop-filter: blur(12px);
350
+ }
351
+
352
+ [data-theme="dark"] .help-btn {
353
+ background: rgba(25, 25, 40, 0.6);
354
+ border-color: rgba(255, 255, 255, 0.08);
355
  }
356
 
357
  .help-btn:hover {
358
  color: var(--pulse);
359
+ border-color: rgba(232, 97, 77, 0.4);
360
  transform: none;
361
+ box-shadow: var(--glow-pulse);
362
+ background: rgba(232, 97, 77, 0.2);
363
  }
364
 
365
  /* ══════════════════════════════════════
 
378
  flex-shrink: 0;
379
  overflow: hidden;
380
  min-width: 18%;
381
+ background-attachment: fixed;
382
  }
383
 
384
+ .col-chat { background: linear-gradient(135deg, rgba(245, 242, 236, 0.95) 0%, rgba(250, 250, 248, 0.95) 100%); }
385
+ .col-brain {
386
+ background: linear-gradient(135deg, rgba(250, 250, 248, 0.98) 0%, rgba(245, 242, 236, 0.98) 100%);
387
+ border-left: 1px solid rgba(0, 0, 0, 0.04);
388
+ border-right: 1px solid rgba(0, 0, 0, 0.04);
389
+ }
390
+ .col-graph { position: relative; background: linear-gradient(135deg, rgba(245, 242, 236, 0.95) 0%, rgba(250, 250, 248, 0.95) 100%); }
391
+
392
+ [data-theme="light"] .col-chat { background: linear-gradient(135deg, #F5F2EC 0%, #FAFAF8 100%); }
393
+ [data-theme="light"] .col-brain { background: linear-gradient(135deg, #FAFAF8 0%, #F5F2EC 100%); border-color: rgba(0,0,0,0.04); }
394
+ [data-theme="light"] .col-graph { background: linear-gradient(135deg, #F5F2EC 0%, #FAFAF8 100%); }
395
 
396
+ [data-theme="dark"] .col-chat { background: linear-gradient(135deg, #0F0F18 0%, #16161F 100%); }
397
+ [data-theme="dark"] .col-brain { background: linear-gradient(135deg, #16161F 0%, #0F0F18 100%); border-color: rgba(255,255,255,0.04); }
398
+ [data-theme="dark"] .col-graph { background: linear-gradient(135deg, #0F0F18 0%, #16161F 100%); }
399
 
400
  /* ── Drag handle ── */
401
  .resize-handle {
 
430
  .sleep-modal-overlay {
431
  position: fixed;
432
  inset: 0;
433
+ background: rgba(0,0,0,0.4);
434
+ backdrop-filter: blur(12px);
435
+ -webkit-backdrop-filter: blur(12px);
436
  display: flex;
437
  align-items: center;
438
  justify-content: center;
 
441
  }
442
 
443
  [data-theme="light"] .sleep-modal-overlay {
444
+ background: rgba(100, 80, 65, 0.25);
445
  }
446
 
447
  .sleep-modal {
448
+ background: rgba(255, 255, 255, 0.7);
449
+ border: 1px solid rgba(255, 255, 255, 0.7);
450
+ border-radius: 24px;
451
  padding: 36px 40px;
452
  max-width: 400px;
453
  width: 90%;
 
456
  flex-direction: column;
457
  align-items: center;
458
  gap: 18px;
459
+ box-shadow:
460
+ 0 0 1px rgba(255, 255, 255, 0.3) inset,
461
+ 0 32px 64px rgba(0,0,0,0.15);
462
  animation: ob-rise 0.35s cubic-bezier(0.22,1,0.36,1);
463
+ backdrop-filter: blur(20px);
464
+ -webkit-backdrop-filter: blur(20px);
465
+ }
466
+
467
+ [data-theme="dark"] .sleep-modal {
468
+ background: rgba(20, 20, 35, 0.75);
469
+ border-color: rgba(255, 255, 255, 0.1);
470
+ box-shadow:
471
+ 0 0 1px rgba(255, 255, 255, 0.1) inset,
472
+ 0 32px 64px rgba(0,0,0,0.5);
473
  }
474
 
475
  .sm-icon { font-size: 2.4rem; animation: float 3s ease-in-out infinite; }
frontend/src/components/BrainProcess.css CHANGED
@@ -46,28 +46,42 @@
46
 
47
  .bp-stage {
48
  position: relative;
49
- background: var(--bg-2);
50
- border: 1px solid var(--border-0);
51
  border-left: 3px solid var(--clr, var(--border-1));
52
- border-radius: 10px;
53
  padding: 14px 16px;
54
  display: flex;
55
  align-items: flex-start;
56
  gap: 14px;
57
- transition: transform 0.35s ease, box-shadow 0.35s ease,
58
  border-color 0.35s ease, background 0.35s ease;
59
  overflow: hidden;
60
  transform: translateZ(0);
 
 
 
 
 
 
 
61
  }
62
 
63
  /* Active: lift toward viewer */
64
  .bp-stage.active {
65
- background: var(--bg-3);
66
  border-color: var(--clr);
67
  transform: perspective(600px) translateZ(12px) scale(1.01);
68
  box-shadow: var(--glow-pulse),
69
- 0 8px 24px rgba(0,0,0,0.25);
70
  z-index: 2;
 
 
 
 
 
 
 
71
  }
72
 
73
  .bp-stage.dim { opacity: 0.42; }
@@ -195,23 +209,35 @@
195
 
196
  .bp-mem-card {
197
  position: relative;
198
- background: var(--bg-2);
199
- border: 1px solid var(--border-0);
200
- border-radius: 12px;
201
  padding: 14px 14px 18px;
202
  overflow: hidden;
203
  cursor: default;
204
  /* 3D tilt */
205
  transform: perspective(600px) rotateX(var(--tx, 0deg)) rotateY(var(--ty, 0deg));
206
  transform-style: preserve-3d;
207
- transition: transform 0.12s ease, box-shadow 0.12s ease;
208
  will-change: transform;
 
 
 
 
 
 
 
209
  }
210
 
211
  .bp-mem-card:hover {
212
- box-shadow: var(--glow-pulse), 0 10px 28px rgba(0,0,0,0.3);
213
  border-color: var(--clr);
214
  z-index: 1;
 
 
 
 
 
215
  }
216
 
217
  /* Specular sheen that moves with tilt */
@@ -291,14 +317,21 @@
291
  Reflection
292
  ══════════════════════════════════════ */
293
  .bp-reflection {
294
- background: var(--bg-2);
295
- border: 1px solid var(--border-1);
296
- border-radius: 12px;
297
  padding: 16px 18px;
298
  display: flex;
299
  gap: 10px;
300
  align-items: flex-start;
301
  animation: soma-rise 0.4s ease both;
 
 
 
 
 
 
 
302
  }
303
 
304
  .bp-ref-mark {
@@ -333,9 +366,15 @@
333
  gap: 8px;
334
  align-items: flex-start;
335
  padding: 7px 10px;
336
- background: var(--bg-2);
337
- border-radius: 7px;
338
  animation: soma-rise 0.25s ease both;
 
 
 
 
 
 
339
  }
340
 
341
  .bp-trace-ph {
@@ -375,11 +414,27 @@
375
  .bp-sparks { display: flex; flex-direction: column; gap: 8px; }
376
 
377
  .bp-spark {
378
- background: var(--bg-2);
379
- border: 1px solid var(--border-0);
380
- border-radius: 10px;
381
  padding: 12px 14px;
382
  animation: soma-flip-in 0.4s ease both;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
383
  }
384
 
385
  .bp-spark-tags {
@@ -466,13 +521,20 @@
466
 
467
  .bp-idle-key {
468
  align-self: stretch;
469
- background: var(--bg-2);
470
- border: 1px solid var(--border-0);
471
- border-radius: 10px;
472
  padding: 14px 16px;
473
  display: flex;
474
  flex-direction: column;
475
  gap: 10px;
 
 
 
 
 
 
 
476
  }
477
 
478
  .bp-idle-row {
 
46
 
47
  .bp-stage {
48
  position: relative;
49
+ background: rgba(255, 255, 255, 0.6);
50
+ border: 1px solid rgba(255, 255, 255, 0.6);
51
  border-left: 3px solid var(--clr, var(--border-1));
52
+ border-radius: 14px;
53
  padding: 14px 16px;
54
  display: flex;
55
  align-items: flex-start;
56
  gap: 14px;
57
+ transition: transform 0.35s cubic-bezier(0.23, 1, 0.320, 1), box-shadow 0.35s ease,
58
  border-color 0.35s ease, background 0.35s ease;
59
  overflow: hidden;
60
  transform: translateZ(0);
61
+ backdrop-filter: blur(12px);
62
+ -webkit-backdrop-filter: blur(12px);
63
+ }
64
+
65
+ [data-theme="dark"] .bp-stage {
66
+ background: rgba(25, 25, 40, 0.65);
67
+ border-color: rgba(255, 255, 255, 0.08);
68
  }
69
 
70
  /* Active: lift toward viewer */
71
  .bp-stage.active {
72
+ background: rgba(255, 255, 255, 0.75);
73
  border-color: var(--clr);
74
  transform: perspective(600px) translateZ(12px) scale(1.01);
75
  box-shadow: var(--glow-pulse),
76
+ 0 8px 24px rgba(0,0,0,0.12);
77
  z-index: 2;
78
+ backdrop-filter: blur(16px);
79
+ -webkit-backdrop-filter: blur(16px);
80
+ }
81
+
82
+ [data-theme="dark"] .bp-stage.active {
83
+ background: rgba(35, 35, 55, 0.75);
84
+ border-color: var(--clr);
85
  }
86
 
87
  .bp-stage.dim { opacity: 0.42; }
 
209
 
210
  .bp-mem-card {
211
  position: relative;
212
+ background: rgba(255, 255, 255, 0.6);
213
+ border: 1px solid rgba(255, 255, 255, 0.6);
214
+ border-radius: 14px;
215
  padding: 14px 14px 18px;
216
  overflow: hidden;
217
  cursor: default;
218
  /* 3D tilt */
219
  transform: perspective(600px) rotateX(var(--tx, 0deg)) rotateY(var(--ty, 0deg));
220
  transform-style: preserve-3d;
221
+ transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.3s ease;
222
  will-change: transform;
223
+ backdrop-filter: blur(12px);
224
+ -webkit-backdrop-filter: blur(12px);
225
+ }
226
+
227
+ [data-theme="dark"] .bp-mem-card {
228
+ background: rgba(25, 25, 40, 0.65);
229
+ border-color: rgba(255, 255, 255, 0.08);
230
  }
231
 
232
  .bp-mem-card:hover {
233
+ box-shadow: var(--glow-pulse), 0 10px 28px rgba(0,0,0,0.12);
234
  border-color: var(--clr);
235
  z-index: 1;
236
+ background: rgba(255, 255, 255, 0.75);
237
+ }
238
+
239
+ [data-theme="dark"] .bp-mem-card:hover {
240
+ background: rgba(35, 35, 55, 0.75);
241
  }
242
 
243
  /* Specular sheen that moves with tilt */
 
317
  Reflection
318
  ══════════════════════════════════════ */
319
  .bp-reflection {
320
+ background: rgba(255, 255, 255, 0.6);
321
+ border: 1px solid rgba(255, 255, 255, 0.6);
322
+ border-radius: 14px;
323
  padding: 16px 18px;
324
  display: flex;
325
  gap: 10px;
326
  align-items: flex-start;
327
  animation: soma-rise 0.4s ease both;
328
+ backdrop-filter: blur(12px);
329
+ -webkit-backdrop-filter: blur(12px);
330
+ }
331
+
332
+ [data-theme="dark"] .bp-reflection {
333
+ background: rgba(25, 25, 40, 0.65);
334
+ border-color: rgba(255, 255, 255, 0.08);
335
  }
336
 
337
  .bp-ref-mark {
 
366
  gap: 8px;
367
  align-items: flex-start;
368
  padding: 7px 10px;
369
+ background: rgba(255, 255, 255, 0.5);
370
+ border-radius: 8px;
371
  animation: soma-rise 0.25s ease both;
372
+ backdrop-filter: blur(8px);
373
+ -webkit-backdrop-filter: blur(8px);
374
+ }
375
+
376
+ [data-theme="dark"] .bp-trace {
377
+ background: rgba(25, 25, 40, 0.55);
378
  }
379
 
380
  .bp-trace-ph {
 
414
  .bp-sparks { display: flex; flex-direction: column; gap: 8px; }
415
 
416
  .bp-spark {
417
+ background: rgba(255, 255, 255, 0.6);
418
+ border: 1px solid rgba(255, 255, 255, 0.6);
419
+ border-radius: 12px;
420
  padding: 12px 14px;
421
  animation: soma-flip-in 0.4s ease both;
422
+ backdrop-filter: blur(12px);
423
+ -webkit-backdrop-filter: blur(12px);
424
+ transition: all 0.3s ease;
425
+ }
426
+
427
+ [data-theme="dark"] .bp-spark {
428
+ background: rgba(25, 25, 40, 0.65);
429
+ border-color: rgba(255, 255, 255, 0.08);
430
+ }
431
+
432
+ .bp-spark:hover {
433
+ background: rgba(255, 255, 255, 0.75);
434
+ }
435
+
436
+ [data-theme="dark"] .bp-spark:hover {
437
+ background: rgba(35, 35, 55, 0.75);
438
  }
439
 
440
  .bp-spark-tags {
 
521
 
522
  .bp-idle-key {
523
  align-self: stretch;
524
+ background: rgba(255, 255, 255, 0.6);
525
+ border: 1px solid rgba(255, 255, 255, 0.6);
526
+ border-radius: 12px;
527
  padding: 14px 16px;
528
  display: flex;
529
  flex-direction: column;
530
  gap: 10px;
531
+ backdrop-filter: blur(12px);
532
+ -webkit-backdrop-filter: blur(12px);
533
+ }
534
+
535
+ [data-theme="dark"] .bp-idle-key {
536
+ background: rgba(25, 25, 40, 0.65);
537
+ border-color: rgba(255, 255, 255, 0.08);
538
  }
539
 
540
  .bp-idle-row {
frontend/src/components/ChatPanel.css CHANGED
@@ -83,31 +83,43 @@
83
  }
84
 
85
  .msg.user .msg-bubble {
86
- background: var(--bg-3);
87
- border: 1px solid var(--border-1);
88
  border-bottom-right-radius: 3px;
89
- box-shadow: 0 4px 16px rgba(0,0,0,0.22);
 
 
90
  }
91
 
92
  [data-theme="light"] .msg.user .msg-bubble {
93
- background: rgba(229, 83, 59, 0.06);
94
- border-color: rgba(229, 83, 59, 0.18);
95
- box-shadow: 0 2px 10px rgba(0,0,0,0.06);
96
  }
97
 
98
  [data-theme="light"] .msg.soma .msg-bubble {
99
- background: #FFFFFF;
100
- border-color: rgba(0,0,0,0.07);
101
  border-left-color: var(--pulse);
102
- box-shadow: 0 2px 12px rgba(0,0,0,0.07);
 
 
103
  }
104
 
105
  .msg.soma .msg-bubble {
106
- background: var(--bg-2);
107
- border: 1px solid var(--border-0);
108
  border-left: 2px solid var(--pulse);
109
  border-bottom-left-radius: 3px;
110
- box-shadow: 0 4px 18px rgba(0,0,0,0.18);
 
 
 
 
 
 
 
 
111
  }
112
 
113
  /* ── Empty state ── */
@@ -140,17 +152,30 @@
140
  .chat-form {
141
  display: flex;
142
  align-items: center;
143
- background: var(--bg-2);
144
- border: 1px solid var(--border-0);
145
- border-radius: 12px;
146
  padding: 4px 4px 4px 14px;
147
  gap: 8px;
148
- transition: border-color 0.2s ease, box-shadow 0.2s ease;
 
 
 
 
 
 
 
149
  }
150
 
151
  .chat-form:focus-within {
152
- border-color: var(--border-1);
153
- box-shadow: 0 0 0 2px var(--border-0);
 
 
 
 
 
 
154
  }
155
 
156
  .chat-input {
@@ -172,23 +197,30 @@
172
 
173
  .chat-submit {
174
  padding: 9px 18px;
175
- border-radius: 9px;
176
- background: var(--bg-3);
177
- border: 1px solid var(--border-1);
178
- color: var(--text-1);
179
  font-family: var(--font-mono);
180
  font-size: 0.6rem;
181
  font-weight: 700;
182
  letter-spacing: 0.1em;
183
  text-transform: uppercase;
184
  cursor: pointer;
185
- transition: all 0.2s ease;
186
  flex-shrink: 0;
 
 
 
 
 
 
 
187
  }
188
 
189
  .chat-submit:hover:not(:disabled) {
190
  background: var(--pulse);
191
- color: var(--bg-0);
192
  border-color: var(--pulse);
193
  box-shadow: var(--glow-pulse);
194
  transform: none;
@@ -208,17 +240,24 @@
208
  letter-spacing: 0.1em;
209
  text-transform: uppercase;
210
  padding: 9px 20px;
211
- border-radius: 8px;
212
- border: 1px solid var(--border-1);
213
- background: var(--bg-2);
214
  color: var(--pulse);
215
  cursor: pointer;
216
- transition: all 0.2s ease;
 
 
 
 
 
 
 
217
  }
218
 
219
  .demo-btn:hover:not(:disabled) {
220
  background: var(--pulse);
221
- color: var(--bg-0);
222
  border-color: var(--pulse);
223
  box-shadow: var(--glow-pulse);
224
  transform: none;
@@ -276,14 +315,21 @@
276
  /* Ingest drawer */
277
  .ingest-drawer {
278
  margin-top: 10px;
279
- background: var(--bg-2);
280
- border: 1px solid var(--border-1);
281
- border-radius: 10px;
282
  padding: 14px;
283
  display: flex;
284
  flex-direction: column;
285
  gap: 10px;
286
  animation: soma-rise 0.25s ease both;
 
 
 
 
 
 
 
287
  }
288
 
289
  .ingest-hint {
@@ -295,9 +341,9 @@
295
 
296
  .ingest-textarea {
297
  width: 100%;
298
- background: var(--bg-1);
299
- border: 1px solid var(--border-0);
300
- border-radius: 8px;
301
  color: var(--text-0);
302
  font-family: var(--font-body);
303
  font-size: 0.82rem;
@@ -306,6 +352,13 @@
306
  outline: none;
307
  line-height: 1.6;
308
  transition: border-color 0.2s ease;
 
 
 
 
 
 
 
309
  }
310
 
311
  .ingest-textarea:focus { border-color: var(--border-1); }
 
83
  }
84
 
85
  .msg.user .msg-bubble {
86
+ background: rgba(232, 97, 77, 0.15);
87
+ border: 1px solid rgba(232, 97, 77, 0.25);
88
  border-bottom-right-radius: 3px;
89
+ box-shadow: 0 4px 16px rgba(0,0,0,0.08);
90
+ backdrop-filter: blur(10px);
91
+ -webkit-backdrop-filter: blur(10px);
92
  }
93
 
94
  [data-theme="light"] .msg.user .msg-bubble {
95
+ background: rgba(232, 97, 77, 0.12);
96
+ border-color: rgba(232, 97, 77, 0.2);
97
+ box-shadow: 0 2px 10px rgba(0,0,0,0.05);
98
  }
99
 
100
  [data-theme="light"] .msg.soma .msg-bubble {
101
+ background: rgba(255, 255, 255, 0.65);
102
+ border-color: rgba(0, 0, 0, 0.06);
103
  border-left-color: var(--pulse);
104
+ box-shadow: 0 2px 12px rgba(0,0,0,0.05);
105
+ backdrop-filter: blur(12px);
106
+ -webkit-backdrop-filter: blur(12px);
107
  }
108
 
109
  .msg.soma .msg-bubble {
110
+ background: rgba(255, 255, 255, 0.55);
111
+ border: 1px solid rgba(255, 255, 255, 0.5);
112
  border-left: 2px solid var(--pulse);
113
  border-bottom-left-radius: 3px;
114
+ box-shadow: 0 4px 18px rgba(0,0,0,0.12);
115
+ backdrop-filter: blur(12px);
116
+ -webkit-backdrop-filter: blur(12px);
117
+ }
118
+
119
+ [data-theme="dark"] .msg.soma .msg-bubble {
120
+ background: rgba(25, 25, 40, 0.65);
121
+ border-color: rgba(255, 255, 255, 0.08);
122
+ border-left-color: var(--pulse);
123
  }
124
 
125
  /* ── Empty state ── */
 
152
  .chat-form {
153
  display: flex;
154
  align-items: center;
155
+ background: rgba(255, 255, 255, 0.6);
156
+ border: 1px solid rgba(255, 255, 255, 0.6);
157
+ border-radius: 14px;
158
  padding: 4px 4px 4px 14px;
159
  gap: 8px;
160
+ transition: border-color 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;
161
+ backdrop-filter: blur(12px);
162
+ -webkit-backdrop-filter: blur(12px);
163
+ }
164
+
165
+ [data-theme="dark"] .chat-form {
166
+ background: rgba(25, 25, 40, 0.65);
167
+ border-color: rgba(255, 255, 255, 0.08);
168
  }
169
 
170
  .chat-form:focus-within {
171
+ border-color: rgba(232, 97, 77, 0.3);
172
+ box-shadow: 0 0 0 2px rgba(232, 97, 77, 0.1);
173
+ background: rgba(255, 255, 255, 0.75);
174
+ }
175
+
176
+ [data-theme="dark"] .chat-form:focus-within {
177
+ background: rgba(35, 35, 55, 0.75);
178
+ border-color: rgba(232, 97, 77, 0.3);
179
  }
180
 
181
  .chat-input {
 
197
 
198
  .chat-submit {
199
  padding: 9px 18px;
200
+ border-radius: 10px;
201
+ background: rgba(232, 97, 77, 0.2);
202
+ border: 1px solid rgba(232, 97, 77, 0.3);
203
+ color: var(--pulse);
204
  font-family: var(--font-mono);
205
  font-size: 0.6rem;
206
  font-weight: 700;
207
  letter-spacing: 0.1em;
208
  text-transform: uppercase;
209
  cursor: pointer;
210
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
211
  flex-shrink: 0;
212
+ backdrop-filter: blur(8px);
213
+ -webkit-backdrop-filter: blur(8px);
214
+ }
215
+
216
+ [data-theme="dark"] .chat-submit {
217
+ background: rgba(232, 97, 77, 0.12);
218
+ border-color: rgba(232, 97, 77, 0.2);
219
  }
220
 
221
  .chat-submit:hover:not(:disabled) {
222
  background: var(--pulse);
223
+ color: #fff;
224
  border-color: var(--pulse);
225
  box-shadow: var(--glow-pulse);
226
  transform: none;
 
240
  letter-spacing: 0.1em;
241
  text-transform: uppercase;
242
  padding: 9px 20px;
243
+ border-radius: 10px;
244
+ border: 1px solid rgba(232, 97, 77, 0.3);
245
+ background: rgba(232, 97, 77, 0.15);
246
  color: var(--pulse);
247
  cursor: pointer;
248
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
249
+ backdrop-filter: blur(8px);
250
+ -webkit-backdrop-filter: blur(8px);
251
+ }
252
+
253
+ [data-theme="dark"] .demo-btn {
254
+ background: rgba(232, 97, 77, 0.1);
255
+ border-color: rgba(232, 97, 77, 0.2);
256
  }
257
 
258
  .demo-btn:hover:not(:disabled) {
259
  background: var(--pulse);
260
+ color: #fff;
261
  border-color: var(--pulse);
262
  box-shadow: var(--glow-pulse);
263
  transform: none;
 
315
  /* Ingest drawer */
316
  .ingest-drawer {
317
  margin-top: 10px;
318
+ background: rgba(255, 255, 255, 0.6);
319
+ border: 1px solid rgba(255, 255, 255, 0.6);
320
+ border-radius: 12px;
321
  padding: 14px;
322
  display: flex;
323
  flex-direction: column;
324
  gap: 10px;
325
  animation: soma-rise 0.25s ease both;
326
+ backdrop-filter: blur(12px);
327
+ -webkit-backdrop-filter: blur(12px);
328
+ }
329
+
330
+ [data-theme="dark"] .ingest-drawer {
331
+ background: rgba(25, 25, 40, 0.65);
332
+ border-color: rgba(255, 255, 255, 0.08);
333
  }
334
 
335
  .ingest-hint {
 
341
 
342
  .ingest-textarea {
343
  width: 100%;
344
+ background: rgba(255, 255, 255, 0.4);
345
+ border: 1px solid rgba(255, 255, 255, 0.5);
346
+ border-radius: 10px;
347
  color: var(--text-0);
348
  font-family: var(--font-body);
349
  font-size: 0.82rem;
 
352
  outline: none;
353
  line-height: 1.6;
354
  transition: border-color 0.2s ease;
355
+ backdrop-filter: blur(8px);
356
+ -webkit-backdrop-filter: blur(8px);
357
+ }
358
+
359
+ [data-theme="dark"] .ingest-textarea {
360
+ background: rgba(15, 15, 24, 0.4);
361
+ border-color: rgba(255, 255, 255, 0.06);
362
  }
363
 
364
  .ingest-textarea:focus { border-color: var(--border-1); }
frontend/src/index.css CHANGED
@@ -1,64 +1,85 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@1,400;1,600&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500;700&display=swap');
2
 
3
  /* ═══════════════════════════════════════════════════════════════
4
  SOMA β€” Theme System
5
- Dark: Calcium imaging / two-photon microscopy aesthetic
6
- Light: Histology lab / brain slice slide aesthetic
7
  ═══════════════════════════════════════════════════════════════ */
8
 
9
  :root {
10
- /* ── Dark theme (default) ── */
11
- --bg-0: #070504;
12
- --bg-1: #0d0a07;
13
- --bg-2: #161210;
14
- --bg-3: #1f1a16;
15
-
16
- --fire: #e07a38; /* Neuron firing β€” burnt orange */
17
- --pulse: #d4a853; /* Calcium indicator β€” amber */
18
- --calm: #4ecdc4; /* Inhibitory signal β€” teal */
19
- --synapse: #a87ecf; /* Synaptic vesicle β€” muted violet (used sparingly) */
20
- --error: #e05555;
21
-
22
- --text-0: #f2ece3;
23
- --text-1: #b8a990;
24
- --text-2: #6b5e4a;
25
-
26
- --border-0: rgba(212, 168, 83, 0.07);
27
- --border-1: rgba(212, 168, 83, 0.16);
28
- --border-2: rgba(224, 122, 56, 0.35);
29
-
30
- --glow-pulse: 0 0 20px rgba(212, 168, 83, 0.22);
31
- --glow-fire: 0 0 20px rgba(224, 122, 56, 0.28);
32
- --glow-calm: 0 0 14px rgba(78, 205, 196, 0.2);
33
-
34
- --font-display: 'Playfair Display', Georgia, serif;
 
 
 
 
 
 
 
 
35
  --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
36
  --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
 
 
 
 
 
37
  }
38
 
39
- [data-theme="light"] {
40
- --bg-0: #F2EFEB; /* near-white warm canvas */
41
- --bg-1: #F8F6F3; /* lighter panel */
42
- --bg-2: #FFFFFF; /* white card surface */
43
- --bg-3: #FFFFFF; /* elevated element */
 
 
 
 
 
 
 
44
 
45
- --fire: #E5533B; /* coral β€” primary accent */
46
- --pulse: #E5533B; /* coral β€” active/ring states */
47
- --calm: #5A8FA3; /* steel blue β€” secondary */
48
- --synapse: #9B72C0; /* violet β€” used sparingly */
49
- --error: #D93B22; /* deep coral β€” destructive */
50
 
51
- --text-0: #18130F; /* near-black */
52
- --text-1: #3D332B; /* dark warm brown */
53
- --text-2: #9A8C83; /* muted warm gray */
54
 
55
- --border-0: rgba(0, 0, 0, 0.06);
56
- --border-1: rgba(0, 0, 0, 0.10);
57
- --border-2: rgba(229, 83, 59, 0.22);
58
 
59
- --glow-pulse: 0 4px 24px rgba(229, 83, 59, 0.12);
60
- --glow-fire: 0 4px 20px rgba(229, 83, 59, 0.18);
61
- --glow-calm: 0 4px 14px rgba(90, 143, 163, 0.12);
 
 
 
 
62
  }
63
 
64
  /* ── Reset ── */
@@ -75,22 +96,16 @@ body {
75
  color: var(--text-0);
76
  height: 100vh;
77
  overflow: hidden;
78
- transition: background 0.45s ease, color 0.45s ease;
79
  -webkit-font-smoothing: antialiased;
80
  }
81
 
82
- [data-theme="light"] body,
83
- [data-theme="light"] {
84
- background: var(--bg-0);
85
- color: var(--text-0);
86
- }
87
-
88
  #root { height: 100%; }
89
 
90
  /* ── Typography helpers ── */
91
  .t-display {
92
  font-family: var(--font-display);
93
- font-style: italic;
94
  }
95
 
96
  .t-mono {
@@ -99,25 +114,24 @@ body {
99
 
100
  .t-label {
101
  font-family: var(--font-mono);
102
- font-size: 0.58rem;
103
- letter-spacing: 0.18em;
104
  text-transform: uppercase;
105
  color: var(--text-2);
106
  }
107
 
108
  .t-section {
109
- font-family: var(--font-display);
110
- font-style: italic;
111
- font-size: 0.82rem;
112
  color: var(--text-1);
113
  letter-spacing: 0.02em;
114
  }
115
 
116
  /* ── Scrollbar ── */
117
- ::-webkit-scrollbar { width: 3px; }
118
  ::-webkit-scrollbar-track { background: transparent; }
119
- ::-webkit-scrollbar-thumb { background: var(--border-1); border-radius: 2px; }
120
- ::-webkit-scrollbar-thumb:hover { background: var(--pulse); opacity: 0.5; }
121
 
122
  /* ── Base button ── */
123
  button {
@@ -125,58 +139,70 @@ button {
125
  background: transparent;
126
  color: var(--text-1);
127
  border: 1px solid var(--border-1);
128
- border-radius: 7px;
129
- padding: 7px 14px;
130
  font-size: 0.82rem;
 
131
  cursor: pointer;
132
- transition: background 0.2s ease, color 0.2s ease,
133
- border-color 0.2s ease, box-shadow 0.2s ease;
 
134
  }
135
 
136
  button:hover {
137
- background: var(--border-0);
138
  color: var(--text-0);
139
  border-color: var(--border-2);
 
140
  }
141
 
142
- button:active { opacity: 0.8; }
143
 
144
  button:disabled {
145
  opacity: 0.35;
146
  cursor: not-allowed;
147
- box-shadow: none;
148
  }
149
 
150
  /* ── Glass panel ── */
151
  .glass {
152
- background: var(--bg-1);
153
- border: 1px solid var(--border-0);
154
- border-radius: 12px;
155
- backdrop-filter: blur(12px);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
 
158
- /* ── Theme-aware transitions ── */
159
- .app-container,
160
- .app-container * {
161
- transition: background-color 0.4s ease, border-color 0.4s ease, color 0.4s ease;
 
162
  }
163
 
164
- /* ── 3D perspective base ── */
165
- .scene-3d {
166
- perspective: 1000px;
167
- perspective-origin: 50% 50%;
168
  }
169
 
170
- /* ── Organic noise texture ── */
171
- .noisy::after {
172
- content: '';
173
- position: absolute;
174
- inset: 0;
175
- border-radius: inherit;
176
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
177
- opacity: 0.025;
178
- pointer-events: none;
179
- mix-blend-mode: overlay;
180
  }
181
 
182
  /* ── Shared animations ── */
@@ -185,17 +211,12 @@ button:disabled {
185
  50% { opacity: 0.6; transform: scale(0.92); }
186
  }
187
 
188
- @keyframes soma-glow-on {
189
- from { box-shadow: none; }
190
- to { box-shadow: var(--glow-pulse); }
191
- }
192
-
193
  @keyframes soma-rise {
194
- from { opacity: 0; transform: translateY(10px) translateZ(-20px); }
195
- to { opacity: 1; transform: translateY(0) translateZ(0); }
196
  }
197
 
198
- @keyframes soma-flip-in {
199
- from { opacity: 0; transform: perspective(600px) rotateY(-18deg) translateZ(-30px); }
200
- to { opacity: 1; transform: perspective(600px) rotateY(0deg) translateZ(0); }
201
  }
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;700&display=swap');
2
 
3
  /* ═══════════════════════════════════════════════════════════════
4
  SOMA β€” Theme System
5
+ Inspired by NeuroFlow: clean, glassmorphic, warm cream + coral
 
6
  ═══════════════════════════════════════════════════════════════ */
7
 
8
  :root {
9
+ --bg-0: #F5F2EC;
10
+ --bg-1: #FAFAF8;
11
+ --bg-2: rgba(255, 255, 255, 0.65);
12
+ --bg-3: rgba(255, 255, 255, 0.85);
13
+
14
+ --fire: #E8614D;
15
+ --pulse: #E8614D;
16
+ --calm: #5A9EAD;
17
+ --synapse: #9B72C0;
18
+ --error: #DC3545;
19
+ --success: #34C38F;
20
+
21
+ --text-0: #1A1A2E;
22
+ --text-1: #3D3D56;
23
+ --text-2: #8E8E9A;
24
+
25
+ --border-0: rgba(0, 0, 0, 0.04);
26
+ --border-1: rgba(0, 0, 0, 0.06);
27
+ --border-2: rgba(232, 97, 77, 0.25);
28
+
29
+ --glass-bg: rgba(255, 255, 255, 0.6);
30
+ --glass-blur: 24px;
31
+ --glass-border: rgba(255, 255, 255, 0.7);
32
+
33
+ --glow-pulse: 0 8px 32px rgba(232, 97, 77, 0.12);
34
+ --glow-fire: 0 12px 40px rgba(232, 97, 77, 0.15);
35
+ --glow-calm: 0 8px 24px rgba(90, 158, 173, 0.12);
36
+
37
+ --shadow-sm: 0 2px 8px rgba(0,0,0,0.03), 0 1px 3px rgba(0,0,0,0.02);
38
+ --shadow-md: 0 8px 24px rgba(0,0,0,0.05), 0 2px 8px rgba(0,0,0,0.03);
39
+ --shadow-lg: 0 16px 48px rgba(0,0,0,0.08), 0 4px 16px rgba(0,0,0,0.04);
40
+
41
+ --font-display: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
42
  --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
43
  --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
44
+
45
+ --radius-sm: 8px;
46
+ --radius-md: 14px;
47
+ --radius-lg: 20px;
48
+ --radius-xl: 28px;
49
  }
50
 
51
+ [data-theme="dark"] {
52
+ --bg-0: #0F0F18;
53
+ --bg-1: #16161F;
54
+ --bg-2: rgba(25, 25, 40, 0.8);
55
+ --bg-3: rgba(35, 35, 55, 0.88);
56
+
57
+ --fire: #FF6B56;
58
+ --pulse: #FF6B56;
59
+ --calm: #4ECDC4;
60
+ --synapse: #A87ECF;
61
+ --error: #FF5555;
62
+ --success: #34C38F;
63
 
64
+ --text-0: #F0EEF2;
65
+ --text-1: #B0B0C0;
66
+ --text-2: #6A6A80;
 
 
67
 
68
+ --border-0: rgba(255, 255, 255, 0.05);
69
+ --border-1: rgba(255, 255, 255, 0.08);
70
+ --border-2: rgba(255, 107, 86, 0.3);
71
 
72
+ --glass-bg: rgba(20, 20, 35, 0.65);
73
+ --glass-blur: 24px;
74
+ --glass-border: rgba(255, 255, 255, 0.08);
75
 
76
+ --glow-pulse: 0 8px 32px rgba(255, 107, 86, 0.15);
77
+ --glow-fire: 0 12px 40px rgba(255, 107, 86, 0.18);
78
+ --glow-calm: 0 8px 24px rgba(78, 205, 196, 0.15);
79
+
80
+ --shadow-sm: 0 2px 8px rgba(0,0,0,0.3);
81
+ --shadow-md: 0 8px 24px rgba(0,0,0,0.4);
82
+ --shadow-lg: 0 16px 48px rgba(0,0,0,0.5);
83
  }
84
 
85
  /* ── Reset ── */
 
96
  color: var(--text-0);
97
  height: 100vh;
98
  overflow: hidden;
99
+ transition: background 0.4s ease, color 0.4s ease;
100
  -webkit-font-smoothing: antialiased;
101
  }
102
 
 
 
 
 
 
 
103
  #root { height: 100%; }
104
 
105
  /* ── Typography helpers ── */
106
  .t-display {
107
  font-family: var(--font-display);
108
+ font-weight: 800;
109
  }
110
 
111
  .t-mono {
 
114
 
115
  .t-label {
116
  font-family: var(--font-mono);
117
+ font-size: 0.6rem;
118
+ letter-spacing: 0.14em;
119
  text-transform: uppercase;
120
  color: var(--text-2);
121
  }
122
 
123
  .t-section {
124
+ font-size: 0.75rem;
125
+ font-weight: 600;
 
126
  color: var(--text-1);
127
  letter-spacing: 0.02em;
128
  }
129
 
130
  /* ── Scrollbar ── */
131
+ ::-webkit-scrollbar { width: 4px; }
132
  ::-webkit-scrollbar-track { background: transparent; }
133
+ ::-webkit-scrollbar-thumb { background: var(--border-1); border-radius: 4px; }
134
+ ::-webkit-scrollbar-thumb:hover { background: var(--pulse); }
135
 
136
  /* ── Base button ── */
137
  button {
 
139
  background: transparent;
140
  color: var(--text-1);
141
  border: 1px solid var(--border-1);
142
+ border-radius: var(--radius-sm);
143
+ padding: 8px 16px;
144
  font-size: 0.82rem;
145
+ font-weight: 500;
146
  cursor: pointer;
147
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
148
+ backdrop-filter: blur(8px);
149
+ -webkit-backdrop-filter: blur(8px);
150
  }
151
 
152
  button:hover {
153
+ background: rgba(255, 255, 255, 0.12);
154
  color: var(--text-0);
155
  border-color: var(--border-2);
156
+ box-shadow: var(--glow-pulse);
157
  }
158
 
159
+ button:active { transform: scale(0.96); }
160
 
161
  button:disabled {
162
  opacity: 0.35;
163
  cursor: not-allowed;
 
164
  }
165
 
166
  /* ── Glass panel ── */
167
  .glass {
168
+ background: var(--glass-bg);
169
+ border: 1px solid var(--glass-border);
170
+ border-radius: var(--radius-md);
171
+ backdrop-filter: blur(var(--glass-blur));
172
+ -webkit-backdrop-filter: blur(var(--glass-blur));
173
+ box-shadow: var(--shadow-sm);
174
+ }
175
+
176
+ /* ── Enhanced glass card ── */
177
+ .glass-card {
178
+ background: var(--glass-bg);
179
+ border: 1px solid var(--glass-border);
180
+ border-radius: var(--radius-md);
181
+ backdrop-filter: blur(var(--glass-blur)) saturate(1.1);
182
+ -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(1.1);
183
+ box-shadow:
184
+ 0 0 1px rgba(255, 255, 255, 0.3) inset,
185
+ var(--shadow-md);
186
+ transition: all 0.3s cubic-bezier(0.23, 1, 0.320, 1);
187
  }
188
 
189
+ .glass-card:hover {
190
+ border-color: rgba(255, 255, 255, 0.85);
191
+ box-shadow:
192
+ 0 0 1px rgba(255, 255, 255, 0.4) inset,
193
+ var(--shadow-lg);
194
  }
195
 
196
+ /* ── Light frosted glass ── */
197
+ [data-theme="light"] .glass-card {
198
+ background: rgba(255, 255, 255, 0.68);
199
+ border-color: rgba(255, 255, 255, 0.75);
200
  }
201
 
202
+ /* ── Dark frosted glass ── */
203
+ [data-theme="dark"] .glass-card {
204
+ background: rgba(25, 25, 40, 0.75);
205
+ border-color: rgba(255, 255, 255, 0.1);
 
 
 
 
 
 
206
  }
207
 
208
  /* ── Shared animations ── */
 
211
  50% { opacity: 0.6; transform: scale(0.92); }
212
  }
213
 
 
 
 
 
 
214
  @keyframes soma-rise {
215
+ from { opacity: 0; transform: translateY(12px); }
216
+ to { opacity: 1; transform: translateY(0); }
217
  }
218
 
219
+ @keyframes fade-in {
220
+ from { opacity: 0; }
221
+ to { opacity: 1; }
222
  }