/* LinkMLViewerPage.css - LinkML Schema Viewer Page Layout & Styling */ .linkml-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 */ .linkml-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; } .linkml-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); } /* Sidebar Search */ .linkml-viewer-page__sidebar-search { position: relative; margin-bottom: 0.75rem; } .linkml-viewer-page__sidebar-search-input { width: 100%; padding: 0.5rem 2rem 0.5rem 0.75rem; font-size: 0.8125rem; border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; background: white; color: var(--text-primary, #212121); transition: border-color 0.2s, box-shadow 0.2s; box-sizing: border-box; } .linkml-viewer-page__sidebar-search-input:focus { outline: none; border-color: var(--primary-color, #1976d2); box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.15); } .linkml-viewer-page__sidebar-search-input::placeholder { color: var(--text-tertiary, #9e9e9e); } .linkml-viewer-page__sidebar-search-clear { position: absolute; right: 0.5rem; top: 50%; transform: translateY(-50%); display: flex; align-items: center; justify-content: center; width: 1.25rem; height: 1.25rem; background: var(--text-tertiary, #9e9e9e); border: none; border-radius: 50%; cursor: pointer; font-size: 0.75rem; color: white; transition: background 0.2s; } .linkml-viewer-page__sidebar-search-clear:hover { background: var(--text-secondary, #757575); } /* Sidebar Category Filters */ .linkml-viewer-page__sidebar-filters { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--border-color, #e0e0e0); } .linkml-viewer-page__filter-checkbox { display: flex; align-items: center; gap: 0.25rem; cursor: pointer; font-size: 0.75rem; } .linkml-viewer-page__filter-checkbox input[type="checkbox"] { width: 14px; height: 14px; margin: 0; cursor: pointer; accent-color: var(--primary-color, #1976d2); } .linkml-viewer-page__filter-label { font-weight: 500; padding: 0.125rem 0.375rem; border-radius: 3px; white-space: nowrap; } .linkml-viewer-page__filter-label--main { background: #e8f5e9; color: #2e7d32; } .linkml-viewer-page__filter-label--class { background: #e3f2fd; color: #1565c0; } .linkml-viewer-page__filter-label--enum { background: #f3e5f5; color: #7b1fa2; } .linkml-viewer-page__filter-label--slot { background: #fff3e0; color: #e65100; } /* No results message */ .linkml-viewer-page__no-results { padding: 1rem; text-align: center; font-size: 0.875rem; color: var(--text-secondary, #757575); font-style: italic; } /* Category Sections */ .linkml-viewer-page__category { margin-bottom: 1.5rem; border-bottom: 1px solid var(--border-color, #e0e0e0); padding-bottom: 1rem; } .linkml-viewer-page__category:last-child { border-bottom: none; margin-bottom: 0; } .linkml-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; } .linkml-viewer-page__category-count { font-weight: 400; color: var(--text-tertiary, #9e9e9e); } .linkml-viewer-page__file-list { display: flex; flex-direction: column; gap: 0.25rem; max-height: 250px; overflow-y: auto; overflow-x: hidden; } .linkml-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; word-wrap: break-word; overflow-wrap: break-word; hyphens: auto; min-height: fit-content; } .linkml-viewer-page__file-item:hover { border-color: var(--primary-color, #1976d2); background: var(--primary-light, #e3f2fd); } .linkml-viewer-page__file-item--active { border-color: var(--primary-color, #1976d2); background: var(--primary-color, #1976d2); color: white; } /* Main Content */ .linkml-viewer-page__main { display: flex; flex-direction: column; gap: 1.5rem; overflow-y: auto; } /* Header */ .linkml-viewer-page__header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 1rem; border-bottom: 1px solid var(--border-color, #e0e0e0); transition: all 0.3s ease; } /* ============================================================================ Navigation-Synced Collapsible Header Header collapses/expands based on main navigation state (via sibling selector) ============================================================================ */ /* Collapse header when navigation is collapsed */ .navigation--collapsed ~ .layout-content .linkml-viewer-page__header { height: 0; padding: 0; margin: 0; overflow: hidden; opacity: 0; border-bottom: none; } /* Adjust title when collapsed (for smooth transition back) */ .navigation--collapsed ~ .layout-content .linkml-viewer-page__title { font-size: 0; opacity: 0; } /* Hide custodian type filter bar when collapsed */ .navigation--collapsed ~ .layout-content .linkml-viewer-page__custodian-filter { display: none; } /* ============================================================================ Sticky Subheader with Tabs Always visible - contains view mode tabs (visual/raw) and 2D/3D toggle ============================================================================ */ .linkml-viewer-page__subheader { position: sticky; top: 0; z-index: 100; background: var(--background-color, #ffffff); padding: 0.75rem 0; border-bottom: 1px solid var(--border-color, #e0e0e0); display: flex; flex-direction: column; gap: 0.5rem; } /* When header is collapsed, add slight top padding to subheader */ .navigation--collapsed ~ .layout-content .linkml-viewer-page__subheader { padding-top: 1rem; } .linkml-viewer-page__title { font-size: 1.5rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0; } .linkml-viewer-page__tabs { display: flex; gap: 0.5rem; } .linkml-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; } .linkml-viewer-page__tab:hover { border-color: var(--primary-color, #1976d2); color: var(--primary-color, #1976d2); } .linkml-viewer-page__tab--active { background: var(--primary-color, #1976d2); color: white; border-color: var(--primary-color, #1976d2); } /* Tab separator for 2D/3D toggle */ .linkml-viewer-page__tab-separator { display: flex; align-items: center; color: var(--border-color, #e0e0e0); padding: 0 0.25rem; font-weight: 300; } /* 3D/2D indicator toggle button */ .linkml-viewer-page__tab--indicator { font-size: 0.8125rem; min-width: auto; padding: 0.375rem 0.75rem; } /* 3D Custodian Type Indicator container */ .linkml-viewer__custodian-indicator { margin-left: 0.5rem; vertical-align: middle; } /* Legend Bar for 3D mode - shows all 19 custodian types in header */ .linkml-viewer-page__legend-bar { display: flex; align-items: center; justify-content: flex-end; gap: 1rem; padding-top: 0.75rem; margin-top: 0.75rem; border-top: 1px solid var(--border-color, #e0e0e0); width: 100%; flex-wrap: wrap; } /* Filter clear button */ .linkml-viewer-page__filter-clear { display: flex; align-items: center; gap: 0.25rem; padding: 0.375rem 0.75rem; font-size: 0.75rem; font-weight: 500; background: var(--primary-color, #1976d2); color: white; border: none; border-radius: 16px; cursor: pointer; transition: background 0.2s, transform 0.1s; white-space: nowrap; } .linkml-viewer-page__filter-clear:hover { background: var(--primary-dark, #1565c0); transform: scale(1.02); } .linkml-viewer-page__filter-clear:active { transform: scale(0.98); } /* Adjust header to wrap when legend bar is shown */ .linkml-viewer-page__header { flex-wrap: wrap; } /* Content Area */ .linkml-viewer-page__content { flex: 1; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 8px; padding: 1.5rem; overflow-y: auto; } .linkml-viewer-page__loading, .linkml-viewer-page__error { display: flex; align-items: center; justify-content: center; height: 200px; font-size: 1rem; color: var(--text-secondary, #757575); } .linkml-viewer-page__error { color: var(--error-color, #d32f2f); } /* Visual View Styles */ .linkml-viewer__metadata { margin-bottom: 2rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--border-color, #e0e0e0); } .linkml-viewer__schema-name { font-size: 1.5rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0 0 0.5rem 0; } .linkml-viewer__schema-desc { font-size: 0.9375rem; color: var(--text-secondary, #616161); margin: 0 0 1rem 0; line-height: 1.6; } .linkml-viewer__schema-id, .linkml-viewer__schema-version { font-size: 0.875rem; margin-bottom: 0.25rem; } .linkml-viewer__label { font-weight: 500; color: var(--text-secondary, #757575); margin-right: 0.5rem; } /* Sections */ .linkml-viewer__section { margin-bottom: 1.5rem; } .linkml-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; } .linkml-viewer__section-header:hover { background: var(--primary-light, #e3f2fd); } .linkml-viewer__section-icon { font-size: 0.75rem; color: var(--text-secondary, #757575); } .linkml-viewer__section-content { margin-top: 1rem; padding-left: 1rem; display: flex; flex-direction: column; gap: 1rem; } /* Item (Class/Slot/Enum) */ .linkml-viewer__item { padding: 1rem; background: white; border: 1px solid var(--border-color, #e0e0e0); border-radius: 6px; border-left: 4px solid var(--primary-color, #1976d2); transition: all 0.3s ease; } /* Highlighted item (from URL deep linking) */ .linkml-viewer__item--highlighted { border-left-color: var(--success-color, #4caf50); background: var(--success-light, #e8f5e9); box-shadow: 0 0 0 2px var(--success-color, #4caf50), 0 4px 12px rgba(76, 175, 80, 0.15); animation: pulse-highlight 1.5s ease-in-out; } @keyframes pulse-highlight { 0%, 100% { box-shadow: 0 0 0 2px var(--success-color, #4caf50), 0 4px 12px rgba(76, 175, 80, 0.15); } 50% { box-shadow: 0 0 0 4px var(--success-color, #4caf50), 0 4px 20px rgba(76, 175, 80, 0.3); } } /* Filtered-out item (custodian type filter active, item doesn't match) */ .linkml-viewer__item--filtered-out { opacity: 0.35; filter: grayscale(50%); border-left-color: var(--border-color, #e0e0e0); background: var(--background-muted, #f5f5f5); transform: scale(0.98); transition: all 0.3s ease; } .linkml-viewer__item--filtered-out:hover { opacity: 0.6; filter: grayscale(25%); } /* Ensure matching items stand out when filter is active */ .linkml-viewer__section-content:has(.linkml-viewer__item--filtered-out) .linkml-viewer__item:not(.linkml-viewer__item--filtered-out) { box-shadow: 0 2px 8px rgba(25, 118, 210, 0.15); border-left-color: var(--primary-color, #1976d2); } .linkml-viewer__item-name { font-size: 1rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0 0 0.5rem 0; display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; } /* Badges */ .linkml-viewer__badge { font-size: 0.6875rem; font-weight: 500; padding: 0.125rem 0.5rem; border-radius: 3px; text-transform: uppercase; letter-spacing: 0.5px; } .linkml-viewer__badge--abstract { background: var(--info-light, #e3f2fd); color: var(--info-color, #1976d2); } .linkml-viewer__badge--required { background: var(--error-light, #ffebee); color: var(--error-color, #d32f2f); } .linkml-viewer__badge--multi { background: var(--warning-light, #fff3e0); color: var(--warning-color, #f57c00); } /* Custodian Type Badge - shows which GLAMORCUBESFIXPHDNT types apply */ .linkml-viewer__custodian-badge { margin-left: 0.5rem; vertical-align: middle; } /* Item header with badges - flex layout for proper alignment */ .linkml-viewer__item-name { display: flex; flex-wrap: wrap; align-items: center; gap: 0.375rem; } /* URI and Range */ .linkml-viewer__uri, .linkml-viewer__range, .linkml-viewer__pattern { font-size: 0.8125rem; margin-bottom: 0.5rem; } .linkml-viewer__uri code, .linkml-viewer__range code, .linkml-viewer__pattern code { background: var(--surface-secondary, #f5f5f5); padding: 0.125rem 0.375rem; border-radius: 3px; font-family: 'Monaco', 'Menlo', monospace; font-size: 0.75rem; } /* Description */ .linkml-viewer__description { font-size: 0.875rem; color: var(--text-secondary, #616161); margin: 0.5rem 0; line-height: 1.6; } /* Markdown Styling */ .linkml-viewer__markdown { font-size: 0.875rem; color: var(--text-secondary, #616161); line-height: 1.7; } .linkml-viewer__markdown p { margin: 0.5rem 0; } .linkml-viewer__markdown p:first-child { margin-top: 0; } .linkml-viewer__markdown h1, .linkml-viewer__markdown h2, .linkml-viewer__markdown h3, .linkml-viewer__markdown h4, .linkml-viewer__markdown h5, .linkml-viewer__markdown h6 { color: var(--text-primary, #212121); margin: 1rem 0 0.5rem 0; font-weight: 600; } .linkml-viewer__markdown h1 { font-size: 1.25rem; } .linkml-viewer__markdown h2 { font-size: 1.125rem; } .linkml-viewer__markdown h3 { font-size: 1rem; } .linkml-viewer__markdown h4 { font-size: 0.9375rem; } .linkml-viewer__markdown h5, .linkml-viewer__markdown h6 { font-size: 0.875rem; } .linkml-viewer__markdown strong { font-weight: 600; color: var(--text-primary, #212121); } .linkml-viewer__markdown em { font-style: italic; } .linkml-viewer__markdown ul, .linkml-viewer__markdown ol { margin: 0.5rem 0; padding-left: 1.5rem; } .linkml-viewer__markdown li { margin: 0.25rem 0; } .linkml-viewer__markdown li > ul, .linkml-viewer__markdown li > ol { margin: 0.25rem 0; } .linkml-viewer__markdown code { background: var(--surface-secondary, #f5f5f5); padding: 0.125rem 0.375rem; border-radius: 3px; font-family: 'Monaco', 'Menlo', 'Consolas', monospace; font-size: 0.8125rem; color: var(--primary-dark, #1565c0); } .linkml-viewer__markdown pre { background: var(--surface-secondary, #f5f5f5); padding: 1rem; border-radius: 6px; overflow-x: auto; margin: 0.75rem 0; border: 1px solid var(--border-color, #e0e0e0); } .linkml-viewer__markdown pre code { background: none; padding: 0; font-size: 0.8125rem; color: var(--text-primary, #212121); white-space: pre; display: block; line-height: 1.5; } .linkml-viewer__markdown a { color: var(--primary-color, #1976d2); text-decoration: none; } .linkml-viewer__markdown a:hover { text-decoration: underline; } .linkml-viewer__markdown blockquote { border-left: 3px solid var(--primary-color, #1976d2); margin: 0.75rem 0; padding: 0.5rem 1rem; background: var(--primary-light, #e3f2fd); border-radius: 0 4px 4px 0; } .linkml-viewer__markdown blockquote p { margin: 0; } .linkml-viewer__markdown hr { border: none; border-top: 1px solid var(--border-color, #e0e0e0); margin: 1rem 0; } .linkml-viewer__markdown table { border-collapse: collapse; width: 100%; margin: 0.75rem 0; font-size: 0.8125rem; } .linkml-viewer__markdown th, .linkml-viewer__markdown td { border: 1px solid var(--border-color, #e0e0e0); padding: 0.5rem 0.75rem; text-align: left; } .linkml-viewer__markdown th { background: var(--surface-secondary, #f5f5f5); font-weight: 600; color: var(--text-primary, #212121); } .linkml-viewer__markdown tr:nth-child(even) { background: var(--surface-secondary, #fafafa); } /* ========================================================================== Admonition Styles for CRITICAL, WARNING, NOTE, IMPORTANT statements These highlight important documentation statements in descriptions ========================================================================== */ /* Base admonition style - inline callout box */ .linkml-admonition { display: inline-flex; align-items: flex-start; gap: 0.375rem; padding: 0.25rem 0.5rem; border-radius: 4px; font-weight: 600; font-size: 0.8125rem; line-height: 1.4; margin: 0.125rem 0; } /* Block-level admonition (when it's the whole paragraph) */ .linkml-admonition--block { display: flex; padding: 0.5rem 0.75rem; margin: 0.5rem 0; border-left: 4px solid; } /* CRITICAL - Red: Urgent, must-know information */ .linkml-admonition--critical { background: #fef2f2; color: #991b1b; border-color: #dc2626; } .linkml-admonition--critical .linkml-admonition__label { color: #dc2626; } /* WARNING - Orange: Potential issues or gotchas */ .linkml-admonition--warning { background: #fffbeb; color: #92400e; border-color: #f59e0b; } .linkml-admonition--warning .linkml-admonition__label { color: #d97706; } /* IMPORTANT - Amber: Significant but not urgent */ .linkml-admonition--important { background: #fef3c7; color: #78350f; border-color: #f59e0b; } .linkml-admonition--important .linkml-admonition__label { color: #b45309; } /* NOTE - Blue: Informational, helpful context */ .linkml-admonition--note { background: #eff6ff; color: #1e40af; border-color: #3b82f6; } .linkml-admonition--note .linkml-admonition__label { color: #2563eb; } /* Admonition label (the keyword itself) */ .linkml-admonition__label { font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; flex-shrink: 0; } /* Admonition content (the text after the keyword) */ .linkml-admonition__content { font-weight: 500; } /* Dark mode admonitions */ [data-theme="dark"] { .linkml-admonition--critical { background: rgba(220, 38, 38, 0.15); color: #fca5a5; border-color: #dc2626; } .linkml-admonition--critical .linkml-admonition__label { color: #f87171; } .linkml-admonition--warning { background: rgba(245, 158, 11, 0.15); color: #fcd34d; border-color: #f59e0b; } .linkml-admonition--warning .linkml-admonition__label { color: #fbbf24; } .linkml-admonition--important { background: rgba(245, 158, 11, 0.12); color: #fde68a; border-color: #f59e0b; } .linkml-admonition--important .linkml-admonition__label { color: #fcd34d; } .linkml-admonition--note { background: rgba(59, 130, 246, 0.15); color: #93c5fd; border-color: #3b82f6; } .linkml-admonition--note .linkml-admonition__label { color: #60a5fa; } } /* Mobile light mode override for admonitions */ @media (max-width: 900px) { .linkml-admonition--critical { background: #fef2f2 !important; color: #991b1b !important; border-color: #dc2626 !important; } .linkml-admonition--critical .linkml-admonition__label { color: #dc2626 !important; } .linkml-admonition--warning { background: #fffbeb !important; color: #92400e !important; border-color: #f59e0b !important; } .linkml-admonition--warning .linkml-admonition__label { color: #d97706 !important; } .linkml-admonition--important { background: #fef3c7 !important; color: #78350f !important; border-color: #f59e0b !important; } .linkml-admonition--important .linkml-admonition__label { color: #b45309 !important; } .linkml-admonition--note { background: #eff6ff !important; color: #1e40af !important; border-color: #3b82f6 !important; } .linkml-admonition--note .linkml-admonition__label { color: #2563eb !important; } } /* ========================================================================== End Admonition Styles ========================================================================== */ /* ========================================================================== CURIE (Compact URI) Highlighting Highlights ontology references like crm:E41_Appellation, schema:name ========================================================================== */ .linkml-curie { background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%); color: #0369a1; padding: 0.125rem 0.375rem; border-radius: 3px; font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace; font-size: 0.875em; font-weight: 500; border: 1px solid rgba(3, 105, 161, 0.2); white-space: nowrap; } /* Hover state for CURIEs */ .linkml-curie:hover { background: linear-gradient(135deg, #bae6fd 0%, #e0f2fe 100%); border-color: rgba(3, 105, 161, 0.4); } /* Dark mode CURIEs */ [data-theme="dark"] { .linkml-curie { background: linear-gradient(135deg, rgba(14, 165, 233, 0.2) 0%, rgba(56, 189, 248, 0.15) 100%); color: #7dd3fc; border-color: rgba(125, 211, 252, 0.3); } .linkml-curie:hover { background: linear-gradient(135deg, rgba(14, 165, 233, 0.3) 0%, rgba(56, 189, 248, 0.25) 100%); border-color: rgba(125, 211, 252, 0.5); } } /* ========================================================================== End CURIE Highlighting ========================================================================== */ /* ========================================================================== Lifecycle Diagram Styles Renders ASCII box diagrams as styled cards with flow arrows Used for records lifecycle visualizations (CustodianAdministration, etc.) ========================================================================== */ .linkml-lifecycle-diagram { display: flex; flex-direction: column; align-items: center; gap: 0.5rem; padding: 1.25rem; margin: 1rem 0; background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); border-radius: 12px; border: 1px solid var(--border-color, #e2e8f0); } /* Individual lifecycle box (card) */ .linkml-lifecycle-box { width: 100%; max-width: 500px; background: white; border-radius: 8px; border: 2px solid var(--border-color, #e2e8f0); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); overflow: hidden; transition: transform 0.2s, box-shadow 0.2s; } .linkml-lifecycle-box:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } /* Highlighted box (THIS CLASS indicator) */ .linkml-lifecycle-box--highlighted { border-color: var(--primary-color, #1976d2); border-width: 2px; box-shadow: 0 2px 8px rgba(25, 118, 210, 0.2); } .linkml-lifecycle-box--highlighted .linkml-lifecycle-box__title { background: linear-gradient(135deg, var(--primary-color, #1976d2) 0%, #1565c0 100%); color: white; } /* Box title */ .linkml-lifecycle-box__title { padding: 0.625rem 1rem; font-weight: 600; font-size: 0.9375rem; background: var(--surface-secondary, #f5f5f5); border-bottom: 1px solid var(--border-color, #e2e8f0); color: var(--text-primary, #212121); font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace; } /* Box content area */ .linkml-lifecycle-box__content { padding: 0.75rem 1rem; font-size: 0.8125rem; color: var(--text-secondary, #616161); line-height: 1.5; } /* Individual content lines */ .linkml-lifecycle-box__line { margin: 0.25rem 0; } /* List items within box */ .linkml-lifecycle-box__item { padding: 0.25rem 0; padding-left: 1rem; position: relative; } .linkml-lifecycle-box__item::before { content: "•"; position: absolute; left: 0; color: var(--primary-color, #1976d2); font-weight: bold; } /* Items with emoji prefixes (✅, ❌) don't need bullet */ .linkml-lifecycle-box__item:has(> :first-child:is([data-emoji])), .linkml-lifecycle-box__item:first-letter { /* Let emoji be the indicator if present */ } /* Flow arrow between boxes */ .linkml-lifecycle-arrow { display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: var(--primary-color, #1976d2); padding: 0.25rem 0; position: relative; } .linkml-lifecycle-arrow::before, .linkml-lifecycle-arrow::after { content: ""; height: 8px; width: 2px; background: var(--primary-color, #1976d2); position: absolute; left: 50%; transform: translateX(-50%); } .linkml-lifecycle-arrow::before { top: -4px; } .linkml-lifecycle-arrow::after { bottom: -4px; } /* Text between boxes (transition descriptions) */ .linkml-lifecycle-text { font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); text-align: center; max-width: 400px; padding: 0.25rem 0.75rem; font-style: italic; background: rgba(255, 255, 255, 0.7); border-radius: 4px; } /* Dark mode support */ [data-theme="dark"] .linkml-lifecycle-diagram { background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%); border-color: #334155; } [data-theme="dark"] .linkml-lifecycle-box { background: #1e293b; border-color: #475569; } [data-theme="dark"] .linkml-lifecycle-box--highlighted { border-color: #60a5fa; box-shadow: 0 2px 8px rgba(96, 165, 250, 0.2); } [data-theme="dark"] .linkml-lifecycle-box--highlighted .linkml-lifecycle-box__title { background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); } [data-theme="dark"] .linkml-lifecycle-box__title { background: #334155; border-color: #475569; color: #f1f5f9; } [data-theme="dark"] .linkml-lifecycle-box__content { color: #94a3b8; } [data-theme="dark"] .linkml-lifecycle-arrow { color: #60a5fa; } [data-theme="dark"] .linkml-lifecycle-arrow::before, [data-theme="dark"] .linkml-lifecycle-arrow::after { background: #60a5fa; } [data-theme="dark"] .linkml-lifecycle-text { color: #64748b; background: rgba(30, 41, 59, 0.7); } /* Print styles */ @media print { .linkml-lifecycle-diagram { background: white; border: 1px solid #ccc; break-inside: avoid; } .linkml-lifecycle-box { border: 1px solid #999; box-shadow: none; } .linkml-lifecycle-box--highlighted { border: 2px solid #333; } .linkml-lifecycle-box--highlighted .linkml-lifecycle-box__title { background: #333; } } /* ========================================================================== End Lifecycle Diagram Styles ========================================================================== */ /* ========================================================================== Tree Diagram Styles Styled rendering for ASCII tree diagrams using ├── └── │ characters ========================================================================== */ .linkml-tree-diagram { font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', 'Source Code Pro', Consolas, monospace; font-size: 0.875rem; line-height: 1.6; padding: 1rem 1.25rem; margin: 1rem 0; background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); border: 1px solid var(--border-color, #e2e8f0); border-radius: 8px; overflow-x: auto; } .linkml-tree-item { white-space: nowrap; padding: 0.15rem 0; color: var(--text-primary, #1e293b); transition: background-color 0.15s ease; } .linkml-tree-item:hover { background: rgba(59, 130, 246, 0.08); border-radius: 3px; } .linkml-tree-item--highlighted { font-weight: 600; } .linkml-tree-branch { color: var(--text-tertiary, #94a3b8); margin-right: 0.5rem; user-select: none; } .linkml-tree-connector { color: var(--text-tertiary, #94a3b8); user-select: none; padding: 0; line-height: 1.2; } .linkml-tree-highlight { background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); color: white; padding: 0.15rem 0.5rem; border-radius: 4px; font-weight: 600; display: inline-block; } .linkml-tree-arrow { color: #3b82f6; font-weight: bold; margin: 0 0.25rem; } /* Dark mode support for tree diagrams */ [data-theme="dark"] .linkml-tree-diagram { background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%); border-color: #334155; } [data-theme="dark"] .linkml-tree-item { color: #e2e8f0; } [data-theme="dark"] .linkml-tree-item:hover { background: rgba(96, 165, 250, 0.15); } [data-theme="dark"] .linkml-tree-branch, [data-theme="dark"] .linkml-tree-connector { color: #64748b; } [data-theme="dark"] .linkml-tree-highlight { background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); } [data-theme="dark"] .linkml-tree-arrow { color: #60a5fa; } /* Print styles for tree diagrams */ @media print { .linkml-tree-diagram { background: white; border: 1px solid #ccc; break-inside: avoid; } .linkml-tree-highlight { background: #333; color: white; } } /* ========================================================================== End Tree Diagram Styles ========================================================================== */ /* ========================================================================== Flow Diagram Styles Styled rendering for arrow-based flow diagrams (↓ → ← characters) ========================================================================== */ .linkml-flow-diagram { font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', 'Source Code Pro', Consolas, monospace; font-size: 0.875rem; line-height: 1.6; padding: 1.25rem 1.5rem; margin: 1rem 0; background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%); border: 1px solid var(--border-color, #bae6fd); border-radius: 8px; display: flex; flex-direction: column; align-items: center; gap: 0.25rem; } .linkml-flow-node { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 1rem; background: white; border: 1px solid #cbd5e1; border-radius: 6px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); transition: all 0.2s ease; } .linkml-flow-node:hover { border-color: #3b82f6; box-shadow: 0 2px 6px rgba(59, 130, 246, 0.15); } .linkml-flow-node--highlighted { background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); border-color: #1d4ed8; box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3); } .linkml-flow-node--highlighted .linkml-flow-node__content { color: white; font-weight: 600; } .linkml-flow-node--highlighted .linkml-flow-node__annotation { background: rgba(255, 255, 255, 0.2); color: rgba(255, 255, 255, 0.9); } .linkml-flow-node__content { color: var(--text-primary, #1e293b); font-weight: 500; } .linkml-flow-node__annotation { font-size: 0.75rem; color: #64748b; background: #f1f5f9; padding: 0.125rem 0.5rem; border-radius: 10px; font-weight: 400; } .linkml-flow-arrow { font-size: 1.25rem; color: #3b82f6; font-weight: bold; padding: 0.125rem 0; user-select: none; position: relative; } .linkml-flow-arrow::before { content: ''; position: absolute; left: 50%; top: -0.25rem; width: 2px; height: 0.375rem; background: #3b82f6; transform: translateX(-50%); } .linkml-flow-arrow::after { content: ''; position: absolute; left: 50%; bottom: -0.25rem; width: 2px; height: 0.375rem; background: #3b82f6; transform: translateX(-50%); } .linkml-flow-connector { color: #94a3b8; font-size: 1rem; padding: 0; line-height: 1; user-select: none; } .linkml-flow-branch { font-size: 0.75rem; font-style: italic; color: #64748b; background: #f8fafc; padding: 0.25rem 0.75rem; border-radius: 10px; border: 1px dashed #cbd5e1; } /* Dark mode support for flow diagrams */ [data-theme="dark"] .linkml-flow-diagram { background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%); border-color: #334155; } [data-theme="dark"] .linkml-flow-node { background: #1e293b; border-color: #475569; } [data-theme="dark"] .linkml-flow-node:hover { border-color: #60a5fa; } [data-theme="dark"] .linkml-flow-node__content { color: #e2e8f0; } [data-theme="dark"] .linkml-flow-node__annotation { background: #334155; color: #94a3b8; } [data-theme="dark"] .linkml-flow-node--highlighted { background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); } [data-theme="dark"] .linkml-flow-arrow { color: #60a5fa; } [data-theme="dark"] .linkml-flow-arrow::before, [data-theme="dark"] .linkml-flow-arrow::after { background: #60a5fa; } [data-theme="dark"] .linkml-flow-connector { color: #64748b; } [data-theme="dark"] .linkml-flow-branch { background: rgba(30, 41, 59, 0.7); border-color: #475569; color: #94a3b8; } /* Print styles for flow diagrams */ @media print { .linkml-flow-diagram { background: white; border: 1px solid #ccc; break-inside: avoid; } .linkml-flow-node { border: 1px solid #999; box-shadow: none; } .linkml-flow-node--highlighted { background: #333; border-color: #333; } .linkml-flow-node--highlighted .linkml-flow-node__content { color: white; } } /* ========================================================================== End Flow Diagram Styles ========================================================================== */ /* Compact markdown for enum value descriptions */ .linkml-viewer__markdown--compact { font-size: 0.8125rem; } .linkml-viewer__markdown--compact p { margin: 0.25rem 0; } .linkml-viewer__markdown--compact ul, .linkml-viewer__markdown--compact ol { margin: 0.25rem 0; padding-left: 1.25rem; } .linkml-viewer__markdown--compact li { margin: 0.125rem 0; } /* Tag Lists (Slots, Mappings) */ .linkml-viewer__slots-list, .linkml-viewer__mappings { margin-top: 0.75rem; } .linkml-viewer__tag-list { display: flex; flex-wrap: wrap; gap: 0.375rem; margin-top: 0.25rem; } .linkml-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; } .linkml-viewer__tag--mapping { background: var(--success-light, #e8f5e9); border-color: var(--success-color, #4caf50); color: var(--success-dark, #2e7d32); } .linkml-viewer__tag--close { background: var(--info-light, #e3f2fd); border-color: var(--info-color, #2196f3); color: var(--info-dark, #1565c0); } /* Enum Values */ .linkml-viewer__enum-values { margin-top: 0.75rem; } /* Enum Range Toggle Button */ .linkml-viewer__range-enum-toggle { display: inline-flex; align-items: center; gap: 0.5rem; background: var(--surface-secondary, #f5f5f5); border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; padding: 0.25rem 0.5rem; cursor: pointer; transition: all 0.2s; } .linkml-viewer__range-enum-toggle:hover { background: var(--primary-light, #e3f2fd); border-color: var(--primary-color, #1976d2); } .linkml-viewer__range-enum-toggle--expanded { background: var(--primary-light, #e3f2fd); border-color: var(--primary-color, #1976d2); } .linkml-viewer__range-enum-icon { font-size: 0.625rem; color: var(--text-secondary, #757575); } .linkml-viewer__range-enum-toggle code { background: none; padding: 0; } /* Enum Badge */ .linkml-viewer__badge--enum { background: #f3e5f5; color: #9333EA; } /* Enum Loading */ .linkml-viewer__enum-loading { padding: 0.5rem; color: var(--text-secondary, #757575); font-size: 0.8125rem; font-style: italic; } /* Range Enum Values (expanded section) */ .linkml-viewer__range-enum-values { margin-top: 0.75rem; padding: 0.75rem; background: var(--surface-secondary, #f5f5f5); border: 1px solid var(--border-color, #e0e0e0); border-radius: 6px; border-left: 3px solid #9333EA; } .linkml-viewer__range-enum-header { margin-bottom: 0.5rem; } .linkml-viewer__range-enum-count { font-size: 0.75rem; font-weight: 600; color: #9333EA; text-transform: uppercase; letter-spacing: 0.5px; } .linkml-viewer__range-enum-list { display: flex; flex-direction: column; gap: 0.375rem; max-height: 400px; overflow-y: auto; } .linkml-viewer__range-enum-item { display: flex; align-items: flex-start; gap: 0.5rem; padding: 0.375rem 0.5rem; background: white; border-radius: 4px; font-size: 0.8125rem; } .linkml-viewer__range-enum-name { font-weight: 600; color: var(--primary-color, #1976d2); flex-shrink: 0; } .linkml-viewer__range-enum-link { font-size: 0.75rem; text-decoration: none; flex-shrink: 0; } .linkml-viewer__range-enum-link:hover { text-decoration: underline; } .linkml-viewer__range-enum-desc { color: var(--text-secondary, #616161); flex: 1; font-size: 0.75rem; } .linkml-viewer__range-enum-more { padding: 0.5rem; text-align: center; font-size: 0.75rem; color: var(--text-secondary, #757575); font-style: italic; background: white; border-radius: 4px; } /* Enum Search/Filter */ .linkml-viewer__range-enum-search { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; position: relative; } .linkml-viewer__range-enum-search-input { flex: 1; padding: 0.5rem 0.75rem; padding-right: 2rem; font-size: 0.8125rem; border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; background: white; color: var(--text-primary, #212121); transition: border-color 0.2s, box-shadow 0.2s; } .linkml-viewer__range-enum-search-input:focus { outline: none; border-color: #9333EA; box-shadow: 0 0 0 2px rgba(147, 51, 234, 0.15); } .linkml-viewer__range-enum-search-input::placeholder { color: var(--text-tertiary, #9e9e9e); } .linkml-viewer__range-enum-search-clear { position: absolute; right: 0.5rem; display: flex; align-items: center; justify-content: center; width: 1.25rem; height: 1.25rem; background: var(--text-tertiary, #9e9e9e); border: none; border-radius: 50%; cursor: pointer; font-size: 0.625rem; color: white; transition: background 0.2s; } .linkml-viewer__range-enum-search-clear:hover { background: var(--text-secondary, #757575); } /* Enum Show All/Less Toggle */ .linkml-viewer__range-enum-toggle-all { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.375rem 0.75rem; margin-top: 0.5rem; background: white; border: 1px solid #9333EA; border-radius: 4px; cursor: pointer; font-size: 0.75rem; font-weight: 500; color: #9333EA; transition: all 0.2s; } .linkml-viewer__range-enum-toggle-all:hover { background: #f3e5f5; } /* Enum No Results */ .linkml-viewer__range-enum-no-results { padding: 1rem; text-align: center; font-size: 0.8125rem; color: var(--text-secondary, #757575); font-style: italic; background: white; border-radius: 4px; } .linkml-viewer__value-list { margin-top: 0.5rem; display: flex; flex-direction: column; gap: 0.5rem; } .linkml-viewer__value-item { padding: 0.5rem; background: var(--surface-secondary, #f5f5f5); border-radius: 4px; font-size: 0.8125rem; display: flex; flex-direction: column; gap: 0.25rem; } .linkml-viewer__value-name { font-weight: 600; color: var(--primary-color, #1976d2); } .linkml-viewer__value-desc { color: var(--text-secondary, #616161); } .linkml-viewer__value-meaning { font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); } /* Prefix List */ .linkml-viewer__prefix-list { margin-top: 0.75rem; padding: 0.75rem; background: var(--surface-secondary, #f5f5f5); border-radius: 4px; } .linkml-viewer__prefix-item { display: flex; gap: 0.5rem; padding: 0.25rem 0; font-size: 0.8125rem; } .linkml-viewer__prefix-name { font-weight: 600; color: var(--primary-color, #1976d2); min-width: 100px; } .linkml-viewer__prefix-uri { color: var(--text-secondary, #616161); word-break: break-all; } /* Import List */ .linkml-viewer__import-list { margin-top: 0.75rem; padding: 0.75rem; background: var(--surface-secondary, #f5f5f5); border-radius: 4px; } .linkml-viewer__import-item { padding: 0.25rem 0; font-size: 0.8125rem; } .linkml-viewer__import-item code { color: var(--primary-color, #1976d2); } /* Raw YAML View */ .linkml-viewer__raw { height: 100%; overflow: auto; } .linkml-viewer__raw-header { display: flex; justify-content: flex-end; padding: 0.5rem 1rem; background: var(--surface-secondary, #f5f5f5); border-radius: 4px 4px 0 0; border-bottom: 1px solid var(--border-color, #e0e0e0); } .linkml-viewer__copy-btn { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.375rem 0.75rem; background: var(--primary-color, #1976d2); color: white; border: none; border-radius: 4px; font-size: 0.8125rem; font-weight: 500; cursor: pointer; transition: background-color 0.2s ease, transform 0.1s ease; } .linkml-viewer__copy-btn:hover { background: var(--primary-hover, #1565c0); } .linkml-viewer__copy-btn:active { transform: scale(0.98); } .linkml-viewer__copy-btn--copied { background: #2e7d32; } .linkml-viewer__copy-btn--copied:hover { background: #2e7d32; } .linkml-viewer__yaml { margin: 0; padding: 1rem; background: var(--surface-secondary, #f5f5f5); border-radius: 0 0 4px 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) { .linkml-viewer-page { grid-template-columns: 260px 1fr; gap: 1rem; padding: 1rem; } } @media (max-width: 768px) { .linkml-viewer-page { grid-template-columns: 1fr; height: auto; } .linkml-viewer-page__sidebar { order: 2; padding-right: 0; } .linkml-viewer-page__main { order: 1; } .linkml-viewer-page__header { flex-direction: column; align-items: flex-start; gap: 1rem; } .linkml-viewer-page__tabs { width: 100%; } .linkml-viewer-page__tab { flex: 1; text-align: center; } .linkml-viewer-page__file-list { max-height: 200px; } } /* ========================================================================== Dark Mode Support - Flat Selectors for Browser Compatibility ========================================================================== */ [data-theme="dark"] .linkml-viewer-page { background: var(--background-color, #121212); } /* Dark mode sidebar title */ [data-theme="dark"] .linkml-viewer-page__sidebar-title { color: var(--text-primary, #f0f0f0); border-bottom-color: var(--primary-color, #64b5f6); } /* Dark mode sidebar search */ [data-theme="dark"] .linkml-viewer-page__sidebar-search-input { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer-page__sidebar-search-input:focus { border-color: var(--primary-color, #1976d2); box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.25); } [data-theme="dark"] .linkml-viewer-page__sidebar-search-input::placeholder { color: var(--text-tertiary, #666666); } [data-theme="dark"] .linkml-viewer-page__sidebar-search-clear { background: var(--text-tertiary, #666666); } [data-theme="dark"] .linkml-viewer-page__sidebar-search-clear:hover { background: var(--text-secondary, #999999); } /* Dark mode category filters */ [data-theme="dark"] .linkml-viewer-page__sidebar-filters { border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer-page__filter-label--main { background: rgba(46, 125, 50, 0.2); color: #81c784; } [data-theme="dark"] .linkml-viewer-page__filter-label--class { background: rgba(21, 101, 192, 0.2); color: #64b5f6; } [data-theme="dark"] .linkml-viewer-page__filter-label--enum { background: rgba(123, 31, 162, 0.2); color: #ce93d8; } [data-theme="dark"] .linkml-viewer-page__filter-label--slot { background: rgba(230, 81, 0, 0.2); color: #ffb74d; } /* Category sections */ [data-theme="dark"] .linkml-viewer-page__category { border-bottom-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer-page__category-title { color: var(--text-secondary, #d0d0d0); } [data-theme="dark"] .linkml-viewer-page__category-count { color: var(--text-tertiary, #808080); } [data-theme="dark"] .linkml-viewer-page__no-results { color: var(--text-secondary, #d0d0d0); } [data-theme="dark"] .linkml-viewer-page__content { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer-page__file-item { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer-page__file-item:hover { background: var(--primary-dark, #0d47a1); } [data-theme="dark"] .linkml-viewer-page__file-item--active { background: var(--primary-color, #1976d2); } [data-theme="dark"] .linkml-viewer__item { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__item--filtered-out { background: var(--surface-secondary, #151515); opacity: 0.4; } [data-theme="dark"] .linkml-viewer__item--filtered-out:hover { opacity: 0.6; } [data-theme="dark"] .linkml-viewer__section-header { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer__yaml { background: var(--surface-secondary, #2a2a2a); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer__raw-header { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__tag { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__value-item { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__prefix-list { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__import-list { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } /* Dark mode markdown styles */ [data-theme="dark"] .linkml-viewer__markdown { color: var(--text-secondary, #d0d0d0); } [data-theme="dark"] .linkml-viewer__markdown h1, [data-theme="dark"] .linkml-viewer__markdown h2, [data-theme="dark"] .linkml-viewer__markdown h3, [data-theme="dark"] .linkml-viewer__markdown h4, [data-theme="dark"] .linkml-viewer__markdown h5, [data-theme="dark"] .linkml-viewer__markdown h6, [data-theme="dark"] .linkml-viewer__markdown strong { color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer__markdown code { background: var(--surface-secondary, #2a2a2a); color: var(--primary-light, #64b5f6); } [data-theme="dark"] .linkml-viewer__markdown pre { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__markdown pre code { color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer__markdown blockquote { background: rgba(25, 118, 210, 0.15); border-left-color: var(--primary-color, #1976d2); } [data-theme="dark"] .linkml-viewer__markdown th { background: var(--surface-secondary, #2a2a2a); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer__markdown tr:nth-child(even) { background: rgba(255, 255, 255, 0.05); } [data-theme="dark"] .linkml-viewer__markdown th, [data-theme="dark"] .linkml-viewer__markdown td { border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__markdown a { color: var(--primary-light, #64b5f6); } /* Dark mode enum range styles */ [data-theme="dark"] .linkml-viewer__range-enum-toggle { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__range-enum-toggle:hover, [data-theme="dark"] .linkml-viewer__range-enum-toggle--expanded { background: rgba(147, 51, 234, 0.15); border-color: #9333EA; } [data-theme="dark"] .linkml-viewer__range-enum-values { background: var(--surface-secondary, #2a2a2a); border-color: var(--border-color, #404040); } [data-theme="dark"] .linkml-viewer__range-enum-item { background: var(--surface-color, #1e1e1e); } [data-theme="dark"] .linkml-viewer__range-enum-more { background: var(--surface-color, #1e1e1e); } /* Dark mode enum search/filter */ [data-theme="dark"] .linkml-viewer__range-enum-search-input { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); color: var(--text-primary, #f0f0f0); } [data-theme="dark"] .linkml-viewer__range-enum-search-input:focus { border-color: #9333EA; box-shadow: 0 0 0 2px rgba(147, 51, 234, 0.25); } [data-theme="dark"] .linkml-viewer__range-enum-search-input::placeholder { color: var(--text-tertiary, #666666); } [data-theme="dark"] .linkml-viewer__range-enum-search-clear { background: var(--text-tertiary, #666666); } [data-theme="dark"] .linkml-viewer__range-enum-search-clear:hover { background: var(--text-secondary, #999999); } [data-theme="dark"] .linkml-viewer__range-enum-toggle-all { background: var(--surface-color, #1e1e1e); border-color: #9333EA; color: #bb86fc; } [data-theme="dark"] .linkml-viewer__range-enum-toggle-all:hover { background: rgba(147, 51, 234, 0.15); } [data-theme="dark"] .linkml-viewer__range-enum-no-results { background: var(--surface-color, #1e1e1e); color: var(--text-secondary, #d0d0d0); } /* Dark mode sticky subheader */ [data-theme="dark"] .linkml-viewer-page__subheader { background: var(--background-color, #121212); border-bottom-color: var(--border-color, #404040); } /* Dark mode tabs */ [data-theme="dark"] .linkml-viewer-page__tab { background: var(--surface-color, #1e1e1e); border-color: var(--border-color, #404040); color: var(--text-secondary, #b0b0b0); } [data-theme="dark"] .linkml-viewer-page__tab:hover { border-color: var(--primary-color, #64b5f6); color: var(--primary-color, #64b5f6); } [data-theme="dark"] .linkml-viewer-page__tab--active { background: var(--primary-color, #1976d2); color: white; border-color: var(--primary-color, #1976d2); } [data-theme="dark"] .linkml-viewer-page__tab-separator { color: var(--border-color, #404040); } /* ========================================================================== Mobile Light Mode Override Force light mode on mobile regardless of system color scheme preference ========================================================================== */ @media (max-width: 900px) { .linkml-viewer-page { background: #fafafa !important; } .linkml-viewer-page__content { background: #ffffff !important; border-color: #e0e0e0 !important; } .linkml-viewer-page__sidebar-search-input { background: #ffffff !important; border-color: #e0e0e0 !important; color: #212121 !important; } .linkml-viewer-page__sidebar-search-input:focus { border-color: #1976d2 !important; } .linkml-viewer-page__file-item { background: #ffffff !important; border-color: #e0e0e0 !important; color: #212121 !important; } .linkml-viewer-page__file-item:hover { background: #e3f2fd !important; } .linkml-viewer-page__file-item--active { background: #1976d2 !important; color: #ffffff !important; } .linkml-viewer__item { background: #ffffff !important; border-color: #e0e0e0 !important; } .linkml-viewer__section-header { background: #f5f5f5 !important; border-color: #e0e0e0 !important; color: #212121 !important; } .linkml-viewer__yaml { background: #f5f5f5 !important; color: #212121 !important; } .linkml-viewer__markdown { color: #212121 !important; } .linkml-viewer__markdown code { background: #f5f5f5 !important; color: #212121 !important; } .linkml-viewer__markdown pre { background: #f5f5f5 !important; } .linkml-viewer__markdown blockquote { border-left-color: #e0e0e0 !important; color: #757575 !important; } .linkml-viewer__markdown table { border-color: #e0e0e0 !important; } .linkml-viewer__markdown th { background: #f5f5f5 !important; } .linkml-viewer__markdown th, .linkml-viewer__markdown td { border-color: #e0e0e0 !important; } .linkml-viewer__markdown a { color: #1976d2 !important; } /* Enum range styles */ .linkml-viewer__range-enum-toggle { background: #f5f5f5 !important; border-color: #e0e0e0 !important; } .linkml-viewer__range-enum-values { background: #f5f5f5 !important; border-color: #e0e0e0 !important; } .linkml-viewer__range-enum-item { background: #ffffff !important; } .linkml-viewer__range-enum-more { background: #ffffff !important; } .linkml-viewer__range-enum-search-input { background: #ffffff !important; border-color: #e0e0e0 !important; color: #212121 !important; } .linkml-viewer__range-enum-toggle-all { background: #ffffff !important; color: #9333EA !important; } .linkml-viewer__range-enum-no-results { background: #ffffff !important; color: #757575 !important; } /* Sidebar filter labels - keep colorful but on light background */ .linkml-viewer-page__sidebar-filters { border-color: #e0e0e0 !important; } .linkml-viewer-page__no-results { color: #757575 !important; } /* Entry title - ensure readable on light background */ .linkml-viewer__item-name { color: #212121 !important; } } /* ============================================ EXPORTS SECTION - Reverse Dependencies UI ============================================ */ /* Container for the exports section */ .linkml-viewer__exports-section { margin-top: 0.75rem; border-top: 1px solid var(--border-color, #e0e0e0); padding-top: 0.75rem; } /* Toggle button for expanding/collapsing exports */ .linkml-viewer__exports-toggle { display: flex; align-items: center; gap: 0.5rem; background: transparent; border: none; cursor: pointer; padding: 0.25rem 0; color: var(--text-secondary, #757575); font-size: 0.8125rem; transition: color 0.2s; } .linkml-viewer__exports-toggle:hover { color: var(--primary-color, #1976d2); } .linkml-viewer__exports-toggle--expanded { color: var(--primary-color, #1976d2); } .linkml-viewer__exports-icon { font-size: 0.625rem; transition: transform 0.2s; } .linkml-viewer__exports-loading { font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; } /* Content area when expanded */ .linkml-viewer__exports-content { margin-top: 0.5rem; padding: 0.75rem; background: var(--surface-elevated, #f5f5f5); border-radius: 6px; display: flex; flex-direction: column; gap: 0.75rem; } /* Category within exports (e.g., Subclasses, Mixin Users) */ .linkml-viewer__exports-category { display: flex; flex-direction: column; gap: 0.375rem; } .linkml-viewer__exports-category-label { font-size: 0.75rem; font-weight: 600; color: var(--text-secondary, #757575); text-transform: uppercase; letter-spacing: 0.5px; } /* List of export items */ .linkml-viewer__exports-list { display: flex; flex-wrap: wrap; gap: 0.375rem; } /* Individual export item (non-clickable, e.g., slots) */ .linkml-viewer__exports-item { display: inline-flex; align-items: center; padding: 0.25rem 0.5rem; background: var(--surface-default, #ffffff); border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; font-size: 0.75rem; color: var(--text-primary, #212121); } .linkml-viewer__exports-item--slot { font-family: 'JetBrains Mono', 'Fira Code', monospace; background: rgba(139, 92, 246, 0.1); border-color: rgba(139, 92, 246, 0.3); color: #7c3aed; } /* Clickable export link (navigates to class) */ .linkml-viewer__exports-link { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.25rem 0.5rem; background: var(--surface-default, #ffffff); border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; font-size: 0.75rem; color: var(--primary-color, #1976d2); cursor: pointer; transition: all 0.2s; font-family: inherit; } .linkml-viewer__exports-link:hover { background: var(--primary-color, #1976d2); color: white; border-color: var(--primary-color, #1976d2); } /* "via slotName" annotation */ .linkml-viewer__exports-via { font-size: 0.6875rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; } .linkml-viewer__exports-link:hover .linkml-viewer__exports-via { color: rgba(255, 255, 255, 0.8); } /* Empty state message */ .linkml-viewer__exports-empty { font-size: 0.8125rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; padding: 0.5rem 0; } /* Dark mode overrides for exports */ [data-theme="dark"] .linkml-viewer__exports-section { border-color: #374151; } [data-theme="dark"] .linkml-viewer__exports-content { background: #1f2937; } [data-theme="dark"] .linkml-viewer__exports-item { background: #374151; border-color: #4b5563; color: #e5e7eb; } [data-theme="dark"] .linkml-viewer__exports-item--slot { background: rgba(139, 92, 246, 0.2); border-color: rgba(139, 92, 246, 0.4); color: #a78bfa; } [data-theme="dark"] .linkml-viewer__exports-link { background: #374151; border-color: #4b5563; color: #60a5fa; } [data-theme="dark"] .linkml-viewer__exports-link:hover { background: #3b82f6; color: white; border-color: #3b82f6; } /* Mobile overrides for exports (force light mode on mobile) */ @media (max-width: 900px) { .linkml-viewer__exports-content { background: #f5f5f5 !important; } .linkml-viewer__exports-item { background: #ffffff !important; border-color: #e0e0e0 !important; color: #212121 !important; } .linkml-viewer__exports-item--slot { background: rgba(139, 92, 246, 0.1) !important; border-color: rgba(139, 92, 246, 0.3) !important; color: #7c3aed !important; } .linkml-viewer__exports-link { background: #ffffff !important; border-color: #e0e0e0 !important; color: #1976d2 !important; } .linkml-viewer__exports-link:hover { background: #1976d2 !important; color: white !important; } } /* ============================================ UML Diagram Accordion Section ============================================ */ /* Container for the UML section */ .linkml-viewer__uml-section { margin-top: 0.75rem; border-top: 1px solid var(--border-color, #e0e0e0); padding-top: 0.75rem; } /* Toggle button for expanding/collapsing UML diagram */ .linkml-viewer__uml-toggle { display: flex; align-items: center; gap: 0.5rem; background: transparent; border: none; cursor: pointer; padding: 0.25rem 0; color: var(--text-secondary, #757575); font-size: 0.8125rem; transition: color 0.2s; } .linkml-viewer__uml-toggle:hover { color: var(--primary-color, #1976d2); } .linkml-viewer__uml-toggle--expanded { color: var(--primary-color, #1976d2); } .linkml-viewer__uml-icon { font-size: 0.625rem; transition: transform 0.2s; } .linkml-viewer__uml-loading { font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; } /* Content area when expanded */ .linkml-viewer__uml-content { margin-top: 0.5rem; padding: 0.5rem; background: var(--surface-elevated, #f5f5f5); border-radius: 6px; overflow: hidden; min-height: 400px; } /* Constrain the UML visualization size */ .linkml-viewer__uml-content .uml-visualization { max-width: 100%; height: 400px; } .linkml-viewer__uml-content .uml-visualization svg { max-width: 100%; height: 100%; } /* Empty state message */ .linkml-viewer__uml-empty { font-size: 0.8125rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; padding: 0.5rem 0; } /* Dark mode overrides for UML section */ [data-theme="dark"] .linkml-viewer__uml-section { border-color: #374151; } [data-theme="dark"] .linkml-viewer__uml-content { background: #1f2937; } /* Mobile overrides for UML section */ @media (max-width: 900px) { .linkml-viewer__uml-content { background: #f5f5f5 !important; min-height: 300px; } .linkml-viewer__uml-content .uml-visualization { height: 300px; } } /* ============================================ UML Depth Slider Controls ============================================ */ /* Container for depth control */ .linkml-viewer__uml-depth-control { display: flex; align-items: center; gap: 1rem; padding: 0.5rem 0.75rem; margin-bottom: 0.75rem; background: var(--surface-base, #ffffff); border-radius: 6px; border: 1px solid var(--border-color, #e0e0e0); } /* Label wrapper with slider */ .linkml-viewer__uml-depth-label { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8125rem; color: var(--text-secondary, #757575); } .linkml-viewer__uml-depth-label span:first-child { font-weight: 500; color: var(--text-primary, #212121); } /* Range slider styling */ .linkml-viewer__uml-depth-slider { width: 100px; height: 4px; -webkit-appearance: none; appearance: none; background: var(--border-color, #e0e0e0); border-radius: 2px; outline: none; cursor: pointer; } .linkml-viewer__uml-depth-slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--primary-color, #1976d2); cursor: pointer; transition: transform 0.15s ease, box-shadow 0.15s ease; } .linkml-viewer__uml-depth-slider::-webkit-slider-thumb:hover { transform: scale(1.1); box-shadow: 0 2px 6px rgba(25, 118, 210, 0.3); } .linkml-viewer__uml-depth-slider::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%; background: var(--primary-color, #1976d2); border: none; cursor: pointer; transition: transform 0.15s ease, box-shadow 0.15s ease; } .linkml-viewer__uml-depth-slider::-moz-range-thumb:hover { transform: scale(1.1); box-shadow: 0 2px 6px rgba(25, 118, 210, 0.3); } /* Depth value display */ .linkml-viewer__uml-depth-value { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; background: var(--primary-color, #1976d2); color: white; border-radius: 4px; font-size: 0.75rem; font-weight: 600; } /* Hint text describing depth level */ .linkml-viewer__uml-depth-hint { font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; margin-left: auto; } /* Dark mode overrides for depth slider */ [data-theme="dark"] .linkml-viewer__uml-depth-control { background: #1f2937; border-color: #374151; } [data-theme="dark"] .linkml-viewer__uml-depth-slider { background: #374151; } [data-theme="dark"] .linkml-viewer__uml-depth-label span:first-child { color: #e5e7eb; } /* Mobile overrides for depth slider */ @media (max-width: 900px) { .linkml-viewer__uml-depth-control { flex-wrap: wrap; gap: 0.5rem; } .linkml-viewer__uml-depth-hint { width: 100%; margin-left: 0; text-align: center; } }