/* Datahub rack layout: centered client history and reference modules. */ .datahub-page > .datahub-rack-module { width: min(1180px, 100%); margin-inline: auto; } .datahub-rack-module { box-sizing: border-box; margin: 0 0 var(--legacy-space-4); border: var(--border-hair) solid var(--line); border-radius: var(--radius-md); color: var(--text); background: var(--panel); } .datahub-history-module { overflow: hidden; } .datahub-history-scroll { overflow-x: auto; scrollbar-color: var(--line-strong) var(--surface-app); scrollbar-width: thin; } .datahub-history-grid { display: flex; width: 100%; min-width: 1180px; background: var(--surface-app); } .datahub-history-column { display: grid; flex: 1 0 145px; grid-template-rows: var(--row-height) minmax(160px, auto) 40px; min-width: 145px; border-right: var(--border-hair) solid var(--line); background: var(--panel); } .datahub-history-column > header { display: grid; grid-template-columns: minmax(0, 1fr); align-items: center; border-bottom: var(--border-hair) solid var(--line); background: var(--panel-raised); } .datahub-history-column.placeholder > header { display: grid; grid-template-columns: 1fr; place-items: center; color: var(--muted); font-size: var(--ui-body-size); } .datahub-history-column.active > header { color: var(--state-selected-text); background: var(--state-selected); } .datahub-client-name { height: 100%; min-width: 0; padding: 0 var(--legacy-space-3); overflow: hidden; border: 0; color: inherit; background: transparent; cursor: pointer; font-size: var(--ui-body-size); font-weight: var(--ui-strong-weight); text-align: left; text-overflow: ellipsis; white-space: nowrap; } .datahub-history-rows { display: grid; align-content: start; background: var(--panel); } .datahub-history-row { display: grid; grid-template-columns: 28px minmax(0, 1fr) 40px; align-items: center; min-height: 40px; padding: 0 var(--legacy-space-2); border-bottom: var(--border-hair) solid var(--line); background: var(--panel); } .datahub-history-row:hover { background: var(--panel-hover); } .datahub-history-row.selected { outline: var(--border-hair) solid var(--marking-color); outline-offset: -1px; } .datahub-history-row.current, .datahub-history-row.selected { color: var(--state-selected-text); background: var(--state-selected); } .datahub-history-row.empty { grid-template-columns: 1fr; } .datahub-history-row.empty i { width: 12px; height: 12px; background: var(--surface-input); } .datahub-history-select, .datahub-history-date { color: inherit; cursor: pointer; } .datahub-history-select { display: grid; place-items: center; width: 24px; height: 24px; padding: 0; border: var(--border-hair) solid var(--line-strong); background: var(--surface-input); font-size: var(--ui-small-size); } .datahub-history-select[aria-pressed="true"] { border-color: var(--state-selected-text); } .datahub-history-date { min-width: 0; padding: 0 var(--legacy-space-1); overflow: hidden; border: 0; background: transparent; font-size: var(--ui-body-size); font-variant-numeric: tabular-nums; font-weight: var(--ui-strong-weight); text-align: left; text-overflow: ellipsis; white-space: nowrap; } .datahub-history-source { color: inherit; font-family: var(--font-mono); font-size: var(--ui-small-size); text-align: right; opacity: .8; } .datahub-history-column > footer { display: grid; place-items: center; padding: var(--legacy-space-1); border-top: var(--border-hair) solid var(--line); background: var(--panel-raised); } .datahub-history-column > footer strong { font-family: var(--font-mono); font-size: var(--ui-body-size); font-weight: var(--ui-strong-weight); } .datahub-history-column.placeholder > footer i { width: calc(100% - var(--legacy-space-2)); height: 30px; border: var(--border-hair) solid var(--line-strong); background: var(--surface-input); } .datahub-add-client { display: grid; flex: 0 0 66px; grid-template-rows: var(--row-height) minmax(160px, auto) 40px; width: 66px; min-width: 66px; padding: 0; border: 0; border-left: var(--border-hair) solid var(--line); color: var(--muted); background: var(--panel); cursor: pointer; } .datahub-add-client:hover { color: var(--heading); background: var(--panel-hover); } .datahub-add-client strong { display: grid; place-items: center; width: 100%; height: var(--row-height); border-bottom: var(--border-hair) solid var(--line); background: var(--panel-raised); font-size: var(--ui-heading-size); font-weight: 400; } .datahub-add-client > span { border-bottom: var(--border-hair) solid var(--line); } .datahub-add-client footer { display: grid; place-items: center; padding: var(--legacy-space-1); border-top: var(--border-hair) solid var(--line); background: var(--panel-raised); } .datahub-add-client footer i { width: calc(100% - var(--legacy-space-2)); height: 30px; border: var(--border-hair) solid var(--line-strong); background: var(--surface-input); } .datahub-status-module { min-height: 0; padding: 0; border: 0; background: transparent; } .datahub-reference-controls { width: 100%; } .datahub-reference-knob { font-style: normal; } .datahub-comparison-error { display: block; margin: 0 var(--legacy-space-3) var(--legacy-space-2); color: var(--danger-text); font-size: var(--ui-control-size); font-style: normal; } .datahub-tenants-module { min-height: 0; padding: 0; border: 0; background: transparent; } .datahub-tenant-card-rack { display: grid; grid-template-columns: repeat(auto-fill, var(--tile-compact-width)); justify-content: start; gap: var(--segment-gap); padding: var(--segment-inset); border: var(--border-hair) solid var(--segment-border); border-radius: var(--segment-radius); background: var(--segment-surface); box-shadow: none; } .datahub-tenant-card { position: relative; min-height: var(--donut-card-min-h); padding: 0; transition: background .12s ease, border-color .12s ease; } .datahub-tenant-card::before { content: none; } .datahub-tenant-card:hover, .datahub-tenant-card:focus-within { border-color: var(--tile-border); background: var(--tile-surface-hover); box-shadow: var(--tile-card-shadow); } .datahub-tenant-card.is-selected { border-color: var(--tile-selected-border); outline: calc(var(--bw-emphasis) + var(--bw-hairline)) solid var(--tile-selected-border); outline-offset: calc(-1 * (var(--bw-emphasis) + var(--bw-hairline))); } .datahub-tenant-processing-dot { position: absolute; z-index: 3; top: var(--datahub-readiness-dot-inset); left: var(--datahub-readiness-dot-inset); width: var(--datahub-readiness-dot-size); height: var(--datahub-readiness-dot-size); border: var(--border-hair) solid var(--surface-app); border-radius: 50%; background: var(--state-online); pointer-events: none; } .datahub-tenant-processing-dot[data-status="update"], .datahub-tenant-processing-dot[data-status="review"] { background: var(--warning); } .datahub-tenant-processing-dot[data-status="checking"] { background: var(--text-secondary); } .datahub-tenant-processing-dot[data-status="processing"], .datahub-tenant-processing-dot[data-status="reference-update"], .datahub-tenant-processing-dot[data-status="error"] { background: var(--state-offline); } .datahub-tenant-select { position: absolute; inset: 0; display: grid; grid-template-rows: minmax(0, 1fr) auto auto; align-items: start; width: 100%; min-width: 0; padding: var(--space-5) var(--space-3) var(--space-3); border: 0; color: inherit; background: transparent; text-align: left; cursor: pointer; } .datahub-tenant-select:focus-visible, .datahub-tenant-add:focus-visible { outline: var(--bw-emphasis) solid var(--focus-ring); outline-offset: calc(-1 * var(--bw-emphasis)); } .datahub-tenant-name { display: -webkit-box; align-self: center; justify-self: center; min-width: 0; max-width: 100%; overflow: hidden; color: var(--donut-value); font: var(--fw-semibold) calc(var(--donut-title-size) * 1.35) / 1.15 var(--font-donut-display); overflow-wrap: anywhere; text-align: center; text-overflow: ellipsis; white-space: normal; -webkit-box-orient: vertical; -webkit-line-clamp: 3; } .datahub-tenant-summary { align-self: end; justify-self: start; display: flex; align-items: baseline; gap: var(--space-1); margin-bottom: var(--space-1); color: var(--muted); font-family: var(--font-donut-display); font-variant-numeric: tabular-nums; } .datahub-tenant-summary strong { color: inherit; font-size: var(--ui-body-size); font-weight: var(--fw-semibold); line-height: 1; } .datahub-tenant-summary small, .datahub-tenant-latest { color: var(--muted); font-size: var(--ui-small-size); font-weight: var(--fw-regular); } .datahub-tenant-latest { min-width: 0; max-width: calc(100% - 68px); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; opacity: .72; } .datahub-tenant-show, .datahub-tenant-show:hover, .datahub-tenant-show:active { position: absolute; z-index: 2; top: var(--space-3); right: var(--space-3); min-width: 52px; border-color: var(--button-border); color: var(--button-marked-text); background: var(--button-marked-bg); } .datahub-tenant-show[data-status="update"], .datahub-tenant-show[data-status="update"]:hover, .datahub-tenant-show[data-status="update"]:active, .datahub-tenant-show[data-status="review"], .datahub-tenant-show[data-status="review"]:hover, .datahub-tenant-show[data-status="review"]:active { border-color: var(--warning); color: var(--warning); background: color-mix(in srgb, var(--warning) 8%, var(--donut-card-surface)); } .datahub-tenant-show[data-status="reference-update"], .datahub-tenant-show[data-status="reference-update"]:hover, .datahub-tenant-show[data-status="reference-update"]:active, .datahub-tenant-show[data-status="error"], .datahub-tenant-show[data-status="error"]:hover, .datahub-tenant-show[data-status="error"]:active { border-color: var(--state-offline); color: var(--state-offline); background: color-mix(in srgb, var(--state-offline) 8%, var(--donut-card-surface)); } .datahub-tenant-open, .datahub-tenant-open:hover, .datahub-tenant-open:active { position: absolute; z-index: 2; right: var(--space-3); bottom: var(--space-3); min-width: 52px; } .datahub-tenant-add { display: grid; place-items: center; color: var(--muted); cursor: pointer; } .datahub-tenant-add:hover { color: var(--donut-all); } .datahub-tenant-add > span { font-family: var(--font-donut-display); font-size: calc(var(--donut-value-size) * 1.7); font-weight: var(--fw-regular); line-height: 1; opacity: .48; } .datahub-tenant-add:hover > span { opacity: .78; } @media (prefers-reduced-motion: reduce) { .datahub-tenant-card { transition: none; } } @media (max-width: 1100px) { .datahub-tenant-card-rack { grid-template-columns: repeat(auto-fill, var(--tile-compact-width)); } } @media (max-width: 760px) { .datahub-tenant-card-rack { grid-template-columns: minmax(0, var(--tile-compact-width)); } } .datahub-reference-module { overflow: hidden; } .datahub-rack-header { display: grid; grid-template-columns: 24px 12px minmax(0, 1fr) auto; align-items: center; gap: var(--legacy-space-2); min-height: 46px; padding: 0 var(--legacy-space-3); border-bottom: var(--border-hair) solid var(--line); background: var(--panel-raised); } /* In der halbbreiten Karte ist der Titel die erste Groesse, die knapp wird. Er kuerzt mit Auslassungspunkten, statt drei Zeilen hoch zu werden und die Plakette zu verschieben. */ .datahub-rack-header > strong { overflow: hidden; color: var(--text); font-size: var(--ui-body-size); font-weight: var(--ui-label-weight); letter-spacing: .02em; text-overflow: ellipsis; white-space: nowrap; } .datahub-grip { color: var(--muted); font-size: var(--ui-heading-size); } .datahub-led { width: 10px; height: 10px; border-radius: 50%; background: var(--success); } .datahub-rack-badge { min-height: 24px; padding: 2px var(--legacy-space-2); border: var(--border-hair) solid var(--line-strong); color: var(--text); background: var(--surface-input); font-size: var(--ui-small-size); line-height: 20px; font-variant-numeric: tabular-nums; white-space: nowrap; } /* Die beiden Referenzkarten tragen im Rumpf nur noch ihre Aktion. Die Aussage der Karte - Version beziehungsweise Anzahl - steht als Plakette in der Kopfzeile und wird nicht darunter wiederholt. */ .datahub-rack-body { display: flex; align-items: center; justify-content: flex-end; gap: var(--legacy-space-2); min-height: 62px; padding: var(--legacy-space-2) var(--legacy-space-3); } .datahub-rack-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--legacy-space-2); } /* Gefuellte Aktion in Standardform und Standardgelb - keine eigene Hoehe, kein eigener Ton mehr. */ .datahub-maintenance-action { border: var(--bw-hairline) solid var(--button-border); color: var(--button-marked-text); background: var(--button-marked-bg); font-weight: var(--ui-strong-weight); cursor: pointer; } .datahub-maintenance-action:hover { background: var(--button-marked-bg-hover); } .datahub-maintenance-action:disabled { color: var(--muted); background: var(--surface-active); cursor: default; } /* Referenzkarten stehen nebeneinander: links der Baseline-Katalog, rechts die MITRE-Matrix. Der Katalog selbst ist keine Karte mehr, sondern laeuft darunter ueber die volle Breite - halbiert waeren seine Zeilen nicht mehr lesbar. Die Plaetze sind ausdruecklich gesetzt, damit die Reihenfolge nicht von der DOM-Folge abhaengt. */ .datahub-reference-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; gap: var(--legacy-space-4); } .datahub-reference-row > .mitre-library { grid-area: 1 / 1 / 2 / -1; } .datahub-reference-row > .baseline-catalog { grid-area: 2 / 1 / 3 / -1; margin-top: 0; } .datahub-reference-row > .iso-corpus-catalog { grid-area: 3 / 1 / 4 / -1; } .iso-corpus-content { display: grid; gap: var(--space-4); padding: var(--space-5); } .iso-corpus-summary { display: grid; gap: var(--space-2); color: var(--text-primary); font-size: var(--type-table-body-size); } .iso-corpus-summary strong { font-weight: var(--fw-semibold); } .iso-corpus-form { display: flex; flex-wrap: wrap; align-items: end; gap: var(--space-4); } .iso-corpus-form label { display: grid; flex: 1 1 var(--tile-content-width); gap: var(--space-2); color: var(--text-primary); font-size: var(--type-table-body-size); } .iso-corpus-form .btn { flex: 0 0 auto; } .iso-corpus-note { margin: 0; color: var(--text-secondary); font-size: var(--type-table-body-size); } .datahub-reference-row > .datahub-rack-module { margin-bottom: 0; } /* Der importierte Baseline-Katalog verwendet dieselbe aufklappbare Kopf- und Tabellenform wie die Scan-History im Mandantendetail. */ .baseline-upload-action { flex: 0 0 auto; text-transform: none; letter-spacing: normal; } .tenant-section-bar .baseline-title { gap: var(--space-3); } .tenant-timeslot-toolbar { display: grid; grid-template-columns: minmax(220px, .8fr) minmax(340px, 1fr); align-items: end; gap: var(--legacy-space-3) var(--legacy-space-5); margin-bottom: var(--legacy-space-4); padding: var(--legacy-space-3); border: var(--border-hair) solid var(--line); background: var(--panel-raised); } .tenant-timeslot-toolbar label { display: grid; gap: var(--legacy-space-2); color: var(--heading); font-size: var(--ui-label-size); font-weight: var(--ui-label-weight); } .tenant-timeslot-toolbar p { grid-column: 1 / -1; margin: 0; color: var(--muted); } .tenant-timeslot-create { display: grid; grid-template-columns: minmax(180px, 1fr) auto; align-items: end; gap: var(--legacy-space-2); } .tenant-file-row.is-active-timeslot { background: var(--state-selected-flat); } .tenant-file-row.is-active-timeslot > span:first-child { border-left: var(--marker-width) solid var(--state-selected); padding-left: var(--legacy-space-2); } @media (max-width: 760px) { /* Erst wenn eine Karte schmaler als ihre Aktion wuerde, stapeln sie sich. */ .datahub-reference-row { grid-template-columns: minmax(0, 1fr); } .datahub-reference-row > .mitre-library { grid-area: 1 / 1; } .datahub-reference-row > .baseline-catalog { grid-area: 2 / 1; } .datahub-reference-row > .iso-corpus-catalog { grid-area: 3 / 1; } .tenant-timeslot-toolbar, .tenant-timeslot-create { grid-template-columns: 1fr; } .datahub-rack-header { grid-template-columns: 20px 10px minmax(0, 1fr) auto; } .datahub-rack-actions { justify-content: stretch; } .datahub-rack-actions > * { flex: 1; } } /* Shared reference disclosure in client navigation and Finding Reader. */ .reference-recognition { margin-block: var(--space-4); font-size: var(--type-body-size); } .reference-recognition h4 { font-size: var(--type-h4-size); font-weight: 600; } .reference-recognition-state strong { display: flex; align-items: center; gap: var(--space-2); font-weight: var(--fw-semibold); } .reference-recognition-state > span { display: block; } .reference-recognition-versions { margin: var(--space-3) 0 0; font-size: var(--type-table-body-size); } .reference-recognition-disclosure > summary { cursor: pointer; list-style: none; border-radius: var(--btn-radius); } .reference-recognition-disclosure > summary::-webkit-details-marker { display: none; } .reference-recognition-disclosure > summary:focus-visible { outline: var(--bw-emphasis) solid var(--focus-ring); outline-offset: var(--space-1); } .reference-recognition-disclosure > summary h4 { display: flex; align-items: center; gap: var(--space-2); min-height: var(--btn-h); margin: 0; } .reference-recognition-chevron { margin-left: auto; color: var(--text-secondary); } .reference-recognition-dot { display: inline-block; flex: 0 0 var(--space-2); width: var(--space-2); height: var(--space-2); border-radius: 50%; background: var(--state-open); } .reference-recognition-dot[data-state="ready"] { background: var(--state-done); } .reference-recognition-dot[data-state="attention"] { background: var(--state-blocked); } .reference-recognition table { width: 100%; table-layout: fixed; font-size: var(--type-table-body-size); } .reference-recognition th { width: 30%; font-weight: 400; text-transform: none; letter-spacing: normal; } .reference-recognition td { overflow-wrap: anywhere; } .reference-recognition summary { font-size: var(--type-table-body-size); } .tenant-source-navigation { flex: 1 1 auto; min-height: 0; overflow-y: auto; scrollbar-color: var(--border-strong) var(--surface-panel); scrollbar-width: thin; } .tenant-source-navigation > .reference-recognition { margin: 0; padding: var(--space-4) var(--space-5); border-bottom: var(--bw-hairline) solid var(--border-default); } /* User decision 2026-09-26: this action is red when processing is needed. */ .btn.reference-recognition-action[data-attention="true"], .btn.reference-recognition-action[data-attention="true"]:hover { color: var(--sev-on); background: var(--state-offline); border-color: var(--state-offline); }