Spaces:
Runtime error
Runtime error
| /* ============================================================ | |
| BioLitAI-X β Global Theme | |
| Dark design system: background #0A0F1E, surface #111827 | |
| ============================================================ */ | |
| @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&family=JetBrains+Mono:wght@400;500&display=swap'); | |
| /* ββ Reset / base ββββββββββββββββββββββββββββββββββββββββββ */ | |
| html, | |
| body, | |
| [class*="css"] { | |
| background-color: #0A0F1E; | |
| color: #F9FAFB; | |
| font-family: 'Open Sans', Arial, sans-serif; | |
| line-height: 1.6; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| /* ββ Hide default Streamlit chrome βββββββββββββββββββββββββ */ | |
| #MainMenu { visibility: hidden; } | |
| footer { visibility: hidden; } | |
| [data-testid="stDecoration"] { display: none ; } | |
| /* Header: natural height so the sidebar toggle renders correctly. | |
| Styled dark to match the app theme. */ | |
| [data-testid="stHeader"] { | |
| background-color : #0A0F1E ; | |
| } | |
| /* Toolbar: transparent background, hide only the Deploy button. */ | |
| [data-testid="stToolbar"] { background-color : transparent ; } | |
| [data-testid="stAppDeployButton"] { display : none ; } | |
| [data-testid="stDeployButton"] { display : none ; } | |
| /* ββ App container βββββββββββββββββββββββββββββββββββββββββ */ | |
| .stApp { | |
| background-color: #0A0F1E; | |
| } | |
| .main .block-container { | |
| padding-top: 2rem; | |
| padding-bottom: 4rem; | |
| max-width: 1400px; | |
| animation: fadeIn 200ms ease-out; | |
| } | |
| /* ββ Sidebar βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| /* Only style appearance β do NOT force width/display/visibility. | |
| Forcing min-width/width keeps 240 px of blank space on the left | |
| when the sidebar is collapsed because CSS transform doesn't | |
| remove elements from the document flow. */ | |
| section[data-testid="stSidebar"], | |
| [data-testid="stSidebar"] { | |
| background-color: #111827 ; | |
| border-right: 1px solid #1F2937 ; | |
| } | |
| [data-testid="stSidebar"] .block-container { | |
| padding-top: 1.5rem; | |
| padding-bottom: 2rem; | |
| } | |
| [data-testid="stSidebar"] * { | |
| color: #F9FAFB; | |
| } | |
| /* ββ Metric containers βββββββββββββββββββββββββββββββββββββ */ | |
| [data-testid="stMetric"], | |
| div.metric-card { | |
| background: #1C2539; | |
| border-radius: 8px; | |
| padding: 1.5rem; | |
| box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); | |
| transition: transform 200ms ease, box-shadow 200ms ease; | |
| } | |
| [data-testid="stMetric"]:hover, | |
| div.metric-card:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 8px 16px rgba(0, 0, 0, 0.4); | |
| } | |
| [data-testid="stMetricLabel"] { | |
| color: #9CA3AF; | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| [data-testid="stMetricValue"] { | |
| color: #F9FAFB; | |
| font-size: 2rem; | |
| font-weight: 700; | |
| } | |
| [data-testid="stMetricDelta"] { | |
| font-size: 0.85rem; | |
| } | |
| /* ββ Buttons βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .stButton > button { | |
| background: #3B82F6; | |
| color: #FFFFFF; | |
| border: none; | |
| border-radius: 6px; | |
| padding: 0.5rem 1.25rem; | |
| font-family: 'Open Sans', Arial, sans-serif; | |
| font-weight: 600; | |
| font-size: 0.875rem; | |
| cursor: pointer; | |
| transition: background-color 150ms ease, transform 100ms ease, | |
| box-shadow 150ms ease; | |
| } | |
| .stButton > button:hover { | |
| background: #2563EB; | |
| box-shadow: 0 4px 12px rgba(59, 130, 246, 0.35); | |
| } | |
| .stButton > button:active { | |
| transform: scale(0.97); | |
| background: #1D4ED8; | |
| } | |
| .stButton > button:focus { | |
| outline: 2px solid #3B82F6; | |
| outline-offset: 2px; | |
| } | |
| /* Secondary button variant */ | |
| .stButton > button[kind="secondary"] { | |
| background: #1C2539; | |
| border: 1px solid #1F2937; | |
| color: #9CA3AF; | |
| } | |
| .stButton > button[kind="secondary"]:hover { | |
| background: #243047; | |
| color: #F9FAFB; | |
| } | |
| /* ββ Input fields βββββββββββββββββββββββββββββββββββββββββββ */ | |
| .stTextInput > div > div > input, | |
| .stTextArea > div > div > textarea, | |
| .stNumberInput > div > div > input { | |
| background: #111827; | |
| border: 1px solid #1F2937; | |
| border-radius: 6px; | |
| color: #F9FAFB; | |
| font-family: 'Open Sans', Arial, sans-serif; | |
| font-size: 0.875rem; | |
| padding: 0.5rem 0.75rem; | |
| transition: border-color 150ms ease, box-shadow 150ms ease; | |
| } | |
| .stTextInput > div > div > input:focus, | |
| .stTextArea > div > div > textarea:focus, | |
| .stNumberInput > div > div > input:focus { | |
| border-color: #3B82F6; | |
| box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3); | |
| outline: none; | |
| } | |
| .stTextInput > div > div > input::placeholder, | |
| .stTextArea > div > div > textarea::placeholder { | |
| color: #6B7280; | |
| } | |
| /* ββ Selectbox / Multiselect βββββββββββββββββββββββββββββββ */ | |
| .stSelectbox > div > div, | |
| .stMultiselect > div > div { | |
| background: #111827; | |
| border: 1px solid #1F2937; | |
| border-radius: 6px; | |
| color: #F9FAFB; | |
| } | |
| .stSelectbox > div > div:hover, | |
| .stMultiselect > div > div:hover { | |
| border-color: #3B82F6; | |
| } | |
| [data-baseweb="select"] > div { | |
| background: #111827 ; | |
| border-color: #1F2937 ; | |
| color: #F9FAFB ; | |
| } | |
| [data-baseweb="popover"] { | |
| background: #1C2539 ; | |
| border: 1px solid #1F2937 ; | |
| } | |
| [data-baseweb="menu"] { | |
| background: #1C2539 ; | |
| } | |
| [data-baseweb="option"]:hover { | |
| background: #243047 ; | |
| } | |
| /* ββ Slider ββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .stSlider > div > div > div > div { | |
| background: #3B82F6; | |
| } | |
| .stSlider [data-baseweb="slider"] div[role="slider"] { | |
| background: #3B82F6; | |
| border: 2px solid #1D4ED8; | |
| } | |
| /* ββ Radio / Checkbox ββββββββββββββββββββββββββββββββββββββ */ | |
| .stRadio > label, | |
| .stCheckbox > label { | |
| color: #F9FAFB; | |
| } | |
| /* ββ Tabs ββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .stTabs [data-baseweb="tab-list"] { | |
| background: #111827; | |
| border-bottom: 1px solid #1F2937; | |
| gap: 0.25rem; | |
| } | |
| .stTabs [data-baseweb="tab"] { | |
| background: transparent; | |
| color: #9CA3AF; | |
| border-radius: 6px 6px 0 0; | |
| font-weight: 600; | |
| padding: 0.5rem 1rem; | |
| transition: color 150ms ease, background-color 150ms ease; | |
| } | |
| .stTabs [data-baseweb="tab"]:hover { | |
| color: #F9FAFB; | |
| background: #1C2539; | |
| } | |
| .stTabs [aria-selected="true"] { | |
| color: #3B82F6 ; | |
| border-bottom: 2px solid #3B82F6 ; | |
| background: transparent ; | |
| } | |
| /* ββ Expander ββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .streamlit-expanderHeader { | |
| background: #1C2539; | |
| border: 1px solid #1F2937; | |
| border-radius: 6px; | |
| color: #F9FAFB; | |
| font-weight: 600; | |
| } | |
| .streamlit-expanderContent { | |
| background: #111827; | |
| border: 1px solid #1F2937; | |
| border-top: none; | |
| border-radius: 0 0 6px 6px; | |
| } | |
| /* ββ Dataframe / table βββββββββββββββββββββββββββββββββββββ */ | |
| .stDataFrame, | |
| .dataframe { | |
| background: #111827; | |
| color: #F9FAFB; | |
| border-radius: 8px; | |
| border: 1px solid #1F2937; | |
| font-size: 0.85rem; | |
| } | |
| .stDataFrame thead th { | |
| background: #1C2539; | |
| color: #9CA3AF; | |
| font-weight: 600; | |
| border-bottom: 1px solid #1F2937; | |
| padding: 0.6rem 1rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.04em; | |
| font-size: 0.75rem; | |
| } | |
| .stDataFrame tbody tr { | |
| border-bottom: 1px solid #1F2937; | |
| transition: background 120ms ease; | |
| } | |
| .stDataFrame tbody tr:hover { | |
| background: #1C2539; | |
| } | |
| .stDataFrame tbody td { | |
| color: #F9FAFB; | |
| padding: 0.55rem 1rem; | |
| } | |
| /* ββ Progress bar ββββββββββββββββββββββββββββββββββββββββββ */ | |
| .stProgress > div > div > div > div { | |
| background: #3B82F6; | |
| border-radius: 4px; | |
| } | |
| .stProgress > div > div > div { | |
| background: #1C2539; | |
| border-radius: 4px; | |
| } | |
| /* ββ Alert / info boxes ββββββββββββββββββββββββββββββββββββ */ | |
| .stAlert { | |
| border-radius: 8px; | |
| border-left-width: 4px; | |
| } | |
| [data-baseweb="notification"] { | |
| background: #1C2539 ; | |
| border-radius: 8px ; | |
| color: #F9FAFB ; | |
| } | |
| /* ββ Spinner βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .stSpinner > div { | |
| border-top-color: #3B82F6 ; | |
| } | |
| /* ββ Code / monospace ββββββββββββββββββββββββββββββββββββββ */ | |
| code, | |
| pre, | |
| .mono { | |
| font-family: 'JetBrains Mono', 'Courier New', monospace; | |
| background: #1C2539; | |
| border-radius: 4px; | |
| color: #34C78A; | |
| } | |
| code { | |
| padding: 0.1em 0.4em; | |
| font-size: 0.85em; | |
| } | |
| pre { | |
| padding: 1rem; | |
| overflow-x: auto; | |
| border: 1px solid #1F2937; | |
| } | |
| /* ββ Scrollbar βββββββββββββββββββββββββββββββββββββββββββββ */ | |
| ::-webkit-scrollbar { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: #111827; | |
| border-radius: 3px; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: #3B82F6; | |
| border-radius: 3px; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background: #2563EB; | |
| } | |
| /* ββ Sidebar nav items βββββββββββββββββββββββββββββββββββββ */ | |
| [data-testid="stSidebar"] .stRadio > div > label, | |
| [data-testid="stSidebar"] .stSelectbox > div > div { | |
| transition: background-color 180ms ease, color 180ms ease; | |
| border-radius: 6px; | |
| padding: 0.3rem 0.5rem; | |
| } | |
| [data-testid="stSidebar"] .stRadio > div > label:hover { | |
| background: #1C2539; | |
| color: #3B82F6; | |
| } | |
| /* ββ Divider βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| hr { | |
| border: none; | |
| border-top: 1px solid #1F2937; | |
| margin: 1.5rem 0; | |
| } | |
| /* ββ Tooltip βββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| [data-baseweb="tooltip"] { | |
| background: #1C2539 ; | |
| color: #F9FAFB ; | |
| border: 1px solid #1F2937 ; | |
| border-radius: 6px ; | |
| font-size: 0.8rem ; | |
| } | |
| /* ββ Page entry animation ββββββββββββββββββββββββββββββββββ */ | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(6px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| /* ββ Skeleton / shimmer loading ββββββββββββββββββββββββββββ */ | |
| @keyframes shimmer { | |
| 0% { | |
| background-position: -1000px 0; | |
| } | |
| 100% { | |
| background-position: 1000px 0; | |
| } | |
| } | |
| .skeleton { | |
| background: linear-gradient( | |
| 90deg, | |
| #1C2539 25%, | |
| #243047 50%, | |
| #1C2539 75% | |
| ); | |
| background-size: 2000px 100%; | |
| animation: shimmer 1.8s infinite linear; | |
| border-radius: 6px; | |
| } | |
| /* ββ Utility classes βββββββββββββββββββββββββββββββββββββββ */ | |
| .text-primary { color: #F9FAFB; } | |
| .text-secondary { color: #9CA3AF; } | |
| .text-accent { color: #3B82F6; } | |
| .text-success { color: #10B981; } | |
| .text-warning { color: #F59E0B; } | |
| .text-danger { color: #EF4444; } | |
| .bg-surface { background: #111827; } | |
| .bg-elevated { background: #1C2539; } | |
| .rounded { border-radius: 8px; } | |
| .border { border: 1px solid #1F2937; } | |
| /* ββ Plotly chart containers βββββββββββββββββββββββββββββββ */ | |
| .stPlotlyChart { | |
| border-radius: 8px; | |
| overflow: hidden; | |
| } | |
| /* ββ iframe (Pyvis network) ββββββββββββββββββββββββββββββββ */ | |
| iframe { | |
| border-radius: 8px; | |
| border: 1px solid #1F2937; | |
| } | |