/* 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; transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Sidebar Header with collapse toggle */ .linkml-viewer-page__sidebar-header { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; min-height: 2.5rem; } .linkml-viewer-page__sidebar-toggle { display: flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; padding: 0; background: var(--surface-color, #fff); border: 1px solid var(--border-color, #e0e0e0); border-radius: 4px; cursor: pointer; font-size: 1rem; font-weight: bold; color: var(--text-secondary, #757575); transition: all 0.2s ease; flex-shrink: 0; } .linkml-viewer-page__sidebar-toggle:hover { background: var(--primary-color, #1976d2); border-color: var(--primary-color, #1976d2); color: white; } /* Collapsed sidebar state */ .linkml-viewer-page--sidebar-collapsed { grid-template-columns: 48px 1fr; } .linkml-viewer-page__sidebar--collapsed { width: 48px; min-width: 48px; padding-right: 0; overflow: hidden; } .linkml-viewer-page__sidebar--collapsed .linkml-viewer-page__sidebar-header { justify-content: center; } .linkml-viewer-page__sidebar--collapsed .linkml-viewer-page__sidebar-title { border-bottom: none; padding-bottom: 0; margin-bottom: 0; } .linkml-viewer-page__sidebar-title { font-size: 1.25rem; font-weight: 600; color: var(--text-primary, #212121); margin: 0; flex-grow: 1; } /* 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); } /* Info icon for tooltips */ .linkml-viewer__info-icon { margin-left: 0.5rem; font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); cursor: help; opacity: 0.7; transition: opacity 0.2s, color 0.2s; position: relative; } .linkml-viewer__info-icon:hover { opacity: 1; color: var(--primary-color, #1976d2); } /* Custom tooltip for info icon (CSS-only) - appears to the right */ .linkml-viewer__info-icon::after { content: attr(data-tooltip); position: absolute; left: 100%; top: 50%; transform: translateY(-50%); margin-left: 12px; padding: 10px 14px; background: var(--text-primary, #212121); color: white; font-size: 0.8125rem; font-weight: 400; border-radius: 6px; width: 320px; white-space: normal; text-align: left; line-height: 1.5; opacity: 0; visibility: hidden; transition: opacity 0.2s, visibility 0.2s; z-index: 1000; pointer-events: none; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); } /* Tooltip arrow - points left */ .linkml-viewer__info-icon::before { content: ''; position: absolute; left: 100%; top: 50%; transform: translateY(-50%); margin-left: 0; border: 6px solid transparent; border-right-color: var(--text-primary, #212121); opacity: 0; visibility: hidden; transition: opacity 0.2s, visibility 0.2s; z-index: 1001; } .linkml-viewer__info-icon:hover::after, .linkml-viewer__info-icon:hover::before { opacity: 1; visibility: visible; } .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); } .linkml-viewer__badge--usage { background: var(--slot-usage-light, #e8f5e9); color: var(--slot-usage-color, #388e3c); font-weight: 500; } /* Visual indicator for slots with slot_usage overrides */ .linkml-viewer__item--has-usage { border-left: 3px solid var(--slot-usage-color, #388e3c); padding-left: 0.75rem; } /* Override markers - show which properties come from slot_usage */ .linkml-viewer__override-marker { display: inline-block; font-size: 0.75rem; margin-right: 0.25rem; font-weight: 600; } .linkml-viewer__override-marker--overridden { color: var(--slot-usage-color, #388e3c); cursor: help; } .linkml-viewer__override-marker--inherited { /* Inherited properties don't show any marker */ display: none; } /* Label with inline override marker */ .linkml-viewer__label--inline { display: inline; margin-right: 0; } /* ============================================ Slot Usage Legend Panel Explains ✦ symbol and green indicators ============================================ */ .linkml-viewer-page__slot-usage-legend { width: 100%; margin-top: 0.75rem; padding: 0.75rem 1rem; background: var(--slot-usage-light, #e8f5e9); border: 1px solid var(--slot-usage-color, #388e3c); border-radius: 8px; animation: slideDown 0.2s ease-out; } @keyframes slideDown { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } } .linkml-viewer-page__slot-usage-legend-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; padding-bottom: 0.5rem; border-bottom: 1px solid rgba(56, 142, 60, 0.3); } .linkml-viewer-page__slot-usage-legend-header h4 { margin: 0; font-size: 0.875rem; font-weight: 600; color: var(--slot-usage-color, #388e3c); } .linkml-viewer-page__slot-usage-legend-close { background: none; border: none; font-size: 1.25rem; color: var(--slot-usage-color, #388e3c); cursor: pointer; padding: 0 0.25rem; line-height: 1; opacity: 0.7; transition: opacity 0.2s; } .linkml-viewer-page__slot-usage-legend-close:hover { opacity: 1; } .linkml-viewer-page__slot-usage-legend-content { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 0.5rem 1.5rem; } .linkml-viewer-page__slot-usage-legend-item { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8125rem; color: var(--text-color, #333); } .linkml-viewer-page__slot-usage-legend-item--info { font-style: italic; color: var(--text-secondary, #666); } .linkml-viewer-page__slot-usage-legend-marker { display: inline-flex; align-items: center; justify-content: center; width: 1.5rem; font-size: 0.875rem; font-weight: 600; color: var(--slot-usage-color, #388e3c); } .linkml-viewer-page__slot-usage-legend-border-demo { display: inline-block; width: 1.5rem; height: 1.25rem; border-left: 3px solid var(--slot-usage-color, #388e3c); background: white; border-radius: 2px; } /* Tab separator between 3D toggle and Legend button */ .linkml-viewer-page__tab-separator { color: var(--border-color, #e0e0e0); margin: 0 0.25rem; user-select: none; } /* Legend tab button styling */ .linkml-viewer-page__tab--legend { font-size: 0.75rem; } /* ============================================ Slot Usage Comparison View Side-by-side generic vs override comparison ============================================ */ /* Compare button badge */ .linkml-viewer__badge--compare { background: transparent; border: 1px solid var(--slot-usage-color, #388e3c); color: var(--slot-usage-color, #388e3c); cursor: pointer; padding: 0.125rem 0.375rem; font-size: 0.6875rem; border-radius: 4px; transition: all 0.2s ease; font-weight: 500; } .linkml-viewer__badge--compare:hover { background: var(--slot-usage-light, #e8f5e9); } .linkml-viewer__badge--compare-active { background: var(--slot-usage-color, #388e3c); color: white; } .linkml-viewer__badge--compare-active:hover { background: #2e7d32; } /* Comparison panel container */ .linkml-viewer__slot-comparison { margin-top: 1rem; border: 1px solid var(--slot-usage-color, #388e3c); border-radius: 8px; overflow: hidden; background: white; animation: slideDown 0.2s ease-out; } /* Comparison header with two columns */ .linkml-viewer__slot-comparison-header { display: grid; grid-template-columns: 120px 1fr 1fr; gap: 0.5rem; padding: 0.5rem 0.75rem; background: var(--slot-usage-light, #e8f5e9); border-bottom: 1px solid var(--slot-usage-color, #388e3c); font-weight: 600; font-size: 0.8125rem; color: var(--slot-usage-color, #388e3c); } .linkml-viewer__slot-comparison-header h5 { margin: 0; font-size: 0.8125rem; } .linkml-viewer__slot-comparison-header h5:first-of-type { /* Empty first column for property name */ } /* Comparison content rows */ .linkml-viewer__slot-comparison-content { padding: 0.25rem 0; } .linkml-viewer__slot-comparison-row { display: grid; grid-template-columns: 120px 1fr 1fr; gap: 0.5rem; padding: 0.375rem 0.75rem; font-size: 0.8125rem; border-bottom: 1px solid var(--border-color, #e0e0e0); align-items: start; } .linkml-viewer__slot-comparison-row:last-child { border-bottom: none; } .linkml-viewer__slot-comparison-row--changed { background: rgba(56, 142, 60, 0.05); } /* Property label column */ .linkml-viewer__slot-comparison-label { font-weight: 500; color: var(--text-secondary, #666); font-size: 0.75rem; } /* Generic value column */ .linkml-viewer__slot-comparison-generic { word-break: break-word; } .linkml-viewer__slot-comparison-generic code, .linkml-viewer__slot-comparison-override code { background: var(--surface-secondary, #f5f5f5); padding: 0.125rem 0.375rem; border-radius: 3px; font-family: 'Monaco', 'Menlo', monospace; font-size: 0.6875rem; display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; } /* Override value column */ .linkml-viewer__slot-comparison-override { word-break: break-word; display: flex; align-items: flex-start; gap: 0.375rem; flex-wrap: wrap; } .linkml-viewer__slot-comparison-override--diff code { background: var(--slot-usage-light, #e8f5e9); border: 1px solid var(--slot-usage-color, #388e3c); } /* Diff badge */ .linkml-viewer__slot-comparison-diff-badge { font-size: 0.625rem; font-weight: 600; text-transform: uppercase; background: var(--slot-usage-color, #388e3c); color: white; padding: 0.125rem 0.25rem; border-radius: 3px; white-space: nowrap; } /* Empty/inherited states */ .linkml-viewer__slot-comparison-empty, .linkml-viewer__slot-comparison-inherited { font-style: italic; color: var(--text-tertiary, #999); font-size: 0.75rem; } /* Responsive - stack on small screens */ @media (max-width: 640px) { .linkml-viewer__slot-comparison-header, .linkml-viewer__slot-comparison-row { grid-template-columns: 1fr; gap: 0.25rem; } .linkml-viewer__slot-comparison-header h5:first-of-type { display: none; } .linkml-viewer__slot-comparison-generic, .linkml-viewer__slot-comparison-override { padding-left: 0.5rem; border-left: 2px solid var(--border-color, #e0e0e0); } .linkml-viewer__slot-comparison-override--diff { border-left-color: var(--slot-usage-color, #388e3c); } } /* 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); } /* Additional mapping type styles for SKOS semantic mappings */ .linkml-viewer__tag--exact { background: var(--success-light, #e8f5e9); border-color: var(--success-color, #4caf50); color: var(--success-dark, #2e7d32); } .linkml-viewer__tag--narrow { background: #fff3e0; border-color: #ff9800; color: #e65100; } .linkml-viewer__tag--broad { background: #fce4ec; border-color: #e91e63; color: #ad1457; } .linkml-viewer__tag--related { background: #f3e5f5; border-color: #9c27b0; color: #6a1b9a; } /* Identifier badge */ .linkml-viewer__badge--identifier { background: var(--primary-color, #1976d2); color: white; } /* Slot URI display */ .linkml-viewer__slot-uri { margin: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem; } .linkml-viewer__uri-value { background: var(--surface-secondary, #f5f5f5); padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.875rem; color: var(--primary-color, #1976d2); } /* Examples section */ .linkml-viewer__examples { margin: 0.75rem 0; } .linkml-viewer__examples-list { list-style: none; padding: 0; margin: 0.5rem 0 0 0; } .linkml-viewer__example-item { padding: 0.375rem 0.5rem; margin: 0.25rem 0; background: var(--surface-secondary, #f5f5f5); border-radius: 4px; border-left: 3px solid var(--primary-color, #1976d2); } .linkml-viewer__example-value { background: white; padding: 0.125rem 0.375rem; border-radius: 3px; font-weight: 500; color: var(--primary-dark, #0d47a1); } .linkml-viewer__example-description { color: var(--text-secondary, #616161); font-size: 0.875rem; } /* Comments section */ .linkml-viewer__comments { margin: 0.75rem 0; } .linkml-viewer__comments-list { list-style: none; padding: 0; margin: 0.5rem 0 0 0; } .linkml-viewer__comment-item { padding: 0.5rem; margin: 0.25rem 0; background: var(--warning-light, #fff8e1); border-radius: 4px; border-left: 3px solid var(--warning-color, #ffc107); color: var(--text-primary, #212121); font-size: 0.875rem; font-style: italic; } /* Dark mode support for new slot elements */ [data-theme="dark"] .linkml-viewer__uri-value { background: #374151; color: #60a5fa; } [data-theme="dark"] .linkml-viewer__example-item { background: #374151; border-left-color: #60a5fa; } [data-theme="dark"] .linkml-viewer__example-value { background: #1f2937; color: #93c5fd; } [data-theme="dark"] .linkml-viewer__example-description { color: #9ca3af; } [data-theme="dark"] .linkml-viewer__comment-item { background: #422006; border-left-color: #f59e0b; color: #fcd34d; } [data-theme="dark"] .linkml-viewer__tag--exact { background: #064e3b; border-color: #10b981; color: #6ee7b7; } [data-theme="dark"] .linkml-viewer__tag--narrow { background: #451a03; border-color: #f59e0b; color: #fcd34d; } [data-theme="dark"] .linkml-viewer__tag--broad { background: #500724; border-color: #ec4899; color: #f9a8d4; } [data-theme="dark"] .linkml-viewer__tag--related { background: #4a044e; border-color: #a855f7; color: #d8b4fe; } [data-theme="dark"] .linkml-viewer__badge--identifier { background: #2563eb; color: white; } /* 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; } } /* ============================================ IMPORTS SECTION - Forward Dependencies UI Shows what a class depends on (parent, mixins, slot ranges) ============================================ */ /* Container for the imports section */ .linkml-viewer__imports-section { margin-top: 0.75rem; border-top: 1px solid var(--border-color, #e0e0e0); padding-top: 0.75rem; } /* Toggle button for expanding/collapsing imports */ .linkml-viewer__imports-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__imports-toggle:hover { color: var(--secondary-color, #2e7d32); } .linkml-viewer__imports-toggle--expanded { color: var(--secondary-color, #2e7d32); } .linkml-viewer__imports-icon { font-size: 0.625rem; transition: transform 0.2s; } .linkml-viewer__imports-loading { font-size: 0.75rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; } /* Count badge showing total number of imports */ .linkml-viewer__imports-count { display: inline-flex; align-items: center; justify-content: center; min-width: 1.25rem; height: 1.25rem; padding: 0 0.375rem; background: var(--secondary-color, #2e7d32); color: white; border-radius: 10px; font-size: 0.6875rem; font-weight: 600; margin-left: 0.5rem; } /* Content area when expanded */ .linkml-viewer__imports-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 imports (e.g., Parent Class, Mixins) */ .linkml-viewer__imports-category { display: flex; flex-direction: column; gap: 0.375rem; } .linkml-viewer__imports-category-label { font-size: 0.75rem; font-weight: 600; color: var(--text-secondary, #757575); text-transform: uppercase; letter-spacing: 0.5px; } /* List of import items */ .linkml-viewer__imports-list { display: flex; flex-wrap: wrap; gap: 0.375rem; } /* Clickable import link (navigates to class) */ .linkml-viewer__imports-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(--secondary-color, #2e7d32); cursor: pointer; transition: all 0.2s; font-family: inherit; } .linkml-viewer__imports-link:hover { background: var(--secondary-color, #2e7d32); color: white; border-color: var(--secondary-color, #2e7d32); } /* "via slotName" annotation */ .linkml-viewer__imports-via { font-size: 0.6875rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; } .linkml-viewer__imports-link:hover .linkml-viewer__imports-via { color: rgba(255, 255, 255, 0.8); } /* Badge for enum types */ .linkml-viewer__imports-badge { font-size: 0.625rem; padding: 0.125rem 0.25rem; border-radius: 3px; margin-left: 0.25rem; font-weight: 500; } .linkml-viewer__imports-badge--enum { background: rgba(245, 158, 11, 0.2); color: #d97706; } /* Empty state message */ .linkml-viewer__imports-empty { font-size: 0.8125rem; color: var(--text-tertiary, #9e9e9e); font-style: italic; padding: 0.5rem 0; } /* Dark mode overrides for imports */ [data-theme="dark"] .linkml-viewer__imports-section { border-color: #374151; } [data-theme="dark"] .linkml-viewer__imports-content { background: #1f2937; } [data-theme="dark"] .linkml-viewer__imports-link { background: #374151; border-color: #4b5563; color: #4ade80; } [data-theme="dark"] .linkml-viewer__imports-link:hover { background: #22c55e; color: white; border-color: #22c55e; } [data-theme="dark"] .linkml-viewer__imports-badge--enum { background: rgba(245, 158, 11, 0.3); color: #fbbf24; } /* Mobile overrides for imports (force light mode on mobile) */ @media (max-width: 900px) { .linkml-viewer__imports-content { background: #f5f5f5 !important; } .linkml-viewer__imports-link { background: #ffffff !important; border-color: #e0e0e0 !important; color: #2e7d32 !important; } .linkml-viewer__imports-link:hover { background: #2e7d32 !important; color: white !important; } } /* ============================================ CLASS SLOTS SECTION - Per-class slot details accordion ============================================ */ /* Container for the class slots section */ .linkml-viewer__class-slots-section { margin-top: 0.75rem; border-top: 1px solid var(--border-color, #e0e0e0); padding-top: 0.75rem; } /* Toggle button for expanding/collapsing class slots */ .linkml-viewer__class-slots-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__class-slots-toggle:hover { color: var(--accent-color, #7c3aed); } .linkml-viewer__class-slots-toggle--expanded { color: var(--accent-color, #7c3aed); } .linkml-viewer__class-slots-icon { font-size: 0.625rem; transition: transform 0.2s; } /* Count badge showing total number of slots */ .linkml-viewer__class-slots-count { display: inline-flex; align-items: center; justify-content: center; min-width: 1.25rem; height: 1.25rem; padding: 0 0.375rem; background: var(--accent-color, #7c3aed); color: white; border-radius: 10px; font-size: 0.6875rem; font-weight: 600; margin-left: 0.5rem; } /* Content area when expanded */ .linkml-viewer__class-slots-content { margin-top: 0.5rem; padding: 0.75rem; background: var(--surface-elevated, #f5f5f5); border-radius: 6px; display: flex; flex-direction: column; gap: 0.75rem; } /* Slot items within the accordion - add some distinction */ .linkml-viewer__class-slots-content .linkml-viewer__item { background: var(--surface-default, #ffffff); border: 1px solid var(--border-color, #e0e0e0); border-radius: 6px; padding: 0.75rem; border-left: 3px solid var(--accent-color, #7c3aed); } /* Fallback slot item when definition not found */ .linkml-viewer__item--slot-fallback { background: var(--surface-default, #ffffff); border: 1px dashed var(--border-color, #e0e0e0); border-radius: 6px; padding: 0.75rem; opacity: 0.7; } /* Dark mode overrides for class slots */ [data-theme="dark"] .linkml-viewer__class-slots-section { border-color: #374151; } [data-theme="dark"] .linkml-viewer__class-slots-toggle { color: #9ca3af; } [data-theme="dark"] .linkml-viewer__class-slots-toggle:hover, [data-theme="dark"] .linkml-viewer__class-slots-toggle--expanded { color: #a78bfa; } [data-theme="dark"] .linkml-viewer__class-slots-count { background: #7c3aed; } [data-theme="dark"] .linkml-viewer__class-slots-content { background: #1f2937; } [data-theme="dark"] .linkml-viewer__class-slots-content .linkml-viewer__item { background: #111827; border-color: #374151; border-left-color: #7c3aed; } [data-theme="dark"] .linkml-viewer__item--slot-fallback { background: #111827; border-color: #374151; } /* Print mode for class slots */ @media print { .linkml-viewer__class-slots-section { break-inside: avoid; border-color: #e0e0e0 !important; } .linkml-viewer__class-slots-content { background: #f9f9f9 !important; } .linkml-viewer__class-slots-content .linkml-viewer__item { background: white !important; border-color: #e0e0e0 !important; border-left-color: #7c3aed !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; } /* Count badge showing total number of exports */ .linkml-viewer__exports-count { display: inline-flex; align-items: center; justify-content: center; min-width: 1.25rem; height: 1.25rem; padding: 0 0.375rem; background: var(--primary-color, #1565c0); color: white; border-radius: 10px; font-size: 0.6875rem; font-weight: 600; margin-left: 0.5rem; } /* 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: auto; /* Remove fixed height - let container control size via inline styles */ } /* UML visualization sizing - use 100% to respect container dimensions */ .linkml-viewer__uml-content .uml-visualization { width: 100%; height: 100%; } .linkml-viewer__uml-content .uml-visualization svg { 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; /* Allow smaller heights on mobile via inline styles */ } } /* ============================================ 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; } } /* ============================================ UML Direction Toggles (Imports/Exports) ============================================ */ /* Container for direction toggles */ .linkml-viewer__uml-direction-control { display: flex; align-items: center; gap: 1.5rem; padding: 0.5rem 0.75rem; margin-bottom: 0.5rem; background: var(--surface-base, #ffffff); border-radius: 6px; border: 1px solid var(--border-color, #e0e0e0); } /* Checkbox label wrapper */ .linkml-viewer__uml-checkbox-label { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8125rem; color: var(--text-primary, #212121); cursor: pointer; user-select: none; transition: color 0.2s; } .linkml-viewer__uml-checkbox-label:hover { color: var(--primary-color, #1976d2); } /* Checkbox styling */ .linkml-viewer__uml-checkbox { width: 16px; height: 16px; accent-color: var(--primary-color, #1976d2); cursor: pointer; } /* Checkbox text */ .linkml-viewer__uml-checkbox-label span { font-weight: 500; } /* First checkbox (Imports) uses green accent */ .linkml-viewer__uml-checkbox-label:first-child .linkml-viewer__uml-checkbox { accent-color: var(--secondary-color, #2e7d32); } .linkml-viewer__uml-checkbox-label:first-child:hover { color: var(--secondary-color, #2e7d32); } /* Explicit imports checkbox styling (green) */ .linkml-viewer__uml-checkbox-label--imports .linkml-viewer__uml-checkbox--imports { accent-color: var(--secondary-color, #2e7d32); } .linkml-viewer__uml-checkbox-label--imports:hover { color: var(--secondary-color, #2e7d32); } .linkml-viewer__uml-checkbox-label--imports span { color: inherit; } .linkml-viewer__uml-checkbox-label--imports .linkml-viewer__uml-checkbox--imports:checked + span { color: var(--secondary-color, #2e7d32); font-weight: 600; } /* Explicit exports checkbox styling (blue) */ .linkml-viewer__uml-checkbox-label--exports .linkml-viewer__uml-checkbox--exports { accent-color: var(--primary-color, #1976d2); } .linkml-viewer__uml-checkbox-label--exports:hover { color: var(--primary-color, #1976d2); } .linkml-viewer__uml-checkbox-label--exports span { color: inherit; } .linkml-viewer__uml-checkbox-label--exports .linkml-viewer__uml-checkbox--exports:checked + span { color: var(--primary-color, #1976d2); font-weight: 600; } /* Empty state when both toggles are unchecked */ .linkml-viewer__uml-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2rem 1rem; background: var(--surface-dim, #f5f5f5); border-radius: 8px; border: 2px dashed var(--border-color, #ccc); text-align: center; min-height: 200px; } .linkml-viewer__uml-empty-icon { font-size: 2.5rem; margin-bottom: 0.75rem; opacity: 0.6; } .linkml-viewer__uml-empty-state p { color: var(--text-secondary, #666); font-size: 0.875rem; margin: 0; line-height: 1.5; max-width: 280px; } /* Dark mode overrides for direction toggles */ [data-theme="dark"] .linkml-viewer__uml-direction-control { background: #1f2937; border-color: #374151; } [data-theme="dark"] .linkml-viewer__uml-checkbox-label { color: #e5e7eb; } [data-theme="dark"] .linkml-viewer__uml-checkbox-label:hover { color: #60a5fa; } [data-theme="dark"] .linkml-viewer__uml-checkbox-label:first-child:hover { color: #4ade80; } /* Dark mode: explicit checkbox color overrides */ [data-theme="dark"] .linkml-viewer__uml-checkbox-label--imports:hover { color: #4ade80; } [data-theme="dark"] .linkml-viewer__uml-checkbox-label--imports .linkml-viewer__uml-checkbox--imports:checked + span { color: #4ade80; } [data-theme="dark"] .linkml-viewer__uml-checkbox-label--exports:hover { color: #60a5fa; } [data-theme="dark"] .linkml-viewer__uml-checkbox-label--exports .linkml-viewer__uml-checkbox--exports:checked + span { color: #60a5fa; } /* Dark mode: empty state */ [data-theme="dark"] .linkml-viewer__uml-empty-state { background: #1f2937; border-color: #4b5563; } [data-theme="dark"] .linkml-viewer__uml-empty-state p { color: #9ca3af; } /* Mobile overrides for direction toggles */ @media (max-width: 900px) { .linkml-viewer__uml-direction-control { flex-wrap: wrap; gap: 0.75rem; background: #ffffff !important; border-color: #e0e0e0 !important; } .linkml-viewer__uml-checkbox-label { color: #212121 !important; } } /* ======================================== UML Toolbar Styles ======================================== */ .linkml-viewer__uml-toolbar { display: flex; align-items: center; gap: 0.25rem; padding: 0.5rem; background: var(--surface-color, #ffffff); border: 1px solid var(--border-color, #e0e0e0); border-radius: 8px; margin-bottom: 0.75rem; flex-wrap: wrap; } .linkml-viewer__uml-toolbar-btn { display: flex; align-items: center; gap: 0.25rem; padding: 0.375rem 0.5rem; background: transparent; border: 1px solid transparent; border-radius: 6px; color: var(--text-secondary, #666); font-size: 0.75rem; font-weight: 500; cursor: pointer; transition: all 0.15s ease; white-space: nowrap; } .linkml-viewer__uml-toolbar-btn:hover { background: var(--surface-hover, #f5f5f5); color: var(--text-primary, #212121); border-color: var(--border-color, #e0e0e0); } .linkml-viewer__uml-toolbar-btn:active { background: var(--surface-active, #eeeeee); transform: scale(0.98); } .linkml-viewer__uml-toolbar-btn--active { background: var(--primary-light, #e3f2fd); color: var(--primary-color, #1976d2); border-color: var(--primary-color, #1976d2); } .linkml-viewer__uml-toolbar-btn svg { flex-shrink: 0; } .linkml-viewer__uml-toolbar-separator { width: 1px; height: 24px; background: var(--border-color, #e0e0e0); margin: 0 0.25rem; } /* Layout Dropdown */ .linkml-viewer__uml-layout-dropdown { position: relative; } .linkml-viewer__uml-layout-menu { position: absolute; top: 100%; left: 0; margin-top: 0.25rem; background: var(--surface-color, #ffffff); border: 1px solid var(--border-color, #e0e0e0); border-radius: 8px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); min-width: 220px; z-index: 1000; overflow: hidden; } .linkml-viewer__uml-layout-option { display: flex; flex-direction: column; align-items: flex-start; width: 100%; padding: 0.625rem 0.75rem; background: transparent; border: none; cursor: pointer; text-align: left; transition: background 0.15s ease; } .linkml-viewer__uml-layout-option:hover { background: var(--surface-hover, #f5f5f5); } .linkml-viewer__uml-layout-option--active { background: var(--primary-light, #e3f2fd); } .linkml-viewer__uml-layout-option--active:hover { background: var(--primary-light, #e3f2fd); } .linkml-viewer__uml-layout-title { font-size: 0.8125rem; font-weight: 500; color: var(--text-primary, #212121); } .linkml-viewer__uml-layout-option--active .linkml-viewer__uml-layout-title { color: var(--primary-color, #1976d2); } .linkml-viewer__uml-layout-desc { font-size: 0.6875rem; color: var(--text-secondary, #666); margin-top: 0.125rem; } /* UML Container (for fullscreen support) */ .linkml-viewer__uml-container { position: relative; background: var(--surface-color, #ffffff); border-radius: 8px; overflow: hidden; } .linkml-viewer__uml-container--fullscreen { position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 9999; background: var(--surface-color, #ffffff); border-radius: 0; padding: 0; margin: 0; box-sizing: border-box; overflow: hidden; } .linkml-viewer__uml-fullscreen-close { position: absolute; top: 20px; right: 20px; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; background: var(--surface-color, #ffffff); border: 1px solid var(--border-color, #e0e0e0); border-radius: 50%; font-size: 1.25rem; color: var(--text-secondary, #666); cursor: pointer; z-index: 10000; transition: all 0.15s ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .linkml-viewer__uml-fullscreen-close:hover { background: var(--surface-hover, #f5f5f5); color: var(--text-primary, #212121); transform: scale(1.05); } /* Dark mode overrides for UML toolbar */ [data-theme="dark"] .linkml-viewer__uml-toolbar { background: #1f2937; border-color: #374151; } [data-theme="dark"] .linkml-viewer__uml-toolbar-btn { color: #9ca3af; } [data-theme="dark"] .linkml-viewer__uml-toolbar-btn:hover { background: #374151; color: #e5e7eb; border-color: #4b5563; } [data-theme="dark"] .linkml-viewer__uml-toolbar-btn--active { background: rgba(96, 165, 250, 0.15); color: #60a5fa; border-color: #60a5fa; } [data-theme="dark"] .linkml-viewer__uml-toolbar-separator { background: #374151; } [data-theme="dark"] .linkml-viewer__uml-layout-menu { background: #1f2937; border-color: #374151; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); } [data-theme="dark"] .linkml-viewer__uml-layout-option:hover { background: #374151; } [data-theme="dark"] .linkml-viewer__uml-layout-option--active { background: rgba(96, 165, 250, 0.15); } [data-theme="dark"] .linkml-viewer__uml-layout-title { color: #e5e7eb; } [data-theme="dark"] .linkml-viewer__uml-layout-option--active .linkml-viewer__uml-layout-title { color: #60a5fa; } [data-theme="dark"] .linkml-viewer__uml-layout-desc { color: #9ca3af; } [data-theme="dark"] .linkml-viewer__uml-container--fullscreen { background: #111827; } [data-theme="dark"] .linkml-viewer__uml-fullscreen-close { background: #1f2937; border-color: #374151; color: #9ca3af; } [data-theme="dark"] .linkml-viewer__uml-fullscreen-close:hover { background: #374151; color: #e5e7eb; } /* Mobile responsiveness for UML toolbar */ @media (max-width: 600px) { .linkml-viewer__uml-toolbar { padding: 0.375rem; gap: 0.125rem; } .linkml-viewer__uml-toolbar-btn { padding: 0.25rem 0.375rem; font-size: 0.6875rem; } .linkml-viewer__uml-toolbar-btn span { display: none; } .linkml-viewer__uml-toolbar-btn svg { width: 14px; height: 14px; } .linkml-viewer__uml-toolbar-separator { height: 20px; margin: 0 0.125rem; } .linkml-viewer__uml-layout-menu { min-width: 180px; right: 0; left: auto; } .linkml-viewer__uml-fullscreen-close { top: 10px; right: 10px; width: 32px; height: 32px; font-size: 1rem; } }