omnigate-ai 1.0.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.
@@ -0,0 +1,1060 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
2
+
3
+ :root {
4
+ /* Glass & Light Elegance palette */
5
+ --glass-bg: rgba(255, 255, 255, 0.08);
6
+ --glass-border: rgba(255, 255, 255, 0.18);
7
+ --glass-shadow: rgba(0, 0, 0, 0.1);
8
+ --glass-blur: 20px;
9
+
10
+ --bg-gradient-start: #0f0c29;
11
+ --bg-gradient-mid: #302b63;
12
+ --bg-gradient-end: #24243e;
13
+
14
+ --card-bg: rgba(255, 255, 255, 0.06);
15
+ --card-border: rgba(255, 255, 255, 0.12);
16
+ --card-hover-border: rgba(255, 255, 255, 0.25);
17
+
18
+ --text-primary: #f1f5f9;
19
+ --text-secondary: #cbd5e1;
20
+ --text-muted: #94a3b8;
21
+ --text-dim: #64748b;
22
+
23
+ /* Elegant gradients */
24
+ --gradient-cyan: linear-gradient(135deg, #00f2fe, #4facfe);
25
+ --gradient-rose: linear-gradient(135deg, #ff0844, #ffb199);
26
+ --gradient-violet: linear-gradient(135deg, #c471ed, #f64f59);
27
+ --gradient-emerald: linear-gradient(135deg, #11998e, #38ef7d);
28
+ --gradient-amber: linear-gradient(135deg, #f093fb, #f5576c);
29
+ --gradient-sky: linear-gradient(135deg, #4facfe, #00f2fe);
30
+ --gradient-pearl: linear-gradient(135deg, #e0c3fc, #8ec5fc);
31
+
32
+ --accent-cyan: #00f2fe;
33
+ --accent-blue: #4facfe;
34
+ --accent-rose: #ff0844;
35
+ --accent-violet: #c471ed;
36
+ --accent-green: #38ef7d;
37
+ }
38
+
39
+ * {
40
+ box-sizing: border-box;
41
+ margin: 0;
42
+ padding: 0;
43
+ }
44
+
45
+ body {
46
+ background: linear-gradient(135deg, var(--bg-gradient-start), var(--bg-gradient-mid), var(--bg-gradient-end));
47
+ background-attachment: fixed;
48
+ color: var(--text-primary);
49
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
50
+ min-height: 100vh;
51
+ padding: 1.5rem;
52
+ position: relative;
53
+ overflow-x: hidden;
54
+ }
55
+
56
+ /* Subtle animated background orbs */
57
+ body::before,
58
+ body::after {
59
+ content: '';
60
+ position: fixed;
61
+ border-radius: 50%;
62
+ filter: blur(80px);
63
+ opacity: 0.15;
64
+ z-index: 0;
65
+ pointer-events: none;
66
+ }
67
+
68
+ body::before {
69
+ width: 600px;
70
+ height: 600px;
71
+ background: var(--accent-cyan);
72
+ top: -200px;
73
+ right: -200px;
74
+ animation: floatOrb 20s ease-in-out infinite alternate;
75
+ }
76
+
77
+ body::after {
78
+ width: 500px;
79
+ height: 500px;
80
+ background: var(--accent-violet);
81
+ bottom: -150px;
82
+ left: -150px;
83
+ animation: floatOrb 25s ease-in-out infinite alternate-reverse;
84
+ }
85
+
86
+ @keyframes floatOrb {
87
+ 0% { transform: translate(0, 0) scale(1); }
88
+ 100% { transform: translate(100px, 80px) scale(1.2); }
89
+ }
90
+
91
+ .dashboard-container {
92
+ max-width: 1400px;
93
+ margin: 0 auto;
94
+ position: relative;
95
+ z-index: 1;
96
+ }
97
+
98
+ /* ============================
99
+ HEADER
100
+ ============================ */
101
+ .dashboard-header {
102
+ display: flex;
103
+ justify-content: space-between;
104
+ align-items: center;
105
+ margin-bottom: 2rem;
106
+ padding: 1.25rem 2rem;
107
+ background: rgba(255, 255, 255, 0.05);
108
+ backdrop-filter: blur(16px);
109
+ -webkit-backdrop-filter: blur(16px);
110
+ border: 1px solid rgba(255, 255, 255, 0.1);
111
+ border-radius: 20px;
112
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
113
+ }
114
+
115
+ .logo {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 0.85rem;
119
+ }
120
+
121
+ .logo svg {
122
+ filter: drop-shadow(0 0 12px rgba(0, 242, 254, 0.3));
123
+ }
124
+
125
+ .logo h1 {
126
+ font-size: 1.5rem;
127
+ font-weight: 700;
128
+ letter-spacing: -0.02em;
129
+ background: var(--gradient-cyan);
130
+ -webkit-background-clip: text;
131
+ -webkit-text-fill-color: transparent;
132
+ background-clip: text;
133
+ }
134
+
135
+ .badge {
136
+ font-size: 0.65rem;
137
+ background: rgba(255, 255, 255, 0.08);
138
+ color: var(--accent-cyan);
139
+ padding: 0.25rem 0.6rem;
140
+ border-radius: 6px;
141
+ border: 1px solid rgba(0, 242, 254, 0.25);
142
+ letter-spacing: 0.08em;
143
+ font-weight: 600;
144
+ backdrop-filter: blur(4px);
145
+ -webkit-text-fill-color: var(--accent-cyan);
146
+ }
147
+
148
+ .status-indicator {
149
+ display: flex;
150
+ align-items: center;
151
+ gap: 0.6rem;
152
+ font-size: 0.8rem;
153
+ color: var(--text-secondary);
154
+ font-weight: 500;
155
+ }
156
+
157
+ .pulse-dot {
158
+ width: 8px;
159
+ height: 8px;
160
+ background-color: #10b981;
161
+ border-radius: 50%;
162
+ box-shadow: 0 0 12px rgba(16, 185, 129, 0.6);
163
+ animation: pulse 2s infinite;
164
+ }
165
+
166
+ @keyframes pulse {
167
+ 0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.5); }
168
+ 70% { box-shadow: 0 0 0 8px rgba(16, 185, 129, 0); }
169
+ 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
170
+ }
171
+
172
+ /* ============================
173
+ GAUGE CLUSTER - Glass Cards
174
+ ============================ */
175
+ .gauge-cluster {
176
+ display: grid;
177
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
178
+ gap: 1.5rem;
179
+ margin-bottom: 2rem;
180
+ }
181
+
182
+ .gauge-card {
183
+ background: rgba(255, 255, 255, 0.05);
184
+ backdrop-filter: blur(16px);
185
+ -webkit-backdrop-filter: blur(16px);
186
+ border: 1px solid rgba(255, 255, 255, 0.1);
187
+ border-radius: 20px;
188
+ padding: 1.75rem 1.5rem;
189
+ display: flex;
190
+ flex-direction: column;
191
+ align-items: center;
192
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
193
+ transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
194
+ position: relative;
195
+ overflow: hidden;
196
+ }
197
+
198
+ /* Subtle glass reflection overlay */
199
+ .gauge-card::before {
200
+ content: '';
201
+ position: absolute;
202
+ top: 0;
203
+ left: 0;
204
+ right: 0;
205
+ height: 1px;
206
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
207
+ }
208
+
209
+ .gauge-card:hover {
210
+ transform: translateY(-6px);
211
+ border-color: rgba(255, 255, 255, 0.2);
212
+ box-shadow: 0 12px 48px rgba(0, 0, 0, 0.2), 0 0 40px rgba(0, 242, 254, 0.05);
213
+ }
214
+
215
+ .gauge-card h3 {
216
+ font-size: 0.8rem;
217
+ color: var(--text-muted);
218
+ text-transform: uppercase;
219
+ letter-spacing: 0.1em;
220
+ font-weight: 600;
221
+ margin-bottom: 1.25rem;
222
+ }
223
+
224
+ .gauge-wrapper {
225
+ position: relative;
226
+ width: 160px;
227
+ height: 160px;
228
+ margin-bottom: 1.25rem;
229
+ }
230
+
231
+ .gauge-svg {
232
+ width: 100%;
233
+ height: 100%;
234
+ transform: rotate(-90deg);
235
+ }
236
+
237
+ .gauge-bg {
238
+ fill: none;
239
+ stroke: rgba(255, 255, 255, 0.06);
240
+ stroke-width: 8;
241
+ }
242
+
243
+ .gauge-value {
244
+ fill: none;
245
+ stroke-width: 8;
246
+ stroke-linecap: round;
247
+ stroke-dasharray: 283;
248
+ stroke-dashoffset: 283;
249
+ transition: stroke-dashoffset 1.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
250
+ filter: drop-shadow(0 0 6px rgba(0, 242, 254, 0.3));
251
+ }
252
+
253
+ .gauge-center-text {
254
+ position: absolute;
255
+ top: 0;
256
+ left: 0;
257
+ right: 0;
258
+ bottom: 0;
259
+ display: flex;
260
+ flex-direction: column;
261
+ align-items: center;
262
+ justify-content: center;
263
+ }
264
+
265
+ .gauge-center-text .value {
266
+ font-size: 1.6rem;
267
+ font-weight: 800;
268
+ background: var(--gradient-cyan);
269
+ -webkit-background-clip: text;
270
+ -webkit-text-fill-color: transparent;
271
+ background-clip: text;
272
+ line-height: 1.2;
273
+ }
274
+
275
+ #total-cost {
276
+ background: var(--gradient-rose);
277
+ -webkit-background-clip: text;
278
+ background-clip: text;
279
+ }
280
+
281
+ #rpm-value {
282
+ background: var(--gradient-violet);
283
+ -webkit-background-clip: text;
284
+ background-clip: text;
285
+ }
286
+
287
+ .gauge-center-text .unit {
288
+ font-size: 0.7rem;
289
+ color: var(--text-dim);
290
+ margin-top: 0.2rem;
291
+ font-weight: 500;
292
+ text-transform: uppercase;
293
+ letter-spacing: 0.05em;
294
+ }
295
+
296
+ .gauge-stats {
297
+ width: 100%;
298
+ display: flex;
299
+ justify-content: center;
300
+ gap: 2rem;
301
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
302
+ padding-top: 1rem;
303
+ }
304
+
305
+ .stat {
306
+ display: flex;
307
+ flex-direction: column;
308
+ align-items: center;
309
+ }
310
+
311
+ .stat .label {
312
+ font-size: 0.6rem;
313
+ color: var(--text-dim);
314
+ margin-bottom: 0.2rem;
315
+ text-transform: uppercase;
316
+ letter-spacing: 0.08em;
317
+ font-weight: 600;
318
+ }
319
+
320
+ .stat .val {
321
+ font-size: 0.85rem;
322
+ font-weight: 700;
323
+ color: var(--text-secondary);
324
+ }
325
+
326
+ /* ============================
327
+ MAIN CONTENT GRID
328
+ ============================ */
329
+ .main-content-grid {
330
+ display: grid;
331
+ grid-template-columns: 1fr;
332
+ gap: 1.5rem;
333
+ }
334
+
335
+ @media (min-width: 1024px) {
336
+ .main-content-grid {
337
+ grid-template-columns: 380px 1fr;
338
+ align-items: start;
339
+ }
340
+ }
341
+
342
+ /* ============================
343
+ CONFIG PANEL - Glass Card
344
+ ============================ */
345
+ .config-panel {
346
+ background: rgba(255, 255, 255, 0.05);
347
+ backdrop-filter: blur(16px);
348
+ -webkit-backdrop-filter: blur(16px);
349
+ border: 1px solid rgba(255, 255, 255, 0.1);
350
+ border-radius: 20px;
351
+ padding: 1.75rem;
352
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
353
+ position: relative;
354
+ overflow: hidden;
355
+ }
356
+
357
+ .config-panel::before {
358
+ content: '';
359
+ position: absolute;
360
+ top: 0;
361
+ left: 0;
362
+ right: 0;
363
+ height: 1px;
364
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.25), transparent);
365
+ }
366
+
367
+ .panel-header h3 {
368
+ font-size: 1rem;
369
+ font-weight: 700;
370
+ color: var(--text-primary);
371
+ margin-bottom: 1.5rem;
372
+ letter-spacing: -0.01em;
373
+ }
374
+
375
+ .config-form {
376
+ display: flex;
377
+ flex-direction: column;
378
+ gap: 1rem;
379
+ }
380
+
381
+ .form-group {
382
+ display: flex;
383
+ flex-direction: column;
384
+ gap: 0.4rem;
385
+ }
386
+
387
+ .form-group label {
388
+ font-size: 0.7rem;
389
+ color: var(--text-muted);
390
+ font-weight: 600;
391
+ text-transform: uppercase;
392
+ letter-spacing: 0.06em;
393
+ }
394
+
395
+ .form-group input,
396
+ .form-group select {
397
+ background: rgba(0, 0, 0, 0.25);
398
+ border: 1px solid rgba(255, 255, 255, 0.08);
399
+ color: var(--text-primary);
400
+ padding: 0.7rem 0.9rem;
401
+ border-radius: 10px;
402
+ font-family: 'Inter', sans-serif;
403
+ font-size: 0.85rem;
404
+ transition: all 0.3s ease;
405
+ backdrop-filter: blur(4px);
406
+ }
407
+
408
+ .form-group input:focus,
409
+ .form-group select:focus {
410
+ outline: none;
411
+ border-color: rgba(0, 242, 254, 0.4);
412
+ box-shadow: 0 0 20px rgba(0, 242, 254, 0.08);
413
+ }
414
+
415
+ .form-group input::placeholder {
416
+ color: var(--text-dim);
417
+ }
418
+
419
+ .form-group select option {
420
+ background: #1a1a2e;
421
+ color: var(--text-primary);
422
+ }
423
+
424
+ .form-divider {
425
+ margin-top: 0.75rem;
426
+ padding-bottom: 0.4rem;
427
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
428
+ font-size: 0.75rem;
429
+ font-weight: 700;
430
+ background: var(--gradient-cyan);
431
+ -webkit-background-clip: text;
432
+ -webkit-text-fill-color: transparent;
433
+ background-clip: text;
434
+ letter-spacing: 0.03em;
435
+ }
436
+
437
+ .form-actions {
438
+ margin-top: 0.75rem;
439
+ display: flex;
440
+ flex-direction: column;
441
+ gap: 0.75rem;
442
+ }
443
+
444
+ .btn-save {
445
+ background: var(--gradient-cyan);
446
+ color: #fff;
447
+ border: none;
448
+ padding: 0.85rem;
449
+ border-radius: 10px;
450
+ font-size: 0.9rem;
451
+ font-weight: 700;
452
+ cursor: pointer;
453
+ transition: all 0.3s ease;
454
+ letter-spacing: 0.02em;
455
+ position: relative;
456
+ overflow: hidden;
457
+ }
458
+
459
+ .btn-save::before {
460
+ content: '';
461
+ position: absolute;
462
+ top: 0;
463
+ left: -100%;
464
+ width: 100%;
465
+ height: 100%;
466
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
467
+ transition: left 0.5s ease;
468
+ }
469
+
470
+ .btn-save:hover::before {
471
+ left: 100%;
472
+ }
473
+
474
+ .btn-save:hover {
475
+ transform: translateY(-2px);
476
+ box-shadow: 0 8px 25px rgba(0, 242, 254, 0.25);
477
+ }
478
+
479
+ .btn-save:active {
480
+ transform: translateY(0);
481
+ }
482
+
483
+ .config-status {
484
+ font-size: 0.8rem;
485
+ text-align: center;
486
+ min-height: 1.5rem;
487
+ font-weight: 500;
488
+ }
489
+
490
+ .config-status.success {
491
+ color: var(--accent-green);
492
+ }
493
+
494
+ .config-status.error {
495
+ color: var(--accent-rose);
496
+ }
497
+
498
+ /* ============================
499
+ DATA PANEL - Glass Card
500
+ ============================ */
501
+ .data-panel {
502
+ background: rgba(255, 255, 255, 0.05);
503
+ backdrop-filter: blur(16px);
504
+ -webkit-backdrop-filter: blur(16px);
505
+ border: 1px solid rgba(255, 255, 255, 0.1);
506
+ border-radius: 20px;
507
+ padding: 1.75rem;
508
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
509
+ position: relative;
510
+ overflow: hidden;
511
+ }
512
+
513
+ .data-panel::before {
514
+ content: '';
515
+ position: absolute;
516
+ top: 0;
517
+ left: 0;
518
+ right: 0;
519
+ height: 1px;
520
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.25), transparent);
521
+ }
522
+
523
+ .table-wrapper {
524
+ overflow-x: auto;
525
+ border-radius: 12px;
526
+ }
527
+
528
+ .telemetry-table {
529
+ width: 100%;
530
+ border-collapse: separate;
531
+ border-spacing: 0;
532
+ text-align: left;
533
+ }
534
+
535
+ .telemetry-table thead {
536
+ position: sticky;
537
+ top: 0;
538
+ }
539
+
540
+ .telemetry-table th {
541
+ padding: 0.9rem 1rem;
542
+ color: var(--text-muted);
543
+ font-size: 0.65rem;
544
+ text-transform: uppercase;
545
+ letter-spacing: 0.08em;
546
+ font-weight: 600;
547
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
548
+ background: rgba(0, 0, 0, 0.15);
549
+ }
550
+
551
+ .telemetry-table th:first-child {
552
+ border-radius: 10px 0 0 0;
553
+ }
554
+
555
+ .telemetry-table th:last-child {
556
+ border-radius: 0 10px 0 0;
557
+ }
558
+
559
+ .telemetry-table td {
560
+ padding: 0.9rem 1rem;
561
+ font-size: 0.8rem;
562
+ border-bottom: 1px solid rgba(255, 255, 255, 0.04);
563
+ color: var(--text-secondary);
564
+ transition: background 0.2s ease;
565
+ }
566
+
567
+ .telemetry-table tbody tr {
568
+ transition: all 0.2s ease;
569
+ }
570
+
571
+ .telemetry-table tbody tr:hover td {
572
+ background: rgba(255, 255, 255, 0.03);
573
+ }
574
+
575
+ .telemetry-table tbody tr:last-child td:first-child {
576
+ border-radius: 0 0 0 10px;
577
+ }
578
+
579
+ .telemetry-table tbody tr:last-child td:last-child {
580
+ border-radius: 0 0 10px 0;
581
+ }
582
+
583
+ .text-right {
584
+ text-align: right;
585
+ }
586
+
587
+ .telemetry-table td strong {
588
+ color: var(--text-primary);
589
+ font-weight: 600;
590
+ }
591
+
592
+ /* New row highlight animation */
593
+ @keyframes highlight {
594
+ 0% { background-color: rgba(0, 242, 254, 0.08); }
595
+ 100% { background-color: transparent; }
596
+ }
597
+
598
+ .new-row {
599
+ animation: highlight 2.5s ease-out;
600
+ }
601
+
602
+ /* Cost column accent */
603
+ .telemetry-table td:last-child {
604
+ font-weight: 700;
605
+ color: var(--accent-cyan);
606
+ }
607
+
608
+ /* ============================
609
+ SCROLLBAR (elegant)
610
+ ============================ */
611
+ ::-webkit-scrollbar {
612
+ width: 6px;
613
+ height: 6px;
614
+ }
615
+
616
+ ::-webkit-scrollbar-track {
617
+ background: transparent;
618
+ }
619
+
620
+ ::-webkit-scrollbar-thumb {
621
+ background: rgba(255, 255, 255, 0.1);
622
+ border-radius: 3px;
623
+ }
624
+
625
+ ::-webkit-scrollbar-thumb:hover {
626
+ background: rgba(255, 255, 255, 0.2);
627
+ }
628
+
629
+ /* ============================
630
+ TABS & ONBOARDING GUIDE
631
+ ============================ */
632
+ .tabs-header {
633
+ display: flex;
634
+ gap: 1rem;
635
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
636
+ margin-bottom: 1.5rem;
637
+ padding-bottom: 0.5rem;
638
+ }
639
+
640
+ .tab-btn {
641
+ background: transparent;
642
+ border: none;
643
+ color: var(--text-muted);
644
+ font-size: 0.9rem;
645
+ font-weight: 600;
646
+ padding: 0.5rem 0.25rem;
647
+ cursor: pointer;
648
+ transition: all 0.3s ease;
649
+ position: relative;
650
+ font-family: 'Inter', sans-serif;
651
+ }
652
+
653
+ .tab-btn:hover {
654
+ color: var(--text-primary);
655
+ }
656
+
657
+ .tab-btn.active {
658
+ color: var(--accent-cyan);
659
+ }
660
+
661
+ .tab-btn.active::after {
662
+ content: '';
663
+ position: absolute;
664
+ bottom: -9px;
665
+ left: 0;
666
+ right: 0;
667
+ height: 2px;
668
+ background: var(--gradient-cyan);
669
+ border-radius: 2px;
670
+ }
671
+
672
+ .tab-content {
673
+ display: none;
674
+ }
675
+
676
+ .tab-content.active {
677
+ display: block;
678
+ }
679
+
680
+ .onboarding-guide {
681
+ display: flex;
682
+ flex-direction: column;
683
+ gap: 1.25rem;
684
+ max-height: 520px;
685
+ overflow-y: auto;
686
+ padding-right: 0.25rem;
687
+ }
688
+
689
+ .onboarding-section {
690
+ display: flex;
691
+ flex-direction: column;
692
+ gap: 0.6rem;
693
+ }
694
+
695
+ .onboarding-section h4 {
696
+ font-size: 0.8rem;
697
+ font-weight: 700;
698
+ color: var(--text-primary);
699
+ text-transform: uppercase;
700
+ letter-spacing: 0.05em;
701
+ display: flex;
702
+ align-items: center;
703
+ gap: 0.4rem;
704
+ }
705
+
706
+ .onboarding-section p {
707
+ font-size: 0.78rem;
708
+ color: var(--text-secondary);
709
+ line-height: 1.45;
710
+ }
711
+
712
+ .onboarding-section ol {
713
+ margin-left: 1rem;
714
+ font-size: 0.78rem;
715
+ color: var(--text-secondary);
716
+ display: flex;
717
+ flex-direction: column;
718
+ gap: 0.4rem;
719
+ }
720
+
721
+ .code-container {
722
+ position: relative;
723
+ background: rgba(0, 0, 0, 0.35);
724
+ border: 1px solid rgba(255, 255, 255, 0.06);
725
+ border-radius: 8px;
726
+ padding: 0.75rem;
727
+ font-family: 'Fira Code', 'Courier New', monospace;
728
+ font-size: 0.75rem;
729
+ color: #a7f3d0;
730
+ overflow-x: auto;
731
+ margin-top: 0.25rem;
732
+ }
733
+
734
+ .code-container pre {
735
+ margin: 0;
736
+ white-space: pre;
737
+ }
738
+
739
+ .copy-btn {
740
+ position: absolute;
741
+ top: 6px;
742
+ right: 6px;
743
+ background: rgba(255, 255, 255, 0.08);
744
+ border: 1px solid rgba(255, 255, 255, 0.1);
745
+ color: var(--text-secondary);
746
+ padding: 0.25rem 0.5rem;
747
+ font-size: 0.65rem;
748
+ font-weight: 600;
749
+ border-radius: 4px;
750
+ cursor: pointer;
751
+ transition: all 0.2s ease;
752
+ }
753
+
754
+ .copy-btn:hover {
755
+ background: rgba(255, 255, 255, 0.15);
756
+ color: var(--text-primary);
757
+ border-color: var(--accent-cyan);
758
+ }
759
+
760
+ .feature-badge {
761
+ display: inline-block;
762
+ font-size: 0.65rem;
763
+ font-weight: 700;
764
+ padding: 0.15rem 0.4rem;
765
+ border-radius: 4px;
766
+ text-transform: uppercase;
767
+ margin-right: 0.25rem;
768
+ }
769
+ .badge-gauge { background: rgba(196, 113, 237, 0.15); color: #c471ed; }
770
+ .badge-config { background: rgba(0, 242, 254, 0.15); color: #00f2fe; }
771
+ .badge-table { background: rgba(56, 239, 125, 0.15); color: #38ef7d; }
772
+
773
+ .features-list {
774
+ display: flex;
775
+ flex-direction: column;
776
+ gap: 0.5rem;
777
+ font-size: 0.78rem;
778
+ color: var(--text-secondary);
779
+ line-height: 1.4;
780
+ }
781
+
782
+ .features-list li {
783
+ list-style: none;
784
+ display: flex;
785
+ flex-direction: column;
786
+ gap: 0.15rem;
787
+ background: rgba(255, 255, 255, 0.02);
788
+ padding: 0.5rem 0.75rem;
789
+ border-radius: 8px;
790
+ border-left: 2px solid rgba(255, 255, 255, 0.1);
791
+ }
792
+
793
+ .features-list li:hover {
794
+ border-left-color: var(--accent-cyan);
795
+ background: rgba(255, 255, 255, 0.04);
796
+ }
797
+
798
+ /* ============================
799
+ ONBOARDING MODAL OVERLAY
800
+ ============================ */
801
+ .modal-overlay {
802
+ position: fixed;
803
+ top: 0;
804
+ left: 0;
805
+ right: 0;
806
+ bottom: 0;
807
+ background: rgba(15, 12, 41, 0.85);
808
+ backdrop-filter: blur(12px);
809
+ -webkit-backdrop-filter: blur(12px);
810
+ z-index: 1000;
811
+ display: flex;
812
+ align-items: center;
813
+ justify-content: center;
814
+ opacity: 1;
815
+ transition: opacity 0.4s ease, visibility 0.4s;
816
+ padding: 1rem;
817
+ }
818
+
819
+ .modal-overlay.hidden {
820
+ opacity: 0;
821
+ visibility: hidden;
822
+ pointer-events: none;
823
+ }
824
+
825
+ .modal-content {
826
+ background: rgba(255, 255, 255, 0.08);
827
+ border: 1px solid rgba(255, 255, 255, 0.15);
828
+ border-radius: 24px;
829
+ width: 100%;
830
+ max-width: 540px;
831
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4), 0 0 40px rgba(0, 242, 254, 0.1);
832
+ overflow: hidden;
833
+ display: flex;
834
+ flex-direction: column;
835
+ transform: translateY(0);
836
+ transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
837
+ }
838
+
839
+ .modal-overlay.hidden .modal-content {
840
+ transform: translateY(30px) scale(0.95);
841
+ }
842
+
843
+ .modal-header {
844
+ padding: 2rem 2rem 1rem;
845
+ text-align: center;
846
+ }
847
+
848
+ .modal-header h2 {
849
+ font-size: 1.6rem;
850
+ font-weight: 800;
851
+ background: var(--gradient-cyan);
852
+ -webkit-background-clip: text;
853
+ -webkit-text-fill-color: transparent;
854
+ background-clip: text;
855
+ margin-bottom: 1.5rem;
856
+ }
857
+
858
+ .step-indicator {
859
+ display: flex;
860
+ justify-content: center;
861
+ gap: 0.5rem;
862
+ }
863
+
864
+ .step-dot {
865
+ width: 10px;
866
+ height: 10px;
867
+ border-radius: 50%;
868
+ background: rgba(255, 255, 255, 0.2);
869
+ transition: all 0.3s ease;
870
+ }
871
+
872
+ .step-dot.active {
873
+ background: var(--accent-cyan);
874
+ width: 24px;
875
+ border-radius: 5px;
876
+ box-shadow: 0 0 10px rgba(0, 242, 254, 0.5);
877
+ }
878
+
879
+ .modal-body {
880
+ padding: 0 2rem 2rem;
881
+ min-height: 280px;
882
+ position: relative;
883
+ overflow: hidden;
884
+ }
885
+
886
+ .wizard-step {
887
+ position: absolute;
888
+ top: 0;
889
+ left: 0;
890
+ width: 100%;
891
+ padding: 0 2rem;
892
+ opacity: 0;
893
+ transform: translateX(30px);
894
+ pointer-events: none;
895
+ transition: all 0.4s ease;
896
+ }
897
+
898
+ .wizard-step.active {
899
+ opacity: 1;
900
+ transform: translateX(0);
901
+ pointer-events: auto;
902
+ position: relative;
903
+ padding: 0;
904
+ }
905
+
906
+ .wizard-step.exit-left {
907
+ opacity: 0;
908
+ transform: translateX(-30px);
909
+ }
910
+
911
+ .wizard-step h3 {
912
+ font-size: 1.2rem;
913
+ color: var(--text-primary);
914
+ margin-bottom: 0.75rem;
915
+ font-weight: 700;
916
+ }
917
+
918
+ .wizard-step p {
919
+ font-size: 0.9rem;
920
+ color: var(--text-secondary);
921
+ line-height: 1.5;
922
+ }
923
+
924
+ .modal-footer {
925
+ padding: 1.5rem 2rem;
926
+ background: rgba(0, 0, 0, 0.2);
927
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
928
+ display: flex;
929
+ justify-content: space-between;
930
+ align-items: center;
931
+ }
932
+
933
+ .btn-primary, .btn-secondary {
934
+ padding: 0.75rem 1.5rem;
935
+ border-radius: 10px;
936
+ font-size: 0.9rem;
937
+ font-weight: 600;
938
+ cursor: pointer;
939
+ transition: all 0.2s ease;
940
+ border: none;
941
+ font-family: 'Inter', sans-serif;
942
+ }
943
+
944
+ .btn-primary {
945
+ background: var(--gradient-cyan);
946
+ color: #fff;
947
+ box-shadow: 0 4px 15px rgba(0, 242, 254, 0.2);
948
+ }
949
+
950
+ .btn-primary:hover {
951
+ transform: translateY(-2px);
952
+ box-shadow: 0 6px 20px rgba(0, 242, 254, 0.3);
953
+ }
954
+
955
+ .btn-secondary {
956
+ background: rgba(255, 255, 255, 0.1);
957
+ color: var(--text-primary);
958
+ }
959
+
960
+ .btn-secondary:hover {
961
+ background: rgba(255, 255, 255, 0.15);
962
+ }
963
+
964
+ /* ============================
965
+ RESPONSIVE
966
+ ============================ */
967
+ @media (max-width: 640px) {
968
+ body {
969
+ padding: 0.75rem;
970
+ }
971
+
972
+ .dashboard-header {
973
+ flex-direction: column;
974
+ gap: 0.75rem;
975
+ text-align: center;
976
+ padding: 1rem;
977
+ }
978
+
979
+ .gauge-cluster {
980
+ grid-template-columns: 1fr;
981
+ }
982
+
983
+ .gauge-wrapper {
984
+ width: 140px;
985
+ height: 140px;
986
+ }
987
+ }
988
+
989
+ /* ============================
990
+ LOCK SCREEN & SECURITY OVERLAYS
991
+ ============================ */
992
+ .gauge-cluster-wrapper,
993
+ .data-panel-wrapper {
994
+ position: relative;
995
+ width: 100%;
996
+ }
997
+
998
+ .locked-section .gauge-cluster,
999
+ .locked-section .data-panel {
1000
+ filter: blur(14px);
1001
+ pointer-events: none;
1002
+ opacity: 0.45;
1003
+ transition: all 0.3s ease;
1004
+ }
1005
+
1006
+ .lock-overlay {
1007
+ display: none;
1008
+ position: absolute;
1009
+ top: 0;
1010
+ left: 0;
1011
+ right: 0;
1012
+ bottom: 0;
1013
+ z-index: 10;
1014
+ align-items: center;
1015
+ justify-content: center;
1016
+ }
1017
+
1018
+ .locked-section .lock-overlay {
1019
+ display: flex;
1020
+ }
1021
+
1022
+ .lock-card {
1023
+ background: rgba(255, 255, 255, 0.05);
1024
+ backdrop-filter: blur(10px);
1025
+ -webkit-backdrop-filter: blur(10px);
1026
+ border: 1px solid rgba(255, 255, 255, 0.15);
1027
+ padding: 2rem;
1028
+ border-radius: 20px;
1029
+ text-align: center;
1030
+ max-width: 320px;
1031
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
1032
+ animation: fadeIn 0.4s ease;
1033
+ }
1034
+
1035
+ .lock-icon {
1036
+ font-size: 2.2rem;
1037
+ display: block;
1038
+ margin-bottom: 0.85rem;
1039
+ filter: drop-shadow(0 0 10px rgba(0, 242, 254, 0.2));
1040
+ }
1041
+
1042
+ .lock-card h4 {
1043
+ font-size: 1.1rem;
1044
+ font-weight: 700;
1045
+ color: var(--text-primary);
1046
+ margin-bottom: 0.5rem;
1047
+ }
1048
+
1049
+ .lock-card p {
1050
+ font-size: 0.78rem;
1051
+ color: var(--text-secondary);
1052
+ line-height: 1.4;
1053
+ }
1054
+
1055
+ @keyframes fadeIn {
1056
+ from { opacity: 0; transform: scale(0.95); }
1057
+ to { opacity: 1; transform: scale(1); }
1058
+ }
1059
+
1060
+