Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| import gradio as gr | |
| # Minimal CSS overrides - theme handles most styling via _dark variants | |
| LIGHT_CSS = """ | |
| /* Force light color scheme */ | |
| :root, .dark { | |
| color-scheme: light !important; | |
| --background-fill-primary: #ffffff !important; | |
| --background-fill-primary-dark: #ffffff !important; | |
| --background-fill-secondary: #ffffff !important; | |
| --background-fill-secondary-dark: #ffffff !important; | |
| } | |
| /* Ensure all text is dark */ | |
| .gradio-container label, | |
| .gradio-container span { | |
| color: #1f2937 !important; | |
| } | |
| /* Radio/checkbox label pills - force white background */ | |
| .gradio-container .wrap[data-testid=\"checkbox-group\"] label, | |
| .gradio-container .wrap[data-testid=\"radio-group\"] label { | |
| background: #ffffff !important; | |
| border: 1px solid #e5e7eb !important; | |
| color: #1f2937 !important; | |
| } | |
| .gradio-container .wrap[data-testid=\"checkbox-group\"] label.selected, | |
| .gradio-container .wrap[data-testid=\"radio-group\"] label.selected { | |
| background: #eef2ff !important; | |
| border-color: #4f46e5 !important; | |
| } | |
| .gradio-container input, | |
| .gradio-container textarea, | |
| .gradio-container select { | |
| color: #1f2937 !important; | |
| background: #ffffff !important; | |
| } | |
| .gradio-container [data-testid=\"dropdown\"], | |
| .gradio-container [data-testid=\"dropdown\"] * { | |
| background: #ffffff !important; | |
| color: #1f2937 !important; | |
| } | |
| /* Dropdown menu is sometimes portaled outside .gradio-container, so also target by role globally */ | |
| [role=\"listbox\"] { | |
| background: #ffffff !important; | |
| color: #1f2937 !important; | |
| } | |
| [role=\"option\"] { | |
| background: #ffffff !important; | |
| color: #1f2937 !important; | |
| } | |
| [role=\"option\"]:hover, | |
| [role=\"option\"][aria-selected=\"true\"], | |
| [role=\"option\"][data-highlighted], | |
| [role=\"option\"][data-selected], | |
| [role=\"option\"][data-state=\"checked\"], | |
| [role=\"option\"].selected { | |
| background: #ffffff !important; | |
| color: #1f2937 !important; | |
| } | |
| /* KPI cards */ | |
| .kpi-grid { | |
| display: grid; | |
| grid-template-columns: repeat(3, minmax(0, 1fr)); | |
| gap: 10px; | |
| margin-top: 6px; | |
| } | |
| .kpi-card { | |
| border: 1px solid #e5e7eb; | |
| background: #ffffff; | |
| border-radius: 10px; | |
| padding: 10px 12px; | |
| } | |
| .kpi-label { | |
| font-size: 12px; | |
| color: #6b7280; | |
| margin-bottom: 4px; | |
| } | |
| .kpi-value { | |
| font-size: 14px; | |
| font-weight: 600; | |
| color: #111827; | |
| line-height: 1.2; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* Episode history tables: keep side-by-side clean and compact */ | |
| .episode-history-row { | |
| align-items: stretch; | |
| } | |
| .episode-history-table { | |
| overflow: hidden; | |
| } | |
| .episode-history-table table { | |
| width: 100% !important; | |
| table-layout: fixed; | |
| } | |
| .episode-history-table th { | |
| white-space: normal; | |
| overflow: visible; | |
| text-overflow: clip; | |
| line-height: 1.2; | |
| } | |
| .episode-history-table td { | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| } | |
| """ | |
| THEME = gr.themes.Default( | |
| primary_hue=gr.themes.colors.indigo, | |
| secondary_hue=gr.themes.colors.indigo, | |
| neutral_hue=gr.themes.colors.gray, | |
| ).set( | |
| # Body | |
| body_background_fill="#f7f8fb", | |
| body_background_fill_dark="#f7f8fb", | |
| body_text_color="#1f2937", | |
| body_text_color_dark="#1f2937", | |
| # Blocks | |
| block_background_fill="#ffffff", | |
| block_background_fill_dark="#ffffff", | |
| block_border_color="#e5e7eb", | |
| block_border_color_dark="#e5e7eb", | |
| block_label_text_color="#1f2937", | |
| block_label_text_color_dark="#1f2937", | |
| block_title_text_color="#1f2937", | |
| block_title_text_color_dark="#1f2937", | |
| # Inputs | |
| input_background_fill="#ffffff", | |
| input_background_fill_dark="#ffffff", | |
| input_border_color="#9ca3af", | |
| input_border_color_dark="#9ca3af", | |
| input_placeholder_color="#6b7280", | |
| input_placeholder_color_dark="#6b7280", | |
| # Buttons | |
| button_primary_background_fill="#4f46e5", | |
| button_primary_background_fill_dark="#4f46e5", | |
| button_primary_text_color="#ffffff", | |
| button_primary_text_color_dark="#ffffff", | |
| button_secondary_background_fill="#4f46e5", | |
| button_secondary_background_fill_dark="#4f46e5", | |
| button_secondary_text_color="#ffffff", | |
| button_secondary_text_color_dark="#ffffff", | |
| button_secondary_background_fill_hover="#4338ca", | |
| button_secondary_background_fill_hover_dark="#4338ca", | |
| # Radio/Checkbox - THIS IS THE KEY FIX | |
| checkbox_background_color="#ffffff", | |
| checkbox_background_color_dark="#ffffff", | |
| checkbox_border_color="#d1d5db", | |
| checkbox_border_color_dark="#d1d5db", | |
| checkbox_label_background_fill="#ffffff", | |
| checkbox_label_background_fill_dark="#ffffff", | |
| checkbox_label_background_fill_hover="#f3f4f6", | |
| checkbox_label_background_fill_hover_dark="#f3f4f6", | |
| checkbox_label_background_fill_selected="#eef2ff", | |
| checkbox_label_background_fill_selected_dark="#eef2ff", | |
| checkbox_label_border_color="#e5e7eb", | |
| checkbox_label_border_color_dark="#e5e7eb", | |
| checkbox_label_text_color="#1f2937", | |
| checkbox_label_text_color_dark="#1f2937", | |
| ) | |