Spaces:
Running
Running
fix: apply min-height: 0 to workspace-tabs to force grid boundaries and restore scrolling in panels
28614a3 | @import url('https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Next:ital,wght@0,400;0,600;0,700;1,400&family=Fira+Code:wght@400;600&family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap'); | |
| /* ── Reset & Base ─────────────────────────────────────────────────── */ | |
| *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } | |
| :root { | |
| /* Legacy/Base compatibility tokens */ | |
| --purple: #082F49; /* Maps brand header to primary navy */ | |
| --purple-light: #F1F5F9; | |
| --purple-dark: #0A1628; | |
| --text-dark: #0A1628; | |
| --text-mid: #475569; | |
| --text-light: #64748B; | |
| --border: #E2E8F0; | |
| --white: #ffffff; | |
| --bg: #F8FAFC; | |
| --success: #10B981; | |
| --danger: #D85A30; | |
| --radius: 12px; | |
| --shadow: 0 4px 20px rgba(10, 22, 40, 0.05), 0 1px 3px rgba(10, 22, 40, 0.01); | |
| --transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); | |
| /* DermaDefect / Clinical Tech Tokens */ | |
| --brand-navy: #082F49; | |
| --dark-accent: #0A1628; | |
| --slate-light: #F8FAFC; | |
| --emerald: #10B981; | |
| --amber: #EF9F27; | |
| --rose-coral: #D85A30; | |
| --charcoal-code: #0F172A; | |
| /* Typography System */ | |
| --font-display: 'Plus Jakarta Sans', system-ui, -apple-system, sans-serif; | |
| --font-body: 'Atkinson Hyperlegible Next', system-ui, -apple-system, sans-serif; | |
| --font-mono: 'Fira Code', 'JetBrains Mono', monospace; | |
| } | |
| html, body { | |
| font-family: var(--font-body); | |
| background: var(--bg); | |
| color: var(--text-dark); | |
| line-height: 1.6; | |
| min-height: 100vh; | |
| display: flex; | |
| flex-direction: column; | |
| font-size: 16px; | |
| } | |
| h1, h2, h3, h4, h5, h6 { | |
| font-family: var(--font-display); | |
| font-weight: 700; | |
| } | |
| a { color: var(--purple); text-decoration: none; } | |
| a:hover { color: var(--purple-dark); } | |
| /* ── Navbar ───────────────────────────────────────────────────────── */ | |
| .navbar { | |
| background: var(--white) ; | |
| border-bottom: 1px solid var(--border) ; | |
| padding: 0 2rem ; | |
| height: 64px ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| position: sticky ; | |
| top: 0 ; | |
| z-index: 100 ; | |
| box-shadow: 0 1px 8px rgba(83,74,183,0.07) ; | |
| width: 100% ; | |
| } | |
| .navbar-brand { | |
| display: flex ; | |
| align-items: center ; | |
| gap: 10px ; | |
| font-size: 1.3rem ; | |
| font-weight: 700 ; | |
| color: var(--purple) ; | |
| text-decoration: none ; | |
| } | |
| .navbar-brand .logo-dot { | |
| width: 10px ; | |
| height: 10px ; | |
| background: var(--purple) ; | |
| border-radius: 50% ; | |
| display: inline-block ; | |
| flex-shrink: 0 ; | |
| } | |
| .navbar-links { | |
| display: flex ; | |
| gap: 2rem ; | |
| list-style: none ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| } | |
| .navbar-links li { list-style: none ; } | |
| .navbar-links a { | |
| font-size: 0.9rem ; | |
| font-weight: 500 ; | |
| color: var(--text-mid) ; | |
| transition: var(--transition) ; | |
| text-decoration: none ; | |
| } | |
| .navbar-links a:hover, | |
| .navbar-links a.active { color: var(--purple) ; } | |
| /* ── Main content ─────────────────────────────────────────────────── */ | |
| main { flex: 1; } | |
| /* ── Buttons ──────────────────────────────────────────────────────── */ | |
| .btn { | |
| display: inline-flex ; | |
| align-items: center ; | |
| gap: 8px ; | |
| padding: 0.65rem 1.5rem ; | |
| border-radius: var(--radius) ; | |
| font-size: 0.9rem ; | |
| font-weight: 600 ; | |
| cursor: pointer ; | |
| border: none ; | |
| transition: var(--transition) ; | |
| text-decoration: none ; | |
| font-family: inherit ; | |
| } | |
| .btn-primary { | |
| background: var(--purple) ; | |
| color: var(--white) ; | |
| } | |
| .btn-primary:hover { | |
| background: var(--purple-dark) ; | |
| transform: translateY(-1px) ; | |
| box-shadow: 0 4px 12px rgba(83,74,183,0.3) ; | |
| color: var(--white) ; | |
| } | |
| .btn-outline { | |
| background: transparent ; | |
| color: var(--purple) ; | |
| border: 2px solid var(--purple) ; | |
| } | |
| .btn-outline:hover { | |
| background: var(--purple-light) ; | |
| } | |
| .btn:disabled { | |
| opacity: 0.5 ; | |
| cursor: not-allowed ; | |
| transform: none ; | |
| } | |
| .shimmer-button { | |
| background: linear-gradient(90deg, #10B981, #059669, #10B981) ; | |
| background-size: 200% auto ; | |
| color: var(--white) ; | |
| border: none ; | |
| position: relative ; | |
| overflow: hidden ; | |
| transition: var(--transition) ; | |
| } | |
| .shimmer-button:hover:not(:disabled) { | |
| animation: shimmer 1.5s infinite linear ; | |
| transform: translateY(-1.5px) ; | |
| box-shadow: 0 4px 18px rgba(16, 185, 129, 0.4) ; | |
| } | |
| @keyframes shimmer { | |
| 0% { background-position: 0% center; } | |
| 100% { background-position: -200% center; } | |
| } | |
| /* ── Cards ────────────────────────────────────────────────────────── */ | |
| .card { | |
| background: var(--white) ; | |
| border: 1px solid var(--border) ; | |
| border-radius: var(--radius) ; | |
| box-shadow: var(--shadow) ; | |
| padding: 1.5rem ; | |
| transition: var(--transition) ; | |
| } | |
| .card:hover { | |
| box-shadow: 0 8px 30px rgba(10, 22, 40, 0.08) ; | |
| } | |
| /* ── Custom Form Inputs ────────────────────────────────────────────── */ | |
| .form-group { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| margin-bottom: 1rem; | |
| } | |
| .form-group label { | |
| font-family: var(--font-body); | |
| font-size: 0.8rem; | |
| font-weight: 700; | |
| color: var(--text-mid); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .form-control { | |
| font-family: var(--font-body); | |
| width: 100%; | |
| padding: 0.75rem 1rem; | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| background: var(--slate-light); | |
| color: var(--text-dark); | |
| font-size: 0.9rem; | |
| outline: none; | |
| transition: var(--transition); | |
| } | |
| .form-control:focus { | |
| border-color: var(--brand-navy); | |
| background: var(--white); | |
| box-shadow: 0 0 0 3px rgba(8, 47, 73, 0.05); | |
| } | |
| .triage-selector { | |
| display: grid; | |
| grid-template-columns: repeat(3, 1fr); | |
| gap: 8px; | |
| margin-top: 2px; | |
| } | |
| .triage-option { | |
| cursor: pointer; | |
| position: relative; | |
| } | |
| .triage-option input { | |
| position: absolute; | |
| opacity: 0; | |
| width: 0; | |
| height: 0; | |
| } | |
| .triage-pill { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 0.6rem; | |
| border-radius: 8px; | |
| border: 1px solid var(--border); | |
| font-family: var(--font-body); | |
| font-size: 0.82rem; | |
| font-weight: 700; | |
| color: var(--text-light); | |
| text-align: center; | |
| transition: var(--transition); | |
| background: var(--white); | |
| } | |
| .triage-option input:checked + .triage-pill.low { | |
| border-color: var(--emerald); | |
| background: rgba(16, 185, 129, 0.1); | |
| color: var(--emerald); | |
| } | |
| .triage-option input:checked + .triage-pill.moderate { | |
| border-color: var(--amber); | |
| background: rgba(239, 159, 39, 0.1); | |
| color: var(--amber); | |
| } | |
| .triage-option input:checked + .triage-pill.high { | |
| border-color: var(--rose-coral); | |
| background: rgba(216, 90, 48, 0.1); | |
| color: var(--rose-coral); | |
| } | |
| .range-slider { | |
| -webkit-appearance: none; | |
| width: 100%; | |
| height: 6px; | |
| border-radius: 3px; | |
| background: var(--border); | |
| outline: none; | |
| margin: 10px 0; | |
| } | |
| .range-slider::-webkit-slider-thumb { | |
| -webkit-appearance: none; | |
| appearance: none; | |
| width: 16px; | |
| height: 16px; | |
| border-radius: 50%; | |
| background: var(--brand-navy); | |
| cursor: pointer; | |
| transition: transform 0.1s; | |
| } | |
| .range-slider::-webkit-slider-thumb:hover { | |
| transform: scale(1.2); | |
| } | |
| /* ── JSON Response Code Block ─────────────────────────────────────── */ | |
| .json-block-card { | |
| background: var(--charcoal-code) ; | |
| border-color: rgba(255, 255, 255, 0.05) ; | |
| padding: 1.25rem ; | |
| margin-bottom: 1.25rem; | |
| max-height: 250px; | |
| overflow-y: auto; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .json-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.08); | |
| padding-bottom: 0.75rem; | |
| margin-bottom: 0.75rem; | |
| } | |
| .json-header h3 { | |
| font-family: var(--font-display); | |
| font-size: 0.75rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| color: rgba(255, 255, 255, 0.5); | |
| margin: 0; | |
| } | |
| .btn-copy-json { | |
| background: rgba(255, 255, 255, 0.04); | |
| border: 1px solid rgba(255, 255, 255, 0.08); | |
| color: rgba(255, 255, 255, 0.6); | |
| padding: 4px 10px; | |
| border-radius: 6px; | |
| font-family: var(--font-body); | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .btn-copy-json:hover { | |
| background: rgba(255, 255, 255, 0.08); | |
| color: var(--white); | |
| } | |
| .json-pre { | |
| margin: 0; | |
| padding: 0; | |
| overflow-x: auto; | |
| } | |
| .json-pre code { | |
| font-family: var(--font-mono); | |
| font-size: 0.8rem; | |
| color: #38BDF8; /* Slate light blue for nice clinical tech contrast */ | |
| line-height: 1.5; | |
| display: block; | |
| } | |
| /* ── Specimen Visualizer Grid ─────────────────────────────────────── */ | |
| .dual-specimen-grid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 1rem; | |
| margin-top: 0.75rem; | |
| } | |
| .specimen-card { | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| overflow: hidden; | |
| background: var(--dark-accent); | |
| } | |
| .specimen-header { | |
| padding: 0.5rem 0.75rem; | |
| font-family: var(--font-display); | |
| font-size: 0.75rem; | |
| font-weight: 700; | |
| color: var(--white); | |
| background: rgba(255,255,255,0.02); | |
| border-bottom: 1px solid rgba(255,255,255,0.05); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .specimen-img-container { | |
| height: 240px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| overflow: hidden; | |
| } | |
| .specimen-img-container img { | |
| max-width: 100%; | |
| max-height: 100%; | |
| object-fit: contain; | |
| display: block; | |
| } | |
| .secondary-specimen-grid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 0.75rem; | |
| } | |
| .specimen-card-small { | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| overflow: hidden; | |
| background: var(--slate-light); | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .specimen-header-small { | |
| padding: 0.4rem 0.6rem; | |
| font-family: var(--font-body); | |
| font-size: 0.7rem; | |
| font-weight: 700; | |
| color: var(--text-mid); | |
| background: var(--white); | |
| border-bottom: 1px solid var(--border); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .specimen-card-small img { | |
| height: 120px; | |
| object-fit: contain; | |
| background: #f1f5f9; | |
| display: block; | |
| } | |
| /* ── Workspace Containers & Header ────────────────────────────────── */ | |
| .workspace-scroll-container { | |
| height: 100%; | |
| width: 100%; | |
| padding: 2.5rem 3rem; | |
| overflow-y: auto; | |
| box-sizing: border-box; | |
| } | |
| .workspace-header-bar { | |
| margin-bottom: 2rem; | |
| } | |
| .workspace-header-bar h1 { | |
| font-size: 1.6rem; | |
| font-weight: 800; | |
| color: var(--brand-navy); | |
| } | |
| .workspace-header-bar .sub { | |
| color: var(--text-light); | |
| font-size: 0.9rem; | |
| margin-top: 4px; | |
| } | |
| /* ── Telemetry Grid ───────────────────────────────────────────────── */ | |
| .telemetry-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); | |
| gap: 1.25rem; | |
| margin-bottom: 1.5rem; | |
| } | |
| .telemetry-card { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| position: relative; | |
| } | |
| .telemetry-label { | |
| font-family: var(--font-body); | |
| font-size: 0.72rem; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--text-light); | |
| } | |
| .telemetry-value { | |
| font-family: var(--font-display); | |
| font-size: 1.8rem; | |
| font-weight: 800; | |
| color: var(--brand-navy); | |
| line-height: 1.1; | |
| } | |
| .telemetry-change { | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| font-size: 0.76rem; | |
| font-weight: 700; | |
| } | |
| .telemetry-change.positive { color: var(--emerald); } | |
| .telemetry-change.negative { color: var(--rose-coral); } | |
| .telemetry-badge { | |
| position: absolute; | |
| top: 1.5rem; | |
| right: 1.5rem; | |
| padding: 4px 8px; | |
| border-radius: 20px; | |
| font-size: 0.68rem; | |
| font-weight: 800; | |
| text-transform: uppercase; | |
| } | |
| .telemetry-badge.success { | |
| background: rgba(16, 185, 129, 0.1); | |
| color: var(--emerald); | |
| } | |
| .telemetry-badge.warning { | |
| background: rgba(239, 159, 39, 0.1); | |
| color: var(--amber); | |
| } | |
| /* ── Vector Chart ─────────────────────────────────────────────────── */ | |
| .chart-container { | |
| width: 100%; | |
| background: var(--white); | |
| margin-top: 1rem; | |
| } | |
| .vector-chart { | |
| width: 100%; | |
| height: 200px; | |
| } | |
| .chart-labels { | |
| display: flex; | |
| justify-content: space-between; | |
| margin-top: 0.75rem; | |
| font-size: 0.75rem; | |
| color: var(--text-light); | |
| font-weight: 600; | |
| padding: 0 4px; | |
| } | |
| /* ── Clinical Tables ──────────────────────────────────────────────── */ | |
| .clinical-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| margin-top: 1rem; | |
| font-family: var(--font-body); | |
| } | |
| .clinical-table th, | |
| .clinical-table td { | |
| padding: 0.85rem 1rem; | |
| text-align: left; | |
| border-bottom: 1px solid var(--border); | |
| font-size: 0.88rem; | |
| } | |
| .clinical-table th { | |
| background: var(--slate-light); | |
| color: var(--text-mid); | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| font-size: 0.72rem; | |
| letter-spacing: 0.05em; | |
| } | |
| .clinical-table td { | |
| color: var(--text-dark); | |
| } | |
| .clinical-table code { | |
| font-family: var(--font-mono); | |
| font-size: 0.8rem; | |
| background: var(--slate-light); | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| color: var(--brand-navy); | |
| } | |
| .status-pill { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 3px 8px; | |
| border-radius: 20px; | |
| font-size: 0.72rem; | |
| font-weight: 800; | |
| } | |
| .status-pill.status-ok { | |
| background: rgba(16, 185, 129, 0.1); | |
| color: var(--emerald); | |
| } | |
| .status-pill.status-error { | |
| background: rgba(216, 90, 48, 0.1); | |
| color: var(--rose-coral); | |
| } | |
| /* ── API Documentation Layout ─────────────────────────────────────── */ | |
| .docs-layout { | |
| display: grid; | |
| grid-template-columns: 1.1fr 1fr; | |
| gap: 1.5rem; | |
| align-items: start; | |
| } | |
| @media (max-width: 900px) { | |
| .docs-layout { | |
| grid-template-columns: 1fr; | |
| } | |
| } | |
| .method-badge { | |
| padding: 4px 10px; | |
| border-radius: 6px; | |
| font-family: var(--font-display); | |
| font-size: 0.72rem; | |
| font-weight: 800; | |
| color: var(--white); | |
| text-transform: uppercase; | |
| } | |
| .method-badge.post { | |
| background: var(--emerald); | |
| } | |
| .code-tabs { | |
| display: flex; | |
| gap: 6px; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.08); | |
| padding-bottom: 0.5rem; | |
| margin-top: 0.5rem; | |
| } | |
| .code-tab-btn { | |
| background: transparent; | |
| border: none; | |
| color: rgba(255, 255, 255, 0.4); | |
| font-family: var(--font-body); | |
| font-size: 0.8rem; | |
| font-weight: 700; | |
| padding: 6px 12px; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .code-tab-btn:hover { | |
| color: var(--white); | |
| background: rgba(255, 255, 255, 0.03); | |
| } | |
| .code-tab-btn.active { | |
| color: var(--white); | |
| background: rgba(255, 255, 255, 0.08); | |
| } | |
| /* ── Footer ───────────────────────────────────────────────────────── */ | |
| footer { | |
| background: var(--white) ; | |
| border-top: 1px solid var(--border) ; | |
| padding: 1.5rem 2rem ; | |
| text-align: center ; | |
| font-size: 0.82rem ; | |
| color: var(--text-light) ; | |
| } | |
| footer a { color: var(--text-light) ; margin: 0 0.5rem ; } | |
| footer a:hover { color: var(--purple) ; } | |
| /* ── Badges ───────────────────────────────────────────────────────── */ | |
| .badge { | |
| display: inline-block ; | |
| padding: 0.25rem 0.75rem ; | |
| border-radius: 20px ; | |
| font-size: 0.78rem ; | |
| font-weight: 600 ; | |
| } | |
| .badge-mass { background: #fff3e0 ; color: #e65100 ; } | |
| .badge-calcification { background: #e3f2fd ; color: #1565c0 ; } | |
| .badge-benign { background: #e8f5e9 ; color: #2e7d32 ; } | |
| .badge-malignant { background: #fce4ec ; color: #c62828 ; } | |
| /* ── Confidence bar ───────────────────────────────────────────────── */ | |
| .confidence-bar-wrap { margin-top: 6px; } | |
| .confidence-bar-track { | |
| background: var(--border); | |
| border-radius: 4px; | |
| height: 6px; | |
| overflow: hidden; | |
| } | |
| .confidence-bar-fill { | |
| height: 100%; | |
| border-radius: 4px; | |
| background: var(--purple); | |
| transition: width 0.8s ease; | |
| } | |
| /* ── Upload zone ──────────────────────────────────────────────────── */ | |
| .upload-zone { | |
| border: 2px dashed var(--border) ; | |
| border-radius: var(--radius) ; | |
| padding: 2.2rem 1.5rem ; | |
| text-align: center ; | |
| cursor: pointer ; | |
| transition: var(--transition) ; | |
| background: var(--white) ; | |
| display: flex ; | |
| flex-direction: column ; | |
| align-items: center ; | |
| justify-content: center ; | |
| gap: 8px ; | |
| box-shadow: 0 4px 12px rgba(10, 22, 40, 0.02) ; | |
| } | |
| .upload-zone:hover, | |
| .upload-zone.dragover { | |
| border-color: var(--emerald) ; | |
| background: rgba(16, 185, 129, 0.02) ; | |
| box-shadow: 0 8px 24px rgba(16, 185, 129, 0.06) ; | |
| } | |
| .upload-zone input[type="file"] { display: none ; } | |
| .upload-zone .upload-icon { | |
| font-size: 2.2rem; | |
| color: var(--brand-navy); | |
| background: var(--purple-light); | |
| width: 60px; | |
| height: 60px; | |
| border-radius: 50%; | |
| display: flex ; | |
| align-items: center; | |
| justify-content: center; | |
| margin-bottom: 0.5rem; | |
| transition: var(--transition); | |
| } | |
| .upload-zone:hover .upload-icon { | |
| transform: scale(1.05); | |
| background: rgba(16, 185, 129, 0.1); | |
| color: var(--emerald); | |
| } | |
| .upload-zone p { color: var(--text-mid); font-size: 0.9rem; margin: 0; } | |
| .upload-zone .file-name { | |
| margin-top: 0.75rem; | |
| font-weight: 600; | |
| color: var(--purple); | |
| font-size: 0.9rem; | |
| } | |
| /* ── Spinner ──────────────────────────────────────────────────────── */ | |
| .spinner { | |
| width: 36px; height: 36px; | |
| border: 3px solid var(--border); | |
| border-top-color: var(--purple); | |
| border-radius: 50%; | |
| animation: spin 0.8s linear infinite; | |
| margin: 0 auto; | |
| } | |
| @keyframes spin { to { transform: rotate(360deg); } } | |
| /* ── Result images grid ───────────────────────────────────────────── */ | |
| .image-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); | |
| gap: 1rem; | |
| margin-top: 1rem; | |
| } | |
| .image-card { | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| overflow: hidden; | |
| text-align: center; | |
| } | |
| .image-card img { | |
| width: 100%; | |
| height: 200px; | |
| object-fit: contain; | |
| background: #f0f0f0; | |
| display: block; | |
| } | |
| .image-card .image-label { | |
| padding: 0.5rem; | |
| font-size: 0.78rem; | |
| font-weight: 600; | |
| color: var(--text-mid); | |
| background: var(--bg); | |
| border-top: 1px solid var(--border); | |
| } | |
| /* ── Clinical report ──────────────────────────────────────────────── */ | |
| .report-section { | |
| border-left: 3px solid var(--purple); | |
| padding: 0.5rem 0 0.5rem 1rem; | |
| margin-bottom: 1rem; | |
| } | |
| .report-section h4 { | |
| font-size: 0.8rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--purple); | |
| margin-bottom: 4px; | |
| } | |
| .report-section p { | |
| font-size: 0.88rem; | |
| color: var(--text-dark); | |
| line-height: 1.7; | |
| } | |
| /* ── Section headings ─────────────────────────────────────────────── */ | |
| .section-label { | |
| font-size: 0.75rem; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| color: var(--text-light); | |
| margin-bottom: 0.5rem; | |
| } | |
| /* ── Utility ──────────────────────────────────────────────────────── */ | |
| .mt-1 { margin-top: 0.5rem ; } | |
| .mt-2 { margin-top: 1rem ; } | |
| .mt-3 { margin-top: 1.5rem ; } | |
| .mt-4 { margin-top: 2rem ; } | |
| .hidden { display: none ; } | |
| .text-center { text-align: center ; } | |
| .text-purple { color: var(--purple) ; } | |
| .text-light { color: var(--text-light) ; } | |
| .fw-bold { font-weight: 700 ; } | |
| /* ── Three-Panel Dashboard Grid Shell ────────────────────────────── */ | |
| .dashboard-grid { | |
| display: grid; | |
| grid-template-columns: 240px 1fr; | |
| height: calc(100vh - 64px); | |
| background: var(--bg); | |
| font-family: var(--font-body); | |
| overflow: hidden; /* Lock the viewport for a premium desktop-app feel */ | |
| } | |
| .workspace-tab { | |
| height: 100%; | |
| width: 100%; | |
| display: none; | |
| min-height: 0; | |
| overflow: hidden; | |
| } | |
| .workspace-tab.active-tab { | |
| display: block; | |
| } | |
| /* Playground tab uses internal grid to keep the side-by-side view */ | |
| #workspace-playground.workspace-tab.active-tab { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| height: 100%; | |
| width: 100%; | |
| min-height: 0; | |
| } | |
| #workspace-playground.workspace-tab.active-tab .controller-panel, | |
| #workspace-playground.workspace-tab.active-tab .monitor-panel { | |
| height: 100%; | |
| } | |
| .sidebar-panel { | |
| background: var(--brand-navy); | |
| color: var(--white); | |
| padding: 2.5rem 1.5rem; | |
| display: flex; | |
| flex-direction: column; | |
| border-right: 1px solid rgba(255,255,255,0.05); | |
| } | |
| .brand-header h2 { | |
| font-family: var(--font-display); | |
| font-size: 1.4rem; | |
| font-weight: 800; | |
| letter-spacing: -0.02em; | |
| background: linear-gradient(135deg, var(--white) 30%, rgba(255,255,255,0.7) 100%); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| .sidebar-nav { | |
| margin-top: 3rem; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| } | |
| .nav-item { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 0.8rem 1rem; | |
| border-radius: var(--radius); | |
| color: rgba(255, 255, 255, 0.6) ; | |
| font-size: 0.9rem; | |
| font-weight: 600; | |
| transition: var(--transition); | |
| text-decoration: none ; | |
| } | |
| .nav-item svg { | |
| opacity: 0.7; | |
| transition: var(--transition); | |
| } | |
| .nav-item:hover { | |
| background: rgba(255, 255, 255, 0.05); | |
| color: var(--white) ; | |
| } | |
| .nav-item:hover svg { | |
| opacity: 1; | |
| } | |
| .nav-item.active { | |
| background: rgba(255, 255, 255, 0.1); | |
| color: var(--white) ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); | |
| } | |
| .nav-item.active svg { | |
| opacity: 1; | |
| color: var(--emerald); | |
| } | |
| .controller-panel { | |
| background-color: var(--slate-light); | |
| background-image: radial-gradient(#E2E8F0 1.5px, transparent 1.5px); | |
| background-size: 24px 24px; | |
| padding: 2.5rem 2rem; | |
| border-right: 1px solid var(--border); | |
| overflow-y: auto; | |
| min-height: 0; | |
| height: 100%; | |
| } | |
| .monitor-panel { | |
| background: var(--white); | |
| padding: 2rem; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 1.5rem; | |
| overflow-y: auto; | |
| min-height: 0; | |
| height: 100%; | |
| } | |
| @media (max-width: 1024px) { | |
| .dashboard-grid { | |
| grid-template-columns: 1fr; | |
| height: auto ; | |
| overflow: visible ; | |
| } | |
| .workspace-tab { | |
| height: auto ; | |
| overflow: visible ; | |
| } | |
| #workspace-playground.workspace-tab.active-tab { | |
| grid-template-columns: 1fr; | |
| height: auto ; | |
| overflow: visible ; | |
| } | |
| .controller-panel, .monitor-panel { | |
| height: auto ; | |
| overflow-y: visible ; | |
| } | |
| .sidebar-panel { | |
| border-right: none; | |
| border-bottom: 1px solid rgba(255,255,255,0.05); | |
| } | |
| .controller-panel { | |
| border-right: none; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| } | |