morphsql / demo /theme.py
waghelad's picture
Upload folder using huggingface_hub
12eff8e verified
Raw
History Blame Contribute Delete
7.69 kB
"""UI theme — dark shell with high-contrast tables/files."""
C_BG = "#0b1220"
C_PANEL = "#111827"
C_BORDER = "#334155"
C_TEXT = "#f1f5f9"
C_MUTED = "#cbd5e1"
C_ACCENT = "#3b82f6"
C_CODE_BG = "#020617"
C_CODE_FG = "#93c5fd"
C_TABLE_BG = "#0f172a"
C_TABLE_TEXT = "#f8fafc"
C_TABLE_HEADER = "#1e293b"
CUSTOM_CSS = f"""
.gradio-container {{
max-width: 1360px !important;
font-family: "IBM Plex Sans", "Segoe UI", system-ui, sans-serif !important;
background: {C_BG} !important;
color: {C_TEXT} !important;
}}
.header-block {{
border-bottom: 1px solid {C_BORDER};
padding-bottom: 1.1rem;
margin-bottom: 1rem;
}}
.header-block .eyebrow {{
font-size: 0.72rem;
letter-spacing: 0.14em;
font-weight: 600;
color: {C_ACCENT} !important;
margin-bottom: 0.4rem;
}}
.header-block h1 {{
font-size: 1.85rem;
font-weight: 700;
margin: 0;
color: {C_TEXT} !important;
letter-spacing: -0.02em;
}}
.header-block p {{
margin: 0.5rem 0 0;
color: {C_MUTED} !important;
font-size: 1.02rem;
max-width: 44rem;
line-height: 1.5;
}}
.footer-viral {{
color: {C_MUTED} !important;
font-size: 0.78rem;
margin-top: 1.5rem;
}}
.footer-viral a {{
color: {C_ACCENT} !important;
}}
/* Markdown / prose */
.prose, .markdown, .md, [class*="prose"] {{
color: {C_TEXT} !important;
}}
.prose h1, .prose h2, .prose h3, .prose h4,
.markdown h1, .markdown h2, .markdown h3, .markdown h4 {{
color: {C_TEXT} !important;
}}
.prose p, .prose li, .markdown p, .markdown li {{
color: {C_TEXT} !important;
}}
.prose strong, .markdown strong {{
color: #ffffff !important;
}}
.prose a, .markdown a {{
color: {C_ACCENT} !important;
}}
.prose code, .markdown code, code {{
background: {C_CODE_BG} !important;
color: {C_CODE_FG} !important;
border: 1px solid {C_BORDER} !important;
border-radius: 4px !important;
padding: 0.1rem 0.35rem !important;
}}
.prose pre, .markdown pre, pre {{
background: {C_CODE_BG} !important;
color: {C_TEXT} !important;
border: 1px solid {C_BORDER} !important;
border-radius: 8px !important;
}}
.prose pre code, .markdown pre code, pre code {{
background: transparent !important;
border: none !important;
color: {C_TEXT} !important;
}}
/* Guide markdown tables stay dark */
.prose table, .markdown table {{
border-color: {C_BORDER} !important;
}}
.prose th, .markdown th {{
background: {C_TABLE_HEADER} !important;
color: {C_TABLE_TEXT} !important;
}}
.prose td, .markdown td {{
color: {C_TABLE_TEXT} !important;
border-color: {C_BORDER} !important;
background: {C_TABLE_BG} !important;
}}
/* Code / inputs */
.cm-editor, .cm-content, .cm-line {{
background: {C_CODE_BG} !important;
color: {C_TEXT} !important;
}}
textarea, input {{
color: {C_TEXT} !important;
}}
/*
* CRITICAL: Gradio Dataframe + File often render white cells.
* Global light text then becomes invisible — force dark surfaces + light text.
*/
.preview-table table,
.preview-table th,
.preview-table td,
.preview-table .table-wrap,
.preview-table [data-testid="dataframe"] table,
.preview-table [data-testid="dataframe"] th,
.preview-table [data-testid="dataframe"] td {{
background: {C_TABLE_BG} !important;
color: {C_TABLE_TEXT} !important;
border-color: {C_BORDER} !important;
}}
.preview-table th {{
background: {C_TABLE_HEADER} !important;
font-weight: 600 !important;
}}
.preview-table tr:nth-child(even) td {{
background: #111827 !important;
}}
.download-box,
.download-box *,
.download-box a,
.download-box span,
.download-box label,
.download-box .file-preview,
.download-box [data-testid="file"] {{
color: {C_TABLE_TEXT} !important;
}}
.download-box .file,
.download-box .file-preview,
.download-box [data-testid="file"],
.download-box .wrap,
.download-box .or {{
background: {C_TABLE_BG} !important;
border: 1px solid {C_BORDER} !important;
border-radius: 8px !important;
color: {C_TABLE_TEXT} !important;
}}
.download-box a {{
color: {C_ACCENT} !important;
}}
/* Keep Convert / Upload actions compact — don't stretch to file-drop height */
.action-btn button,
.upload-action-btn button {{
height: 42px !important;
min-height: 42px !important;
max-height: 48px !important;
width: 100% !important;
white-space: normal !important;
line-height: 1.25 !important;
padding: 0.55rem 0.85rem !important;
}}
.upload-action-col {{
display: flex !important;
flex-direction: column !important;
justify-content: flex-start !important;
padding-top: 1.55rem !important; /* align with file label */
}}
.sql-upload-box {{
flex-grow: 1 !important;
}}
.sql-upload-box [data-testid="file"],
.sql-upload-box .wrap,
.sql-upload-box .upload-container {{
min-height: 7.5rem !important;
}}
/* Fallback for unscoped Gradio dataframe/file widgets */
[data-testid="dataframe"] table,
[data-testid="dataframe"] th,
[data-testid="dataframe"] td {{
background: {C_TABLE_BG} !important;
color: {C_TABLE_TEXT} !important;
border-color: {C_BORDER} !important;
}}
[data-testid="file"] .file-preview,
[data-testid="file"] .file {{
background: {C_TABLE_BG} !important;
color: {C_TABLE_TEXT} !important;
border: 1px solid {C_BORDER} !important;
}}
footer {{ display: none !important; }}
"""
def build_theme():
import gradio as gr
return gr.themes.Base(
primary_hue=gr.themes.colors.blue,
neutral_hue=gr.themes.colors.slate,
font=[gr.themes.GoogleFont("IBM Plex Sans"), "ui-sans-serif", "system-ui", "sans-serif"],
font_mono=[gr.themes.GoogleFont("IBM Plex Mono"), "ui-monospace", "monospace"],
).set(
body_background_fill=C_BG,
body_background_fill_dark=C_BG,
background_fill_primary=C_PANEL,
background_fill_primary_dark=C_PANEL,
background_fill_secondary="#0f172a",
background_fill_secondary_dark="#0f172a",
border_color_primary=C_BORDER,
border_color_primary_dark=C_BORDER,
body_text_color=C_TEXT,
body_text_color_dark=C_TEXT,
body_text_color_subdued=C_MUTED,
body_text_color_subdued_dark=C_MUTED,
block_background_fill=C_PANEL,
block_background_fill_dark=C_PANEL,
block_label_text_color=C_MUTED,
block_label_text_color_dark=C_MUTED,
block_title_text_color=C_TEXT,
block_title_text_color_dark=C_TEXT,
input_background_fill=C_CODE_BG,
input_background_fill_dark=C_CODE_BG,
input_border_color=C_BORDER,
input_border_color_dark=C_BORDER,
input_placeholder_color=C_MUTED,
input_placeholder_color_dark=C_MUTED,
button_primary_background_fill=C_ACCENT,
button_primary_background_fill_dark=C_ACCENT,
button_primary_text_color="#ffffff",
button_primary_text_color_dark="#ffffff",
button_secondary_background_fill="#1e293b",
button_secondary_background_fill_dark="#1e293b",
button_secondary_text_color=C_TEXT,
button_secondary_text_color_dark=C_TEXT,
link_text_color=C_ACCENT,
link_text_color_dark=C_ACCENT,
code_background_fill=C_CODE_BG,
code_background_fill_dark=C_CODE_BG,
table_even_background_fill=C_TABLE_BG,
table_even_background_fill_dark=C_TABLE_BG,
table_odd_background_fill="#111827",
table_odd_background_fill_dark="#111827",
table_row_focus=C_TABLE_HEADER,
table_row_focus_dark=C_TABLE_HEADER,
table_text_color=C_TABLE_TEXT,
table_text_color_dark=C_TABLE_TEXT,
table_radius="8px",
)
DARK_THEME = None