vibespot 0.4.0

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.
package/ui/styles.css ADDED
@@ -0,0 +1,2552 @@
1
+ /* vibeSpot — Vibe Coding UI */
2
+
3
+ :root {
4
+ /* Background */
5
+ --bg: #0c0a09;
6
+ --bg-panel: rgba(255,255,255,0.03);
7
+ --bg-panel-solid: #131110;
8
+ --bg-input: rgba(255,255,255,0.04);
9
+ --bg-hover: rgba(255,255,255,0.06);
10
+ --bg-active: rgba(255,255,255,0.08);
11
+
12
+ /* Borders */
13
+ --border: rgba(255,255,255,0.06);
14
+ --border-hover: rgba(255,255,255,0.12);
15
+
16
+ /* Text */
17
+ --text: #f0ece8;
18
+ --text-dim: rgba(255,255,255,0.45);
19
+ --text-muted: rgba(255,255,255,0.2);
20
+
21
+ /* Accent — warm coral-orange (NOT HubSpot's #ff5c35) */
22
+ --accent: #e8613a;
23
+ --accent-hover: #f2825f;
24
+ --accent-dim: rgba(232,97,58,0.15);
25
+ --accent-glow: rgba(232,97,58,0.3);
26
+ --accent-tint: rgba(232,97,58,0.06);
27
+ --accent-gradient: linear-gradient(135deg, #e8613a, #f2825f);
28
+
29
+ /* Status */
30
+ --success: #4ade80;
31
+ --warning: #f59e0b;
32
+ --error: #ef4444;
33
+
34
+ /* Radius */
35
+ --radius: 10px;
36
+ --radius-sm: 6px;
37
+ --radius-lg: 16px;
38
+ --radius-pill: 99px;
39
+
40
+ /* Fonts */
41
+ --font-display: "Space Grotesk", -apple-system, BlinkMacSystemFont, sans-serif;
42
+ --font: "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
43
+ --font-mono: "SF Mono", "Fira Code", "Cascadia Code", monospace;
44
+
45
+ /* Layout */
46
+ --topbar-h: 56px;
47
+ --statusbar-h: 28px;
48
+ }
49
+
50
+ * { margin: 0; padding: 0; box-sizing: border-box; }
51
+
52
+ html, body {
53
+ height: 100%;
54
+ overflow: hidden;
55
+ font-family: var(--font);
56
+ font-size: 14px;
57
+ font-weight: 400;
58
+ color: var(--text);
59
+ background: var(--bg);
60
+ -webkit-font-smoothing: antialiased;
61
+ -moz-osx-font-smoothing: grayscale;
62
+ }
63
+
64
+ .hidden { display: none !important; }
65
+ .app { display: contents; }
66
+
67
+ /* ---------------------------------------------------------------- Scrollbar */
68
+ ::-webkit-scrollbar { width: 6px; }
69
+ ::-webkit-scrollbar-track { background: transparent; }
70
+ ::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.08); border-radius: var(--radius-pill); }
71
+ ::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.14); }
72
+
73
+ /* ---------------------------------------------------------------- Selection */
74
+ ::selection { background: var(--accent-glow); }
75
+
76
+ /* ================================================================
77
+ SETUP SCREEN
78
+ ================================================================ */
79
+ .setup {
80
+ height: 100vh;
81
+ display: flex;
82
+ overflow: hidden;
83
+ }
84
+
85
+ /* Sidebar — project list */
86
+ .setup-sidebar {
87
+ width: 260px;
88
+ min-width: 260px;
89
+ display: flex;
90
+ flex-direction: column;
91
+ background: var(--bg-panel-solid);
92
+ border-right: 1px solid var(--border);
93
+ padding-top: var(--topbar-h);
94
+ }
95
+
96
+ .setup-sidebar__header {
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: space-between;
100
+ padding: 16px 16px 12px;
101
+ font-size: 11px;
102
+ font-weight: 600;
103
+ text-transform: uppercase;
104
+ letter-spacing: 0.08em;
105
+ color: var(--text-dim);
106
+ }
107
+
108
+ .setup-sidebar__count {
109
+ background: var(--bg-active);
110
+ color: var(--text-dim);
111
+ padding: 1px 7px;
112
+ border-radius: var(--radius-pill);
113
+ font-size: 11px;
114
+ }
115
+
116
+ .setup-sidebar__list {
117
+ flex: 1;
118
+ overflow-y: auto;
119
+ padding: 0 8px;
120
+ }
121
+
122
+ .setup-sidebar__item {
123
+ display: flex;
124
+ align-items: center;
125
+ width: 100%;
126
+ border-radius: 8px;
127
+ transition: all 0.15s;
128
+ position: relative;
129
+ }
130
+ .setup-sidebar__item:hover {
131
+ background: var(--bg-hover);
132
+ }
133
+ .setup-sidebar__item-open {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 10px;
137
+ flex: 1;
138
+ min-width: 0;
139
+ padding: 10px 12px;
140
+ border: none;
141
+ background: none;
142
+ color: var(--text);
143
+ font-family: var(--font);
144
+ font-size: 13px;
145
+ text-align: left;
146
+ cursor: pointer;
147
+ }
148
+ .setup-sidebar__item-delete {
149
+ opacity: 0;
150
+ border: none;
151
+ background: none;
152
+ color: var(--text-muted);
153
+ font-size: 18px;
154
+ line-height: 1;
155
+ cursor: pointer;
156
+ padding: 4px 10px 4px 4px;
157
+ flex-shrink: 0;
158
+ transition: opacity 0.1s, color 0.1s;
159
+ }
160
+ .setup-sidebar__item:hover .setup-sidebar__item-delete { opacity: 1; }
161
+ .setup-sidebar__item-delete:hover { color: var(--error); }
162
+
163
+ .setup-sidebar__item-icon {
164
+ width: 28px;
165
+ height: 28px;
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ border-radius: 8px;
170
+ background: var(--accent-tint);
171
+ color: var(--accent);
172
+ font-size: 12px;
173
+ font-weight: 600;
174
+ flex-shrink: 0;
175
+ }
176
+
177
+ .setup-sidebar__item-info {
178
+ flex: 1;
179
+ min-width: 0;
180
+ }
181
+
182
+ .setup-sidebar__item-name {
183
+ display: block;
184
+ font-weight: 500;
185
+ font-size: 13px;
186
+ white-space: nowrap;
187
+ overflow: hidden;
188
+ text-overflow: ellipsis;
189
+ }
190
+
191
+ .setup-sidebar__item-meta {
192
+ display: block;
193
+ font-size: 11px;
194
+ color: var(--text-muted);
195
+ margin-top: 1px;
196
+ }
197
+
198
+ .setup-sidebar__empty {
199
+ padding: 20px 16px;
200
+ text-align: center;
201
+ font-size: 13px;
202
+ color: var(--text-muted);
203
+ line-height: 1.5;
204
+ }
205
+
206
+ .setup-sidebar__footer {
207
+ padding: 12px;
208
+ border-top: 1px solid var(--border);
209
+ }
210
+
211
+ .setup-sidebar__settings-btn {
212
+ display: flex;
213
+ align-items: center;
214
+ gap: 8px;
215
+ width: 100%;
216
+ padding: 8px 12px;
217
+ border: none;
218
+ background: none;
219
+ color: var(--text-dim);
220
+ font-family: var(--font);
221
+ font-size: 13px;
222
+ cursor: pointer;
223
+ border-radius: 8px;
224
+ transition: all 0.15s;
225
+ }
226
+ .setup-sidebar__settings-btn:hover {
227
+ background: var(--bg-hover);
228
+ color: var(--text);
229
+ }
230
+
231
+ /* Main content area */
232
+ .setup__main {
233
+ flex: 1;
234
+ display: flex;
235
+ align-items: flex-start;
236
+ justify-content: center;
237
+ padding: 40px 20px;
238
+ overflow-y: auto;
239
+ padding-top: calc(var(--topbar-h) + 40px);
240
+ }
241
+
242
+ .setup__container {
243
+ width: 100%;
244
+ max-width: 520px;
245
+ text-align: center;
246
+ }
247
+
248
+ .setup__symbol {
249
+ font-size: 48px;
250
+ color: var(--accent);
251
+ opacity: 0.8;
252
+ margin-bottom: 12px;
253
+ }
254
+
255
+ .setup__title {
256
+ font-family: var(--font-display);
257
+ font-size: 32px;
258
+ font-weight: 700;
259
+ letter-spacing: -0.03em;
260
+ margin-bottom: 6px;
261
+ background: linear-gradient(135deg, #ffffff, #a5a3b3);
262
+ -webkit-background-clip: text;
263
+ -webkit-text-fill-color: transparent;
264
+ background-clip: text;
265
+ }
266
+
267
+ .setup__subtitle {
268
+ color: var(--text-dim);
269
+ font-size: 15px;
270
+ margin-bottom: 32px;
271
+ }
272
+
273
+ .setup__alerts { margin-bottom: 16px; }
274
+
275
+ .setup__alert {
276
+ padding: 10px 14px;
277
+ border-radius: var(--radius);
278
+ font-size: 13px;
279
+ line-height: 1.5;
280
+ margin-bottom: 8px;
281
+ text-align: left;
282
+ }
283
+ .setup__alert a { color: var(--accent); text-decoration: underline; }
284
+
285
+ .setup__alert--warn {
286
+ background: rgba(245,158,11,0.08);
287
+ border: 1px solid rgba(245,158,11,0.2);
288
+ color: var(--warning);
289
+ }
290
+
291
+ .setup__alert-key-row {
292
+ display: flex;
293
+ align-items: center;
294
+ gap: 8px;
295
+ margin-top: 8px;
296
+ }
297
+ .setup__alert-key-input {
298
+ flex: 1;
299
+ padding: 6px 10px;
300
+ font-size: 13px;
301
+ font-family: var(--font-mono);
302
+ background: var(--bg-input);
303
+ border: 1px solid var(--border);
304
+ border-radius: var(--radius-sm);
305
+ color: var(--text);
306
+ outline: none;
307
+ }
308
+ .setup__alert-key-input:focus {
309
+ border-color: var(--accent-glow);
310
+ }
311
+ .setup__alert-alt {
312
+ margin-top: 6px;
313
+ font-size: 12px;
314
+ color: var(--text-dim);
315
+ }
316
+
317
+ .setup__options { text-align: left; }
318
+
319
+ .setup__section { margin-bottom: 20px; }
320
+
321
+ .setup__label {
322
+ font-size: 12px;
323
+ font-weight: 500;
324
+ text-transform: uppercase;
325
+ letter-spacing: 0.06em;
326
+ color: var(--text-dim);
327
+ margin-bottom: 8px;
328
+ }
329
+
330
+ .setup__row {
331
+ display: flex;
332
+ gap: 8px;
333
+ }
334
+
335
+ .setup__input {
336
+ padding: 10px 14px;
337
+ background: var(--bg-input);
338
+ border: 1px solid var(--border);
339
+ border-radius: var(--radius);
340
+ color: var(--text);
341
+ font-family: var(--font);
342
+ font-size: 14px;
343
+ outline: none;
344
+ transition: border-color 0.2s;
345
+ }
346
+ .setup__input:focus { border-color: var(--accent-glow); }
347
+ .setup__input::placeholder { color: var(--text-muted); }
348
+ .setup__input--wide { flex: 1; }
349
+
350
+ .setup__hint {
351
+ font-size: 12px;
352
+ color: var(--text-muted);
353
+ margin-top: 6px;
354
+ }
355
+
356
+ .setup__cards {
357
+ display: flex;
358
+ flex-wrap: wrap;
359
+ gap: 8px;
360
+ }
361
+
362
+ .setup__card {
363
+ display: flex;
364
+ align-items: center;
365
+ gap: 10px;
366
+ padding: 10px 16px;
367
+ background: var(--bg-input);
368
+ border: 1px solid var(--border);
369
+ border-radius: var(--radius);
370
+ color: var(--text);
371
+ font-family: var(--font);
372
+ font-size: 14px;
373
+ cursor: pointer;
374
+ transition: all 0.2s ease;
375
+ text-align: left;
376
+ }
377
+ .setup__card:hover {
378
+ border-color: var(--accent-glow);
379
+ background: var(--accent-dim);
380
+ }
381
+
382
+ .setup__card-name { font-weight: 500; }
383
+ .setup__card-meta { font-size: 12px; color: var(--text-muted); }
384
+
385
+ .setup__loading {
386
+ display: flex;
387
+ align-items: center;
388
+ justify-content: center;
389
+ gap: 12px;
390
+ padding: 40px;
391
+ color: var(--text-dim);
392
+ font-size: 14px;
393
+ }
394
+
395
+ .setup__spinner {
396
+ width: 20px;
397
+ height: 20px;
398
+ border: 2px solid var(--border);
399
+ border-top-color: var(--accent);
400
+ border-radius: 50%;
401
+ animation: spin 0.8s linear infinite;
402
+ }
403
+
404
+ @keyframes spin { to { transform: rotate(360deg); } }
405
+
406
+ .setup__error {
407
+ padding: 10px 14px;
408
+ border-radius: var(--radius);
409
+ background: rgba(239,68,68,0.08);
410
+ border: 1px solid rgba(239,68,68,0.2);
411
+ color: var(--error);
412
+ font-size: 13px;
413
+ margin-top: 16px;
414
+ text-align: left;
415
+ }
416
+
417
+ /* ================================================================
418
+ DASHBOARD SCREEN
419
+ ================================================================ */
420
+ .dashboard {
421
+ display: flex;
422
+ flex-direction: column;
423
+ height: 100vh;
424
+ background: var(--bg);
425
+ }
426
+
427
+ .dashboard__body {
428
+ flex: 1;
429
+ overflow-y: auto;
430
+ padding: 32px 24px 64px;
431
+ }
432
+
433
+ .dashboard__container {
434
+ max-width: 800px;
435
+ margin: 0 auto;
436
+ }
437
+
438
+ .dashboard__section {
439
+ margin-bottom: 36px;
440
+ }
441
+
442
+ .dashboard__section-header {
443
+ display: flex;
444
+ align-items: center;
445
+ gap: 10px;
446
+ margin-bottom: 14px;
447
+ }
448
+
449
+ .dashboard__section-title {
450
+ font-family: var(--font-display);
451
+ font-size: 16px;
452
+ font-weight: 600;
453
+ color: var(--text);
454
+ }
455
+
456
+ .dashboard__section-hint {
457
+ font-size: 12px;
458
+ color: var(--text-dim);
459
+ }
460
+
461
+ .dashboard__template-count {
462
+ background: var(--bg-hover);
463
+ color: var(--text-dim);
464
+ font-size: 11px;
465
+ padding: 2px 8px;
466
+ border-radius: var(--radius-pill);
467
+ }
468
+
469
+ .dashboard__empty-state {
470
+ color: var(--text-dim);
471
+ font-size: 13px;
472
+ padding: 16px 0;
473
+ }
474
+
475
+ /* Page type cards */
476
+ .dashboard__page-types {
477
+ display: grid;
478
+ grid-template-columns: repeat(4, 1fr);
479
+ gap: 12px;
480
+ }
481
+
482
+ .page-type-card {
483
+ display: flex;
484
+ flex-direction: column;
485
+ align-items: center;
486
+ gap: 8px;
487
+ padding: 20px 12px;
488
+ background: var(--bg-panel);
489
+ border: 1px solid var(--border);
490
+ border-radius: var(--radius);
491
+ cursor: pointer;
492
+ transition: all 0.15s ease;
493
+ text-align: center;
494
+ }
495
+
496
+ .page-type-card:hover {
497
+ border-color: var(--accent);
498
+ background: var(--accent-tint);
499
+ }
500
+
501
+ .page-type-card__icon {
502
+ color: var(--text-dim);
503
+ transition: color 0.15s ease;
504
+ }
505
+
506
+ .page-type-card:hover .page-type-card__icon {
507
+ color: var(--accent);
508
+ }
509
+
510
+ .page-type-card__label {
511
+ font-size: 13px;
512
+ font-weight: 500;
513
+ color: var(--text);
514
+ }
515
+
516
+ .page-type-card__desc {
517
+ font-size: 11px;
518
+ color: var(--text-dim);
519
+ line-height: 1.3;
520
+ }
521
+
522
+ /* Template list */
523
+ .dashboard__template-item {
524
+ display: flex;
525
+ align-items: center;
526
+ gap: 10px;
527
+ padding: 10px 12px;
528
+ border: 1px solid var(--border);
529
+ border-radius: var(--radius-sm);
530
+ margin-bottom: 6px;
531
+ transition: border-color 0.15s ease;
532
+ }
533
+
534
+ .dashboard__template-item:hover {
535
+ border-color: var(--border-hover);
536
+ }
537
+
538
+ .dashboard__template-badge {
539
+ font-size: 10px;
540
+ font-weight: 600;
541
+ text-transform: uppercase;
542
+ padding: 2px 8px;
543
+ border-radius: var(--radius-pill);
544
+ background: var(--bg-hover);
545
+ color: var(--text-dim);
546
+ }
547
+
548
+ .dashboard__template-badge--landing_page { background: rgba(232,97,58,0.15); color: var(--accent); }
549
+ .dashboard__template-badge--blog_post { background: rgba(59,130,246,0.15); color: #3b82f6; }
550
+ .dashboard__template-badge--website_page { background: rgba(74,222,128,0.15); color: #4ade80; }
551
+ .dashboard__template-badge--module_only { background: rgba(168,85,247,0.15); color: #a855f7; }
552
+
553
+ .dashboard__template-label {
554
+ flex: 1;
555
+ font-size: 14px;
556
+ color: var(--text);
557
+ white-space: nowrap;
558
+ overflow: hidden;
559
+ text-overflow: ellipsis;
560
+ }
561
+
562
+ .dashboard__template-meta {
563
+ font-size: 12px;
564
+ color: var(--text-dim);
565
+ white-space: nowrap;
566
+ }
567
+
568
+ .dashboard__template-open {
569
+ opacity: 0;
570
+ transition: opacity 0.15s ease;
571
+ }
572
+
573
+ .dashboard__template-item:hover .dashboard__template-open {
574
+ opacity: 1;
575
+ }
576
+
577
+ .dashboard__template-delete {
578
+ background: none;
579
+ border: none;
580
+ color: var(--text-muted);
581
+ font-size: 18px;
582
+ cursor: pointer;
583
+ padding: 0 4px;
584
+ opacity: 0;
585
+ transition: opacity 0.15s, color 0.15s;
586
+ }
587
+
588
+ .dashboard__template-item:hover .dashboard__template-delete {
589
+ opacity: 1;
590
+ }
591
+
592
+ .dashboard__template-delete:hover {
593
+ color: var(--error);
594
+ }
595
+
596
+ /* Module library chips */
597
+ .dashboard__module-library {
598
+ display: flex;
599
+ flex-wrap: wrap;
600
+ gap: 8px;
601
+ }
602
+
603
+ .dashboard__module-chip {
604
+ font-size: 12px;
605
+ color: var(--text-dim);
606
+ padding: 4px 12px;
607
+ border: 1px solid var(--border);
608
+ border-radius: var(--radius-pill);
609
+ cursor: pointer;
610
+ transition: border-color 0.15s, color 0.15s, background 0.15s;
611
+ }
612
+
613
+ .dashboard__module-chip:hover {
614
+ border-color: var(--accent);
615
+ color: var(--accent);
616
+ }
617
+
618
+ .dashboard__module-chip--active {
619
+ border-color: var(--accent);
620
+ color: var(--accent);
621
+ background: rgba(255,107,53,0.1);
622
+ }
623
+
624
+ /* Module preview */
625
+ .dashboard__module-preview {
626
+ margin-top: 12px;
627
+ border: 1px solid var(--border);
628
+ border-radius: var(--radius-lg);
629
+ overflow: hidden;
630
+ animation: fadeIn 0.15s ease;
631
+ }
632
+
633
+ .dashboard__module-preview-header {
634
+ display: flex;
635
+ align-items: center;
636
+ gap: 12px;
637
+ padding: 8px 12px;
638
+ background: var(--bg-panel-solid);
639
+ border-bottom: 1px solid var(--border);
640
+ }
641
+
642
+ .dashboard__module-preview-name {
643
+ font-size: 13px;
644
+ font-weight: 600;
645
+ color: var(--text);
646
+ }
647
+
648
+ .dashboard__module-preview-used {
649
+ font-size: 11px;
650
+ color: var(--text-dim);
651
+ flex: 1;
652
+ }
653
+
654
+ .dashboard__module-preview-close {
655
+ background: none;
656
+ border: none;
657
+ color: var(--text-dim);
658
+ font-size: 18px;
659
+ cursor: pointer;
660
+ padding: 0 4px;
661
+ line-height: 1;
662
+ }
663
+
664
+ .dashboard__module-preview-close:hover {
665
+ color: var(--text);
666
+ }
667
+
668
+ .dashboard__module-preview-frame {
669
+ width: 100%;
670
+ height: 320px;
671
+ border: none;
672
+ background: #0f0f14;
673
+ }
674
+
675
+ /* Brand asset upload */
676
+ .dashboard__brand-assets {
677
+ display: flex;
678
+ gap: 12px;
679
+ }
680
+
681
+ .brand-asset-upload {
682
+ display: flex;
683
+ align-items: center;
684
+ gap: 8px;
685
+ padding: 10px 16px;
686
+ border: 1px dashed var(--border);
687
+ border-radius: var(--radius);
688
+ cursor: pointer;
689
+ transition: border-color 0.15s ease;
690
+ }
691
+
692
+ .brand-asset-upload:hover {
693
+ border-color: var(--accent);
694
+ }
695
+
696
+ .brand-asset-upload__icon {
697
+ width: 24px;
698
+ height: 24px;
699
+ display: flex;
700
+ align-items: center;
701
+ justify-content: center;
702
+ border-radius: 50%;
703
+ background: var(--bg-hover);
704
+ color: var(--text-dim);
705
+ font-size: 14px;
706
+ font-weight: 500;
707
+ }
708
+
709
+ .brand-asset-upload__icon--done {
710
+ background: rgba(74,222,128,0.15);
711
+ color: var(--success);
712
+ }
713
+
714
+ .brand-asset-upload__label {
715
+ font-size: 13px;
716
+ color: var(--text);
717
+ }
718
+
719
+ /* Back button in dashboard topbar */
720
+ .topbar__back-btn {
721
+ background: none;
722
+ border: none;
723
+ color: var(--text-dim);
724
+ cursor: pointer;
725
+ padding: 4px;
726
+ border-radius: var(--radius-sm);
727
+ display: flex;
728
+ align-items: center;
729
+ transition: color 0.15s ease;
730
+ }
731
+
732
+ .topbar__back-btn:hover {
733
+ color: var(--text);
734
+ }
735
+
736
+ /* Small button variant */
737
+ .btn--sm {
738
+ padding: 4px 12px;
739
+ font-size: 12px;
740
+ }
741
+
742
+ @media (max-width: 640px) {
743
+ .dashboard__page-types {
744
+ grid-template-columns: repeat(2, 1fr);
745
+ }
746
+ }
747
+
748
+ /* ================================================================
749
+ TOPBAR (main app)
750
+ ================================================================ */
751
+ .topbar {
752
+ height: var(--topbar-h);
753
+ display: flex;
754
+ align-items: center;
755
+ justify-content: space-between;
756
+ padding: 0 16px;
757
+ background: rgba(12,10,9,0.85);
758
+ backdrop-filter: blur(12px);
759
+ -webkit-backdrop-filter: blur(12px);
760
+ border-bottom: 1px solid var(--border);
761
+ z-index: 100;
762
+ }
763
+
764
+ .topbar__left {
765
+ display: flex;
766
+ align-items: center;
767
+ gap: 12px;
768
+ flex: 0 0 auto;
769
+ min-width: 0;
770
+ }
771
+
772
+ .topbar__brand {
773
+ display: flex;
774
+ align-items: center;
775
+ gap: 8px;
776
+ }
777
+
778
+ .topbar__logo-icon {
779
+ width: 28px;
780
+ height: 28px;
781
+ display: flex;
782
+ align-items: center;
783
+ justify-content: center;
784
+ background: var(--accent-gradient);
785
+ border-radius: 8px;
786
+ color: #fff;
787
+ font-family: var(--font-display);
788
+ font-weight: 700;
789
+ font-size: 16px;
790
+ line-height: 1;
791
+ }
792
+
793
+ .topbar__brand-name {
794
+ font-family: var(--font-display);
795
+ font-weight: 700;
796
+ font-size: 17px;
797
+ letter-spacing: -0.02em;
798
+ color: var(--text);
799
+ }
800
+
801
+ .topbar__project-pill {
802
+ font-size: 12px;
803
+ color: var(--text-dim);
804
+ padding: 2px 10px;
805
+ border: 1px solid var(--border);
806
+ border-radius: var(--radius-pill);
807
+ white-space: nowrap;
808
+ overflow: hidden;
809
+ text-overflow: ellipsis;
810
+ max-width: 180px;
811
+ }
812
+
813
+ .topbar__center {
814
+ display: flex;
815
+ align-items: center;
816
+ flex: 0 0 auto;
817
+ }
818
+
819
+ .topbar__right {
820
+ display: flex;
821
+ align-items: center;
822
+ gap: 8px;
823
+ flex: 0 0 auto;
824
+ }
825
+
826
+
827
+ .topbar__icon-btn {
828
+ width: 34px;
829
+ height: 34px;
830
+ display: flex;
831
+ align-items: center;
832
+ justify-content: center;
833
+ background: none;
834
+ border: none;
835
+ color: var(--text-dim);
836
+ cursor: pointer;
837
+ border-radius: var(--radius-sm);
838
+ transition: all 0.15s ease;
839
+ }
840
+ .topbar__icon-btn:hover {
841
+ background: var(--bg-hover);
842
+ color: var(--text);
843
+ }
844
+
845
+ /* ================================================================
846
+ BUTTONS
847
+ ================================================================ */
848
+ .btn {
849
+ padding: 8px 16px;
850
+ border-radius: var(--radius);
851
+ border: none;
852
+ font-family: var(--font);
853
+ font-size: 13px;
854
+ font-weight: 500;
855
+ cursor: pointer;
856
+ transition: all 0.2s ease;
857
+ }
858
+
859
+ .btn--primary {
860
+ background: var(--accent-gradient);
861
+ color: white;
862
+ font-weight: 600;
863
+ }
864
+ .btn--primary:hover { filter: brightness(1.1); }
865
+
866
+ .btn--secondary {
867
+ background: var(--bg-input);
868
+ color: var(--text);
869
+ border: 1px solid var(--border);
870
+ }
871
+ .btn--secondary:hover {
872
+ background: var(--bg-hover);
873
+ border-color: var(--accent-glow);
874
+ }
875
+
876
+ .btn--ghost {
877
+ background: none;
878
+ color: var(--text-dim);
879
+ border: 1px solid var(--border);
880
+ }
881
+ .btn--ghost:hover {
882
+ color: var(--text);
883
+ border-color: var(--border-hover);
884
+ }
885
+
886
+ .btn--danger {
887
+ background: var(--error);
888
+ color: #fff;
889
+ border: 1px solid var(--error);
890
+ }
891
+ .btn--danger:hover {
892
+ filter: brightness(1.15);
893
+ }
894
+
895
+ /* Confirm dialog overlay */
896
+ .confirm-overlay {
897
+ position: fixed;
898
+ inset: 0;
899
+ background: rgba(0,0,0,0.6);
900
+ z-index: 9999;
901
+ display: flex;
902
+ align-items: center;
903
+ justify-content: center;
904
+ animation: fadeIn 0.12s ease;
905
+ }
906
+ .confirm-dialog {
907
+ background: var(--bg-panel-solid);
908
+ border: 1px solid var(--border);
909
+ border-radius: var(--radius-lg);
910
+ padding: 24px;
911
+ width: 360px;
912
+ max-width: 90vw;
913
+ box-shadow: 0 16px 48px rgba(0,0,0,0.5);
914
+ }
915
+ .confirm-dialog__title {
916
+ font-size: 16px;
917
+ font-weight: 600;
918
+ margin-bottom: 16px;
919
+ }
920
+ .confirm-dialog__check {
921
+ display: flex;
922
+ align-items: center;
923
+ gap: 8px;
924
+ font-size: 13px;
925
+ color: var(--text);
926
+ cursor: pointer;
927
+ margin-bottom: 8px;
928
+ }
929
+ .confirm-dialog__check input[type="checkbox"] {
930
+ accent-color: var(--accent);
931
+ width: 16px;
932
+ height: 16px;
933
+ }
934
+ .confirm-dialog__detail {
935
+ font-size: 13px;
936
+ color: var(--text-dim);
937
+ margin-bottom: 12px;
938
+ }
939
+ .confirm-dialog__detail strong {
940
+ color: var(--text);
941
+ }
942
+ .confirm-dialog__warn {
943
+ font-size: 12px;
944
+ color: var(--error);
945
+ margin-bottom: 20px;
946
+ padding-left: 24px;
947
+ }
948
+ .confirm-dialog__input {
949
+ width: 100%;
950
+ padding: 8px 12px;
951
+ font-size: 14px;
952
+ font-family: inherit;
953
+ color: var(--text);
954
+ background: var(--bg-input, var(--bg-main));
955
+ border: 1px solid var(--border);
956
+ border-radius: var(--radius);
957
+ outline: none;
958
+ margin-bottom: 20px;
959
+ box-sizing: border-box;
960
+ }
961
+ .confirm-dialog__input:focus {
962
+ border-color: var(--accent);
963
+ box-shadow: 0 0 0 2px rgba(255,107,53,0.2);
964
+ }
965
+ .confirm-dialog__actions {
966
+ display: flex;
967
+ justify-content: flex-end;
968
+ gap: 8px;
969
+ }
970
+
971
+ /* HubSpot setup dialog (deferred install/auth) */
972
+ .hs-setup__steps {
973
+ margin: 12px 0 16px;
974
+ padding-left: 20px;
975
+ font-size: 13px;
976
+ color: var(--text-dim);
977
+ line-height: 1.7;
978
+ }
979
+ .hs-setup__steps a {
980
+ color: var(--accent);
981
+ text-decoration: underline;
982
+ }
983
+ .hs-setup__status {
984
+ display: flex;
985
+ align-items: center;
986
+ gap: 8px;
987
+ margin-top: 12px;
988
+ font-size: 13px;
989
+ color: var(--text-dim);
990
+ }
991
+
992
+ /* ================================================================
993
+ RESPONSIVE TOGGLE
994
+ ================================================================ */
995
+ .responsive-toggle {
996
+ display: flex;
997
+ gap: 2px;
998
+ background: var(--bg-input);
999
+ border: 1px solid var(--border);
1000
+ border-radius: var(--radius-pill);
1001
+ padding: 3px;
1002
+ }
1003
+
1004
+ .responsive-btn {
1005
+ display: flex;
1006
+ align-items: center;
1007
+ justify-content: center;
1008
+ width: 32px;
1009
+ height: 28px;
1010
+ border: none;
1011
+ background: transparent;
1012
+ color: var(--text-muted);
1013
+ border-radius: var(--radius-pill);
1014
+ cursor: pointer;
1015
+ transition: all 0.15s ease;
1016
+ }
1017
+ .responsive-btn:hover { color: var(--text-dim); }
1018
+ .responsive-btn.active {
1019
+ background: var(--accent-dim);
1020
+ color: var(--accent);
1021
+ }
1022
+
1023
+ /* ================================================================
1024
+ LAYOUT (side-by-side chat + preview)
1025
+ ================================================================ */
1026
+ .layout {
1027
+ display: flex;
1028
+ height: calc(100vh - var(--topbar-h) - var(--statusbar-h));
1029
+ }
1030
+
1031
+ .panel--left {
1032
+ width: 380px;
1033
+ min-width: 300px;
1034
+ max-width: 600px;
1035
+ display: flex;
1036
+ flex-direction: column;
1037
+ background: var(--bg-panel-solid);
1038
+ border-right: 1px solid var(--border);
1039
+ }
1040
+
1041
+ .panel--right {
1042
+ flex: 1;
1043
+ display: flex;
1044
+ position: relative;
1045
+ background: #111;
1046
+ }
1047
+
1048
+ .resize-handle {
1049
+ width: 4px;
1050
+ cursor: col-resize;
1051
+ background: transparent;
1052
+ transition: background 0.15s;
1053
+ z-index: 10;
1054
+ }
1055
+ .resize-handle:hover, .resize-handle.dragging {
1056
+ background: var(--accent);
1057
+ }
1058
+
1059
+ /* ================================================================
1060
+ MODULE LIST
1061
+ ================================================================ */
1062
+ .module-list {
1063
+ border-bottom: 1px solid var(--border);
1064
+ max-height: 200px;
1065
+ overflow-y: auto;
1066
+ }
1067
+
1068
+ .module-list__header {
1069
+ display: flex;
1070
+ align-items: center;
1071
+ justify-content: space-between;
1072
+ padding: 10px 16px;
1073
+ font-family: var(--font);
1074
+ font-size: 11px;
1075
+ font-weight: 600;
1076
+ text-transform: uppercase;
1077
+ letter-spacing: 0.08em;
1078
+ color: var(--text-dim);
1079
+ }
1080
+
1081
+ .module-list__count {
1082
+ background: var(--bg-active);
1083
+ color: var(--text-dim);
1084
+ padding: 1px 7px;
1085
+ border-radius: var(--radius-pill);
1086
+ font-size: 11px;
1087
+ }
1088
+
1089
+ .module-list__add-btn {
1090
+ margin-left: auto;
1091
+ background: none;
1092
+ border: 1px solid var(--border);
1093
+ color: var(--text-dim);
1094
+ width: 22px;
1095
+ height: 22px;
1096
+ border-radius: var(--radius-sm);
1097
+ cursor: pointer;
1098
+ font-size: 14px;
1099
+ display: flex;
1100
+ align-items: center;
1101
+ justify-content: center;
1102
+ transition: all 0.15s;
1103
+ }
1104
+
1105
+ .module-list__add-btn:hover {
1106
+ border-color: var(--accent);
1107
+ color: var(--accent);
1108
+ }
1109
+
1110
+ /* Module library dropdown */
1111
+ .module-library-dropdown {
1112
+ position: relative;
1113
+ background: var(--bg-panel-solid);
1114
+ border: 1px solid var(--border);
1115
+ border-radius: var(--radius);
1116
+ margin: 0 8px 8px;
1117
+ max-height: 180px;
1118
+ overflow-y: auto;
1119
+ }
1120
+
1121
+ .module-library-dropdown__empty {
1122
+ padding: 12px;
1123
+ font-size: 12px;
1124
+ color: var(--text-dim);
1125
+ text-align: center;
1126
+ }
1127
+
1128
+ .module-library-dropdown__item {
1129
+ display: flex;
1130
+ align-items: center;
1131
+ justify-content: space-between;
1132
+ width: 100%;
1133
+ padding: 8px 12px;
1134
+ background: none;
1135
+ border: none;
1136
+ color: var(--text);
1137
+ font-size: 13px;
1138
+ cursor: pointer;
1139
+ text-align: left;
1140
+ transition: background 0.15s;
1141
+ }
1142
+
1143
+ .module-library-dropdown__item:hover {
1144
+ background: var(--bg-hover);
1145
+ }
1146
+
1147
+ .module-library-dropdown__name {
1148
+ font-weight: 500;
1149
+ }
1150
+
1151
+ .module-library-dropdown__meta {
1152
+ font-size: 11px;
1153
+ color: var(--text-dim);
1154
+ }
1155
+
1156
+ .module-list__items {
1157
+ padding: 0 8px 8px;
1158
+ }
1159
+
1160
+ .module-item {
1161
+ display: flex;
1162
+ align-items: center;
1163
+ gap: 8px;
1164
+ padding: 6px 8px;
1165
+ border-radius: 8px;
1166
+ cursor: pointer;
1167
+ font-size: 13px;
1168
+ color: var(--text-dim);
1169
+ transition: all 0.15s;
1170
+ }
1171
+ .module-item:hover {
1172
+ background: var(--bg-hover);
1173
+ color: var(--text);
1174
+ }
1175
+ .module-item.active {
1176
+ background: var(--accent-dim);
1177
+ color: var(--accent);
1178
+ }
1179
+
1180
+ .module-item__drag {
1181
+ cursor: grab;
1182
+ color: var(--accent);
1183
+ opacity: 0.5;
1184
+ font-size: 11px;
1185
+ line-height: 1;
1186
+ }
1187
+ .module-item:hover .module-item__drag { opacity: 1; }
1188
+
1189
+ .module-item__name { flex: 1; }
1190
+
1191
+ .module-item__edit {
1192
+ opacity: 0;
1193
+ color: var(--accent);
1194
+ font-size: 12px;
1195
+ cursor: pointer;
1196
+ padding: 2px;
1197
+ transition: opacity 0.1s;
1198
+ }
1199
+ .module-item:hover .module-item__edit { opacity: 1; }
1200
+ .module-item__edit:hover { color: var(--accent-hover); }
1201
+
1202
+ .module-item__delete {
1203
+ opacity: 0;
1204
+ color: var(--accent);
1205
+ font-size: 15px;
1206
+ cursor: pointer;
1207
+ padding: 2px;
1208
+ transition: opacity 0.1s;
1209
+ line-height: 1;
1210
+ }
1211
+ .module-item:hover .module-item__delete { opacity: 1; }
1212
+ .module-item__delete:hover { color: var(--accent-hover); }
1213
+
1214
+ /* ================================================================
1215
+ CHAT
1216
+ ================================================================ */
1217
+ .chat {
1218
+ flex: 1;
1219
+ display: flex;
1220
+ flex-direction: column;
1221
+ overflow: hidden;
1222
+ }
1223
+
1224
+ .chat__messages {
1225
+ flex: 1;
1226
+ overflow-y: auto;
1227
+ padding: 16px;
1228
+ scroll-behavior: smooth;
1229
+ }
1230
+
1231
+ .chat__welcome {
1232
+ text-align: center;
1233
+ padding: 40px 20px;
1234
+ }
1235
+
1236
+ .chat__welcome p {
1237
+ color: var(--text-dim);
1238
+ font-size: 14px;
1239
+ max-width: 320px;
1240
+ margin: 0 auto 20px;
1241
+ line-height: 1.5;
1242
+ }
1243
+
1244
+ .chat__starters {
1245
+ display: flex;
1246
+ flex-wrap: wrap;
1247
+ gap: 8px;
1248
+ justify-content: center;
1249
+ }
1250
+
1251
+ .starter-btn {
1252
+ padding: 8px 14px;
1253
+ background: var(--bg-input);
1254
+ border: 1px solid var(--border);
1255
+ border-radius: var(--radius);
1256
+ color: var(--text);
1257
+ font-family: var(--font);
1258
+ font-size: 13px;
1259
+ cursor: pointer;
1260
+ transition: all 0.2s ease;
1261
+ }
1262
+ .starter-btn:hover {
1263
+ border-color: var(--accent-glow);
1264
+ background: var(--accent-tint);
1265
+ color: var(--accent-hover);
1266
+ }
1267
+
1268
+ .chat__section-label {
1269
+ font-size: 11px;
1270
+ font-weight: 600;
1271
+ text-transform: uppercase;
1272
+ letter-spacing: 0.08em;
1273
+ color: var(--text-muted);
1274
+ margin: 20px 0 10px;
1275
+ }
1276
+
1277
+ /* Import from GitHub */
1278
+ .chat__import { margin-top: 4px; }
1279
+
1280
+ .import-row {
1281
+ display: flex;
1282
+ gap: 8px;
1283
+ justify-content: center;
1284
+ max-width: 400px;
1285
+ margin: 0 auto;
1286
+ }
1287
+
1288
+ .import-input {
1289
+ flex: 1;
1290
+ padding: 8px 12px;
1291
+ background: var(--bg-input);
1292
+ border: 1px solid var(--border);
1293
+ border-radius: var(--radius);
1294
+ color: var(--text);
1295
+ font-family: var(--font);
1296
+ font-size: 13px;
1297
+ outline: none;
1298
+ transition: border-color 0.2s;
1299
+ }
1300
+ .import-input:focus { border-color: var(--accent-glow); }
1301
+ .import-input::placeholder { color: var(--text-muted); }
1302
+
1303
+ .import-btn { white-space: nowrap; }
1304
+
1305
+ .import-hint {
1306
+ font-size: 12px;
1307
+ color: var(--text-muted);
1308
+ margin-top: 6px;
1309
+ }
1310
+
1311
+ /* Chat messages */
1312
+ .chat-msg {
1313
+ margin-bottom: 16px;
1314
+ animation: fadeIn 0.2s ease;
1315
+ }
1316
+
1317
+ @keyframes fadeIn {
1318
+ from { opacity: 0; transform: translateY(4px); }
1319
+ to { opacity: 1; transform: translateY(0); }
1320
+ }
1321
+
1322
+ .chat-msg--user {
1323
+ display: flex;
1324
+ justify-content: flex-end;
1325
+ }
1326
+
1327
+ .chat-msg--user .chat-msg__bubble {
1328
+ background: var(--accent-gradient);
1329
+ color: white;
1330
+ border-radius: var(--radius) var(--radius) 2px var(--radius);
1331
+ max-width: 85%;
1332
+ }
1333
+
1334
+ .chat-msg--assistant .chat-msg__bubble {
1335
+ background: var(--bg-input);
1336
+ color: var(--text);
1337
+ border-radius: var(--radius) var(--radius) var(--radius) 2px;
1338
+ max-width: 95%;
1339
+ border: 1px solid var(--border);
1340
+ }
1341
+
1342
+ .chat-msg__bubble {
1343
+ padding: 10px 14px;
1344
+ font-size: 13.5px;
1345
+ line-height: 1.6;
1346
+ word-wrap: break-word;
1347
+ }
1348
+
1349
+ .chat-msg__bubble p { margin-bottom: 8px; }
1350
+ .chat-msg__bubble p:last-child { margin-bottom: 0; }
1351
+
1352
+ .chat-msg__bubble code {
1353
+ font-family: var(--font-mono);
1354
+ font-size: 12px;
1355
+ background: rgba(0,0,0,0.3);
1356
+ padding: 1px 5px;
1357
+ border-radius: 3px;
1358
+ }
1359
+
1360
+ .chat-msg__bubble pre {
1361
+ background: rgba(0,0,0,0.4);
1362
+ padding: 10px;
1363
+ border-radius: var(--radius-sm);
1364
+ overflow-x: auto;
1365
+ margin: 8px 0;
1366
+ font-family: var(--font-mono);
1367
+ font-size: 12px;
1368
+ line-height: 1.5;
1369
+ }
1370
+
1371
+ .chat-msg__bubble pre code {
1372
+ background: none;
1373
+ padding: 0;
1374
+ }
1375
+
1376
+ /* Stream status (shown while AI generates) */
1377
+ .stream-status {
1378
+ display: flex;
1379
+ align-items: center;
1380
+ gap: 8px;
1381
+ padding: 6px 0 2px;
1382
+ font-size: 12.5px;
1383
+ color: var(--text-dim);
1384
+ animation: statusFadeIn 0.3s ease;
1385
+ }
1386
+
1387
+ .stream-status::before {
1388
+ content: "";
1389
+ display: inline-block;
1390
+ width: 14px;
1391
+ height: 14px;
1392
+ border: 2px solid var(--accent);
1393
+ border-top-color: transparent;
1394
+ border-radius: 50%;
1395
+ animation: spin 0.8s linear infinite;
1396
+ flex-shrink: 0;
1397
+ }
1398
+
1399
+ .stream-status__text { flex: 1; }
1400
+ .stream-status__timer {
1401
+ font-variant-numeric: tabular-nums;
1402
+ opacity: 0.6;
1403
+ font-size: 11.5px;
1404
+ flex-shrink: 0;
1405
+ }
1406
+
1407
+ .chat-msg__meta {
1408
+ font-size: 11px;
1409
+ color: var(--text-dim);
1410
+ opacity: 0.5;
1411
+ padding: 3px 0 0;
1412
+ font-variant-numeric: tabular-nums;
1413
+ }
1414
+
1415
+ @keyframes statusFadeIn {
1416
+ from { opacity: 0; transform: translateY(4px); }
1417
+ to { opacity: 1; transform: translateY(0); }
1418
+ }
1419
+
1420
+ /* Chat input */
1421
+ .chat__input-area {
1422
+ display: flex;
1423
+ align-items: flex-end;
1424
+ gap: 8px;
1425
+ padding: 12px 16px;
1426
+ border-top: 1px solid var(--border);
1427
+ background: var(--bg-panel-solid);
1428
+ }
1429
+
1430
+ .chat__input {
1431
+ flex: 1;
1432
+ resize: none;
1433
+ border: 1px solid var(--border);
1434
+ border-radius: var(--radius);
1435
+ padding: 10px 14px;
1436
+ background: var(--bg-input);
1437
+ color: var(--text);
1438
+ font-family: var(--font);
1439
+ font-size: 14px;
1440
+ line-height: 1.5;
1441
+ max-height: 150px;
1442
+ outline: none;
1443
+ transition: border-color 0.2s;
1444
+ }
1445
+ .chat__input:focus { border-color: var(--accent-glow); }
1446
+ .chat__input::placeholder { color: var(--text-muted); }
1447
+
1448
+ .chat__send {
1449
+ width: 38px;
1450
+ height: 38px;
1451
+ display: flex;
1452
+ align-items: center;
1453
+ justify-content: center;
1454
+ background: var(--accent-gradient);
1455
+ border: none;
1456
+ border-radius: var(--radius);
1457
+ color: white;
1458
+ cursor: pointer;
1459
+ transition: filter 0.15s;
1460
+ flex-shrink: 0;
1461
+ }
1462
+ .chat__send:hover { filter: brightness(1.15); }
1463
+ .chat__send:disabled { opacity: 0.4; cursor: default; }
1464
+
1465
+ /* ================================================================
1466
+ PREVIEW (browser chrome wrapper)
1467
+ ================================================================ */
1468
+ .preview {
1469
+ flex: 1;
1470
+ display: flex;
1471
+ align-items: stretch;
1472
+ justify-content: center;
1473
+ padding: 16px;
1474
+ overflow: hidden;
1475
+ }
1476
+
1477
+ .browser-chrome {
1478
+ flex: 1;
1479
+ display: flex;
1480
+ flex-direction: column;
1481
+ background: #0a0a0a;
1482
+ border: 1px solid var(--border);
1483
+ border-radius: 12px;
1484
+ overflow: hidden;
1485
+ box-shadow: 0 20px 60px rgba(0,0,0,0.5);
1486
+ transition: max-width 0.3s ease;
1487
+ }
1488
+
1489
+ .browser-chrome__bar {
1490
+ height: 36px;
1491
+ display: flex;
1492
+ align-items: center;
1493
+ gap: 12px;
1494
+ padding: 0 14px;
1495
+ background: rgba(255,255,255,0.03);
1496
+ border-bottom: 1px solid var(--border);
1497
+ flex-shrink: 0;
1498
+ }
1499
+
1500
+ .browser-chrome__dots {
1501
+ display: flex;
1502
+ gap: 6px;
1503
+ }
1504
+
1505
+ .browser-chrome__dot {
1506
+ width: 10px;
1507
+ height: 10px;
1508
+ border-radius: 50%;
1509
+ background: rgba(255,255,255,0.08);
1510
+ }
1511
+
1512
+ .browser-chrome__url {
1513
+ flex: 1;
1514
+ text-align: center;
1515
+ font-size: 12px;
1516
+ color: var(--text-muted);
1517
+ font-family: var(--font-mono);
1518
+ }
1519
+
1520
+ .browser-chrome__frame {
1521
+ flex: 1;
1522
+ width: 100%;
1523
+ border: none;
1524
+ background: white;
1525
+ }
1526
+
1527
+ /* Legacy class kept for backwards compat */
1528
+ .preview__frame {
1529
+ width: 100%;
1530
+ height: 100%;
1531
+ border: none;
1532
+ background: white;
1533
+ border-radius: var(--radius);
1534
+ transition: width 0.3s ease;
1535
+ }
1536
+
1537
+ /* ================================================================
1538
+ FIELD EDITOR SIDEBAR
1539
+ ================================================================ */
1540
+ .field-editor {
1541
+ width: 0;
1542
+ overflow: hidden;
1543
+ background: var(--bg-panel-solid);
1544
+ border-left: 1px solid var(--border);
1545
+ transition: width 0.2s ease;
1546
+ flex-shrink: 0;
1547
+ }
1548
+
1549
+ .field-editor.open { width: 280px; }
1550
+
1551
+ .field-editor__header {
1552
+ display: flex;
1553
+ align-items: center;
1554
+ justify-content: space-between;
1555
+ padding: 12px 16px;
1556
+ border-bottom: 1px solid var(--border);
1557
+ }
1558
+
1559
+ .field-editor__header h3 {
1560
+ font-family: var(--font-display);
1561
+ font-size: 14px;
1562
+ font-weight: 600;
1563
+ }
1564
+
1565
+ .field-editor__close {
1566
+ width: 24px;
1567
+ height: 24px;
1568
+ display: flex;
1569
+ align-items: center;
1570
+ justify-content: center;
1571
+ background: none;
1572
+ border: none;
1573
+ color: var(--text-dim);
1574
+ font-size: 18px;
1575
+ cursor: pointer;
1576
+ border-radius: var(--radius-sm);
1577
+ }
1578
+ .field-editor__close:hover { background: var(--bg-hover); color: var(--text); }
1579
+
1580
+ .field-editor__content {
1581
+ padding: 12px 16px;
1582
+ overflow-y: auto;
1583
+ max-height: calc(100vh - var(--topbar-h) - var(--statusbar-h) - 50px);
1584
+ }
1585
+
1586
+ /* Field editor items */
1587
+ .field-group { margin-bottom: 16px; }
1588
+
1589
+ .field-group__label {
1590
+ display: block;
1591
+ font-size: 11px;
1592
+ font-weight: 600;
1593
+ text-transform: uppercase;
1594
+ letter-spacing: 0.08em;
1595
+ color: var(--text-dim);
1596
+ margin-bottom: 6px;
1597
+ }
1598
+
1599
+ .field-group__tab-label {
1600
+ font-size: 11px;
1601
+ color: var(--accent);
1602
+ font-weight: 500;
1603
+ margin-bottom: 8px;
1604
+ text-transform: uppercase;
1605
+ letter-spacing: 0.08em;
1606
+ }
1607
+
1608
+ .field-input {
1609
+ width: 100%;
1610
+ padding: 7px 10px;
1611
+ background: var(--bg-input);
1612
+ border: 1px solid var(--border);
1613
+ border-radius: var(--radius-sm);
1614
+ color: var(--text);
1615
+ font-family: var(--font);
1616
+ font-size: 13px;
1617
+ outline: none;
1618
+ transition: border-color 0.2s;
1619
+ }
1620
+ .field-input:focus { border-color: var(--accent-glow); }
1621
+
1622
+ .field-color {
1623
+ display: flex;
1624
+ align-items: center;
1625
+ gap: 8px;
1626
+ }
1627
+
1628
+ .field-color__picker {
1629
+ width: 32px;
1630
+ height: 32px;
1631
+ border: 2px solid var(--border);
1632
+ border-radius: var(--radius-sm);
1633
+ cursor: pointer;
1634
+ padding: 0;
1635
+ background: none;
1636
+ }
1637
+
1638
+ .field-color__hex { flex: 1; }
1639
+
1640
+ /* ================================================================
1641
+ STATUS BAR
1642
+ ================================================================ */
1643
+ .statusbar {
1644
+ height: var(--statusbar-h);
1645
+ display: flex;
1646
+ align-items: center;
1647
+ justify-content: space-between;
1648
+ padding: 0 16px;
1649
+ background: var(--bg-panel-solid);
1650
+ border-top: 1px solid var(--border);
1651
+ font-size: 12px;
1652
+ color: var(--text-muted);
1653
+ }
1654
+
1655
+ .statusbar__engine {
1656
+ font-size: 11px;
1657
+ color: var(--text-muted);
1658
+ }
1659
+
1660
+ .statusbar__pill {
1661
+ display: inline-flex;
1662
+ align-items: center;
1663
+ gap: 5px;
1664
+ padding: 2px 8px;
1665
+ border-radius: var(--radius-pill);
1666
+ font-size: 11px;
1667
+ background: var(--accent-tint);
1668
+ color: var(--text-dim);
1669
+ border: 1px solid var(--border);
1670
+ }
1671
+ .statusbar__pill:empty { display: none; }
1672
+ .statusbar__pill--visible { display: inline-flex; }
1673
+ .statusbar__pill-dot,
1674
+ .statusbar__dot {
1675
+ display: inline-block;
1676
+ width: 6px;
1677
+ height: 6px;
1678
+ border-radius: 50%;
1679
+ background: var(--success);
1680
+ }
1681
+ .statusbar__dot--ok { background: var(--success); }
1682
+
1683
+ /* ================================================================
1684
+ SETTINGS OVERLAY
1685
+ ================================================================ */
1686
+ .settings-overlay {
1687
+ position: fixed;
1688
+ inset: 0;
1689
+ background: rgba(0,0,0,0.7);
1690
+ z-index: 500;
1691
+ display: flex;
1692
+ align-items: center;
1693
+ justify-content: center;
1694
+ animation: settingsFadeIn 0.15s ease;
1695
+ }
1696
+
1697
+ @keyframes settingsFadeIn {
1698
+ from { opacity: 0; }
1699
+ to { opacity: 1; }
1700
+ }
1701
+
1702
+ .settings-panel {
1703
+ width: 90%;
1704
+ max-width: 560px;
1705
+ max-height: 85vh;
1706
+ background: var(--bg-panel-solid);
1707
+ border: 1px solid var(--border);
1708
+ border-radius: var(--radius-lg);
1709
+ display: flex;
1710
+ flex-direction: column;
1711
+ box-shadow: 0 20px 60px rgba(0,0,0,0.6);
1712
+ }
1713
+
1714
+ .settings__header {
1715
+ display: flex;
1716
+ align-items: center;
1717
+ justify-content: space-between;
1718
+ padding: 16px 20px;
1719
+ border-bottom: 1px solid var(--border);
1720
+ flex-shrink: 0;
1721
+ }
1722
+
1723
+ .settings__title {
1724
+ font-family: var(--font-display);
1725
+ font-size: 16px;
1726
+ font-weight: 600;
1727
+ }
1728
+
1729
+ .settings__close {
1730
+ width: 28px;
1731
+ height: 28px;
1732
+ display: flex;
1733
+ align-items: center;
1734
+ justify-content: center;
1735
+ background: none;
1736
+ border: none;
1737
+ color: var(--text-dim);
1738
+ font-size: 20px;
1739
+ cursor: pointer;
1740
+ border-radius: var(--radius-sm);
1741
+ }
1742
+ .settings__close:hover { background: var(--bg-hover); color: var(--text); }
1743
+
1744
+ .settings__body {
1745
+ overflow-y: auto;
1746
+ padding: 20px;
1747
+ }
1748
+
1749
+ .settings__loading {
1750
+ display: flex;
1751
+ align-items: center;
1752
+ gap: 12px;
1753
+ justify-content: center;
1754
+ padding: 40px 0;
1755
+ color: var(--text-dim);
1756
+ font-size: 14px;
1757
+ }
1758
+
1759
+ /* Settings sections */
1760
+ .settings__section { margin-bottom: 28px; }
1761
+ .settings__section:last-child { margin-bottom: 0; }
1762
+
1763
+ .settings__section-title {
1764
+ font-size: 11px;
1765
+ font-weight: 600;
1766
+ text-transform: uppercase;
1767
+ letter-spacing: 0.08em;
1768
+ color: var(--text-muted);
1769
+ margin-bottom: 12px;
1770
+ padding-bottom: 6px;
1771
+ border-bottom: 1px solid var(--border);
1772
+ }
1773
+
1774
+ .settings__subsection { margin-top: 16px; }
1775
+
1776
+ .settings__subsection-title {
1777
+ font-size: 11px;
1778
+ font-weight: 600;
1779
+ text-transform: uppercase;
1780
+ letter-spacing: 0.08em;
1781
+ color: var(--text-muted);
1782
+ margin-bottom: 8px;
1783
+ }
1784
+
1785
+ /* Engine selector (radio/pill group) */
1786
+ .settings__engine-select {
1787
+ display: flex;
1788
+ flex-wrap: wrap;
1789
+ gap: 6px;
1790
+ margin-bottom: 16px;
1791
+ }
1792
+
1793
+ .settings__engine-option {
1794
+ padding: 6px 12px;
1795
+ background: var(--bg-input);
1796
+ border: 1px solid var(--border);
1797
+ border-radius: var(--radius);
1798
+ color: var(--text-dim);
1799
+ font-family: var(--font);
1800
+ font-size: 13px;
1801
+ cursor: pointer;
1802
+ transition: all 0.2s ease;
1803
+ }
1804
+ .settings__engine-option:hover {
1805
+ border-color: var(--accent-glow);
1806
+ color: var(--text);
1807
+ }
1808
+ .settings__engine-option.active {
1809
+ background: var(--accent-dim);
1810
+ border-color: var(--accent);
1811
+ color: var(--accent);
1812
+ font-weight: 500;
1813
+ }
1814
+ .settings__engine-option:disabled {
1815
+ opacity: 0.4;
1816
+ cursor: not-allowed;
1817
+ }
1818
+
1819
+ /* Model selector */
1820
+ .settings__model-row {
1821
+ display: flex;
1822
+ align-items: center;
1823
+ gap: 10px;
1824
+ margin-bottom: 16px;
1825
+ padding: 8px 12px;
1826
+ background: var(--bg-input);
1827
+ border: 1px solid var(--border);
1828
+ border-radius: var(--radius);
1829
+ }
1830
+ .settings__model-select {
1831
+ flex: 1;
1832
+ padding: 5px 8px;
1833
+ background: var(--bg);
1834
+ border: 1px solid var(--border);
1835
+ border-radius: var(--radius);
1836
+ color: var(--text);
1837
+ font-family: var(--font);
1838
+ font-size: 13px;
1839
+ cursor: pointer;
1840
+ }
1841
+ .settings__model-select:hover { border-color: var(--accent-glow); }
1842
+
1843
+ .settings__card-row--sub {
1844
+ padding-left: 22px;
1845
+ padding-top: 0;
1846
+ padding-bottom: 4px;
1847
+ }
1848
+
1849
+ /* Tool/service cards */
1850
+ .settings__card {
1851
+ background: var(--bg-input);
1852
+ border: 1px solid var(--border);
1853
+ border-radius: var(--radius);
1854
+ padding: 12px 16px;
1855
+ margin-bottom: 8px;
1856
+ }
1857
+ .settings__card:last-child { margin-bottom: 0; }
1858
+
1859
+ .settings__card-row {
1860
+ display: flex;
1861
+ align-items: center;
1862
+ gap: 8px;
1863
+ margin-bottom: 4px;
1864
+ }
1865
+ .settings__card-row:last-child { margin-bottom: 0; }
1866
+
1867
+ .settings__card-label {
1868
+ font-size: 13px;
1869
+ font-weight: 500;
1870
+ flex: 1;
1871
+ }
1872
+
1873
+ .settings__card-meta {
1874
+ font-size: 12px;
1875
+ color: var(--text-muted);
1876
+ }
1877
+
1878
+ /* Status dot */
1879
+ .settings__dot {
1880
+ width: 8px;
1881
+ height: 8px;
1882
+ border-radius: 50%;
1883
+ flex-shrink: 0;
1884
+ }
1885
+ .settings__dot--success { background: var(--success); }
1886
+ .settings__dot--warn { background: var(--warning); }
1887
+ .settings__dot--error { background: var(--error); }
1888
+ .settings__dot--muted { background: var(--text-muted); }
1889
+
1890
+ /* Status text */
1891
+ .settings__status {
1892
+ font-size: 12px;
1893
+ color: var(--text-dim);
1894
+ }
1895
+ .settings__status--success { color: var(--success); }
1896
+ .settings__status--warn { color: var(--warning); }
1897
+
1898
+ /* Small inline buttons */
1899
+ .settings__btn {
1900
+ padding: 4px 10px;
1901
+ font-size: 12px;
1902
+ border-radius: var(--radius-sm);
1903
+ border: 1px solid var(--border);
1904
+ background: var(--bg-input);
1905
+ color: var(--text-dim);
1906
+ cursor: pointer;
1907
+ font-family: var(--font);
1908
+ transition: all 0.2s ease;
1909
+ }
1910
+ .settings__btn:hover {
1911
+ border-color: var(--accent-glow);
1912
+ color: var(--text);
1913
+ }
1914
+ .settings__btn--primary {
1915
+ background: var(--accent);
1916
+ border-color: var(--accent);
1917
+ color: #fff;
1918
+ }
1919
+ .settings__btn--primary:hover { filter: brightness(1.1); }
1920
+ .settings__btn--small {
1921
+ padding: 0.2rem 0.5rem;
1922
+ font-size: 0.7rem;
1923
+ }
1924
+ .settings__btn--danger {
1925
+ border-color: #ef4444;
1926
+ color: #ef4444;
1927
+ }
1928
+ .settings__btn--danger:hover {
1929
+ background: #ef4444;
1930
+ color: #fff;
1931
+ }
1932
+ .settings__btn:disabled { opacity: 0.4; cursor: not-allowed; }
1933
+ .settings__card-actions {
1934
+ display: flex;
1935
+ gap: 0.35rem;
1936
+ margin-left: auto;
1937
+ }
1938
+
1939
+ /* API key row */
1940
+ .settings__apikey-row {
1941
+ display: flex;
1942
+ align-items: center;
1943
+ gap: 8px;
1944
+ padding: 8px 0;
1945
+ border-bottom: 1px solid var(--border);
1946
+ }
1947
+ .settings__apikey-row:last-child { border-bottom: none; }
1948
+
1949
+ .settings__apikey-label {
1950
+ font-size: 13px;
1951
+ font-weight: 500;
1952
+ min-width: 80px;
1953
+ color: var(--text-dim);
1954
+ }
1955
+
1956
+ .settings__apikey-value {
1957
+ flex: 1;
1958
+ font-size: 12px;
1959
+ color: var(--text-muted);
1960
+ font-family: var(--font-mono);
1961
+ }
1962
+
1963
+ .settings__apikey-input {
1964
+ flex: 1;
1965
+ padding: 5px 8px;
1966
+ background: var(--bg);
1967
+ border: 1px solid var(--border);
1968
+ border-radius: var(--radius-sm);
1969
+ color: var(--text);
1970
+ font-family: var(--font-mono);
1971
+ font-size: 12px;
1972
+ outline: none;
1973
+ }
1974
+ .settings__apikey-input:focus { border-color: var(--accent-glow); }
1975
+ .settings__apikey-input::placeholder { color: var(--text-muted); }
1976
+
1977
+ .settings__apikey-actions {
1978
+ display: flex;
1979
+ gap: 4px;
1980
+ }
1981
+
1982
+ /* Inline spinner */
1983
+ .settings__spinner {
1984
+ display: inline-block;
1985
+ width: 14px;
1986
+ height: 14px;
1987
+ border: 2px solid var(--border);
1988
+ border-top-color: var(--accent);
1989
+ border-radius: 50%;
1990
+ animation: spin 0.8s linear infinite;
1991
+ vertical-align: middle;
1992
+ }
1993
+
1994
+ .settings__spinner-lg {
1995
+ width: 20px;
1996
+ height: 20px;
1997
+ border: 2px solid var(--border);
1998
+ border-top-color: var(--accent);
1999
+ border-radius: 50%;
2000
+ animation: spin 0.8s linear infinite;
2001
+ }
2002
+
2003
+ /* Auth flow instructions */
2004
+ .settings__instructions {
2005
+ margin-top: 10px;
2006
+ padding: 12px;
2007
+ background: var(--bg);
2008
+ border: 1px solid var(--border);
2009
+ border-radius: var(--radius);
2010
+ font-size: 13px;
2011
+ }
2012
+
2013
+ .settings__instructions ol {
2014
+ margin: 8px 0 0 20px;
2015
+ padding: 0;
2016
+ }
2017
+
2018
+ .settings__instructions li {
2019
+ margin-bottom: 4px;
2020
+ color: var(--text-dim);
2021
+ }
2022
+
2023
+ .settings__instructions a {
2024
+ color: var(--accent);
2025
+ text-decoration: underline;
2026
+ }
2027
+
2028
+ .settings__pak-row {
2029
+ display: flex;
2030
+ gap: 8px;
2031
+ margin-top: 8px;
2032
+ }
2033
+
2034
+ /* ================================================================
2035
+ SETUP SETTINGS LINK
2036
+ ================================================================ */
2037
+ .setup__settings-btn {
2038
+ display: inline-flex;
2039
+ align-items: center;
2040
+ gap: 6px;
2041
+ padding: 8px 16px;
2042
+ font-size: 13px;
2043
+ color: var(--text-dim);
2044
+ background: var(--bg-input);
2045
+ border: 1px solid var(--border);
2046
+ border-radius: var(--radius);
2047
+ cursor: pointer;
2048
+ font-family: var(--font);
2049
+ transition: all 0.2s ease;
2050
+ margin-top: 12px;
2051
+ }
2052
+ .setup__settings-btn:hover {
2053
+ border-color: var(--accent-glow);
2054
+ color: var(--text);
2055
+ }
2056
+
2057
+ /* ================================================================
2058
+ WALKTHROUGH
2059
+ ================================================================ */
2060
+ .walkthrough {
2061
+ text-align: left;
2062
+ margin-bottom: 24px;
2063
+ }
2064
+
2065
+ .walkthrough__progress {
2066
+ display: flex;
2067
+ align-items: center;
2068
+ justify-content: center;
2069
+ gap: 0;
2070
+ margin-bottom: 24px;
2071
+ }
2072
+
2073
+ .walkthrough__step-dot {
2074
+ width: 28px;
2075
+ height: 28px;
2076
+ border-radius: 50%;
2077
+ background: var(--bg-input);
2078
+ border: 2px solid var(--border);
2079
+ color: var(--text-muted);
2080
+ font-size: 12px;
2081
+ font-weight: 600;
2082
+ display: flex;
2083
+ align-items: center;
2084
+ justify-content: center;
2085
+ transition: all 0.2s ease;
2086
+ }
2087
+ .walkthrough__step-dot.active {
2088
+ background: var(--accent);
2089
+ border-color: var(--accent);
2090
+ color: #fff;
2091
+ }
2092
+ .walkthrough__step-dot.done {
2093
+ background: var(--success);
2094
+ border-color: var(--success);
2095
+ color: #fff;
2096
+ }
2097
+
2098
+ .walkthrough__step-line {
2099
+ width: 40px;
2100
+ height: 2px;
2101
+ background: var(--border);
2102
+ }
2103
+
2104
+ .walkthrough__step-title {
2105
+ font-family: var(--font-display);
2106
+ font-size: 16px;
2107
+ font-weight: 600;
2108
+ margin-bottom: 12px;
2109
+ }
2110
+
2111
+ .walkthrough__step-desc {
2112
+ color: var(--text-dim);
2113
+ font-size: 13px;
2114
+ margin-bottom: 16px;
2115
+ }
2116
+
2117
+ .walkthrough__tool-list {
2118
+ display: flex;
2119
+ flex-direction: column;
2120
+ gap: 8px;
2121
+ margin-bottom: 16px;
2122
+ }
2123
+
2124
+ .walkthrough__tool-item {
2125
+ display: flex;
2126
+ align-items: center;
2127
+ gap: 10px;
2128
+ padding: 10px 14px;
2129
+ background: var(--bg-input);
2130
+ border: 1px solid var(--border);
2131
+ border-radius: var(--radius);
2132
+ font-size: 13px;
2133
+ }
2134
+
2135
+ .walkthrough__tool-name { font-weight: 500; flex: 1; }
2136
+ .walkthrough__tool-status { font-size: 12px; color: var(--text-muted); }
2137
+ .walkthrough__tool-status--ok { color: var(--success); }
2138
+ .walkthrough__tool-status--missing { color: var(--warning); }
2139
+
2140
+ .walkthrough__card {
2141
+ background: var(--bg-input);
2142
+ border: 1px solid var(--border);
2143
+ border-radius: var(--radius);
2144
+ padding: 16px 18px;
2145
+ margin-bottom: 12px;
2146
+ }
2147
+ .walkthrough__card--highlight {
2148
+ border-color: var(--accent-glow);
2149
+ background: var(--accent-tint);
2150
+ }
2151
+ .walkthrough__card-title {
2152
+ font-weight: 600;
2153
+ font-size: 14px;
2154
+ margin-bottom: 12px;
2155
+ display: flex;
2156
+ align-items: center;
2157
+ gap: 8px;
2158
+ }
2159
+ .walkthrough__badge {
2160
+ font-size: 10px;
2161
+ font-weight: 600;
2162
+ text-transform: uppercase;
2163
+ letter-spacing: 0.05em;
2164
+ background: var(--accent);
2165
+ color: #fff;
2166
+ padding: 2px 7px;
2167
+ border-radius: var(--radius-pill);
2168
+ }
2169
+ .walkthrough__key-row {
2170
+ display: flex;
2171
+ align-items: center;
2172
+ gap: 8px;
2173
+ margin-bottom: 8px;
2174
+ }
2175
+ .walkthrough__key-row:last-child { margin-bottom: 0; }
2176
+ .walkthrough__key-row label {
2177
+ width: 72px;
2178
+ flex-shrink: 0;
2179
+ font-size: 12px;
2180
+ color: var(--text-dim);
2181
+ }
2182
+ .walkthrough__key-input {
2183
+ flex: 1;
2184
+ padding: 6px 10px;
2185
+ font-size: 13px;
2186
+ font-family: var(--font-mono);
2187
+ background: var(--bg-input);
2188
+ border: 1px solid var(--border);
2189
+ border-radius: var(--radius-sm);
2190
+ color: var(--text);
2191
+ outline: none;
2192
+ transition: border-color 0.15s ease;
2193
+ }
2194
+ .walkthrough__key-input:focus {
2195
+ border-color: var(--accent-glow);
2196
+ }
2197
+ .walkthrough__key-link {
2198
+ font-size: 11px;
2199
+ color: var(--text-dim);
2200
+ white-space: nowrap;
2201
+ }
2202
+ .walkthrough__key-link:hover { color: var(--accent); }
2203
+
2204
+ .walkthrough__actions {
2205
+ display: flex;
2206
+ gap: 8px;
2207
+ margin-top: 16px;
2208
+ }
2209
+
2210
+ /* ================================================================
2211
+ SETUP TOPBAR
2212
+ ================================================================ */
2213
+ .setup-topbar {
2214
+ position: fixed;
2215
+ top: 0;
2216
+ left: 0;
2217
+ right: 0;
2218
+ height: var(--topbar-h);
2219
+ display: flex;
2220
+ align-items: center;
2221
+ gap: 12px;
2222
+ padding: 0 16px;
2223
+ background: rgba(12,10,9,0.85);
2224
+ backdrop-filter: blur(12px);
2225
+ -webkit-backdrop-filter: blur(12px);
2226
+ border-bottom: 1px solid var(--border);
2227
+ z-index: 100;
2228
+ }
2229
+
2230
+ /* Push setup content below the fixed topbar */
2231
+ .setup-topbar ~ #setup-screen {
2232
+ padding-top: 72px;
2233
+ }
2234
+
2235
+
2236
+
2237
+ /* ================================================================
2238
+ VERSION HISTORY PANEL
2239
+ ================================================================ */
2240
+ .history-panel {
2241
+ position: absolute;
2242
+ right: 0;
2243
+ top: 0;
2244
+ bottom: 0;
2245
+ width: 280px;
2246
+ background: var(--bg-panel-solid);
2247
+ border-left: 1px solid var(--border);
2248
+ z-index: 10;
2249
+ display: flex;
2250
+ flex-direction: column;
2251
+ overflow: hidden;
2252
+ }
2253
+ .history-panel.hidden { display: none; }
2254
+
2255
+ .history-panel__header {
2256
+ display: flex;
2257
+ align-items: center;
2258
+ justify-content: space-between;
2259
+ padding: 12px 16px;
2260
+ border-bottom: 1px solid var(--border);
2261
+ }
2262
+ .history-panel__header h3 {
2263
+ font-family: var(--font-display);
2264
+ font-size: 14px;
2265
+ font-weight: 600;
2266
+ }
2267
+
2268
+ .history-panel__close {
2269
+ width: 24px;
2270
+ height: 24px;
2271
+ display: flex;
2272
+ align-items: center;
2273
+ justify-content: center;
2274
+ background: none;
2275
+ border: none;
2276
+ color: var(--text-dim);
2277
+ font-size: 18px;
2278
+ cursor: pointer;
2279
+ border-radius: var(--radius-sm);
2280
+ }
2281
+ .history-panel__close:hover { background: var(--bg-hover); color: var(--text); }
2282
+
2283
+ .history-panel__list {
2284
+ flex: 1;
2285
+ overflow-y: auto;
2286
+ padding: 8px;
2287
+ }
2288
+
2289
+ .history__loading,
2290
+ .history__empty {
2291
+ color: var(--text-dim);
2292
+ text-align: center;
2293
+ padding: 24px 16px;
2294
+ font-size: 13px;
2295
+ }
2296
+
2297
+ .history-item {
2298
+ padding: 10px 12px;
2299
+ border-radius: var(--radius-sm);
2300
+ margin-bottom: 4px;
2301
+ transition: background 0.15s;
2302
+ }
2303
+ .history-item:hover { background: var(--bg-hover); }
2304
+ .history-item--rollback { border-left: 2px solid var(--accent); }
2305
+
2306
+ .history-item__header {
2307
+ display: flex;
2308
+ justify-content: space-between;
2309
+ align-items: center;
2310
+ margin-bottom: 4px;
2311
+ }
2312
+
2313
+ .history-item__hash {
2314
+ font-family: var(--font-mono, monospace);
2315
+ font-size: 11px;
2316
+ color: var(--accent);
2317
+ }
2318
+
2319
+ .history-item__date {
2320
+ font-size: 11px;
2321
+ color: var(--text-muted);
2322
+ }
2323
+
2324
+ .history-item__msg {
2325
+ font-size: 12px;
2326
+ color: var(--text-dim);
2327
+ line-height: 1.4;
2328
+ overflow: hidden;
2329
+ text-overflow: ellipsis;
2330
+ white-space: nowrap;
2331
+ }
2332
+
2333
+ .history-item__rollback {
2334
+ margin-top: 6px;
2335
+ background: none;
2336
+ border: 1px solid var(--border);
2337
+ color: var(--text-dim);
2338
+ font-size: 11px;
2339
+ padding: 3px 10px;
2340
+ border-radius: var(--radius-sm);
2341
+ cursor: pointer;
2342
+ transition: all 0.15s;
2343
+ }
2344
+ .history-item__rollback:hover {
2345
+ border-color: var(--accent);
2346
+ color: var(--accent);
2347
+ }
2348
+
2349
+ /* System message (rollback indicator in chat) */
2350
+ .chat-msg--system { text-align: center; padding: 8px 0; }
2351
+ .chat-msg__system {
2352
+ display: inline-block;
2353
+ font-size: 12px;
2354
+ color: var(--text-muted);
2355
+ background: var(--bg-active);
2356
+ padding: 4px 12px;
2357
+ border-radius: 20px;
2358
+ }
2359
+
2360
+ /* ================================================================
2361
+ UPLOAD PANEL
2362
+ ================================================================ */
2363
+ .upload-panel {
2364
+ position: absolute;
2365
+ bottom: 28px;
2366
+ left: 0;
2367
+ right: 0;
2368
+ background: var(--bg-panel-solid);
2369
+ border-top: 1px solid var(--border);
2370
+ z-index: 50;
2371
+ display: flex;
2372
+ flex-direction: column;
2373
+ max-height: 40vh;
2374
+ animation: uploadSlideUp 0.2s ease;
2375
+ }
2376
+ @keyframes uploadSlideUp {
2377
+ from { transform: translateY(100%); opacity: 0; }
2378
+ to { transform: translateY(0); opacity: 1; }
2379
+ }
2380
+
2381
+ .upload-panel__header {
2382
+ display: flex;
2383
+ align-items: center;
2384
+ gap: 8px;
2385
+ padding: 8px 16px;
2386
+ border-bottom: 1px solid var(--border);
2387
+ flex-shrink: 0;
2388
+ }
2389
+
2390
+ .upload-panel__title {
2391
+ flex: 1;
2392
+ font-size: 12px;
2393
+ font-weight: 600;
2394
+ color: var(--text);
2395
+ }
2396
+
2397
+ .upload-panel__actions {
2398
+ display: flex;
2399
+ gap: 6px;
2400
+ }
2401
+
2402
+ .upload-panel__toggle {
2403
+ width: 24px;
2404
+ height: 24px;
2405
+ display: flex;
2406
+ align-items: center;
2407
+ justify-content: center;
2408
+ border: none;
2409
+ background: none;
2410
+ color: var(--text-muted);
2411
+ cursor: pointer;
2412
+ border-radius: 4px;
2413
+ transition: all 0.15s;
2414
+ }
2415
+ .upload-panel__toggle:hover { color: var(--text); background: var(--bg-hover); }
2416
+ .upload-panel__toggle.flipped { transform: rotate(180deg); }
2417
+
2418
+ .upload-panel__log {
2419
+ flex: 1;
2420
+ overflow-y: auto;
2421
+ padding: 8px 16px;
2422
+ font-family: var(--font-mono);
2423
+ font-size: 12px;
2424
+ line-height: 1.6;
2425
+ color: var(--text-dim);
2426
+ margin: 0;
2427
+ white-space: pre-wrap;
2428
+ word-break: break-all;
2429
+ min-height: 60px;
2430
+ max-height: 30vh;
2431
+ }
2432
+ .upload-panel__log.collapsed { display: none; }
2433
+
2434
+ .upload-action-btn {
2435
+ padding: 4px 12px;
2436
+ border: 1px solid var(--border);
2437
+ border-radius: var(--radius-sm);
2438
+ background: none;
2439
+ color: var(--text);
2440
+ font-family: var(--font);
2441
+ font-size: 11px;
2442
+ cursor: pointer;
2443
+ transition: all 0.15s;
2444
+ }
2445
+ .upload-action-btn:hover { border-color: var(--accent-glow); }
2446
+ .upload-action-btn--primary {
2447
+ background: var(--accent);
2448
+ border-color: var(--accent);
2449
+ color: #fff;
2450
+ }
2451
+
2452
+ .upload-spinner {
2453
+ display: inline-block;
2454
+ width: 12px;
2455
+ height: 12px;
2456
+ border: 2px solid var(--text-muted);
2457
+ border-top-color: var(--accent);
2458
+ border-radius: 50%;
2459
+ animation: spin 0.6s linear infinite;
2460
+ vertical-align: middle;
2461
+ margin-right: 4px;
2462
+ }
2463
+
2464
+ .upload-status-icon { margin-right: 4px; }
2465
+
2466
+ /* State variants */
2467
+ .upload-panel--success .upload-panel__header { border-bottom-color: var(--success); }
2468
+ .upload-panel--success .upload-panel__title { color: var(--success); }
2469
+ .upload-panel--error .upload-panel__header { border-bottom-color: var(--error); }
2470
+ .upload-panel--error .upload-panel__title { color: var(--error); }
2471
+ .upload-panel--fixing .upload-panel__header { border-bottom-color: var(--accent); }
2472
+ .upload-panel--fixing .upload-panel__title { color: var(--accent); }
2473
+ .upload-panel--uploading .upload-panel__header { border-bottom-color: var(--accent-hover); }
2474
+
2475
+ /* Deploy success popup */
2476
+ .deploy-success {
2477
+ background: var(--bg-panel-solid);
2478
+ border: 1px solid var(--border);
2479
+ border-radius: var(--radius-lg);
2480
+ padding: 40px 32px 32px;
2481
+ width: 420px;
2482
+ max-width: 90vw;
2483
+ box-shadow: 0 20px 60px rgba(0,0,0,0.6);
2484
+ text-align: center;
2485
+ animation: deployPopIn 0.3s ease;
2486
+ }
2487
+ @keyframes deployPopIn {
2488
+ from { opacity: 0; transform: scale(0.9) translateY(10px); }
2489
+ to { opacity: 1; transform: scale(1) translateY(0); }
2490
+ }
2491
+ .deploy-success__icon {
2492
+ font-size: 48px;
2493
+ margin-bottom: 12px;
2494
+ }
2495
+ .deploy-success__title {
2496
+ font-family: var(--font-display);
2497
+ font-size: 22px;
2498
+ font-weight: 700;
2499
+ margin-bottom: 6px;
2500
+ background: linear-gradient(135deg, #fff, #a5a3b3);
2501
+ -webkit-background-clip: text;
2502
+ -webkit-text-fill-color: transparent;
2503
+ background-clip: text;
2504
+ }
2505
+ .deploy-success__subtitle {
2506
+ color: var(--text-dim);
2507
+ font-size: 14px;
2508
+ margin-bottom: 24px;
2509
+ }
2510
+ .deploy-success__steps {
2511
+ text-align: left;
2512
+ margin: 0 auto 24px;
2513
+ max-width: 320px;
2514
+ }
2515
+ .deploy-success__step {
2516
+ display: flex;
2517
+ align-items: center;
2518
+ gap: 10px;
2519
+ padding: 8px 0;
2520
+ font-size: 13px;
2521
+ color: var(--text-dim);
2522
+ line-height: 1.4;
2523
+ }
2524
+ .deploy-success__num {
2525
+ width: 22px;
2526
+ height: 22px;
2527
+ display: flex;
2528
+ align-items: center;
2529
+ justify-content: center;
2530
+ background: var(--accent-dim);
2531
+ color: var(--accent);
2532
+ border-radius: 50%;
2533
+ font-size: 11px;
2534
+ font-weight: 700;
2535
+ flex-shrink: 0;
2536
+ }
2537
+ .deploy-success__actions {
2538
+ display: flex;
2539
+ flex-direction: column;
2540
+ gap: 8px;
2541
+ align-items: center;
2542
+ }
2543
+ .deploy-success__link {
2544
+ display: inline-block;
2545
+ padding: 10px 24px;
2546
+ font-size: 14px;
2547
+ text-decoration: none;
2548
+ border-radius: var(--radius);
2549
+ }
2550
+ .deploy-success__link:hover {
2551
+ filter: brightness(1.1);
2552
+ }