ft-scout 4.0.7 → 4.0.9

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/web/styles.css ADDED
@@ -0,0 +1,1501 @@
1
+ /* ==========================================================================
2
+ FrontTerrain Scout — Dashboard & Auth Portal Design System
3
+ ========================================================================== */
4
+
5
+ :root {
6
+ /* Color Palette */
7
+ --bg-dark: #080b11;
8
+ --bg-panel: rgba(18, 24, 38, 0.75);
9
+ --bg-card: rgba(26, 34, 52, 0.6);
10
+ --bg-input: rgba(15, 22, 36, 0.85);
11
+
12
+ --border-light: rgba(255, 255, 255, 0.08);
13
+ --border-glow: rgba(99, 102, 241, 0.35);
14
+
15
+ --primary: #6366f1;
16
+ --primary-hover: #4f46e5;
17
+ --primary-glow: rgba(99, 102, 241, 0.4);
18
+
19
+ --secondary: #8b5cf6;
20
+ --secondary-glow: rgba(139, 92, 246, 0.35);
21
+
22
+ --accent-cyan: #06b6d4;
23
+ --accent-emerald: #10b981;
24
+ --accent-amber: #f59e0b;
25
+ --accent-rose: #f43f5e;
26
+
27
+ --text-bright: #f8fafc;
28
+ --text-main: #e2e8f0;
29
+ --text-muted: #94a3b8;
30
+ --text-dim: #64748b;
31
+
32
+ --font-heading: 'Outfit', -apple-system, BlinkMacSystemFont, sans-serif;
33
+ --font-body: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
34
+ --font-mono: 'Fira Code', 'Cascadia Code', Consolas, monospace;
35
+
36
+ --radius-sm: 8px;
37
+ --radius-md: 14px;
38
+ --radius-lg: 20px;
39
+ --radius-pill: 9999px;
40
+
41
+ --shadow-panel: 0 20px 40px -15px rgba(0, 0, 0, 0.6);
42
+ --shadow-glow: 0 0 25px rgba(99, 102, 241, 0.25);
43
+
44
+ --transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
45
+ --transition-normal: 0.25s cubic-bezier(0.4, 0, 0.2, 1);
46
+ }
47
+
48
+ /* Reset & Base */
49
+ *, *::before, *::after {
50
+ box-sizing: border-box;
51
+ margin: 0;
52
+ padding: 0;
53
+ }
54
+
55
+ body {
56
+ background-color: var(--bg-dark);
57
+ color: var(--text-main);
58
+ font-family: var(--font-body);
59
+ font-size: 15px;
60
+ line-height: 1.6;
61
+ min-height: 100vh;
62
+ overflow-x: hidden;
63
+ position: relative;
64
+ -webkit-font-smoothing: antialiased;
65
+ }
66
+
67
+ /* Ambient Background Glow Blobs */
68
+ .bg-glow {
69
+ position: fixed;
70
+ border-radius: 50%;
71
+ filter: blur(120px);
72
+ pointer-events: none;
73
+ z-index: 0;
74
+ opacity: 0.4;
75
+ animation: pulseGlow 12s infinite alternate ease-in-out;
76
+ }
77
+
78
+ .bg-glow-1 {
79
+ width: 450px;
80
+ height: 450px;
81
+ background: var(--primary);
82
+ top: -100px;
83
+ left: -100px;
84
+ }
85
+
86
+ .bg-glow-2 {
87
+ width: 500px;
88
+ height: 500px;
89
+ background: var(--secondary);
90
+ bottom: -150px;
91
+ right: -150px;
92
+ animation-delay: -4s;
93
+ }
94
+
95
+ .bg-glow-3 {
96
+ width: 350px;
97
+ height: 350px;
98
+ background: var(--accent-cyan);
99
+ top: 40%;
100
+ left: 50%;
101
+ transform: translate(-50%, -50%);
102
+ opacity: 0.15;
103
+ }
104
+
105
+ @keyframes pulseGlow {
106
+ 0% { transform: scale(1) translate(0, 0); opacity: 0.3; }
107
+ 100% { transform: scale(1.15) translate(30px, 30px); opacity: 0.5; }
108
+ }
109
+
110
+ /* Glassmorphism Panel */
111
+ .glass-panel {
112
+ background: var(--bg-panel);
113
+ backdrop-filter: blur(16px);
114
+ -webkit-backdrop-filter: blur(16px);
115
+ border: 1px solid var(--border-light);
116
+ border-radius: var(--radius-lg);
117
+ box-shadow: var(--shadow-panel);
118
+ }
119
+
120
+ /* App Wrapper Layout */
121
+ .app-wrapper {
122
+ position: relative;
123
+ z-index: 1;
124
+ max-width: 1320px;
125
+ margin: 0 auto;
126
+ padding: 0 24px;
127
+ display: flex;
128
+ flex-direction: column;
129
+ min-height: 100vh;
130
+ }
131
+
132
+ /* Typography Helpers */
133
+ h1, h2, h3, h4, h5, h6 {
134
+ font-family: var(--font-heading);
135
+ color: var(--text-bright);
136
+ font-weight: 600;
137
+ letter-spacing: -0.02em;
138
+ }
139
+
140
+ .text-gradient {
141
+ background: linear-gradient(135deg, #a5b4fc 0%, #c084fc 50%, #6366f1 100%);
142
+ background-clip: text;
143
+ -webkit-text-fill-color: transparent;
144
+ }
145
+
146
+ .text-muted { color: var(--text-muted); }
147
+ .text-danger { color: var(--accent-rose) !important; }
148
+ .text-primary { color: var(--primary) !important; }
149
+ .block { display: block; }
150
+ .hidden { display: none !important; }
151
+
152
+ /* Navigation Bar */
153
+ .navbar {
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ padding: 20px 0;
158
+ border-bottom: 1px solid var(--border-light);
159
+ margin-bottom: 32px;
160
+ }
161
+
162
+ .nav-left {
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 12px;
166
+ }
167
+
168
+ .brand-logo {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 12px;
172
+ }
173
+
174
+ .logo-icon {
175
+ width: 42px;
176
+ height: 42px;
177
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
178
+ border-radius: var(--radius-md);
179
+ display: flex;
180
+ align-items: center;
181
+ justify-content: center;
182
+ color: white;
183
+ font-size: 20px;
184
+ box-shadow: var(--shadow-glow);
185
+ }
186
+
187
+ .brand-text {
188
+ display: flex;
189
+ flex-direction: column;
190
+ }
191
+
192
+ .brand-title {
193
+ font-family: var(--font-heading);
194
+ font-size: 20px;
195
+ font-weight: 800;
196
+ letter-spacing: 0.08em;
197
+ color: var(--text-bright);
198
+ }
199
+
200
+ .brand-subtitle {
201
+ font-size: 11px;
202
+ text-transform: uppercase;
203
+ letter-spacing: 0.12em;
204
+ color: var(--text-muted);
205
+ }
206
+
207
+ .version-badge {
208
+ background: rgba(99, 102, 241, 0.15);
209
+ border: 1px solid rgba(99, 102, 241, 0.3);
210
+ color: var(--primary);
211
+ font-size: 11px;
212
+ font-weight: 600;
213
+ padding: 2px 8px;
214
+ border-radius: var(--radius-pill);
215
+ }
216
+
217
+ /* Nav Links & Buttons */
218
+ .nav-links {
219
+ display: flex;
220
+ align-items: center;
221
+ gap: 8px;
222
+ background: rgba(15, 22, 36, 0.6);
223
+ padding: 6px;
224
+ border-radius: var(--radius-pill);
225
+ border: 1px solid var(--border-light);
226
+ }
227
+
228
+ .nav-btn {
229
+ background: transparent;
230
+ border: none;
231
+ color: var(--text-muted);
232
+ font-family: var(--font-body);
233
+ font-size: 14px;
234
+ font-weight: 500;
235
+ padding: 8px 18px;
236
+ border-radius: var(--radius-pill);
237
+ cursor: pointer;
238
+ display: flex;
239
+ align-items: center;
240
+ gap: 8px;
241
+ transition: var(--transition-fast);
242
+ }
243
+
244
+ .nav-btn:hover {
245
+ color: var(--text-bright);
246
+ background: rgba(255, 255, 255, 0.05);
247
+ }
248
+
249
+ .nav-btn.active {
250
+ background: var(--primary);
251
+ color: white;
252
+ box-shadow: 0 4px 15px rgba(99, 102, 241, 0.4);
253
+ }
254
+
255
+ /* Nav Right & User Menu */
256
+ .nav-right {
257
+ display: flex;
258
+ align-items: center;
259
+ gap: 16px;
260
+ }
261
+
262
+ .auth-status-pill {
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 8px;
266
+ background: rgba(16, 185, 129, 0.1);
267
+ border: 1px solid rgba(16, 185, 129, 0.3);
268
+ color: var(--accent-emerald);
269
+ font-size: 12px;
270
+ font-weight: 600;
271
+ padding: 6px 14px;
272
+ border-radius: var(--radius-pill);
273
+ }
274
+
275
+ .pulse-dot {
276
+ width: 8px;
277
+ height: 8px;
278
+ background: var(--accent-emerald);
279
+ border-radius: 50%;
280
+ box-shadow: 0 0 10px var(--accent-emerald);
281
+ animation: pulseDot 2s infinite;
282
+ }
283
+
284
+ @keyframes pulseDot {
285
+ 0%, 100% { transform: scale(1); opacity: 1; }
286
+ 50% { transform: scale(1.3); opacity: 0.6; }
287
+ }
288
+
289
+ .user-menu {
290
+ position: relative;
291
+ }
292
+
293
+ .user-menu-btn {
294
+ background: rgba(255, 255, 255, 0.05);
295
+ border: 1px solid var(--border-light);
296
+ color: var(--text-bright);
297
+ padding: 6px 14px;
298
+ border-radius: var(--radius-pill);
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 10px;
302
+ cursor: pointer;
303
+ transition: var(--transition-fast);
304
+ }
305
+
306
+ .user-menu-btn:hover {
307
+ background: rgba(255, 255, 255, 0.1);
308
+ border-color: rgba(255, 255, 255, 0.2);
309
+ }
310
+
311
+ .avatar {
312
+ width: 28px;
313
+ height: 28px;
314
+ background: linear-gradient(135deg, var(--accent-cyan), var(--primary));
315
+ border-radius: 50%;
316
+ display: flex;
317
+ align-items: center;
318
+ justify-content: center;
319
+ font-weight: 700;
320
+ font-size: 13px;
321
+ color: white;
322
+ }
323
+
324
+ /* User Dropdown */
325
+ .dropdown-menu {
326
+ position: absolute;
327
+ top: calc(100% + 8px);
328
+ right: 0;
329
+ width: 220px;
330
+ background: var(--bg-dark);
331
+ border: 1px solid var(--border-light);
332
+ border-radius: var(--radius-md);
333
+ padding: 8px;
334
+ box-shadow: var(--shadow-panel);
335
+ display: none;
336
+ z-index: 100;
337
+ }
338
+
339
+ .dropdown-menu.show {
340
+ display: block;
341
+ animation: fadeInDown 0.2s ease-out;
342
+ }
343
+
344
+ .dropdown-header {
345
+ padding: 10px;
346
+ display: flex;
347
+ flex-direction: column;
348
+ }
349
+
350
+ .dropdown-header small {
351
+ color: var(--text-dim);
352
+ font-size: 12px;
353
+ }
354
+
355
+ .dropdown-divider {
356
+ border: none;
357
+ border-top: 1px solid var(--border-light);
358
+ margin: 6px 0;
359
+ }
360
+
361
+ .dropdown-item {
362
+ width: 100%;
363
+ background: transparent;
364
+ border: none;
365
+ color: var(--text-main);
366
+ padding: 8px 12px;
367
+ border-radius: var(--radius-sm);
368
+ display: flex;
369
+ align-items: center;
370
+ gap: 10px;
371
+ font-size: 13px;
372
+ cursor: pointer;
373
+ text-align: left;
374
+ transition: var(--transition-fast);
375
+ }
376
+
377
+ .dropdown-item:hover {
378
+ background: rgba(255, 255, 255, 0.08);
379
+ color: var(--text-bright);
380
+ }
381
+
382
+ /* Buttons */
383
+ .btn {
384
+ display: inline-flex;
385
+ align-items: center;
386
+ justify-content: center;
387
+ gap: 8px;
388
+ font-family: var(--font-body);
389
+ font-weight: 600;
390
+ font-size: 14px;
391
+ padding: 10px 20px;
392
+ border-radius: var(--radius-md);
393
+ border: 1px solid transparent;
394
+ cursor: pointer;
395
+ transition: var(--transition-fast);
396
+ text-decoration: none;
397
+ white-space: nowrap;
398
+ }
399
+
400
+ .btn-lg {
401
+ padding: 14px 28px;
402
+ font-size: 16px;
403
+ border-radius: var(--radius-md);
404
+ }
405
+
406
+ .btn-sm {
407
+ padding: 6px 14px;
408
+ font-size: 13px;
409
+ border-radius: var(--radius-sm);
410
+ }
411
+
412
+ .btn-xs {
413
+ padding: 4px 10px;
414
+ font-size: 12px;
415
+ border-radius: var(--radius-sm);
416
+ }
417
+
418
+ .btn-block {
419
+ width: 100%;
420
+ }
421
+
422
+ .btn-primary {
423
+ background: linear-gradient(135deg, var(--primary), var(--primary-hover));
424
+ color: white;
425
+ box-shadow: 0 4px 20px rgba(99, 102, 241, 0.35);
426
+ }
427
+
428
+ .btn-primary:hover {
429
+ transform: translateY(-2px);
430
+ box-shadow: 0 6px 25px rgba(99, 102, 241, 0.5);
431
+ }
432
+
433
+ .btn-success {
434
+ background: linear-gradient(135deg, var(--accent-emerald), #059669);
435
+ color: white;
436
+ box-shadow: 0 4px 20px rgba(16, 185, 129, 0.3);
437
+ }
438
+
439
+ .btn-success:hover {
440
+ transform: translateY(-2px);
441
+ box-shadow: 0 6px 25px rgba(16, 185, 129, 0.45);
442
+ }
443
+
444
+ .btn-outline {
445
+ background: transparent;
446
+ border-color: var(--border-light);
447
+ color: var(--text-main);
448
+ }
449
+
450
+ .btn-outline:hover {
451
+ background: rgba(255, 255, 255, 0.06);
452
+ border-color: rgba(255, 255, 255, 0.2);
453
+ color: var(--text-bright);
454
+ }
455
+
456
+ /* ================= AUTH SECTION ================= */
457
+ .auth-section {
458
+ display: flex;
459
+ align-items: center;
460
+ justify-content: center;
461
+ padding: 40px 0;
462
+ min-height: 70vh;
463
+ }
464
+
465
+ .auth-card {
466
+ width: 100%;
467
+ max-width: 480px;
468
+ padding: 40px;
469
+ position: relative;
470
+ border: 1px solid rgba(99, 102, 241, 0.2);
471
+ }
472
+
473
+ .auth-header {
474
+ text-align: center;
475
+ margin-bottom: 28px;
476
+ }
477
+
478
+ .auth-logo-badge {
479
+ width: 56px;
480
+ height: 56px;
481
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
482
+ border-radius: var(--radius-md);
483
+ margin: 0 auto 16px;
484
+ display: flex;
485
+ align-items: center;
486
+ justify-content: center;
487
+ font-size: 26px;
488
+ color: white;
489
+ box-shadow: var(--shadow-glow);
490
+ }
491
+
492
+ .auth-header h2 {
493
+ font-size: 24px;
494
+ margin-bottom: 8px;
495
+ }
496
+
497
+ .auth-header p {
498
+ color: var(--text-muted);
499
+ font-size: 14px;
500
+ }
501
+
502
+ .auth-tabs {
503
+ display: flex;
504
+ background: rgba(15, 22, 36, 0.8);
505
+ padding: 4px;
506
+ border-radius: var(--radius-md);
507
+ border: 1px solid var(--border-light);
508
+ margin-bottom: 24px;
509
+ }
510
+
511
+ .auth-tab {
512
+ flex: 1;
513
+ background: transparent;
514
+ border: none;
515
+ color: var(--text-muted);
516
+ font-family: var(--font-body);
517
+ font-weight: 600;
518
+ font-size: 14px;
519
+ padding: 10px;
520
+ border-radius: var(--radius-sm);
521
+ cursor: pointer;
522
+ transition: var(--transition-fast);
523
+ display: flex;
524
+ align-items: center;
525
+ justify-content: center;
526
+ gap: 8px;
527
+ }
528
+
529
+ .auth-tab.active {
530
+ background: var(--primary);
531
+ color: white;
532
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
533
+ }
534
+
535
+ .auth-form {
536
+ display: flex;
537
+ flex-direction: column;
538
+ gap: 18px;
539
+ }
540
+
541
+ /* Form Controls */
542
+ .form-group {
543
+ display: flex;
544
+ flex-direction: column;
545
+ gap: 6px;
546
+ }
547
+
548
+ .form-group label {
549
+ font-size: 13px;
550
+ font-weight: 500;
551
+ color: var(--text-main);
552
+ display: flex;
553
+ align-items: center;
554
+ gap: 8px;
555
+ }
556
+
557
+ .input-wrapper {
558
+ position: relative;
559
+ display: flex;
560
+ align-items: center;
561
+ }
562
+
563
+ .input-wrapper input, .input-control {
564
+ width: 100%;
565
+ background: var(--bg-input);
566
+ border: 1px solid var(--border-light);
567
+ color: var(--text-bright);
568
+ font-family: var(--font-body);
569
+ font-size: 14px;
570
+ padding: 12px 16px;
571
+ border-radius: var(--radius-md);
572
+ outline: none;
573
+ transition: var(--transition-fast);
574
+ }
575
+
576
+ .input-wrapper input:focus, .input-control:focus {
577
+ border-color: var(--primary);
578
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.25);
579
+ }
580
+
581
+ .btn-toggle-pwd {
582
+ position: absolute;
583
+ right: 14px;
584
+ background: transparent;
585
+ border: none;
586
+ color: var(--text-dim);
587
+ cursor: pointer;
588
+ font-size: 14px;
589
+ }
590
+
591
+ .btn-toggle-pwd:hover {
592
+ color: var(--text-main);
593
+ }
594
+
595
+ .form-row {
596
+ display: flex;
597
+ align-items: center;
598
+ }
599
+
600
+ .flex-between {
601
+ justify-content: space-between;
602
+ }
603
+
604
+ .checkbox-label {
605
+ display: flex;
606
+ align-items: center;
607
+ gap: 8px;
608
+ font-size: 13px;
609
+ color: var(--text-muted);
610
+ cursor: pointer;
611
+ }
612
+
613
+ .checkbox-label input[type="checkbox"] {
614
+ accent-color: var(--primary);
615
+ width: 16px;
616
+ height: 16px;
617
+ cursor: pointer;
618
+ }
619
+
620
+ .link-muted {
621
+ color: var(--text-muted);
622
+ font-size: 13px;
623
+ text-decoration: none;
624
+ }
625
+
626
+ .link-muted:hover {
627
+ color: var(--primary);
628
+ text-decoration: underline;
629
+ }
630
+
631
+ .tenant-badge-footer {
632
+ margin-top: 10px;
633
+ text-align: center;
634
+ font-size: 12px;
635
+ color: var(--text-dim);
636
+ background: rgba(255, 255, 255, 0.03);
637
+ padding: 8px;
638
+ border-radius: var(--radius-sm);
639
+ border: 1px dashed var(--border-light);
640
+ }
641
+
642
+ .tenant-badge-footer code {
643
+ color: var(--accent-amber);
644
+ font-family: var(--font-mono);
645
+ }
646
+
647
+ .auth-demo-box {
648
+ margin-top: 24px;
649
+ padding-top: 20px;
650
+ border-top: 1px solid var(--border-light);
651
+ display: flex;
652
+ align-items: center;
653
+ justify-content: space-between;
654
+ font-size: 13px;
655
+ color: var(--text-muted);
656
+ }
657
+
658
+ /* ================= DASHBOARD SECTION ================= */
659
+ .dashboard-section {
660
+ display: flex;
661
+ flex-direction: column;
662
+ gap: 28px;
663
+ padding-bottom: 40px;
664
+ }
665
+
666
+ /* Welcome Banner */
667
+ .welcome-banner {
668
+ padding: 32px 40px;
669
+ display: flex;
670
+ align-items: center;
671
+ justify-content: space-between;
672
+ background: linear-gradient(135deg, rgba(30, 41, 59, 0.8), rgba(15, 23, 42, 0.9));
673
+ border: 1px solid rgba(99, 102, 241, 0.25);
674
+ position: relative;
675
+ overflow: hidden;
676
+ }
677
+
678
+ .banner-content {
679
+ max-width: 650px;
680
+ }
681
+
682
+ .banner-badge {
683
+ display: inline-flex;
684
+ align-items: center;
685
+ gap: 6px;
686
+ background: rgba(16, 185, 129, 0.15);
687
+ color: var(--accent-emerald);
688
+ font-size: 12px;
689
+ font-weight: 600;
690
+ padding: 4px 12px;
691
+ border-radius: var(--radius-pill);
692
+ margin-bottom: 12px;
693
+ }
694
+
695
+ .banner-content h1 {
696
+ font-size: 28px;
697
+ margin-bottom: 8px;
698
+ }
699
+
700
+ .banner-content p {
701
+ color: var(--text-muted);
702
+ font-size: 15px;
703
+ }
704
+
705
+ .banner-actions {
706
+ display: flex;
707
+ gap: 12px;
708
+ }
709
+
710
+ /* Metrics Grid */
711
+ .stats-grid {
712
+ display: grid;
713
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
714
+ gap: 20px;
715
+ }
716
+
717
+ .stat-card {
718
+ padding: 24px;
719
+ display: flex;
720
+ align-items: flex-start;
721
+ gap: 18px;
722
+ transition: var(--transition-normal);
723
+ }
724
+
725
+ .stat-card:hover {
726
+ transform: translateY(-4px);
727
+ border-color: rgba(99, 102, 241, 0.3);
728
+ }
729
+
730
+ .stat-icon {
731
+ width: 48px;
732
+ height: 48px;
733
+ border-radius: var(--radius-md);
734
+ display: flex;
735
+ align-items: center;
736
+ justify-content: center;
737
+ font-size: 20px;
738
+ color: white;
739
+ flex-shrink: 0;
740
+ }
741
+
742
+ .icon-primary { background: linear-gradient(135deg, var(--primary), var(--primary-hover)); }
743
+ .icon-secondary { background: linear-gradient(135deg, var(--secondary), #7c3aed); }
744
+ .icon-warning { background: linear-gradient(135deg, var(--accent-amber), #d97706); }
745
+ .icon-success { background: linear-gradient(135deg, var(--accent-emerald), #059669); }
746
+
747
+ .stat-details {
748
+ display: flex;
749
+ flex-direction: column;
750
+ gap: 4px;
751
+ width: 100%;
752
+ }
753
+
754
+ .stat-label {
755
+ font-size: 13px;
756
+ color: var(--text-muted);
757
+ font-weight: 500;
758
+ }
759
+
760
+ .stat-value-group {
761
+ display: flex;
762
+ align-items: baseline;
763
+ justify-content: space-between;
764
+ }
765
+
766
+ .stat-value {
767
+ font-family: var(--font-heading);
768
+ font-size: 28px;
769
+ font-weight: 700;
770
+ color: var(--text-bright);
771
+ }
772
+
773
+ .stat-badge {
774
+ font-size: 11px;
775
+ font-weight: 600;
776
+ padding: 2px 8px;
777
+ border-radius: var(--radius-pill);
778
+ }
779
+
780
+ .stat-badge.positive { background: rgba(16, 185, 129, 0.15); color: var(--accent-emerald); }
781
+ .stat-badge.warning { background: rgba(245, 158, 11, 0.15); color: var(--accent-amber); }
782
+ .stat-badge.info { background: rgba(6, 182, 212, 0.15); color: var(--accent-cyan); }
783
+
784
+ .stat-sub {
785
+ font-size: 12px;
786
+ color: var(--text-dim);
787
+ }
788
+
789
+ /* Tab Panels & Cards */
790
+ .tab-pane {
791
+ display: none;
792
+ }
793
+
794
+ .tab-pane.active {
795
+ display: block;
796
+ animation: fadeIn 0.3s ease-in-out;
797
+ }
798
+
799
+ @keyframes fadeIn {
800
+ from { opacity: 0; transform: translateY(8px); }
801
+ to { opacity: 1; transform: translateY(0); }
802
+ }
803
+
804
+ .grid-2col {
805
+ display: grid;
806
+ grid-template-columns: 1fr 1fr;
807
+ gap: 24px;
808
+ }
809
+
810
+ @media (max-width: 900px) {
811
+ .grid-2col { grid-template-columns: 1fr; }
812
+ }
813
+
814
+ .card {
815
+ padding: 28px;
816
+ }
817
+
818
+ .card-header {
819
+ display: flex;
820
+ align-items: flex-start;
821
+ justify-content: space-between;
822
+ margin-bottom: 24px;
823
+ padding-bottom: 16px;
824
+ border-bottom: 1px solid var(--border-light);
825
+ }
826
+
827
+ .card-header h3 {
828
+ font-size: 18px;
829
+ display: flex;
830
+ align-items: center;
831
+ gap: 10px;
832
+ }
833
+
834
+ .card-header .subtitle {
835
+ font-size: 13px;
836
+ color: var(--text-muted);
837
+ font-weight: normal;
838
+ margin-top: 4px;
839
+ }
840
+
841
+ /* Badges */
842
+ .badge {
843
+ font-size: 12px;
844
+ font-weight: 600;
845
+ padding: 3px 10px;
846
+ border-radius: var(--radius-pill);
847
+ }
848
+
849
+ .badge-accent { background: rgba(99, 102, 241, 0.15); color: var(--primary); }
850
+ .badge-success { background: rgba(16, 185, 129, 0.15); color: var(--accent-emerald); }
851
+ .badge-warning { background: rgba(245, 158, 11, 0.15); color: var(--accent-amber); }
852
+ .badge-info { background: rgba(6, 182, 212, 0.15); color: var(--accent-cyan); }
853
+
854
+ /* Health Bars */
855
+ .health-item {
856
+ margin-bottom: 20px;
857
+ }
858
+
859
+ .health-meta {
860
+ display: flex;
861
+ justify-content: space-between;
862
+ font-size: 14px;
863
+ margin-bottom: 8px;
864
+ }
865
+
866
+ .repo-name {
867
+ font-weight: 600;
868
+ color: var(--text-bright);
869
+ }
870
+
871
+ .health-score { font-weight: 600; font-size: 13px; }
872
+ .score-high { color: var(--accent-emerald); }
873
+ .score-med { color: var(--accent-cyan); }
874
+ .score-warn { color: var(--accent-amber); }
875
+
876
+ .progress-bar {
877
+ width: 100%;
878
+ height: 8px;
879
+ background: rgba(255, 255, 255, 0.08);
880
+ border-radius: var(--radius-pill);
881
+ overflow: hidden;
882
+ }
883
+
884
+ .progress-fill {
885
+ height: 100%;
886
+ border-radius: var(--radius-pill);
887
+ transition: width 0.6s ease-out;
888
+ }
889
+
890
+ .bg-success { background: var(--accent-emerald); }
891
+ .bg-info { background: var(--accent-cyan); }
892
+ .bg-warning { background: var(--accent-amber); }
893
+
894
+ /* Quick Actions Bar */
895
+ .quick-actions-bar {
896
+ margin-top: 24px;
897
+ padding-top: 20px;
898
+ border-top: 1px dashed var(--border-light);
899
+ }
900
+
901
+ .quick-actions-bar h4 {
902
+ font-size: 14px;
903
+ margin-bottom: 12px;
904
+ color: var(--text-muted);
905
+ }
906
+
907
+ .cli-chips {
908
+ display: flex;
909
+ flex-wrap: wrap;
910
+ gap: 10px;
911
+ }
912
+
913
+ .cli-chip {
914
+ background: rgba(15, 22, 36, 0.9);
915
+ border: 1px solid var(--border-light);
916
+ color: var(--accent-cyan);
917
+ font-family: var(--font-mono);
918
+ font-size: 13px;
919
+ padding: 6px 14px;
920
+ border-radius: var(--radius-sm);
921
+ cursor: pointer;
922
+ transition: var(--transition-fast);
923
+ }
924
+
925
+ .cli-chip:hover {
926
+ border-color: var(--primary);
927
+ color: white;
928
+ background: rgba(99, 102, 241, 0.2);
929
+ }
930
+
931
+ /* Timeline Activity */
932
+ .activity-timeline {
933
+ list-style: none;
934
+ display: flex;
935
+ flex-direction: column;
936
+ gap: 20px;
937
+ position: relative;
938
+ }
939
+
940
+ .timeline-item {
941
+ display: flex;
942
+ gap: 16px;
943
+ position: relative;
944
+ }
945
+
946
+ .timeline-dot {
947
+ width: 32px;
948
+ height: 32px;
949
+ border-radius: 50%;
950
+ display: flex;
951
+ align-items: center;
952
+ justify-content: center;
953
+ color: white;
954
+ font-size: 14px;
955
+ flex-shrink: 0;
956
+ }
957
+
958
+ .timeline-content {
959
+ display: flex;
960
+ flex-direction: column;
961
+ }
962
+
963
+ .timeline-content strong {
964
+ color: var(--text-bright);
965
+ font-size: 14px;
966
+ }
967
+
968
+ .timeline-content p {
969
+ color: var(--text-muted);
970
+ font-size: 13px;
971
+ }
972
+
973
+ .time-ago {
974
+ font-size: 11px;
975
+ color: var(--text-dim);
976
+ margin-top: 4px;
977
+ }
978
+
979
+ /* Token Management Box */
980
+ .token-display-box {
981
+ background: rgba(15, 22, 36, 0.9);
982
+ border: 1px solid rgba(99, 102, 241, 0.25);
983
+ border-radius: var(--radius-md);
984
+ padding: 20px;
985
+ margin-bottom: 32px;
986
+ }
987
+
988
+ .token-header {
989
+ display: flex;
990
+ justify-content: space-between;
991
+ align-items: center;
992
+ margin-bottom: 12px;
993
+ font-size: 14px;
994
+ font-weight: 600;
995
+ }
996
+
997
+ .token-code-row {
998
+ display: flex;
999
+ gap: 12px;
1000
+ margin-bottom: 16px;
1001
+ }
1002
+
1003
+ .token-input {
1004
+ flex: 1;
1005
+ background: var(--bg-dark);
1006
+ border: 1px solid var(--border-light);
1007
+ color: var(--accent-amber);
1008
+ font-family: var(--font-mono);
1009
+ font-size: 13px;
1010
+ padding: 10px 14px;
1011
+ border-radius: var(--radius-sm);
1012
+ outline: none;
1013
+ }
1014
+
1015
+ .token-cli-example {
1016
+ display: flex;
1017
+ align-items: center;
1018
+ gap: 12px;
1019
+ font-size: 13px;
1020
+ color: var(--text-muted);
1021
+ background: rgba(255, 255, 255, 0.03);
1022
+ padding: 10px 14px;
1023
+ border-radius: var(--radius-sm);
1024
+ }
1025
+
1026
+ .token-cli-example code {
1027
+ color: var(--accent-cyan);
1028
+ font-family: var(--font-mono);
1029
+ flex: 1;
1030
+ }
1031
+
1032
+ /* Table Styles */
1033
+ .session-table-wrapper {
1034
+ margin-top: 24px;
1035
+ }
1036
+
1037
+ .session-table-wrapper h4 {
1038
+ font-size: 16px;
1039
+ margin-bottom: 16px;
1040
+ }
1041
+
1042
+ .data-table {
1043
+ width: 100%;
1044
+ border-collapse: collapse;
1045
+ text-align: left;
1046
+ }
1047
+
1048
+ .data-table th, .data-table td {
1049
+ padding: 14px 16px;
1050
+ border-bottom: 1px solid var(--border-light);
1051
+ font-size: 14px;
1052
+ }
1053
+
1054
+ .data-table th {
1055
+ color: var(--text-muted);
1056
+ font-weight: 500;
1057
+ font-size: 12px;
1058
+ text-transform: uppercase;
1059
+ letter-spacing: 0.05em;
1060
+ }
1061
+
1062
+ .flex-center-gap {
1063
+ display: flex;
1064
+ align-items: center;
1065
+ gap: 12px;
1066
+ }
1067
+
1068
+ /* Audit Section */
1069
+ .audit-summary-grid {
1070
+ display: grid;
1071
+ grid-template-columns: repeat(3, 1fr);
1072
+ gap: 16px;
1073
+ margin-bottom: 28px;
1074
+ }
1075
+
1076
+ .audit-metric-box {
1077
+ background: rgba(15, 22, 36, 0.6);
1078
+ border: 1px solid var(--border-light);
1079
+ border-radius: var(--radius-md);
1080
+ padding: 20px;
1081
+ text-align: center;
1082
+ }
1083
+
1084
+ .metric-num {
1085
+ font-family: var(--font-heading);
1086
+ font-size: 32px;
1087
+ font-weight: 700;
1088
+ display: block;
1089
+ }
1090
+
1091
+ .metric-title {
1092
+ font-size: 13px;
1093
+ color: var(--text-muted);
1094
+ }
1095
+
1096
+ .audit-list {
1097
+ display: flex;
1098
+ flex-direction: column;
1099
+ gap: 16px;
1100
+ }
1101
+
1102
+ .audit-card-item {
1103
+ background: rgba(15, 22, 36, 0.7);
1104
+ border: 1px solid var(--border-light);
1105
+ border-radius: var(--radius-md);
1106
+ padding: 18px;
1107
+ }
1108
+
1109
+ .audit-item-meta {
1110
+ display: flex;
1111
+ align-items: center;
1112
+ justify-content: space-between;
1113
+ margin-bottom: 8px;
1114
+ }
1115
+
1116
+ .audit-file-path {
1117
+ display: flex;
1118
+ align-items: center;
1119
+ gap: 10px;
1120
+ }
1121
+
1122
+ .audit-file-path code {
1123
+ font-family: var(--font-mono);
1124
+ color: var(--text-bright);
1125
+ font-size: 14px;
1126
+ }
1127
+
1128
+ .audit-desc {
1129
+ font-size: 13px;
1130
+ color: var(--text-muted);
1131
+ margin-bottom: 12px;
1132
+ }
1133
+
1134
+ .audit-item-actions {
1135
+ display: flex;
1136
+ gap: 8px;
1137
+ }
1138
+
1139
+ /* Toast Notifications */
1140
+ .toast-container {
1141
+ position: fixed;
1142
+ bottom: 24px;
1143
+ right: 24px;
1144
+ display: flex;
1145
+ flex-direction: column;
1146
+ gap: 10px;
1147
+ z-index: 1000;
1148
+ pointer-events: none;
1149
+ }
1150
+
1151
+ .toast {
1152
+ pointer-events: auto;
1153
+ background: var(--bg-dark);
1154
+ border: 1px solid var(--border-light);
1155
+ color: var(--text-bright);
1156
+ padding: 12px 20px;
1157
+ border-radius: var(--radius-md);
1158
+ box-shadow: var(--shadow-panel);
1159
+ display: flex;
1160
+ align-items: center;
1161
+ gap: 12px;
1162
+ font-size: 14px;
1163
+ animation: slideInRight 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1164
+ min-width: 280px;
1165
+ }
1166
+
1167
+ .toast.toast-success { border-left: 4px solid var(--accent-emerald); }
1168
+ .toast.toast-error { border-left: 4px solid var(--accent-rose); }
1169
+ .toast.toast-info { border-left: 4px solid var(--primary); }
1170
+
1171
+ @keyframes slideInRight {
1172
+ from { transform: translateX(100%); opacity: 0; }
1173
+ to { transform: translateX(0); opacity: 1; }
1174
+ }
1175
+
1176
+ /* Footer */
1177
+ .footer {
1178
+ margin-top: auto;
1179
+ padding: 24px 0;
1180
+ border-top: 1px solid var(--border-light);
1181
+ }
1182
+
1183
+ .footer-content {
1184
+ display: flex;
1185
+ align-items: center;
1186
+ justify-content: space-between;
1187
+ font-size: 13px;
1188
+ color: var(--text-dim);
1189
+ }
1190
+
1191
+ .footer-links {
1192
+ display: flex;
1193
+ gap: 20px;
1194
+ }
1195
+
1196
+ .footer-links a {
1197
+ color: var(--text-muted);
1198
+ text-decoration: none;
1199
+ transition: var(--transition-fast);
1200
+ }
1201
+
1202
+ .footer-links a:hover {
1203
+ color: var(--primary);
1204
+ }
1205
+
1206
+ /* ==========================================================================
1207
+ Mobile Gate Overlay
1208
+ ========================================================================== */
1209
+ .mobile-gate-overlay {
1210
+ position: fixed;
1211
+ top: 0;
1212
+ left: 0;
1213
+ width: 100vw;
1214
+ height: 100vh;
1215
+ background: rgba(8, 12, 22, 0.94);
1216
+ backdrop-filter: blur(16px);
1217
+ -webkit-backdrop-filter: blur(16px);
1218
+ z-index: 99999;
1219
+ display: flex;
1220
+ align-items: center;
1221
+ justify-content: center;
1222
+ padding: 24px;
1223
+ animation: fadeIn 0.3s ease-out;
1224
+ }
1225
+
1226
+ .mobile-gate-card {
1227
+ max-width: 480px;
1228
+ width: 100%;
1229
+ text-align: center;
1230
+ padding: 36px 28px;
1231
+ border: 1px solid rgba(244, 63, 94, 0.3);
1232
+ box-shadow: 0 0 50px rgba(244, 63, 94, 0.15);
1233
+ }
1234
+
1235
+ .mobile-gate-icon {
1236
+ position: relative;
1237
+ display: inline-flex;
1238
+ align-items: center;
1239
+ justify-content: center;
1240
+ gap: 12px;
1241
+ font-size: 38px;
1242
+ color: var(--accent-rose);
1243
+ margin-bottom: 20px;
1244
+ }
1245
+
1246
+ .mobile-ban-badge {
1247
+ position: absolute;
1248
+ top: -8px;
1249
+ right: -12px;
1250
+ font-size: 22px;
1251
+ color: var(--accent-rose);
1252
+ background: var(--bg-dark);
1253
+ border-radius: 50%;
1254
+ }
1255
+
1256
+ .mobile-gate-title {
1257
+ font-family: var(--font-title);
1258
+ font-size: 24px;
1259
+ font-weight: 700;
1260
+ color: var(--text-bright);
1261
+ margin-bottom: 12px;
1262
+ }
1263
+
1264
+ .mobile-gate-notice {
1265
+ background: rgba(244, 63, 94, 0.12);
1266
+ border: 1px dashed rgba(244, 63, 94, 0.4);
1267
+ color: #fca5a5;
1268
+ font-weight: 700;
1269
+ font-size: 15px;
1270
+ padding: 14px 18px;
1271
+ border-radius: var(--radius-md);
1272
+ margin-bottom: 16px;
1273
+ box-shadow: 0 4px 12px rgba(244, 63, 94, 0.1);
1274
+ }
1275
+
1276
+ .mobile-gate-desc {
1277
+ font-size: 14px;
1278
+ color: var(--text-muted);
1279
+ line-height: 1.6;
1280
+ margin-bottom: 24px;
1281
+ }
1282
+
1283
+ .mobile-gate-actions {
1284
+ display: flex;
1285
+ flex-direction: column;
1286
+ gap: 10px;
1287
+ }
1288
+
1289
+ @media (max-width: 768px) {
1290
+ .mobile-gate-overlay {
1291
+ display: flex !important;
1292
+ }
1293
+ }
1294
+
1295
+ /* ==========================================================================
1296
+ Embedded Scout CLI Shell UI
1297
+ ========================================================================== */
1298
+ .terminal-card {
1299
+ padding: 0;
1300
+ overflow: hidden;
1301
+ border: 1px solid rgba(99, 102, 241, 0.3);
1302
+ }
1303
+
1304
+ .terminal-card .card-header {
1305
+ padding: 20px 24px;
1306
+ border-bottom: 1px solid var(--border-light);
1307
+ background: rgba(15, 23, 42, 0.6);
1308
+ }
1309
+
1310
+ .terminal-meta-pills {
1311
+ display: flex;
1312
+ align-items: center;
1313
+ gap: 10px;
1314
+ }
1315
+
1316
+ .terminal-quick-chips {
1317
+ display: flex;
1318
+ align-items: center;
1319
+ flex-wrap: wrap;
1320
+ gap: 8px;
1321
+ padding: 14px 20px;
1322
+ background: rgba(10, 15, 26, 0.6);
1323
+ border-bottom: 1px solid var(--border-light);
1324
+ }
1325
+
1326
+ .quick-chip-label {
1327
+ font-size: 12px;
1328
+ font-weight: 600;
1329
+ color: var(--text-muted);
1330
+ margin-right: 6px;
1331
+ }
1332
+
1333
+ .btn-chip {
1334
+ background: rgba(30, 41, 59, 0.7);
1335
+ border: 1px solid var(--border-light);
1336
+ color: var(--text-main);
1337
+ font-family: var(--font-mono);
1338
+ font-size: 12px;
1339
+ padding: 6px 12px;
1340
+ border-radius: var(--radius-full);
1341
+ cursor: pointer;
1342
+ transition: var(--transition-fast);
1343
+ display: inline-flex;
1344
+ align-items: center;
1345
+ gap: 6px;
1346
+ }
1347
+
1348
+ .btn-chip:hover {
1349
+ background: var(--primary);
1350
+ color: white;
1351
+ border-color: var(--primary);
1352
+ transform: translateY(-1px);
1353
+ }
1354
+
1355
+ .terminal-window {
1356
+ background: #090d16;
1357
+ font-family: var(--font-mono), 'Fira Code', 'Courier New', monospace;
1358
+ display: flex;
1359
+ flex-direction: column;
1360
+ min-height: 480px;
1361
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
1362
+ }
1363
+
1364
+ .terminal-topbar {
1365
+ display: flex;
1366
+ align-items: center;
1367
+ justify-content: space-between;
1368
+ background: #111827;
1369
+ padding: 10px 16px;
1370
+ border-bottom: 1px solid #1f2937;
1371
+ }
1372
+
1373
+ .window-controls {
1374
+ display: flex;
1375
+ gap: 8px;
1376
+ }
1377
+
1378
+ .dot {
1379
+ width: 12px;
1380
+ height: 12px;
1381
+ border-radius: 50%;
1382
+ display: inline-block;
1383
+ }
1384
+
1385
+ .dot-red { background: #ef4444; }
1386
+ .dot-yellow { background: #f59e0b; }
1387
+ .dot-green { background: #10b981; }
1388
+
1389
+ .terminal-title {
1390
+ font-size: 12px;
1391
+ color: var(--text-muted);
1392
+ font-family: var(--font-mono);
1393
+ }
1394
+
1395
+ .terminal-top-actions {
1396
+ display: flex;
1397
+ gap: 8px;
1398
+ }
1399
+
1400
+ .btn-term-icon {
1401
+ background: transparent;
1402
+ border: none;
1403
+ color: var(--text-dim);
1404
+ cursor: pointer;
1405
+ padding: 4px 8px;
1406
+ border-radius: var(--radius-sm);
1407
+ font-size: 13px;
1408
+ transition: var(--transition-fast);
1409
+ }
1410
+
1411
+ .btn-term-icon:hover {
1412
+ color: var(--text-bright);
1413
+ background: #1f2937;
1414
+ }
1415
+
1416
+ .terminal-body {
1417
+ padding: 18px 20px;
1418
+ height: 380px;
1419
+ overflow-y: auto;
1420
+ color: #e2e8f0;
1421
+ font-size: 13px;
1422
+ line-height: 1.6;
1423
+ white-space: pre-wrap;
1424
+ word-break: break-word;
1425
+ }
1426
+
1427
+ .term-line {
1428
+ margin-bottom: 4px;
1429
+ }
1430
+
1431
+ .term-welcome {
1432
+ color: #a5b4fc;
1433
+ font-weight: 600;
1434
+ }
1435
+
1436
+ .term-brand {
1437
+ color: #818cf8;
1438
+ font-weight: 700;
1439
+ }
1440
+
1441
+ .term-info {
1442
+ color: #94a3b8;
1443
+ }
1444
+
1445
+ .term-code {
1446
+ background: #1e293b;
1447
+ color: #38bdf8;
1448
+ padding: 2px 6px;
1449
+ border-radius: 4px;
1450
+ }
1451
+
1452
+ .term-dim {
1453
+ color: #475569;
1454
+ }
1455
+
1456
+ .term-cmd-entry {
1457
+ color: #38bdf8;
1458
+ font-weight: 600;
1459
+ margin-top: 12px;
1460
+ }
1461
+
1462
+ .term-output-text {
1463
+ color: #cbd5e1;
1464
+ padding-left: 8px;
1465
+ border-left: 2px solid #3b82f6;
1466
+ margin-bottom: 12px;
1467
+ }
1468
+
1469
+ .terminal-input-row {
1470
+ display: flex;
1471
+ align-items: center;
1472
+ background: #0f172a;
1473
+ border-top: 1px solid #1e293b;
1474
+ padding: 10px 16px;
1475
+ gap: 12px;
1476
+ }
1477
+
1478
+ .terminal-prompt-symbol {
1479
+ color: #10b981;
1480
+ font-weight: 700;
1481
+ font-size: 14px;
1482
+ user-select: none;
1483
+ }
1484
+
1485
+ .terminal-input {
1486
+ flex: 1;
1487
+ background: transparent;
1488
+ border: none;
1489
+ color: #f8fafc;
1490
+ font-family: var(--font-mono);
1491
+ font-size: 14px;
1492
+ outline: none;
1493
+ }
1494
+
1495
+ .terminal-input::placeholder {
1496
+ color: #475569;
1497
+ }
1498
+
1499
+ .btn-terminal-run {
1500
+ padding: 6px 14px;
1501
+ }