135 lines
15 KiB
CSS
135 lines
15 KiB
CSS
/* 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); 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(--legacy-accent); 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(6, minmax(0, 1fr)); gap: var(--space-2); padding: var(--space-3); border: var(--border-hair) solid var(--donut-border); border-radius: var(--donut-rack-radius); background: var(--donut-rack-surface); box-shadow: var(--donut-rack-shadow); }
|
|
.datahub-tenant-card { position: relative; min-height: var(--donut-card-min-h); padding: 0; transition: background .12s ease, border-color .12s ease, transform .12s ease; }
|
|
.datahub-tenant-card::before { content: none; }
|
|
.datahub-tenant-card:hover,
|
|
.datahub-tenant-card:focus-within { border-color: var(--line-strong); background: var(--panel-hover); transform: translateY(-2px); }
|
|
.datahub-tenant-card.is-selected { outline: var(--bw-emphasis) solid var(--button-marked-bg); outline-offset: calc(-1 * var(--bw-emphasis)); }
|
|
.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"] { background: var(--warning); }
|
|
.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 { border-color: var(--warning); color: var(--warning); background: color-mix(in srgb, var(--warning) 8%, var(--donut-card-surface)); }
|
|
.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; }
|
|
.datahub-tenant-card:hover, .datahub-tenant-card:focus-within { transform: none; }
|
|
}
|
|
|
|
@media (max-width: 1100px) {
|
|
.datahub-tenant-card-rack { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
}
|
|
@media (max-width: 760px) {
|
|
.datahub-tenant-card-rack { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
}
|
|
|
|
.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; align-items: center; 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.is-mitre-hidden > .baseline-catalog { grid-area: 1 / 1 / 2 / -1; }
|
|
.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.is-mitre-hidden > .baseline-catalog { grid-area: 1 / 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; }
|
|
}
|