Spaces:
Running
on
Zero
Running
on
Zero
| /* CSS Variables matching NTv3 hub design - Dark mode (default) */ | |
| :root { | |
| --bg: #0b1020; | |
| --card: rgba(255, 255, 255, 0.06); | |
| --text: rgba(255, 255, 255, 0.75); | |
| --muted: rgba(255, 255, 255, 0.55); | |
| --link: #7dd3fc; | |
| --border: rgba(255, 255, 255, 0.12); | |
| --shadow: 0 10px 30px rgba(0,0,0,0.35); | |
| --radius: 18px; | |
| --input-bg: rgba(125, 211, 252, 0.08); | |
| --input-border: rgba(125, 211, 252, 0.2); | |
| --input-focus-bg: rgba(125, 211, 252, 0.12); | |
| --input-focus-border: rgba(125, 211, 252, 0.35); | |
| --placeholder: rgba(255, 255, 255, 0.4); | |
| --modebar-bg: rgba(255, 255, 255, 0.9); | |
| } | |
| /* Light mode overrides */ | |
| @media (prefers-color-scheme: light) { | |
| :root { | |
| --bg: #ffffff; | |
| --card: rgba(0, 0, 0, 0.04); | |
| --text: rgba(0, 0, 0, 0.75); | |
| --muted: rgba(0, 0, 0, 0.55); | |
| --link: #0369a1; | |
| --border: rgba(0, 0, 0, 0.12); | |
| --shadow: 0 10px 30px rgba(0,0,0,0.1); | |
| --input-bg: rgba(3, 105, 161, 0.08); | |
| --input-border: rgba(3, 105, 161, 0.2); | |
| --input-focus-bg: rgba(3, 105, 161, 0.12); | |
| --input-focus-border: rgba(3, 105, 161, 0.35); | |
| --placeholder: rgba(0, 0, 0, 0.4); | |
| --modebar-bg: rgba(255, 255, 255, 0.95); | |
| } | |
| } | |
| /* Overall page background matching hub */ | |
| body, .gradio-container { | |
| background: var(--bg) ; | |
| min-height: 100vh; | |
| color: var(--text) ; | |
| } | |
| /* Add subtle gradient only in dark mode */ | |
| @media (prefers-color-scheme: dark) { | |
| body, .gradio-container { | |
| background: | |
| radial-gradient(1200px 800px at 10% 10%, rgba(125, 211, 252, 0.12), transparent 60%), | |
| radial-gradient(1200px 800px at 90% 30%, rgba(167, 139, 250, 0.12), transparent 55%), | |
| var(--bg) ; | |
| } | |
| } | |
| /* Ensure all text elements use the correct color - default to white for dark mode */ | |
| body, .gradio-container { | |
| color: var(--text) ; | |
| } | |
| /* All text elements in gradio container */ | |
| .gradio-container *, | |
| .gradio-container p, | |
| .gradio-container span, | |
| .gradio-container div:not([class*="plotly"]):not([class*="modebar"]), | |
| .gradio-container label, | |
| .gradio-container h1, | |
| .gradio-container h2, | |
| .gradio-container h3, | |
| .gradio-container h4, | |
| .gradio-container h5, | |
| .gradio-container h6, | |
| .gradio-container li, | |
| .gradio-container td, | |
| .gradio-container th { | |
| color: var(--text) ; | |
| } | |
| /* Input values and selected text */ | |
| .gradio-container input, | |
| .gradio-container textarea, | |
| .gradio-container select, | |
| .gradio-container input::placeholder, | |
| .gradio-container textarea::placeholder { | |
| color: var(--text) ; | |
| } | |
| /* Links */ | |
| .gradio-container a { | |
| color: var(--link) ; | |
| } | |
| .gradio-container a:hover { | |
| color: var(--link) ; | |
| opacity: 0.8; | |
| } | |
| /* Markdown content */ | |
| .gradio-container .markdown, | |
| .gradio-container .markdown *, | |
| .gradio-container [class*="markdown"] * { | |
| color: var(--text) ; | |
| } | |
| /* Ensure dropdown options are visible */ | |
| .gradio-container select option { | |
| color: var(--text) ; | |
| background: var(--input-bg) ; | |
| } | |
| /* Plot container */ | |
| #tracks_plot { | |
| position: relative; | |
| width: 100% ; | |
| max-width: 100% ; | |
| display: flex ; | |
| justify-content: center ; | |
| align-items: center ; | |
| } | |
| #tracks_plot .wrap, | |
| #tracks_plot .plot-container { | |
| width: 100% ; | |
| max-width: 100% ; | |
| display: flex ; | |
| justify-content: center ; | |
| align-items: center ; | |
| } | |
| /* Center the actual plotly plot */ | |
| #tracks_plot .js-plotly-plot, | |
| #tracks_plot .plotly, | |
| #tracks_plot [class*="plotly"] { | |
| margin: 0 auto ; | |
| display: block ; | |
| } | |
| /* Plotly modebar buttons - make them blue for visibility on white background */ | |
| /* Target all possible Plotly modebar selectors */ | |
| .modebar-btn, | |
| .modebar-btn svg, | |
| .modebar-btn path, | |
| .modebar-group .modebar-btn, | |
| .modebar-group .modebar-btn svg, | |
| .modebar-group .modebar-btn path, | |
| #tracks_plot .modebar-btn, | |
| #tracks_plot .modebar-btn svg, | |
| #tracks_plot .modebar-btn path, | |
| #tracks_plot .modebar-group .modebar-btn, | |
| #tracks_plot .modebar-group .modebar-btn svg, | |
| #tracks_plot .modebar-group .modebar-btn path, | |
| .js-plotly-plot .modebar-btn, | |
| .js-plotly-plot .modebar-btn svg, | |
| .js-plotly-plot .modebar-btn path, | |
| .plotly .modebar-btn, | |
| .plotly .modebar-btn svg, | |
| .plotly .modebar-btn path { | |
| color: #7dd3fc ; | |
| fill: #7dd3fc ; | |
| stroke: #7dd3fc ; | |
| } | |
| .modebar-btn:hover, | |
| .modebar-btn:focus, | |
| #tracks_plot .modebar-btn:hover, | |
| #tracks_plot .modebar-btn:focus { | |
| background-color: rgba(125, 211, 252, 0.1) ; | |
| color: #3B82F6 ; | |
| } | |
| .modebar-btn:hover svg, | |
| .modebar-btn:hover path, | |
| .modebar-btn:focus svg, | |
| .modebar-btn:focus path, | |
| #tracks_plot .modebar-btn:hover svg, | |
| #tracks_plot .modebar-btn:hover path, | |
| #tracks_plot .modebar-btn:focus svg, | |
| #tracks_plot .modebar-btn:focus path { | |
| fill: #3B82F6 ; | |
| stroke: #3B82F6 ; | |
| } | |
| /* Plotly modebar container */ | |
| .modebar, | |
| #tracks_plot .modebar, | |
| .js-plotly-plot .modebar, | |
| .plotly .modebar { | |
| background-color: var(--modebar-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 8px ; | |
| } | |
| /* Predict button matching hub button style */ | |
| #predict_btn { | |
| background: rgba(41,91,234,1) ; | |
| color: white ; | |
| border: none ; | |
| border-radius: 12px ; | |
| font-weight: 600 ; | |
| transition: all 0.2s ease ; | |
| box-shadow: 0 4px 12px rgba(125, 211, 252, 0.3) ; | |
| } | |
| #predict_btn:hover { | |
| background: rgb(5, 36, 121) ; | |
| transform: translateY(-2px) ; | |
| box-shadow: 0 6px 16px rgba(125, 211, 252, 0.4) ; | |
| } | |
| /* Intro markdown container */ | |
| #intro_markdown { | |
| max-width: 100% ; | |
| width: 100% ; | |
| margin: 0 auto; | |
| padding: 44px 18px 6px 18px; | |
| } | |
| /* Hero container matching hub */ | |
| #intro_markdown .intro-hero { | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 26px 24px; | |
| background: var(--card); | |
| box-shadow: var(--shadow); | |
| width: 100% ; | |
| max-width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| /* Badge + title row */ | |
| #intro_markdown .intro-title { | |
| margin-bottom: 0; | |
| } | |
| #intro_markdown .intro-title h1 { | |
| margin-bottom: 8px; | |
| } | |
| #intro_markdown .intro-badge { | |
| display: inline-block; | |
| font-weight: 700; | |
| font-size: 0.95rem; | |
| letter-spacing: 0.02em; | |
| padding: 6px 10px; | |
| border-radius: 999px; | |
| background: rgba(255,255,255,0.04); | |
| border: 1px solid var(--border); | |
| margin-bottom: 10px; | |
| color: var(--muted); | |
| } | |
| #intro_markdown h1 { | |
| font-size: 34px ; | |
| line-height: 1.1 ; | |
| margin: 0 0 8px 0 ; | |
| letter-spacing: -0.02em; | |
| color: var(--text) ; | |
| } | |
| #intro_markdown .intro-subtitle { | |
| font-size: 1.05rem ; | |
| line-height: 1.5 ; | |
| margin: 0 ; | |
| color: var(--muted) ; | |
| } | |
| /* Grid of cards */ | |
| #intro_markdown .intro-grid { | |
| display: grid; | |
| grid-template-columns: repeat(3, minmax(0, 1fr)); | |
| gap: 14px; | |
| margin-top: 18px; | |
| } | |
| /* Cards matching hub card style */ | |
| #intro_markdown .intro-card { | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 18px 18px; | |
| background: var(--card); | |
| box-shadow: 0 6px 18px rgba(0,0,0,0.22); | |
| transition: transform 120ms ease, border-color 120ms ease, box-shadow 120ms ease; | |
| } | |
| #intro_markdown .intro-card:hover { | |
| transform: translateY(-2px); | |
| border-color: rgba(255, 255, 255, 0.2); | |
| box-shadow: 0 10px 30px rgba(0,0,0,0.35); | |
| } | |
| #intro_markdown .intro-card h3 { | |
| font-size: 16px ; | |
| margin: 0 0 10px 0 ; | |
| color: var(--text) ; | |
| letter-spacing: 0.01em; | |
| font-weight: 600; | |
| } | |
| #intro_markdown .intro-card ul { | |
| margin: 0; | |
| padding-left: 18px; | |
| color: var(--muted); | |
| } | |
| #intro_markdown .intro-card li { | |
| font-size: 0.95rem ; | |
| line-height: 1.5 ; | |
| margin: 8px 0; | |
| color: var(--muted) ; | |
| } | |
| #intro_markdown .intro-card li::marker { | |
| color: var(--link); | |
| } | |
| #intro_markdown .intro-card em, | |
| #intro_markdown .intro-card strong { | |
| color: var(--text) ; | |
| } | |
| /* Tip callout */ | |
| #intro_markdown .intro-tip { | |
| margin-top: 18px; | |
| display: flex; | |
| gap: 10px; | |
| align-items: flex-start; | |
| padding: 12px 16px; | |
| border-radius: 14px; | |
| background: var(--card); | |
| border: 1px solid var(--border); | |
| } | |
| /* Pill badges matching hub style */ | |
| #intro_markdown .intro-pillrow { | |
| display: flex; | |
| gap: 8px; | |
| flex-wrap: wrap; | |
| margin-top: 14px; | |
| } | |
| #intro_markdown .intro-pill { | |
| font-size: 12px; | |
| padding: 6px 10px; | |
| border-radius: 999px; | |
| border: 1px solid var(--border); | |
| background: rgba(255, 255, 255, 0.04); | |
| color: var(--muted); | |
| font-weight: 500; | |
| } | |
| #intro_markdown .intro-tip-icon { | |
| font-size: 1.2rem; | |
| line-height: 1; | |
| margin-top: 1px; | |
| } | |
| #intro_markdown .intro-tip span { | |
| font-size: 0.95rem ; | |
| line-height: 1.5 ; | |
| color: var(--muted) ; | |
| } | |
| #intro_markdown .intro-tip strong { | |
| color: var(--text) ; | |
| } | |
| /* Species info box */ | |
| #intro_markdown .intro-species-info { | |
| margin-top: 18px ; | |
| padding: 12px 16px ; | |
| background: var(--card) ; | |
| border-radius: 12px ; | |
| border: 1px solid var(--border) ; | |
| font-size: 0.95rem ; | |
| color: var(--muted) ; | |
| } | |
| #intro_markdown .intro-species-info strong { | |
| color: var(--text) ; | |
| } | |
| /* Responsive */ | |
| @media (max-width: 860px) { | |
| #intro_markdown .intro-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| #intro_markdown h1 { | |
| font-size: 28px ; | |
| } | |
| } | |
| /* ============================================================================ | |
| GRADIO COMPONENT STYLING | |
| ============================================================================ */ | |
| /* Remove grey backgrounds from Gradio containers */ | |
| .gr-form, | |
| .gr-block, | |
| .gr-panel, | |
| .gr-box, | |
| [class*="panel"], | |
| [class*="block"], | |
| [class*="form"], | |
| /* Remove grey backgrounds from Gradio containers and wrappers */ | |
| .gradio-container > div, | |
| .gradio-container .wrap, | |
| .gradio-container [class*="panel"], | |
| .gradio-container [class*="block"], | |
| .gradio-container [class*="form"], | |
| [class*="gradio"] [class*="panel"], | |
| [class*="gradio"] [class*="block"], | |
| div[class*="panel"], | |
| div[class*="block"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Ensure form containers don't constrain textbox width */ | |
| .gr-form .gr-textbox, | |
| .gr-block .gr-textbox, | |
| .gradio-container .gr-textbox { | |
| width: 100% ; | |
| max-width: 100% ; | |
| } | |
| /* Remove grey backgrounds from section containers */ | |
| section, | |
| .gr-section, | |
| [role="region"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: none ; | |
| } | |
| /* Markdown headings */ | |
| h2 { | |
| color: var(--text) ; | |
| font-size: 18px ; | |
| letter-spacing: 0.01em ; | |
| margin-top: 24px ; | |
| margin-bottom: 16px ; | |
| } | |
| /* Input labels */ | |
| label { | |
| color: var(--text) ; | |
| font-weight: 500 ; | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* ============================================================================ | |
| INPUT FIELDS - Base styling for all input types | |
| ============================================================================ */ | |
| /* Base input styling - applies to all input types EXCEPT number inputs in coords_group */ | |
| input[type="text"], | |
| input[type="search"], | |
| input[type="email"], | |
| input[type="password"], | |
| input[type="tel"], | |
| input[type="url"], | |
| textarea { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| color: var(--text) ; | |
| padding: 10px 12px ; | |
| } | |
| /* Number inputs - default blue background */ | |
| /* Note: Coordinates group inputs are overridden at the end of the file */ | |
| input[type="number"], | |
| .gr-number input { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| color: var(--text) ; | |
| padding: 10px 12px ; | |
| } | |
| input[type="text"]:focus, | |
| input[type="search"]:focus, | |
| input[type="email"]:focus, | |
| input[type="password"]:focus, | |
| input[type="tel"]:focus, | |
| input[type="url"]:focus, | |
| textarea:focus { | |
| background: var(--input-focus-bg) ; | |
| background-color: var(--input-focus-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| outline: none ; | |
| } | |
| /* Number inputs focus - default blue background */ | |
| input[type="number"]:focus { | |
| background: var(--input-focus-bg) ; | |
| background-color: var(--input-focus-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| outline: none ; | |
| } | |
| /* Coordinates group number inputs focus - transparent background */ | |
| #coords_group input[type="number"]:focus, | |
| #coords_group .gr-number input:focus, | |
| #coords_group .gr-row input[type="number"]:focus, | |
| #coords_group .gr-row .gr-number input:focus { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| outline: none ; | |
| } | |
| input[type="text"]:hover, | |
| input[type="search"]:hover, | |
| textarea:hover { | |
| background: var(--input-focus-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| /* Number inputs hover - default blue background */ | |
| input[type="number"]:hover { | |
| background: var(--input-focus-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| /* Coordinates group number inputs hover - transparent background */ | |
| #coords_group input[type="number"]:hover, | |
| #coords_group .gr-number input:hover, | |
| #coords_group .gr-row input[type="number"]:hover, | |
| #coords_group .gr-row .gr-number input:hover { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| /* Placeholder text */ | |
| input::placeholder, | |
| textarea::placeholder { | |
| color: var(--placeholder) ; | |
| opacity: 0.7 ; | |
| } | |
| /* Override inline grey backgrounds */ | |
| input[style*="background"], | |
| textarea[style*="background"] { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| } | |
| /* ============================================================================ | |
| GRADIO COMPONENT WRAPPERS - Make transparent | |
| ============================================================================ */ | |
| /* Make textbox and number input wrappers transparent (only input is styled) */ | |
| /* NOTE: Dropdowns are EXCLUDED - they keep blue backgrounds */ | |
| .gr-textbox .wrap, | |
| .gr-textbox .wrap > div, | |
| .gr-textbox .wrap > div > div, | |
| .gr-number .wrap, | |
| .gr-number .wrap > div, | |
| .gr-number .wrap > div > div, | |
| .gr-radio .wrap, | |
| .gr-radio .wrap > div, | |
| .gr-radio .wrap > div > div { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Explicitly ensure dropdown wrappers are NOT transparent */ | |
| .gr-dropdown .wrap, | |
| .gr-dropdown .wrap > div, | |
| .gr-dropdown .wrap > div > div, | |
| .gr-dropdown .wrap > div > div > div { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| } | |
| /* ============================================================================ | |
| TEXTBOX COMPONENTS | |
| ============================================================================ */ | |
| /* Textbox component - transparent wrapper, only input is styled */ | |
| .gr-textbox { | |
| background: transparent ; | |
| border: none ; | |
| box-shadow: none ; | |
| padding: 0 ; | |
| border-top: none ; | |
| margin-top: 0 ; | |
| width: 100% ; | |
| max-width: 100% ; | |
| } | |
| /* Make textbox wrappers full width */ | |
| .gr-textbox .wrap, | |
| .gr-textbox .wrap > div, | |
| .gr-textbox .wrap > div > div { | |
| width: 100% ; | |
| max-width: 100% ; | |
| } | |
| /* Make textbox inputs full width */ | |
| .gr-textbox input, | |
| .gr-textbox textarea { | |
| width: 100% ; | |
| max-width: 100% ; | |
| box-sizing: border-box ; | |
| } | |
| /* Textbox input inherits base input styling above */ | |
| /* ============================================================================ | |
| NUMBER INPUT COMPONENTS | |
| ============================================================================ */ | |
| /* Number input component - transparent wrapper, only input is styled */ | |
| .gr-number { | |
| background: transparent ; | |
| } | |
| /* Number input inherits base input styling above */ | |
| /* ============================================================================ | |
| DROPDOWN COMPONENTS | |
| ============================================================================ */ | |
| /* Dropdowns */ | |
| .gr-dropdown, | |
| .gr-dropdown input, | |
| .gr-dropdown select, | |
| .gr-dropdown .wrap, | |
| .gr-dropdown .wrap > div, | |
| select { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| color: var(--text) ; | |
| outline: none ; | |
| box-shadow: none ; | |
| } | |
| /* Override any inline grey backgrounds on dropdowns */ | |
| .gr-dropdown[style*="background"], | |
| select[style*="background"] { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| } | |
| .gr-dropdown:hover, | |
| .gr-dropdown:focus, | |
| .gr-dropdown input:hover, | |
| .gr-dropdown input:focus, | |
| .gr-dropdown select:hover, | |
| .gr-dropdown select:focus, | |
| select:hover, | |
| select:focus { | |
| background: var(--input-focus-bg) ; | |
| background-color: var(--input-focus-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| outline: none ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| } | |
| /* Ensure dropdown option container is blue */ | |
| .gr-dropdown .wrap select, | |
| .gr-dropdown select option { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| color: var(--text) ; | |
| } | |
| /* Selected tags/chips in multiselect dropdown */ | |
| #bed_elements_dropdown .wrap > div > span:not(:empty), | |
| #bed_elements_dropdown .wrap > div > div:not(.wrap):not(input):not(select):not(:empty), | |
| #bed_elements_dropdown .wrap > div > button:not([type="submit"]), | |
| #bed_elements_dropdown [class*="tag"], | |
| #bed_elements_dropdown [class*="chip"], | |
| #bed_elements_dropdown [class*="badge"], | |
| #bed_elements_dropdown [class*="pill"] { | |
| background: var(--input-focus-bg) ; | |
| background-color: var(--input-focus-bg) ; | |
| border: 1px solid var(--input-focus-border) ; | |
| border-radius: 6px ; | |
| color: var(--text) ; | |
| padding: 5px 10px ; | |
| margin: 2px 4px 2px 0 ; | |
| font-size: 0.875rem ; | |
| font-weight: 500 ; | |
| display: inline-flex ; | |
| align-items: center ; | |
| gap: 6px ; | |
| transition: all 0.2s ease ; | |
| } | |
| #bed_elements_dropdown .wrap > div > span:hover:not(input), | |
| #bed_elements_dropdown .wrap > div > div:hover:not(input):not(select):not(.wrap), | |
| #bed_elements_dropdown .wrap > div > button:hover:not([type="submit"]) { | |
| background: var(--input-focus-bg) ; | |
| opacity: 0.9 ; | |
| border-color: var(--link) ; | |
| } | |
| /* X button inside tags */ | |
| #bed_elements_dropdown button[aria-label*="Remove"], | |
| #bed_elements_dropdown button[aria-label*="remove"], | |
| #bed_elements_dropdown span button, | |
| #bed_elements_dropdown div button { | |
| background: transparent ; | |
| border: none ; | |
| color: var(--text) ; | |
| opacity: 0.7 ; | |
| padding: 2px 4px ; | |
| margin-left: 4px ; | |
| border-radius: 4px ; | |
| cursor: pointer ; | |
| } | |
| #bed_elements_dropdown button[aria-label*="Remove"]:hover, | |
| #bed_elements_dropdown button[aria-label*="remove"]:hover, | |
| #bed_elements_dropdown span button:hover, | |
| #bed_elements_dropdown div button:hover { | |
| background: rgba(255, 255, 255, 0.1) ; | |
| opacity: 1 ; | |
| } | |
| /* ============================================================================ | |
| RADIO BUTTONS | |
| ============================================================================ */ | |
| .gr-radio { | |
| background: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| padding: 12px ; | |
| } | |
| .gr-radio label, | |
| input[type="radio"] + label { | |
| color: var(--text) ; | |
| background: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 8px ; | |
| padding: 8px 12px ; | |
| margin: 4px ; | |
| display: inline-block ; | |
| transition: all 0.2s ease ; | |
| } | |
| .gr-radio label:hover, | |
| input[type="radio"] + label:hover { | |
| background: var(--input-focus-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| .gr-radio input[type="radio"]:checked + label, | |
| input[type="radio"]:checked + label { | |
| background: var(--input-focus-bg) ; | |
| opacity: 1.2 ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| /* Change radio button selected indicator from orange to blue */ | |
| input[type="radio"] { | |
| accent-color: #7dd3fc ; | |
| color: #7dd3fc ; | |
| } | |
| /* Override Gradio's default orange radio button styling */ | |
| input[type="radio"]:checked { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Radio button circle/dot when checked - change from orange to blue */ | |
| input[type="radio"]:checked::before, | |
| input[type="radio"]:checked::after, | |
| .gr-radio input[type="radio"]:checked::before, | |
| .gr-radio input[type="radio"]:checked::after, | |
| label:has(input[type="radio"]:checked) input[type="radio"]::before, | |
| label:has(input[type="radio"]:checked) input[type="radio"]::after { | |
| color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* SVG radio button icons */ | |
| input[type="radio"]:checked + svg, | |
| .gr-radio input[type="radio"]:checked + svg, | |
| label:has(input[type="radio"]:checked) svg { | |
| fill: #7dd3fc ; | |
| color: #7dd3fc ; | |
| } | |
| /* Radio button circle background when checked */ | |
| input[type="radio"]:checked { | |
| background-color: #7dd3fc ; | |
| background: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Override any orange colors in radio button styling */ | |
| input[type="radio"][style*="orange"], | |
| input[type="radio"][style*="#ff"], | |
| input[type="radio"][style*="rgb(255"], | |
| .gr-radio input[type="radio"][style*="orange"], | |
| .gr-radio input[type="radio"][style*="#ff"], | |
| .gr-radio input[type="radio"][style*="rgb(255"] { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Target radio button wrapper elements */ | |
| .gr-radio .wrap input[type="radio"]:checked, | |
| .gr-radio label .wrap input[type="radio"]:checked, | |
| .gr-radio [class*="radio"] input[type="radio"]:checked { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Override Gradio's default radio button checked state colors */ | |
| .gradio-container input[type="radio"]:checked { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| background: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* ============================================================================ | |
| CHECKBOX GROUPS | |
| ============================================================================ */ | |
| .gr-checkboxgroup { | |
| background: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| padding: 12px ; | |
| } | |
| .gr-checkboxgroup label { | |
| color: var(--text) ; | |
| background: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 8px ; | |
| padding: 8px 12px ; | |
| margin: 4px 0 ; | |
| display: block ; | |
| transition: all 0.2s ease ; | |
| } | |
| .gr-checkboxgroup label:hover { | |
| background: var(--input-focus-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| .gr-checkboxgroup input[type="checkbox"]:checked + label, | |
| .gr-checkboxgroup label:has(input[type="checkbox"]:checked) { | |
| background: var(--input-focus-bg) ; | |
| opacity: 1.2 ; | |
| border: 1px solid var(--input-focus-border) ; | |
| } | |
| /* Change checkbox icon color from orange to blue */ | |
| input[type="checkbox"] { | |
| accent-color: #7dd3fc ; | |
| color: #7dd3fc ; | |
| } | |
| /* Override Gradio's default orange checkbox styling */ | |
| input[type="checkbox"]:checked { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Checkbox checkmark icon - change from orange to blue */ | |
| input[type="checkbox"]:checked::before, | |
| input[type="checkbox"]:checked::after, | |
| .gr-checkboxgroup input[type="checkbox"]:checked::before, | |
| .gr-checkboxgroup input[type="checkbox"]:checked::after, | |
| label:has(input[type="checkbox"]:checked) input[type="checkbox"]::before, | |
| label:has(input[type="checkbox"]:checked) input[type="checkbox"]::after { | |
| color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* SVG checkmark icons */ | |
| input[type="checkbox"]:checked + svg, | |
| .gr-checkboxgroup input[type="checkbox"]:checked + svg, | |
| label:has(input[type="checkbox"]:checked) svg { | |
| fill: #7dd3fc ; | |
| color: #7dd3fc ; | |
| } | |
| /* Checkbox square/box background when checked */ | |
| input[type="checkbox"]:checked { | |
| background-color: #7dd3fc ; | |
| background: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Override any orange colors in checkbox styling */ | |
| input[type="checkbox"][style*="orange"], | |
| input[type="checkbox"][style*="#ff"], | |
| input[type="checkbox"][style*="rgb(255"], | |
| .gr-checkboxgroup input[type="checkbox"][style*="orange"], | |
| .gr-checkboxgroup input[type="checkbox"][style*="#ff"], | |
| .gr-checkboxgroup input[type="checkbox"][style*="rgb(255"] { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Target checkbox wrapper elements that might contain the icon */ | |
| .gr-checkboxgroup .wrap input[type="checkbox"]:checked, | |
| .gr-checkboxgroup label .wrap input[type="checkbox"]:checked, | |
| .gr-checkboxgroup [class*="checkbox"] input[type="checkbox"]:checked { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* Checkbox icon/checkmark in various possible locations */ | |
| .gr-checkboxgroup [class*="icon"]:has(input[type="checkbox"]:checked), | |
| .gr-checkboxgroup [class*="check"]:has(input[type="checkbox"]:checked), | |
| .gr-checkboxgroup span:has(input[type="checkbox"]:checked), | |
| .gr-checkboxgroup div:has(input[type="checkbox"]:checked) { | |
| color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| } | |
| /* Override Gradio's default checkbox checked state colors */ | |
| .gradio-container input[type="checkbox"]:checked { | |
| accent-color: #7dd3fc ; | |
| background-color: #7dd3fc ; | |
| background: #7dd3fc ; | |
| border-color: #7dd3fc ; | |
| } | |
| /* ============================================================================ | |
| BUTTONS | |
| ============================================================================ */ | |
| button { | |
| border-radius: 12px ; | |
| font-weight: 500 ; | |
| transition: all 0.2s ease ; | |
| } | |
| /* All buttons except predict button */ | |
| button:not(#predict_btn):not([id*="predict"]), | |
| .gr-button:not(#predict_btn), | |
| button.gr-button:not(#predict_btn), | |
| [class*="button"]:not(#predict_btn) { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| color: var(--text) ; | |
| } | |
| button:not(#predict_btn):not([id*="predict"]):hover, | |
| .gr-button:not(#predict_btn):hover, | |
| button.gr-button:not(#predict_btn):hover, | |
| [class*="button"]:not(#predict_btn):hover { | |
| background: var(--input-focus-bg) ; | |
| background-color: var(--input-focus-bg) ; | |
| border-color: var(--link) ; | |
| box-shadow: 0 4px 12px var(--input-bg) ; | |
| } | |
| /* ============================================================================ | |
| COORDINATES GROUP - Special handling | |
| ============================================================================ */ | |
| /* Remove borders/lines from input sections */ | |
| .gr-group, | |
| .gr-group *, | |
| .gr-group .wrap, | |
| .gr-group .wrap > div, | |
| .gr-group .wrap > div > div { | |
| border: none ; | |
| box-shadow: none ; | |
| margin-bottom: 0 ; | |
| padding-bottom: 0 ; | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| .gr-row, | |
| .gr-row *, | |
| .gr-row .wrap, | |
| .gr-row .wrap > div, | |
| .gr-row .wrap > div > div { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Coordinates group: make wrappers transparent, keep inputs styled */ | |
| #coords_group .wrap, | |
| #coords_group .wrap > div, | |
| #coords_group .wrap > div > div, | |
| #coords_group .gr-row, | |
| #coords_group .gr-row *:not(input):not(textarea):not(select) { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Override inline grey backgrounds in coordinates group */ | |
| #coords_group [style*="rgb(40"], | |
| #coords_group [style*="rgba(40"], | |
| #coords_group [style*="rgb(50"], | |
| #coords_group [style*="rgba(50"], | |
| #coords_group [style*="#282"], | |
| #coords_group [style*="#3a4"], | |
| #coords_group [style*="#444"], | |
| #coords_group [style*="#555"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Inputs in coordinates group - match dropdown style with transparent background and border */ | |
| /* These rules must override base input styling, so they come after */ | |
| #coords_group .gr-number input, | |
| #coords_group .gr-number .wrap input, | |
| #coords_group .gr-number .wrap > div input, | |
| #coords_group input[type="number"], | |
| #coords_group .gr-row .gr-number input, | |
| #coords_group .gr-row input[type="number"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| color: var(--text) ; | |
| height: 44px ; | |
| min-height: 44px ; | |
| padding: 0 12px ; | |
| line-height: 44px ; | |
| } | |
| #coords_group .gr-number input:hover, | |
| #coords_group .gr-number .wrap input:hover, | |
| #coords_group input[type="number"]:hover, | |
| #coords_group .gr-row .gr-number input:hover, | |
| #coords_group .gr-row input[type="number"]:hover { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| #coords_group .gr-number input:focus, | |
| #coords_group .gr-number .wrap input:focus, | |
| #coords_group input[type="number"]:focus, | |
| #coords_group .gr-row .gr-number input:focus, | |
| #coords_group .gr-row input[type="number"]:focus { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| outline: none ; | |
| } | |
| /* ============================================================================ | |
| CHROMOSOME INPUT - Special case | |
| ============================================================================ */ | |
| /* Chromosome component: transparent wrapper, remove all borders from wrappers */ | |
| #chromosome_input, | |
| #chromosome_input label, | |
| #chromosome_input > label, | |
| #chromosome_input .wrap label { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: none ; | |
| box-shadow: none ; | |
| padding: 0 ; | |
| } | |
| /* Remove borders from all wrapper elements */ | |
| #chromosome_input .wrap, | |
| #chromosome_input .wrap > div, | |
| #chromosome_input .wrap > div > div, | |
| #chromosome_input .wrap > div > div > div, | |
| #chromosome_input.gr-dropdown, | |
| #chromosome_input.gr-dropdown .wrap, | |
| #chromosome_input.gr-dropdown .wrap > div, | |
| #chromosome_input.gr-dropdown .wrap > div > div { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: none ; | |
| box-shadow: none ; | |
| outline: none ; | |
| } | |
| /* Chromosome input: match dropdown style with transparent background and border */ | |
| /* Only the actual input field should have a border */ | |
| #chromosome_input input, | |
| #chromosome_input input[type="text"], | |
| #chromosome_input .wrap input, | |
| #chromosome_input .wrap > div input, | |
| #chromosome_input .wrap > div > div input, | |
| #chromosome_input [role="combobox"], | |
| #chromosome_input button[aria-haspopup] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| color: var(--text) ; | |
| height: 44px ; | |
| min-height: 44px ; | |
| padding: 0 12px ; | |
| line-height: 44px ; | |
| } | |
| #chromosome_input input:hover, | |
| #chromosome_input .wrap input:hover, | |
| #chromosome_input [role="combobox"]:hover { | |
| border-color: var(--input-focus-border) ; | |
| } | |
| #chromosome_input input:focus, | |
| #chromosome_input .wrap input:focus, | |
| #chromosome_input [role="combobox"]:focus { | |
| border-color: var(--input-focus-border) ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| outline: none ; | |
| } | |
| /* ============================================================================ | |
| FORM SECTIONS & SEPARATORS | |
| ============================================================================ */ | |
| .form { | |
| border: none ; | |
| } | |
| hr { | |
| display: none ; | |
| } | |
| #dna_sequence_input { | |
| border-top: none ; | |
| margin-top: 0 ; | |
| padding-top: 0 ; | |
| } | |
| #dna_sequence_input::before, | |
| #dna_sequence_input .wrap::before { | |
| display: none ; | |
| content: none ; | |
| } | |
| #coords_group[style*="display: none"], | |
| #coords_group:not(:visible) { | |
| display: none ; | |
| border: none ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| #coords_group + *, | |
| #coords_group ~ #dna_sequence_input { | |
| border-top: none ; | |
| margin-top: 0 ; | |
| padding-top: 0 ; | |
| } | |
| /* ============================================================================ | |
| ACCORDION | |
| ============================================================================ */ | |
| .gr-accordion { | |
| background: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| } | |
| .gr-accordion summary { | |
| color: var(--text) ; | |
| } | |
| .gr-accordion .gr-json { | |
| color: var(--muted) ; | |
| } | |
| /* ============================================================================ | |
| FINAL OVERRIDES - Ensure dropdowns have blue backgrounds | |
| ============================================================================ */ | |
| /* Force dropdowns to have blue background - override any grey */ | |
| .gradio-container .gr-dropdown, | |
| .gradio-container .gr-dropdown .wrap, | |
| .gradio-container .gr-dropdown .wrap > div, | |
| .gradio-container .gr-dropdown .wrap > div > div, | |
| .gradio-container .gr-dropdown input, | |
| .gradio-container .gr-dropdown select { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| } | |
| /* Override any grey color values in inline styles for dropdowns */ | |
| .gradio-container .gr-dropdown[style*="rgb(40"], | |
| .gradio-container .gr-dropdown[style*="rgba(40"], | |
| .gradio-container .gr-dropdown[style*="#282"], | |
| .gradio-container .gr-dropdown[style*="#3a4"], | |
| .gradio-container .gr-dropdown[style*="#444"], | |
| .gradio-container .gr-dropdown .wrap[style*="rgb(40"], | |
| .gradio-container .gr-dropdown .wrap[style*="rgba(40"], | |
| .gradio-container .gr-dropdown .wrap[style*="#282"], | |
| .gradio-container .gr-dropdown .wrap[style*="#3a4"], | |
| .gradio-container .gr-dropdown .wrap[style*="#444"], | |
| .gradio-container .gr-dropdown .wrap > div[style*="rgb(40"], | |
| .gradio-container .gr-dropdown .wrap > div[style*="rgba(40"], | |
| .gradio-container .gr-dropdown .wrap > div[style*="#282"], | |
| .gradio-container .gr-dropdown .wrap > div[style*="#3a4"], | |
| .gradio-container .gr-dropdown .wrap > div[style*="#444"] { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| } | |
| /* Ultimate catch-all: Force blue background on ALL dropdown elements */ | |
| /* This ensures no grey backgrounds slip through - applies to Model, Species, Chromosome, etc. */ | |
| .gradio-container .gr-dropdown, | |
| .gradio-container .gr-dropdown > *, | |
| .gradio-container .gr-dropdown .wrap, | |
| .gradio-container .gr-dropdown .wrap > *, | |
| .gradio-container .gr-dropdown .wrap > div, | |
| .gradio-container .gr-dropdown .wrap > div > *, | |
| .gradio-container .gr-dropdown .wrap > div > div, | |
| .gradio-container .gr-dropdown .wrap > div > div > *, | |
| .gradio-container .gr-dropdown .wrap > div > div > div, | |
| .gradio-container .gr-dropdown input, | |
| .gradio-container .gr-dropdown select, | |
| .gradio-container select { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| border: 1px solid var(--input-border) ; | |
| } | |
| /* Override any element with grey background that's inside a dropdown */ | |
| .gradio-container .gr-dropdown [style*="rgb(40"], | |
| .gradio-container .gr-dropdown [style*="rgba(40"], | |
| .gradio-container .gr-dropdown [style*="#282"], | |
| .gradio-container .gr-dropdown [style*="#3a4"], | |
| .gradio-container .gr-dropdown [style*="#444"], | |
| .gradio-container .gr-dropdown [style*="background: rgb(40"], | |
| .gradio-container .gr-dropdown [style*="background: rgba(40"] { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| } | |
| /* ============================================================================ | |
| FINAL OVERRIDE - Number inputs in coordinates group: transparent background | |
| ============================================================================ */ | |
| /* This comes at the very end to override ALL other rules - maximum specificity */ | |
| /* Normal state */ | |
| #coords_group input[type="number"], | |
| #coords_group .gr-number input, | |
| #coords_group .gr-number .wrap input, | |
| #coords_group .gr-number .wrap > div input, | |
| #coords_group .gr-number .wrap > div > div input, | |
| #coords_group .gr-row input[type="number"], | |
| #coords_group .gr-row .gr-number input, | |
| #coords_group .gr-row .gr-number .wrap input, | |
| #coords_group .gr-row .gr-number .wrap > div input, | |
| .gradio-container #coords_group input[type="number"], | |
| .gradio-container #coords_group .gr-number input, | |
| .gradio-container #coords_group .gr-row input[type="number"], | |
| .gradio-container #coords_group .gr-row .gr-number input, | |
| #coords_group input[type="number"][style*="background"], | |
| #coords_group input[type="number"][style*="rgba(125"], | |
| #coords_group input[type="number"][style*="rgb(125"], | |
| #coords_group .gr-number input[style*="background"], | |
| #coords_group .gr-number input[style*="rgba(125"], | |
| #coords_group .gr-number input[style*="rgb(125"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| color: var(--text) ; | |
| } | |
| /* Hover state */ | |
| #coords_group input[type="number"]:hover, | |
| #coords_group .gr-number input:hover, | |
| #coords_group .gr-number .wrap input:hover, | |
| #coords_group .gr-row input[type="number"]:hover, | |
| #coords_group .gr-row .gr-number input:hover, | |
| .gradio-container #coords_group input[type="number"]:hover, | |
| .gradio-container #coords_group .gr-number input:hover { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| /* Focus state */ | |
| #coords_group input[type="number"]:focus, | |
| #coords_group .gr-number input:focus, | |
| #coords_group .gr-number .wrap input:focus, | |
| #coords_group .gr-row input[type="number"]:focus, | |
| #coords_group .gr-row .gr-number input:focus, | |
| .gradio-container #coords_group input[type="number"]:focus, | |
| .gradio-container #coords_group .gr-number input:focus { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| outline: none ; | |
| } | |
| /* ============================================================================ | |
| START AND END INPUTS - Direct ID targeting for maximum specificity | |
| ============================================================================ */ | |
| /* Target Start and End inputs directly by their IDs - override everything */ | |
| #start_input input, | |
| #start_input input[type="number"], | |
| #start_input .wrap input, | |
| #start_input .wrap > div input, | |
| #start_input .wrap > div > div input, | |
| #end_input input, | |
| #end_input input[type="number"], | |
| #end_input .wrap input, | |
| #end_input .wrap > div input, | |
| #end_input .wrap > div > div input, | |
| #coords_group #start_input input, | |
| #coords_group #start_input input[type="number"], | |
| #coords_group #end_input input, | |
| #coords_group #end_input input[type="number"], | |
| .gradio-container #start_input input, | |
| .gradio-container #start_input input[type="number"], | |
| .gradio-container #end_input input, | |
| .gradio-container #end_input input[type="number"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid var(--input-border) ; | |
| border-radius: 12px ; | |
| color: var(--text) ; | |
| } | |
| #start_input input:hover, | |
| #start_input .wrap input:hover, | |
| #end_input input:hover, | |
| #end_input .wrap input:hover, | |
| #coords_group #start_input input:hover, | |
| #coords_group #end_input input:hover { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| #start_input input:focus, | |
| #start_input .wrap input:focus, | |
| #end_input input:focus, | |
| #end_input .wrap input:focus, | |
| #coords_group #start_input input:focus, | |
| #coords_group #end_input input:focus { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border-color: var(--input-focus-border) ; | |
| box-shadow: 0 0 0 3px var(--input-bg) ; | |
| outline: none ; | |
| } | |
| /* Override any inline styles on Start and End inputs */ | |
| #start_input input[style*="background"], | |
| #start_input input[style*="rgba(125"], | |
| #start_input input[style*="rgb(125"], | |
| #end_input input[style*="background"], | |
| #end_input input[style*="rgba(125"], | |
| #end_input input[style*="rgb(125"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* ============================================================================ | |
| GRADIO FOOTER BUTTONS - Remove blue backgrounds | |
| ============================================================================ */ | |
| /* Target footer buttons: "Use via API" and "Settings" */ | |
| footer button, | |
| footer .gr-button, | |
| footer a[role="button"], | |
| footer a[class*="button"], | |
| .gradio-footer button, | |
| .gradio-footer .gr-button, | |
| .gradio-footer a[role="button"], | |
| [class*="footer"] button, | |
| [class*="footer"] .gr-button, | |
| [class*="footer"] a[role="button"], | |
| footer span button, | |
| footer div button { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid var(--input-border) ; | |
| color: var(--text) ; | |
| } | |
| footer button:hover, | |
| footer .gr-button:hover, | |
| footer a[role="button"]:hover, | |
| footer a[class*="button"]:hover, | |
| .gradio-footer button:hover, | |
| .gradio-footer .gr-button:hover, | |
| .gradio-footer a[role="button"]:hover, | |
| [class*="footer"] button:hover, | |
| [class*="footer"] .gr-button:hover, | |
| [class*="footer"] a[role="button"]:hover, | |
| footer span button:hover, | |
| footer div button:hover { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| border-color: var(--input-focus-border) ; | |
| } | |
| /* More specific targeting for footer area buttons */ | |
| footer > div button, | |
| footer > div a[role="button"], | |
| footer > div .gr-button, | |
| footer > div > div button, | |
| footer > div > div a[role="button"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid var(--input-border) ; | |
| } | |
| /* Target all buttons in footer container */ | |
| footer * button, | |
| footer * a[role="button"], | |
| footer * .gr-button { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Override any inline blue/grey backgrounds on footer buttons */ | |
| footer button[style*="background"], | |
| footer a[style*="background"], | |
| footer .gr-button[style*="background"], | |
| footer button[style*="rgba(125"], | |
| footer button[style*="rgb(125"], | |
| footer a[style*="rgba(125"], | |
| footer a[style*="rgb(125"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Target buttons with specific Gradio footer classes */ | |
| [class*="api"] button, | |
| [class*="API"] button, | |
| [class*="settings"] button, | |
| [class*="Settings"] button, | |
| button[class*="api"], | |
| button[class*="API"], | |
| button[class*="settings"], | |
| button[class*="Settings"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid rgba(125, 211, 252, 0.2) ; | |
| } | |
| /* Specifically target buttons and links in footer - more specific */ | |
| footer a, | |
| footer button, | |
| footer [role="button"], | |
| footer [class*="button"], | |
| footer span button, | |
| footer div button, | |
| footer div a, | |
| footer span a { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid rgba(125, 211, 252, 0.2) ; | |
| color: var(--text) ; | |
| } | |
| footer a:hover, | |
| footer button:hover, | |
| footer [role="button"]:hover, | |
| footer [class*="button"]:hover, | |
| footer span button:hover, | |
| footer div button:hover, | |
| footer div a:hover, | |
| footer span a:hover { | |
| background: var(--input-bg) ; | |
| background-color: var(--input-bg) ; | |
| } | |
| /* Override any blue color values in inline styles - very specific */ | |
| footer button[style*="background"], | |
| footer a[style*="background"], | |
| footer [role="button"][style*="background"], | |
| footer [class*="button"][style*="background"], | |
| footer button[style*="background-color"], | |
| footer a[style*="background-color"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Target Gradio's specific footer structure with maximum specificity */ | |
| .gradio-container footer button, | |
| .gradio-container footer a, | |
| .gradio-container > footer button, | |
| .gradio-container > footer a, | |
| body footer button, | |
| body footer a, | |
| html body footer button, | |
| html body footer a { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Target by data attributes or specific Gradio classes */ | |
| footer [data-testid], | |
| footer [aria-label], | |
| footer button[type="button"], | |
| footer a[href] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |
| /* Nuclear option - target ALL elements in footer that might be buttons */ | |
| footer > * > * > button, | |
| footer > * > * > a, | |
| footer > * > button, | |
| footer > * > a, | |
| footer button, | |
| footer a, | |
| footer [class*="btn"], | |
| footer [class*="button"], | |
| footer [role="button"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| border: 1px solid var(--input-border) ; | |
| } | |
| /* Override ALL possible background color formats */ | |
| footer button, | |
| footer a, | |
| footer [role="button"], | |
| footer [class*="button"] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| background-image: none ; | |
| } | |
| /* Force override even with inline styles using attribute selectors */ | |
| footer button[style], | |
| footer a[style], | |
| footer [role="button"][style] { | |
| background: transparent ; | |
| background-color: transparent ; | |
| } | |