The-Resonator / custom.css
Threadbourne's picture
Upload custom.css
b63da11 verified
Raw
History Blame Contribute Delete
27.3 kB
@import url('https://fonts.googleapis.com/css2?family=Syne:wght@500;600;700;800&family=DM+Sans:ital,wght@0,300;0,400;0,500;1,400&family=DM+Mono:wght@400;500&display=swap');
/* uglytool.dev — After Hours theme (v5)
* You bought this file. Modify whatever you want — tweak the amber,
* swap the font, remove the credit. It's yours now.
*/
:root,
:root.dark,
.gradio-container,
.gradio-container.dark,
body.dark {
--ut-bg: #151412;
--ut-bg-deep: #0f0e0d;
--ut-bg-tint: #23201b;
--ut-panel: #25221e;
--ut-surface: rgba(35, 32, 28, 0.78);
--ut-surface-solid: #2b2721;
--ut-surface-hover: #342f2a;
--ut-surface-nested: rgba(36, 34, 32, 0.40);
--ut-border: rgba(255, 218, 159, 0.12);
--ut-border-strong: rgba(255, 218, 159, 0.24);
--ut-ink: #f3eee6;
--ut-ink-strong: #fdfbf6;
--ut-muted: #a79a8a;
--ut-dim: #6d655b;
--ut-on-accent: #14110e;
--ut-selection-ink: #fdfbf6;
--ut-accent: #c17f3a;
--ut-accent-bright: #f2b35f;
--ut-accent-deep: #8f5925;
--ut-accent-mid: #d8954a;
--ut-accent-soft: rgba(242, 179, 95, 0.12);
--ut-accent-dim: rgba(242, 179, 95, 0.06);
--ut-accent-rim: rgba(242, 179, 95, 0.28);
--ut-warm: #ffcf86;
--ut-warm-soft: rgba(255, 207, 134, 0.12);
--ut-warm-rim: rgba(255, 207, 134, 0.28);
--ut-cool: #80786e;
--ut-cool-soft: rgba(128, 120, 110, 0.16);
--ut-cool-rim: rgba(128, 120, 110, 0.34);
--ut-title-ink: var(--ut-accent-bright);
--ut-title-glow: 0 0 22px rgba(242, 179, 95, 0.20);
--ut-font-display: 'Syne', ui-sans-serif, sans-serif;
--ut-font-body: 'DM Sans', ui-sans-serif, system-ui, sans-serif;
--ut-font-mono: 'DM Mono', ui-monospace, monospace;
--ut-radius: 18px;
--ut-radius-sm: 12px;
--ut-radius-xs: 8px;
--ut-radius-pill: 999px;
--ut-transition: 220ms cubic-bezier(0.22, 0.61, 0.36, 1);
--ut-shadow: 0 28px 70px rgba(0, 0, 0, 0.42),
0 1px 0 rgba(255, 218, 159, 0.07) inset,
0 0 0 1px rgba(255, 218, 159, 0.035) inset;
--ut-shadow-sm: 0 10px 28px rgba(0, 0, 0, 0.30);
--ut-glow: 0 0 34px rgba(242, 179, 95, 0.20);
--ut-bg-layers: radial-gradient(ellipse 72% 46% at 78% -8%, rgba(242, 179, 95, 0.14), transparent 58%),
radial-gradient(ellipse 56% 40% at 8% 18%, rgba(255, 207, 134, 0.055), transparent 60%),
linear-gradient(180deg, var(--ut-bg-tint) 0%, var(--ut-bg) 56%, var(--ut-bg-deep) 100%);
--ut-nav-bg: rgba(15, 14, 13, 0.76);
--ut-card-sheen: linear-gradient(180deg, rgba(255, 218, 159, 0.035), transparent 48%);
--ut-bleed: linear-gradient(180deg, rgba(242, 179, 95, 0.09), rgba(242, 179, 95, 0) 48%),
repeating-linear-gradient(180deg, rgba(242, 179, 95, 0.045) 0 1px, transparent 1px 30px);
--ut-grid: linear-gradient(90deg, rgba(242, 179, 95, 0.035) 1px, transparent 1px),
linear-gradient(180deg, rgba(242, 179, 95, 0.025) 1px, transparent 1px);
--ut-grid-size: 72px 72px;
--ut-focus-glow: 0 0 20px rgba(242, 179, 95, 0.12);
--ut-btn-grad: linear-gradient(135deg, #c17f3a 0%, #f2b35f 100%);
--ut-btn-grad-hover:linear-gradient(135deg, #f2b35f 0%, #ffd493 100%);
--ut-btn-shadow: 0 10px 24px rgba(0, 0, 0, 0.26), 0 0 0 1px rgba(255, 255, 255, 0.14) inset;
--ut-btn-shadow-hover: 0 14px 34px rgba(0, 0, 0, 0.30), 0 0 0 1px rgba(255, 255, 255, 0.20) inset;
--ut-thumb-glow: 0 0 12px rgba(128, 120, 110, 0.30);
--ut-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M0 0l6 7 6-7z' fill='%23f2b35f'/%3E%3C/svg%3E");
--ut-scroll: rgba(242, 179, 95, 0.28);
--ut-scroll-hover: rgba(242, 179, 95, 0.48);
--ut-code-block-bg: rgba(0, 0, 0, 0.25);
}
/* ============================================================
* Gradio engine variables — map the framework's hooks to our tokens.
* ============================================================ */
:root,
:root.dark,
.gradio-container,
.gradio-container.dark,
body.dark {
--body-background-fill: var(--ut-bg);
--background-fill-primary: var(--ut-panel);
--background-fill-secondary: var(--ut-surface-solid);
--body-text-color: var(--ut-ink);
--body-text-color-subdued: var(--ut-muted);
--color-accent: var(--ut-accent);
--color-accent-soft: var(--ut-accent-soft);
--border-color-primary: var(--ut-border);
--border-color-accent: var(--ut-cool);
--block-background-fill: var(--ut-surface);
--block-border-color: var(--ut-border);
--block-border-width: 1px;
--block-radius: var(--ut-radius);
--block-shadow: var(--ut-shadow);
--block-title-background-fill: transparent;
--block-title-border-color: transparent;
--block-title-text-color: var(--ut-ink);
--block-title-text-size: 1.05rem;
--block-title-text-weight: 700;
--block-label-background-fill: transparent;
--block-label-border-color: transparent;
--block-label-text-color: var(--ut-accent-bright);
--block-label-text-size: 0.72rem;
--block-label-text-weight: 500;
--input-background-fill: var(--ut-surface-solid);
--input-background-fill-focus: var(--ut-surface-solid);
--input-border-color: var(--ut-border);
--input-border-color-focus: var(--ut-cool);
--input-text-size: 0.9rem;
--input-radius: var(--ut-radius-sm);
--button-primary-background-fill: var(--ut-accent);
--button-primary-background-fill-hover: var(--ut-accent-bright);
--button-primary-text-color: var(--ut-on-accent);
--button-primary-text-color-hover: var(--ut-on-accent);
--button-primary-border-color: var(--ut-accent);
--button-secondary-background-fill: var(--ut-surface-solid);
--button-secondary-background-fill-hover: var(--ut-surface-hover);
--button-secondary-text-color: var(--ut-ink);
--button-secondary-text-color-hover: var(--ut-ink-strong);
--button-secondary-border-color: var(--ut-border-strong);
--button-large-text-size: 0.92rem;
--button-large-text-weight: 600;
--button-large-radius: var(--ut-radius-sm);
--slider-color: var(--ut-cool);
--font: var(--ut-font-body);
--font-mono: var(--ut-font-mono);
--radius-xxs: 2px;
--radius-xs: 4px;
--radius-sm: var(--ut-radius-xs);
--radius-md: var(--ut-radius-sm);
--radius-lg: var(--ut-radius);
}
/* ============================================================
* Part 2 — Root containers · LAYERED BACKGROUND + decorations
* ============================================================ */
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(--ut-bg-layers) !important;
background-attachment: fixed !important;
color: var(--ut-ink) !important;
font-family: var(--ut-font-body) !important;
line-height: 1.6 !important;
}
/* Decorative light-bleed + faint engineering grid on the app shell */
html body .gradio-container::before,
html body .stApp::before {
content: "" !important;
position: fixed !important;
inset: 0 0 auto 0 !important;
height: 230px !important;
pointer-events: none !important;
z-index: 0 !important;
background: var(--ut-bleed) !important;
-webkit-mask-image: linear-gradient(180deg, black, transparent 88%) !important;
mask-image: linear-gradient(180deg, black, transparent 88%) !important;
opacity: 0.72 !important;
}
html body .gradio-container::after,
html body .stApp::after {
content: "" !important;
position: fixed !important;
inset: 0 !important;
pointer-events: none !important;
z-index: 0 !important;
background-image: var(--ut-grid) !important;
background-size: var(--ut-grid-size) !important;
-webkit-mask-image: linear-gradient(180deg, transparent 0%, black 18%, black 82%, transparent 100%) !important;
mask-image: linear-gradient(180deg, transparent 0%, black 18%, black 82%, transparent 100%) !important;
opacity: 0.42 !important;
}
html body .main .block-container,
html body .stApp [data-testid="stVerticalBlock"] {
background: transparent !important;
position: relative !important;
z-index: 1 !important;
}
/* ============================================================
* Part 3 — Typography
* ============================================================ */
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: var(--ut-font-display) !important;
font-weight: 700 !important;
letter-spacing: -0.02em !important;
color: var(--ut-ink) !important;
-webkit-text-fill-color: var(--ut-ink) !important;
background-image: none !important;
background-clip: unset !important;
-webkit-background-clip: unset !important;
line-height: 1.12 !important;
}
html body h1, html body .gradio-container h1, html body .stApp h1 {
font-size: 2.6rem !important;
line-height: 1.05 !important;
margin-bottom: 0.3em !important;
letter-spacing: -0.03em !important;
color: var(--ut-title-ink) !important;
-webkit-text-fill-color: var(--ut-title-ink) !important;
text-shadow: var(--ut-title-glow) !important;
}
html body h2, html body .gradio-container h2, html body .stApp h2 {
font-size: 1.5rem !important;
color: var(--ut-accent) !important;
-webkit-text-fill-color: var(--ut-accent) !important;
}
html body h3, html body .gradio-container h3, html body .stApp h3,
html body h4, html body .gradio-container h4, html body .stApp h4,
html body h3 *, html body .gradio-container h3 *, html body .stApp h3 *,
html body h4 *, html body .gradio-container h4 *, html body .stApp h4 *,
html body [data-testid="stMarkdownContainer"] h3,
html body [data-testid="stMarkdownContainer"] h3 *,
html body .gr-markdown h3, html body .gr-markdown h3 *,
html body .markdown h3, html body .markdown h3 * {
font-size: 1.1rem !important;
letter-spacing: -0.01em !important;
font-weight: 500 !important;
color: var(--ut-accent-deep) !important;
-webkit-text-fill-color: var(--ut-accent-deep) !important;
}
html body em,
html body .gradio-container em,
html body .stApp em {
font-style: italic !important;
color: var(--ut-ink) !important;
}
html body blockquote,
html body .gradio-container blockquote,
html body .stApp blockquote {
border-left: 2px solid var(--ut-accent-rim) !important;
padding-left: 16px !important;
color: var(--ut-muted) !important;
font-style: italic !important;
}
/* ============================================================
* Part 4 — Labels · LETTERSPACED UPPERCASE
* ============================================================ */
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: var(--ut-font-mono) !important;
font-size: 0.78rem !important;
color: var(--ut-accent-bright) !important;
letter-spacing: 0.13em !important;
text-transform: uppercase !important;
font-weight: 600 !important;
background: transparent !important;
}
/* Section eyebrows / kickers — even more letterspaced */
html body .gradio-container .ut-eyebrow,
html body .stApp .ut-eyebrow {
font-family: var(--ut-font-mono) !important;
font-size: 0.68rem !important;
color: var(--ut-muted) !important;
letter-spacing: 0.2em !important;
text-transform: uppercase !important;
}
/* ============================================================
* Part 5 — Cards / blocks · TRANSLUCENT GLASS + SOFT GLOW
* ============================================================ */
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 .form,
html body .gradio-container .gr-box,
html body .stApp [data-testid="stForm"],
html body .stApp [data-testid="stExpander"] {
background: var(--ut-card-sheen), var(--ut-surface) !important;
-webkit-backdrop-filter: blur(18px) saturate(140%) !important;
backdrop-filter: blur(18px) saturate(140%) !important;
border: 1px solid var(--ut-border) !important;
border-radius: var(--ut-radius) !important;
box-shadow: var(--ut-shadow) !important;
padding: 22px !important;
position: relative !important;
z-index: 1 !important;
transition: border-color var(--ut-transition), box-shadow var(--ut-transition) !important;
}
/* Top hairline accent on cards (matches the Path B wrapper) */
html body .gradio-container .block::before,
html body .gradio-container .form::before,
html body .stApp [data-testid="stForm"]::before {
content: "" !important;
position: absolute !important;
top: 0 !important; left: 0 !important; right: 0 !important;
height: 1px !important;
background: var(--ut-card-hairline) !important;
opacity: 0.66 !important;
pointer-events: none !important;
z-index: 2 !important;
}
html body .gradio-container .block:hover,
html body .gradio-container .form:hover,
html body .stApp [data-testid="stForm"]:hover {
border-color: var(--ut-border-strong) !important;
}
/* Layout wrappers + text blocks must NOT look like cards (kills the
russian-doll nesting: the page wrapper and markdown headings render flat) */
html body .gradio-container .wrap,
html body .gradio-container main.contain,
html body .gradio-container .block:has([data-testid="markdown-wrapper"]) {
background: transparent !important;
border: none !important;
box-shadow: none !important;
-webkit-backdrop-filter: none !important;
backdrop-filter: none !important;
padding: 0 !important;
}
html body .gradio-container .wrap::before,
html body .gradio-container main.contain::before,
html body .gradio-container .block:has([data-testid="markdown-wrapper"])::before {
display: none !important;
}
/* Inputs sitting directly inside a form-card shouldn't double-card */
html body .gradio-container .form .block {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
}
html body .gradio-container .form .block::before { display: none !important; }
/* Nested inner blocks — slightly less prominent */
html body .gradio-container .block .block:not(.form .block),
html body .gradio-container .block .gr-form {
background: var(--ut-surface-nested) !important;
box-shadow: none !important;
padding: 16px !important;
}
/* ============================================================
* Part 6 — Inputs · refined borders, generous radii, cool focus glow
* ============================================================ */
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(--ut-surface-solid) !important;
border: 1px solid var(--ut-border-strong) !important;
border-radius: var(--ut-radius-sm) !important;
color: var(--ut-ink) !important;
font-family: var(--ut-font-mono) !important;
font-size: 0.9rem !important;
caret-color: var(--ut-warm) !important;
padding: 13px 16px !important;
transition: border-color var(--ut-transition), box-shadow var(--ut-transition) !important;
}
html body .gradio-container textarea,
html body .stApp textarea {
min-height: 130px !important;
line-height: 1.6 !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(--ut-cool) !important;
outline: none !important;
box-shadow: 0 0 0 3px var(--ut-accent-soft), var(--ut-focus-glow) !important;
}
html body .gradio-container ::placeholder,
html body .stApp ::placeholder {
color: var(--ut-dim) !important;
}
/* Custom select — inline SVG accent arrow */
html body .gradio-container select,
html body .gradio-container .gr-dropdown select {
appearance: none !important;
-webkit-appearance: none !important;
background-image: var(--ut-arrow) !important;
background-repeat: no-repeat !important;
background-position: right 14px center !important;
padding-right: 38px !important;
}
/* Numeric outputs — tabular nums */
html body .gradio-container .gr-number input,
html body .gradio-container [class*="number"] input,
html body .gradio-container .output-number,
html body .gradio-container .metric,
html body .stApp [data-testid="stMetricValue"],
html body .stApp [data-testid="stNumberInput"] input {
font-variant-numeric: tabular-nums !important;
font-feature-settings: 'tnum' !important;
}
/* ============================================================
* Part 7 — Buttons · gradient fill + glow hover
* ============================================================ */
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(--ut-btn-grad) !important;
color: var(--ut-on-accent) !important;
font-family: var(--ut-font-display) !important;
font-weight: 600 !important;
font-size: 0.92rem !important;
letter-spacing: 0.02em !important;
border: none !important;
border-radius: var(--ut-radius-sm) !important;
padding: 13px 28px !important;
cursor: pointer !important;
box-shadow: var(--ut-btn-shadow) !important;
transition: transform 100ms ease,
box-shadow var(--ut-transition),
background var(--ut-transition) !important;
}
html body .gradio-container button:hover,
html body .gradio-container .gr-button:hover,
html body .stApp .stButton > button:hover {
background: var(--ut-btn-grad-hover) !important;
color: var(--ut-on-accent) !important;
box-shadow: var(--ut-btn-shadow-hover), var(--ut-glow) !important;
}
html body .gradio-container button:active,
html body .stApp .stButton > button:active {
transform: scale(0.985) !important;
background: var(--ut-accent-deep) !important;
}
html body .gradio-container button.secondary,
html body .gradio-container .secondary,
html body .stApp button[kind="secondary"] {
background: var(--ut-surface-solid) !important;
color: var(--ut-ink) !important;
border: 1px solid var(--ut-border-strong) !important;
box-shadow: var(--ut-shadow-sm) !important;
}
html body .gradio-container button.secondary:hover,
html body .stApp button[kind="secondary"]:hover {
background: var(--ut-surface-hover) !important;
border-color: var(--ut-accent-rim) !important;
color: var(--ut-ink-strong) !important;
}
/* ============================================================
* Part 8 — Sliders, checkboxes, radios · cool accent
* ============================================================ */
html body input[type="range"] {
accent-color: var(--ut-cool) !important;
height: 4px !important;
}
html body input[type="range"]::-webkit-slider-thumb {
background: var(--ut-cool) !important;
border: 2px solid var(--ut-bg) !important;
box-shadow: 0 0 0 1px var(--ut-cool-rim), var(--ut-thumb-glow) !important;
width: 16px !important;
height: 16px !important;
}
html body input[type="range"]::-moz-range-thumb {
background: var(--ut-cool) !important;
border: 2px solid var(--ut-bg) !important;
width: 16px !important;
height: 16px !important;
}
html body input[type="checkbox"],
html body input[type="radio"] {
accent-color: var(--ut-accent) !important;
width: 15px !important;
height: 15px !important;
}
/* ============================================================
* Part 9 — 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(--ut-accent-dim) !important;
border: 1px dashed var(--ut-accent-rim) !important;
border-radius: var(--ut-radius-sm) !important;
color: var(--ut-ink) !important;
transition: background var(--ut-transition),
border-color var(--ut-transition) !important;
}
html body .gradio-container .gr-file-upload:hover,
html body .stApp [data-testid="stFileUploader"]:hover {
background: var(--ut-accent-soft) !important;
border-color: var(--ut-accent) !important;
}
html body input[type="file"]::file-selector-button {
background: var(--ut-accent-soft) !important;
color: var(--ut-accent) !important;
border: 1px solid var(--ut-accent-rim) !important;
border-radius: var(--ut-radius-xs) !important;
padding: 7px 14px !important;
margin-right: 14px !important;
font-family: var(--ut-font-mono) !important;
font-size: 0.78rem !important;
letter-spacing: 0.06em !important;
cursor: pointer !important;
}
/* ============================================================
* Part 10 — 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(--ut-ink) !important;
font-family: var(--ut-font-body) !important;
line-height: 1.65 !important;
}
html body .gradio-container a,
html body .stApp a {
color: var(--ut-accent) !important;
text-decoration: none !important;
border-bottom: 1px solid var(--ut-accent-rim) !important;
transition: border-color var(--ut-transition), color var(--ut-transition) !important;
}
html body .gradio-container a:hover,
html body .stApp a:hover {
color: var(--ut-accent-bright) !important;
border-bottom-color: var(--ut-accent) !important;
}
html body code,
html body .gradio-container code,
html body .stApp code {
background: var(--ut-accent-dim) !important;
color: var(--ut-accent) !important;
font-family: var(--ut-font-mono) !important;
font-size: 0.86em !important;
padding: 2px 7px !important;
border-radius: var(--ut-radius-xs) !important;
border: 1px solid var(--ut-accent-rim) !important;
}
html body pre code,
html body .gradio-container pre code {
border: 1px solid var(--ut-border) !important;
background: var(--ut-code-block-bg) !important;
display: block !important;
padding: 14px 16px !important;
border-radius: var(--ut-radius-sm) !important;
line-height: 1.55 !important;
}
/* ============================================================
* Part 11 — Callout / interpretation card
* Use class .ut-callout on a div for editorial-voice prose blocks.
* ============================================================ */
html body .ut-callout,
html body .gradio-container .ut-callout,
html body .stApp .ut-callout,
html body .gradio-container [class*="info"]:not(button):not(input),
html body .stApp .stAlert {
background: var(--ut-accent-soft) !important;
border: 1px solid var(--ut-accent-rim) !important;
border-radius: var(--ut-radius-sm) !important;
padding: 14px 18px !important;
font-size: 0.9rem !important;
color: var(--ut-muted) !important;
line-height: 1.6 !important;
}
html body .ut-callout strong,
html body .gradio-container .ut-callout strong,
html body .stApp .ut-callout strong {
color: var(--ut-ink) !important;
font-weight: 600 !important;
}
/* ============================================================
* Part 12 — Scrollbars + Streamlit chrome
* ============================================================ */
html body ::-webkit-scrollbar { width: 10px; height: 10px; }
html body ::-webkit-scrollbar-track {
background: transparent;
}
html body ::-webkit-scrollbar-thumb {
background: var(--ut-scroll);
border-radius: var(--ut-radius-pill);
border: 2px solid transparent;
background-clip: padding-box;
}
html body ::-webkit-scrollbar-thumb:hover {
background: var(--ut-scroll-hover);
background-clip: padding-box;
border: 2px solid transparent;
}
html body .stApp header[data-testid="stHeader"] {
background: var(--ut-nav-bg) !important;
-webkit-backdrop-filter: blur(14px) !important;
backdrop-filter: blur(14px) !important;
border-bottom: 1px solid var(--ut-border) !important;
}
html body .stApp [data-testid="stSidebar"] {
background: var(--ut-panel) !important;
border-right: 1px solid var(--ut-border) !important;
}
/* ============================================================
* Part 13 — Misc polish
* ============================================================ */
html body hr,
html body .gradio-container hr,
html body .stApp hr {
border: none !important;
border-top: 1px solid var(--ut-border) !important;
margin: 24px 0 !important;
}
html body ::selection {
background: var(--ut-accent-soft);
color: var(--ut-selection-ink);
}
/* Animate things appearing — subtle, not distracting */
@media (prefers-reduced-motion: no-preference) {
html body .gradio-container .block,
html body .stApp [data-testid="stForm"] {
animation: ut-fade-in 320ms cubic-bezier(0.22, 0.61, 0.36, 1);
}
@keyframes ut-fade-in {
from { opacity: 0; transform: translateY(4px); }
to { opacity: 1; transform: translateY(0); }
}
}