sqa_demo-sinatra 0.1.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,962 @@
1
+ /* Reset and Base Styles */
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ :root {
9
+ --primary-color: #00d4ff;
10
+ --secondary-color: #00a8cc;
11
+ --success-color: #00ff88;
12
+ --danger-color: #ff3366;
13
+ --warning-color: #ffaa00;
14
+ --dark-bg: #0a0e27;
15
+ --card-bg: #151b3d;
16
+ --card-bg-lighter: #1e2749;
17
+ --text-primary: #e8eaf6;
18
+ --text-secondary: #9fa8da;
19
+ --border-color: #2a3154;
20
+ --positive-color: #00ff88;
21
+ --negative-color: #ff3366;
22
+ --chart-bg: #0f1535;
23
+ --grid-color: #2a3154;
24
+ --light-bg: #1e2749;
25
+ }
26
+
27
+ body {
28
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
29
+ background-color: var(--dark-bg);
30
+ color: var(--text-primary);
31
+ line-height: 1.6;
32
+ }
33
+
34
+ /* Navigation */
35
+ .navbar {
36
+ background: linear-gradient(135deg, var(--dark-bg) 0%, #16213e 100%);
37
+ color: white;
38
+ padding: 1rem 0;
39
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
40
+ position: sticky;
41
+ top: 0;
42
+ z-index: 1000;
43
+ }
44
+
45
+ .nav-container {
46
+ max-width: 1200px;
47
+ margin: 0 auto;
48
+ padding: 0 2rem;
49
+ display: flex;
50
+ justify-content: space-between;
51
+ align-items: center;
52
+ }
53
+
54
+ .nav-brand {
55
+ font-size: 1.5rem;
56
+ font-weight: 700;
57
+ display: flex;
58
+ align-items: center;
59
+ gap: 0.5rem;
60
+ }
61
+
62
+ .nav-brand i {
63
+ color: var(--primary-color);
64
+ }
65
+
66
+ .nav-menu {
67
+ display: flex;
68
+ list-style: none;
69
+ gap: 2rem;
70
+ }
71
+
72
+ .nav-link {
73
+ color: white;
74
+ text-decoration: none;
75
+ font-weight: 500;
76
+ transition: color 0.3s ease;
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 0.5rem;
80
+ }
81
+
82
+ .nav-link:hover {
83
+ color: var(--primary-color);
84
+ }
85
+
86
+ /* Main Content */
87
+ .main-content {
88
+ min-height: calc(100vh - 200px);
89
+ padding-bottom: 2rem;
90
+ }
91
+
92
+ /* Hero Section */
93
+ .hero {
94
+ background: linear-gradient(135deg, #1a237e 0%, #4a148c 100%);
95
+ color: white;
96
+ padding: 4rem 2rem;
97
+ text-align: center;
98
+ }
99
+
100
+ .hero-content h1 {
101
+ font-size: 3rem;
102
+ margin-bottom: 1rem;
103
+ font-weight: 700;
104
+ }
105
+
106
+ .hero-subtitle {
107
+ font-size: 1.25rem;
108
+ margin-bottom: 2rem;
109
+ opacity: 0.9;
110
+ }
111
+
112
+ .ticker-search {
113
+ max-width: 600px;
114
+ margin: 2rem auto;
115
+ }
116
+
117
+ .search-form {
118
+ display: flex;
119
+ gap: 1rem;
120
+ }
121
+
122
+ .search-form input {
123
+ flex: 1;
124
+ padding: 1rem;
125
+ border: none;
126
+ border-radius: 8px;
127
+ font-size: 1.1rem;
128
+ outline: none;
129
+ }
130
+
131
+ .quick-links {
132
+ margin-top: 3rem;
133
+ }
134
+
135
+ .quick-links h3 {
136
+ margin-bottom: 1rem;
137
+ font-weight: 600;
138
+ }
139
+
140
+ .ticker-buttons {
141
+ display: flex;
142
+ gap: 1rem;
143
+ justify-content: center;
144
+ flex-wrap: wrap;
145
+ }
146
+
147
+ .ticker-btn {
148
+ background: rgba(255, 255, 255, 0.2);
149
+ color: white;
150
+ padding: 0.75rem 1.5rem;
151
+ border-radius: 8px;
152
+ text-decoration: none;
153
+ font-weight: 600;
154
+ transition: all 0.3s ease;
155
+ backdrop-filter: blur(10px);
156
+ }
157
+
158
+ .ticker-btn:hover {
159
+ background: rgba(255, 255, 255, 0.3);
160
+ transform: translateY(-2px);
161
+ }
162
+
163
+ /* Buttons */
164
+ .btn {
165
+ padding: 0.75rem 1.5rem;
166
+ border: none;
167
+ border-radius: 8px;
168
+ font-size: 1rem;
169
+ font-weight: 600;
170
+ cursor: pointer;
171
+ transition: all 0.3s ease;
172
+ text-decoration: none;
173
+ display: inline-flex;
174
+ align-items: center;
175
+ gap: 0.5rem;
176
+ }
177
+
178
+ .btn-primary {
179
+ background: var(--primary-color);
180
+ color: white;
181
+ }
182
+
183
+ .btn-primary:hover {
184
+ background: var(--secondary-color);
185
+ transform: translateY(-2px);
186
+ box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3);
187
+ }
188
+
189
+ .btn-secondary {
190
+ background: var(--card-bg-lighter);
191
+ color: var(--text-primary);
192
+ border: 2px solid var(--border-color);
193
+ }
194
+
195
+ .btn-secondary:hover {
196
+ border-color: var(--primary-color);
197
+ color: var(--primary-color);
198
+ background: var(--card-bg);
199
+ }
200
+
201
+ .btn-large {
202
+ padding: 1rem 2rem;
203
+ font-size: 1.1rem;
204
+ }
205
+
206
+ .btn-small {
207
+ padding: 0.5rem 1rem;
208
+ font-size: 0.875rem;
209
+ background: var(--card-bg-lighter);
210
+ color: var(--text-primary);
211
+ border: 1px solid var(--border-color);
212
+ }
213
+
214
+ .btn-small.active {
215
+ background: var(--primary-color);
216
+ color: var(--dark-bg);
217
+ border-color: var(--primary-color);
218
+ font-weight: 700;
219
+ }
220
+
221
+ /* Period Selector */
222
+ .period-selector {
223
+ background: var(--card-bg);
224
+ padding: 1.5rem;
225
+ border-radius: 8px;
226
+ margin-bottom: 1.5rem;
227
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
228
+ }
229
+
230
+ .period-selector label {
231
+ font-weight: 600;
232
+ color: var(--text-primary);
233
+ margin-bottom: 0.75rem;
234
+ display: block;
235
+ }
236
+
237
+ .period-buttons {
238
+ display: flex;
239
+ gap: 0.5rem;
240
+ flex-wrap: wrap;
241
+ }
242
+
243
+ .btn-period {
244
+ padding: 0.5rem 1rem;
245
+ font-size: 0.875rem;
246
+ background: var(--card-bg-lighter);
247
+ color: var(--text-primary);
248
+ border: 1px solid var(--border-color);
249
+ border-radius: 4px;
250
+ cursor: pointer;
251
+ transition: all 0.2s;
252
+ font-family: inherit;
253
+ }
254
+
255
+ .btn-period:hover {
256
+ background: var(--card-bg);
257
+ border-color: var(--primary-color);
258
+ color: var(--primary-color);
259
+ }
260
+
261
+ .btn-period.active {
262
+ background: var(--primary-color);
263
+ color: var(--dark-bg);
264
+ border-color: var(--primary-color);
265
+ font-weight: 700;
266
+ }
267
+
268
+ /* Container */
269
+ .container {
270
+ max-width: 1200px;
271
+ margin: 0 auto;
272
+ padding: 0 2rem;
273
+ }
274
+
275
+ /* Features Section */
276
+ .features {
277
+ padding: 4rem 0;
278
+ background: var(--card-bg);
279
+ }
280
+
281
+ .features h2 {
282
+ text-align: center;
283
+ font-size: 2.5rem;
284
+ margin-bottom: 3rem;
285
+ color: var(--text-primary);
286
+ }
287
+
288
+ .feature-grid {
289
+ display: grid;
290
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
291
+ gap: 2rem;
292
+ }
293
+
294
+ .feature-card {
295
+ padding: 2rem;
296
+ background: var(--card-bg-lighter);
297
+ border-radius: 12px;
298
+ border: 1px solid var(--border-color);
299
+ transition: all 0.3s ease;
300
+ }
301
+
302
+ .feature-card:hover {
303
+ transform: translateY(-5px);
304
+ box-shadow: 0 10px 30px rgba(0, 217, 255, 0.2);
305
+ border-color: var(--primary-color);
306
+ }
307
+
308
+ .feature-icon {
309
+ font-size: 3rem;
310
+ color: var(--primary-color);
311
+ margin-bottom: 1rem;
312
+ }
313
+
314
+ .feature-card h3 {
315
+ font-size: 1.5rem;
316
+ margin-bottom: 1rem;
317
+ color: var(--text-primary);
318
+ }
319
+
320
+ .feature-card p {
321
+ color: var(--text-secondary);
322
+ line-height: 1.6;
323
+ }
324
+
325
+ /* Info Section */
326
+ .info-section {
327
+ padding: 4rem 0;
328
+ background: var(--dark-bg);
329
+ }
330
+
331
+ .info-content h2 {
332
+ font-size: 2rem;
333
+ margin-bottom: 1.5rem;
334
+ color: var(--text-primary);
335
+ }
336
+
337
+ .info-content p {
338
+ font-size: 1.1rem;
339
+ color: var(--text-secondary);
340
+ margin-bottom: 1.5rem;
341
+ line-height: 1.8;
342
+ }
343
+
344
+ .info-list {
345
+ list-style: none;
346
+ display: grid;
347
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
348
+ gap: 1rem;
349
+ margin-top: 2rem;
350
+ }
351
+
352
+ .info-list li {
353
+ display: flex;
354
+ align-items: center;
355
+ gap: 0.75rem;
356
+ font-size: 1rem;
357
+ color: var(--text-primary);
358
+ }
359
+
360
+ .info-list i {
361
+ color: var(--success-color);
362
+ font-size: 1.2rem;
363
+ }
364
+
365
+ /* Dashboard */
366
+ .dashboard {
367
+ width: 100%;
368
+ max-width: 100%;
369
+ margin: 0 auto;
370
+ padding: 2rem;
371
+ }
372
+
373
+ .dashboard-header {
374
+ display: flex;
375
+ justify-content: space-between;
376
+ align-items: center;
377
+ margin-bottom: 2rem;
378
+ padding: 1.5rem;
379
+ background: var(--card-bg);
380
+ border-radius: 12px;
381
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
382
+ border: 1px solid var(--border-color);
383
+ }
384
+
385
+ .ticker-info h1 {
386
+ font-size: 2.5rem;
387
+ font-weight: 700;
388
+ color: var(--text-primary);
389
+ margin-bottom: 0.5rem;
390
+ }
391
+
392
+ .price-info {
393
+ display: flex;
394
+ gap: 1rem;
395
+ align-items: center;
396
+ }
397
+
398
+ .current-price {
399
+ font-size: 2rem;
400
+ font-weight: 600;
401
+ }
402
+
403
+ .price-change {
404
+ font-size: 1.25rem;
405
+ font-weight: 600;
406
+ padding: 0.25rem 0.75rem;
407
+ border-radius: 6px;
408
+ }
409
+
410
+ .price-change.positive {
411
+ color: var(--positive-color);
412
+ background: rgba(38, 166, 154, 0.1);
413
+ }
414
+
415
+ .price-change.negative {
416
+ color: var(--negative-color);
417
+ background: rgba(239, 83, 80, 0.1);
418
+ }
419
+
420
+ .header-actions {
421
+ display: flex;
422
+ gap: 1rem;
423
+ }
424
+
425
+ /* Metrics Grid */
426
+ .metrics-grid {
427
+ display: grid;
428
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
429
+ gap: 1.5rem;
430
+ margin-bottom: 2rem;
431
+ }
432
+
433
+ .metric-card {
434
+ background: var(--card-bg);
435
+ padding: 1.5rem;
436
+ border-radius: 12px;
437
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
438
+ border-left: 4px solid var(--primary-color);
439
+ border: 1px solid var(--border-color);
440
+ border-left: 4px solid var(--primary-color);
441
+ }
442
+
443
+ .metric-label {
444
+ font-size: 0.875rem;
445
+ color: var(--text-secondary);
446
+ margin-bottom: 0.5rem;
447
+ text-transform: uppercase;
448
+ letter-spacing: 0.5px;
449
+ }
450
+
451
+ .metric-value {
452
+ font-size: 1.75rem;
453
+ font-weight: 700;
454
+ color: var(--text-primary);
455
+ }
456
+
457
+ .metric-value.signal-buy {
458
+ color: var(--success-color);
459
+ }
460
+
461
+ .metric-value.signal-sell {
462
+ color: var(--danger-color);
463
+ }
464
+
465
+ .metric-value.signal-neutral {
466
+ color: var(--warning-color);
467
+ }
468
+
469
+ .metric-signal {
470
+ font-size: 0.875rem;
471
+ margin-top: 0.5rem;
472
+ padding: 0.25rem 0.5rem;
473
+ border-radius: 4px;
474
+ display: inline-block;
475
+ }
476
+
477
+ .metric-signal.signal-buy {
478
+ background: rgba(76, 175, 80, 0.1);
479
+ color: var(--success-color);
480
+ }
481
+
482
+ .metric-signal.signal-sell {
483
+ background: rgba(244, 67, 54, 0.1);
484
+ color: var(--danger-color);
485
+ }
486
+
487
+ .metric-signal.signal-neutral {
488
+ background: rgba(255, 152, 0, 0.1);
489
+ color: var(--warning-color);
490
+ }
491
+
492
+ /* Charts */
493
+ .chart-container {
494
+ background: var(--card-bg);
495
+ padding: 1.5rem;
496
+ border-radius: 12px;
497
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
498
+ margin-bottom: 2rem;
499
+ border: 1px solid var(--border-color);
500
+ }
501
+
502
+ .chart-header {
503
+ display: flex;
504
+ justify-content: space-between;
505
+ align-items: center;
506
+ margin-bottom: 1rem;
507
+ }
508
+
509
+ .chart-header h2,
510
+ .chart-header h3 {
511
+ display: flex;
512
+ align-items: center;
513
+ gap: 0.5rem;
514
+ color: var(--text-primary);
515
+ }
516
+
517
+ .chart-header i {
518
+ color: var(--primary-color);
519
+ }
520
+
521
+ .chart-legend {
522
+ display: flex;
523
+ gap: 1rem;
524
+ align-items: center;
525
+ }
526
+
527
+ .legend-item {
528
+ display: flex;
529
+ align-items: center;
530
+ gap: 0.35rem;
531
+ font-size: 0.85rem;
532
+ color: var(--text-secondary);
533
+ }
534
+
535
+ .legend-color {
536
+ width: 12px;
537
+ height: 12px;
538
+ border-radius: 2px;
539
+ }
540
+
541
+ .chart-controls {
542
+ display: flex;
543
+ gap: 0.5rem;
544
+ align-items: center;
545
+ }
546
+
547
+ /* Indicator Selector Dropdown */
548
+ .indicator-selector {
549
+ display: flex;
550
+ align-items: center;
551
+ gap: 0.5rem;
552
+ margin-left: 1rem;
553
+ padding-left: 1rem;
554
+ border-left: 1px solid var(--border-color);
555
+ }
556
+
557
+ .indicator-selector label {
558
+ font-size: 0.875rem;
559
+ color: var(--text-secondary);
560
+ white-space: nowrap;
561
+ }
562
+
563
+ .indicator-dropdown {
564
+ position: relative;
565
+ }
566
+
567
+ .dropdown-toggle {
568
+ display: flex;
569
+ align-items: center;
570
+ gap: 0.5rem;
571
+ min-width: 120px;
572
+ justify-content: space-between;
573
+ }
574
+
575
+ .dropdown-toggle i {
576
+ font-size: 0.75rem;
577
+ transition: transform 0.2s ease;
578
+ }
579
+
580
+ .dropdown-menu {
581
+ display: none;
582
+ position: absolute;
583
+ top: 100%;
584
+ right: 0;
585
+ background: var(--card-bg-lighter);
586
+ border: 1px solid var(--border-color);
587
+ border-radius: 8px;
588
+ min-width: 180px;
589
+ z-index: 100;
590
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
591
+ margin-top: 0.25rem;
592
+ }
593
+
594
+ .dropdown-menu.show {
595
+ display: block;
596
+ }
597
+
598
+ .dropdown-item {
599
+ display: flex;
600
+ align-items: center;
601
+ gap: 0.75rem;
602
+ padding: 0.75rem 1rem;
603
+ cursor: pointer;
604
+ font-size: 0.875rem;
605
+ color: var(--text-primary);
606
+ transition: background 0.2s ease;
607
+ white-space: nowrap;
608
+ }
609
+
610
+ .dropdown-item:first-child {
611
+ border-radius: 8px 8px 0 0;
612
+ }
613
+
614
+ .dropdown-item:last-child {
615
+ border-radius: 0 0 8px 8px;
616
+ }
617
+
618
+ .dropdown-item:hover {
619
+ background: var(--card-bg);
620
+ }
621
+
622
+ .dropdown-item input[type="checkbox"] {
623
+ width: 16px;
624
+ height: 16px;
625
+ accent-color: var(--primary-color);
626
+ cursor: pointer;
627
+ }
628
+
629
+ .dropdown-menu-scrollable {
630
+ max-height: 400px;
631
+ overflow-y: auto;
632
+ }
633
+
634
+ .dropdown-section {
635
+ border-bottom: 1px solid var(--border-color);
636
+ padding-bottom: 0.25rem;
637
+ }
638
+
639
+ .dropdown-section:last-child {
640
+ border-bottom: none;
641
+ padding-bottom: 0;
642
+ }
643
+
644
+ .dropdown-section-title {
645
+ font-size: 0.7rem;
646
+ font-weight: 600;
647
+ text-transform: uppercase;
648
+ letter-spacing: 0.05em;
649
+ color: var(--text-muted);
650
+ padding: 0.5rem 1rem 0.25rem;
651
+ background: var(--card-bg);
652
+ }
653
+
654
+ .dropdown-section .dropdown-item:first-child {
655
+ border-radius: 0;
656
+ }
657
+
658
+ /* Alerts Section */
659
+ .alerts-row {
660
+ display: grid;
661
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
662
+ gap: 1.5rem;
663
+ margin-bottom: 2rem;
664
+ }
665
+
666
+ .alerts-container {
667
+ max-height: 400px;
668
+ overflow-y: auto;
669
+ padding: 0.5rem;
670
+ }
671
+
672
+ .alert-item {
673
+ display: flex;
674
+ align-items: center;
675
+ justify-content: space-between;
676
+ padding: 0.75rem 1rem;
677
+ margin-bottom: 0.5rem;
678
+ background: var(--card-bg);
679
+ border-radius: 8px;
680
+ border-left: 4px solid var(--border-color);
681
+ }
682
+
683
+ .alert-item.bullish {
684
+ border-left-color: var(--positive-color);
685
+ }
686
+
687
+ .alert-item.bearish {
688
+ border-left-color: var(--negative-color);
689
+ }
690
+
691
+ .alert-item.neutral {
692
+ border-left-color: var(--primary-color);
693
+ }
694
+
695
+ .alert-item.momentum {
696
+ border-left-color: var(--warning-color);
697
+ }
698
+
699
+ .alert-info {
700
+ display: flex;
701
+ flex-direction: column;
702
+ gap: 0.25rem;
703
+ }
704
+
705
+ .alert-pattern {
706
+ font-weight: 600;
707
+ color: var(--text-primary);
708
+ }
709
+
710
+ .alert-date {
711
+ font-size: 0.8rem;
712
+ color: var(--text-muted);
713
+ }
714
+
715
+ .alert-signal {
716
+ padding: 0.25rem 0.75rem;
717
+ border-radius: 20px;
718
+ font-size: 0.75rem;
719
+ font-weight: 600;
720
+ text-transform: uppercase;
721
+ }
722
+
723
+ .alert-signal.bullish {
724
+ background: rgba(76, 175, 80, 0.2);
725
+ color: var(--positive-color);
726
+ }
727
+
728
+ .alert-signal.bearish {
729
+ background: rgba(244, 67, 54, 0.2);
730
+ color: var(--negative-color);
731
+ }
732
+
733
+ .alert-signal.neutral {
734
+ background: rgba(33, 150, 243, 0.2);
735
+ color: var(--primary-color);
736
+ }
737
+
738
+ .alert-signal.momentum {
739
+ background: rgba(255, 152, 0, 0.2);
740
+ color: var(--warning-color);
741
+ }
742
+
743
+ .alert-signal.buy {
744
+ background: rgba(76, 175, 80, 0.2);
745
+ color: var(--positive-color);
746
+ }
747
+
748
+ .alert-signal.sell {
749
+ background: rgba(244, 67, 54, 0.2);
750
+ color: var(--negative-color);
751
+ }
752
+
753
+ .alert-signal.hold {
754
+ background: rgba(156, 39, 176, 0.2);
755
+ color: #ba68c8;
756
+ }
757
+
758
+ .no-alerts {
759
+ text-align: center;
760
+ padding: 2rem;
761
+ color: var(--text-muted);
762
+ }
763
+
764
+ .chart {
765
+ width: 100%;
766
+ height: 500px;
767
+ }
768
+
769
+ .chart-small {
770
+ width: 100%;
771
+ height: 350px;
772
+ }
773
+
774
+ .indicators-grid {
775
+ display: flex;
776
+ flex-direction: column;
777
+ gap: 1.5rem;
778
+ margin-bottom: 2rem;
779
+ }
780
+
781
+ /* Strategy Results */
782
+ .strategy-results {
783
+ padding: 1rem 0;
784
+ }
785
+
786
+ .results-table {
787
+ width: 100%;
788
+ border-collapse: collapse;
789
+ margin-top: 1rem;
790
+ }
791
+
792
+ .results-table thead {
793
+ background: var(--card-bg-lighter);
794
+ }
795
+
796
+ .results-table th,
797
+ .results-table td {
798
+ padding: 1rem;
799
+ text-align: left;
800
+ border-bottom: 1px solid var(--border-color);
801
+ color: var(--text-primary);
802
+ }
803
+
804
+ .results-table th {
805
+ font-weight: 600;
806
+ color: var(--text-secondary);
807
+ text-transform: uppercase;
808
+ font-size: 0.875rem;
809
+ letter-spacing: 0.5px;
810
+ }
811
+
812
+ .results-table td {
813
+ font-weight: 500;
814
+ }
815
+
816
+ .results-table tr:hover {
817
+ background: var(--card-bg-lighter);
818
+ }
819
+
820
+ .results-table .positive {
821
+ color: var(--positive-color);
822
+ font-weight: 600;
823
+ }
824
+
825
+ .results-table .negative {
826
+ color: var(--negative-color);
827
+ font-weight: 600;
828
+ }
829
+
830
+ .hint {
831
+ color: var(--text-secondary);
832
+ font-style: italic;
833
+ padding: 2rem;
834
+ text-align: center;
835
+ }
836
+
837
+ .loading {
838
+ text-align: center;
839
+ padding: 2rem;
840
+ color: var(--primary-color);
841
+ font-size: 1.1rem;
842
+ }
843
+
844
+ .error {
845
+ text-align: center;
846
+ padding: 2rem;
847
+ color: var(--danger-color);
848
+ }
849
+
850
+ /* Modal */
851
+ .modal {
852
+ display: none;
853
+ position: fixed;
854
+ z-index: 2000;
855
+ left: 0;
856
+ top: 0;
857
+ width: 100%;
858
+ height: 100%;
859
+ background-color: rgba(0, 0, 0, 0.5);
860
+ backdrop-filter: blur(5px);
861
+ }
862
+
863
+ .modal-content {
864
+ background-color: var(--card-bg);
865
+ margin: 15% auto;
866
+ padding: 2rem;
867
+ border-radius: 12px;
868
+ width: 90%;
869
+ max-width: 500px;
870
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
871
+ border: 1px solid var(--border-color);
872
+ }
873
+
874
+ .modal-content h2 {
875
+ margin-bottom: 1.5rem;
876
+ color: var(--text-primary);
877
+ }
878
+
879
+ .modal-content input {
880
+ width: 100%;
881
+ padding: 1rem;
882
+ border: 2px solid var(--border-color);
883
+ border-radius: 8px;
884
+ font-size: 1.1rem;
885
+ margin-bottom: 1rem;
886
+ outline: none;
887
+ background: var(--card-bg-lighter);
888
+ color: var(--text-primary);
889
+ }
890
+
891
+ .modal-content input:focus {
892
+ border-color: var(--primary-color);
893
+ background: var(--card-bg);
894
+ }
895
+
896
+ .close {
897
+ color: var(--text-secondary);
898
+ float: right;
899
+ font-size: 2rem;
900
+ font-weight: bold;
901
+ cursor: pointer;
902
+ transition: color 0.3s ease;
903
+ }
904
+
905
+ .close:hover {
906
+ color: var(--text-primary);
907
+ }
908
+
909
+ /* Footer */
910
+ .footer {
911
+ background: var(--dark-bg);
912
+ color: white;
913
+ padding: 2rem 0;
914
+ margin-top: 4rem;
915
+ }
916
+
917
+ .footer-content {
918
+ max-width: 1200px;
919
+ margin: 0 auto;
920
+ padding: 0 2rem;
921
+ text-align: center;
922
+ }
923
+
924
+ .footer-content p {
925
+ margin-bottom: 0.5rem;
926
+ opacity: 0.8;
927
+ }
928
+
929
+ .disclaimer {
930
+ color: var(--warning-color);
931
+ font-weight: 600;
932
+ }
933
+
934
+ /* Responsive */
935
+ @media (max-width: 768px) {
936
+ .hero-content h1 {
937
+ font-size: 2rem;
938
+ }
939
+
940
+ .search-form {
941
+ flex-direction: column;
942
+ }
943
+
944
+ .dashboard-header {
945
+ flex-direction: column;
946
+ align-items: flex-start;
947
+ gap: 1rem;
948
+ }
949
+
950
+ .metrics-grid {
951
+ grid-template-columns: 1fr;
952
+ }
953
+
954
+ .indicators-grid {
955
+ grid-template-columns: 1fr;
956
+ }
957
+
958
+ .nav-menu {
959
+ gap: 1rem;
960
+ font-size: 0.875rem;
961
+ }
962
+ }