MLRC_Bench / src /styles /tables.py
Armeddinosaur's picture
Adding MLRC Bench
ed2eb44
raw
history blame
6.99 kB
"""
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)