yipengsun Claude Opus 4.5 commited on
Commit
03b3974
·
1 Parent(s): 1e1793e

Fix HF Space compatibility issues

Browse files

- Lock critical dependency versions (transformers, accelerate, etc.)
- Disable SSR mode for consistent CSS loading
- Add !important to Hero Banner styles
- Restore .dark class selector for dark mode with media query fallback

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Files changed (3) hide show
  1. app.py +1 -0
  2. requirements.txt +5 -5
  3. ui/css.py +190 -126
app.py CHANGED
@@ -34,6 +34,7 @@ def main():
34
  server_port=7860,
35
  css=CUSTOM_CSS,
36
  theme=gr.themes.Soft(),
 
37
  )
38
 
39
 
 
34
  server_port=7860,
35
  css=CUSTOM_CSS,
36
  theme=gr.themes.Soft(),
37
+ ssr_mode=False, # Disable SSR for consistent CSS loading
38
  )
39
 
40
 
requirements.txt CHANGED
@@ -1,9 +1,9 @@
1
  torch>=2.1.0
2
- transformers>=4.50.0
3
- accelerate>=0.26.0
4
- bitsandbytes>=0.42.0
5
- huggingface_hub>=0.20.0
6
- langgraph>=0.2.0
7
  gradio==6.4.0
8
  Pillow>=10.0.0
9
  numpy>=1.24.0
 
1
  torch>=2.1.0
2
+ transformers==5.0.0
3
+ accelerate==1.12.0
4
+ bitsandbytes==0.49.1
5
+ huggingface_hub==1.3.4
6
+ langgraph==1.0.7
7
  gradio==6.4.0
8
  Pillow>=10.0.0
9
  numpy>=1.24.0
ui/css.py CHANGED
@@ -13,76 +13,76 @@ CUSTOM_CSS = """
13
 
14
  /* ===== Hero Banner ===== */
15
  .hero-banner {
16
- text-align: center;
17
- padding: 36px 28px 24px;
18
- border-radius: 16px;
19
- background: linear-gradient(135deg, #0f172a 0%, #1e293b 40%, #0f3460 100%);
20
- color: #fff;
21
- margin-bottom: 22px;
22
- box-shadow: 0 4px 28px rgba(0, 0, 0, 0.2);
23
- position: relative;
24
- overflow: hidden;
25
  }
26
  .hero-banner::after {
27
- content: '';
28
- position: absolute;
29
- top: -50%;
30
- right: -20%;
31
- width: 400px;
32
- height: 400px;
33
- background: radial-gradient(circle, rgba(59,130,246,0.08) 0%, transparent 70%);
34
- pointer-events: none;
35
  }
36
  .hero-badge {
37
- display: inline-block;
38
- padding: 4px 14px;
39
- border-radius: 20px;
40
- background: rgba(59, 130, 246, 0.2);
41
- border: 1px solid rgba(59, 130, 246, 0.3);
42
- color: #93c5fd;
43
- font-size: 0.72rem;
44
- font-weight: 600;
45
- letter-spacing: 0.5px;
46
- text-transform: uppercase;
47
- margin-bottom: 12px;
48
  }
49
  .hero-banner h1 {
50
- margin: 0 0 8px;
51
- font-size: 2.2rem;
52
- font-weight: 800;
53
- letter-spacing: -0.8px;
54
  color: #fff !important;
55
  border: none !important;
56
  }
57
  .hero-sub {
58
- margin: 0 0 6px;
59
- font-size: 1.02rem;
60
- color: #93c5fd;
61
- font-weight: 500;
62
  }
63
  .hero-desc {
64
- margin: 0 auto;
65
- font-size: 0.86rem;
66
- color: #94a3b8;
67
- max-width: 660px;
68
- line-height: 1.55;
69
  }
70
  .hero-models {
71
- margin-top: 16px;
72
- display: flex;
73
- justify-content: center;
74
- gap: 8px;
75
- flex-wrap: wrap;
76
  }
77
  .model-chip {
78
- display: inline-block;
79
- padding: 3px 12px;
80
- border-radius: 6px;
81
- background: rgba(255,255,255,0.08);
82
- border: 1px solid rgba(255,255,255,0.12);
83
- color: #cbd5e1;
84
- font-size: 0.72rem;
85
- font-weight: 600;
86
  }
87
 
88
  /* ===== Section Label ===== */
@@ -725,242 +725,306 @@ div.agent-block .agent-header {
725
  }
726
 
727
  /* ===== Dark Mode ===== */
728
- .dark .section-label {
 
 
729
  color: #94a3b8;
730
  }
731
 
732
  /* Case Cards */
733
- .dark .case-card {
 
734
  background: #1e293b;
735
  border-color: #334155;
736
  }
737
- .dark .case-card:hover {
 
738
  border-color: #60a5fa;
739
  box-shadow: 0 6px 24px rgba(59, 130, 246, 0.2);
740
  }
741
- .dark .case-title {
 
742
  color: #f1f5f9;
743
  }
744
- .dark .case-meta {
 
745
  color: #94a3b8;
746
  }
747
- .dark .case-desc {
 
748
  color: #64748b;
749
  }
750
- .dark .case-misdiag {
 
751
  border-top-color: #334155;
752
  }
753
- .dark .misdiag-label {
 
754
  color: #64748b;
755
  }
756
- .dark .misdiag-value {
 
757
  color: #f87171;
758
  }
759
 
760
  /* Tags in dark mode */
761
- .dark .tag-blue { background: #1e3a5f; color: #60a5fa; }
762
- .dark .tag-red { background: #450a0a; color: #fca5a5; }
763
- .dark .tag-purple { background: #2e1065; color: #c4b5fd; }
764
 
765
  /* Voice Section */
766
- .dark .voice-section {
 
767
  background: linear-gradient(135deg, #1e293b 0%, #1e3a5f 100%);
768
  border-color: #334155;
769
  }
770
- .dark .voice-title {
 
771
  color: #f1f5f9;
772
  }
773
- .dark .voice-badge {
 
774
  background: #1e3a5f;
775
  color: #60a5fa;
776
  }
777
- .dark .voice-hint {
 
778
  color: #64748b;
779
  }
780
- .dark .transcribe-btn {
 
781
  background: #1e3a5f !important;
782
  border-color: #3b82f6 !important;
783
  color: #60a5fa !important;
784
  }
785
- .dark .transcribe-btn:hover {
 
786
  background: #1d4ed8 !important;
787
  color: #fff !important;
788
  }
789
 
790
  /* Voice status indicators */
791
- .dark .voice-idle {
 
792
  background: #1e293b;
793
  color: #64748b;
794
  border-color: #334155;
795
  }
796
- .dark .voice-processing {
 
797
  background: #1e3a5f;
798
  color: #60a5fa;
799
  border-color: #3b82f6;
800
  }
801
- .dark .voice-success {
 
802
  background: #14532d;
803
  color: #4ade80;
804
  border-color: #22c55e;
805
  }
806
- .dark .voice-error {
 
807
  background: #450a0a;
808
  color: #fca5a5;
809
  border-color: #ef4444;
810
  }
811
 
812
  /* Progress Bar */
813
- .dark .progress-bar-track {
 
814
  background: #1e293b;
815
  border-color: #334155;
816
  }
817
 
818
  /* Agent Blocks */
819
- .dark .step-done {
 
820
  background: #14532d;
821
  border-color: #22c55e;
822
  }
823
- .dark .step-done .step-name { color: #4ade80; }
824
- .dark .step-done .step-status { color: #22c55e; }
825
 
826
- .dark .step-active {
 
827
  background: #1e3a5f;
828
  border-color: #3b82f6;
829
  }
830
- .dark .step-active .step-name { color: #60a5fa; }
831
- .dark .step-active .step-status { color: #3b82f6; }
832
 
833
- .dark .step-waiting {
 
834
  background: #1e293b;
835
  border-color: #334155;
836
  }
837
- .dark .step-waiting .step-icon {
 
838
  background: #334155;
839
  color: #64748b;
840
  }
841
- .dark .step-waiting .step-name { color: #64748b; }
842
- .dark .step-waiting .step-status { color: #475569; }
843
 
844
- .dark .step-error {
 
845
  background: #450a0a;
846
  border-color: #ef4444;
847
  }
848
- .dark .step-error .step-name { color: #fca5a5; }
849
- .dark .step-error .step-status { color: #ef4444; }
850
 
851
  /* Agent Output */
852
- .dark .agent-output {
 
853
  color: #cbd5e1;
854
  border-top-color: rgba(255,255,255,0.08);
855
  }
856
- .dark .agent-output details summary {
 
857
  color: #94a3b8;
858
  }
859
  .dark .findings-section strong,
860
- .dark .differentials-section strong {
 
 
861
  color: #f1f5f9;
862
  }
863
 
864
  /* Bias Detector */
865
- .dark .discrepancy-summary {
 
866
  background: #431407;
867
  border-color: #c2410c;
868
  color: #fed7aa;
869
  }
870
- .dark .bias-item {
 
871
  background: #422006;
872
  border-left-color: #f59e0b;
873
  }
874
- .dark .bias-title {
 
875
  color: #fcd34d;
876
  }
877
- .dark .bias-evidence {
 
878
  color: #a8a29e;
879
  }
880
- .dark .missed-findings {
 
881
  background: #450a0a;
882
  }
883
- .dark .missed-findings strong {
 
884
  color: #fca5a5;
885
  }
886
 
887
  /* Severity tags */
888
- .dark .severity-high { background: #450a0a; color: #fca5a5; }
889
- .dark .severity-medium { background: #431407; color: #fdba74; }
890
- .dark .severity-low { background: #422006; color: #fde047; }
891
 
892
  /* Source tags */
893
- .dark .source-doctor { background: #1e3a5f; color: #60a5fa; }
894
- .dark .source-ai { background: #2e1065; color: #c4b5fd; }
895
- .dark .source-both { background: #312e81; color: #a5b4fc; }
896
- .dark .source-imaging { background: #1e3a5f; color: #60a5fa; }
897
- .dark .source-clinical { background: #422006; color: #fcd34d; }
898
 
899
  /* SigLIP */
900
- .dark .siglip-section {
 
901
  background: #0c4a6e;
902
  }
903
- .dark .siglip-section strong {
 
904
  color: #7dd3fc;
905
  }
906
- .dark .sign-present {
 
907
  color: #4ade80;
908
  }
909
- .dark .sign-absent {
 
910
  color: #64748b;
911
  }
912
 
913
  /* Devil's Advocate */
914
- .dark .mnm-item {
 
915
  background: #450a0a;
916
  border-left-color: #ef4444;
917
  }
918
- .dark .mnm-title {
 
919
  color: #fca5a5;
920
  }
921
- .dark .challenge-item {
 
922
  background: #2e1065;
923
  border-left-color: #8b5cf6;
924
  }
925
- .dark .challenge-claim {
 
926
  color: #c4b5fd;
927
  }
928
- .dark .challenge-counter {
 
929
  color: #9ca3af;
930
  }
931
 
932
  /* Consultant */
933
- .dark .consultation-note {
 
934
  background: linear-gradient(135deg, #1e293b, #0c4a6e);
935
  border-color: #334155;
936
  color: #e2e8f0;
937
  }
938
- .dark .urgency-critical { background: #450a0a; color: #fca5a5; }
939
- .dark .urgency-high { background: #431407; color: #fdba74; }
940
- .dark .urgency-moderate { background: #422006; color: #fde047; }
941
- .dark .urgency-unknown { background: #334155; color: #94a3b8; }
942
- .dark .confidence-note {
 
943
  background: #1e293b;
944
  color: #94a3b8;
945
  }
946
 
947
  /* Pipeline error */
948
- .dark .pipeline-error {
 
949
  background: #450a0a;
950
  border-color: #ef4444;
951
  color: #fca5a5;
952
  }
953
 
954
  /* Footer */
955
- .dark .footer-text {
 
956
  color: #64748b;
957
  border-top-color: #334155;
958
  }
959
- .dark .footer-chip {
 
960
  background: #334155;
961
  color: #94a3b8;
962
  }
963
- .dark .footer-sep {
 
964
  color: #475569;
965
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
966
  """
 
13
 
14
  /* ===== Hero Banner ===== */
15
  .hero-banner {
16
+ text-align: center !important;
17
+ padding: 36px 28px 24px !important;
18
+ border-radius: 16px !important;
19
+ background: linear-gradient(135deg, #0f172a 0%, #1e293b 40%, #0f3460 100%) !important;
20
+ color: #fff !important;
21
+ margin-bottom: 22px !important;
22
+ box-shadow: 0 4px 28px rgba(0, 0, 0, 0.2) !important;
23
+ position: relative !important;
24
+ overflow: hidden !important;
25
  }
26
  .hero-banner::after {
27
+ content: '' !important;
28
+ position: absolute !important;
29
+ top: -50% !important;
30
+ right: -20% !important;
31
+ width: 400px !important;
32
+ height: 400px !important;
33
+ background: radial-gradient(circle, rgba(59,130,246,0.08) 0%, transparent 70%) !important;
34
+ pointer-events: none !important;
35
  }
36
  .hero-badge {
37
+ display: inline-block !important;
38
+ padding: 4px 14px !important;
39
+ border-radius: 20px !important;
40
+ background: rgba(59, 130, 246, 0.2) !important;
41
+ border: 1px solid rgba(59, 130, 246, 0.3) !important;
42
+ color: #93c5fd !important;
43
+ font-size: 0.72rem !important;
44
+ font-weight: 600 !important;
45
+ letter-spacing: 0.5px !important;
46
+ text-transform: uppercase !important;
47
+ margin-bottom: 12px !important;
48
  }
49
  .hero-banner h1 {
50
+ margin: 0 0 8px !important;
51
+ font-size: 2.2rem !important;
52
+ font-weight: 800 !important;
53
+ letter-spacing: -0.8px !important;
54
  color: #fff !important;
55
  border: none !important;
56
  }
57
  .hero-sub {
58
+ margin: 0 0 6px !important;
59
+ font-size: 1.02rem !important;
60
+ color: #93c5fd !important;
61
+ font-weight: 500 !important;
62
  }
63
  .hero-desc {
64
+ margin: 0 auto !important;
65
+ font-size: 0.86rem !important;
66
+ color: #94a3b8 !important;
67
+ max-width: 660px !important;
68
+ line-height: 1.55 !important;
69
  }
70
  .hero-models {
71
+ margin-top: 16px !important;
72
+ display: flex !important;
73
+ justify-content: center !important;
74
+ gap: 8px !important;
75
+ flex-wrap: wrap !important;
76
  }
77
  .model-chip {
78
+ display: inline-block !important;
79
+ padding: 3px 12px !important;
80
+ border-radius: 6px !important;
81
+ background: rgba(255,255,255,0.08) !important;
82
+ border: 1px solid rgba(255,255,255,0.12) !important;
83
+ color: #cbd5e1 !important;
84
+ font-size: 0.72rem !important;
85
+ font-weight: 600 !important;
86
  }
87
 
88
  /* ===== Section Label ===== */
 
725
  }
726
 
727
  /* ===== Dark Mode ===== */
728
+ /* Using .dark class selector (Gradio/HF) + media query fallback */
729
+ .dark .section-label,
730
+ :root.dark .section-label {
731
  color: #94a3b8;
732
  }
733
 
734
  /* Case Cards */
735
+ .dark .case-card,
736
+ :root.dark .case-card {
737
  background: #1e293b;
738
  border-color: #334155;
739
  }
740
+ .dark .case-card:hover,
741
+ :root.dark .case-card:hover {
742
  border-color: #60a5fa;
743
  box-shadow: 0 6px 24px rgba(59, 130, 246, 0.2);
744
  }
745
+ .dark .case-title,
746
+ :root.dark .case-title {
747
  color: #f1f5f9;
748
  }
749
+ .dark .case-meta,
750
+ :root.dark .case-meta {
751
  color: #94a3b8;
752
  }
753
+ .dark .case-desc,
754
+ :root.dark .case-desc {
755
  color: #64748b;
756
  }
757
+ .dark .case-misdiag,
758
+ :root.dark .case-misdiag {
759
  border-top-color: #334155;
760
  }
761
+ .dark .misdiag-label,
762
+ :root.dark .misdiag-label {
763
  color: #64748b;
764
  }
765
+ .dark .misdiag-value,
766
+ :root.dark .misdiag-value {
767
  color: #f87171;
768
  }
769
 
770
  /* Tags in dark mode */
771
+ .dark .tag-blue, :root.dark .tag-blue { background: #1e3a5f; color: #60a5fa; }
772
+ .dark .tag-red, :root.dark .tag-red { background: #450a0a; color: #fca5a5; }
773
+ .dark .tag-purple, :root.dark .tag-purple { background: #2e1065; color: #c4b5fd; }
774
 
775
  /* Voice Section */
776
+ .dark .voice-section,
777
+ :root.dark .voice-section {
778
  background: linear-gradient(135deg, #1e293b 0%, #1e3a5f 100%);
779
  border-color: #334155;
780
  }
781
+ .dark .voice-title,
782
+ :root.dark .voice-title {
783
  color: #f1f5f9;
784
  }
785
+ .dark .voice-badge,
786
+ :root.dark .voice-badge {
787
  background: #1e3a5f;
788
  color: #60a5fa;
789
  }
790
+ .dark .voice-hint,
791
+ :root.dark .voice-hint {
792
  color: #64748b;
793
  }
794
+ .dark .transcribe-btn,
795
+ :root.dark .transcribe-btn {
796
  background: #1e3a5f !important;
797
  border-color: #3b82f6 !important;
798
  color: #60a5fa !important;
799
  }
800
+ .dark .transcribe-btn:hover,
801
+ :root.dark .transcribe-btn:hover {
802
  background: #1d4ed8 !important;
803
  color: #fff !important;
804
  }
805
 
806
  /* Voice status indicators */
807
+ .dark .voice-idle,
808
+ :root.dark .voice-idle {
809
  background: #1e293b;
810
  color: #64748b;
811
  border-color: #334155;
812
  }
813
+ .dark .voice-processing,
814
+ :root.dark .voice-processing {
815
  background: #1e3a5f;
816
  color: #60a5fa;
817
  border-color: #3b82f6;
818
  }
819
+ .dark .voice-success,
820
+ :root.dark .voice-success {
821
  background: #14532d;
822
  color: #4ade80;
823
  border-color: #22c55e;
824
  }
825
+ .dark .voice-error,
826
+ :root.dark .voice-error {
827
  background: #450a0a;
828
  color: #fca5a5;
829
  border-color: #ef4444;
830
  }
831
 
832
  /* Progress Bar */
833
+ .dark .progress-bar-track,
834
+ :root.dark .progress-bar-track {
835
  background: #1e293b;
836
  border-color: #334155;
837
  }
838
 
839
  /* Agent Blocks */
840
+ .dark .step-done,
841
+ :root.dark .step-done {
842
  background: #14532d;
843
  border-color: #22c55e;
844
  }
845
+ .dark .step-done .step-name, :root.dark .step-done .step-name { color: #4ade80; }
846
+ .dark .step-done .step-status, :root.dark .step-done .step-status { color: #22c55e; }
847
 
848
+ .dark .step-active,
849
+ :root.dark .step-active {
850
  background: #1e3a5f;
851
  border-color: #3b82f6;
852
  }
853
+ .dark .step-active .step-name, :root.dark .step-active .step-name { color: #60a5fa; }
854
+ .dark .step-active .step-status, :root.dark .step-active .step-status { color: #3b82f6; }
855
 
856
+ .dark .step-waiting,
857
+ :root.dark .step-waiting {
858
  background: #1e293b;
859
  border-color: #334155;
860
  }
861
+ .dark .step-waiting .step-icon,
862
+ :root.dark .step-waiting .step-icon {
863
  background: #334155;
864
  color: #64748b;
865
  }
866
+ .dark .step-waiting .step-name, :root.dark .step-waiting .step-name { color: #64748b; }
867
+ .dark .step-waiting .step-status, :root.dark .step-waiting .step-status { color: #475569; }
868
 
869
+ .dark .step-error,
870
+ :root.dark .step-error {
871
  background: #450a0a;
872
  border-color: #ef4444;
873
  }
874
+ .dark .step-error .step-name, :root.dark .step-error .step-name { color: #fca5a5; }
875
+ .dark .step-error .step-status, :root.dark .step-error .step-status { color: #ef4444; }
876
 
877
  /* Agent Output */
878
+ .dark .agent-output,
879
+ :root.dark .agent-output {
880
  color: #cbd5e1;
881
  border-top-color: rgba(255,255,255,0.08);
882
  }
883
+ .dark .agent-output details summary,
884
+ :root.dark .agent-output details summary {
885
  color: #94a3b8;
886
  }
887
  .dark .findings-section strong,
888
+ .dark .differentials-section strong,
889
+ :root.dark .findings-section strong,
890
+ :root.dark .differentials-section strong {
891
  color: #f1f5f9;
892
  }
893
 
894
  /* Bias Detector */
895
+ .dark .discrepancy-summary,
896
+ :root.dark .discrepancy-summary {
897
  background: #431407;
898
  border-color: #c2410c;
899
  color: #fed7aa;
900
  }
901
+ .dark .bias-item,
902
+ :root.dark .bias-item {
903
  background: #422006;
904
  border-left-color: #f59e0b;
905
  }
906
+ .dark .bias-title,
907
+ :root.dark .bias-title {
908
  color: #fcd34d;
909
  }
910
+ .dark .bias-evidence,
911
+ :root.dark .bias-evidence {
912
  color: #a8a29e;
913
  }
914
+ .dark .missed-findings,
915
+ :root.dark .missed-findings {
916
  background: #450a0a;
917
  }
918
+ .dark .missed-findings strong,
919
+ :root.dark .missed-findings strong {
920
  color: #fca5a5;
921
  }
922
 
923
  /* Severity tags */
924
+ .dark .severity-high, :root.dark .severity-high { background: #450a0a; color: #fca5a5; }
925
+ .dark .severity-medium, :root.dark .severity-medium { background: #431407; color: #fdba74; }
926
+ .dark .severity-low, :root.dark .severity-low { background: #422006; color: #fde047; }
927
 
928
  /* Source tags */
929
+ .dark .source-doctor, :root.dark .source-doctor { background: #1e3a5f; color: #60a5fa; }
930
+ .dark .source-ai, :root.dark .source-ai { background: #2e1065; color: #c4b5fd; }
931
+ .dark .source-both, :root.dark .source-both { background: #312e81; color: #a5b4fc; }
932
+ .dark .source-imaging, :root.dark .source-imaging { background: #1e3a5f; color: #60a5fa; }
933
+ .dark .source-clinical, :root.dark .source-clinical { background: #422006; color: #fcd34d; }
934
 
935
  /* SigLIP */
936
+ .dark .siglip-section,
937
+ :root.dark .siglip-section {
938
  background: #0c4a6e;
939
  }
940
+ .dark .siglip-section strong,
941
+ :root.dark .siglip-section strong {
942
  color: #7dd3fc;
943
  }
944
+ .dark .sign-present,
945
+ :root.dark .sign-present {
946
  color: #4ade80;
947
  }
948
+ .dark .sign-absent,
949
+ :root.dark .sign-absent {
950
  color: #64748b;
951
  }
952
 
953
  /* Devil's Advocate */
954
+ .dark .mnm-item,
955
+ :root.dark .mnm-item {
956
  background: #450a0a;
957
  border-left-color: #ef4444;
958
  }
959
+ .dark .mnm-title,
960
+ :root.dark .mnm-title {
961
  color: #fca5a5;
962
  }
963
+ .dark .challenge-item,
964
+ :root.dark .challenge-item {
965
  background: #2e1065;
966
  border-left-color: #8b5cf6;
967
  }
968
+ .dark .challenge-claim,
969
+ :root.dark .challenge-claim {
970
  color: #c4b5fd;
971
  }
972
+ .dark .challenge-counter,
973
+ :root.dark .challenge-counter {
974
  color: #9ca3af;
975
  }
976
 
977
  /* Consultant */
978
+ .dark .consultation-note,
979
+ :root.dark .consultation-note {
980
  background: linear-gradient(135deg, #1e293b, #0c4a6e);
981
  border-color: #334155;
982
  color: #e2e8f0;
983
  }
984
+ .dark .urgency-critical, :root.dark .urgency-critical { background: #450a0a; color: #fca5a5; }
985
+ .dark .urgency-high, :root.dark .urgency-high { background: #431407; color: #fdba74; }
986
+ .dark .urgency-moderate, :root.dark .urgency-moderate { background: #422006; color: #fde047; }
987
+ .dark .urgency-unknown, :root.dark .urgency-unknown { background: #334155; color: #94a3b8; }
988
+ .dark .confidence-note,
989
+ :root.dark .confidence-note {
990
  background: #1e293b;
991
  color: #94a3b8;
992
  }
993
 
994
  /* Pipeline error */
995
+ .dark .pipeline-error,
996
+ :root.dark .pipeline-error {
997
  background: #450a0a;
998
  border-color: #ef4444;
999
  color: #fca5a5;
1000
  }
1001
 
1002
  /* Footer */
1003
+ .dark .footer-text,
1004
+ :root.dark .footer-text {
1005
  color: #64748b;
1006
  border-top-color: #334155;
1007
  }
1008
+ .dark .footer-chip,
1009
+ :root.dark .footer-chip {
1010
  background: #334155;
1011
  color: #94a3b8;
1012
  }
1013
+ .dark .footer-sep,
1014
+ :root.dark .footer-sep {
1015
  color: #475569;
1016
  }
1017
+
1018
+ /* Media query fallback for system dark mode */
1019
+ @media (prefers-color-scheme: dark) {
1020
+ .section-label { color: #94a3b8; }
1021
+ .case-card { background: #1e293b; border-color: #334155; }
1022
+ .case-title { color: #f1f5f9; }
1023
+ .case-meta { color: #94a3b8; }
1024
+ .case-desc { color: #64748b; }
1025
+ .progress-bar-track { background: #1e293b; border-color: #334155; }
1026
+ .agent-output { color: #cbd5e1; }
1027
+ .footer-text { color: #64748b; border-top-color: #334155; }
1028
+ .footer-chip { background: #334155; color: #94a3b8; }
1029
+ }
1030
  """