Spaces:
Running
Running
| """Gradio theme and global CSS for the League Table Manager.""" | |
| from gradio.themes.base import Base | |
| from gradio.themes.utils import colors, fonts, sizes | |
| class LeagueTheme(Base): | |
| def __init__(self): | |
| super().__init__( | |
| primary_hue=colors.green, | |
| secondary_hue=colors.emerald, | |
| neutral_hue=colors.slate, | |
| spacing_size=sizes.spacing_md, | |
| radius_size=sizes.radius_lg, | |
| text_size=sizes.text_md, | |
| font=( | |
| fonts.GoogleFont("Inter"), | |
| "ui-sans-serif", | |
| "system-ui", | |
| "sans-serif", | |
| ), | |
| ) | |
| super().set( | |
| body_background_fill="#0f172a", | |
| body_background_fill_dark="#0f172a", | |
| block_background_fill="#1e293b", | |
| block_background_fill_dark="#1e293b", | |
| block_border_color="#334155", | |
| block_border_color_dark="#334155", | |
| block_border_width="1px", | |
| block_radius="12px", | |
| block_shadow="0 4px 24px rgba(0,0,0,0.4)", | |
| body_text_color="#e2e8f0", | |
| body_text_color_dark="#e2e8f0", | |
| block_label_text_color="#94a3b8", | |
| block_label_text_weight="600", | |
| input_background_fill="#0f172a", | |
| input_background_fill_dark="#0f172a", | |
| input_border_color="#334155", | |
| input_border_color_dark="#334155", | |
| input_border_color_focus="*primary_500", | |
| button_primary_background_fill="*primary_600", | |
| button_primary_background_fill_hover="*primary_500", | |
| button_primary_text_color="white", | |
| button_primary_border_color="transparent", | |
| button_secondary_background_fill="#334155", | |
| button_secondary_background_fill_hover="#475569", | |
| button_secondary_text_color="#e2e8f0", | |
| border_color_primary="*primary_600", | |
| ) | |
| CSS = """ | |
| /* Tab bar */ | |
| .tab-nav button { | |
| font-weight: 600; | |
| font-size: 0.85rem; | |
| letter-spacing: 0.05em; | |
| text-transform: uppercase; | |
| color: #94a3b8 !important; | |
| border-bottom: 2px solid transparent; | |
| transition: all 0.2s; | |
| } | |
| .tab-nav button.selected { | |
| color: #22c55e !important; | |
| border-bottom: 2px solid #22c55e !important; | |
| background: transparent !important; | |
| } | |
| /* Dataframe table headers */ | |
| .gr-dataframe th, table th { | |
| background-color: #0f172a !important; | |
| color: #22c55e !important; | |
| font-weight: 700 !important; | |
| font-size: 0.72rem !important; | |
| text-transform: uppercase !important; | |
| letter-spacing: 0.08em !important; | |
| padding: 10px 8px !important; | |
| border-bottom: 2px solid #22c55e !important; | |
| } | |
| .gr-dataframe td, table td { | |
| background-color: #1e293b !important; | |
| color: #e2e8f0 !important; | |
| padding: 8px !important; | |
| border-bottom: 1px solid #334155 !important; | |
| font-size: 0.85rem; | |
| } | |
| .gr-dataframe tr:hover td, table tr:hover td { | |
| background-color: #263548 !important; | |
| } | |
| /* Buttons */ | |
| button.primary, .primary { | |
| background: linear-gradient(135deg, #16a34a, #15803d) !important; | |
| color: white !important; | |
| font-weight: 600 !important; | |
| border-radius: 8px !important; | |
| border: none !important; | |
| box-shadow: 0 4px 12px rgba(22,163,74,0.3) !important; | |
| transition: all 0.2s !important; | |
| } | |
| button.primary:hover { | |
| background: linear-gradient(135deg, #22c55e, #16a34a) !important; | |
| box-shadow: 0 6px 16px rgba(34,197,94,0.4) !important; | |
| transform: translateY(-1px); | |
| } | |
| button.stop { | |
| background: #7f1d1d !important; | |
| color: #fca5a5 !important; | |
| border: 1px solid #dc2626 !important; | |
| } | |
| /* Accordion */ | |
| .gr-accordion { | |
| background-color: #1e293b !important; | |
| border: 1px solid #334155 !important; | |
| border-radius: 10px !important; | |
| } | |
| /* Input fields */ | |
| input[type="text"], input[type="number"], textarea { | |
| background-color: #0f172a !important; | |
| border: 1px solid #334155 !important; | |
| color: #e2e8f0 !important; | |
| border-radius: 8px !important; | |
| } | |
| input:focus, textarea:focus { | |
| border-color: #22c55e !important; | |
| box-shadow: 0 0 0 3px rgba(34,197,94,0.1) !important; | |
| } | |
| /* App heading */ | |
| h1 { | |
| font-size: 1.8rem !important; | |
| font-weight: 800 !important; | |
| letter-spacing: -0.02em !important; | |
| color: white !important; | |
| } | |
| """ | |