Spaces:
Running
Running
| """ | |
| CSS styles for UI components in the leaderboard application. | |
| """ | |
| from src.utils.config import dark_theme | |
| def get_container_styles(): | |
| """ | |
| Get CSS styles for page containers | |
| Returns: | |
| str: CSS string for containers | |
| """ | |
| return f""" | |
| .title-container {{ | |
| padding: 2rem 0; | |
| text-align: center; | |
| background: {dark_theme['gradient']}; | |
| border-radius: 12px; | |
| color: white; | |
| margin-bottom: 2rem; | |
| }} | |
| .title {{ | |
| font-size: 42px; | |
| font-weight: 700; | |
| margin-bottom: 10px; | |
| color: {dark_theme['title_color']}; | |
| }} | |
| .subtitle {{ | |
| font-size: 20px; | |
| font-weight: 400; | |
| opacity: 0.9; | |
| color: {dark_theme['subtitle_color']}; | |
| }} | |
| """ | |
| def get_card_styles(): | |
| """ | |
| Get CSS styles for cards | |
| Returns: | |
| str: CSS string for cards | |
| """ | |
| return f""" | |
| .card {{ | |
| background-color: {dark_theme['card_bg']}; | |
| border-radius: 12px; | |
| padding: 24px; | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15); | |
| margin-bottom: 24px; | |
| transition: transform 0.2s, box-shadow 0.2s; | |
| }} | |
| .card:hover {{ | |
| transform: translateY(-2px); | |
| box-shadow: 0 8px 15px rgba(0, 0, 0, 0.2); | |
| }} | |
| .card-title {{ | |
| font-size: 20px; | |
| font-weight: 600; | |
| margin-bottom: 16px; | |
| color: {dark_theme['text_color']}; | |
| display: flex; | |
| align-items: center; | |
| }} | |
| .card-title-icon {{ | |
| margin-right: 10px; | |
| font-size: 22px; | |
| }} | |
| """ | |
| def get_task_card_styles(): | |
| """ | |
| Get CSS styles for task cards | |
| Returns: | |
| str: CSS string for task cards | |
| """ | |
| return f""" | |
| .task-card {{ | |
| background-color: {dark_theme['card_bg']}; | |
| border-radius: 12px; | |
| padding: 20px; | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15); | |
| margin-bottom: 16px; | |
| border-left: 4px solid {dark_theme['task_border']}; | |
| }} | |
| .task-title {{ | |
| font-size: 18px; | |
| font-weight: 600; | |
| color: {dark_theme['task_title']}; | |
| margin-bottom: 8px; | |
| }} | |
| .task-description {{ | |
| font-size: 15px; | |
| color: {dark_theme['text_color']}; | |
| line-height: 1.5; | |
| }} | |
| """ | |
| def get_button_styles(): | |
| """ | |
| Get CSS styles for buttons | |
| Returns: | |
| str: CSS string for buttons | |
| """ | |
| return f""" | |
| /* Button styling - completely new and modern */ | |
| div.stButton > button {{ | |
| background-color: {dark_theme['card_bg']}; | |
| color: {dark_theme['text_color']}; | |
| border: 1px solid {dark_theme['border']}; | |
| border-radius: 8px; | |
| padding: 8px 16px; | |
| font-size: 14px; | |
| font-weight: 500; | |
| margin: 4px; | |
| transition: all 0.2s ease; | |
| }} | |
| div.stButton > button:hover {{ | |
| background-color: {dark_theme['hover']}; | |
| border-color: {dark_theme['border']}; | |
| transform: translateY(-1px); | |
| }} | |
| /* Active button styling */ | |
| div.stButton > button.selected {{ | |
| background-color: {dark_theme['primary']} !important; | |
| color: white !important; | |
| border-color: {dark_theme['primary']} !important; | |
| }} | |
| """ | |
| def get_tabs_styles(): | |
| """ | |
| Get CSS styles for tabs | |
| Returns: | |
| str: CSS string for tabs | |
| """ | |
| return f""" | |
| /* Tabs styling */ | |
| .stTabs [data-baseweb="tab-list"] {{ | |
| gap: 8px; | |
| margin-bottom: 20px; | |
| }} | |
| .stTabs [data-baseweb="tab"] {{ | |
| border-radius: 8px 8px 0 0; | |
| padding: 12px 24px; | |
| font-weight: 500; | |
| background-color: {dark_theme['hover']}; | |
| color: {dark_theme['text_color']}; | |
| }} | |
| .stTabs [data-baseweb="tab"][aria-selected="true"] {{ | |
| background-color: {dark_theme['primary']}; | |
| color: white; | |
| }} | |
| .stTabs [data-baseweb="tab-highlight"] {{ | |
| background-color: transparent; | |
| }} | |
| """ | |
| def get_alert_styles(): | |
| """ | |
| Get CSS styles for alerts and information boxes | |
| Returns: | |
| str: CSS string for alerts | |
| """ | |
| return f""" | |
| /* Alert/info box styling */ | |
| .info-box {{ | |
| background-color: {dark_theme['info_bg']}; | |
| border-left: 4px solid {dark_theme['info_border']}; | |
| border-radius: 8px; | |
| padding: 16px; | |
| margin-bottom: 16px; | |
| color: {dark_theme['text_color']}; | |
| }} | |
| .warning-box {{ | |
| background-color: {dark_theme['warning_bg']}; | |
| border-left: 4px solid {dark_theme['warning_border']}; | |
| border-radius: 8px; | |
| padding: 16px; | |
| margin-bottom: 16px; | |
| color: {dark_theme['text_color']}; | |
| }} | |
| """ | |
| def get_footer_styles(): | |
| """ | |
| Get CSS styles for the footer | |
| Returns: | |
| str: CSS string for the footer | |
| """ | |
| return f""" | |
| /* Footer styling */ | |
| .footer {{ | |
| text-align: center; | |
| padding: 24px; | |
| margin-top: 40px; | |
| color: {dark_theme['footer_color']}; | |
| font-size: 14px; | |
| border-top: 1px solid {dark_theme['footer_border']}; | |
| }} | |
| """ | |
| def get_all_component_styles(): | |
| """ | |
| Get all component styles combined | |
| Returns: | |
| str: Combined CSS string for all components | |
| """ | |
| styles = [ | |
| get_container_styles(), | |
| get_card_styles(), | |
| get_task_card_styles(), | |
| get_button_styles(), | |
| get_tabs_styles(), | |
| get_alert_styles(), | |
| get_footer_styles(), | |
| get_metric_definition_styles() | |
| ] | |
| return '\n'.join(styles) | |
| def get_metric_definition_styles(): | |
| """ | |
| Get CSS styles for metric definition component | |
| Returns: | |
| str: CSS string for metric definition | |
| """ | |
| return f""" | |
| /* Metric definition styling */ | |
| .metric-definition {{ | |
| margin-top: 20px; | |
| background-color: {dark_theme['card_bg']}; | |
| border-radius: 8px; | |
| padding: 16px 20px; | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); | |
| border-left: 4px solid {dark_theme['secondary']}; | |
| }} | |
| .metric-definition h4 {{ | |
| color: {dark_theme['secondary']}; | |
| margin-top: 0; | |
| margin-bottom: 8px; | |
| font-size: 18px; | |
| font-weight: 600; | |
| }} | |
| .metric-definition p {{ | |
| color: {dark_theme['text_color']}; | |
| font-size: 14px; | |
| line-height: 1.6; | |
| margin-bottom: 0; | |
| }} | |
| """ |