/* ---- Light tokens (default) ---- */ :root { --cf-ink: #0b1220; --cf-body: #1e293b; --cf-muted: #475569; --cf-teal: #0f766e; --cf-teal-bright: #0d9488; --cf-surface: #ffffff; --cf-surface-2: #f1f5f9; --cf-page-bg: #f8fafc; --cf-border: #cbd5e1; --cf-ok: #047857; --cf-warn: #b45309; --cf-bad: #b91c1c; --cf-badge-bg: #ccfbf1; --cf-badge-fg: #115e59; --cf-badge-border: #5eead4; --cf-btn-fg: #ffffff; color-scheme: light; } /* ---- Dark tokens (Gradio .dark / ?__theme=dark) ---- */ .dark, html.dark, body.dark, .dark .gradio-container { --cf-ink: #f8fafc; --cf-body: #e2e8f0; --cf-muted: #94a3b8; --cf-teal: #2dd4bf; --cf-teal-bright: #5eead4; --cf-surface: #1e293b; --cf-surface-2: #0f172a; --cf-page-bg: #0b1220; --cf-border: #334155; --cf-ok: #34d399; --cf-warn: #fbbf24; --cf-bad: #f87171; --cf-badge-bg: #134e4a; --cf-badge-fg: #99f6e4; --cf-badge-border: #0d9488; --cf-btn-fg: #042f2e; color-scheme: dark; } html, body { background: var(--cf-page-bg) !important; color: var(--cf-body) !important; } .gradio-container { font-family: "IBM Plex Sans", "Source Sans 3", "Segoe UI", Helvetica, Arial, sans-serif !important; color: var(--cf-body) !important; background: radial-gradient(ellipse 70% 45% at 8% 0%, rgba(15, 118, 110, 0.14), transparent 55%), radial-gradient(ellipse 50% 35% at 92% 5%, rgba(14, 116, 144, 0.10), transparent 50%), linear-gradient(180deg, var(--cf-page-bg) 0%, var(--cf-surface-2) 100%) !important; max-width: 1100px !important; margin: 0 auto !important; } .dark .gradio-container { background: radial-gradient(ellipse 70% 45% at 8% 0%, rgba(45, 212, 191, 0.10), transparent 55%), radial-gradient(ellipse 50% 35% at 92% 5%, rgba(56, 189, 248, 0.08), transparent 50%), linear-gradient(180deg, #0b1220 0%, #0f172a 100%) !important; } /* Explicit text — use tokens, never inherit Gradio defaults */ .gradio-container, .gradio-container .prose, .gradio-container .markdown, .gradio-container label, .gradio-container span, .gradio-container p, .gradio-container li { color: var(--cf-body) !important; } .gradio-container h1, .gradio-container h2, .gradio-container h3, .gradio-container .prose h1, .gradio-container .prose h2, .gradio-container .prose h3 { color: var(--cf-ink) !important; } .gradio-container input, .gradio-container textarea, .gradio-container select { background: var(--cf-surface) !important; color: var(--cf-ink) !important; border-color: var(--cf-border) !important; } .gradio-container button { color: var(--cf-ink) !important; } .gradio-container button.primary, .gradio-container .primary { background: var(--cf-teal) !important; color: var(--cf-btn-fg) !important; border: none !important; font-weight: 650 !important; } .gradio-container button.primary:hover { background: var(--cf-teal-bright) !important; color: var(--cf-btn-fg) !important; } .dark .gradio-container button.primary, .dark .gradio-container .primary { color: #042f2e !important; } /* Header + theme toggle */ #cf-header { text-align: center; padding: 1.75rem 1rem 0.85rem; position: relative; } #cf-header h1 { color: var(--cf-ink) !important; font-weight: 800; font-size: clamp(1.85rem, 4vw, 2.45rem); letter-spacing: -0.03em; margin: 0 0 0.4rem; } #cf-header .cf-tagline { color: var(--cf-muted) !important; font-size: 1.05rem; max-width: 36rem; margin: 0 auto 0.85rem; line-height: 1.5; } #cf-header .cf-meta { display: inline-flex; gap: 0.5rem; flex-wrap: wrap; justify-content: center; font-size: 0.8rem; } #cf-header .cf-badge { background: var(--cf-badge-bg) !important; color: var(--cf-badge-fg) !important; border: 1px solid var(--cf-badge-border) !important; border-radius: 999px; padding: 0.2rem 0.7rem; font-weight: 650; } .cf-theme-toggle { display: inline-flex; gap: 0; margin: 0.85rem auto 0; border: 1px solid var(--cf-border); border-radius: 999px; overflow: hidden; background: var(--cf-surface-2); } .cf-theme-toggle a { display: inline-block; padding: 0.35rem 0.9rem; font-size: 0.8rem; font-weight: 650; text-decoration: none !important; color: var(--cf-muted) !important; background: transparent !important; border: none !important; } .cf-theme-toggle a:hover { color: var(--cf-ink) !important; background: var(--cf-surface) !important; } .cf-theme-toggle a.active { color: var(--cf-btn-fg) !important; background: var(--cf-teal) !important; } .dark .cf-theme-toggle a.active { color: #042f2e !important; } /* Panels */ .cf-panel { border: 1px solid var(--cf-border) !important; border-radius: 16px !important; box-shadow: 0 6px 24px rgba(15, 23, 42, 0.06) !important; background: var(--cf-surface) !important; padding: 0.35rem !important; color: var(--cf-body) !important; } .dark .cf-panel { box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35) !important; } /* KPI cards */ .cf-kpi { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 0.65rem; margin: 0.75rem 0 1rem; } .cf-kpi .cell { background: var(--cf-surface-2) !important; border: 1px solid var(--cf-border) !important; border-radius: 12px; padding: 0.75rem 0.85rem; text-align: center; } .cf-kpi .cell .label { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--cf-muted) !important; font-weight: 600; } .cf-kpi .cell .value { font-size: 1.35rem; font-weight: 750; color: var(--cf-ink) !important; margin-top: 0.2rem; } .cf-kpi .ok .value { color: var(--cf-ok) !important; } .cf-kpi .warn .value { color: var(--cf-warn) !important; } .cf-kpi .bad .value { color: var(--cf-bad) !important; } /* File upload / download rows */ .gradio-container .file-preview, .gradio-container .file-preview-holder, .gradio-container .upload-container, .gradio-container .uploaded-files, .gradio-container .file-name, .gradio-container .file-size, .gradio-container .wrap, .gradio-container .file .file-preview, .gradio-container .block .file-preview, .gradio-container .block .upload-container .wrap { background: var(--cf-surface-2) !important; color: var(--cf-ink) !important; border-color: var(--cf-border) !important; } .gradio-container .file-preview *, .gradio-container .upload-container *, .gradio-container .uploaded-files *, .gradio-container .file-preview-holder * { color: var(--cf-ink) !important; } .gradio-container .file-preview span, .gradio-container .file-preview a, .gradio-container .file-name, .gradio-container .file-size { background: transparent !important; font-weight: 600 !important; } .gradio-container .block.file, .gradio-container [data-testid="file-upload"] { background: var(--cf-surface) !important; border-color: var(--cf-border) !important; } .gradio-container .file button, .gradio-container .file a { color: var(--cf-ink) !important; } .gradio-container .file .or { color: var(--cf-muted) !important; } /* Audit / error reports */ .cf-report, .cf-error, .gradio-container pre.cf-report, .gradio-container pre.cf-error { display: block; width: 100%; box-sizing: border-box; margin: 0.75rem 0 1rem; padding: 1rem 1.1rem; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-family: "IBM Plex Mono", "Source Code Pro", ui-monospace, monospace !important; font-size: 0.82rem; line-height: 1.45; color: var(--cf-ink) !important; background: var(--cf-surface-2) !important; border: 1px solid var(--cf-border) !important; border-radius: 12px; } .gradio-container pre.cf-report span, .gradio-container pre.cf-error span, .gradio-container .markdown pre span, .gradio-container .prose pre span { background: transparent !important; color: var(--cf-ink) !important; } .gradio-container .markdown pre, .gradio-container .prose pre, .gradio-container .markdown pre code, .gradio-container .prose pre code { background: var(--cf-surface-2) !important; color: var(--cf-ink) !important; border: 1px solid var(--cf-border) !important; border-radius: 12px; } .gradio-container .markdown code:not(pre code), .gradio-container .prose code:not(pre code) { background: var(--cf-surface-2) !important; color: var(--cf-ink) !important; padding: 0.1rem 0.35rem; border-radius: 4px; } /* Footer */ #cf-footer { margin: 1.5rem 0 0.5rem; padding: 1rem 0 0.25rem; border-top: 1px solid var(--cf-border); text-align: center; } #cf-footer .cf-footer-line { margin: 0 0 0.35rem; color: var(--cf-body) !important; line-height: 1.6; word-wrap: break-word; } #cf-footer .cf-footer-note { margin: 0; font-size: 0.85rem; color: var(--cf-muted) !important; } #cf-footer a { color: var(--cf-teal) !important; font-weight: 650; text-decoration: none; } #cf-footer a:hover { text-decoration: underline; } #cf-footer .cf-install-cmd, #cf-footer code { display: inline-block; max-width: 100%; overflow-x: auto; background: var(--cf-surface-2) !important; color: var(--cf-ink) !important; border: 1px solid var(--cf-border); border-radius: 6px; padding: 0.15rem 0.55rem; font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 0.85rem; white-space: nowrap; } footer { visibility: hidden; }