Spaces:
Running on Zero
Running on Zero
| /* ========================================================================== | |
| Cyclic Voltammetry Analysis - High-Contrast Academic Theme | |
| WCAG AAA High Contrast & Crisp Typography | |
| ========================================================================== */ | |
| :root { | |
| --color-bg-site: #0b1120; | |
| --color-bg-panel: #131d31; | |
| --color-bg-alt: #1e293b; | |
| --color-bg-input: #0f172a; | |
| --color-text-main: #ffffff; | |
| --color-text-body: #e2e8f0; | |
| --color-text-muted: #cbd5e1; | |
| --color-text-dim: #94a3b8; | |
| --color-primary: #2563eb; | |
| --color-primary-hover: #1d4ed8; | |
| --color-accent: #38bdf8; | |
| --color-accent-rose: #f43f5e; | |
| --color-accent-emerald: #10b981; | |
| --color-accent-amber: #fbbf24; | |
| --color-border: #334155; | |
| --color-border-subtle: #1e293b; | |
| --color-border-input: #475569; | |
| --color-focus: rgba(56, 189, 248, 0.4); | |
| --shadow-panel: 0 4px 16px rgba(0, 0, 0, 0.4); | |
| --radius-lg: 10px; | |
| --radius-md: 8px; | |
| --radius-sm: 6px; | |
| --font-stack: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; | |
| --font-mono: 'JetBrains Mono', monospace; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| /* Force dark theme baseline over any Gradio parent injection */ | |
| html, body, .gradio-container { | |
| background-color: var(--color-bg-site) ; | |
| color: var(--color-text-body) ; | |
| font-family: var(--font-stack) ; | |
| line-height: 1.5; | |
| -webkit-font-smoothing: antialiased; | |
| min-height: 100vh; | |
| } | |
| body { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| /* Headings with Maximum Contrast */ | |
| h1, h2, h3, h4, h5, h6 { | |
| font-weight: 700 ; | |
| color: #ffffff ; | |
| letter-spacing: -0.015em; | |
| } | |
| h1 { font-size: 1.5rem ; } | |
| h2 { font-size: 1.15rem ; } | |
| h3 { font-size: 1.0rem ; } | |
| p { | |
| margin-bottom: 0.75rem; | |
| color: var(--color-text-body) ; | |
| } | |
| /* Top Navigation Bar */ | |
| .top-nav { | |
| background-color: var(--color-bg-panel); | |
| border-bottom: 1px solid var(--color-border); | |
| padding: 0 1.5rem; | |
| position: sticky; | |
| top: 0; | |
| z-index: 50; | |
| } | |
| .nav-container { | |
| max-width: 1750px; | |
| margin: 0 auto; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| height: 60px; | |
| } | |
| .nav-brand { | |
| display: flex; | |
| align-items: baseline; | |
| gap: 0.85rem; | |
| } | |
| .brand-title { | |
| font-size: 1.25rem; | |
| font-weight: 800; | |
| color: #ffffff ; | |
| letter-spacing: -0.02em; | |
| } | |
| .brand-subtitle { | |
| font-size: 0.88rem; | |
| font-weight: 500; | |
| color: #94a3b8 ; | |
| } | |
| .nav-links { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| } | |
| /* JAX Engine Status Badge - Ultra-Crisp High-Contrast Text */ | |
| .engine-badge { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.6rem; | |
| background-color: #1e293b ; | |
| border: 1px solid #475569 ; | |
| padding: 0.45rem 1rem; | |
| border-radius: 9999px; | |
| box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); | |
| } | |
| .engine-text, #engine-label { | |
| font-size: 0.88rem ; | |
| font-weight: 700 ; | |
| color: #ffffff ; | |
| letter-spacing: 0.01em; | |
| } | |
| .status-dot { | |
| width: 9px; | |
| height: 9px; | |
| border-radius: 50%; | |
| } | |
| .status-dot.online { | |
| background-color: #4ade80 ; | |
| box-shadow: 0 0 10px #4ade80 ; | |
| } | |
| /* Main Layout Grid */ | |
| .app-container { | |
| flex: 1; | |
| max-width: 1750px; | |
| margin: 0 auto; | |
| padding: 1.25rem 1.5rem; | |
| width: 100%; | |
| } | |
| .content-grid { | |
| display: grid; | |
| grid-template-columns: 350px 1fr; | |
| gap: 1.5rem; | |
| align-items: start; | |
| } | |
| @media (max-width: 1100px) { | |
| .content-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| } | |
| /* Panels */ | |
| .panel { | |
| background-color: var(--color-bg-panel) ; | |
| border: 1px solid var(--color-border) ; | |
| border-radius: var(--radius-md); | |
| box-shadow: var(--shadow-panel); | |
| overflow: hidden; | |
| margin-bottom: 1.25rem; | |
| } | |
| .panel-header { | |
| padding: 1rem 1.25rem; | |
| border-bottom: 1px solid var(--color-border); | |
| background-color: rgba(255, 255, 255, 0.025); | |
| } | |
| .panel-header h2, .panel-header h3 { | |
| color: #ffffff ; | |
| font-weight: 700 ; | |
| } | |
| .panel-body { | |
| padding: 1.25rem; | |
| } | |
| .chart-panel-body { | |
| padding: 0.75rem 1rem 1rem 1rem; | |
| } | |
| /* File Upload Area */ | |
| .file-upload-wrapper { | |
| margin-bottom: 1.25rem; | |
| } | |
| .section-label { | |
| display: block; | |
| font-size: 0.85rem ; | |
| font-weight: 700 ; | |
| color: #e2e8f0 ; | |
| margin-bottom: 0.5rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .file-upload-box { | |
| border: 1.5px dashed #475569; | |
| border-radius: var(--radius-md); | |
| padding: 1.25rem 1rem; | |
| text-align: center; | |
| background-color: var(--color-bg-alt); | |
| transition: all 0.2s ease; | |
| cursor: pointer; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 0.4rem; | |
| } | |
| .file-upload-box:hover, .file-upload-wrapper.dragover .file-upload-box { | |
| border-color: #38bdf8; | |
| background-color: rgba(56, 189, 248, 0.08); | |
| } | |
| .file-icon { | |
| font-size: 1.5rem; | |
| } | |
| .btn-file-select { | |
| display: inline-block; | |
| background-color: #0f172a ; | |
| border: 1px solid #475569 ; | |
| color: #ffffff ; | |
| padding: 0.45rem 1rem; | |
| font-size: 0.85rem ; | |
| font-weight: 600 ; | |
| border-radius: var(--radius-sm); | |
| box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); | |
| } | |
| .drag-hint { | |
| font-size: 0.78rem ; | |
| color: #94a3b8 ; | |
| } | |
| .file-status-row { | |
| margin-top: 0.5rem; | |
| font-size: 0.82rem ; | |
| color: #cbd5e1 ; | |
| font-family: var(--font-mono); | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| } | |
| .file-status-row span.has-file { | |
| color: #38bdf8 ; | |
| font-weight: 700 ; | |
| } | |
| .hidden-file-input { | |
| display: none; | |
| } | |
| /* Form Styles & High-Contrast Inputs */ | |
| .form-section { | |
| border: 1px solid #334155 ; | |
| padding: 1rem; | |
| margin-bottom: 1.15rem; | |
| background-color: rgba(15, 23, 42, 0.6) ; | |
| border-radius: var(--radius-md); | |
| } | |
| .form-section legend { | |
| font-weight: 700 ; | |
| font-size: 0.82rem ; | |
| color: #38bdf8 ; | |
| text-transform: uppercase; | |
| letter-spacing: 0.06em; | |
| padding: 0 0.4rem; | |
| border: none; | |
| } | |
| .input-grid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 0.85rem; | |
| } | |
| .form-group { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| label { | |
| font-size: 0.82rem ; | |
| font-weight: 600 ; | |
| color: #e2e8f0 ; | |
| margin-bottom: 0.35rem; | |
| } | |
| label i, label sub { | |
| font-family: serif; | |
| font-style: italic; | |
| color: #f1f5f9 ; | |
| } | |
| input[type="number"], input[type="text"], select.academic-dropdown { | |
| font-family: var(--font-mono) ; | |
| font-size: 0.88rem ; | |
| font-weight: 500 ; | |
| padding: 0.55rem 0.75rem ; | |
| border: 1px solid #475569 ; | |
| border-radius: var(--radius-sm); | |
| background-color: #0f172a ; | |
| color: #ffffff ; | |
| transition: all 0.2s ease; | |
| width: 100%; | |
| } | |
| select.academic-dropdown { | |
| font-family: var(--font-stack) ; | |
| cursor: pointer; | |
| } | |
| select.academic-dropdown option { | |
| background-color: #0f172a ; | |
| color: #ffffff ; | |
| } | |
| input:focus, select:focus { | |
| outline: none; | |
| border-color: #38bdf8 ; | |
| box-shadow: 0 0 0 3px var(--color-focus) ; | |
| } | |
| .column-meta-bar { | |
| margin-top: 0.65rem; | |
| font-size: 0.8rem ; | |
| color: #cbd5e1 ; | |
| } | |
| .column-meta-bar strong { | |
| color: #ffffff ; | |
| } | |
| .col-stats-preview { | |
| margin-top: 0.75rem; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.35rem; | |
| } | |
| .stat-pill { | |
| display: flex; | |
| justify-content: space-between; | |
| font-size: 0.8rem ; | |
| background-color: #1e293b ; | |
| padding: 0.35rem 0.65rem; | |
| border-radius: 4px; | |
| border: 1px solid #334155 ; | |
| } | |
| .stat-k { | |
| color: #94a3b8 ; | |
| font-weight: 500; | |
| } | |
| .stat-v { | |
| color: #38bdf8 ; | |
| font-family: var(--font-mono); | |
| font-weight: 700; | |
| } | |
| /* Advanced Collapsible Section */ | |
| .advanced-section { | |
| margin-bottom: 1.15rem; | |
| } | |
| .advanced-toggle { | |
| background-color: #1e293b ; | |
| border: 1px solid #334155 ; | |
| color: #e2e8f0 ; | |
| padding: 0.55rem 0.85rem ; | |
| font-size: 0.82rem ; | |
| font-weight: 600 ; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| width: 100%; | |
| border-radius: var(--radius-sm); | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| .advanced-toggle:hover { | |
| color: #ffffff ; | |
| border-color: #38bdf8 ; | |
| background-color: #0f172a ; | |
| } | |
| .advanced-content { | |
| margin-top: 0.65rem; | |
| } | |
| .sub-section { | |
| margin-bottom: 0; | |
| } | |
| /* Buttons */ | |
| button { | |
| font-family: var(--font-stack) ; | |
| font-weight: 700 ; | |
| font-size: 0.92rem ; | |
| padding: 0.75rem 1.5rem ; | |
| border-radius: var(--radius-sm); | |
| cursor: pointer; | |
| text-align: center; | |
| transition: all 0.2s ease; | |
| width: 100%; | |
| border: 1px solid transparent; | |
| } | |
| .btn-primary { | |
| background-color: #2563eb ; | |
| color: #ffffff ; | |
| box-shadow: 0 2px 6px rgba(0, 0, 0, 0.4); | |
| } | |
| .btn-primary:hover:not(:disabled) { | |
| background-color: #1d4ed8 ; | |
| } | |
| button:disabled { | |
| opacity: 0.6; | |
| cursor: not-allowed; | |
| } | |
| /* Export Actions */ | |
| .results-header-row { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| } | |
| .export-actions { | |
| display: flex; | |
| gap: 0.6rem; | |
| } | |
| .btn-export { | |
| background-color: #1e293b ; | |
| border: 1px solid #475569 ; | |
| color: #ffffff ; | |
| padding: 0.45rem 0.9rem ; | |
| font-size: 0.82rem ; | |
| font-weight: 600 ; | |
| border-radius: var(--radius-sm); | |
| width: auto; | |
| transition: all 0.2s ease; | |
| } | |
| .btn-export:hover { | |
| border-color: #38bdf8 ; | |
| color: #38bdf8 ; | |
| background-color: #0f172a ; | |
| } | |
| /* Status Header in Chart Panel */ | |
| .status-header-row { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| .status-left { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| } | |
| .status-left h2 { | |
| font-size: 1.15rem ; | |
| color: #38bdf8 ; | |
| margin-bottom: 0.15rem; | |
| } | |
| .status-left p { | |
| font-size: 0.85rem ; | |
| color: #cbd5e1 ; | |
| margin: 0; | |
| } | |
| .status-left p strong { | |
| color: #ffffff ; | |
| } | |
| /* Spinner */ | |
| .spinner { | |
| width: 24px; | |
| height: 24px; | |
| border: 3px solid #334155; | |
| border-top-color: #38bdf8; | |
| border-radius: 50%; | |
| animation: spin 0.8s linear infinite; | |
| } | |
| @keyframes spin { | |
| to { transform: rotate(360deg); } | |
| } | |
| /* Chart Canvas Dimensions */ | |
| .chart-wrapper-large { | |
| height: 580px; | |
| width: 100%; | |
| min-height: 580px; | |
| } | |
| .secondary-charts-grid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 1.5rem; | |
| margin-top: 1.5rem; | |
| } | |
| .chart-wrapper-diagnostic { | |
| height: 460px; | |
| width: 100%; | |
| min-height: 460px; | |
| } | |
| @media (max-width: 1280px) { | |
| .secondary-charts-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| } | |
| /* Parameter Stat Cards */ | |
| .stats-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); | |
| gap: 1rem; | |
| } | |
| .stat-card { | |
| background-color: #1e293b ; | |
| border: 1px solid #334155 ; | |
| border-radius: var(--radius-md); | |
| padding: 1rem 1.15rem; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .stat-card .stat-label { | |
| font-size: 0.76rem ; | |
| font-weight: 700 ; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: #94a3b8 ; | |
| margin-bottom: 0.35rem; | |
| } | |
| .stat-card .stat-value { | |
| font-size: 1.25rem ; | |
| font-weight: 800 ; | |
| color: #ffffff ; | |
| font-family: var(--font-mono); | |
| } | |
| .hidden { | |
| display: none ; | |
| } |