Vaibhavi53 commited on
Commit
349ceec
Β·
verified Β·
1 Parent(s): c665f1d

Upload style.css

Browse files
Files changed (1) hide show
  1. src/assets/style.css +299 -99
src/assets/style.css CHANGED
@@ -110,14 +110,15 @@
110
 
111
  /* ── Stat Cards ── */
112
  .stat-card {
113
- background: var(--bg-card);
114
- border: 1px solid var(--border-subtle);
115
  border-radius: var(--radius-lg);
116
  padding: 1.5rem;
117
  text-align: center;
118
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
119
  position: relative;
120
  overflow: hidden;
 
121
  }
122
 
123
  .stat-card:hover {
@@ -161,8 +162,8 @@
161
 
162
  /* ── Prediction Result Cards ── */
163
  .pred-card {
164
- background: var(--bg-card);
165
- border: 1px solid var(--border-subtle);
166
  border-radius: var(--radius-md);
167
  padding: 1.2rem 1.5rem;
168
  margin-bottom: 0.75rem;
@@ -170,6 +171,7 @@
170
  display: flex;
171
  align-items: center;
172
  gap: 1.2rem;
 
173
  }
174
 
175
  .pred-card:hover {
@@ -214,9 +216,17 @@
214
  margin-top: 2px;
215
  }
216
 
217
- .confidence-high { color: #06d6a0; }
218
- .confidence-med { color: #f59e0b; }
219
- .confidence-low { color: #f43f5e; }
 
 
 
 
 
 
 
 
220
 
221
  /* ── Confidence Bar ── */
222
  .conf-bar-bg {
@@ -233,9 +243,17 @@
233
  transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
234
  }
235
 
236
- .conf-bar-fill-high { background: linear-gradient(90deg, #06d6a0, #34d399); }
237
- .conf-bar-fill-med { background: linear-gradient(90deg, #f59e0b, #fbbf24); }
238
- .conf-bar-fill-low { background: linear-gradient(90deg, #f43f5e, #fb7185); }
 
 
 
 
 
 
 
 
239
 
240
  /* ── Section Headers ── */
241
  .section-header {
@@ -257,13 +275,14 @@
257
 
258
  /* ── Pipeline Diagram ── */
259
  .pipeline-step {
260
- background: var(--bg-card);
261
- border: 1px solid var(--border-subtle);
262
  border-radius: var(--radius-md);
263
  padding: 1.2rem 1.5rem;
264
  margin-bottom: 0.5rem;
265
  position: relative;
266
  transition: all 0.3s ease;
 
267
  }
268
 
269
  .pipeline-step:hover {
@@ -280,11 +299,12 @@
280
 
281
  /* ── Model Cards ── */
282
  .model-card {
283
- background: linear-gradient(135deg, var(--bg-card) 0%, var(--bg-elevated) 100%);
284
- border: 1px solid var(--border-subtle);
285
  border-radius: var(--radius-lg);
286
  padding: 1.8rem;
287
  transition: all 0.3s ease;
 
288
  }
289
 
290
  .model-card:hover {
@@ -346,17 +366,18 @@
346
 
347
  /* ── Sample Note Cards ── */
348
  .sample-card {
349
- background: var(--bg-card);
350
- border: 1px solid var(--border-subtle);
351
  border-radius: var(--radius-md);
352
  padding: 1rem 1.2rem;
353
  cursor: pointer;
354
  transition: all 0.25s ease;
 
355
  }
356
 
357
  .sample-card:hover {
358
- background: var(--bg-card-hover);
359
- border-color: var(--accent-teal);
360
  transform: translateY(-2px);
361
  }
362
 
@@ -401,21 +422,29 @@
401
  box-shadow: 0 0 0 2px var(--accent-teal-dim) !important;
402
  }
403
 
404
- .stSelectbox > div > div {
405
  background: var(--bg-card) !important;
406
  border-color: var(--border-medium) !important;
407
  border-radius: var(--radius-md) !important;
408
  }
409
 
410
- .stSlider > div > div > div {
411
  background: var(--accent-teal) !important;
412
  }
413
 
414
  /* ── Animated gradient border for active predictions ── */
415
  @keyframes borderGlow {
416
- 0% { border-color: rgba(6, 214, 160, 0.3); }
417
- 50% { border-color: rgba(76, 201, 240, 0.5); }
418
- 100% { border-color: rgba(6, 214, 160, 0.3); }
 
 
 
 
 
 
 
 
419
  }
420
 
421
  .result-active {
@@ -424,8 +453,15 @@
424
 
425
  /* ── Pulse animation for loading ── */
426
  @keyframes pulse {
427
- 0%, 100% { opacity: 1; }
428
- 50% { opacity: 0.5; }
 
 
 
 
 
 
 
429
  }
430
 
431
  .loading-pulse {
@@ -486,7 +522,7 @@
486
  }
487
 
488
  /* ── Batch Progress ── */
489
- .stProgress > div > div > div > div {
490
  background: linear-gradient(90deg, var(--accent-teal), var(--accent-blue)) !important;
491
  }
492
 
@@ -500,7 +536,7 @@
500
  }
501
 
502
  /* ── Download Button ── */
503
- .stDownloadButton > button {
504
  background: linear-gradient(135deg, var(--accent-teal), var(--accent-blue)) !important;
505
  color: #0a0e1a !important;
506
  font-weight: 600 !important;
@@ -509,7 +545,7 @@
509
  transition: all 0.3s ease !important;
510
  }
511
 
512
- .stDownloadButton > button:hover {
513
  transform: translateY(-2px) !important;
514
  box-shadow: 0 6px 20px rgba(6, 214, 160, 0.25) !important;
515
  }
@@ -527,109 +563,273 @@
527
  }
528
 
529
  /* ═══════════════════════════════════════════════════════
530
- LIGHT MODE OVERRIDES
531
- When user switches to light theme via Streamlit settings,
532
- ensure all text is dark and backgrounds are light.
533
  ═══════════════════════════════════════════════════════ */
534
 
535
- @media (prefers-color-scheme: light) {
536
- :root {
537
- --bg-primary: #f8fafc;
538
- --bg-secondary: #f1f5f9;
539
- --bg-card: #ffffff;
540
- --bg-card-hover: #f1f5f9;
541
- --bg-elevated: #e2e8f0;
542
- --text-primary: #0f172a;
543
- --text-secondary: #475569;
544
- --text-muted: #64748b;
545
- --border-subtle: rgba(15, 23, 42, 0.08);
546
- --border-medium: rgba(15, 23, 42, 0.15);
547
- --shadow-lg: 0 10px 40px rgba(0, 0, 0, 0.08);
548
- --shadow-glow: 0 0 30px rgba(6, 214, 160, 0.12);
549
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
550
  }
551
 
552
- /* Streamlit's data-theme attribute for explicit light mode */
553
- [data-theme="light"] .stApp,
554
- .stApp[data-theme="light"] {
555
- background: #f8fafc !important;
556
  }
557
 
558
- [data-theme="light"] .hero-container {
559
- background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 50%, #f0f4ff 100%) !important;
560
- border-color: rgba(15, 23, 42, 0.1) !important;
 
 
 
561
  }
562
 
563
- [data-theme="light"] .hero-title {
564
- background: linear-gradient(135deg, #059669 0%, #0284c7 50%, #6d28d9 100%);
565
- -webkit-background-clip: text;
566
- -webkit-text-fill-color: transparent;
567
- background-clip: text;
 
 
568
  }
569
 
570
- [data-theme="light"] .hero-subtitle {
571
- color: #475569 !important;
 
572
  }
573
 
574
- [data-theme="light"] .stat-card,
575
- [data-theme="light"] .pipeline-step,
576
- [data-theme="light"] .pred-card,
577
- [data-theme="light"] .model-card {
578
- background: #ffffff !important;
579
- border-color: rgba(15, 23, 42, 0.1) !important;
580
- color: #0f172a !important;
581
  }
582
 
583
- [data-theme="light"] .stat-card:hover,
584
- [data-theme="light"] .model-card:hover {
585
- background: #f8fafc !important;
586
- box-shadow: 0 4px 16px rgba(6, 214, 160, 0.12) !important;
587
  }
588
 
589
- [data-theme="light"] .stat-label,
590
- [data-theme="light"] .model-card-label {
591
- color: #64748b !important;
592
  }
593
 
594
- [data-theme="light"] .section-header {
595
- color: #0f172a !important;
 
 
 
 
596
  }
597
 
598
- [data-theme="light"] .pred-desc-en,
599
- [data-theme="light"] .model-card-title {
600
- color: #0f172a !important;
 
 
601
  }
602
 
603
- [data-theme="light"] .pred-desc-zh {
604
- color: #475569 !important;
 
605
  }
606
 
607
- [data-theme="light"] .footer {
608
- color: #64748b !important;
609
- border-top-color: rgba(15, 23, 42, 0.1) !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
610
  }
611
 
612
- [data-theme="light"] [data-testid="stSidebar"] {
613
- background: linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%) !important;
614
- border-right: 1px solid rgba(15, 23, 42, 0.08) !important;
615
  }
616
 
617
- [data-theme="light"] [data-testid="stSidebar"] .stMarkdown h1,
618
- [data-theme="light"] [data-testid="stSidebar"] .stMarkdown h2,
619
- [data-theme="light"] [data-testid="stSidebar"] .stMarkdown h3 {
620
- color: #059669 !important;
621
  }
622
 
623
- [data-theme="light"] .stTextArea textarea {
624
- background: #ffffff !important;
625
- border-color: rgba(15, 23, 42, 0.15) !important;
626
- color: #0f172a !important;
 
 
627
  }
628
 
629
- [data-theme="light"] .pipeline-arrow {
630
- color: #059669 !important;
 
631
  }
632
 
633
- [data-theme="light"] .conf-bar-bg {
634
- background: rgba(0, 0, 0, 0.06) !important;
 
635
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
 
111
  /* ── Stat Cards ── */
112
  .stat-card {
113
+ background: #1a2235 !important;
114
+ border: 1px solid rgba(148, 163, 184, 0.08) !important;
115
  border-radius: var(--radius-lg);
116
  padding: 1.5rem;
117
  text-align: center;
118
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
119
  position: relative;
120
  overflow: hidden;
121
+ color: #e8ecf4 !important;
122
  }
123
 
124
  .stat-card:hover {
 
162
 
163
  /* ── Prediction Result Cards ── */
164
  .pred-card {
165
+ background: #1a2235 !important;
166
+ border: 1px solid rgba(148, 163, 184, 0.08) !important;
167
  border-radius: var(--radius-md);
168
  padding: 1.2rem 1.5rem;
169
  margin-bottom: 0.75rem;
 
171
  display: flex;
172
  align-items: center;
173
  gap: 1.2rem;
174
+ color: #e8ecf4 !important;
175
  }
176
 
177
  .pred-card:hover {
 
216
  margin-top: 2px;
217
  }
218
 
219
+ .confidence-high {
220
+ color: #06d6a0;
221
+ }
222
+
223
+ .confidence-med {
224
+ color: #f59e0b;
225
+ }
226
+
227
+ .confidence-low {
228
+ color: #f43f5e;
229
+ }
230
 
231
  /* ── Confidence Bar ── */
232
  .conf-bar-bg {
 
243
  transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
244
  }
245
 
246
+ .conf-bar-fill-high {
247
+ background: linear-gradient(90deg, #06d6a0, #34d399);
248
+ }
249
+
250
+ .conf-bar-fill-med {
251
+ background: linear-gradient(90deg, #f59e0b, #fbbf24);
252
+ }
253
+
254
+ .conf-bar-fill-low {
255
+ background: linear-gradient(90deg, #f43f5e, #fb7185);
256
+ }
257
 
258
  /* ── Section Headers ── */
259
  .section-header {
 
275
 
276
  /* ── Pipeline Diagram ── */
277
  .pipeline-step {
278
+ background: #1a2235 !important;
279
+ border: 1px solid rgba(148, 163, 184, 0.08) !important;
280
  border-radius: var(--radius-md);
281
  padding: 1.2rem 1.5rem;
282
  margin-bottom: 0.5rem;
283
  position: relative;
284
  transition: all 0.3s ease;
285
+ color: #e8ecf4 !important;
286
  }
287
 
288
  .pipeline-step:hover {
 
299
 
300
  /* ── Model Cards ── */
301
  .model-card {
302
+ background: linear-gradient(135deg, #1a2235 0%, #243049 100%) !important;
303
+ border: 1px solid rgba(148, 163, 184, 0.08) !important;
304
  border-radius: var(--radius-lg);
305
  padding: 1.8rem;
306
  transition: all 0.3s ease;
307
+ color: #e8ecf4 !important;
308
  }
309
 
310
  .model-card:hover {
 
366
 
367
  /* ── Sample Note Cards ── */
368
  .sample-card {
369
+ background: #1a2235 !important;
370
+ border: 1px solid rgba(148, 163, 184, 0.08) !important;
371
  border-radius: var(--radius-md);
372
  padding: 1rem 1.2rem;
373
  cursor: pointer;
374
  transition: all 0.25s ease;
375
+ color: #e8ecf4 !important;
376
  }
377
 
378
  .sample-card:hover {
379
+ background: #1f2a42 !important;
380
+ border-color: #06d6a0 !important;
381
  transform: translateY(-2px);
382
  }
383
 
 
422
  box-shadow: 0 0 0 2px var(--accent-teal-dim) !important;
423
  }
424
 
425
+ .stSelectbox>div>div {
426
  background: var(--bg-card) !important;
427
  border-color: var(--border-medium) !important;
428
  border-radius: var(--radius-md) !important;
429
  }
430
 
431
+ .stSlider>div>div>div {
432
  background: var(--accent-teal) !important;
433
  }
434
 
435
  /* ── Animated gradient border for active predictions ── */
436
  @keyframes borderGlow {
437
+ 0% {
438
+ border-color: rgba(6, 214, 160, 0.3);
439
+ }
440
+
441
+ 50% {
442
+ border-color: rgba(76, 201, 240, 0.5);
443
+ }
444
+
445
+ 100% {
446
+ border-color: rgba(6, 214, 160, 0.3);
447
+ }
448
  }
449
 
450
  .result-active {
 
453
 
454
  /* ── Pulse animation for loading ── */
455
  @keyframes pulse {
456
+
457
+ 0%,
458
+ 100% {
459
+ opacity: 1;
460
+ }
461
+
462
+ 50% {
463
+ opacity: 0.5;
464
+ }
465
  }
466
 
467
  .loading-pulse {
 
522
  }
523
 
524
  /* ── Batch Progress ── */
525
+ .stProgress>div>div>div>div {
526
  background: linear-gradient(90deg, var(--accent-teal), var(--accent-blue)) !important;
527
  }
528
 
 
536
  }
537
 
538
  /* ── Download Button ── */
539
+ .stDownloadButton>button {
540
  background: linear-gradient(135deg, var(--accent-teal), var(--accent-blue)) !important;
541
  color: #0a0e1a !important;
542
  font-weight: 600 !important;
 
545
  transition: all 0.3s ease !important;
546
  }
547
 
548
+ .stDownloadButton>button:hover {
549
  transform: translateY(-2px) !important;
550
  box-shadow: 0 6px 20px rgba(6, 214, 160, 0.25) !important;
551
  }
 
563
  }
564
 
565
  /* ═══════════════════════════════════════════════════════
566
+ FORCE DARK MODE ON ALL STREAMLIT ELEMENTS
567
+ Overrides system light theme so the app is ALWAYS dark.
 
568
  ═══════════════════════════════════════════════════════ */
569
 
570
+ /* ── Force dark on root & main container ── */
571
+ html,
572
+ body,
573
+ [data-testid="stAppViewContainer"],
574
+ [data-testid="stApp"],
575
+ .stApp,
576
+ [data-testid="stAppViewBlockContainer"],
577
+ .main,
578
+ .main .block-container,
579
+ [data-testid="stHeader"],
580
+ [data-testid="stToolbar"] {
581
+ background-color: #0a0e1a !important;
582
+ color: #e8ecf4 !important;
583
+ }
584
+
585
+ /* ── Force sidebar dark ── */
586
+ [data-testid="stSidebar"],
587
+ [data-testid="stSidebar"]>div,
588
+ [data-testid="stSidebarContent"],
589
+ section[data-testid="stSidebar"] {
590
+ background: linear-gradient(180deg, #0d1321 0%, #111827 100%) !important;
591
+ color: #e8ecf4 !important;
592
+ }
593
+
594
+ /* ── All text elements ── */
595
+ .stApp p,
596
+ .stApp span,
597
+ .stApp label,
598
+ .stApp div,
599
+ .stApp li,
600
+ .stApp td,
601
+ .stApp th,
602
+ [data-testid="stMarkdownContainer"],
603
+ [data-testid="stMarkdownContainer"] p,
604
+ [data-testid="stMarkdownContainer"] span,
605
+ [data-testid="stMarkdownContainer"] li {
606
+ color: #e8ecf4 !important;
607
+ }
608
+
609
+ /* ── Headings ── */
610
+ .stApp h1,
611
+ .stApp h2,
612
+ .stApp h3,
613
+ .stApp h4,
614
+ .stApp h5,
615
+ .stApp h6 {
616
+ color: #e8ecf4 !important;
617
+ }
618
+
619
+ /* ── Text inputs & text areas ── */
620
+ .stTextInput input,
621
+ .stTextInput>div>div>input,
622
+ [data-testid="stTextInput"] input {
623
+ background: #1a2235 !important;
624
+ color: #e8ecf4 !important;
625
+ border-color: rgba(148, 163, 184, 0.15) !important;
626
+ }
627
+
628
+ .stTextArea textarea,
629
+ [data-testid="stTextArea"] textarea {
630
+ background: #1a2235 !important;
631
+ color: #e8ecf4 !important;
632
+ border-color: rgba(148, 163, 184, 0.15) !important;
633
+ font-family: 'JetBrains Mono', monospace !important;
634
  }
635
 
636
+ .stTextInput input:focus,
637
+ .stTextArea textarea:focus {
638
+ border-color: #06d6a0 !important;
639
+ box-shadow: 0 0 0 2px rgba(6, 214, 160, 0.15) !important;
640
  }
641
 
642
+ /* ── Number inputs ── */
643
+ .stNumberInput input,
644
+ [data-testid="stNumberInput"] input {
645
+ background: #1a2235 !important;
646
+ color: #e8ecf4 !important;
647
+ border-color: rgba(148, 163, 184, 0.15) !important;
648
  }
649
 
650
+ /* ── Select boxes / dropdowns ── */
651
+ .stSelectbox>div>div,
652
+ [data-testid="stSelectbox"]>div>div,
653
+ .stMultiSelect>div>div {
654
+ background: #1a2235 !important;
655
+ color: #e8ecf4 !important;
656
+ border-color: rgba(148, 163, 184, 0.15) !important;
657
  }
658
 
659
+ [data-testid="stSelectbox"] span,
660
+ .stSelectbox span {
661
+ color: #e8ecf4 !important;
662
  }
663
 
664
+ /* ── Radio buttons & checkboxes ── */
665
+ .stRadio label,
666
+ .stCheckbox label,
667
+ [data-testid="stRadio"] label,
668
+ [data-testid="stCheckbox"] label {
669
+ color: #e8ecf4 !important;
 
670
  }
671
 
672
+ /* ── Sliders ── */
673
+ .stSlider label,
674
+ [data-testid="stSlider"] label {
675
+ color: #e8ecf4 !important;
676
  }
677
 
678
+ .stSlider>div>div>div>div {
679
+ background: #06d6a0 !important;
 
680
  }
681
 
682
+ /* ── File uploader ── */
683
+ [data-testid="stFileUploader"],
684
+ [data-testid="stFileUploader"]>div {
685
+ background: #1a2235 !important;
686
+ border-color: rgba(148, 163, 184, 0.15) !important;
687
+ color: #e8ecf4 !important;
688
  }
689
 
690
+ [data-testid="stFileUploader"] label,
691
+ [data-testid="stFileUploader"] span,
692
+ [data-testid="stFileUploader"] p,
693
+ [data-testid="stFileUploader"] small {
694
+ color: #e8ecf4 !important;
695
  }
696
 
697
+ [data-testid="stFileUploaderDropzone"] {
698
+ background: #1a2235 !important;
699
+ border-color: rgba(148, 163, 184, 0.2) !important;
700
  }
701
 
702
+ /* ── Buttons ── */
703
+ .stButton>button {
704
+ color: #e8ecf4 !important;
705
+ border-color: rgba(148, 163, 184, 0.15) !important;
706
+ }
707
+
708
+ .stButton>button[kind="primary"],
709
+ .stButton>button[data-testid="stBaseButton-primary"] {
710
+ background: linear-gradient(135deg, #06d6a0, #4cc9f0) !important;
711
+ color: #0a0e1a !important;
712
+ border: none !important;
713
+ }
714
+
715
+ /* ── Download button ── */
716
+ .stDownloadButton>button {
717
+ background: linear-gradient(135deg, #06d6a0, #4cc9f0) !important;
718
+ color: #0a0e1a !important;
719
+ font-weight: 600 !important;
720
+ border: none !important;
721
+ border-radius: 12px !important;
722
+ }
723
+
724
+ .stDownloadButton>button:hover {
725
+ transform: translateY(-2px) !important;
726
+ box-shadow: 0 6px 20px rgba(6, 214, 160, 0.25) !important;
727
+ }
728
+
729
+ /* ── Expander ── */
730
+ [data-testid="stExpander"],
731
+ [data-testid="stExpander"]>div {
732
+ background: #1a2235 !important;
733
+ border-color: rgba(148, 163, 184, 0.1) !important;
734
+ color: #e8ecf4 !important;
735
+ }
736
+
737
+ [data-testid="stExpander"] summary,
738
+ [data-testid="stExpander"] summary span,
739
+ [data-testid="stExpander"] p {
740
+ color: #e8ecf4 !important;
741
+ }
742
+
743
+ /* ── Data frame / tables ── */
744
+ [data-testid="stDataFrame"],
745
+ [data-testid="stDataFrame"]>div,
746
+ .stDataFrame {
747
+ background: #1a2235 !important;
748
+ border-radius: 12px !important;
749
+ overflow: hidden;
750
+ }
751
+
752
+ [data-testid="stTable"],
753
+ [data-testid="stTable"] table {
754
+ background: #1a2235 !important;
755
+ color: #e8ecf4 !important;
756
  }
757
 
758
+ [data-testid="stTable"] th {
759
+ background: #243049 !important;
760
+ color: #e8ecf4 !important;
761
  }
762
 
763
+ [data-testid="stTable"] td {
764
+ background: #1a2235 !important;
765
+ color: #e8ecf4 !important;
 
766
  }
767
 
768
+ /* ── Alerts / info / warning / error ── */
769
+ [data-testid="stAlert"],
770
+ .stAlert {
771
+ background: #1a2235 !important;
772
+ border-color: rgba(148, 163, 184, 0.15) !important;
773
+ color: #e8ecf4 !important;
774
  }
775
 
776
+ .stAlert p,
777
+ .stAlert span {
778
+ color: #e8ecf4 !important;
779
  }
780
 
781
+ /* ── Spinner ── */
782
+ [data-testid="stSpinner"] {
783
+ color: #e8ecf4 !important;
784
  }
785
+
786
+ /* ── Progress bar ── */
787
+ .stProgress>div>div>div>div {
788
+ background: linear-gradient(90deg, #06d6a0, #4cc9f0) !important;
789
+ }
790
+
791
+ /* ── Tabs ── */
792
+ .stTabs [data-baseweb="tab-list"] {
793
+ background: transparent !important;
794
+ }
795
+
796
+ .stTabs [data-baseweb="tab"] {
797
+ color: #94a3b8 !important;
798
+ }
799
+
800
+ .stTabs [aria-selected="true"] {
801
+ color: #06d6a0 !important;
802
+ }
803
+
804
+ /* ── Metric ── */
805
+ [data-testid="stMetric"],
806
+ [data-testid="stMetricValue"],
807
+ [data-testid="stMetricLabel"] {
808
+ color: #e8ecf4 !important;
809
+ }
810
+
811
+ /* ── Tooltip / popover ── */
812
+ [data-testid="stTooltipIcon"] {
813
+ color: #94a3b8 !important;
814
+ }
815
+
816
+ /* ── Bottom page padding (removes white strip) ── */
817
+ .block-container {
818
+ padding-bottom: 3rem !important;
819
+ }
820
+
821
+ footer,
822
+ .reportview-container .main footer {
823
+ background: #0a0e1a !important;
824
+ color: #64748b !important;
825
+ }
826
+
827
+ /* Hide Streamlit's default footer */
828
+ footer {
829
+ visibility: hidden;
830
+ }
831
+
832
+ /* ── Plotly chart backgrounds ── */
833
+ .js-plotly-plot .plotly .main-svg {
834
+ background: transparent !important;
835
+ }