@memoryblock/web 0.1.0-beta

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.
@@ -0,0 +1,1871 @@
1
+ /* memoryblock web ui — light & dark themes, wide responsive layout */
2
+
3
+ /* ===== Theme Tokens ===== */
4
+
5
+ :root {
6
+ --ai-glow-1: #ffb6ff;
7
+ --ai-glow-2: #b344ff;
8
+ --ai-glow-3: #ff4a5a;
9
+ --ai-glow-4: #4285f4;
10
+ }
11
+
12
+ [data-theme="light"] {
13
+ --bg: #f5f5f7;
14
+ --surface: rgba(255, 255, 255, 0.7);
15
+ --surface-hover: rgba(255, 255, 255, 0.9);
16
+ --border: rgba(0, 0, 0, 0.08);
17
+ --text: #1d1d1f;
18
+ --text-dim: #86868b;
19
+ --accent: #7C3AED;
20
+ --accent-glow: rgba(124, 58, 237, 0.15);
21
+ --success: #34c759;
22
+ --warning: #ffb340;
23
+ --error: #ff3b30;
24
+ --code-bg: #f0f0f5;
25
+ --glass-blur: blur(20px);
26
+ --card-bg: rgba(255,255,255,0.7);
27
+ --hover-bg: rgba(255,255,255,0.95);
28
+ --ai-gradient: linear-gradient(135deg, var(--ai-glow-1), var(--ai-glow-2), var(--ai-glow-3), var(--ai-glow-4));
29
+ }
30
+
31
+ [data-theme="dark"] {
32
+ --bg: #000000;
33
+ --surface: rgba(28, 28, 30, 0.6);
34
+ --surface-hover: rgba(44, 44, 46, 0.8);
35
+ --border: rgba(255, 255, 255, 0.1);
36
+ --text: #f5f5f7;
37
+ --text-dim: #86868b;
38
+ --accent: #AF52DE;
39
+ --accent-glow: rgba(175, 82, 222, 0.2);
40
+ --success: #32d74b;
41
+ --warning: #ffd60a;
42
+ --error: #ff453a;
43
+ --code-bg: #1c1c1e;
44
+ --glass-blur: blur(20px);
45
+ --card-bg: rgba(28, 28, 30, 0.6);
46
+ --hover-bg: rgba(44, 44, 46, 0.8);
47
+ --ai-gradient: linear-gradient(135deg, var(--ai-glow-1), var(--ai-glow-2), var(--ai-glow-3), var(--ai-glow-4));
48
+ }
49
+
50
+ /* ===== Reset & Base ===== */
51
+
52
+ * { margin: 0; padding: 0; box-sizing: border-box; }
53
+
54
+ body {
55
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
56
+ background: var(--bg);
57
+ color: var(--text);
58
+ min-height: 100vh;
59
+ -webkit-font-smoothing: antialiased;
60
+ transition: background 0.4s ease, color 0.4s ease;
61
+ }
62
+
63
+ /* AI ambient background */
64
+ body::before {
65
+ content: '';
66
+ position: fixed;
67
+ top: -50%;
68
+ left: -50%;
69
+ width: 200%;
70
+ height: 200%;
71
+ background: radial-gradient(circle at center, var(--accent-glow) 0%, transparent 60%);
72
+ opacity: 0.5;
73
+ z-index: -1;
74
+ pointer-events: none;
75
+ animation: pulseAmbient 15s infinite alternate ease-in-out;
76
+ }
77
+
78
+ @keyframes pulseAmbient {
79
+ 0% { transform: scale(1) translate(0, 0); }
80
+ 100% { transform: scale(1.1) translate(2%, 2%); }
81
+ }
82
+
83
+ #app {
84
+ width: 100%;
85
+ max-width: 1160px;
86
+ margin: 0 auto;
87
+ padding: clamp(16px, 5vw, 60px);
88
+ padding-top: 32px;
89
+ }
90
+
91
+ /* ===== Views ===== */
92
+
93
+ .view { display: none; }
94
+ .view.active { display: block; animation: smoothFadeIn 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
95
+ .tab { display: none; }
96
+ .tab.active { display: block; animation: smoothFadeIn 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
97
+
98
+ @keyframes smoothFadeIn {
99
+ 0% { opacity: 0; transform: translateY(10px) scale(0.99); }
100
+ 100% { opacity: 1; transform: translateY(0) scale(1); }
101
+ }
102
+
103
+ /* ===== Auth ===== */
104
+
105
+ .auth-wrapper {
106
+ display: flex;
107
+ justify-content: center;
108
+ align-items: center;
109
+ min-height: 80vh;
110
+ }
111
+
112
+ .auth-card {
113
+ background: var(--surface);
114
+ border: 1px solid var(--border);
115
+ border-radius: 20px;
116
+ padding: 48px 44px;
117
+ text-align: center;
118
+ width: 100%;
119
+ max-width: 420px;
120
+ }
121
+
122
+ .brand {
123
+ font-size: 1.5rem;
124
+ font-weight: 600;
125
+ color: var(--accent);
126
+ margin-bottom: 24px;
127
+ letter-spacing: -0.02em;
128
+ }
129
+
130
+ .brand-small {
131
+ font-size: 0.9rem;
132
+ font-weight: 500;
133
+ color: var(--accent);
134
+ }
135
+
136
+ .auth-hint {
137
+ color: var(--text-dim);
138
+ font-size: 0.85rem;
139
+ margin-bottom: 20px;
140
+ }
141
+
142
+ .token-input {
143
+ width: 100%;
144
+ background: var(--bg);
145
+ border: 1px solid var(--border);
146
+ border-radius: 12px;
147
+ color: var(--text);
148
+ font-family: 'SF Mono', 'Fira Code', monospace;
149
+ font-size: 0.85rem;
150
+ padding: 14px 16px;
151
+ outline: none;
152
+ transition: border-color 0.2s, box-shadow 0.2s;
153
+ }
154
+
155
+ .token-input:focus {
156
+ border-color: var(--accent);
157
+ box-shadow: 0 0 0 3px var(--accent-glow);
158
+ }
159
+
160
+ .btn-primary {
161
+ width: 100%;
162
+ background: var(--accent);
163
+ color: white;
164
+ border: none;
165
+ border-radius: 12px;
166
+ padding: 12px;
167
+ font-family: inherit;
168
+ font-size: 0.85rem;
169
+ font-weight: 500;
170
+ cursor: pointer;
171
+ margin-top: 12px;
172
+ transition: opacity 0.2s, transform 0.1s;
173
+ }
174
+
175
+ .btn-primary:hover { opacity: 0.9; }
176
+ .btn-primary:active { transform: scale(0.98); }
177
+
178
+ .error-text {
179
+ color: var(--error);
180
+ font-size: 0.8rem;
181
+ margin-top: 12px;
182
+ min-height: 20px;
183
+ }
184
+
185
+ /* ===== Header ===== */
186
+
187
+ header {
188
+ display: flex;
189
+ justify-content: space-between;
190
+ align-items: center;
191
+ margin-bottom: 28px;
192
+ padding-bottom: 16px;
193
+ border-bottom: 1px solid var(--border);
194
+ }
195
+
196
+ .header-left {
197
+ display: flex;
198
+ align-items: center;
199
+ gap: 16px;
200
+ }
201
+
202
+ nav { display: flex; gap: 4px; }
203
+
204
+ .nav-btn {
205
+ background: transparent;
206
+ border: none;
207
+ color: var(--text-dim);
208
+ font-family: inherit;
209
+ font-size: 0.8rem;
210
+ padding: 6px 14px;
211
+ border-radius: 8px;
212
+ cursor: pointer;
213
+ transition: all 0.2s;
214
+ }
215
+
216
+ .nav-btn:hover { color: var(--text); background: var(--surface); }
217
+ .nav-btn.active { color: var(--text); background: var(--surface); }
218
+
219
+ .theme-toggle {
220
+ background: var(--surface);
221
+ border: 1px solid var(--border);
222
+ border-radius: 8px;
223
+ padding: 5px 10px;
224
+ cursor: pointer;
225
+ font-size: 0.8rem;
226
+ line-height: 1;
227
+ transition: all 0.2s;
228
+ }
229
+
230
+ .theme-toggle:hover { border-color: var(--accent); }
231
+
232
+ /* ===== Block Cards ===== */
233
+
234
+ .blocks-grid {
235
+ display: grid;
236
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
237
+ gap: 16px;
238
+ }
239
+
240
+ .block-card {
241
+ background: var(--surface);
242
+ backdrop-filter: var(--glass-blur);
243
+ -webkit-backdrop-filter: var(--glass-blur);
244
+ border: 1px solid var(--border);
245
+ border-radius: 20px;
246
+ padding: 24px;
247
+ cursor: pointer;
248
+ transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
249
+ display: flex;
250
+ flex-direction: column;
251
+ justify-content: flex-start;
252
+ align-items: flex-start;
253
+ position: relative;
254
+ overflow: hidden;
255
+ }
256
+
257
+ .block-card::before {
258
+ content: '';
259
+ position: absolute;
260
+ top: 0; left: 0; right: 0;
261
+ height: 1px;
262
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
263
+ opacity: 0;
264
+ transition: opacity 0.3s;
265
+ }
266
+
267
+ .block-card:hover {
268
+ border-color: var(--accent);
269
+ transform: translateY(-2px);
270
+ box-shadow: 0 12px 32px var(--accent-glow);
271
+ }
272
+ .block-card:hover::before { opacity: 1; }
273
+
274
+ .block-info { width: 100%; display: flex; flex-direction: column; }
275
+ .block-emoji { font-size: 1.4rem; position: absolute; right: 24px; top: 24px; opacity: 0.8; }
276
+ .block-name { font-weight: 600; font-size: 1.1rem; letter-spacing: -0.01em; margin-bottom: 4px;}
277
+ .block-desc { color: var(--text-dim); font-size: 0.85rem; line-height: 1.4; margin-bottom: 16px; display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
278
+
279
+ .block-details-tags {
280
+ display: flex;
281
+ flex-wrap: wrap;
282
+ gap: 8px;
283
+ margin-bottom: 12px;
284
+ }
285
+
286
+ .tag {
287
+ display: inline-flex;
288
+ align-items: center;
289
+ gap: 6px;
290
+ background: var(--code-bg);
291
+ padding: 6px 10px;
292
+ border-radius: 8px;
293
+ font-size: 0.75rem;
294
+ color: var(--text);
295
+ border: 1px solid var(--border);
296
+ font-weight: 500;
297
+ }
298
+ .tag-icon { opacity: 0.8; }
299
+
300
+
301
+ .block-meta {
302
+ width: 100%;
303
+ display: flex;
304
+ justify-content: space-between;
305
+ align-items: center;
306
+ font-size: 0.75rem;
307
+ color: var(--text-dim);
308
+ margin-top: auto;
309
+ padding-top: 16px;
310
+ border-top: 1px solid var(--border);
311
+ }
312
+
313
+ .status-indicator {
314
+ display: flex;
315
+ align-items: center;
316
+ gap: 6px;
317
+ font-weight: 500;
318
+ }
319
+
320
+ .status-dot {
321
+ display: inline-block;
322
+ width: 8px;
323
+ height: 8px;
324
+ border-radius: 50%;
325
+ }
326
+ .status-dot.active { background: var(--success); box-shadow: 0 0 8px var(--success); animation: pulse 2s infinite; }
327
+ .status-dot.sleeping { background: var(--text-dim); }
328
+ .status-dot.error { background: var(--error); }
329
+
330
+ @keyframes pulse {
331
+ 0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(52, 199, 89, 0.4); }
332
+ 70% { transform: scale(1); box-shadow: 0 0 0 6px rgba(52, 199, 89, 0); }
333
+ 100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(52, 199, 89, 0); }
334
+ }
335
+
336
+ /* ===== Block Detail ===== */
337
+
338
+ .back-btn {
339
+ background: none;
340
+ border: none;
341
+ color: var(--text-dim);
342
+ font-family: inherit;
343
+ font-size: 0.8rem;
344
+ cursor: pointer;
345
+ padding: 6px 0;
346
+ margin-bottom: 16px;
347
+ transition: color 0.2s;
348
+ }
349
+
350
+ .back-btn:hover { color: var(--text); }
351
+
352
+ .detail-top-nav {
353
+ margin-bottom: 12px;
354
+ }
355
+
356
+ .detail-header-block {
357
+ display: flex;
358
+ flex-direction: column;
359
+ align-items: flex-start;
360
+ gap: 16px;
361
+ margin-bottom: 32px;
362
+ width: 100%;
363
+ }
364
+
365
+ .detail-header-info {
366
+ width: 100%;
367
+ }
368
+
369
+ .detail-emoji { font-size: 2rem; }
370
+ .detail-title { font-size: 1.6rem; font-weight: 600; font-family: 'Outfit', sans-serif; letter-spacing: -0.02em; }
371
+ .detail-subtitle { font-size: 0.95rem; color: var(--text-dim); margin-top: 6px; line-height: 1.5; max-width: 800px; }
372
+
373
+ .detail-section {
374
+ background: var(--surface);
375
+ border: 1px solid var(--border);
376
+ border-radius: 14px;
377
+ padding: 18px 20px;
378
+ margin-bottom: 10px;
379
+ }
380
+
381
+ .detail-section h4 {
382
+ font-size: 0.7rem;
383
+ font-weight: 500;
384
+ color: var(--text-dim);
385
+ text-transform: uppercase;
386
+ letter-spacing: 0.05em;
387
+ margin-bottom: 10px;
388
+ }
389
+
390
+ .stat-grid {
391
+ display: grid;
392
+ grid-template-columns: 1fr 1fr;
393
+ gap: 8px;
394
+ }
395
+
396
+ .stat {
397
+ text-align: center;
398
+ padding: 12px;
399
+ background: var(--bg);
400
+ border-radius: 10px;
401
+ }
402
+
403
+ .stat-value { font-size: 1.1rem; font-weight: 600; color: var(--accent); }
404
+ .stat-label { font-size: 0.65rem; color: var(--text-dim); margin-top: 2px; }
405
+
406
+ .memory-content {
407
+ font-size: 0.8rem;
408
+ color: var(--text-dim);
409
+ line-height: 1.6;
410
+ white-space: pre-wrap;
411
+ max-height: 200px;
412
+ overflow-y: auto;
413
+ }
414
+
415
+ /* ===== Settings ===== */
416
+
417
+ .settings-panel {
418
+ background: var(--surface);
419
+ border: 1px solid var(--border);
420
+ border-radius: 14px;
421
+ padding: 22px;
422
+ margin-bottom: 10px;
423
+ }
424
+
425
+ .settings-panel h3 {
426
+ font-size: 0.7rem;
427
+ font-weight: 500;
428
+ color: var(--text-dim);
429
+ text-transform: uppercase;
430
+ letter-spacing: 0.05em;
431
+ margin-bottom: 16px;
432
+ }
433
+
434
+ .setting-row {
435
+ display: flex;
436
+ justify-content: space-between;
437
+ align-items: center;
438
+ padding: 10px 0;
439
+ border-bottom: 1px solid var(--border);
440
+ font-size: 0.85rem;
441
+ }
442
+
443
+ .setting-row:last-child { border-bottom: none; }
444
+ .dim { color: var(--text-dim); font-size: 0.75rem; }
445
+
446
+ .btn-small {
447
+ background: var(--bg);
448
+ border: 1px solid var(--border);
449
+ color: var(--text-dim);
450
+ font-family: inherit;
451
+ font-size: 0.75rem;
452
+ padding: 5px 12px;
453
+ border-radius: 8px;
454
+ cursor: pointer;
455
+ transition: all 0.2s;
456
+ }
457
+
458
+ .btn-small:hover { color: var(--accent); border-color: var(--accent); }
459
+ .btn-danger:hover { color: var(--error); border-color: var(--error); }
460
+
461
+ .theme-selector {
462
+ display: flex;
463
+ gap: 6px;
464
+ }
465
+
466
+ .theme-option {
467
+ background: var(--bg);
468
+ border: 1px solid var(--border);
469
+ border-radius: 8px;
470
+ padding: 5px 12px;
471
+ font-family: inherit;
472
+ font-size: 0.75rem;
473
+ color: var(--text-dim);
474
+ cursor: pointer;
475
+ transition: all 0.2s;
476
+ }
477
+
478
+ .theme-option:hover { border-color: var(--accent); color: var(--text); }
479
+ .theme-option.active { border-color: var(--accent); color: var(--accent); background: var(--accent-glow); }
480
+
481
+ /* ===== Utilities ===== */
482
+
483
+ .loading {
484
+ text-align: center;
485
+ color: var(--text-dim);
486
+ padding: 40px;
487
+ font-size: 0.85rem;
488
+ }
489
+
490
+ .empty-state {
491
+ text-align: center;
492
+ color: var(--text-dim);
493
+ padding: 60px 20px;
494
+ font-size: 0.85rem;
495
+ line-height: 1.8;
496
+ }
497
+
498
+ .empty-state code {
499
+ background: var(--code-bg);
500
+ padding: 2px 6px;
501
+ border-radius: 4px;
502
+ font-size: 0.8rem;
503
+ }
504
+
505
+ /* ===== Blocks Header ===== */
506
+
507
+ .blocks-header {
508
+ display: flex;
509
+ justify-content: flex-end;
510
+ margin-bottom: 12px;
511
+ }
512
+
513
+ /* ===== Action Bar ===== */
514
+
515
+ .action-bar {
516
+ display: flex;
517
+ flex-wrap: wrap;
518
+ gap: 10px;
519
+ align-items: center;
520
+ }
521
+
522
+ .action-btn {
523
+ display: inline-flex;
524
+ align-items: center;
525
+ justify-content: center;
526
+ gap: 6px;
527
+ padding: 10px 18px;
528
+ border: 1px solid var(--border);
529
+ border-radius: 6px;
530
+ background: var(--card-bg);
531
+ color: var(--text);
532
+ cursor: pointer;
533
+ font-size: 0.85rem;
534
+ transition: all 0.2s ease;
535
+ }
536
+
537
+ .action-btn:hover {
538
+ background: var(--hover-bg);
539
+ border-color: var(--text-dim);
540
+ }
541
+
542
+ .action-btn:disabled {
543
+ opacity: 0.5;
544
+ cursor: not-allowed;
545
+ }
546
+
547
+ .action-btn.primary {
548
+ background: var(--accent);
549
+ color: #fff;
550
+ border-color: var(--accent);
551
+ }
552
+
553
+ .action-btn.primary:hover {
554
+ opacity: 0.85;
555
+ }
556
+
557
+ .action-btn.danger {
558
+ color: #f44;
559
+ border-color: #f442;
560
+ }
561
+
562
+ .action-btn.danger:hover {
563
+ background: #f441;
564
+ }
565
+
566
+ /* ===== Create Block Form ===== */
567
+
568
+ .create-block-view {
569
+ max-width: 480px;
570
+ margin: 0 auto;
571
+ }
572
+
573
+ .view-header {
574
+ display: flex;
575
+ align-items: center;
576
+ gap: 16px;
577
+ margin-bottom: 24px;
578
+ }
579
+
580
+ .view-header h2 {
581
+ font-size: 1.1rem;
582
+ font-weight: 600;
583
+ margin: 0;
584
+ }
585
+
586
+ .create-form {
587
+ display: flex;
588
+ flex-direction: column;
589
+ gap: 20px;
590
+ }
591
+
592
+ .form-group {
593
+ display: flex;
594
+ flex-direction: column;
595
+ gap: 6px;
596
+ }
597
+
598
+ .form-group label {
599
+ font-size: 0.85rem;
600
+ font-weight: 500;
601
+ color: var(--text-dim);
602
+ }
603
+
604
+ .form-input {
605
+ padding: 10px 14px;
606
+ border: 1px solid var(--border);
607
+ border-radius: 6px;
608
+ background: var(--card-bg);
609
+ color: var(--text);
610
+ font-size: 0.95rem;
611
+ font-family: inherit;
612
+ transition: border-color 0.2s;
613
+ width: 100%;
614
+ }
615
+
616
+ select.form-input {
617
+ appearance: none;
618
+ -webkit-appearance: none;
619
+ background-image: url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%2386868b%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E");
620
+ background-repeat: no-repeat;
621
+ background-position: right 14px top 50%;
622
+ background-size: 10px auto;
623
+ padding-right: 30px;
624
+ }
625
+
626
+ .form-input:focus {
627
+ outline: none;
628
+ border-color: var(--accent);
629
+ }
630
+
631
+ .form-input.invalid {
632
+ border-color: #f44;
633
+ }
634
+
635
+ .form-hint {
636
+ font-size: 0.75rem;
637
+ color: var(--text-dim);
638
+ }
639
+
640
+ .form-error {
641
+ padding: 10px 14px;
642
+ background: #f441;
643
+ border: 1px solid #f443;
644
+ border-radius: 6px;
645
+ color: #f88;
646
+ font-size: 0.85rem;
647
+ }
648
+
649
+ .form-actions {
650
+ display: flex;
651
+ justify-content: flex-end;
652
+ }
653
+
654
+ /* ===== Archive View ===== */
655
+
656
+ .archive-view {
657
+ max-width: 640px;
658
+ margin: 0 auto;
659
+ }
660
+
661
+ .archive-list {
662
+ display: flex;
663
+ flex-direction: column;
664
+ gap: 8px;
665
+ }
666
+
667
+ .archive-card {
668
+ display: flex;
669
+ justify-content: space-between;
670
+ align-items: center;
671
+ padding: 14px 18px;
672
+ background: var(--card-bg);
673
+ border: 1px solid var(--border);
674
+ border-radius: 8px;
675
+ transition: border-color 0.15s;
676
+ }
677
+
678
+ .archive-card:hover {
679
+ border-color: var(--text-dim);
680
+ }
681
+
682
+ .archive-info {
683
+ display: flex;
684
+ flex-direction: column;
685
+ gap: 2px;
686
+ }
687
+
688
+ .archive-name {
689
+ font-weight: 500;
690
+ font-size: 0.95rem;
691
+ }
692
+
693
+ .archive-date {
694
+ font-size: 0.8rem;
695
+ color: var(--text-dim);
696
+ }
697
+
698
+ .archive-actions {
699
+ display: flex;
700
+ gap: 8px;
701
+ }
702
+
703
+ /* ===== Empty State ===== */
704
+
705
+ .empty-state {
706
+ text-align: center;
707
+ padding: 48px 24px;
708
+ color: var(--text-dim);
709
+ }
710
+
711
+ .empty-icon {
712
+ font-size: 2.5rem;
713
+ display: block;
714
+ margin-bottom: 12px;
715
+ opacity: 0.4;
716
+ }
717
+
718
+ .empty-state p {
719
+ margin: 4px 0;
720
+ }
721
+
722
+ .empty-state .dim {
723
+ font-size: 0.85rem;
724
+ opacity: 0.6;
725
+ }
726
+
727
+ /* ===== Toast Notification ===== */
728
+
729
+ .toast {
730
+ position: fixed;
731
+ bottom: -60px;
732
+ left: 50%;
733
+ transform: translateX(-50%);
734
+ padding: 10px 24px;
735
+ background: var(--card-bg);
736
+ border: 1px solid var(--border);
737
+ border-radius: 8px;
738
+ color: var(--text);
739
+ font-size: 0.85rem;
740
+ box-shadow: 0 4px 20px rgba(0,0,0,0.3);
741
+ transition: bottom 0.3s ease;
742
+ z-index: 9999;
743
+ }
744
+
745
+ .toast.visible {
746
+ bottom: 24px;
747
+ }
748
+
749
+ /* ===== Animations ===== */
750
+
751
+ @keyframes fadeIn {
752
+ from { opacity: 0; transform: translateY(6px); }
753
+ to { opacity: 1; transform: translateY(0); }
754
+ }
755
+
756
+ /* ===== Scrollbar ===== */
757
+
758
+ ::-webkit-scrollbar { width: 4px; }
759
+ ::-webkit-scrollbar-track { background: transparent; }
760
+ ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
761
+
762
+ /* ===== Responsive ===== */
763
+
764
+ @media (max-width: 640px) {
765
+ #app { padding: 16px; padding-top: 20px; }
766
+ .auth-card { padding: 32px 24px; }
767
+ .stat-grid { grid-template-columns: 1fr 1fr; gap: 6px; }
768
+ .block-card { padding: 14px 16px; }
769
+ .setting-row { flex-direction: column; align-items: flex-start; gap: 8px; }
770
+ .action-bar { flex-wrap: wrap; }
771
+ .archive-card { flex-direction: column; align-items: flex-start; gap: 10px; }
772
+ }
773
+
774
+ /* ===== Setup Wizard ===== */
775
+
776
+ .setup-overlay {
777
+ position: fixed; inset: 0;
778
+ display: flex; align-items: center; justify-content: center;
779
+ background: var(--bg);
780
+ z-index: 1000;
781
+ }
782
+
783
+ .setup-container {
784
+ width: 100%; max-width: 520px;
785
+ padding: 20px;
786
+ }
787
+
788
+ .setup-progress {
789
+ display: flex; justify-content: center; gap: 8px;
790
+ margin-bottom: 24px;
791
+ }
792
+ .setup-dot {
793
+ width: 8px; height: 8px; border-radius: 50%;
794
+ background: var(--border);
795
+ transition: all 0.3s ease;
796
+ }
797
+ .setup-dot.active {
798
+ background: var(--accent);
799
+ box-shadow: 0 0 8px var(--accent-glow);
800
+ transform: scale(1.3);
801
+ }
802
+ .setup-dot.done { background: var(--success); }
803
+
804
+ .setup-card {
805
+ background: var(--surface);
806
+ border: 1px solid var(--border);
807
+ border-radius: 16px;
808
+ padding: 40px 36px;
809
+ box-shadow:
810
+ 0 0 60px rgba(128, 90, 213, 0.08),
811
+ 0 0 120px rgba(128, 90, 213, 0.04);
812
+ animation: cardIn 0.3s ease;
813
+ }
814
+ @keyframes cardIn {
815
+ from { opacity: 0; transform: translateY(12px); }
816
+ to { opacity: 1; transform: translateY(0); }
817
+ }
818
+
819
+ .setup-card h1 { font-size: 28px; margin: 0 0 8px; color: var(--text); }
820
+ .setup-card h2 { font-size: 20px; margin: 0 0 6px; color: var(--text); }
821
+ .setup-card h3 { font-size: 14px; margin: 20px 0 8px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.05em; }
822
+ .setup-subtitle { color: var(--text-dim); margin: 0 0 4px; }
823
+ .setup-hint { color: var(--text-dim); font-size: 13px; margin: 0 0 20px; }
824
+
825
+ .setup-welcome { text-align: center; }
826
+ .setup-logo {
827
+ font-size: 48px; margin: 0 0 16px;
828
+ color: var(--accent);
829
+ text-shadow: 0 0 40px rgba(128, 90, 213, 0.3);
830
+ }
831
+ .setup-logo.done { color: var(--success); text-shadow: none; }
832
+
833
+ /* Option cards */
834
+ .setup-options { display: flex; flex-direction: column; gap: 8px; margin-bottom: 24px; }
835
+ .setup-option {
836
+ display: flex; align-items: center; gap: 12px;
837
+ padding: 12px 16px;
838
+ background: var(--bg);
839
+ border: 1px solid var(--border);
840
+ border-radius: 10px;
841
+ cursor: pointer;
842
+ transition: all 0.2s ease;
843
+ }
844
+ .setup-option:hover { border-color: var(--accent); background: var(--surface-hover); }
845
+ .setup-option.selected { border-color: var(--accent); background: var(--accent-glow); }
846
+ .setup-option.locked { opacity: 0.7; cursor: default; }
847
+ .setup-option.disabled { opacity: 0.4; cursor: not-allowed; }
848
+ .setup-option input { display: none; }
849
+ .option-name { flex: 1; font-size: 14px; font-weight: 500; color: var(--text); }
850
+ .option-hint { font-size: 12px; color: var(--text-dim); }
851
+
852
+ /* Plugin table */
853
+ .setup-plugins-table { margin-bottom: 24px; }
854
+ .plugin-header {
855
+ display: flex; justify-content: space-between;
856
+ padding: 8px 16px; font-size: 11px; text-transform: uppercase;
857
+ color: var(--text-dim); letter-spacing: 0.08em;
858
+ }
859
+ .plugin-row {
860
+ display: flex; align-items: center; justify-content: space-between;
861
+ padding: 12px 16px;
862
+ border-bottom: 1px solid var(--border);
863
+ }
864
+ .plugin-row.locked { opacity: 0.7; }
865
+ .plugin-name { font-size: 14px; color: var(--text); }
866
+
867
+ /* Toggle switch */
868
+ .plugin-toggle { position: relative; width: 40px; height: 22px; }
869
+ .plugin-toggle input { display: none; }
870
+ .toggle-slider {
871
+ position: absolute; inset: 0;
872
+ background: var(--border); border-radius: 11px;
873
+ cursor: pointer; transition: all 0.2s ease;
874
+ }
875
+ .toggle-slider::after {
876
+ content: ''; position: absolute;
877
+ top: 3px; left: 3px; width: 16px; height: 16px;
878
+ background: var(--surface); border-radius: 50%;
879
+ transition: transform 0.2s ease;
880
+ }
881
+ .plugin-toggle input:checked + .toggle-slider { background: var(--accent); }
882
+ .plugin-toggle input:checked + .toggle-slider::after { transform: translateX(18px); }
883
+ .plugin-toggle input:disabled + .toggle-slider { cursor: default; opacity: 0.5; }
884
+
885
+ /* Credentials form */
886
+ .setup-credentials { margin-bottom: 16px; }
887
+ .setup-field { margin-bottom: 16px; }
888
+ .setup-field label {
889
+ display: block; font-size: 12px; font-weight: 500;
890
+ color: var(--text-dim); margin-bottom: 6px;
891
+ }
892
+ .setup-field input {
893
+ width: 100%; padding: 10px 14px;
894
+ background: var(--bg); border: 1px solid var(--border);
895
+ border-radius: 8px; color: var(--text); font-size: 14px;
896
+ outline: none; transition: border-color 0.2s;
897
+ }
898
+ .setup-field input:focus { border-color: var(--accent); }
899
+ .field-hint { font-size: 11px; color: var(--text-dim); margin-top: 4px; display: block; }
900
+
901
+ /* Action buttons */
902
+ .setup-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 24px; }
903
+ .btn-primary {
904
+ padding: 10px 24px; border: none; border-radius: 8px;
905
+ background: var(--accent); color: #fff; font-size: 14px; font-weight: 500;
906
+ cursor: pointer; transition: all 0.2s;
907
+ }
908
+ .btn-primary:hover { filter: brightness(1.1); transform: translateY(-1px); }
909
+ .btn-ghost {
910
+ padding: 10px 18px; border: 1px solid var(--border); border-radius: 8px;
911
+ background: transparent; color: var(--text-dim); font-size: 14px;
912
+ cursor: pointer; transition: all 0.2s;
913
+ }
914
+ .btn-ghost:hover { border-color: var(--text-dim); color: var(--text); }
915
+
916
+ /* Summary */
917
+ .setup-summary { text-align: left; margin: 20px auto; max-width: 320px; }
918
+ .setup-summary p { margin: 6px 0; font-size: 14px; color: var(--text-dim); }
919
+
920
+ @media (max-width: 600px) {
921
+ .setup-card { padding: 28px 20px; }
922
+ }
923
+
924
+ /* ===== Plugin Settings ===== */
925
+
926
+ .plugin-settings-list { display: flex; flex-direction: column; gap: 8px; }
927
+ .plugin-settings-card {
928
+ background: var(--bg); border: 1px solid var(--border);
929
+ border-radius: 10px; overflow: hidden;
930
+ }
931
+ .plugin-settings-header {
932
+ display: flex; align-items: center; justify-content: space-between;
933
+ padding: 14px 16px;
934
+ }
935
+ .plugin-settings-info { display: flex; flex-direction: column; gap: 2px; }
936
+ .plugin-settings-name { font-size: 14px; font-weight: 500; color: var(--text); }
937
+ .plugin-settings-desc { font-size: 12px; color: var(--text-dim); }
938
+ .badge-core {
939
+ font-size: 10px; padding: 1px 6px;
940
+ background: var(--accent-glow); color: var(--accent);
941
+ border-radius: 4px; margin-left: 6px; text-transform: uppercase;
942
+ letter-spacing: 0.05em; font-weight: 600;
943
+ }
944
+ .plugin-settings-body { padding: 0 16px 16px; border-top: 1px solid var(--border); }
945
+ .plugin-settings-actions { margin-top: 12px; text-align: right; }
946
+ .settings-input {
947
+ width: 100%; padding: 8px 12px;
948
+ background: var(--surface); border: 1px solid var(--border);
949
+ border-radius: 6px; color: var(--text); font-size: 13px;
950
+ outline: none;
951
+ }
952
+ .settings-input:focus { border-color: var(--accent); }
953
+ select.settings-input { appearance: auto; }
954
+ .toggle-field { display: flex; align-items: center; justify-content: space-between; }
955
+ /* memoryblock web ui — light & dark themes, wide responsive layout */
956
+
957
+ /* ===== Theme Tokens ===== */
958
+
959
+ :root {
960
+ --ai-glow-1: #ffb6ff;
961
+ --ai-glow-2: #b344ff;
962
+ --ai-glow-3: #ff4a5a;
963
+ --ai-glow-4: #4285f4;
964
+ }
965
+
966
+ [data-theme="light"] {
967
+ --bg: #f5f5f7;
968
+ --surface: rgba(255, 255, 255, 0.7);
969
+ --surface-hover: rgba(255, 255, 255, 0.9);
970
+ --border: rgba(0, 0, 0, 0.08);
971
+ --text: #1d1d1f;
972
+ --text-dim: #86868b;
973
+ --accent: #7C3AED;
974
+ --accent-glow: rgba(124, 58, 237, 0.15);
975
+ --success: #34c759;
976
+ --warning: #ffb340;
977
+ --error: #ff3b30;
978
+ --code-bg: #f0f0f5;
979
+ --glass-blur: blur(20px);
980
+ --card-bg: rgba(255,255,255,0.7);
981
+ --hover-bg: rgba(255,255,255,0.95);
982
+ --ai-gradient: linear-gradient(135deg, var(--ai-glow-1), var(--ai-glow-2), var(--ai-glow-3), var(--ai-glow-4));
983
+ }
984
+
985
+ [data-theme="dark"] {
986
+ --bg: #000000;
987
+ --surface: rgba(28, 28, 30, 0.6);
988
+ --surface-hover: rgba(44, 44, 46, 0.8);
989
+ --border: rgba(255, 255, 255, 0.1);
990
+ --text: #f5f5f7;
991
+ --text-dim: #86868b;
992
+ --accent: #AF52DE;
993
+ --accent-glow: rgba(175, 82, 222, 0.2);
994
+ --success: #32d74b;
995
+ --warning: #ffd60a;
996
+ --error: #ff453a;
997
+ --code-bg: #1c1c1e;
998
+ --glass-blur: blur(20px);
999
+ --card-bg: rgba(28, 28, 30, 0.6);
1000
+ --hover-bg: rgba(44, 44, 46, 0.8);
1001
+ --ai-gradient: linear-gradient(135deg, var(--ai-glow-1), var(--ai-glow-2), var(--ai-glow-3), var(--ai-glow-4));
1002
+ }
1003
+
1004
+ /* ===== Reset & Base ===== */
1005
+
1006
+ * { margin: 0; padding: 0; box-sizing: border-box; }
1007
+
1008
+ body {
1009
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
1010
+ background: var(--bg);
1011
+ color: var(--text);
1012
+ min-height: 100vh;
1013
+ -webkit-font-smoothing: antialiased;
1014
+ transition: background 0.4s ease, color 0.4s ease;
1015
+ }
1016
+
1017
+ #app {
1018
+ width: 100%;
1019
+ max-width: 960px;
1020
+ margin: 0 auto;
1021
+ padding: clamp(16px, 5vw, 60px);
1022
+ padding-top: 32px;
1023
+ }
1024
+
1025
+ /* AI ambient background for body */
1026
+ body::before {
1027
+ content: '';
1028
+ position: fixed;
1029
+ top: -50%;
1030
+ left: -50%;
1031
+ width: 200%;
1032
+ height: 200%;
1033
+ background: radial-gradient(circle at center, var(--accent-glow) 0%, transparent 60%);
1034
+ opacity: 0.5;
1035
+ z-index: -1;
1036
+ pointer-events: none;
1037
+ animation: pulseAmbient 15s infinite alternate ease-in-out;
1038
+ }
1039
+
1040
+ @keyframes pulseAmbient {
1041
+ 0% { transform: scale(1) translate(0, 0); }
1042
+ 100% { transform: scale(1.1) translate(2%, 2%); }
1043
+ }
1044
+
1045
+ /* ===== Views ===== */
1046
+
1047
+ .view { display: none; }
1048
+ .view.active { display: block; animation: smoothFadeIn 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
1049
+ .tab { display: none; }
1050
+ .tab.active { display: block; animation: smoothFadeIn 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
1051
+
1052
+ @keyframes smoothFadeIn {
1053
+ 0% { opacity: 0; transform: translateY(10px) scale(0.99); }
1054
+ 100% { opacity: 1; transform: translateY(0) scale(1); }
1055
+ }
1056
+
1057
+ /* ===== Glass / Surface mixin ===== */
1058
+ .glass-panel {
1059
+ background: var(--surface);
1060
+ backdrop-filter: var(--glass-blur);
1061
+ -webkit-backdrop-filter: var(--glass-blur);
1062
+ border: 1px solid var(--border);
1063
+ border-radius: 20px;
1064
+ box-shadow: 0 4px 24px rgba(0,0,0,0.04);
1065
+ }
1066
+
1067
+ /* ===== Auth ===== */
1068
+ /* ...keep same mostly... */
1069
+
1070
+ /* ===== Header ===== */
1071
+ header {
1072
+ display: flex;
1073
+ justify-content: space-between;
1074
+ align-items: center;
1075
+ margin-bottom: 32px;
1076
+ padding-bottom: 20px;
1077
+ border-bottom: 1px solid var(--border);
1078
+ }
1079
+
1080
+ .brand-small {
1081
+ font-size: 1rem;
1082
+ font-weight: 600;
1083
+ background: var(--ai-gradient);
1084
+ -webkit-background-clip: text;
1085
+ background-clip: text;
1086
+ -webkit-text-fill-color: transparent;
1087
+ letter-spacing: -0.01em;
1088
+ background-size: 200% 200%;
1089
+ animation: gradientShift 5s ease infinite;
1090
+ }
1091
+
1092
+ @keyframes gradientShift {
1093
+ 0% { background-position: 0% 50%; }
1094
+ 50% { background-position: 100% 50%; }
1095
+ 100% { background-position: 0% 50%; }
1096
+ }
1097
+
1098
+ nav { display: flex; gap: 8px; background: rgba(124, 58, 237, 0.05); padding: 4px; border-radius: 12px; }
1099
+
1100
+ .nav-btn {
1101
+ background: transparent;
1102
+ border: none;
1103
+ color: var(--text-dim);
1104
+ font-weight: 500;
1105
+ font-size: 0.85rem;
1106
+ padding: 8px 16px;
1107
+ border-radius: 8px;
1108
+ cursor: pointer;
1109
+ transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
1110
+ }
1111
+
1112
+ .nav-btn:hover { color: var(--text); }
1113
+ .nav-btn.active {
1114
+ color: var(--text);
1115
+ background: var(--surface);
1116
+ box-shadow: 0 2px 8px rgba(0,0,0,0.05);
1117
+ }
1118
+
1119
+ /* ===== Block Cards ===== */
1120
+
1121
+ .blocks-grid {
1122
+ display: grid;
1123
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1124
+ gap: 16px;
1125
+ }
1126
+
1127
+ .block-card {
1128
+ background: var(--surface);
1129
+ backdrop-filter: var(--glass-blur);
1130
+ -webkit-backdrop-filter: var(--glass-blur);
1131
+ border: 1px solid var(--border);
1132
+ border-radius: 20px;
1133
+ padding: 24px;
1134
+ cursor: pointer;
1135
+ transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
1136
+ display: flex;
1137
+ flex-direction: column;
1138
+ justify-content: flex-start;
1139
+ align-items: flex-start;
1140
+ position: relative;
1141
+ overflow: hidden;
1142
+ }
1143
+
1144
+ .block-card::before {
1145
+ content: '';
1146
+ position: absolute;
1147
+ top: 0; left: 0; right: 0;
1148
+ height: 1px;
1149
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
1150
+ opacity: 0;
1151
+ transition: opacity 0.3s;
1152
+ }
1153
+
1154
+ .block-card:hover {
1155
+ border-color: var(--accent);
1156
+ transform: translateY(-2px);
1157
+ box-shadow: 0 12px 32px var(--accent-glow);
1158
+ }
1159
+ .block-card:hover::before { opacity: 1; }
1160
+
1161
+ .block-info { width: 100%; }
1162
+ .block-name { font-weight: 600; font-size: 1.1rem; letter-spacing: -0.01em; margin-bottom: 4px;}
1163
+ .block-desc { color: var(--text-dim); font-size: 0.85rem; line-height: 1.4; margin-bottom: 16px; display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
1164
+
1165
+ .block-monitor-badge {
1166
+ display: inline-flex;
1167
+ align-items: center;
1168
+ gap: 6px;
1169
+ background: var(--code-bg);
1170
+ padding: 6px 10px;
1171
+ border-radius: 8px;
1172
+ font-size: 0.75rem;
1173
+ color: var(--text);
1174
+ border: 1px solid var(--border);
1175
+ margin-bottom: 16px;
1176
+ }
1177
+
1178
+ .block-meta {
1179
+ width: 100%;
1180
+ display: flex;
1181
+ justify-content: space-between;
1182
+ align-items: center;
1183
+ font-size: 0.75rem;
1184
+ color: var(--text-dim);
1185
+ margin-top: auto;
1186
+ padding-top: 16px;
1187
+ border-top: 1px solid var(--border);
1188
+ }
1189
+
1190
+ .status-indicator {
1191
+ display: flex;
1192
+ align-items: center;
1193
+ gap: 6px;
1194
+ font-weight: 500;
1195
+ }
1196
+
1197
+ .status-dot {
1198
+ display: inline-block;
1199
+ width: 8px;
1200
+ height: 8px;
1201
+ border-radius: 50%;
1202
+ }
1203
+ .status-dot.active { background: var(--success); box-shadow: 0 0 8px var(--success); animation: pulse 2s infinite; }
1204
+ .status-dot.sleeping { background: var(--text-dim); }
1205
+ .status-dot.error { background: var(--error); }
1206
+
1207
+ @keyframes pulse {
1208
+ 0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(52, 199, 89, 0.4); }
1209
+ 70% { transform: scale(1); box-shadow: 0 0 0 6px rgba(52, 199, 89, 0); }
1210
+ 100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(52, 199, 89, 0); }
1211
+ }
1212
+
1213
+ /* ===== Block Detail ===== */
1214
+
1215
+ .detail-layout {
1216
+ display: grid;
1217
+ grid-template-columns: 1fr;
1218
+ gap: 20px;
1219
+ }
1220
+
1221
+ @media (min-width: 768px) {
1222
+ .detail-layout {
1223
+ grid-template-columns: 3fr 1fr;
1224
+ }
1225
+ }
1226
+
1227
+ .detail-main {
1228
+ display: flex;
1229
+ flex-direction: column;
1230
+ gap: 20px;
1231
+ }
1232
+
1233
+ .detail-sidebar {
1234
+ display: flex;
1235
+ flex-direction: column;
1236
+ gap: 20px;
1237
+ }
1238
+
1239
+ .detail-header {
1240
+ background: linear-gradient(135deg, var(--surface), var(--bg));
1241
+ backdrop-filter: var(--glass-blur);
1242
+ border: 1px solid var(--border);
1243
+ border-radius: 20px;
1244
+ padding: 32px;
1245
+ position: relative;
1246
+ overflow: hidden;
1247
+ }
1248
+
1249
+ .detail-header::before {
1250
+ content: '';
1251
+ position: absolute;
1252
+ top: -50px; right: -50px;
1253
+ width: 150px; height: 150px;
1254
+ background: var(--ai-gradient);
1255
+ filter: blur(60px);
1256
+ opacity: 0.2;
1257
+ border-radius: 50%;
1258
+ }
1259
+
1260
+ .back-btn {
1261
+ background: none; border: none;
1262
+ color: var(--text-dim); font-size: 0.85rem;
1263
+ cursor: pointer; padding: 6px 0; margin-bottom: 20px;
1264
+ display: inline-flex; align-items: center; gap: 4px;
1265
+ transition: color 0.2s;
1266
+ }
1267
+ .back-btn:hover { color: var(--text); }
1268
+
1269
+ .detail-title { font-size: 1.8rem; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 8px; }
1270
+ .detail-subtitle { font-size: 0.95rem; color: var(--text-dim); }
1271
+
1272
+ .detail-section {
1273
+ background: var(--surface);
1274
+ backdrop-filter: var(--glass-blur);
1275
+ border: 1px solid var(--border);
1276
+ border-radius: 20px;
1277
+ padding: 24px;
1278
+ }
1279
+
1280
+ .detail-section h4 {
1281
+ font-size: 0.75rem; font-weight: 600; color: var(--text-dim);
1282
+ text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 16px;
1283
+ }
1284
+
1285
+ .stat-grid {
1286
+ display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
1287
+ }
1288
+
1289
+ .stat {
1290
+ background: var(--bg); border: 1px solid var(--border); border-radius: 12px;
1291
+ padding: 16px; text-align: left;
1292
+ }
1293
+ .stat-value { font-size: 1.2rem; font-weight: 600; color: var(--text); margin-bottom: 4px; }
1294
+ .stat-label { font-size: 0.7rem; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.05em; }
1295
+
1296
+ /* Settings Form Tabs for Detail */
1297
+ .settings-tabs {
1298
+ display: flex; gap: 8px; margin-bottom: 20px;
1299
+ border-bottom: 1px solid var(--border);
1300
+ padding-bottom: 12px;
1301
+ }
1302
+
1303
+ .settings-tab-btn {
1304
+ background: none; border: none; cursor: pointer;
1305
+ font-size: 0.9rem; font-weight: 500; color: var(--text-dim);
1306
+ padding: 8px 16px; border-radius: 8px;
1307
+ transition: all 0.2s;
1308
+ }
1309
+
1310
+ .settings-tab-btn:hover { color: var(--text); background: var(--surface-hover); }
1311
+ .settings-tab-btn.active { color: var(--accent); background: var(--accent-glow); }
1312
+
1313
+
1314
+ /* Action Bar Update */
1315
+ .action-bar {
1316
+ display: flex; gap: 12px; flex-wrap: wrap; margin-top: auto;
1317
+ }
1318
+
1319
+ .action-btn {
1320
+ padding: 10px 20px; border: 1px solid var(--border); border-radius: 12px;
1321
+ background: var(--surface); color: var(--text); font-weight: 500; font-size: 0.85rem;
1322
+ cursor: pointer; transition: all 0.2s; box-shadow: 0 2px 4px rgba(0,0,0,0.02);
1323
+ }
1324
+
1325
+ .action-btn:hover { background: var(--surface-hover); border-color: var(--text-dim); transform: translateY(-1px); }
1326
+ .action-btn.primary { background: var(--text); color: var(--bg); border-color: var(--text); }
1327
+ .action-btn.primary:hover { opacity: 0.9; }
1328
+ .action-btn.danger { color: var(--error); border-color: rgba(255, 59, 48, 0.3); background: rgba(255, 59, 48, 0.05); }
1329
+ .action-btn.danger:hover { background: rgba(255, 59, 48, 0.1); border-color: var(--error); }
1330
+
1331
+
1332
+ /* Global Settings Page Ramp Up */
1333
+
1334
+ .settings-grid {
1335
+ display: grid; grid-template-columns: 250px 1fr; gap: 32px;
1336
+ }
1337
+ @media (max-width: 768px) {
1338
+ .settings-grid { grid-template-columns: 1fr; gap: 20px; }
1339
+ }
1340
+
1341
+ .settings-nav {
1342
+ display: flex; flex-direction: column; gap: 4px;
1343
+ }
1344
+
1345
+ .settings-nav-item {
1346
+ padding: 10px 16px; font-size: 0.9rem; font-weight: 500; color: var(--text-dim);
1347
+ border-radius: 10px; cursor: pointer; transition: all 0.2s;
1348
+ text-align: left; background: none; border: none;
1349
+ }
1350
+ .settings-nav-item:hover { color: var(--text); background: var(--surface); }
1351
+ .settings-nav-item.active { color: var(--accent); background: var(--accent-glow); }
1352
+
1353
+ .settings-content-section {
1354
+ display: none;
1355
+ }
1356
+ .settings-content-section.active { display: block; animation: smoothFadeIn 0.3s forwards; }
1357
+
1358
+ .settings-panel {
1359
+ background: var(--surface);
1360
+ backdrop-filter: var(--glass-blur);
1361
+ border: 1px solid var(--border);
1362
+ border-radius: 20px;
1363
+ padding: 24px 32px;
1364
+ margin-bottom: 24px;
1365
+ }
1366
+
1367
+ .settings-panel h3 {
1368
+ font-size: 1rem; font-weight: 600; color: var(--text);
1369
+ margin-bottom: 8px; letter-spacing: -0.01em;
1370
+ }
1371
+
1372
+ .settings-panel > p.desc {
1373
+ font-size: 0.85rem; color: var(--text-dim); margin-bottom: 24px; line-height: 1.5;
1374
+ }
1375
+
1376
+ .setting-row {
1377
+ display: flex; justify-content: space-between; align-items: center;
1378
+ padding: 16px 0; border-bottom: 1px solid var(--border);
1379
+ }
1380
+ .setting-row:last-child { border-bottom: none; }
1381
+ .setting-label { font-size: 0.9rem; font-weight: 500; }
1382
+ .setting-desc { font-size: 0.75rem; color: var(--text-dim); margin-top: 4px; }
1383
+
1384
+ /* Better Buttons */
1385
+ .btn-small {
1386
+ background: var(--surface); border: 1px solid var(--border); color: var(--text);
1387
+ padding: 6px 14px; border-radius: 8px; font-size: 0.8rem; font-weight: 500;
1388
+ cursor: pointer; transition: all 0.2s;
1389
+ }
1390
+ .btn-small:hover { background: var(--surface-hover); }
1391
+ .btn-small.danger { color: var(--error); background: rgba(255, 59, 48, 0.05); border-color: rgba(255, 59, 48, 0.2); }
1392
+ .btn-small.danger:hover { background: rgba(255, 59, 48, 0.1); }
1393
+
1394
+
1395
+ /* Fix memory content scrolling */
1396
+ .memory-content {
1397
+ font-size: 0.85rem; color: var(--text); background: var(--code-bg);
1398
+ padding: 16px; border-radius: 12px; line-height: 1.6;
1399
+ max-height: 300px; overflow-y: auto; font-family: 'SF Mono', 'Fira Code', monospace;
1400
+ border: 1px solid var(--border);
1401
+ }
1402
+
1403
+ /* Forms tweaks */
1404
+ input, select, textarea {
1405
+ background: var(--code-bg); border: 1px solid var(--border);
1406
+ color: var(--text); border-radius: 8px; padding: 10px 14px;
1407
+ font-family: inherit; font-size: 0.9rem; transition: border-color 0.2s;
1408
+ outline: none;
1409
+ }
1410
+ input:focus, select:focus, textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-glow); }
1411
+
1412
+
1413
+ /* Hide things that conflict with new design if needed */
1414
+
1415
+ /* Create Form tweaks */
1416
+ .create-block-view { max-width: 600px; }
1417
+ .form-input { background: var(--bg); padding: 12px 16px; border-radius: 12px; }
1418
+
1419
+ /* Responsive tweaks */
1420
+ @media (max-width: 640px) {
1421
+ .stat-grid { grid-template-columns: 1fr; }
1422
+ .action-bar { justify-content: stretch; }
1423
+ .action-bar .action-btn { flex: 1; text-align: center; }
1424
+ }
1425
+
1426
+
1427
+ /* ===== Web Chat Overlay ===== */
1428
+
1429
+ .chat-overlay {
1430
+ position: fixed;
1431
+ top: 0;
1432
+ left: 0;
1433
+ right: 0;
1434
+ bottom: 0;
1435
+ z-index: 9999;
1436
+ background: rgba(0, 0, 0, 0.85);
1437
+ backdrop-filter: blur(8px);
1438
+ display: flex;
1439
+ align-items: stretch;
1440
+ justify-content: stretch;
1441
+ opacity: 0;
1442
+ transition: opacity 0.3s ease;
1443
+ }
1444
+
1445
+ .chat-overlay.visible {
1446
+ opacity: 1;
1447
+ }
1448
+
1449
+ .chat-overlay-inner {
1450
+ flex: 1;
1451
+ display: flex;
1452
+ padding: 16px;
1453
+ }
1454
+
1455
+ .chat-container {
1456
+ display: flex;
1457
+ flex: 1;
1458
+ background: var(--surface);
1459
+ border: 1px solid var(--border);
1460
+ border-radius: 16px;
1461
+ overflow: hidden;
1462
+ min-height: 0;
1463
+ }
1464
+
1465
+ .chat-sidebar {
1466
+ width: 240px;
1467
+ min-width: 240px;
1468
+ border-right: 1px solid var(--border);
1469
+ display: flex;
1470
+ flex-direction: column;
1471
+ background: var(--code-bg);
1472
+ transition: width 0.3s ease, min-width 0.3s ease, opacity 0.3s ease;
1473
+ overflow: hidden;
1474
+ }
1475
+
1476
+ .chat-sidebar.collapsed {
1477
+ width: 0;
1478
+ min-width: 0;
1479
+ border-right: none;
1480
+ opacity: 0;
1481
+ pointer-events: none;
1482
+ }
1483
+
1484
+ .sidebar-header {
1485
+ padding: 16px;
1486
+ border-bottom: 1px solid var(--border);
1487
+ display: flex;
1488
+ justify-content: space-between;
1489
+ align-items: center;
1490
+ }
1491
+
1492
+ .sidebar-header h3 {
1493
+ font-size: 0.8rem;
1494
+ color: var(--text-dim);
1495
+ text-transform: uppercase;
1496
+ }
1497
+
1498
+ .sidebar-toggle {
1499
+ background: none;
1500
+ border: none;
1501
+ color: var(--text-dim);
1502
+ cursor: pointer;
1503
+ padding: 4px;
1504
+ border-radius: 4px;
1505
+ display: flex;
1506
+ align-items: center;
1507
+ justify-content: center;
1508
+ transition: all 0.2s;
1509
+ }
1510
+
1511
+ .sidebar-toggle:hover {
1512
+ color: var(--text);
1513
+ background: var(--surface);
1514
+ }
1515
+
1516
+ .sidebar-expand-btn {
1517
+ position: absolute;
1518
+ left: 4px;
1519
+ top: 50%;
1520
+ transform: translateY(-50%);
1521
+ background: var(--surface);
1522
+ border: 1px solid var(--border);
1523
+ border-radius: 0 8px 8px 0;
1524
+ padding: 12px 4px;
1525
+ cursor: pointer;
1526
+ color: var(--text-dim);
1527
+ z-index: 10;
1528
+ transition: all 0.2s;
1529
+ display: flex;
1530
+ align-items: center;
1531
+ }
1532
+
1533
+ .sidebar-expand-btn:hover {
1534
+ color: var(--text);
1535
+ background: var(--surface-hover);
1536
+ }
1537
+
1538
+ .sidebar-expand-btn.hidden {
1539
+ display: none;
1540
+ }
1541
+
1542
+ .session-list {
1543
+ flex: 1;
1544
+ overflow-y: auto;
1545
+ padding: 8px;
1546
+ }
1547
+
1548
+ .session-tab {
1549
+ padding: 10px 12px;
1550
+ border-radius: 8px;
1551
+ font-size: 0.85rem;
1552
+ color: var(--text-dim);
1553
+ cursor: pointer;
1554
+ margin-bottom: 4px;
1555
+ transition: all 0.2s;
1556
+ display: flex;
1557
+ align-items: center;
1558
+ gap: 8px;
1559
+ }
1560
+
1561
+ .session-tab:hover {
1562
+ background: var(--surface);
1563
+ color: var(--text);
1564
+ }
1565
+
1566
+ .session-tab.active {
1567
+ background: var(--accent-glow);
1568
+ color: var(--accent);
1569
+ font-weight: 500;
1570
+ }
1571
+
1572
+ .chat-main {
1573
+ flex: 1;
1574
+ display: flex;
1575
+ flex-direction: column;
1576
+ position: relative;
1577
+ min-width: 0;
1578
+ }
1579
+
1580
+ .chat-header {
1581
+ padding: 16px 20px;
1582
+ border-bottom: 1px solid var(--border);
1583
+ display: flex;
1584
+ justify-content: space-between;
1585
+ align-items: center;
1586
+ flex-shrink: 0;
1587
+ }
1588
+
1589
+ .chat-header-left {
1590
+ display: flex;
1591
+ align-items: center;
1592
+ gap: 12px;
1593
+ }
1594
+
1595
+ .chat-close-btn {
1596
+ background: none;
1597
+ border: 1px solid var(--border);
1598
+ color: var(--text-dim);
1599
+ cursor: pointer;
1600
+ padding: 6px;
1601
+ border-radius: 8px;
1602
+ display: flex;
1603
+ align-items: center;
1604
+ justify-content: center;
1605
+ transition: all 0.2s;
1606
+ }
1607
+
1608
+ .chat-close-btn:hover {
1609
+ color: var(--error);
1610
+ border-color: var(--error);
1611
+ background: rgba(255, 59, 48, 0.1);
1612
+ }
1613
+
1614
+ .chat-header h2 {
1615
+ font-size: 1.1rem;
1616
+ font-weight: 600;
1617
+ }
1618
+
1619
+ /* Connection status */
1620
+ .status-dot.connecting {
1621
+ background: var(--warning);
1622
+ animation: pulse 1s infinite;
1623
+ }
1624
+
1625
+ .chat-messages {
1626
+ flex: 1;
1627
+ padding: 24px;
1628
+ overflow-y: auto;
1629
+ display: flex;
1630
+ flex-direction: column;
1631
+ gap: 16px;
1632
+ min-height: 0;
1633
+ }
1634
+
1635
+ .chat-msg {
1636
+ max-width: 80%;
1637
+ font-size: 0.95rem;
1638
+ line-height: 1.5;
1639
+ }
1640
+
1641
+ .chat-msg.system {
1642
+ align-self: center;
1643
+ color: var(--text-dim);
1644
+ font-size: 0.85rem;
1645
+ font-style: italic;
1646
+ background: var(--code-bg);
1647
+ padding: 4px 12px;
1648
+ border-radius: 12px;
1649
+ max-width: none;
1650
+ }
1651
+
1652
+ .chat-msg.user {
1653
+ align-self: flex-end;
1654
+ background: var(--accent);
1655
+ color: #fff;
1656
+ padding: 12px 16px;
1657
+ border-radius: 18px 18px 0 18px;
1658
+ }
1659
+
1660
+ .chat-msg.assistant {
1661
+ align-self: flex-start;
1662
+ background: var(--surface-hover);
1663
+ border: 1px solid var(--border);
1664
+ padding: 12px 16px;
1665
+ border-radius: 18px 18px 18px 0;
1666
+ }
1667
+
1668
+ .chat-msg.error {
1669
+ align-self: center;
1670
+ color: var(--error);
1671
+ font-size: 0.85rem;
1672
+ background: rgba(255,59,48,0.1);
1673
+ padding: 6px 16px;
1674
+ border-radius: 8px;
1675
+ max-width: none;
1676
+ }
1677
+
1678
+ /* Markdown rendering inside chat messages */
1679
+ .msg-content p {
1680
+ margin: 0 0 8px 0;
1681
+ }
1682
+
1683
+ .msg-content li p {
1684
+ margin: 0 0 0 0;
1685
+ }
1686
+
1687
+ .msg-content p:last-child {
1688
+ margin-bottom: 0;
1689
+ }
1690
+
1691
+ .msg-content strong {
1692
+ font-weight: 600;
1693
+ }
1694
+
1695
+ .msg-content em {
1696
+ font-style: italic;
1697
+ }
1698
+
1699
+ .msg-content a {
1700
+ color: var(--accent);
1701
+ text-decoration: underline;
1702
+ text-decoration-style: dotted;
1703
+ }
1704
+
1705
+ .msg-content a:hover {
1706
+ text-decoration-style: solid;
1707
+ }
1708
+
1709
+ .msg-content .inline-code {
1710
+ background: var(--code-bg);
1711
+ padding: 2px 6px;
1712
+ border-radius: 4px;
1713
+ font-family: 'SF Mono', 'Fira Code', monospace;
1714
+ font-size: 0.85em;
1715
+ border: 1px solid var(--border);
1716
+ }
1717
+
1718
+ .msg-content .code-block {
1719
+ background: var(--code-bg);
1720
+ border: 1px solid var(--border);
1721
+ border-radius: 8px;
1722
+ padding: 12px 16px;
1723
+ margin: 8px 0;
1724
+ overflow-x: auto;
1725
+ font-family: 'SF Mono', 'Fira Code', monospace;
1726
+ font-size: 0.85em;
1727
+ line-height: 1.5;
1728
+ }
1729
+
1730
+ .msg-content .code-block code {
1731
+ background: none;
1732
+ padding: 0;
1733
+ border: none;
1734
+ }
1735
+
1736
+ .msg-content ul, .msg-content ol {
1737
+ padding-left: 20px;
1738
+ margin: 8px 0;
1739
+ }
1740
+
1741
+ .msg-content li {
1742
+ margin: 4px 0;
1743
+ }
1744
+
1745
+ .msg-content hr {
1746
+ border: none;
1747
+ border-top: 1px solid var(--border);
1748
+ margin: 12px 0;
1749
+ }
1750
+
1751
+ .msg-content .md-h1 {
1752
+ font-size: 1.3em;
1753
+ display: block;
1754
+ margin: 12px 0 8px;
1755
+ }
1756
+
1757
+ .msg-content .md-h2 {
1758
+ font-size: 1.15em;
1759
+ display: block;
1760
+ margin: 10px 0 6px;
1761
+ }
1762
+
1763
+ .msg-content .md-h3 {
1764
+ font-size: 1.05em;
1765
+ display: block;
1766
+ margin: 8px 0 4px;
1767
+ }
1768
+
1769
+ .chat-input-area {
1770
+ padding: 16px;
1771
+ border-top: 1px solid var(--border);
1772
+ display: flex;
1773
+ gap: 12px;
1774
+ align-items: flex-end;
1775
+ flex-shrink: 0;
1776
+ }
1777
+
1778
+ .chat-input-area textarea {
1779
+ flex: 1;
1780
+ background: var(--bg);
1781
+ border: 1px solid var(--border);
1782
+ border-radius: 12px;
1783
+ padding: 12px 14px;
1784
+ color: var(--text);
1785
+ font-family: inherit;
1786
+ font-size: 0.95rem;
1787
+ resize: none;
1788
+ max-height: 120px;
1789
+ transition: border-color 0.2s;
1790
+ }
1791
+
1792
+ .chat-input-area textarea:focus {
1793
+ outline: none;
1794
+ border-color: var(--accent);
1795
+ }
1796
+
1797
+ .chat-input-area button {
1798
+ height: 44px;
1799
+ width: 44px;
1800
+ border-radius: 50%;
1801
+ display: flex;
1802
+ align-items: center;
1803
+ justify-content: center;
1804
+ padding: 0;
1805
+ }
1806
+
1807
+ @media (max-width: 768px) {
1808
+ .chat-overlay-inner {
1809
+ padding: 0;
1810
+ }
1811
+ .chat-container {
1812
+ flex-direction: column;
1813
+ border-radius: 0;
1814
+ }
1815
+ .chat-sidebar {
1816
+ width: 100%;
1817
+ min-width: 100%;
1818
+ border-right: none;
1819
+ border-bottom: 1px solid var(--border);
1820
+ max-height: 120px;
1821
+ }
1822
+ .chat-sidebar.collapsed {
1823
+ max-height: 0;
1824
+ min-width: 0;
1825
+ }
1826
+ .sidebar-expand-btn {
1827
+ top: 70px;
1828
+ left: 50%;
1829
+ transform: translateX(-50%);
1830
+ border-radius: 0 0 8px 8px;
1831
+ }
1832
+ }
1833
+
1834
+ /* ===== Typing Indicator ===== */
1835
+
1836
+ .typing-indicator .msg-content {
1837
+ display: inline-flex;
1838
+ align-items: center;
1839
+ gap: 4px;
1840
+ padding: 12px 16px;
1841
+ min-height: 44px;
1842
+ }
1843
+
1844
+ .typing-indicator .dot {
1845
+ width: 6px;
1846
+ height: 6px;
1847
+ background-color: var(--text-dim);
1848
+ border-radius: 50%;
1849
+ animation: typingBounce 1.4s infinite ease-in-out both;
1850
+ }
1851
+
1852
+ .typing-indicator .dot:nth-child(1) { animation-delay: -0.32s; }
1853
+ .typing-indicator .dot:nth-child(2) { animation-delay: -0.16s; }
1854
+
1855
+ @keyframes typingBounce {
1856
+ 0%, 80%, 100% { transform: scale(0); opacity: 0.5; }
1857
+ 40% { transform: scale(1); opacity: 1; background-color: var(--accent); }
1858
+ }
1859
+
1860
+ /* ===== Disabled Input ===== */
1861
+
1862
+ .chat-input-area.disabled-input {
1863
+ opacity: 0.6;
1864
+ background: var(--surface);
1865
+ }
1866
+
1867
+ .chat-input-area.disabled-input textarea {
1868
+ cursor: not-allowed;
1869
+ background: var(--bg);
1870
+ }
1871
+