|
|
|
|
|
import streamlit as st
|
|
|
|
|
|
def apply_custom_css():
|
|
|
"""Apply custom CSS styling"""
|
|
|
st.markdown("""
|
|
|
<style>
|
|
|
|
|
|
[data-testid="stSidebarNav"] {
|
|
|
display: none !important;
|
|
|
}
|
|
|
.main-header {
|
|
|
font-size: 2.5rem;
|
|
|
color: #1f77b4;
|
|
|
text-align: center;
|
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
|
|
|
|
.metric-card {
|
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
padding: 1rem;
|
|
|
border-radius: 10px;
|
|
|
color: white;
|
|
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
|
.metric-value {
|
|
|
font-size: 1.8rem;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
.metric-label {
|
|
|
font-size: 0.9rem;
|
|
|
opacity: 0.9;
|
|
|
}
|
|
|
.section-header {
|
|
|
border-left: 5px solid #1f77b4;
|
|
|
padding-left: 1rem;
|
|
|
margin: 1.5rem 0 1rem 0;
|
|
|
font-size: 1.5rem;
|
|
|
}
|
|
|
.stButton button {
|
|
|
width: 100%;
|
|
|
}
|
|
|
@media (max-width: 768px) {
|
|
|
.main-header {
|
|
|
font-size: 2rem;
|
|
|
}
|
|
|
.metric-value {
|
|
|
font-size: 1.5rem;
|
|
|
}
|
|
|
}
|
|
|
</style>
|
|
|
""", unsafe_allow_html=True)
|
|
|
|
|
|
def create_metric_card(value, label, icon="๐", color="#1f77b4"):
|
|
|
"""Create a styled metric card"""
|
|
|
return f"""
|
|
|
<div class="metric-card" style="background: linear-gradient(135deg, {color} 0%, {color}88 100%);">
|
|
|
<div style="display: flex; justify-content: space-between; align-items: center;">
|
|
|
<div>
|
|
|
<div class="metric-value">{value}</div>
|
|
|
<div class="metric-label">{label}</div>
|
|
|
</div>
|
|
|
<div style="font-size: 2rem;">{icon}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
"""
|
|
|
|
|
|
COLORS = {
|
|
|
'primary': '#1f77b4',
|
|
|
'secondary': '#ff7f0e',
|
|
|
'success': '#2ca02c',
|
|
|
'danger': '#d62728',
|
|
|
'warning': '#ffbb78'
|
|
|
}
|
|
|
|