# dashboard_theme/theme.py # 다중 팔레트 지원 (기본: Navy×Amber / 대안: Obsidian×Cyan / Graphite×Warm Orange) import streamlit as st PALETTES = { # 1) 기존 네이비 × 앰버 "navy_amber": { "bg": "#0B1220", "panel": "#0F1B2D", "panel2": "#0B1627", "border": "rgba(255,255,255,.06)", "shadow": "0 12px 28px rgba(0,0,0,.40)", "text": "#FFFFFF", "muted": "#9FB1C5", "accent": "#F59E0B", "accent_soft": "rgba(245,158,11,.12)", "disabled_bg": "#2A2F3A", "disabled_fg": "#E0E6ED", "placeholder": "rgba(255,255,255,.9)", "sidebar_bg": "#0C1828", "radio_bg": "#0E1A2B", "radio_hover": "#112642", }, # 2) 오브시디언 × 시안 "obsidian_cyan": { "bg": "#0B0F14", "panel": "#0F1720", "panel2": "#0B131C", "border": "rgba(255,255,255,.08)", "shadow": "0 16px 32px rgba(0,0,0,.55)", "text": "#F8FAFC", "muted": "#A7C4D6", "accent": "#22D3EE", "accent_soft": "rgba(34,211,238,.14)", "disabled_bg": "#26313A", "disabled_fg": "#E6F6FA", "placeholder": "rgba(240,249,255,.92)", "sidebar_bg": "#0F141A", "radio_bg": "#0F1720", "radio_hover": "#13202B", }, # 3) Graphite × Warm Orange (Simulation 페이지 톤과 일치) "graphite_gold": { "bg": "#2F3136", # 전체 배경(짙은 그레이) "panel": "#3B3E44", # 카드/패널 "panel2": "#2B2D31", # 표/보조 "border": "rgba(255,255,255,.10)", "shadow": "0 16px 40px rgba(0,0,0,.45)", "text": "#F6F7F9", "muted": "#C9CDD2", "accent": "#F59E0B", # 따뜻한 주황(눈부심 적음) "accent_soft": "rgba(245,158,11,.18)", "disabled_bg": "#4A4E55", "disabled_fg": "#F1F3F6", "placeholder": "rgba(250,250,252,.85)", "sidebar_bg": "#3A3D42", "radio_bg": "#3B3E44", "radio_hover": "#454950", }, } def setup_page(): st.set_page_config(page_title="시뮬레이션", layout="wide", initial_sidebar_state="expanded") def _css_template(c): return f""" """ def inject_css(palette: str = "navy_amber"): c = PALETTES.get(palette, PALETTES["navy_amber"]) st.markdown(_css_template(c), unsafe_allow_html=True) def inject(palette: str = "navy_amber"): """예) inject('graphite_gold')""" setup_page() inject_css(palette)