Cook_with_a_LLM / src /ui /theme.py
Fred1e4's picture
Complete Cook App (#5)
75c5414
"""Gradio theme + global CSS for the recipe-card look."""
from __future__ import annotations
import gradio as gr
theme = gr.themes.Soft(
primary_hue="orange",
neutral_hue="stone",
font=[gr.themes.GoogleFont("Inter"), "sans-serif"],
font_mono=[gr.themes.GoogleFont("JetBrains Mono"), "monospace"],
)
CSS = """
@import url('https://fonts.googleapis.com/css2?family=Lora:wght@400;700&display=swap');
/* ---------------------------------------------------------------------------
Force a warm light palette regardless of the browser/system dark mode.
We pin the parchment background, so we must also pin DARK text colours via
Gradio's CSS variables — otherwise dark-mode users get white text on the
light background and it disappears.
--------------------------------------------------------------------------- */
.gradio-container, .gradio-container.dark {
background: #f5ecd9 !important;
color-scheme: light !important;
--body-text-color: #4a3722;
--body-text-color-subdued: #7a5a35;
--block-title-text-color: #6b4a2a;
--block-label-text-color: #6b4a2a;
--block-info-text-color: #7a5a35;
--block-background-fill: #fffbf0;
--input-background-fill: #fffbf0;
--border-color-primary: #d8c9ad;
--color-accent-soft: #fbe2d2;
}
/* Blanket dark text for native Gradio text elements (covers dark mode) */
.gradio-container,
.gradio-container .prose,
.gradio-container label,
.gradio-container .gr-text,
.gradio-container span,
.gradio-container p,
.gradio-container .gr-check-radio label,
.gradio-container .wrap,
.gradio-container .gr-form,
.gradio-container .tab-nav button,
.gradio-container .gr-accordion,
.gradio-container input,
.gradio-container textarea {
color: #4a3722 !important;
}
.gradio-container .prose h1,
.gradio-container .prose h2,
.gradio-container .prose h3 { font-family: 'Lora', serif !important; color: #6b4a2a !important; }
/* Tabs: dark labels, terracotta active */
.gradio-container .tab-nav button { color: #6b4a2a !important; }
.gradio-container .tab-nav button.selected {
color: #a85c2a !important; border-bottom-color: #a85c2a !important;
}
/* Native blocks (inputs, radio, checkbox, number) on warm cards */
.gradio-container .block,
.gradio-container .form,
.gradio-container input[type="text"],
.gradio-container input[type="number"] {
background: #fffbf0 !important;
border-color: #d8c9ad !important;
}
/* Generic container shared by every HTMLComponent */
.cwm-card {
border: 1px solid #d8c9ad;
border-radius: 14px;
padding: 22px 26px;
box-shadow: 0 8px 24px rgba(107, 74, 42, 0.08);
}
button.primary, .gr-button-primary {
background: #a85c2a !important;
color: #fffbf0 !important;
font-weight: 600 !important;
font-size: 16px !important;
padding: 12px 22px !important;
}
"""