Thread-Pulse / src /custom.css
Threadbourne's picture
Upload custom.css
1195a7f verified
Raw
History Blame Contribute Delete
13.9 kB
/* uglytool.dev — Clean Room theme (v1)
* See README.md for drop-in instructions for Gradio + Streamlit.
* You bought this file. Modify whatever you want — tweak the blue,
* swap the font, remove the credit. It's yours now.
*/
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
/* ============================================================
* Part 1 — Theme variables
* ============================================================ */
:root,
:root.dark,
.gradio-container,
.gradio-container.dark,
body.dark {
--cr-bg: #ffffff;
--cr-surface: #f7f8fa;
--cr-surface-2: #eceef1;
--cr-border: rgba(17, 24, 39, 0.1);
--cr-border-soft: rgba(17, 24, 39, 0.05);
--cr-border-focus: #2563a8;
--cr-blue: #2563a8;
--cr-blue-soft: rgba(37, 99, 168, 0.08);
--cr-blue-dim: rgba(37, 99, 168, 0.25);
--cr-ink: #111827;
--cr-muted: #6b7280;
--cr-dim: #9ca3af;
--body-background-fill: var(--cr-bg);
--background-fill-primary: var(--cr-surface);
--background-fill-secondary: var(--cr-surface-2);
--body-text-color: var(--cr-ink);
--body-text-color-subdued: var(--cr-muted);
--color-accent: var(--cr-blue);
--color-accent-soft: var(--cr-blue-soft);
--border-color-primary: var(--cr-border);
--border-color-accent: var(--cr-blue);
--block-background-fill: var(--cr-surface);
--block-border-color: var(--cr-border);
--block-border-width: 1px;
--block-radius: 3px;
--block-shadow: none;
--block-title-background-fill: transparent;
--block-title-border-color: transparent;
--block-title-text-color: var(--cr-ink);
--block-title-text-size: 0.78rem;
--block-title-text-weight: 600;
--block-label-background-fill: transparent;
--block-label-border-color: transparent;
--block-label-text-color: var(--cr-ink);
--block-label-text-size: 0.75rem;
--block-label-text-weight: 600;
--input-background-fill: var(--cr-bg);
--input-background-fill-focus: var(--cr-bg);
--input-border-color: var(--cr-border);
--input-border-color-focus: var(--cr-blue);
--input-text-size: 0.92rem;
--input-radius: 3px;
--button-primary-background-fill: var(--cr-blue);
--button-primary-background-fill-hover: #1f5596;
--button-primary-text-color: var(--cr-bg);
--button-primary-text-color-hover: var(--cr-bg);
--button-primary-border-color: var(--cr-blue);
--button-secondary-background-fill: var(--cr-bg);
--button-secondary-background-fill-hover: var(--cr-blue-soft);
--button-secondary-text-color: var(--cr-blue);
--button-secondary-text-color-hover: var(--cr-blue);
--button-secondary-border-color: var(--cr-border);
--button-large-text-size: 0.82rem;
--button-large-text-weight: 600;
--button-large-radius: 3px;
--slider-color: var(--cr-blue);
--font: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif;
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
--radius-xxs: 1px;
--radius-xs: 2px;
--radius-sm: 3px;
--radius-md: 4px;
--radius-lg: 6px;
}
/* ============================================================
* Part 2 — Root containers
* ============================================================ */
html body,
html body.dark,
html body .gradio-container,
html body .gradio-container.dark,
html body .stApp,
html body .stApp > div,
html body [data-testid="stAppViewContainer"] {
background: var(--cr-bg) !important;
color: var(--cr-ink) !important;
font-family: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif !important;
-webkit-font-smoothing: antialiased !important;
}
html body .main .block-container,
html body .stApp [data-testid="stVerticalBlock"] {
background: var(--cr-bg) !important;
}
/* ============================================================
* Part 3 — Typography
* Headings: Plus Jakarta bold, ink color.
* Labels: all-caps Plus Jakarta at 0.75rem, ink color, 0.1em tracking.
* Blue is reserved for indices, focus states, buttons.
* ============================================================ */
html body h1, html body h2, html body h3, html body h4, html body h5, html body h6,
html body .gradio-container h1, html body .gradio-container h2, html body .gradio-container h3,
html body .gradio-container h4, html body .gradio-container h5, html body .gradio-container h6,
html body .gradio-container h1 *, html body .gradio-container h2 *, html body .gradio-container h3 *,
html body .prose h1, html body .prose h2, html body .prose h3, html body .prose h4,
html body .prose h1 *, html body .prose h2 *, html body .prose h3 *,
html body .markdown h1, html body .markdown h2, html body .markdown h3,
html body .markdown h1 *, html body .markdown h2 *, html body .markdown h3 *,
html body .gr-markdown h1, html body .gr-markdown h2, html body .gr-markdown h3,
html body .gr-markdown h1 *, html body .gr-markdown h2 *, html body .gr-markdown h3 *,
html body .stApp h1, html body .stApp h2, html body .stApp h3,
html body [data-testid="stMarkdownContainer"] h1,
html body [data-testid="stMarkdownContainer"] h2,
html body [data-testid="stMarkdownContainer"] h3,
html body [data-testid="stMarkdownContainer"] h1 *,
html body [data-testid="stMarkdownContainer"] h2 *,
html body [data-testid="stMarkdownContainer"] h3 * {
font-family: 'Plus Jakarta Sans', ui-sans-serif, sans-serif !important;
font-weight: 700 !important;
letter-spacing: -0.02em !important;
color: var(--cr-ink) !important;
-webkit-text-fill-color: var(--cr-ink) !important;
background-image: none !important;
background-clip: unset !important;
-webkit-background-clip: unset !important;
line-height: 1.15 !important;
}
/* Labels — all-caps Plus Jakarta, ink, narrow tracking. */
html body .gradio-container .block-label,
html body .gradio-container .block-label *,
html body .gradio-container label,
html body .gradio-container label > *,
html body .gradio-container [class*="label-wrap"],
html body .gradio-container [class*="label-wrap"] *,
html body .gradio-container [data-testid*="label"],
html body .gradio-container .wrap > label,
html body .stApp label,
html body .stApp [data-testid="stWidgetLabel"],
html body .stApp [data-testid="stWidgetLabel"] > *,
html body .stApp [data-testid="stWidgetLabel"] p {
font-family: 'Plus Jakarta Sans', ui-sans-serif, sans-serif !important;
font-size: 0.75rem !important;
color: var(--cr-ink) !important;
letter-spacing: 0.1em !important;
text-transform: uppercase !important;
font-weight: 600 !important;
background: transparent !important;
}
/* ============================================================
* Part 4 — Blocks / cards
* ============================================================ */
html body .gradio-container .block,
html body .gradio-container .gr-block,
html body .gradio-container .gr-padded,
html body .gradio-container .gr-form,
html body .gradio-container .gr-box,
html body .gradio-container .wrap,
html body .stApp [data-testid="stForm"],
html body .stApp [data-testid="stExpander"] {
background: var(--cr-surface) !important;
border: 1px solid var(--cr-border) !important;
border-radius: 3px !important;
}
/* ============================================================
* Part 5 — Inputs
* ============================================================ */
html body .gradio-container input[type="text"],
html body .gradio-container input[type="number"],
html body .gradio-container input[type="email"],
html body .gradio-container input[type="password"],
html body .gradio-container input[type="search"],
html body .gradio-container textarea,
html body .gradio-container select,
html body .gradio-container .gr-textbox,
html body .gradio-container .gr-textbox textarea,
html body .gradio-container .gr-textbox input,
html body .stApp input[type="text"],
html body .stApp input[type="number"],
html body .stApp textarea,
html body .stApp [data-baseweb="select"] > div,
html body .stApp [data-baseweb="input"] {
background: var(--cr-bg) !important;
border: 1px solid var(--cr-border) !important;
border-radius: 3px !important;
color: var(--cr-ink) !important;
font-family: 'Plus Jakarta Sans', ui-sans-serif, sans-serif !important;
font-size: 0.92rem !important;
caret-color: var(--cr-blue) !important;
padding: 10px 12px !important;
line-height: 1.5 !important;
}
html body .gradio-container textarea,
html body .stApp textarea {
min-height: 130px !important;
background: var(--cr-surface) !important;
}
html body .gradio-container input:focus,
html body .gradio-container textarea:focus,
html body .gradio-container select:focus,
html body .stApp input:focus,
html body .stApp textarea:focus {
border-color: var(--cr-blue) !important;
outline: none !important;
box-shadow: 0 0 0 3px var(--cr-blue-soft) !important;
}
html body .gradio-container ::placeholder,
html body .stApp ::placeholder {
color: var(--cr-dim) !important;
}
/* ============================================================
* Part 6 — Buttons (blue, uppercase Plus Jakarta, small radius)
* ============================================================ */
html body .gradio-container button,
html body .gradio-container .gr-button,
html body .gradio-container [class*="gr-button"],
html body .gradio-container button.primary,
html body .gradio-container .primary,
html body .stApp .stButton > button,
html body .stApp button[kind="primary"] {
background: var(--cr-blue) !important;
color: var(--cr-bg) !important;
font-family: 'Plus Jakarta Sans', ui-sans-serif, sans-serif !important;
font-weight: 600 !important;
font-size: 0.82rem !important;
letter-spacing: 0.12em !important;
text-transform: uppercase !important;
border: 1px solid var(--cr-blue) !important;
border-radius: 3px !important;
padding: 12px 20px !important;
cursor: pointer !important;
transition: background 150ms, transform 100ms !important;
}
html body .gradio-container button:hover,
html body .gradio-container .gr-button:hover,
html body .stApp .stButton > button:hover {
background: #1f5596 !important;
border-color: #1f5596 !important;
color: var(--cr-bg) !important;
}
html body .gradio-container button:active,
html body .stApp .stButton > button:active {
transform: scale(0.996) !important;
}
html body .gradio-container button.secondary,
html body .gradio-container .secondary,
html body .stApp button[kind="secondary"] {
background: var(--cr-bg) !important;
color: var(--cr-blue) !important;
border: 1px solid var(--cr-border) !important;
}
/* ============================================================
* Part 7 — Sliders, checkboxes, radios
* ============================================================ */
html body input[type="range"] { accent-color: var(--cr-blue) !important; }
html body input[type="range"]::-webkit-slider-thumb {
background: var(--cr-blue) !important;
border: 2px solid var(--cr-bg) !important;
box-shadow: 0 0 0 1px var(--cr-blue-dim) !important;
}
html body input[type="range"]::-moz-range-thumb {
background: var(--cr-blue) !important;
border: 2px solid var(--cr-bg) !important;
}
html body input[type="checkbox"],
html body input[type="radio"] {
accent-color: var(--cr-blue) !important;
}
/* ============================================================
* Part 8 — File uploads
* ============================================================ */
html body .gradio-container .gr-file-upload,
html body .gradio-container input[type="file"],
html body .stApp [data-testid="stFileUploader"],
html body .stApp [data-testid="stFileUploaderDropzone"] {
background: var(--cr-surface) !important;
border: 1px dashed var(--cr-border) !important;
border-radius: 3px !important;
color: var(--cr-ink) !important;
}
html body input[type="file"]::file-selector-button {
background: var(--cr-bg) !important;
color: var(--cr-blue) !important;
border: 1px solid var(--cr-border) !important;
border-radius: 3px !important;
padding: 5px 12px !important;
margin-right: 12px !important;
font-family: 'Plus Jakarta Sans', ui-sans-serif, sans-serif !important;
font-weight: 500 !important;
font-size: 0.78rem !important;
text-transform: uppercase !important;
letter-spacing: 0.08em !important;
cursor: pointer !important;
}
/* ============================================================
* Part 9 — Markdown, code, links
* ============================================================ */
html body .gradio-container .markdown,
html body .gradio-container .gr-markdown,
html body .gradio-container .prose,
html body .stApp [data-testid="stMarkdownContainer"] {
color: var(--cr-ink) !important;
font-family: 'Plus Jakarta Sans', ui-sans-serif, sans-serif !important;
line-height: 1.55 !important;
}
html body .gradio-container a,
html body .stApp a {
color: var(--cr-blue) !important;
}
html body code,
html body .gradio-container code,
html body .stApp code {
background: var(--cr-blue-soft) !important;
color: var(--cr-blue) !important;
font-family: 'JetBrains Mono', ui-monospace, monospace !important;
padding: 2px 6px !important;
border-radius: 2px !important;
}
/* ============================================================
* Part 10 — Scrollbars + Streamlit chrome
* ============================================================ */
html body ::-webkit-scrollbar { width: 8px; height: 8px; }
html body ::-webkit-scrollbar-track { background: var(--cr-bg); }
html body ::-webkit-scrollbar-thumb {
background: var(--cr-border);
border-radius: 3px;
}
html body ::-webkit-scrollbar-thumb:hover {
background: var(--cr-blue-dim);
}
html body .stApp header[data-testid="stHeader"] {
background: var(--cr-bg) !important;
border-bottom: 1px solid var(--cr-border) !important;
}
html body .stApp [data-testid="stSidebar"] {
background: var(--cr-surface) !important;
border-right: 1px solid var(--cr-border) !important;
}