/* OntologyViewerPage.css - Ontology Viewer Page Layout & Styling */ .ontology-viewer-page { display: grid; grid-template-columns: 320px 1fr; gap: 2rem; height: calc(100vh - var(--nav-height, 100px)); /* Dynamic nav height via CSS variable */ padding: 2rem; background: var(--background-color, #fafafa); transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Sidebar */ .ontology-viewer-page__sidebar { display: flex; flex-direction: column; gap: 1rem; overflow-y: auto; overscroll-behavior: contain; /* Prevent scroll propagation to parent/footer */ padding-right: 1rem; } .ontology-viewer-page__sidebar-title { font-size: 1.25rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0 0 0.5rem 0; padding-bottom: 0.5rem; border-bottom: 2px solid var(--primary-color, #1976d2); } /* Category Sections */ .ontology-viewer-page__category { margin-bottom: 1.5rem; border-bottom: 1px solid var(--border-color, #e0e0e0); padding-bottom: 1rem; } .ontology-viewer-page__category:last-child { border-bottom: none; margin-bottom: 0; } .ontology-viewer-page__category-title { font-size: 0.875rem; font-weight: 600; color: var(--text-secondary, #757575); text-transform: uppercase; letter-spacing: 0.5px; margin: 0 0 0.5rem 0; display: flex; align-items: center; gap: 0.5rem; } .ontology-viewer-page__category-count { font-weight: 400; color: var(--text-tertiary, #9e9e9e); } .ontology-viewer-page__file-list { display: flex; flex-direction: column; gap: 0.25rem; max-height: 200px; overflow-y: auto; overflow-x: hidden; } .ontology-viewer-page__file-item { padding: 0.5rem 0.75rem; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; text-align: left; cursor: pointer; font-size: 0.8125rem; color: var(--text-primary, #212121); transition: all 0.2s; display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; } .ontology-viewer-page__file-name { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .ontology-viewer-page__file-format { font-size: 0.6875rem; color: var(--text-tertiary, #9e9e9e); text-transform: uppercase; } .ontology-viewer-page__file-item:hover { border-color: var(--primary-color, #1976d2); background: var(--primary-light, #e3f2fd); } .ontology-viewer-page__file-item--active { border-color: var(--primary-color, #1976d2); background: var(--primary-color, #1976d2); color: white; } .ontology-viewer-page__file-item--active .ontology-viewer-page__file-format { color: rgba(255, 255, 255, 0.8); } /* Main Content */ .ontology-viewer-page__main { display: flex; flex-direction: column; gap: 1.5rem; overflow-y: auto; } /* Header */ .ontology-viewer-page__header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 1rem; border-bottom: 1px solid var(--border-color, #e0e0e0); } .ontology-viewer-page__title { font-size: 1.5rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0; } .ontology-viewer-page__tabs { display: flex; gap: 0.5rem; } /* Actions container (tabs + export) */ .ontology-viewer-page__actions { display: flex; align-items: center; gap: 1rem; } /* Export dropdown */ .ontology-viewer-page__export-container { position: relative; } .ontology-viewer-page__export-btn { padding: 0.5rem 1rem; background: var(--success-light, #e8f5e9); border: 1px solid var(--success-dark, #2e7d32); border-radius: 4px; cursor: pointer; font-size: 0.875rem; font-weight: 500; color: var(--success-dark, #2e7d32); transition: all 0.2s; } .ontology-viewer-page__export-btn:hover:not(:disabled) { background: var(--success-dark, #2e7d32); color: white; } .ontology-viewer-page__export-btn:disabled { opacity: 0.5; cursor: not-allowed; } .ontology-viewer-page__export-menu { position: absolute; top: 100%; right: 0; margin-top: 0.25rem; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 6px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); z-index: 100; min-width: 200px; overflow: hidden; } .ontology-viewer-page__export-option { display: flex; align-items: center; gap: 0.5rem; width: 100%; padding: 0.75rem 1rem; background: none; border: none; cursor: pointer; font-size: 0.875rem; color: var(--text-primary, #212121); text-align: left; transition: background 0.2s; } .ontology-viewer-page__export-option:hover:not(:disabled) { background: var(--primary-light, #e3f2fd); } .ontology-viewer-page__export-option:disabled { opacity: 0.5; cursor: not-allowed; } .ontology-viewer-page__export-option:not(:last-child) { border-bottom: 1px solid var(--border-color, #e0e0e0); } .ontology-viewer-page__export-icon { font-size: 1rem; } .ontology-viewer-page__tab { padding: 0.5rem 1rem; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; cursor: pointer; font-size: 0.875rem; font-weight: 500; color: var(--text-secondary, #757575); transition: all 0.2s; } .ontology-viewer-page__tab:hover { border-color: var(--primary-color, #1976d2); color: var(--primary-color, #1976d2); } .ontology-viewer-page__tab--active { background: var(--primary-color, #1976d2); color: white; border-color: var(--primary-color, #1976d2); } /* Content Area */ .ontology-viewer-page__content { flex: 1; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 8px; padding: 1.5rem; overflow-y: auto; } .ontology-viewer-page__loading { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 200px; gap: 1rem; font-size: 1rem; color: var(--text-secondary, #757575); } .ontology-viewer-page__spinner { width: 40px; height: 40px; border: 3px solid var(--border-color, #e0e0e0); border-top-color: var(--primary-color, #1976d2); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } .ontology-viewer-page__error { display: flex; align-items: center; justify-content: center; height: 200px; font-size: 1rem; color: var(--error-color, #d32f2f); } /* Visual View Styles */ .ontology-viewer__visual { display: flex; flex-direction: column; gap: 1.5rem; } .ontology-viewer__metadata { margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-color, #e0e0e0); } .ontology-viewer__name { font-size: 1.5rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0 0 0.5rem 0; } .ontology-viewer__desc { font-size: 0.9375rem; color: var(--text-secondary, #616161); margin: 0 0 1rem 0; line-height: 1.6; } .ontology-viewer__stats { display: flex; gap: 1.5rem; flex-wrap: wrap; } .ontology-viewer__stat { font-size: 0.875rem; color: var(--text-secondary, #757575); } .ontology-viewer__stat strong { color: var(--primary-color, #1976d2); font-weight: 600; } /* Search */ .ontology-viewer__search { position: relative; margin-bottom: 1rem; } .ontology-viewer__search-input { width: 100%; padding: 0.75rem 2.5rem 0.75rem 1rem; border: 1px solid var(--border-color, #e0e0e0); border-radius: 6px; font-size: 0.9375rem; transition: border-color 0.2s, box-shadow 0.2s; } .ontology-viewer__search-input:focus { outline: none; border-color: var(--primary-color, #1976d2); box-shadow: 0 0 0 3px rgba(25, 118, 210, 0.1); } .ontology-viewer__search-clear { position: absolute; right: 0.75rem; top: 50%; transform: translateY(-50%); background: none; border: none; cursor: pointer; color: var(--text-tertiary, #9e9e9e); font-size: 1rem; padding: 0.25rem; line-height: 1; } .ontology-viewer__search-clear:hover { color: var(--text-secondary, #757575); } /* Sections */ .ontology-viewer__section { margin-bottom: 1rem; } .ontology-viewer__section-header { display: flex; align-items: center; gap: 0.5rem; width: 100%; padding: 0.75rem 1rem; background: var(--surface-secondary, #f5f5f5); border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; cursor: pointer; font-size: 1rem; font-weight: 600; color: var(--text-primary, #212121); transition: background 0.2s; } .ontology-viewer__section-header:hover { background: var(--primary-light, #e3f2fd); } .ontology-viewer__section-icon { font-size: 0.75rem; color: var(--text-secondary, #757575); } .ontology-viewer__section-content { margin-top: 1rem; padding-left: 0.5rem; display: flex; flex-direction: column; gap: 0.75rem; } /* Cards (Classes/Properties) */ .ontology-viewer__card { padding: 1rem; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 6px; border-left: 4px solid var(--primary-color, #1976d2); transition: box-shadow 0.2s, border-color 0.2s; } .ontology-viewer__card:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); } .ontology-viewer__card--highlighted { border-color: var(--warning-color, #ff9800); border-left-color: var(--warning-color, #ff9800); background: var(--warning-light, #fff3e0); animation: highlight-pulse 1s ease-out; } @keyframes highlight-pulse { 0% { background: var(--warning-color, #ff9800); } 100% { background: var(--warning-light, #fff3e0); } } .ontology-viewer__card-header { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin-bottom: 0.5rem; } .ontology-viewer__card-title { font-size: 1rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0; } /* Badges */ .ontology-viewer__badge { font-size: 0.6875rem; font-weight: 500; padding: 0.125rem 0.5rem; border-radius: 3px; text-transform: uppercase; letter-spacing: 0.5px; background: var(--surface-secondary, #f5f5f5); color: var(--text-secondary, #757575); } .ontology-viewer__badge--deprecated { background: var(--error-light, #ffebee); color: var(--error-color, #d32f2f); } .ontology-viewer__badge--abstract { background: var(--info-light, #e3f2fd); color: var(--info-color, #1976d2); } .ontology-viewer__badge--object { background: var(--success-light, #e8f5e9); color: var(--success-dark, #2e7d32); } .ontology-viewer__badge--datatype { background: var(--warning-light, #fff3e0); color: var(--warning-dark, #e65100); } .ontology-viewer__badge--annotation { background: #f3e5f5; color: #7b1fa2; } /* URI */ .ontology-viewer__uri { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.5rem; } .ontology-viewer__uri code { font-family: 'Monaco', 'Menlo', monospace; font-size: 0.75rem; color: var(--text-secondary, #616161); background: var(--surface-secondary, #f5f5f5); padding: 0.25rem 0.5rem; border-radius: 3px; word-break: break-all; flex: 1; } .ontology-viewer__copy-btn { background: none; border: none; cursor: pointer; padding: 0.25rem; font-size: 0.875rem; opacity: 0.6; transition: opacity 0.2s; } .ontology-viewer__copy-btn:hover { opacity: 1; } /* Translations Section */ .ontology-viewer__translations { margin: 0.5rem 0; } .ontology-viewer__translations-toggle { display: flex; align-items: center; gap: 0.375rem; background: none; border: none; cursor: pointer; font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); padding: 0.25rem 0; transition: color 0.2s; } .ontology-viewer__translations-toggle:hover { color: var(--primary-color, #1976d2); } .ontology-viewer__translations-list { margin-top: 0.375rem; padding: 0.5rem; background: var(--surface-secondary, #f5f5f5); border-radius: 4px; border-left: 2px solid var(--primary-light, #90caf9); } .ontology-viewer__translation-item { display: flex; align-items: flex-start; gap: 0.5rem; padding: 0.25rem 0; font-size: 0.75rem; } .ontology-viewer__translation-item:not(:last-child) { border-bottom: 1px solid var(--border-color, #e0e0e0); padding-bottom: 0.375rem; margin-bottom: 0.25rem; } .ontology-viewer__translation-lang { font-weight: 600; color: var(--primary-color, #1976d2); min-width: 24px; text-transform: uppercase; font-family: 'Monaco', 'Menlo', monospace; font-size: 0.6875rem; background: var(--primary-light, #e3f2fd); padding: 0.125rem 0.375rem; border-radius: 3px; } .ontology-viewer__translation-value { color: var(--text-secondary, #616161); line-height: 1.4; } /* Description */ .ontology-viewer__description { font-size: 0.875rem; color: var(--text-secondary, #616161); margin: 0.5rem 0; line-height: 1.6; } .ontology-viewer__description p { margin: 0.25rem 0; } /* Relations */ .ontology-viewer__relations { margin-top: 0.75rem; font-size: 0.8125rem; } .ontology-viewer__label { font-weight: 500; color: var(--text-secondary, #757575); margin-right: 0.5rem; } .ontology-viewer__tag-list { display: flex; flex-wrap: wrap; gap: 0.375rem; margin-top: 0.25rem; } .ontology-viewer__tag { font-size: 0.75rem; padding: 0.25rem 0.5rem; background: var(--surface-secondary, #f5f5f5); border: 1px solid var(--border-color, #e0e0e0); border-radius: 3px; font-family: 'Monaco', 'Menlo', monospace; } .ontology-viewer__tag--link { cursor: pointer; color: var(--primary-color, #1976d2); text-decoration: none; transition: background 0.2s, border-color 0.2s; } .ontology-viewer__tag--link:hover { background: var(--primary-light, #e3f2fd); border-color: var(--primary-color, #1976d2); } /* Prefix List */ .ontology-viewer__prefix-list { margin-top: 0.75rem; padding: 0.75rem; background: var(--surface-secondary, #f5f5f5); border-radius: 4px; max-height: 200px; overflow-y: auto; } .ontology-viewer__prefix-item { display: flex; gap: 0.5rem; padding: 0.25rem 0; font-size: 0.8125rem; } .ontology-viewer__prefix-name { font-weight: 600; color: var(--primary-color, #1976d2); min-width: 80px; font-family: 'Monaco', 'Menlo', monospace; } .ontology-viewer__prefix-uri { color: var(--text-secondary, #616161); word-break: break-all; } /* No Results */ .ontology-viewer__no-results { text-align: center; padding: 2rem; color: var(--text-secondary, #757575); font-size: 0.9375rem; } /* Raw RDF View */ .ontology-viewer__raw { height: 100%; overflow: auto; } .ontology-viewer__code { margin: 0; padding: 1rem; background: var(--surface-secondary, #f5f5f5); border-radius: 4px; font-family: 'Monaco', 'Menlo', 'Courier New', monospace; font-size: 0.8125rem; line-height: 1.5; white-space: pre-wrap; word-wrap: break-word; color: var(--text-primary, #212121); } /* Responsive Design */ @media (max-width: 1024px) { .ontology-viewer-page { grid-template-columns: 260px 1fr; gap: 1rem; padding: 1rem; } } @media (max-width: 768px) { .ontology-viewer-page { grid-template-columns: 1fr; height: auto; } .ontology-viewer-page__sidebar { order: 2; padding-right: 0; } .ontology-viewer-page__main { order: 1; } .ontology-viewer-page__header { flex-direction: column; align-items: flex-start; gap: 1rem; } .ontology-viewer-page__tabs { width: 100%; } .ontology-viewer-page__tab { flex: 1; text-align: center; } } /* LinkML Virtual Ontology Styling */ .ontology-viewer__card--linkml { border-left-color: #9c27b0; /* Purple accent for custom definitions */ } .ontology-viewer__card--linkml .ontology-viewer__uri code { background: #f3e5f5; color: #6a1b9a; } .ontology-viewer__badge--linkml { background: #f3e5f5; color: #7b1fa2; } /* LinkML indicator banner for ontology metadata section */ .ontology-viewer__linkml-indicator { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1rem; background: linear-gradient(135deg, #f3e5f5 0%, #e1bee7 100%); border: 1px solid #ce93d8; border-radius: 6px; margin-bottom: 1rem; font-size: 0.875rem; color: #6a1b9a; } .ontology-viewer__linkml-indicator::before { content: "🔮"; font-size: 1.25rem; } .ontology-viewer__linkml-indicator strong { font-weight: 600; } /* ========================================================================== Dark Mode Support - Flat Selectors for Browser Compatibility ========================================================================== */ [data-theme="dark"] .ontology-viewer-page { background: var(--background-color, #121212); } [data-theme="dark"] .ontology-viewer-page__sidebar-title { color: var(--text-primary, #f0f0f0); border-bottom-color: var(--primary-color, #64b5f6); } [data-theme="dark"] .ontology-viewer-page__content { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer-page__file-item { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .ontology-viewer-page__file-item:hover { background: var(--primary-dark, #0d47a1); } [data-theme="dark"] .ontology-viewer-page__file-item--active { background: var(--primary-color, #1976d2); } [data-theme="dark"] .ontology-viewer__card { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer__card-title { color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .ontology-viewer__card--highlighted { background: rgba(255, 152, 0, 0.15); } [data-theme="dark"] .ontology-viewer__section-header { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .ontology-viewer__code { background: var(--surface-secondary, #2a2a2a); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .ontology-viewer__tag { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer__prefix-list { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer__search-input { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .ontology-viewer__search-input::placeholder { color: var(--text-secondary, #808080); } [data-theme="dark"] .ontology-viewer__uri code { background: var(--surface-secondary, #2a2a2a); color: var(--text-secondary, #d0d0d0); } [data-theme="dark"] .ontology-viewer__translations-list { background: var(--surface-secondary, #2a2a2a); border-left-color: var(--primary-dark, #0d47a1); } [data-theme="dark"] .ontology-viewer__translation-item:not(:last-child) { border-bottom-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer__translation-lang { background: rgba(25, 118, 210, 0.2); color: var(--primary-light, #90caf9); } [data-theme="dark"] .ontology-viewer__translation-value { color: var(--text-secondary, #d0d0d0); } /* LinkML in dark mode */ [data-theme="dark"] .ontology-viewer__card--linkml { border-left-color: #ce93d8; } [data-theme="dark"] .ontology-viewer__card--linkml .ontology-viewer__uri code { background: rgba(156, 39, 176, 0.2); color: #e1bee7; } [data-theme="dark"] .ontology-viewer__badge--linkml { background: rgba(156, 39, 176, 0.2); color: #e1bee7; } [data-theme="dark"] .ontology-viewer__linkml-indicator { background: linear-gradient(135deg, rgba(156, 39, 176, 0.2) 0%, rgba(156, 39, 176, 0.3) 100%); border-color: #7b1fa2; color: #e1bee7; } /* CURIE links in descriptions */ .ontology-viewer__curie-link { color: var(--primary-color, #1976d2); text-decoration: none; background: rgba(25, 118, 210, 0.08); padding: 0.1em 0.3em; border-radius: 3px; font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace; font-size: 0.9em; transition: all 0.2s ease; } .ontology-viewer__curie-link:hover { background: rgba(25, 118, 210, 0.15); color: var(--primary-dark, #0d47a1); text-decoration: underline; } .ontology-viewer__description-with-curies p { margin: 0.5em 0; line-height: 1.6; } /* Inverse relationships (Used by) */ .ontology-viewer__relations--inverse { margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px dashed var(--border-color, #e0e0e0); } .ontology-viewer__relations--inverse .ontology-viewer__label { color: var(--info-color, #1976d2); font-style: italic; } .ontology-viewer__tag--inverse { background: var(--info-light, #e3f2fd); border-color: var(--info-color, #1976d2); color: var(--info-color, #1976d2); } .ontology-viewer__tag--inverse:hover { background: var(--primary-color, #1976d2); color: white; } .ontology-viewer__tag--property { background: var(--success-light, #e8f5e9); border-color: var(--success-dark, #2e7d32); color: var(--success-dark, #2e7d32); } .ontology-viewer__tag--property:hover { background: var(--success-dark, #2e7d32); color: white; } /* Dark mode CURIE links */ [data-theme="dark"] .ontology-viewer__curie-link { color: var(--primary-light, #90caf9); background: rgba(144, 202, 249, 0.1); } [data-theme="dark"] .ontology-viewer__curie-link:hover { background: rgba(144, 202, 249, 0.2); color: #bbdefb; } [data-theme="dark"] .ontology-viewer__relations--inverse { border-top-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer__tag--inverse { background: rgba(25, 118, 210, 0.2); border-color: var(--primary-light, #90caf9); color: var(--primary-light, #90caf9); } [data-theme="dark"] .ontology-viewer__tag--inverse:hover { background: var(--primary-color, #1976d2); color: white; } [data-theme="dark"] .ontology-viewer__tag--property { background: rgba(46, 125, 50, 0.2); border-color: var(--success-light, #81c784); color: var(--success-light, #81c784); } [data-theme="dark"] .ontology-viewer__tag--property:hover { background: var(--success-dark, #2e7d32); color: white; } /* Export dropdown dark mode */ [data-theme="dark"] .ontology-viewer-page__export-btn { background: rgba(46, 125, 50, 0.2); border-color: var(--success-light, #81c784); color: var(--success-light, #81c784); } [data-theme="dark"] .ontology-viewer-page__export-btn:hover:not(:disabled) { background: var(--success-dark, #2e7d32); color: white; } [data-theme="dark"] .ontology-viewer-page__export-menu { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer-page__export-option { color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .ontology-viewer-page__export-option:hover:not(:disabled) { background: var(--primary-dark, #0d47a1); } [data-theme="dark"] .ontology-viewer-page__export-option:not(:last-child) { border-bottom-color: var(--border-color, #404040); } /* Tree view dark mode */ [data-theme="dark"] .ontology-viewer__tree-title { color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .ontology-viewer__tree-header { border-bottom-color: var(--border-color, #404040); } [data-theme="dark"] .ontology-viewer__tree-control-btn { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); color: var(--text-secondary, #d0d0d0); } [data-theme="dark"] .ontology-viewer__tree-control-btn:hover { background: var(--primary-dark, #0d47a1); color: white; } [data-theme="dark"] .ontology-viewer__tree-stats { color: var(--text-secondary, #d0d0d0); } [data-theme="dark"] .ontology-viewer__tree-item { background: var(--surface-color, #1e1e1e); } [data-theme="dark"] .ontology-viewer__tree-item:hover { background: var(--surface-secondary, #2a2a2a); } [data-theme="dark"] .ontology-viewer__tree-item--highlighted { background: rgba(255, 152, 0, 0.15); border-left-color: var(--warning-color, #ff9800); } [data-theme="dark"] .ontology-viewer__tree-toggle { color: var(--text-secondary, #d0d0d0); } [data-theme="dark"] .ontology-viewer__tree-toggle:hover { background: var(--primary-dark, #0d47a1); color: var(--primary-light, #90caf9); } [data-theme="dark"] .ontology-viewer__tree-leaf { color: var(--text-tertiary, #666666); } [data-theme="dark"] .ontology-viewer__tree-label { color: var(--primary-light, #90caf9); } [data-theme="dark"] .ontology-viewer__tree-label:hover { color: #bbdefb; } [data-theme="dark"] .ontology-viewer__tree-count { color: var(--text-tertiary, #808080); } [data-theme="dark"] .ontology-viewer__tree-empty { color: var(--text-secondary, #d0d0d0); } /* Tree View Styles */ .ontology-viewer__tree { display: flex; flex-direction: column; gap: 1rem; } .ontology-viewer__tree-header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 1rem; border-bottom: 1px solid var(--border-color, #e0e0e0); } .ontology-viewer__tree-title { font-size: 1.25rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0; } .ontology-viewer__tree-controls { display: flex; gap: 0.5rem; } .ontology-viewer__tree-control-btn { padding: 0.375rem 0.75rem; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; cursor: pointer; font-size: 0.8125rem; color: var(--text-secondary, #757575); transition: all 0.2s; } .ontology-viewer__tree-control-btn:hover { background: var(--primary-light, #e3f2fd); border-color: var(--primary-color, #1976d2); color: var(--primary-color, #1976d2); } .ontology-viewer__tree-stats { display: flex; gap: 0.5rem; font-size: 0.875rem; color: var(--text-secondary, #757575); } .ontology-viewer__tree-container { display: flex; flex-direction: column; gap: 0.125rem; } .ontology-viewer__tree-node { display: flex; flex-direction: column; } .ontology-viewer__tree-item { display: flex; align-items: center; gap: 0.375rem; padding: 0.375rem 0.5rem; border-radius: 4px; border-left: 3px solid transparent; transition: all 0.15s; } .ontology-viewer__tree-item:hover { background: var(--surface-secondary, #f5f5f5); } .ontology-viewer__tree-item--highlighted { background: var(--warning-light, #fff3e0); border-left-color: var(--warning-color, #ff9800); } .ontology-viewer__tree-toggle { background: none; border: none; cursor: pointer; font-size: 0.625rem; color: var(--text-secondary, #757575); padding: 0.25rem; width: 1.25rem; height: 1.25rem; display: flex; align-items: center; justify-content: center; border-radius: 3px; transition: all 0.15s; } .ontology-viewer__tree-toggle:hover { background: var(--primary-light, #e3f2fd); color: var(--primary-color, #1976d2); } .ontology-viewer__tree-leaf { font-size: 0.5rem; color: var(--text-tertiary, #9e9e9e); width: 1.25rem; text-align: center; } .ontology-viewer__tree-label { color: var(--primary-color, #1976d2); text-decoration: none; font-size: 0.9375rem; font-weight: 500; transition: color 0.15s; } .ontology-viewer__tree-label:hover { color: var(--primary-dark, #0d47a1); text-decoration: underline; } .ontology-viewer__tree-count { font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); margin-left: 0.25rem; } .ontology-viewer__tree-children { display: flex; flex-direction: column; gap: 0.125rem; } .ontology-viewer__tree-empty { text-align: center; padding: 2rem; color: var(--text-secondary, #757575); font-size: 0.9375rem; } /* ========================================================================== Collapsible Header ========================================================================== */ .ontology-viewer-page__header.collapsible-header { transition: max-height 0.3s ease, opacity 0.3s ease, padding 0.3s ease, margin 0.3s ease; max-height: 200px; overflow: hidden; } .ontology-viewer-page__header.collapsible-header--collapsed { max-height: 0; opacity: 0; padding-top: 0; padding-bottom: 0; margin-bottom: 0; border-bottom: none; } /* ========================================================================== Mobile Light Mode Override Force light mode on mobile regardless of system color scheme preference ========================================================================== */ @media (max-width: 900px) { .ontology-viewer-page { background: #fafafa !important; } .ontology-viewer-page__content { background: #ffffff !important; border-color: #e0e0e0 !important; } .ontology-viewer-page__sidebar-title { color: #212121 !important; } .ontology-viewer-page__file-item { background: #ffffff !important; border-color: #e0e0e0 !important; color: #212121 !important; } .ontology-viewer-page__file-item:hover { background: #e3f2fd !important; } .ontology-viewer-page__file-item--active { background: #1976d2 !important; color: #ffffff !important; } .ontology-viewer__card { background: #ffffff !important; border-color: #e0e0e0 !important; } .ontology-viewer__section-header { background: #f5f5f5 !important; border-color: #e0e0e0 !important; color: #212121 !important; } .ontology-viewer__code { background: #f5f5f5 !important; color: #212121 !important; } .ontology-viewer__tag, .ontology-viewer__prefix-list { background: #f5f5f5 !important; border-color: #e0e0e0 !important; } .ontology-viewer__search-input { background: #ffffff !important; border-color: #e0e0e0 !important; color: #212121 !important; } .ontology-viewer__uri code { background: #f5f5f5 !important; color: #757575 !important; } .ontology-viewer__translations-list { background: #f5f5f5 !important; } .ontology-viewer__translation-lang { background: rgba(25, 118, 210, 0.1) !important; color: #1976d2 !important; } .ontology-viewer__translation-value { color: #757575 !important; } /* Tree view light mode on mobile */ .ontology-viewer__tree-header { border-bottom-color: #e0e0e0 !important; } .ontology-viewer__tree-control-btn { background: #ffffff !important; border-color: #e0e0e0 !important; color: #757575 !important; } .ontology-viewer__tree-control-btn:hover { background: #e3f2fd !important; color: #1976d2 !important; } .ontology-viewer__tree-item { background: transparent !important; } .ontology-viewer__tree-item:hover { background: #f5f5f5 !important; } .ontology-viewer__tree-label { color: #1976d2 !important; } /* Card title - ensure readable on light background */ .ontology-viewer__card-title { color: #212121 !important; } }