Spaces:
Running on Zero
Running on Zero
Lock gradio version and add dark mode support
Browse files- Lock gradio==6.4.0 for consistent behavior across environments
- Add comprehensive dark mode CSS for HF Spaces compatibility
- Cover all UI elements: case cards, agent blocks, voice section, etc.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- requirements.txt +1 -1
- ui/css.py +240 -0
requirements.txt
CHANGED
|
@@ -4,7 +4,7 @@ accelerate>=0.26.0
|
|
| 4 |
bitsandbytes>=0.42.0
|
| 5 |
huggingface_hub>=0.20.0
|
| 6 |
langgraph>=0.2.0
|
| 7 |
-
gradio
|
| 8 |
Pillow>=10.0.0
|
| 9 |
numpy>=1.24.0
|
| 10 |
scipy>=1.10.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
|
| 10 |
scipy>=1.10.0
|
ui/css.py
CHANGED
|
@@ -723,4 +723,244 @@ div.agent-block .agent-header {
|
|
| 723 |
.hero-banner h1 { font-size: 1.5rem; }
|
| 724 |
.case-cards-overlay { grid-template-columns: 1fr; }
|
| 725 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 726 |
"""
|
|
|
|
| 723 |
.hero-banner h1 { font-size: 1.5rem; }
|
| 724 |
.case-cards-overlay { grid-template-columns: 1fr; }
|
| 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 |
"""
|