Spaces:
Running
Running
| """ | |
| CSS styles for tables in the leaderboard application. | |
| """ | |
| from src.utils.config import dark_theme | |
| def get_streamlit_table_styles(): | |
| """ | |
| Get CSS styles for standard Streamlit tables | |
| Returns: | |
| str: CSS string for Streamlit tables | |
| """ | |
| return f""" | |
| /* Standard Streamlit table styling */ | |
| [data-testid="stDataFrame"] {{ | |
| background-color: {dark_theme['card_bg']}; | |
| border-radius: 12px; | |
| padding: 1px; | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15); | |
| }} | |
| [data-testid="stDataFrame"] table {{ | |
| border-collapse: separate !important; | |
| border-spacing: 0 !important; | |
| border-radius: 8px !important; | |
| overflow: hidden !important; | |
| }} | |
| [data-testid="stDataFrame"] th {{ | |
| background-color: {dark_theme['table_header']} !important; | |
| color: {dark_theme['text_color']} !important; | |
| font-weight: 600 !important; | |
| text-transform: uppercase !important; | |
| font-size: 13px !important; | |
| padding: 16px 10px !important; | |
| }} | |
| [data-testid="stDataFrame"] td {{ | |
| padding: 12px 10px !important; | |
| border-bottom: 1px solid {dark_theme['table_border']} !important; | |
| font-size: 14px !important; | |
| color: {dark_theme['text_color']} !important; | |
| }} | |
| /* Hide row numbers */ | |
| [data-testid="stDataFrame"] [data-testid="stDataFrameRowNumber"] {{ | |
| display: none !important; | |
| }} | |
| """ | |
| def get_custom_leaderboard_table_styles(): | |
| """ | |
| Get CSS styles for the custom leaderboard table | |
| Returns: | |
| str: CSS string for the custom leaderboard table | |
| """ | |
| return f""" | |
| /* Custom leaderboard table styling */ | |
| .fixed-table-container {{ | |
| position: relative; | |
| max-width: 100%; | |
| margin-top: 20px; | |
| border-radius: 8px; | |
| box-shadow: 0 4px 12px rgba(0,0,0,0.5); | |
| background: {dark_theme['table_bg']}; | |
| border: 1px solid {dark_theme['table_border_color']}; | |
| }} | |
| .fixed-table {{ | |
| width: 100%; | |
| border-collapse: collapse; | |
| font-family: 'Inter', sans-serif; | |
| }} | |
| .fixed-column {{ | |
| position: sticky; | |
| left: 0; | |
| z-index: 2; | |
| background-color: {dark_theme['table_bg']}; | |
| }} | |
| .first-fixed-column {{ | |
| width: 60px; | |
| text-align: center; | |
| left: 0; | |
| z-index: 3; | |
| border-right: 1px solid {dark_theme['table_border_color']}; | |
| box-shadow: 2px 0 4px rgba(0,0,0,0.3); | |
| }} | |
| .second-fixed-column {{ | |
| width: 280px; | |
| text-align: center; | |
| left: 60px; | |
| z-index: 2; | |
| border-right: 1px solid {dark_theme['table_border_color']}; | |
| box-shadow: 2px 0 4px rgba(0,0,0,0.3); | |
| }} | |
| /* Fix for the gap between fixed columns */ | |
| .first-fixed-column::after {{ | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| right: -1px; | |
| height: 100%; | |
| width: 1px; | |
| background-color: {dark_theme['table_border_color']}; | |
| }} | |
| .model-type-cell {{ | |
| width: 120px; | |
| text-align: center; | |
| }} | |
| .scroll-container {{ | |
| overflow-x: auto; | |
| border-radius: 8px; | |
| }} | |
| .header-row th {{ | |
| padding: 14px 8px; | |
| background-color: {dark_theme['table_bg']}; | |
| color: {dark_theme['text_color']}; | |
| font-weight: 600; | |
| border-bottom: 1px solid {dark_theme['table_border_color']}; | |
| }} | |
| .metric-header {{ | |
| background-color: {dark_theme['table_header_bg']} !important; | |
| color: #ffffff; | |
| padding: 14px 0px !important; | |
| text-align: center; | |
| font-weight: 600; | |
| letter-spacing: 0.5px; | |
| }} | |
| .sub-header th {{ | |
| padding: 12px 8px; | |
| background-color: {dark_theme['table_subheader_bg']}; | |
| color: {dark_theme['text_color']}; | |
| font-weight: 500; | |
| text-align: center; | |
| border-bottom: 1px solid {dark_theme['table_border_color']}; | |
| }} | |
| .sub-header th.overall-cell {{ | |
| background-color: {dark_theme['table_average_column_bg']}; /* Slightly lighter black for average column */ | |
| font-weight: 600; /* Make it bolder */ | |
| border-right: 1px solid #444; /* Add a subtle border to separate it */ | |
| }} | |
| .table-row:nth-child(odd) {{ | |
| background-color: {dark_theme['table_row_odd']}; | |
| }} | |
| .table-row:nth-child(even) {{ | |
| background-color: {dark_theme['table_row_even']}; | |
| }} | |
| .table-row:hover td {{ | |
| background-color: {dark_theme['table_hover_bg']} !important; | |
| }} | |
| .table-row:hover td.fixed-column {{ | |
| background-color: {dark_theme['table_hover_bg']} !important; | |
| }} | |
| .table-cell {{ | |
| padding: 12px 8px; | |
| text-align: center; | |
| border-bottom: 1px solid #222; | |
| }} | |
| .table-cell.overall-cell {{ | |
| background-color: rgba(80, 80, 80, 0.1); /* Subtle highlight */ | |
| font-weight: 600; /* Make average values bolder */ | |
| border-right: 1px solid #333; /* Add a border to separate it from task metrics */ | |
| }} | |
| .positive-value {{ | |
| color: {dark_theme['positive_value_color']} !important; | |
| font-weight: 500; | |
| }} | |
| .negative-value {{ | |
| color: {dark_theme['negative_value_color']} !important; | |
| font-weight: 500; | |
| }} | |
| """ | |
| def get_metric_styles(): | |
| """ | |
| Get CSS styles for metric displays | |
| Returns: | |
| str: CSS string for metric displays | |
| """ | |
| return f""" | |
| /* Metric styling */ | |
| .metric-header {{ | |
| background-color: {dark_theme['card_bg']}; | |
| border-radius: 8px; | |
| padding: 16px; | |
| margin-bottom: 16px; | |
| border-left: 4px solid {dark_theme['primary']}; | |
| }} | |
| .metric-header h3 {{ | |
| margin: 0; | |
| color: {dark_theme['primary']}; | |
| }} | |
| .metric-header p {{ | |
| margin: 8px 0 0 0; | |
| font-size: 14px; | |
| opacity: 0.8; | |
| }} | |
| /* Rank column styling */ | |
| .rank-cell {{ | |
| font-weight: 700 !important; | |
| background-color: {dark_theme['primary'] + '22'}; | |
| border-radius: 50%; | |
| width: 28px; | |
| height: 28px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| margin: 0 auto; | |
| }} | |
| .rank-1 {{ | |
| background-color: gold !important; | |
| color: #333 !important; | |
| }} | |
| .rank-2 {{ | |
| background-color: silver !important; | |
| color: #333 !important; | |
| }} | |
| .rank-3 {{ | |
| background-color: #cd7f32 !important; /* bronze */ | |
| color: #fff !important; | |
| }} | |
| """ | |
| def get_all_table_styles(): | |
| """ | |
| Get all table styles combined | |
| Returns: | |
| str: Combined CSS string for all tables | |
| """ | |
| styles = [ | |
| get_streamlit_table_styles(), | |
| get_custom_leaderboard_table_styles(), | |
| get_metric_styles() | |
| ] | |
| return '\n'.join(styles) |