Spaces:
Running on Zero
Running on Zero
| """Custom Gradio theme for the Project Halide workbench.""" | |
| from __future__ import annotations | |
| import gradio as gr | |
| BRASS = "#d29a45" | |
| BRASS_DARK = "#8c5a1f" | |
| COPPER = "#be5f38" | |
| TEAL = "#9aae6f" | |
| VIOLET = "#8b5e4f" | |
| RED = "#d85c45" | |
| INK = "#100d0a" | |
| CARBON = "#17110d" | |
| SURFACE = "#1f1711" | |
| SURFACE_SOFT = "#2b2118" | |
| SURFACE_LIFT = "#3a2b1f" | |
| PAPER = "#fff0d8" | |
| PAPER_SOFT = "#e6d1b6" | |
| MUTED = "#b89c77" | |
| BORDER = "#5a432f" | |
| BLACK = "#080604" | |
| THEME_CSS = f""" | |
| :root {{ | |
| --halide-brass: {BRASS}; | |
| --halide-brass-dark: {BRASS_DARK}; | |
| --halide-copper: {COPPER}; | |
| --halide-teal: {TEAL}; | |
| --halide-violet: {VIOLET}; | |
| --halide-red: {RED}; | |
| --halide-ink: {INK}; | |
| --halide-carbon: {CARBON}; | |
| --halide-surface: {SURFACE}; | |
| --halide-surface-soft: {SURFACE_SOFT}; | |
| --halide-surface-lift: {SURFACE_LIFT}; | |
| --halide-paper: {PAPER}; | |
| --halide-paper-soft: {PAPER_SOFT}; | |
| --halide-muted: {MUTED}; | |
| --halide-border: {BORDER}; | |
| --halide-black: {BLACK}; | |
| }} | |
| html, | |
| body, | |
| .gradio-container {{ | |
| background: var(--halide-ink) !important; | |
| color: var(--halide-paper) !important; | |
| font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, | |
| "Segoe UI", sans-serif !important; | |
| letter-spacing: 0 !important; | |
| }} | |
| body::before {{ | |
| content: ""; | |
| position: fixed; | |
| inset: 0; | |
| pointer-events: none; | |
| background: | |
| repeating-linear-gradient( | |
| 90deg, | |
| rgba(255, 240, 216, 0.018) 0, | |
| rgba(255, 240, 216, 0.018) 1px, | |
| transparent 1px, | |
| transparent 16px | |
| ); | |
| opacity: 0.45; | |
| }} | |
| .gradio-container {{ | |
| max-width: none !important; | |
| min-height: 100vh !important; | |
| padding: 0 18px 18px !important; | |
| }} | |
| #halide-app {{ | |
| min-height: 100vh; | |
| }} | |
| #halide-header {{ | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 18px; | |
| max-width: 1720px; | |
| margin: 0 auto; | |
| padding: 18px 0 14px; | |
| border-bottom: 1px solid rgba(197, 154, 82, 0.34); | |
| }} | |
| .halide-brand-lockup {{ | |
| display: flex; | |
| align-items: center; | |
| gap: 14px; | |
| min-width: 0; | |
| }} | |
| .halide-brand-mark {{ | |
| width: 46px; | |
| height: 46px; | |
| border-radius: 8px; | |
| object-fit: cover; | |
| border: 1px solid rgba(197, 154, 82, 0.45); | |
| background: var(--halide-black); | |
| }} | |
| #halide-header h1 {{ | |
| color: var(--halide-paper); | |
| font-size: clamp(1.5rem, 2.2vw, 2.35rem); | |
| line-height: 1.04; | |
| margin: 2px 0 0; | |
| font-weight: 860; | |
| letter-spacing: 0 !important; | |
| }} | |
| .halide-kicker {{ | |
| color: var(--halide-teal); | |
| display: inline-block; | |
| font-size: 0.72rem; | |
| font-weight: 840; | |
| letter-spacing: 0.12em !important; | |
| text-transform: uppercase; | |
| }} | |
| .halide-model-strip {{ | |
| display: flex; | |
| flex-wrap: wrap; | |
| justify-content: flex-end; | |
| gap: 10px; | |
| min-width: min(42vw, 36rem); | |
| }} | |
| .halide-model-strip span, | |
| .halide-model-strip a {{ | |
| border: 1px solid rgba(197, 154, 82, 0.32); | |
| color: var(--halide-paper); | |
| background: rgba(24, 23, 21, 0.92); | |
| border-radius: 8px; | |
| padding: 9px 13px; | |
| font-size: 0.76rem; | |
| font-weight: 780; | |
| line-height: 1.08; | |
| text-decoration: none; | |
| white-space: nowrap; | |
| }} | |
| .halide-model-strip a {{ | |
| color: #f5dfac; | |
| border-color: rgba(154, 174, 111, 0.42); | |
| background: rgba(58, 43, 31, 0.92); | |
| }} | |
| .halide-workbench {{ | |
| max-width: 1720px; | |
| margin: 14px auto 0 !important; | |
| gap: 14px !important; | |
| align-items: flex-start; | |
| }} | |
| .halide-main-stage, | |
| .halide-inspector, | |
| .halide-intake-panel {{ | |
| min-width: 0 !important; | |
| }} | |
| .halide-intake-panel, | |
| .halide-inspector {{ | |
| background: rgba(17, 17, 17, 0.98); | |
| border: 1px solid rgba(58, 53, 46, 0.95); | |
| border-radius: 8px; | |
| padding: 12px; | |
| }} | |
| .halide-panel-title {{ | |
| color: var(--halide-paper); | |
| font-size: 0.76rem; | |
| font-weight: 880; | |
| letter-spacing: 0.1em !important; | |
| text-transform: uppercase; | |
| margin: 0 0 8px; | |
| }} | |
| .halide-rail-copy {{ | |
| color: var(--halide-muted); | |
| font-size: 0.84rem; | |
| line-height: 1.42; | |
| margin: 0 0 12px; | |
| }} | |
| .halide-model-card {{ | |
| border: 1px solid rgba(154, 174, 111, 0.30); | |
| background: rgba(154, 174, 111, 0.075); | |
| border-radius: 8px; | |
| padding: 12px; | |
| margin-top: 12px; | |
| }} | |
| .halide-model-card span {{ | |
| color: var(--halide-teal); | |
| display: block; | |
| font-size: 0.68rem; | |
| font-weight: 860; | |
| letter-spacing: 0.11em !important; | |
| text-transform: uppercase; | |
| margin-bottom: 5px; | |
| }} | |
| .halide-model-card strong {{ | |
| color: var(--halide-paper); | |
| display: block; | |
| font-size: 0.98rem; | |
| line-height: 1.2; | |
| }} | |
| .halide-model-card p {{ | |
| color: var(--halide-muted); | |
| margin: 6px 0 0; | |
| font-size: 0.82rem; | |
| line-height: 1.35; | |
| }} | |
| .halide-run-state {{ | |
| display: grid; | |
| grid-template-columns: minmax(0, 1fr); | |
| gap: 5px; | |
| border-radius: 8px; | |
| padding: 13px 15px; | |
| margin-bottom: 12px; | |
| background: var(--halide-surface); | |
| border: 1px solid rgba(197, 154, 82, 0.30); | |
| min-height: 76px; | |
| }} | |
| .halide-run-state strong {{ | |
| color: var(--halide-paper); | |
| font-size: clamp(1.08rem, 1.5vw, 1.45rem); | |
| line-height: 1.1; | |
| }} | |
| .halide-run-state span:last-child {{ | |
| color: var(--halide-muted); | |
| font-size: 0.84rem; | |
| }} | |
| .halide-run-state.active {{ | |
| border-color: rgba(154, 174, 111, 0.48); | |
| }} | |
| .halide-run-state.quiet {{ | |
| border-color: rgba(139, 94, 79, 0.38); | |
| }} | |
| .halide-run-eyebrow {{ | |
| color: var(--halide-brass); | |
| font-size: 0.68rem; | |
| font-weight: 860; | |
| letter-spacing: 0.12em !important; | |
| text-transform: uppercase; | |
| }} | |
| .halide-lighttable {{ | |
| background: #120d09 !important; | |
| border: 1px solid rgba(197, 154, 82, 0.34) !important; | |
| border-radius: 8px !important; | |
| padding: 13px !important; | |
| box-shadow: 0 22px 52px rgba(0, 0, 0, 0.42) !important; | |
| }} | |
| .halide-empty-lighttable {{ | |
| position: relative; | |
| min-height: clamp(360px, 54vh, 760px); | |
| overflow: hidden; | |
| display: grid; | |
| place-items: center; | |
| border-radius: 7px; | |
| border: 1px solid rgba(243, 234, 219, 0.26); | |
| background: | |
| linear-gradient(180deg, rgba(33, 31, 28, 0.76), rgba(5, 5, 5, 0.96)), | |
| repeating-linear-gradient( | |
| 0deg, | |
| rgba(243, 234, 219, 0.035) 0, | |
| rgba(243, 234, 219, 0.035) 1px, | |
| transparent 1px, | |
| transparent 24px | |
| ); | |
| }} | |
| .halide-empty-lighttable::after {{ | |
| content: ""; | |
| position: absolute; | |
| inset: 24px; | |
| border: 1px solid rgba(243, 234, 219, 0.12); | |
| box-shadow: inset 0 0 0 1px rgba(5, 5, 5, 0.82); | |
| pointer-events: none; | |
| }} | |
| .halide-empty-frame-grid {{ | |
| position: absolute; | |
| inset: 18px; | |
| display: grid; | |
| grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| gap: 1px; | |
| opacity: 0.86; | |
| }} | |
| .halide-empty-frame-grid > div {{ | |
| position: relative; | |
| min-width: 0; | |
| background: | |
| linear-gradient(135deg, rgba(17, 17, 17, 0.9), rgba(44, 41, 36, 0.46)), | |
| repeating-linear-gradient( | |
| 90deg, | |
| rgba(197, 154, 82, 0.06) 0, | |
| rgba(197, 154, 82, 0.06) 1px, | |
| transparent 1px, | |
| transparent 38px | |
| ); | |
| border: 1px solid rgba(58, 53, 46, 0.92); | |
| }} | |
| .halide-empty-frame-grid span {{ | |
| position: absolute; | |
| top: 12px; | |
| left: 12px; | |
| color: rgba(243, 234, 219, 0.72); | |
| font-size: 0.7rem; | |
| font-weight: 860; | |
| letter-spacing: 0.1em !important; | |
| text-transform: uppercase; | |
| }} | |
| .halide-empty-center {{ | |
| position: relative; | |
| z-index: 2; | |
| display: grid; | |
| gap: 8px; | |
| min-width: min(22rem, calc(100% - 48px)); | |
| padding: 18px 20px; | |
| text-align: center; | |
| border-radius: 8px; | |
| border: 1px solid rgba(197, 154, 82, 0.42); | |
| background: rgba(10, 10, 10, 0.78); | |
| box-shadow: 0 18px 50px rgba(0, 0, 0, 0.46); | |
| }} | |
| .halide-empty-center span {{ | |
| color: var(--halide-brass); | |
| font-size: 0.68rem; | |
| font-weight: 880; | |
| letter-spacing: 0.12em !important; | |
| text-transform: uppercase; | |
| }} | |
| .halide-empty-center strong {{ | |
| color: var(--halide-paper); | |
| font-size: clamp(1.05rem, 1.8vw, 1.6rem); | |
| line-height: 1.12; | |
| }} | |
| .halide-empty-lighttable.active {{ | |
| border-color: rgba(154, 174, 111, 0.36); | |
| }} | |
| .halide-empty-lighttable.active .halide-empty-center {{ | |
| border-color: rgba(154, 174, 111, 0.44); | |
| }} | |
| .halide-empty-lighttable.active .halide-empty-center span {{ | |
| color: var(--halide-teal); | |
| }} | |
| .halide-section-header {{ | |
| display: flex; | |
| align-items: flex-start; | |
| justify-content: space-between; | |
| gap: 12px; | |
| margin-bottom: 12px; | |
| }} | |
| .halide-section-header span {{ | |
| color: var(--halide-brass); | |
| display: block; | |
| font-size: 0.68rem; | |
| font-weight: 880; | |
| letter-spacing: 0.12em !important; | |
| text-transform: uppercase; | |
| }} | |
| .halide-section-header strong {{ | |
| color: var(--halide-paper); | |
| display: block; | |
| font-size: 1rem; | |
| line-height: 1.2; | |
| margin-top: 3px; | |
| }} | |
| .halide-section-header small {{ | |
| color: var(--halide-muted); | |
| border: 1px solid rgba(197, 154, 82, 0.26); | |
| border-radius: 999px; | |
| padding: 5px 9px; | |
| font-size: 0.72rem; | |
| line-height: 1; | |
| }} | |
| .halide-review-gallery {{ | |
| background: var(--halide-black) !important; | |
| }} | |
| .halide-review-gallery {{ | |
| margin-top: 12px !important; | |
| }} | |
| .halide-upload img, | |
| .halide-review-gallery img {{ | |
| background: var(--halide-black) !important; | |
| object-fit: contain !important; | |
| }} | |
| #halide-compare {{ | |
| min-height: 0 !important; | |
| }} | |
| .halide-compare-viewer {{ | |
| display: grid; | |
| gap: 12px; | |
| background: var(--halide-black); | |
| border: 1px solid rgba(255, 240, 216, 0.16); | |
| border-radius: 8px; | |
| padding: 12px; | |
| }} | |
| .halide-compare-stage {{ | |
| position: relative; | |
| min-height: clamp(380px, 58vh, 720px); | |
| overflow: hidden; | |
| display: grid; | |
| place-items: center; | |
| background: | |
| linear-gradient(180deg, rgba(31, 23, 17, 0.82), rgba(8, 6, 4, 0.98)), | |
| repeating-linear-gradient( | |
| 90deg, | |
| rgba(210, 154, 69, 0.055) 0, | |
| rgba(210, 154, 69, 0.055) 1px, | |
| transparent 1px, | |
| transparent 34px | |
| ); | |
| border-radius: 7px; | |
| }} | |
| .halide-compare-stage img {{ | |
| position: absolute; | |
| inset: 0; | |
| width: 100%; | |
| height: 100%; | |
| object-fit: contain; | |
| background: var(--halide-black); | |
| }} | |
| .halide-compare-overlay {{ | |
| position: absolute; | |
| inset: 0; | |
| clip-path: inset(0 calc(100% - var(--halide-split)) 0 0); | |
| }} | |
| .halide-compare-divider {{ | |
| position: absolute; | |
| top: 0; | |
| bottom: 0; | |
| left: var(--halide-split); | |
| width: 2px; | |
| transform: translateX(-1px); | |
| background: rgba(255, 240, 216, 0.88); | |
| box-shadow: 0 0 0 1px rgba(8, 6, 4, 0.70), 0 0 18px rgba(190, 95, 56, 0.38); | |
| }} | |
| .halide-compare-label {{ | |
| position: absolute; | |
| top: 12px; | |
| z-index: 2; | |
| border: 1px solid rgba(255, 240, 216, 0.20); | |
| background: rgba(16, 13, 10, 0.78); | |
| color: var(--halide-paper); | |
| border-radius: 999px; | |
| padding: 6px 9px; | |
| font-size: 0.70rem; | |
| font-weight: 820; | |
| line-height: 1; | |
| }} | |
| .halide-compare-label.original {{ | |
| left: 12px; | |
| }} | |
| .halide-compare-label.overlay {{ | |
| right: 12px; | |
| }} | |
| .halide-compare-range {{ | |
| width: 100%; | |
| accent-color: var(--halide-copper); | |
| }} | |
| #halide-run-button, | |
| button.primary, | |
| .primary button {{ | |
| background: var(--halide-copper) !important; | |
| color: white !important; | |
| border: 1px solid rgba(255, 255, 255, 0.16) !important; | |
| border-radius: 8px !important; | |
| font-weight: 860 !important; | |
| letter-spacing: 0 !important; | |
| min-height: 46px !important; | |
| box-shadow: 0 16px 30px rgba(184, 95, 63, 0.24) !important; | |
| }} | |
| #halide-run-button:hover, | |
| button.primary:hover, | |
| .primary button:hover {{ | |
| background: #ca6f4c !important; | |
| }} | |
| button.secondary, | |
| .secondary button, | |
| button {{ | |
| border-radius: 8px !important; | |
| font-weight: 760 !important; | |
| }} | |
| .halide-section-title {{ | |
| color: var(--halide-paper); | |
| font-size: 0.76rem; | |
| font-weight: 880; | |
| letter-spacing: 0.1em !important; | |
| text-transform: uppercase; | |
| margin: 0 0 10px; | |
| }} | |
| .halide-subsection {{ | |
| color: var(--halide-muted); | |
| font-size: 0.72rem; | |
| font-weight: 860; | |
| letter-spacing: 0.08em !important; | |
| margin: 14px 0 7px; | |
| text-transform: uppercase; | |
| }} | |
| .halide-muted {{ | |
| color: var(--halide-muted); | |
| margin: 0; | |
| }} | |
| .halide-empty-card {{ | |
| background: rgba(33, 31, 28, 0.82); | |
| border: 1px solid rgba(197, 154, 82, 0.28); | |
| border-radius: 8px; | |
| padding: 13px; | |
| }} | |
| .halide-empty-card span {{ | |
| color: var(--halide-brass); | |
| display: block; | |
| font-size: 0.68rem; | |
| font-weight: 880; | |
| letter-spacing: 0.12em !important; | |
| text-transform: uppercase; | |
| margin-bottom: 6px; | |
| }} | |
| .halide-empty-card strong {{ | |
| color: var(--halide-paper); | |
| display: block; | |
| font-size: 1rem; | |
| line-height: 1.2; | |
| }} | |
| .halide-empty-card p {{ | |
| color: var(--halide-muted); | |
| font-size: 0.84rem; | |
| line-height: 1.4; | |
| margin: 7px 0 0; | |
| }} | |
| .halide-notice {{ | |
| border-radius: 8px; | |
| padding: 11px 12px; | |
| border: 1px solid var(--halide-border); | |
| color: var(--halide-paper); | |
| background: rgba(33, 31, 28, 0.9); | |
| font-size: 0.88rem; | |
| line-height: 1.42; | |
| margin-bottom: 10px; | |
| }} | |
| .halide-notice.good {{ | |
| border-color: rgba(154, 174, 111, 0.40); | |
| background: rgba(154, 174, 111, 0.085); | |
| }} | |
| .halide-notice.caution {{ | |
| border-color: rgba(197, 154, 82, 0.48); | |
| background: rgba(197, 154, 82, 0.08); | |
| }} | |
| .halide-notice.neutral {{ | |
| border-color: rgba(139, 94, 79, 0.38); | |
| background: rgba(139, 94, 79, 0.085); | |
| }} | |
| .halide-stats {{ | |
| display: grid; | |
| gap: 0; | |
| }} | |
| .halide-stats.compact {{ | |
| gap: 0; | |
| }} | |
| .halide-stat {{ | |
| display: grid; | |
| grid-template-columns: minmax(7rem, 0.42fr) minmax(0, 1fr); | |
| gap: 12px; | |
| padding: 8px 0; | |
| border-bottom: 1px solid rgba(58, 53, 46, 0.85); | |
| color: var(--halide-paper); | |
| min-width: 0; | |
| }} | |
| .halide-stat:last-child {{ | |
| border-bottom: 0; | |
| }} | |
| .halide-stat-label {{ | |
| color: var(--halide-muted); | |
| font-weight: 780; | |
| }} | |
| .halide-stat span:last-child {{ | |
| overflow-wrap: anywhere; | |
| text-align: right; | |
| }} | |
| .halide-report {{ | |
| display: grid; | |
| gap: 10px; | |
| }} | |
| .halide-report-section {{ | |
| background: rgba(33, 31, 28, 0.82); | |
| border: 1px solid rgba(58, 53, 46, 0.94); | |
| border-left: 3px solid var(--halide-brass); | |
| border-radius: 8px; | |
| padding: 12px 13px; | |
| }} | |
| .halide-report-heading {{ | |
| color: var(--halide-paper); | |
| font-size: 0.78rem; | |
| font-weight: 880; | |
| letter-spacing: 0.1em !important; | |
| margin-bottom: 8px; | |
| text-transform: uppercase; | |
| }} | |
| .halide-report-body {{ | |
| color: var(--halide-paper-soft); | |
| font-size: 0.93rem; | |
| line-height: 1.56; | |
| }} | |
| .halide-report-body p {{ | |
| margin: 0 0 8px; | |
| }} | |
| .halide-report-body p:last-child {{ | |
| margin-bottom: 0; | |
| }} | |
| .halide-report-body ul, | |
| .halide-report-body ol {{ | |
| margin: 0; | |
| padding-left: 1.15rem; | |
| }} | |
| .halide-report-body li {{ | |
| margin: 5px 0; | |
| padding-left: 2px; | |
| }} | |
| .halide-pill-row {{ | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 7px; | |
| margin-bottom: 10px; | |
| }} | |
| .halide-defect-pill {{ | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| background: rgba(184, 95, 63, 0.13); | |
| color: #ffe4d8; | |
| border: 1px solid rgba(184, 95, 63, 0.38); | |
| padding: 6px 9px; | |
| border-radius: 999px; | |
| font-size: 0.78rem; | |
| font-weight: 780; | |
| white-space: nowrap; | |
| }} | |
| .halide-defect-pill strong {{ | |
| color: var(--halide-paper); | |
| }} | |
| .halide-defect-pill.dust {{ | |
| background: rgba(197, 154, 82, 0.13); | |
| border-color: rgba(197, 154, 82, 0.38); | |
| }} | |
| .halide-defect-pill.dirt {{ | |
| background: rgba(184, 95, 63, 0.13); | |
| border-color: rgba(184, 95, 63, 0.38); | |
| }} | |
| .halide-defect-pill.scratch {{ | |
| background: rgba(239, 93, 82, 0.14); | |
| border-color: rgba(239, 93, 82, 0.42); | |
| }} | |
| .halide-defect-pill.long_hair {{ | |
| background: rgba(139, 94, 79, 0.14); | |
| border-color: rgba(139, 94, 79, 0.40); | |
| }} | |
| .halide-defect-pill.short_hair {{ | |
| background: rgba(154, 174, 111, 0.12); | |
| border-color: rgba(154, 174, 111, 0.38); | |
| }} | |
| .halide-defect-pill.emulsion_damage {{ | |
| background: rgba(215, 203, 184, 0.12); | |
| border-color: rgba(215, 203, 184, 0.34); | |
| }} | |
| .halide-defect-pill.chemical_stain {{ | |
| background: rgba(154, 174, 111, 0.13); | |
| border-color: rgba(154, 174, 111, 0.38); | |
| }} | |
| .halide-defect-pill.light_leak {{ | |
| background: rgba(244, 114, 182, 0.13); | |
| border-color: rgba(244, 114, 182, 0.36); | |
| }} | |
| .halide-history-detail {{ | |
| display: grid; | |
| gap: 8px; | |
| }} | |
| .halide-intake-panel .block, | |
| .halide-inspector .block, | |
| .halide-lighttable .block {{ | |
| background: rgba(24, 23, 21, 0.95) !important; | |
| border-color: rgba(58, 53, 46, 0.95) !important; | |
| border-radius: 8px !important; | |
| box-shadow: none !important; | |
| outline: none !important; | |
| overflow: hidden !important; | |
| }} | |
| .halide-intake-panel .block:focus-within, | |
| .halide-inspector .block:focus-within, | |
| .halide-lighttable .block:focus-within {{ | |
| border-color: rgba(197, 154, 82, 0.48) !important; | |
| box-shadow: 0 0 0 1px rgba(197, 154, 82, 0.16) !important; | |
| }} | |
| .halide-intake-panel .form, | |
| .halide-inspector .form, | |
| .halide-lighttable .form {{ | |
| background: transparent !important; | |
| border-color: transparent !important; | |
| overflow: visible !important; | |
| }} | |
| input, | |
| textarea, | |
| select, | |
| .wrap, | |
| .input-container, | |
| .tokenizer, | |
| .prose {{ | |
| background-color: var(--halide-surface-soft) !important; | |
| color: var(--halide-paper) !important; | |
| border-color: rgba(58, 53, 46, 0.95) !important; | |
| outline: none !important; | |
| }} | |
| label, | |
| .label, | |
| .gradio-radio label, | |
| .gradio-checkbox label {{ | |
| color: var(--halide-muted) !important; | |
| font-weight: 760 !important; | |
| }} | |
| .label-wrap, | |
| .label-wrap span, | |
| label[data-testid="block-label"] {{ | |
| background: rgba(33, 31, 28, 0.98) !important; | |
| border-color: rgba(197, 154, 82, 0.24) !important; | |
| color: var(--halide-paper) !important; | |
| border-radius: 6px !important; | |
| font-weight: 780 !important; | |
| box-shadow: none !important; | |
| }} | |
| label[data-testid="block-label"] span {{ | |
| color: var(--halide-paper) !important; | |
| }} | |
| label[data-testid$="-radio-label"] {{ | |
| background: rgba(33, 31, 28, 0.98) !important; | |
| border: 1px solid rgba(243, 234, 219, 0.18) !important; | |
| border-radius: 8px !important; | |
| box-shadow: none !important; | |
| opacity: 1 !important; | |
| }} | |
| label[data-testid$="-radio-label"].selected {{ | |
| background: rgba(197, 154, 82, 0.16) !important; | |
| border-color: rgba(197, 154, 82, 0.5) !important; | |
| }} | |
| label[data-testid$="-radio-label"] span, | |
| label[data-testid$="-radio-label"] input, | |
| .gradio-checkbox label span {{ | |
| color: var(--halide-paper) !important; | |
| opacity: 1 !important; | |
| }} | |
| label[data-testid$="-radio-label"] input {{ | |
| accent-color: var(--halide-brass); | |
| }} | |
| .tabs {{ | |
| gap: 4px !important; | |
| }} | |
| .tabs button {{ | |
| color: var(--halide-muted) !important; | |
| font-weight: 820 !important; | |
| border-radius: 8px !important; | |
| }} | |
| .tabs button.selected {{ | |
| color: var(--halide-paper) !important; | |
| border-color: var(--halide-brass) !important; | |
| background: rgba(197, 154, 82, 0.10) !important; | |
| }} | |
| table, | |
| thead, | |
| tbody, | |
| tr, | |
| td, | |
| th {{ | |
| color: var(--halide-paper) !important; | |
| }} | |
| pre, | |
| code {{ | |
| font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Consolas, monospace !important; | |
| }} | |
| footer {{ | |
| max-width: 1720px; | |
| margin: 0 auto; | |
| color: var(--halide-muted) !important; | |
| text-align: center; | |
| padding: 14px 8px 4px; | |
| font-size: 0.82rem; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| flex-wrap: wrap; | |
| gap: 10px 16px; | |
| }} | |
| footer a {{ | |
| color: var(--halide-amber-light) !important; | |
| text-decoration: none; | |
| border-bottom: 1px solid rgba(236, 177, 107, 0.35); | |
| }} | |
| footer a:hover {{ | |
| color: var(--halide-paper) !important; | |
| border-bottom-color: rgba(236, 177, 107, 0.75); | |
| }} | |
| #halide-header {{ | |
| background: rgba(17, 17, 17, 0.86); | |
| border: 1px solid rgba(197, 154, 82, 0.28); | |
| border-top: 0; | |
| border-radius: 0 0 8px 8px; | |
| padding: 16px 18px 15px; | |
| box-shadow: 0 18px 48px rgba(0, 0, 0, 0.35); | |
| }} | |
| .halide-inspector {{ | |
| position: sticky; | |
| top: 14px; | |
| max-height: calc(100vh - 32px); | |
| overflow-y: auto; | |
| scrollbar-color: rgba(197, 154, 82, 0.48) rgba(17, 17, 17, 0.88); | |
| }} | |
| .halide-intake-panel {{ | |
| align-self: flex-start; | |
| height: auto !important; | |
| overflow: visible !important; | |
| }} | |
| .halide-main-stage {{ | |
| align-self: stretch; | |
| }} | |
| .halide-lighttable {{ | |
| position: relative; | |
| overflow: hidden; | |
| padding: 16px 20px !important; | |
| background: | |
| linear-gradient(180deg, rgba(17, 17, 17, 0.98), rgba(5, 5, 5, 0.98)), | |
| repeating-linear-gradient( | |
| 90deg, | |
| rgba(243, 234, 219, 0.026) 0, | |
| rgba(243, 234, 219, 0.026) 1px, | |
| transparent 1px, | |
| transparent 28px | |
| ) !important; | |
| }} | |
| .halide-lighttable::before {{ | |
| content: ""; | |
| position: absolute; | |
| inset: 14px 8px; | |
| pointer-events: none; | |
| border-left: 1px solid rgba(197, 154, 82, 0.22); | |
| border-right: 1px solid rgba(197, 154, 82, 0.22); | |
| background: | |
| repeating-linear-gradient( | |
| 0deg, | |
| rgba(197, 154, 82, 0.24) 0, | |
| rgba(197, 154, 82, 0.24) 7px, | |
| transparent 7px, | |
| transparent 22px | |
| ) left center / 5px 100% no-repeat, | |
| repeating-linear-gradient( | |
| 0deg, | |
| rgba(197, 154, 82, 0.24) 0, | |
| rgba(197, 154, 82, 0.24) 7px, | |
| transparent 7px, | |
| transparent 22px | |
| ) right center / 5px 100% no-repeat; | |
| opacity: 0.55; | |
| }} | |
| .halide-lighttable > * {{ | |
| position: relative; | |
| z-index: 1; | |
| }} | |
| .halide-review-actions {{ | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 8px; | |
| margin-top: 12px; | |
| }} | |
| .halide-review-actions a, | |
| .halide-history-preview-actions a {{ | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| min-height: 36px; | |
| padding: 0 12px; | |
| border-radius: 8px; | |
| border: 1px solid rgba(154, 174, 111, 0.38); | |
| background: rgba(154, 174, 111, 0.09); | |
| color: #f5dfac !important; | |
| text-decoration: none !important; | |
| font-size: 0.78rem; | |
| font-weight: 820; | |
| }} | |
| .halide-review-actions a:hover, | |
| .halide-history-preview-actions a:hover {{ | |
| border-color: rgba(154, 174, 111, 0.62); | |
| background: rgba(154, 174, 111, 0.14); | |
| }} | |
| .halide-report-subheading {{ | |
| color: var(--halide-teal); | |
| font-size: 0.82rem; | |
| font-weight: 860; | |
| margin: 10px 0 6px; | |
| }} | |
| .halide-report-body strong {{ | |
| color: var(--halide-paper); | |
| }} | |
| .halide-report-body em {{ | |
| color: var(--halide-paper-soft); | |
| }} | |
| .halide-report-body code {{ | |
| color: #f5dfac; | |
| background: rgba(154, 174, 111, 0.10); | |
| border: 1px solid rgba(154, 174, 111, 0.24); | |
| border-radius: 5px; | |
| padding: 1px 5px; | |
| }} | |
| .halide-tab-note {{ | |
| color: var(--halide-muted); | |
| font-size: 0.8rem; | |
| line-height: 1.35; | |
| margin: 0 0 8px; | |
| }} | |
| .halide-history-actions {{ | |
| gap: 8px !important; | |
| margin: 6px 0 8px !important; | |
| }} | |
| .halide-history-actions button {{ | |
| min-height: 36px !important; | |
| }} | |
| .halide-history-table tbody tr {{ | |
| cursor: pointer; | |
| }} | |
| .halide-history-table table {{ | |
| table-layout: fixed !important; | |
| }} | |
| .halide-history-table th, | |
| .halide-history-table td {{ | |
| font-size: 0.78rem !important; | |
| line-height: 1.25 !important; | |
| vertical-align: top !important; | |
| }} | |
| .halide-history-table th:nth-child(1), | |
| .halide-history-table td:nth-child(1) {{ | |
| width: 24% !important; | |
| }} | |
| .halide-history-table th:nth-child(2), | |
| .halide-history-table td:nth-child(2) {{ | |
| width: 31% !important; | |
| }} | |
| .halide-history-table th:nth-child(3), | |
| .halide-history-table td:nth-child(3) {{ | |
| width: 14% !important; | |
| text-align: center !important; | |
| }} | |
| .halide-history-table th:nth-child(4), | |
| .halide-history-table td:nth-child(4) {{ | |
| width: 31% !important; | |
| }} | |
| .halide-history-table tbody tr:hover td {{ | |
| background: rgba(197, 154, 82, 0.10) !important; | |
| }} | |
| .halide-history-preview {{ | |
| border: 1px solid rgba(197, 154, 82, 0.26); | |
| background: rgba(5, 5, 5, 0.74); | |
| border-radius: 8px; | |
| padding: 8px; | |
| display: grid; | |
| gap: 8px; | |
| }} | |
| .halide-history-preview img {{ | |
| width: 100%; | |
| max-height: 220px; | |
| object-fit: contain; | |
| background: var(--halide-black); | |
| border-radius: 6px; | |
| }} | |
| .halide-history-preview-actions {{ | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 7px; | |
| }} | |
| .halide-inspector-tabs {{ | |
| min-width: 0; | |
| }} | |
| .halide-inspector-tabs .tab-nav, | |
| .halide-inspector-tabs [role="tablist"] {{ | |
| overflow-x: auto; | |
| }} | |
| @media (max-width: 1380px) {{ | |
| .halide-workbench {{ | |
| flex-direction: column !important; | |
| gap: 12px !important; | |
| }} | |
| .halide-intake-panel, | |
| .halide-main-stage, | |
| .halide-inspector {{ | |
| width: 100% !important; | |
| }} | |
| .halide-inspector {{ | |
| min-width: 0 !important; | |
| }} | |
| .halide-lighttable {{ | |
| padding: 11px !important; | |
| }} | |
| .halide-inspector {{ | |
| position: static; | |
| max-height: none; | |
| }} | |
| }} | |
| @media (max-width: 760px) {{ | |
| .gradio-container {{ | |
| padding: 0 10px 12px !important; | |
| }} | |
| #halide-header {{ | |
| align-items: flex-start; | |
| flex-direction: column; | |
| gap: 12px; | |
| padding-top: 14px; | |
| }} | |
| #halide-header h1 {{ | |
| font-size: 1.42rem; | |
| max-width: 11rem; | |
| }} | |
| .halide-model-strip {{ | |
| justify-content: flex-start; | |
| min-width: 0; | |
| width: 100%; | |
| gap: 6px; | |
| }} | |
| .halide-model-strip span, | |
| .halide-model-strip a {{ | |
| padding: 7px 8px; | |
| font-size: 0.68rem; | |
| }} | |
| .halide-brand-mark {{ | |
| width: 40px; | |
| height: 40px; | |
| }} | |
| .halide-intake-panel, | |
| .halide-inspector {{ | |
| padding: 10px; | |
| }} | |
| .halide-run-state {{ | |
| min-height: 68px; | |
| padding: 12px; | |
| }} | |
| .halide-empty-lighttable {{ | |
| min-height: 370px; | |
| }} | |
| .halide-empty-frame-grid {{ | |
| inset: 10px; | |
| }} | |
| .halide-empty-lighttable::after {{ | |
| inset: 16px; | |
| }} | |
| .halide-empty-frame-grid span {{ | |
| top: 10px; | |
| left: 10px; | |
| font-size: 0.62rem; | |
| }} | |
| .halide-empty-center {{ | |
| min-width: calc(100% - 40px); | |
| padding: 15px 16px; | |
| }} | |
| .tabs button {{ | |
| min-height: 42px !important; | |
| padding: 9px 10px !important; | |
| }} | |
| .halide-review-gallery {{ | |
| height: 190px !important; | |
| }} | |
| .halide-compare-stage {{ | |
| min-height: 360px !important; | |
| }} | |
| #halide-run-button, | |
| button.primary, | |
| .primary button {{ | |
| min-height: 48px !important; | |
| }} | |
| .halide-stat {{ | |
| grid-template-columns: 1fr; | |
| gap: 3px; | |
| }} | |
| .halide-stat span:last-child {{ | |
| text-align: left; | |
| }} | |
| }} | |
| """ | |
| def build_theme() -> gr.Theme: | |
| """Build a compact custom workbench theme.""" | |
| return gr.themes.Base( | |
| primary_hue=gr.themes.Color( | |
| c50="#fff8ed", | |
| c100="#f8ead2", | |
| c200="#ebd1a3", | |
| c300="#d9b36d", | |
| c400=BRASS, | |
| c500=BRASS, | |
| c600=BRASS_DARK, | |
| c700="#694a24", | |
| c800="#4d361d", | |
| c900="#332313", | |
| c950="#1c1209", | |
| ), | |
| secondary_hue=gr.themes.Color( | |
| c50="#f8faec", | |
| c100="#eef3d1", | |
| c200="#dbe6a9", | |
| c300=TEAL, | |
| c400="#7f9857", | |
| c500="#667a43", | |
| c600="#506236", | |
| c700="#3e4d2b", | |
| c800="#303c22", | |
| c900="#252f1b", | |
| c950="#131a0d", | |
| ), | |
| neutral_hue=gr.themes.Color( | |
| c50="#fbf7ef", | |
| c100=PAPER, | |
| c200=PAPER_SOFT, | |
| c300=MUTED, | |
| c400="#85796a", | |
| c500="#6e6357", | |
| c600="#544d44", | |
| c700=BORDER, | |
| c800=SURFACE_SOFT, | |
| c900=SURFACE, | |
| c950=BLACK, | |
| ), | |
| font=gr.themes.GoogleFont("Inter"), | |
| font_mono=gr.themes.GoogleFont("JetBrains Mono"), | |
| ).set( | |
| body_background_fill=INK, | |
| body_background_fill_dark=INK, | |
| body_text_color=PAPER, | |
| body_text_color_dark=PAPER, | |
| button_primary_background_fill=COPPER, | |
| button_primary_background_fill_dark=COPPER, | |
| button_primary_text_color="#ffffff", | |
| button_primary_text_color_dark="#ffffff", | |
| block_background_fill=SURFACE, | |
| block_background_fill_dark=SURFACE, | |
| block_border_color=BORDER, | |
| block_border_color_dark=BORDER, | |
| input_background_fill=SURFACE_SOFT, | |
| input_background_fill_dark=SURFACE_SOFT, | |
| input_border_color=BORDER, | |
| input_border_color_dark=BORDER, | |
| ) | |