Spaces:
Running
Running
from src.utils.config import dark_theme | |
def get_base_styles(): | |
"""Returns the base CSS styles for the page""" | |
return f""" | |
<style> | |
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); | |
html, body, [class*="css"] {{ | |
font-family: 'Inter', sans-serif; | |
background-color: {dark_theme['bg_color']}; | |
color: {dark_theme['text_color']}; | |
}} | |
h1, h2, h3, h4, h5, h6 {{ | |
font-family: 'Inter', sans-serif; | |
font-weight: 600; | |
color: {dark_theme['heading_color']}; | |
}} | |
.main {{ | |
background-color: {dark_theme['bg_color']}; | |
}} | |
.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']}; | |
}} | |
.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; | |
}} | |
.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; | |
}} | |
/* 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; | |
}} | |
/* 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; | |
}} | |
/* Metric header 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; | |
}} | |
/* 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; | |
}} | |
/* 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']}; | |
}} | |
/* Download buttons styling */ | |
.download-button {{ | |
background-color: {dark_theme['bg_color']}; | |
border: 1px solid {dark_theme['border']}; | |
border-radius: 8px; | |
padding: 12px 20px; | |
display: inline-flex; | |
align-items: center; | |
justify-content: center; | |
color: {dark_theme['text_color']}; | |
font-weight: 500; | |
margin-top: 16px; | |
cursor: pointer; | |
transition: all 0.2s; | |
}} | |
.download-button:hover {{ | |
background-color: {dark_theme['hover']}; | |
border-color: {dark_theme['border']}; | |
transform: translateY(-1px); | |
}} | |
.download-button .icon {{ | |
margin-right: 8px; | |
}} | |
/* 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']}; | |
}} | |
/* Badge styling for model types */ | |
.badge {{ | |
display: inline-block; | |
padding: 4px 8px; | |
font-size: 12px; | |
font-weight: 500; | |
border-radius: 6px; | |
margin-right: 6px; | |
}} | |
.badge-purple {{ | |
background-color: {dark_theme['primary'] + '33'}; | |
color: {dark_theme['primary']}; | |
}} | |
.badge-blue {{ | |
background-color: {dark_theme['info_border'] + '33'}; | |
color: {dark_theme['info_border']}; | |
}} | |
.selected-items {{ | |
background-color: {dark_theme['hover']}; | |
border-radius: 8px; | |
padding: 12px 16px; | |
margin-top: 16px; | |
font-size: 14px; | |
}} | |
/* Selectbox styling */ | |
div[data-baseweb="select"] {{ | |
border-radius: 8px !important; | |
}} | |
div[data-baseweb="select"] > div {{ | |
background-color: {dark_theme['card_bg']} !important; | |
border-radius: 8px !important; | |
border-color: {dark_theme['border']} !important; | |
color: {dark_theme['text_color']} !important; | |
}} | |
div[data-baseweb="select"] > div:hover {{ | |
border-color: {dark_theme['border']} !important; | |
}} | |
/* Table hover and value styling */ | |
.table-row:hover td {{ | |
background-color: #1a1a1a !important; | |
}} | |
.table-row:hover td.fixed-column {{ | |
background-color: #1a1a1a !important; | |
}} | |
.positive-value {{ | |
color: #4ade80 !important; /* Bright green for positive values */ | |
font-weight: 500; | |
}} | |
.negative-value {{ | |
color: #f87171 !important; /* Bright red for negative values */ | |
font-weight: 500; | |
}} | |
</style> | |
""" |