ntv3_tracks / style.css
bernardo-de-almeida's picture
fix: pipeline
4c9b328
/* 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) !important;
min-height: 100vh;
color: var(--text) !important;
}
/* 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) !important;
}
}
/* Ensure all text elements use the correct color - default to white for dark mode */
body, .gradio-container {
color: var(--text) !important;
}
/* 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) !important;
}
/* 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) !important;
}
/* Links */
.gradio-container a {
color: var(--link) !important;
}
.gradio-container a:hover {
color: var(--link) !important;
opacity: 0.8;
}
/* Markdown content */
.gradio-container .markdown,
.gradio-container .markdown *,
.gradio-container [class*="markdown"] * {
color: var(--text) !important;
}
/* Ensure dropdown options are visible */
.gradio-container select option {
color: var(--text) !important;
background: var(--input-bg) !important;
}
/* Plot container */
#tracks_plot {
position: relative;
width: 100% !important;
max-width: 100% !important;
display: flex !important;
justify-content: center !important;
align-items: center !important;
}
#tracks_plot .wrap,
#tracks_plot .plot-container {
width: 100% !important;
max-width: 100% !important;
display: flex !important;
justify-content: center !important;
align-items: center !important;
}
/* Center the actual plotly plot */
#tracks_plot .js-plotly-plot,
#tracks_plot .plotly,
#tracks_plot [class*="plotly"] {
margin: 0 auto !important;
display: block !important;
}
/* 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 !important;
fill: #7dd3fc !important;
stroke: #7dd3fc !important;
}
.modebar-btn:hover,
.modebar-btn:focus,
#tracks_plot .modebar-btn:hover,
#tracks_plot .modebar-btn:focus {
background-color: rgba(125, 211, 252, 0.1) !important;
color: #3B82F6 !important;
}
.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 !important;
stroke: #3B82F6 !important;
}
/* Plotly modebar container */
.modebar,
#tracks_plot .modebar,
.js-plotly-plot .modebar,
.plotly .modebar {
background-color: var(--modebar-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 8px !important;
}
/* Predict button matching hub button style */
#predict_btn {
background: rgba(41,91,234,1) !important;
color: white !important;
border: none !important;
border-radius: 12px !important;
font-weight: 600 !important;
transition: all 0.2s ease !important;
box-shadow: 0 4px 12px rgba(125, 211, 252, 0.3) !important;
}
#predict_btn:hover {
background: rgb(5, 36, 121) !important;
transform: translateY(-2px) !important;
box-shadow: 0 6px 16px rgba(125, 211, 252, 0.4) !important;
}
/* Intro markdown container */
#intro_markdown {
max-width: 100% !important;
width: 100% !important;
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% !important;
max-width: 100% !important;
box-sizing: border-box !important;
}
/* 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 !important;
line-height: 1.1 !important;
margin: 0 0 8px 0 !important;
letter-spacing: -0.02em;
color: var(--text) !important;
}
#intro_markdown .intro-subtitle {
font-size: 1.05rem !important;
line-height: 1.5 !important;
margin: 0 !important;
color: var(--muted) !important;
}
/* 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 !important;
margin: 0 0 10px 0 !important;
color: var(--text) !important;
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 !important;
line-height: 1.5 !important;
margin: 8px 0;
color: var(--muted) !important;
}
#intro_markdown .intro-card li::marker {
color: var(--link);
}
#intro_markdown .intro-card em,
#intro_markdown .intro-card strong {
color: var(--text) !important;
}
/* 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 !important;
line-height: 1.5 !important;
color: var(--muted) !important;
}
#intro_markdown .intro-tip strong {
color: var(--text) !important;
}
/* Species info box */
#intro_markdown .intro-species-info {
margin-top: 18px !important;
padding: 12px 16px !important;
background: var(--card) !important;
border-radius: 12px !important;
border: 1px solid var(--border) !important;
font-size: 0.95rem !important;
color: var(--muted) !important;
}
#intro_markdown .intro-species-info strong {
color: var(--text) !important;
}
/* Responsive */
@media (max-width: 860px) {
#intro_markdown .intro-grid {
grid-template-columns: 1fr;
}
#intro_markdown h1 {
font-size: 28px !important;
}
}
/* ============================================================================
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 !important;
background-color: transparent !important;
}
/* Ensure form containers don't constrain textbox width */
.gr-form .gr-textbox,
.gr-block .gr-textbox,
.gradio-container .gr-textbox {
width: 100% !important;
max-width: 100% !important;
}
/* Remove grey backgrounds from section containers */
section,
.gr-section,
[role="region"] {
background: transparent !important;
background-color: transparent !important;
border: none !important;
}
/* Markdown headings */
h2 {
color: var(--text) !important;
font-size: 18px !important;
letter-spacing: 0.01em !important;
margin-top: 24px !important;
margin-bottom: 16px !important;
}
/* Input labels */
label {
color: var(--text) !important;
font-weight: 500 !important;
background: transparent !important;
background-color: transparent !important;
}
/* ============================================================================
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) !important;
background-color: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
color: var(--text) !important;
padding: 10px 12px !important;
}
/* 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) !important;
background-color: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
color: var(--text) !important;
padding: 10px 12px !important;
}
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) !important;
background-color: var(--input-focus-bg) !important;
border-color: var(--input-focus-border) !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
outline: none !important;
}
/* Number inputs focus - default blue background */
input[type="number"]:focus {
background: var(--input-focus-bg) !important;
background-color: var(--input-focus-bg) !important;
border-color: var(--input-focus-border) !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
outline: none !important;
}
/* 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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
outline: none !important;
}
input[type="text"]:hover,
input[type="search"]:hover,
textarea:hover {
background: var(--input-focus-bg) !important;
border-color: var(--input-focus-border) !important;
}
/* Number inputs hover - default blue background */
input[type="number"]:hover {
background: var(--input-focus-bg) !important;
border-color: var(--input-focus-border) !important;
}
/* 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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
}
/* Placeholder text */
input::placeholder,
textarea::placeholder {
color: var(--placeholder) !important;
opacity: 0.7 !important;
}
/* Override inline grey backgrounds */
input[style*="background"],
textarea[style*="background"] {
background: var(--input-bg) !important;
background-color: var(--input-bg) !important;
}
/* ============================================================================
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 !important;
background-color: transparent !important;
}
/* 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) !important;
background-color: var(--input-bg) !important;
}
/* ============================================================================
TEXTBOX COMPONENTS
============================================================================ */
/* Textbox component - transparent wrapper, only input is styled */
.gr-textbox {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
border-top: none !important;
margin-top: 0 !important;
width: 100% !important;
max-width: 100% !important;
}
/* Make textbox wrappers full width */
.gr-textbox .wrap,
.gr-textbox .wrap > div,
.gr-textbox .wrap > div > div {
width: 100% !important;
max-width: 100% !important;
}
/* Make textbox inputs full width */
.gr-textbox input,
.gr-textbox textarea {
width: 100% !important;
max-width: 100% !important;
box-sizing: border-box !important;
}
/* Textbox input inherits base input styling above */
/* ============================================================================
NUMBER INPUT COMPONENTS
============================================================================ */
/* Number input component - transparent wrapper, only input is styled */
.gr-number {
background: transparent !important;
}
/* 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) !important;
background-color: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
color: var(--text) !important;
outline: none !important;
box-shadow: none !important;
}
/* Override any inline grey backgrounds on dropdowns */
.gr-dropdown[style*="background"],
select[style*="background"] {
background: var(--input-bg) !important;
background-color: var(--input-bg) !important;
}
.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) !important;
background-color: var(--input-focus-bg) !important;
border-color: var(--input-focus-border) !important;
outline: none !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
}
/* Ensure dropdown option container is blue */
.gr-dropdown .wrap select,
.gr-dropdown select option {
background: var(--input-bg) !important;
background-color: var(--input-bg) !important;
color: var(--text) !important;
}
/* 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) !important;
background-color: var(--input-focus-bg) !important;
border: 1px solid var(--input-focus-border) !important;
border-radius: 6px !important;
color: var(--text) !important;
padding: 5px 10px !important;
margin: 2px 4px 2px 0 !important;
font-size: 0.875rem !important;
font-weight: 500 !important;
display: inline-flex !important;
align-items: center !important;
gap: 6px !important;
transition: all 0.2s ease !important;
}
#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) !important;
opacity: 0.9 !important;
border-color: var(--link) !important;
}
/* 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 !important;
border: none !important;
color: var(--text) !important;
opacity: 0.7 !important;
padding: 2px 4px !important;
margin-left: 4px !important;
border-radius: 4px !important;
cursor: pointer !important;
}
#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) !important;
opacity: 1 !important;
}
/* ============================================================================
RADIO BUTTONS
============================================================================ */
.gr-radio {
background: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
padding: 12px !important;
}
.gr-radio label,
input[type="radio"] + label {
color: var(--text) !important;
background: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 8px !important;
padding: 8px 12px !important;
margin: 4px !important;
display: inline-block !important;
transition: all 0.2s ease !important;
}
.gr-radio label:hover,
input[type="radio"] + label:hover {
background: var(--input-focus-bg) !important;
border-color: var(--input-focus-border) !important;
}
.gr-radio input[type="radio"]:checked + label,
input[type="radio"]:checked + label {
background: var(--input-focus-bg) !important;
opacity: 1.2 !important;
border-color: var(--input-focus-border) !important;
}
/* Change radio button selected indicator from orange to blue */
input[type="radio"] {
accent-color: #7dd3fc !important;
color: #7dd3fc !important;
}
/* Override Gradio's default orange radio button styling */
input[type="radio"]:checked {
accent-color: #7dd3fc !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
color: #7dd3fc !important;
}
/* Radio button circle background when checked */
input[type="radio"]:checked {
background-color: #7dd3fc !important;
background: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* Override Gradio's default radio button checked state colors */
.gradio-container input[type="radio"]:checked {
accent-color: #7dd3fc !important;
background-color: #7dd3fc !important;
background: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* ============================================================================
CHECKBOX GROUPS
============================================================================ */
.gr-checkboxgroup {
background: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
padding: 12px !important;
}
.gr-checkboxgroup label {
color: var(--text) !important;
background: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 8px !important;
padding: 8px 12px !important;
margin: 4px 0 !important;
display: block !important;
transition: all 0.2s ease !important;
}
.gr-checkboxgroup label:hover {
background: var(--input-focus-bg) !important;
border-color: var(--input-focus-border) !important;
}
.gr-checkboxgroup input[type="checkbox"]:checked + label,
.gr-checkboxgroup label:has(input[type="checkbox"]:checked) {
background: var(--input-focus-bg) !important;
opacity: 1.2 !important;
border: 1px solid var(--input-focus-border) !important;
}
/* Change checkbox icon color from orange to blue */
input[type="checkbox"] {
accent-color: #7dd3fc !important;
color: #7dd3fc !important;
}
/* Override Gradio's default orange checkbox styling */
input[type="checkbox"]:checked {
accent-color: #7dd3fc !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* SVG checkmark icons */
input[type="checkbox"]:checked + svg,
.gr-checkboxgroup input[type="checkbox"]:checked + svg,
label:has(input[type="checkbox"]:checked) svg {
fill: #7dd3fc !important;
color: #7dd3fc !important;
}
/* Checkbox square/box background when checked */
input[type="checkbox"]:checked {
background-color: #7dd3fc !important;
background: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
background-color: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* 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 !important;
background-color: #7dd3fc !important;
}
/* Override Gradio's default checkbox checked state colors */
.gradio-container input[type="checkbox"]:checked {
accent-color: #7dd3fc !important;
background-color: #7dd3fc !important;
background: #7dd3fc !important;
border-color: #7dd3fc !important;
}
/* ============================================================================
BUTTONS
============================================================================ */
button {
border-radius: 12px !important;
font-weight: 500 !important;
transition: all 0.2s ease !important;
}
/* 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) !important;
background-color: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
color: var(--text) !important;
}
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) !important;
background-color: var(--input-focus-bg) !important;
border-color: var(--link) !important;
box-shadow: 0 4px 12px var(--input-bg) !important;
}
/* ============================================================================
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 !important;
box-shadow: none !important;
margin-bottom: 0 !important;
padding-bottom: 0 !important;
background: transparent !important;
background-color: transparent !important;
}
.gr-row,
.gr-row *,
.gr-row .wrap,
.gr-row .wrap > div,
.gr-row .wrap > div > div {
background: transparent !important;
background-color: transparent !important;
}
/* 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 !important;
background-color: transparent !important;
}
/* 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 !important;
background-color: transparent !important;
}
/* 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 !important;
background-color: transparent !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
color: var(--text) !important;
height: 44px !important;
min-height: 44px !important;
padding: 0 12px !important;
line-height: 44px !important;
}
#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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
}
#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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
outline: none !important;
}
/* ============================================================================
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 !important;
background-color: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
}
/* 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 !important;
background-color: transparent !important;
border: none !important;
box-shadow: none !important;
outline: none !important;
}
/* 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 !important;
background-color: transparent !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
color: var(--text) !important;
height: 44px !important;
min-height: 44px !important;
padding: 0 12px !important;
line-height: 44px !important;
}
#chromosome_input input:hover,
#chromosome_input .wrap input:hover,
#chromosome_input [role="combobox"]:hover {
border-color: var(--input-focus-border) !important;
}
#chromosome_input input:focus,
#chromosome_input .wrap input:focus,
#chromosome_input [role="combobox"]:focus {
border-color: var(--input-focus-border) !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
outline: none !important;
}
/* ============================================================================
FORM SECTIONS & SEPARATORS
============================================================================ */
.form {
border: none !important;
}
hr {
display: none !important;
}
#dna_sequence_input {
border-top: none !important;
margin-top: 0 !important;
padding-top: 0 !important;
}
#dna_sequence_input::before,
#dna_sequence_input .wrap::before {
display: none !important;
content: none !important;
}
#coords_group[style*="display: none"],
#coords_group:not(:visible) {
display: none !important;
border: none !important;
margin: 0 !important;
padding: 0 !important;
}
#coords_group + *,
#coords_group ~ #dna_sequence_input {
border-top: none !important;
margin-top: 0 !important;
padding-top: 0 !important;
}
/* ============================================================================
ACCORDION
============================================================================ */
.gr-accordion {
background: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
}
.gr-accordion summary {
color: var(--text) !important;
}
.gr-accordion .gr-json {
color: var(--muted) !important;
}
/* ============================================================================
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) !important;
background-color: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
}
/* 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) !important;
background-color: var(--input-bg) !important;
}
/* 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) !important;
background-color: var(--input-bg) !important;
border: 1px solid var(--input-border) !important;
}
/* 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) !important;
background-color: var(--input-bg) !important;
}
/* ============================================================================
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 !important;
background-color: transparent !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
color: var(--text) !important;
}
/* 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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
}
/* 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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
outline: none !important;
}
/* ============================================================================
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 !important;
background-color: transparent !important;
border: 1px solid var(--input-border) !important;
border-radius: 12px !important;
color: var(--text) !important;
}
#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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
}
#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 !important;
background-color: transparent !important;
border-color: var(--input-focus-border) !important;
box-shadow: 0 0 0 3px var(--input-bg) !important;
outline: none !important;
}
/* 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 !important;
background-color: transparent !important;
}
/* ============================================================================
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 !important;
background-color: transparent !important;
border: 1px solid var(--input-border) !important;
color: var(--text) !important;
}
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) !important;
background-color: var(--input-bg) !important;
border-color: var(--input-focus-border) !important;
}
/* 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 !important;
background-color: transparent !important;
border: 1px solid var(--input-border) !important;
}
/* Target all buttons in footer container */
footer * button,
footer * a[role="button"],
footer * .gr-button {
background: transparent !important;
background-color: transparent !important;
}
/* 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 !important;
background-color: transparent !important;
}
/* 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 !important;
background-color: transparent !important;
border: 1px solid rgba(125, 211, 252, 0.2) !important;
}
/* 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 !important;
background-color: transparent !important;
border: 1px solid rgba(125, 211, 252, 0.2) !important;
color: var(--text) !important;
}
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) !important;
background-color: var(--input-bg) !important;
}
/* 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 !important;
background-color: transparent !important;
}
/* 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 !important;
background-color: transparent !important;
}
/* Target by data attributes or specific Gradio classes */
footer [data-testid],
footer [aria-label],
footer button[type="button"],
footer a[href] {
background: transparent !important;
background-color: transparent !important;
}
/* 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 !important;
background-color: transparent !important;
border: 1px solid var(--input-border) !important;
}
/* Override ALL possible background color formats */
footer button,
footer a,
footer [role="button"],
footer [class*="button"] {
background: transparent !important;
background-color: transparent !important;
background-image: none !important;
}
/* Force override even with inline styles using attribute selectors */
footer button[style],
footer a[style],
footer [role="button"][style] {
background: transparent !important;
background-color: transparent !important;
}