Summary
Establish the visual design system used by all subsequent visualization issues. This is a prerequisite for all other UI work.
See mockup: assets/dashboard_mockup.png
Palette — Deep Space Indigo
| Role |
Hex |
| App background |
#0c1120 |
| Card background |
#141c2f |
| Sidebar background |
#090e1a |
| Lifted / hover |
#1e293b |
| Border |
#2d3a52 |
| Primary text |
#f0f4ff |
| Secondary text |
#8895a7 |
| Muted text |
#4b5a72 |
| Primary accent (indigo) |
#6366f1 |
| Chart 2 (cyan) |
#22d3ee |
| Chart 3 (pink) |
#f472b6 |
| Chart 4 (purple) |
#a855f7 |
| Chart 5 (green) |
#22c55e |
| Chart 6 (orange) |
#f97316 |
| Chart 7 (yellow) |
#facc15 |
Deliverables
1. .streamlit/config.toml
[theme]
base = "dark"
primaryColor = "#6366f1"
backgroundColor = "#0c1120"
secondaryBackgroundColor = "#141c2f"
textColor = "#f0f4ff"
borderColor = "#2d3a52"
font = "Inter:https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
chartCategoricalColors = ["#6366f1","#22d3ee","#f472b6","#a855f7","#22c55e","#f97316","#facc15"]
2. core/theme.py — global Plotly template
Define an autobio_dark Plotly template and set it as pio.templates.default. Import this module once at the top of visualize.py so all px.* charts inherit it automatically. Template must set paper_bgcolor, plot_bgcolor, font, colorway, axis grid colors, hover label styling, and legend styling.
3. CSS injection in visualize.py
Inject via st.markdown(..., unsafe_allow_html=True):
- Hide Streamlit's default header/footer chrome
.block-container { padding-top: 1.5rem } for tighter layout
- Card border-radius and box-shadow defaults
4. requirements.txt
Add streamlit-extras for style_metric_cards().
Acceptance criteria
Summary
Establish the visual design system used by all subsequent visualization issues. This is a prerequisite for all other UI work.
See mockup:
assets/dashboard_mockup.pngPalette — Deep Space Indigo
#0c1120#141c2f#090e1a#1e293b#2d3a52#f0f4ff#8895a7#4b5a72#6366f1#22d3ee#f472b6#a855f7#22c55e#f97316#facc15Deliverables
1.
.streamlit/config.toml2.
core/theme.py— global Plotly templateDefine an
autobio_darkPlotly template and set it aspio.templates.default. Import this module once at the top ofvisualize.pyso allpx.*charts inherit it automatically. Template must setpaper_bgcolor,plot_bgcolor,font,colorway, axis grid colors, hover label styling, and legend styling.3. CSS injection in
visualize.pyInject via
st.markdown(..., unsafe_allow_html=True):.block-container { padding-top: 1.5rem }for tighter layout4.
requirements.txtAdd
streamlit-extrasforstyle_metric_cards().Acceptance criteria
streamlit run visualize.pyloads with dark background, Inter font, indigo accentpx.*charts automatically use the dark template without per-chart changesruff check .,mypy, andpytestall pass