Assessor_2.0/outputs/client-info-design-check/preview.css

12246 lines
291 KiB
CSS

/* src/styles/security-scoring.css */
.security-scoring-methodology {
min-width: 0;
}
.security-scoring-methodology p {
font-size: var(--type-body-size);
line-height: var(--lh-prose);
}
.security-scoring-methodology table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
.security-scoring-methodology caption {
text-align: left;
font-size: var(--type-body-size);
font-weight: var(--fw-semibold);
padding-bottom: var(--space-3);
}
.security-scoring-methodology th,
.security-scoring-methodology td {
padding: var(--space-2);
border-bottom: var(--border-hair) solid var(--line);
text-align: left;
vertical-align: top;
overflow-wrap: anywhere;
font-size: var(--type-table-body-size);
}
.security-scoring-methodology th {
font-size: var(--type-table-head-size);
font-weight: var(--fw-semibold);
}
.security-scoring-methodology th:last-child {
width: 50%;
}
/* node_modules/@fontsource-variable/inter/wght.css */
@font-face {
font-family: "Inter Variable";
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url("./inter-cyrillic-ext-wght-normal-IYF56FF6.woff2") format("woff2-variations");
unicode-range:
U+0460-052F,
U+1C80-1C8A,
U+20B4,
U+2DE0-2DFF,
U+A640-A69F,
U+FE2E-FE2F;
}
@font-face {
font-family: "Inter Variable";
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url("./inter-cyrillic-wght-normal-JEOLYBOO.woff2") format("woff2-variations");
unicode-range:
U+0301,
U+0400-045F,
U+0490-0491,
U+04B0-04B1,
U+2116;
}
@font-face {
font-family: "Inter Variable";
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url("./inter-greek-ext-wght-normal-EOVOK2B5.woff2") format("woff2-variations");
unicode-range: U+1F00-1FFF;
}
@font-face {
font-family: "Inter Variable";
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url("./inter-greek-wght-normal-IRE366VL.woff2") format("woff2-variations");
unicode-range:
U+0370-0377,
U+037A-037F,
U+0384-038A,
U+038C,
U+038E-03A1,
U+03A3-03FF;
}
@font-face {
font-family: "Inter Variable";
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url("./inter-vietnamese-wght-normal-CE5GGD3W.woff2") format("woff2-variations");
unicode-range:
U+0102-0103,
U+0110-0111,
U+0128-0129,
U+0168-0169,
U+01A0-01A1,
U+01AF-01B0,
U+0300-0301,
U+0303-0304,
U+0308-0309,
U+0323,
U+0329,
U+1EA0-1EF9,
U+20AB;
}
@font-face {
font-family: "Inter Variable";
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url("./inter-latin-ext-wght-normal-HA22NDSG.woff2") format("woff2-variations");
unicode-range:
U+0100-02BA,
U+02BD-02C5,
U+02C7-02CC,
U+02CE-02D7,
U+02DD-02FF,
U+0304,
U+0308,
U+0329,
U+1D00-1DBF,
U+1E00-1E9F,
U+1EF2-1EFF,
U+2020,
U+20A0-20AB,
U+20AD-20C0,
U+2113,
U+2C60-2C7F,
U+A720-A7FF;
}
@font-face {
font-family: "Inter Variable";
font-style: normal;
font-display: swap;
font-weight: 100 900;
src: url("./inter-latin-wght-normal-NRMW37G5.woff2") format("woff2-variations");
unicode-range:
U+0000-00FF,
U+0131,
U+0152-0153,
U+02BB-02BC,
U+02C6,
U+02DA,
U+02DC,
U+0304,
U+0308,
U+0329,
U+2000-206F,
U+20AC,
U+2122,
U+2191,
U+2193,
U+2212,
U+2215,
U+FEFF,
U+FFFD;
}
/* src/styles/layers.css */
@layer tokens, base, shell, components, utilities;
/* src/styles/ui-tokens.css */
@layer tokens {
:root {
--font-ui: "Inter Variable", sans-serif;
--font-mono: var(--font-ui);
--font-path:
ui-monospace,
Consolas,
"Liberation Mono",
monospace;
--font-donut-display: var(--font-ui);
--type-h1-size: 56px;
--type-h2-size: 32px;
--type-h3-size: 18px;
--type-detail-title-size: 20px;
--type-h4-size: 16px;
--type-body-size: 16px;
--type-table-body-size: 14px;
--type-label-size: 12px;
--type-meta-size: 12px;
--type-badge-size: 11px;
--type-table-head-size: 12px;
--type-button-size: 13px;
--segment-surface: transparent;
--segment-border: transparent;
--segment-radius: 10px;
--segment-inset: var(--space-3);
--segment-gap: var(--space-3);
--tile-surface: #323238;
--tile-surface-hover: #3A3A42;
--tile-border: transparent;
--tile-selected-border: var(--marking-color);
--tile-radius: var(--radius-sm);
--tile-inset: var(--space-4);
--tile-compact-width: 186px;
--tile-content-width: 358px;
--tile-content-min-height: 223px;
--tile-card-shadow: none;
--client-info-canvas: var(--surface-app);
--client-info-surface: var(--surface-input);
--client-info-surface-raised: var(--tile-surface);
--client-info-surface-hover: var(--tile-surface-hover);
--client-info-text: var(--text-primary);
--client-info-muted: var(--text-secondary);
--client-info-line: var(--border-default);
--client-info-line-strong: var(--border-strong);
--client-info-amber: var(--sev-medium);
--client-info-red: var(--sev-critical);
--client-info-green: var(--state-done);
--client-info-purple: var(--donut-not-applicable);
--client-info-blue: var(--donut-all);
--client-info-lime: var(--state-done);
--client-info-neutral: var(--donut-not-run);
--donut-rack-surface: var(--segment-surface);
--donut-card-surface: var(--tile-surface);
--donut-card-surface-end: var(--tile-surface);
--donut-track: #555B65;
--donut-border: var(--segment-border);
--donut-value: #E2DFE6;
--donut-label: #B7BAC0;
--donut-all: #348CF2;
--donut-deviation: #F0AC00;
--donut-passed: #3DA96C;
--donut-not-applicable: #C2568A;
--donut-not-run: #8A8E95;
--donut-error: #F23C47;
--donut-rack-shadow: none;
--donut-card-shadow: var(--tile-card-shadow);
--donut-rack-radius: var(--segment-radius);
--donut-card-radius: var(--tile-radius);
--donut-card-min-h: 196px;
--donut-ring-size: 128px;
--donut-ring-stroke: 12px;
--donut-progress-dash: 0 100;
--donut-title-size: 16px;
--donut-value-size: 26px;
--donut-percent-size: 14px;
--donut-compact-value-size: 22px;
--donut-compact-percent-size: 12px;
--donut-compact-unit-gap: 2px;
--datahub-readiness-dot-size: 14px;
--datahub-readiness-dot-inset: var(--space-1);
--fs-micro: var(--type-badge-size);
--fs-sm: var(--type-meta-size);
--fs-base: var(--type-button-size);
--fs-md: var(--type-table-body-size);
--fs-lg: var(--type-body-size);
--fs-xl: var(--type-h3-size);
--pathfinder-micro-title-size: 23px;
--pathfinder-micro-badge-size: 14px;
--pathfinder-micro-relation-badge-size: 16px;
--pathfinder-micro-action-size: 14px;
--pathfinder-micro-action-group-radius: 8px;
--pathfinder-micro-action-radius: 6px;
--pathfinder-micro-connector-backdrop-mix: #000000;
--pathfinder-micro-action-highlight-mix: #FFFFFF;
--fw-regular: 400;
--fw-content-medium: 500;
--fw-semibold: 600;
--fw-bold: 700;
--fw-medium: var(--fw-semibold);
--lh-ui: 1.35;
--lh-prose: 1.55;
--ls-caps: 0.06em;
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-5: 20px;
--space-6: 24px;
--space-8: 32px;
--sidebar-w: 224px;
--sidebar-w-collapsed: 48px;
--topbar-h: 44px;
--band-row-h: 34px;
--contextstrip-h: 24px;
--statusbar-h: 24px;
--inspector-w: 380px;
--facetrail-w: 236px;
--table-col-min-w: 96px;
--panel-content-inset: 20px;
--panel-inset: var(--panel-content-inset);
--app-grid-size: 22px 22px;
--control-h: 24px;
--control-h-sm: 20px;
--icon-btn: 24px;
--row-h: 32px;
--tile-h: 132px;
--tile-min-w: 260px;
--radius-xs: 0px;
--radius-sm: 0px;
--radius-md: 0px;
--btn-radius: 4px;
--btn-h: 28px;
--btn-pad-x: 12px;
--radius-nav-item: 4px;
--radius-result-cluster: 4px;
--bw-hairline: 1px;
--bw-emphasis: 2px;
--marker-width: 8px;
--dur-fast: 90ms;
--dur-base: 140ms;
--dur-data-build: 700ms;
--ease: cubic-bezier(0.2, 0, 0.2, 1);
--ease-data-build: cubic-bezier(0.22, 1, 0.36, 1);
}
:root[data-density=compact] {
--control-h: 26px;
--control-h-sm: 22px;
--icon-btn: 22px;
--row-h: 28px;
--tile-h: 116px;
--band-row-h: 30px;
}
:root[data-density=reading] {
--control-h: 34px;
--control-h-sm: 30px;
--icon-btn: 30px;
--row-h: 40px;
--tile-h: 148px;
--band-row-h: 38px;
}
:root,
:root[data-theme=dark] {
color-scheme: dark;
--surface-app: #242426;
--surface-shell: #1B1B1D;
--surface-panel: #242426;
--surface-panel-raised: #323238;
--surface-input: #1A1A1C;
--surface-hover: #3A3A42;
--surface-active: #43434C;
--surface-selected: color-mix(in srgb, var(--marking-color) 16%, transparent);
--surface-selected-flat: #43434C;
--text-selected-flat: #E2DFE6;
--text-muted-selected-flat: #B7BAC0;
--border-selected-flat: var(--marking-color);
--surface-tab-active: #323238;
--text-tab-active: #E2DFE6;
--surface-results-action: #242426;
--border-results-action: var(--marking-color);
--text-results-action: var(--marking-color);
--surface-overlay: #242426;
--surface-scrim: rgba(6, 6, 9, 0.62);
--app-grid-pattern:
radial-gradient(
circle at 1px 1px,
#424248 1px,
transparent 0);
--graph-edge: rgba(104, 143, 181, 0.52);
--graph-finding: #D9DEE4;
--graph-unknown: #8EA7C0;
--graph-relation: #4FB8D4;
--graph-category: #AEB8C3;
--graph-defense: #789C99;
--graph-technique: #7E8D9C;
--graph-tactic: #668BB3;
--graph-alert: #E45E63;
--graph-selected: var(--marking-color);
--chart-tone-emphasis: var(--graph-relation);
--border-subtle: rgba(255, 255, 255, 0.14);
--border-default: #383840;
--border-strong: #4E4E58;
--button-border: #383840;
--button-bg: #323238;
--button-bg-hover: #3A3A42;
--button-text: #E2DFE6;
--button-accent: #E9A63C;
--button-accent-hover: #F0B252;
--button-accent-text: #000000;
--marking-color: #E9A63C;
--surface-nav-item: #323238;
--surface-nav-item-hover: #3A3A42;
--surface-nav-active: var(--surface-app);
--text-primary: #E2DFE6;
--text-secondary: #B7BAC0;
--text-muted: #B7BAC0;
--text-disabled: #55555E;
--text-inverse: #0D0D10;
--text-link: #7FA9F0;
--band-surface: #D9962A;
--band-surface-hover: #E5A33A;
--band-surface-active: #C4831C;
--band-border: #A66E12;
--band-text: #17130A;
--sev-critical: #E8214F;
--sev-high: #E2680F;
--sev-medium: #C99700;
--sev-low: #2E9E6B;
--sev-info: #3D8FD1;
--sev-unknown: #6E6E78;
--sev-on: #FFFFFF;
--sev-ink: #08080A;
--outcome-fail: #F2607F;
--outcome-pass: #63D69A;
--outcome-warning: #D9A82A;
--outcome-error: #E88A45;
--outcome-idle: #74747F;
--state-open: #8A8A94;
--state-progress: #3D8FD1;
--state-done: #2E9E6B;
--state-blocked: #E2680F;
--state-accepted: #74747F;
--state-bookmark: #1FA89E;
--state-online: #2E9E6B;
--state-offline: #E8214F;
--focus-ring: #4CC2FF;
--selection-border: var(--marking-color);
--selection-marker: var(--marking-color);
--search-highlight-bg: #FFE600;
--search-highlight-text: #000000;
--evidence-highlight-bg: #CBF8FF;
--evidence-highlight-text: #000000;
--criterion-highlight-bg: #176B46;
--criterion-highlight-text: #FFFFFF;
--violation-highlight-bg: #981B37;
--violation-highlight-text: #FFFFFF;
--viz-1: #6B9E1F;
--viz-2: #3D8FD1;
--viz-3: #1FA89E;
--viz-4: #C99700;
--viz-5: #E2680F;
--viz-6: #D6497A;
--viz-grid: #2A2A32;
--shadow-overlay: 0 8px 24px rgba(0, 0, 0, 0.48);
--shadow-popover: 0 4px 12px rgba(0, 0, 0, 0.42);
}
:root[data-theme=light] {
color-scheme: light;
--segment-surface: transparent;
--segment-border: transparent;
--tile-surface: #FFFFFF;
--tile-surface-hover: #F3F4F6;
--tile-border: transparent;
--tile-selected-border: var(--marking-color);
--tile-card-shadow: none;
--donut-rack-surface: var(--segment-surface);
--donut-card-surface: var(--tile-surface);
--donut-card-surface-end: var(--tile-surface);
--donut-track: #B9BEC7;
--donut-border: var(--segment-border);
--donut-value: #20242A;
--donut-label: #555B65;
--donut-all: #1C70C9;
--donut-deviation: #9A6500;
--donut-passed: #1F7F4B;
--donut-not-applicable: #A13D6C;
--donut-not-run: #626873;
--donut-error: #D42836;
--donut-rack-shadow: none;
--donut-card-shadow: var(--tile-card-shadow);
--surface-app: #F1F1F4;
--surface-shell: #E4E4EA;
--surface-panel: #FFFFFF;
--surface-panel-raised: #F7F7F9;
--surface-input: #FFFFFF;
--surface-hover: #EDEDF2;
--surface-active: #E3E3EA;
--surface-selected: color-mix(in srgb, var(--marking-color) 16%, transparent);
--surface-selected-flat: #E4E4EC;
--text-selected-flat: #17171C;
--text-muted-selected-flat: #55555F;
--border-selected-flat: var(--marking-color);
--surface-tab-active: #FFFFFF;
--text-tab-active: #17171C;
--surface-results-action: #FFFFFF;
--border-results-action: var(--marking-color);
--text-results-action: var(--marking-color);
--surface-overlay: #FFFFFF;
--surface-scrim: rgba(24, 24, 30, 0.32);
--app-grid-pattern:
radial-gradient(
circle at 1px 1px,
#CBCBD3 1px,
transparent 0);
--graph-edge: rgba(55, 92, 128, 0.45);
--graph-finding: #3F4851;
--graph-unknown: #58718A;
--graph-relation: #2E93AD;
--graph-category: #667482;
--graph-defense: #527A77;
--graph-technique: #71808E;
--graph-tactic: #426C97;
--graph-alert: #C83E45;
--graph-selected: var(--marking-color);
--chart-tone-emphasis: var(--graph-relation);
--border-subtle: #E2E2E8;
--border-default: #CFCFD8;
--border-strong: #A8A8B4;
--button-border: #888888;
--button-bg: #C8C8C8;
--button-bg-hover: #D5D5D5;
--button-text: #111111;
--button-accent: #E9A63C;
--button-accent-hover: #F0B252;
--button-accent-text: #000000;
--marking-color: #E9A63C;
--surface-nav-item: #D8D8E0;
--surface-nav-item-hover: #E4E4EC;
--surface-nav-active: var(--surface-app);
--text-primary: #17171C;
--text-secondary: #55555F;
--text-muted: #74747F;
--text-disabled: #A0A0AA;
--text-inverse: #FFFFFF;
--text-link: #2A5FBF;
--band-surface: #E9A63C;
--band-surface-hover: #F0B252;
--band-surface-active: #D8942A;
--band-border: #B37B18;
--band-text: #17130A;
--sev-critical: #E8214F;
--sev-high: #E2680F;
--sev-medium: #C99700;
--sev-low: #2E9E6B;
--sev-info: #3D8FD1;
--sev-unknown: #6E6E78;
--sev-on: #FFFFFF;
--sev-ink: #08080A;
--outcome-fail: #C60F3E;
--outcome-pass: #187447;
--outcome-warning: #8F6B00;
--outcome-error: #B85206;
--outcome-idle: #74747F;
--state-open: #6E6E78;
--state-progress: #2A6FA8;
--state-done: #1E7A50;
--state-blocked: #B85206;
--state-accepted: #74747F;
--state-bookmark: #10756D;
--state-online: #1E7A50;
--state-offline: #C60F3E;
--focus-ring: #0A66C2;
--selection-border: var(--marking-color);
--selection-marker: var(--marking-color);
--search-highlight-bg: #FFE600;
--search-highlight-text: #000000;
--evidence-highlight-bg: #CBF8FF;
--evidence-highlight-text: #000000;
--criterion-highlight-bg: #CBEFD9;
--criterion-highlight-text: #10261A;
--violation-highlight-bg: #FFD4DB;
--violation-highlight-text: #4A0714;
--viz-1: #4F7A12;
--viz-2: #2A6FA8;
--viz-3: #10756D;
--viz-4: #8F6B00;
--viz-5: #B85206;
--viz-6: #B02F5E;
--viz-grid: #DFDFE6;
--shadow-overlay: 0 8px 24px rgba(20, 20, 28, 0.18);
--shadow-popover: 0 4px 12px rgba(20, 20, 28, 0.14);
}
@media (prefers-reduced-motion: reduce) {
:root {
--dur-fast: 0ms;
--dur-base: 0ms;
--dur-data-build: 0ms;
}
}
}
/* src/styles/tokens.css */
:root {
--bg: var(--surface-app);
--header: var(--surface-shell);
--sidebar: var(--surface-shell);
--panel: var(--surface-panel);
--panel-soft: var(--surface-panel);
--panel-raised: var(--surface-panel-raised);
--panel-hover: var(--surface-hover);
--surface-inset: var(--surface-input);
--line: var(--border-subtle);
--line-strong: var(--border-strong);
--text: var(--text-primary);
--heading: var(--text-primary);
--muted: var(--text-secondary);
--state-selected: var(--surface-selected);
--state-selected-text: var(--text-primary);
--state-selected-flat: var(--surface-selected-flat);
--state-selected-flat-text: var(--text-selected-flat);
--state-selected-flat-muted: var(--text-muted-selected-flat);
--state-selected-flat-border: var(--border-selected-flat);
--state-active: var(--marking-color);
--state-active-text: var(--band-text);
--result-color: var(--state-active);
--button-border: var(--border-default);
--button-bg: var(--surface-panel-raised);
--button-bg-hover: var(--surface-hover);
--button-text: var(--text-primary);
--button-marked-bg: var(--button-accent);
--button-marked-bg-hover: var(--button-accent-hover);
--button-marked-text: var(--button-accent-text);
--success: var(--state-done);
--warning: var(--outcome-warning);
--danger: var(--sev-critical);
--danger-text: var(--outcome-fail);
--danger-surface: color-mix(in srgb, var(--sev-critical) 16%, transparent);
--critical: var(--sev-critical);
--high: var(--sev-high);
--medium: var(--sev-medium);
--low: var(--sev-low);
--info: var(--sev-info);
--critical-badge: var(--sev-critical);
--high-badge: var(--sev-high);
--medium-badge: var(--sev-medium);
--low-badge: var(--sev-low);
--info-badge: var(--sev-info);
--severity-ink: var(--sev-ink);
--legacy-radius-sm: var(--radius-sm);
--legacy-radius-md: var(--radius-md);
--radius-lg: var(--radius-md);
--radius-pill: 999px;
--border-hair: var(--bw-hairline);
--legacy-space-1: var(--space-1);
--legacy-space-2: var(--space-2);
--legacy-space-3: var(--space-3);
--legacy-space-4: var(--space-4);
--legacy-space-5: var(--space-5);
--legacy-space-6: var(--space-6);
--space-7: var(--space-8);
--control-height: var(--control-h);
--row-height: var(--row-h);
--reader-inset: 28px;
--shadow: none;
--shadow-raised: 0 4px 12px rgba(0, 0, 0, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.08);
--shadow-raised-hover: 0 8px 20px rgba(0, 0, 0, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.12);
--font: var(--font-ui);
--ui-label-size: var(--type-table-head-size);
--ui-badge-size: var(--type-badge-size);
--ui-small-size: var(--type-meta-size);
--ui-value-size: var(--type-label-size);
--ui-control-size: var(--type-button-size);
--ui-body-size: var(--type-table-body-size);
--ui-heading-size: var(--type-h3-size);
--ui-reading-size: var(--type-body-size);
--ui-reading-heading-size: var(--type-h2-size);
--ui-glyph-size: 21px;
--ui-label-weight: var(--fw-semibold);
--ui-strong-weight: var(--fw-semibold);
--ui-body-weight: var(--fw-regular);
--ui-label-tracking: var(--ls-caps);
}
/* src/styles/base.css */
* {
box-sizing: border-box;
}
html,
body,
#root {
width: 100%;
min-width: 0;
min-height: 100%;
margin: 0;
}
body {
min-height: 100vh;
overflow: hidden;
color: var(--text);
background: var(--bg);
font: var(--fw-regular) var(--type-body-size)/1.5 var(--font-ui);
}
button,
input,
select,
textarea {
color: inherit;
font: inherit;
}
button,
select {
cursor: pointer;
}
button:disabled,
select:disabled {
cursor: not-allowed;
opacity: .42;
}
h1,
h2,
h3,
h4,
p {
margin-top: 0;
}
h1 {
font-size: var(--type-h1-size);
font-weight: var(--fw-semibold);
line-height: 1.1;
letter-spacing: -.04em;
}
h2 {
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
line-height: 1.15;
letter-spacing: -.03em;
}
h3 {
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
line-height: 1.25;
letter-spacing: 0;
}
h4 {
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.3;
letter-spacing: 0;
}
svg {
display: block;
width: 17px;
height: 17px;
}
table {
width: 100%;
border-collapse: collapse;
}
th,
td {
padding: 9px 10px;
border-bottom: 1px solid var(--line);
text-align: left;
vertical-align: top;
overflow-wrap: anywhere;
}
td {
font-size: var(--type-table-body-size);
font-weight: var(--fw-regular);
}
th {
position: sticky;
top: 0;
z-index: 1;
color: var(--muted);
background: var(--panel-soft);
font-size: var(--type-table-head-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
tbody tr:hover td {
background: var(--panel-hover);
}
pre {
margin: 0;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
mark {
padding: 1px 2px;
color: var(--state-active-text);
background: var(--state-active);
}
.hidden-input {
display: none;
}
button,
.btn,
.icon-btn,
.tab-btn,
.bookmark-btn,
.results-btn {
border-radius: var(--btn-radius);
border: 1px solid var(--button-border);
color: var(--button-text);
background: var(--button-bg);
font-size: var(--type-button-size);
font-weight: var(--fw-semibold);
line-height: 1.15;
}
.select,
.input {
min-height: var(--control-height);
border: var(--border-hair) solid var(--line);
border-radius: 0;
color: var(--text);
background-color: var(--panel-raised);
font-size: var(--type-button-size);
font-weight: var(--fw-regular);
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: var(--btn-h);
padding: 0 var(--btn-pad-x);
}
.select,
.input {
padding: var(--legacy-space-1) var(--legacy-space-3);
}
.icon-btn,
.bookmark-btn,
.results-btn {
display: inline-grid;
place-items: center;
min-width: var(--btn-h);
min-height: var(--btn-h);
padding: 0 6px;
}
.btn:hover,
.icon-btn:hover,
.tab-btn:hover,
.bookmark-btn:hover,
.results-btn:hover {
border-color: var(--button-border);
background: var(--button-bg-hover);
color: var(--button-text);
}
.select:hover,
.input:hover {
border-color: var(--line-strong);
background-color: var(--panel-hover);
}
.input {
background: var(--surface-inset);
}
.btn.primary,
.btn--primary,
.btn.active,
.tab-btn.active,
.bookmark-btn[aria-pressed=true],
.icon-btn[aria-pressed=true],
.results-btn.is-open {
border: 1px solid var(--button-border);
color: var(--button-marked-text);
background: var(--button-marked-bg);
font-weight: var(--fw-semibold);
}
.btn.primary:hover,
.btn--primary:hover,
.btn.active:hover,
.tab-btn.active:hover,
.bookmark-btn[aria-pressed=true]:hover,
.icon-btn[aria-pressed=true]:hover,
.results-btn.is-open:hover {
border-color: var(--button-border);
background: var(--button-marked-bg-hover);
color: var(--button-marked-text);
}
:focus-visible {
outline: 1px solid var(--focus-ring);
outline-offset: 1px;
}
/* src/styles/layout.css */
.app-shell {
display: grid;
grid-template-rows: 124px minmax(0, 1fr);
height: 100vh;
min-height: 0;
}
.topbar {
display: flex;
align-items: flex-start;
gap: 10px;
min-width: 0;
height: 124px;
padding: 6px 12px;
background: var(--header);
overflow: hidden;
}
.brand {
appearance: none;
display: flex;
align-items: center;
gap: 12px;
flex: 0 0 204px;
min-width: 204px;
min-height: 112px;
padding: 6px 14px 6px 16px;
margin-top: 0;
border: 0;
color: inherit;
background: transparent;
font: inherit;
text-align: left;
white-space: nowrap;
cursor: pointer;
}
.brand:hover {
background: transparent;
}
.brand:focus-visible {
outline: 2px solid var(--focus-ring);
outline-offset: -2px;
}
.brand h1 {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-bold);
line-height: 1;
letter-spacing: .045em;
}
.brand-copy {
display: grid;
gap: var(--space-1);
}
.brand-version {
color: var(--muted);
font-size: var(--type-meta-size);
font-variant-numeric: tabular-nums;
line-height: 1;
letter-spacing: var(--ls-caps);
}
.brand-logo {
position: relative;
display: block;
flex: 0 0 48px;
width: 48px;
height: 48px;
}
.brand-logo img {
position: absolute;
inset: 0;
display: block;
width: 48px;
height: 48px;
object-fit: contain;
transition: opacity .16s ease;
}
.app-header-panel {
position: relative;
display: flex;
flex: 1 1 0;
flex-direction: column;
min-width: 0;
min-height: 112px;
padding: 6px 10px;
background: transparent;
overflow: hidden;
}
.app-header-panel,
.viewer {
border-radius: 10px;
}
.app-header-panel-work {
padding: 3px 0 0;
}
.work-header-row {
display: flex;
align-items: center;
gap: 18px;
min-width: 0;
}
.work-header-row .reader-toolbar {
flex: 1 1 auto;
}
.app-header-context {
display: flex;
align-items: center;
gap: 12px;
flex: 0 0 auto;
min-height: 30px;
}
.work-header-row .app-header-context {
margin-left: auto;
}
.app-header-panel:not(.app-header-panel-work) .app-header-context {
position: absolute;
top: 3px;
right: 0;
}
.app-header-client-name {
flex: 0 1 auto;
max-width: min(32vw, 420px);
margin-right: 16px;
overflow: hidden;
color: var(--heading);
font-size: var(--fs-xl);
font-weight: var(--fw-semibold);
line-height: 1.2;
text-align: right;
text-overflow: ellipsis;
white-space: nowrap;
}
.reader-toolbar {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
min-height: 30px;
padding-left: 14px;
overflow-x: auto;
overflow-y: hidden;
scrollbar-width: thin;
scrollbar-color: var(--line-strong) transparent;
}
.toolbar,
.header-export-row,
.live-summary,
.search-tools,
.view-tabs {
display: flex;
align-items: center;
gap: 6px;
min-width: 0;
}
.toolbar {
flex: 0 0 auto;
justify-content: flex-end;
margin: 0;
padding: 0;
border: 0;
min-inline-size: 0;
}
.live-summary {
flex: 0 0 auto;
display: inline-flex;
align-items: center;
justify-content: center;
height: 30px;
margin-left: 0;
padding: 3px 8px;
gap: 10px;
border: 1px solid var(--border-default);
border-radius: 0;
background: var(--surface-panel-raised);
white-space: nowrap;
}
.live-summary span {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--text-secondary);
font-weight: var(--fw-regular);
font-size: var(--ui-label-size);
}
.live-summary span + span {
border-left: 1px solid var(--border-subtle);
padding-left: 10px;
}
.live-summary b {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 28px;
height: 22px;
padding: 1px 6px;
border: 1px solid var(--border-default);
border-radius: 0;
color: var(--text-primary);
background: var(--surface-input);
font-size: var(--ui-label-size);
font-variant-numeric: tabular-nums;
font-weight: var(--fw-semibold);
line-height: 1;
text-align: center;
}
.delimiter-select {
width: 220px;
}
.view-tabs {
flex: 0 0 auto;
gap: 0;
border: 1px solid var(--button-border);
border-radius: 0;
overflow: visible;
background: var(--surface-input);
}
.tab-btn {
flex: 0 0 auto;
min-width: 72px;
padding: 2px 8px;
border: 0;
border-right: 1px solid var(--button-border);
border-radius: 0;
color: var(--button-text);
background: var(--button-bg);
font-size: var(--ui-label-size);
font-weight: var(--fw-medium);
line-height: 1.15;
white-space: nowrap;
transition: background-color .12s ease, color .12s ease;
}
.view-tabs .tab-btn:first-child {
border-radius: 0;
}
.view-tabs .tab-btn:last-child {
border-radius: 0;
border-right: 0;
}
.tab-btn:hover {
color: var(--button-text);
background: var(--button-bg-hover);
}
.view-tabs .tab-btn.active,
.view-tabs .tab-btn.active:hover {
border: 1px solid var(--button-border);
color: var(--button-marked-text);
background: var(--button-marked-bg);
font-weight: 600;
}
.export-btn {
min-width: 44px;
padding-inline: 8px;
border-radius: var(--btn-radius);
border: 1px solid var(--button-border);
}
.workspace-btn {
flex: 0 0 auto;
min-width: 112px;
border: 1px solid var(--button-border);
border-radius: var(--btn-radius);
color: var(--button-text);
background: var(--button-bg);
white-space: nowrap;
}
.header-export-row {
flex: 0 0 auto;
overflow: visible;
}
.toolbar > .btn,
.toolbar > .icon-btn,
.toolbar > .delimiter-select {
flex-shrink: 0;
}
.workspace-btn.has-items {
border-color: var(--button-border);
color: var(--text);
background: var(--button-bg);
opacity: 1;
}
.workspace-btn.has-items:hover {
border-color: var(--button-border);
background: var(--button-bg-hover);
}
.workspace-btn.active {
border-color: var(--button-border);
color: var(--button-marked-text);
background: var(--button-marked-bg);
font-weight: 600;
}
.app-shell > main {
position: relative;
display: grid;
grid-template-columns: 218px minmax(0, 1fr);
min-height: 0;
transition: grid-template-columns .18s ease;
}
.app-shell.sidebar-collapsed > main {
grid-template-columns: 0 minmax(0, 1fr);
}
aside {
position: relative;
z-index: 10;
min-width: 0;
min-height: 0;
background: var(--sidebar);
overflow: visible;
}
.app-sidebar {
display: flex;
flex-direction: column;
min-height: 100%;
padding: 0;
}
.sidebar-theme-panel {
margin-top: auto;
padding: 14px 12px;
}
.theme-switcher {
display: flex;
align-items: center;
justify-content: space-between;
gap: 4px;
padding: 4px;
border: 1px solid var(--button-border);
border-radius: 10px;
background: var(--surface-input);
}
.theme-switcher-btn {
display: grid;
place-items: center;
flex: 1 1 0;
height: 28px;
padding: 0;
border: 1px solid transparent;
border-radius: 7px;
color: var(--button-text);
background: transparent;
box-shadow: none;
font-size: var(--ui-body-size);
line-height: 1;
transition:
background-color .12s ease,
color .12s ease,
border-color .12s ease;
cursor: pointer;
}
.theme-switcher-btn:hover:not(.active) {
color: var(--button-text);
background: var(--button-bg-hover);
}
.theme-switcher-btn.active {
border-color: var(--button-border);
color: var(--button-marked-text);
background: var(--button-marked-bg);
box-shadow: none;
font-weight: var(--fw-semibold);
}
.sidebar-toggle-inline {
display: grid;
place-items: center;
width: 28px;
height: 28px;
padding: 0;
border: 1px solid transparent;
border-radius: 7px;
color: var(--button-text);
background: transparent;
font-size: 16px;
font-weight: var(--fw-bold);
cursor: pointer;
}
.sidebar-toggle-inline:hover {
background: var(--button-bg-hover);
color: var(--text-primary);
}
.sidebar-primary-actions {
display: flex;
flex-direction: column;
gap: 8px;
margin: 10px 0 0 0;
padding: 0 0 12px 10px;
border-top: 0;
border-bottom: 0;
}
.sidebar-tab-btn {
position: relative;
display: flex;
align-items: center;
gap: 13px;
width: calc(100% - 10px);
min-height: 42px;
padding: 8px 14px;
border: 1px solid transparent;
border-radius: 8px;
color: var(--text-secondary);
background: transparent;
box-shadow: none;
font-size: var(--ui-heading-size);
font-weight: var(--fw-regular);
letter-spacing: 0;
text-align: left;
text-shadow: none;
cursor: pointer;
transition:
color .15s ease,
background .15s ease,
border-color .15s ease;
}
.sidebar-tab-btn svg {
flex: 0 0 22px;
width: 22px;
height: 22px;
color: var(--text-muted);
}
.sidebar-tab-btn span {
min-width: 0;
}
.sidebar-tab-btn:hover:not(.active):not(:disabled) {
color: var(--text-primary);
background: var(--surface-hover);
border-color: transparent;
box-shadow: none;
transform: none;
}
.sidebar-tab-btn:hover:not(.active):not(:disabled) svg {
color: var(--text-primary);
}
.sidebar-tab-btn:active:not(:disabled) {
color: var(--text-primary);
background: var(--surface-hover);
box-shadow: none;
transform: none;
}
.sidebar-tab-btn:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.sidebar-tab-btn.active,
.sidebar-tab-btn.active:hover {
position: relative;
z-index: 12;
width: calc(100% + 1px);
margin-right: -1px;
border: 1px solid transparent;
border-right: 1px solid var(--surface-app);
border-radius: 8px 0 0 8px;
color: var(--text-primary);
background: var(--surface-app);
box-shadow: none;
outline: 0;
font-weight: var(--fw-semibold);
}
.sidebar-tab-btn.active svg {
color: var(--band-surface);
}
.app-shell.sidebar-collapsed > main > aside {
visibility: hidden;
}
.sidebar-toggle {
position: absolute;
left: 0;
top: 10px;
z-index: 30;
display: grid;
place-items: center;
width: 28px;
height: 28px;
padding: 0;
border: 1px solid var(--button-border);
border-left: 0;
border-radius: 0;
color: var(--text-primary);
background: var(--button-bg);
transition: background-color .12s ease;
}
.sidebar-toggle:hover {
background: var(--surface-hover);
}
.sidebar-collapsed .sidebar-toggle {
left: 0;
}
.workspace {
display: grid;
grid-template-rows: minmax(0, 1fr);
min-width: 0;
min-height: 0;
background: var(--sidebar);
margin: 0;
padding: 0 12px 12px 0;
overflow: hidden;
}
.workspace.graph-workspace {
grid-template-rows: minmax(0, 1fr);
}
.workbar {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: 8px;
min-width: 0;
margin: 9px 0 0;
padding: 8px 16px;
border: 0;
background: transparent;
overflow: hidden;
}
.toolbar:disabled,
.workbar:disabled {
opacity: .5;
}
.toolbar:disabled *,
.workbar:disabled * {
pointer-events: none;
}
.search-tools {
grid-column: 1 / -1;
display: flex;
align-items: center;
gap: 6px;
flex: 1 1 auto;
flex-wrap: wrap;
margin: 0;
padding: 0;
}
.standard-filter-btn {
flex: 0 0 auto;
min-width: 96px;
margin-left: 0;
font-weight: var(--fw-semibold);
}
.title-select {
flex: 0 0 215px;
width: 215px;
}
.sort-select {
flex: 0 0 345px;
width: 345px;
}
.status-select {
flex: 0 0 190px;
width: 190px;
}
.search-tail {
display: flex;
align-items: center;
gap: 6px;
flex: 0 0 100%;
min-width: 0;
}
.sheet-select {
flex: 0 1 310px;
min-width: 240px;
margin-left: 0;
}
.work-timeslot-select {
flex: 0 0 180px;
width: 180px;
min-width: 180px;
margin-left: 0;
}
.search-text-group {
display: flex;
align-items: center;
flex: 1 1 280px;
min-width: 200px;
max-width: 480px;
}
.search-text-group .search-input-wrap {
flex: 1 1 auto;
width: 100%;
min-width: 140px;
}
.search-input-wrap {
position: relative;
flex: 0 0 150px;
width: 150px;
min-width: 150px;
}
.search-input {
width: 100%;
min-width: 0;
padding-right: 34px;
}
.search-clear-btn {
position: absolute;
inset: 1px 1px 1px auto;
display: grid;
place-items: center;
width: 30px;
padding: 0;
border: 0;
border-left: 1px solid var(--line);
border-radius: 0 2px 2px 0;
color: var(--muted);
background: transparent;
font-size: var(--ui-heading-size);
}
.search-clear-btn:hover:not(:disabled) {
color: var(--heading);
background: var(--panel-hover);
}
.search-clear-btn:disabled {
opacity: .35;
}
.workbar-action {
display: flex;
grid-column: 2;
align-items: center;
gap: 12px;
white-space: nowrap;
color: var(--muted);
font-size: var(--ui-label-size);
}
.workbar-action b {
color: var(--heading);
}
.workbar-action label {
display: flex;
align-items: center;
gap: 6px;
}
.status-line {
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
gap: 16px;
min-width: 0;
padding: 4px 16px;
color: var(--muted);
border: 0;
font-size: var(--ui-label-size);
}
.status-line > span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
flex: 0 1 auto;
}
.status-line-tools {
position: absolute;
left: 50%;
display: flex;
align-items: center;
gap: 8px;
width: min(520px, calc(100% - 32px));
min-width: 0;
margin: 0;
transform: translateX(-50%);
}
.status-line .search-text-group {
flex: 1 1 auto;
min-width: 200px;
max-width: none;
margin: 0;
}
.status-line-end {
display: flex;
align-items: center;
gap: 16px;
min-width: 0;
flex: 0 1 auto;
}
.status-line-provenance {
flex: 0 1 auto;
cursor: help;
}
.viewer {
position: relative;
grid-row: 1;
min-width: 0;
min-height: 0;
margin-top: 10px;
background: var(--surface-app);
overflow: hidden;
}
.pathfinder-view-host {
min-width: 0;
min-height: 0;
height: 100%;
}
.viewer.is-joined-top {
border-top-left-radius: 0;
}
.area-landing {
display: grid;
place-items: center;
min-height: 100%;
padding: 36px;
}
.area-landing-card {
width: min(620px, 100%);
padding: 38px 42px;
border: 1px solid var(--line);
border-radius: 8px;
background: var(--panel);
box-shadow: var(--shadow);
text-align: center;
}
.area-kicker {
display: block;
margin-bottom: 10px;
color: var(--muted);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.area-landing-card h2 {
margin: 0 0 12px;
color: var(--heading);
font-size: var(--ui-glyph-size);
}
.area-landing-card p {
max-width: 510px;
margin: 0 auto 24px;
color: var(--muted);
line-height: 1.6;
}
.area-landing-card .hidden-input + .btn {
min-width: 170px;
font-weight: var(--fw-semibold);
}
.records-layout {
display: grid;
grid-template-columns: clamp(420px, 27vw, 520px) minmax(0, 1fr);
height: 100%;
min-height: 0;
background: var(--surface-app);
}
.record-list {
min-width: 0;
min-height: 0;
padding: 8px 6px;
background: var(--surface-app);
overflow-y: auto;
scrollbar-color: var(--line-strong) var(--surface-inset);
scrollbar-width: thin;
}
.tile-view-scroll {
padding: var(--panel-inset);
}
.tile-grid {
box-sizing: border-box;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(0, var(--tile-content-width)));
align-content: start;
justify-content: start;
gap: var(--segment-gap);
min-height: 100%;
padding: var(--segment-inset);
border: var(--border-hair) solid var(--segment-border);
border-radius: var(--segment-radius);
background: var(--segment-surface);
}
.table-scroll {
max-width: 100%;
overflow: auto;
background: var(--surface-app);
}
.raw-view {
min-height: 100%;
padding: var(--panel-inset);
color: var(--text);
background: var(--surface-app);
font: var(--type-table-body-size)/1.55 var(--font-mono);
}
@media (max-width: 1500px) {
.topbar-kpi {
min-width: 74px;
padding-inline: 10px;
}
.topbar-kpi.kpi-format {
min-width: 190px;
}
.delimiter-select {
width: 170px;
}
.tab-btn {
min-width: 68px;
}
}
@media (max-width: 1200px) {
.status-line-tools {
position: static;
width: min(520px, 100%);
margin-left: auto;
transform: none;
}
}
@media (max-width: 1050px) {
.workbar {
grid-template-columns: minmax(0, 1fr);
}
.workbar-action {
grid-column: 1;
justify-content: flex-end;
}
.records-layout {
grid-template-columns: minmax(320px, 42%) minmax(0, 1fr);
}
}
@media (max-width: 760px) {
.app-shell > main {
grid-template-columns: 0 minmax(0, 1fr);
}
.app-shell > main > aside {
visibility: hidden;
}
.sidebar-toggle {
left: 0;
}
.records-layout {
grid-template-columns: 1fr;
}
.record-list {
max-height: 280px;
border-right: 0;
border-bottom: 1px solid var(--line);
}
.tile-grid {
grid-template-columns: minmax(0, 1fr);
}
}
.app-sidebar {
display: flex;
flex-direction: column;
min-height: 100%;
padding: 0;
}
.sidebar-primary-actions {
order: 0;
}
.sidebar-severity-rack {
order: 1;
}
.sidebar-theme-panel {
order: 2;
margin-top: auto;
padding: 14px 12px;
border-top: 1px solid var(--line);
}
.connection-indicator {
display: inline-flex;
align-items: center;
gap: 3px;
flex: 0 0 auto;
}
.connection-state-square {
display: block;
width: 9px;
height: 9px;
border-radius: 0;
opacity: .2;
}
.connection-state-square.is-offline {
background: var(--state-offline);
}
.connection-state-square.is-online {
background: var(--state-online);
}
.connection-connected .connection-state-square.is-online {
opacity: 1;
}
.connection-unavailable .connection-state-square.is-offline,
.connection-checking .connection-state-square.is-offline {
opacity: 1;
}
.area-topbar {
display: flex;
align-items: center;
gap: 14px;
flex: 1;
min-width: 0;
}
.area-topbar strong {
margin-right: auto;
color: var(--heading);
font-size: var(--type-h1-size);
font-weight: var(--fw-semibold);
line-height: 1.1;
letter-spacing: -.04em;
}
.area-topbar-heading {
display: flex;
align-items: center;
gap: 18px;
min-width: 0;
margin-right: auto;
overflow: hidden;
}
.area-topbar-heading > strong {
flex: 0 0 auto;
margin-right: 0;
}
.area-client-context-inline {
display: flex;
align-items: center;
gap: var(--space-2);
min-width: 0;
}
.area-client-marker {
flex: 0 0 auto;
color: var(--state-active);
}
.area-client-marker .triangle-icon {
width: 24px;
height: 24px;
}
.area-client-name {
min-width: 0;
overflow: hidden;
color: var(--heading);
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
line-height: 1.2;
text-overflow: ellipsis;
white-space: nowrap;
}
.pathfinder-filter-trail {
display: flex;
align-items: center;
gap: 12px;
min-width: 0;
color: var(--heading);
font-size: calc(var(--fs-xl) * 1.5);
font-weight: var(--fw-semibold);
line-height: 1.15;
white-space: nowrap;
}
.pathfinder-filter-trail-marker,
.pathfinder-filter-trail-plus {
flex: 0 0 auto;
color: var(--state-active);
}
.pathfinder-filter-trail-marker {
display: inline-flex;
}
.pathfinder-filter-trail-marker .triangle-icon {
width: 28px;
height: 28px;
}
.pathfinder-filter-trail-item {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
}
.workspace-data-hub,
.workspace-dashboard,
.workspace-graph,
.workspace-db-structure,
.workspace-results {
grid-template-rows: minmax(0, 1fr);
}
.viewer.app-area-graph {
background-color: var(--surface-app);
background-image: var(--app-grid-pattern);
background-size: var(--app-grid-size);
}
@media (max-width: 1500px) {
.app-shell-work .delimiter-select {
display: none;
}
}
/* src/styles/components.css */
mark,
.search-highlight {
background-color: var(--search-highlight-bg);
color: var(--search-highlight-text);
border-radius: 2px;
padding: 0 2px;
font-weight: 600;
}
.empty-state {
display: grid;
place-items: center;
min-height: 55vh;
padding: 40px;
color: var(--muted);
text-align: center;
}
.empty-state-brand {
min-height: 100%;
}
.work-filter-empty {
padding: var(--panel-inset);
color: var(--muted);
}
.work-filter-empty p {
font-size: var(--type-body-size);
}
.empty-state-content {
display: grid;
justify-items: center;
gap: 24px;
width: min(620px, 100%);
}
.empty-brand-mark {
display: flex;
align-items: center;
gap: 18px;
opacity: .6;
}
.empty-brand-logo {
position: relative;
display: block;
width: 82px;
height: 82px;
}
.empty-brand-logo img {
position: absolute;
inset: 0;
width: 82px;
height: 82px;
object-fit: contain;
}
.empty-brand-mark strong {
color: var(--heading);
font-size: clamp(34px, 4vw, 58px);
font-weight: var(--fw-bold);
line-height: 1;
letter-spacing: .08em;
}
.empty-open-data {
position: relative;
display: flex;
align-items: center;
gap: 13px;
width: min(310px, 100%);
min-height: 50px;
padding: 10px 20px;
border: 0;
border-radius: 0 var(--legacy-radius-md) var(--legacy-radius-md) 0;
color: var(--text);
background: var(--panel-raised);
box-shadow: none;
font-size: var(--ui-heading-size);
font-weight: var(--fw-semibold);
text-align: left;
}
.empty-open-data::before {
content: "";
position: absolute;
inset: 0 auto 0 0;
width: 4px;
background: var(--marking-color);
}
.empty-open-data svg {
flex: 0 0 25px;
width: 25px;
height: 25px;
}
.empty-open-data:hover {
color: var(--heading);
background: var(--panel-hover);
}
.empty-open-data:active {
background: var(--panel-soft);
}
.empty-supported-formats {
color: var(--muted);
font-size: var(--ui-body-size);
font-weight: var(--fw-regular);
line-height: 1.8;
letter-spacing: .025em;
}
.about-sections {
display: grid;
gap: var(--space-5);
}
.about-brand {
display: grid;
place-items: center;
min-height: 172px;
}
.about-brand img {
display: block;
width: 160px;
height: 160px;
object-fit: contain;
}
.about-sections section {
display: grid;
gap: var(--space-3);
}
.about-sections h3 {
margin: 0;
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
}
.about-sections dl {
display: grid;
gap: 0;
margin: 0;
}
.about-detail {
display: grid;
grid-template-columns: minmax(130px, .8fr) minmax(0, 1.2fr);
gap: var(--space-3);
padding: var(--space-2) 0;
border-bottom: 1px solid var(--line);
}
.about-detail dt {
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.about-detail dd {
min-width: 0;
margin: 0;
overflow-wrap: anywhere;
font-size: var(--type-table-body-size);
font-variant-numeric: tabular-nums;
}
.about-credits {
color: var(--muted);
font-size: var(--type-meta-size);
text-align: center;
}
.panel-loading-state {
box-sizing: border-box;
display: grid;
place-items: center;
width: 100%;
min-height: min(560px, 62vh);
color: var(--muted);
}
.panel-loading-state-content {
display: grid;
justify-items: center;
gap: var(--space-4);
text-align: center;
}
.panel-loading-state-message {
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-3);
color: var(--text);
font-size: var(--type-body-size);
line-height: var(--lh-prose);
}
.panel-loading-state.is-compact {
min-height: 280px;
}
.finding-card {
position: relative;
display: grid;
grid-template-columns: 38px minmax(0, 1fr) 36px;
gap: 12px;
min-width: 0;
min-height: 238px;
padding: 22px 18px;
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-md);
color: var(--text);
background: var(--panel-raised);
box-shadow: var(--shadow-raised);
cursor: pointer;
transition:
border-color .16s ease,
background-color .16s ease,
box-shadow .16s ease,
transform .16s ease;
}
.finding-card:hover,
.finding-card:focus-visible {
border-color: var(--line-strong);
background: var(--panel-hover);
box-shadow: var(--shadow-raised-hover);
transform: translateY(-2px);
}
.finding-card.active {
border-color: var(--button-border);
color: var(--button-marked-text);
background: var(--button-marked-bg);
}
.finding-card.is-bookmarked {
outline: 2px solid var(--severity, var(--info));
outline-offset: -2px;
}
.record-list .finding-card {
position: relative;
grid-template-columns: 32px minmax(0, 1fr);
gap: 12px;
min-height: 78px;
margin-bottom: 0;
padding: 14px 16px;
scroll-margin-block: 7px;
border: 0;
border-radius: 0;
background: var(--panel-raised);
box-shadow: none;
transform: none;
}
.record-list .finding-card::after {
content: "";
position: absolute;
bottom: 0;
left: 14px;
right: 14px;
height: 1px;
background: var(--border-subtle);
pointer-events: none;
}
.record-list .finding-card.active::after,
.record-list .finding-card:last-child::after {
display: none;
}
.record-list .finding-card:hover,
.record-list .finding-card:focus-visible {
border-color: transparent;
background: var(--panel-hover);
box-shadow: none;
transform: none;
}
.record-list .finding-card.active,
.record-list .finding-card.active:hover,
.record-list .finding-card.active:focus-visible {
z-index: 1;
outline: 0;
border-color: transparent;
border-left: 0;
color: var(--state-selected-flat-text);
background: var(--state-selected-flat);
box-shadow: none;
}
.record-list .finding-card.active h3,
.record-list .finding-card.active .finding-card-status {
color: var(--state-selected-flat-text);
}
.record-list .finding-card-actions,
.record-list .finding-badges {
display: none;
}
.record-list .finding-card h3 {
margin-top: 1px;
font-size: var(--type-h4-size);
font-weight: var(--fw-content-medium);
line-height: 1.35;
}
.finding-card-status {
display: none;
}
.record-list .finding-card-status {
display: block;
margin: 5px 0 0;
color: var(--muted);
font-size: var(--ui-control-size);
line-height: 1.2;
}
.finding-hex {
display: grid;
place-items: center;
width: 29px;
height: 34px;
margin-top: 1px;
color: var(--sev-on);
background: var(--severity, var(--muted));
clip-path: polygon(50% 0, 94% 24%, 94% 76%, 50% 100%, 6% 76%, 6% 24%);
font-size: var(--ui-control-size);
font-weight: var(--fw-bold);
}
.finding-hex > span {
transform: translate(-3px, 1px);
}
.reader-title-hex {
position: relative;
display: block;
width: 30px;
height: 34px;
margin-top: 1px;
background: var(--severity, var(--muted));
clip-path: polygon(50% 0, 94% 24%, 94% 76%, 50% 100%, 6% 76%, 6% 24%);
}
.reader-title-hex::after {
content: "";
position: absolute;
left: 2px;
top: 14px;
width: 8px;
height: 4px;
border-left: 2px solid var(--sev-on);
border-bottom: 2px solid var(--sev-on);
transform: rotate(-45deg);
pointer-events: none;
}
.finding-card h3 {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.42;
overflow-wrap: normal;
word-break: normal;
hyphens: manual;
}
.workspace-label {
display: inline-flex;
align-items: center;
justify-content: center;
margin-left: 6px;
padding: 1px 6px;
border: 1px solid var(--border-default);
border-radius: 0;
color: var(--text-primary);
background: var(--surface-input);
font-size: var(--ui-label-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
vertical-align: middle;
}
.finding-badges,
.mitre-line {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 16px;
}
.finding-card-actions {
display: grid;
align-content: start;
gap: 8px;
}
.bookmark-btn {
color: var(--button-text);
border: 1px solid var(--button-border);
border-radius: var(--btn-radius);
background: var(--button-bg);
}
.bookmark-btn[aria-pressed=true] {
border-color: var(--button-border);
color: var(--button-marked-text);
background: var(--button-marked-bg);
font-weight: 600;
}
.results-btn,
.results-btn:hover {
border: 1px solid var(--button-border);
border-radius: var(--btn-radius);
color: var(--button-text);
background: var(--button-bg);
font-weight: var(--fw-medium);
}
.results-btn.is-open,
.results-btn.is-open:hover {
border: 1px solid var(--result-color);
color: var(--button-accent-text);
background: var(--result-color);
font-weight: 600;
}
.status-badge {
border: var(--border-hair) solid var(--line);
}
.outcome-mark {
display: inline-flex;
align-items: center;
gap: var(--legacy-space-1);
color: var(--muted);
}
.outcome-mark::before {
content: "\2013";
}
.outcome-mark[data-outcome=fail] {
color: var(--outcome-fail);
}
.outcome-mark[data-outcome=fail]::before {
content: "\25cf";
}
.outcome-mark[data-outcome=pass] {
color: var(--outcome-pass);
}
.outcome-mark[data-outcome=pass]::before {
content: "\25cb";
}
.outcome-mark[data-outcome=warning] {
color: var(--outcome-warning);
}
.outcome-mark[data-outcome=warning]::before {
content: "\25d0";
}
.outcome-mark[data-outcome=execution_error] {
color: var(--outcome-fail);
}
.outcome-mark[data-outcome=execution_error]::before {
content: "\2715";
}
.mitre-badge {
border: var(--border-hair) solid var(--line);
color: var(--text);
background: var(--surface-inset);
}
.severity-critical {
--severity: var(--critical);
}
.severity-high {
--severity: var(--high);
}
.severity-medium {
--severity: var(--medium);
}
.severity-low {
--severity: var(--low);
}
.severity-info {
--severity: var(--info);
}
.finding-reader {
min-width: 0;
min-height: 0;
padding: 34px 0 60px;
overflow-y: auto;
}
.finding-reader > * {
width: min(834px, calc(100% - var(--reader-inset) - var(--legacy-space-6)));
margin-left: var(--reader-inset);
margin-right: auto;
}
.reader-nav {
display: flex;
align-items: center;
gap: 70px;
margin-bottom: 48px;
color: var(--muted);
font-size: var(--ui-value-size);
}
.reader-nav div {
display: flex;
gap: 20px;
}
.reader-nav button {
border: 0;
color: var(--text);
background: transparent;
font-size: var(--ui-glyph-size);
}
.reader-heading {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
gap: var(--legacy-space-3) 16px;
align-items: start;
padding-bottom: 28px;
border-bottom: 1px solid var(--line);
}
.reader-heading h2 {
margin: 0;
color: var(--heading);
font-size: var(--type-detail-title-size);
font-weight: var(--ui-strong-weight);
line-height: 1.3;
letter-spacing: 0;
overflow-wrap: normal;
word-break: normal;
hyphens: manual;
}
.reader-heading-actions {
display: flex;
flex-wrap: wrap;
grid-column: 1 / -1;
align-items: center;
justify-content: flex-end;
gap: 10px;
align-self: center;
}
.policy-search-key {
display: grid;
gap: var(--space-1);
min-width: min(280px, 100%);
margin-right: auto;
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.policy-search-key > div {
display: flex;
flex-wrap: wrap;
gap: var(--space-1) var(--space-3);
}
.policy-search-key code {
width: fit-content;
max-width: 100%;
color: var(--heading);
font-family: var(--font-mono);
font-size: var(--type-table-body-size);
font-weight: var(--fw-regular);
overflow-wrap: anywhere;
user-select: text;
}
.accepted-risk-trigger {
grid-column: 3;
grid-row: 1;
display: grid;
gap: 4px;
}
.accepted-risk-trigger small {
font-size: var(--type-meta-size);
font-weight: var(--fw-regular);
}
.dialog-window.risk-acceptance-dialog {
width: min(1040px, 100%);
}
.risk-acceptance-form {
display: grid;
gap: 16px;
}
.risk-acceptance-form p {
margin: 0;
font-size: var(--type-body-size);
line-height: 1.5;
}
.risk-acceptance-context {
font-weight: var(--fw-semibold);
}
.risk-acceptance-note {
color: var(--muted);
}
.risk-acceptance-fields {
min-width: 0;
display: grid;
gap: 24px;
margin: 0;
padding: 0;
border: 0;
}
.risk-acceptance-fields h3,
.risk-acceptance-history h3 {
margin: 0 0 12px;
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
}
.risk-acceptance-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
}
.risk-acceptance-grid label {
min-width: 0;
display: grid;
align-content: start;
gap: 6px;
}
.risk-acceptance-grid label > span {
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
}
.risk-acceptance-grid small {
font-size: var(--type-meta-size);
color: var(--muted);
line-height: 1.5;
}
.risk-acceptance-grid input,
.risk-acceptance-grid textarea,
.risk-acceptance-grid select {
width: 100%;
min-width: 0;
padding: 8px 11px;
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--legacy-radius-sm);
color: var(--text);
background: var(--surface-inset);
font: inherit;
font-size: var(--type-body-size);
}
.risk-acceptance-grid textarea {
min-height: 96px;
resize: vertical;
}
.risk-acceptance-confirm {
display: flex;
align-items: start;
gap: 10px;
font-size: var(--type-body-size);
line-height: 1.5;
}
.risk-acceptance-confirm input {
flex: 0 0 auto;
margin-top: 5px;
}
.risk-acceptance-actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.risk-acceptance-history details {
padding: 12px 0;
border-top: var(--border-hair) solid var(--line);
}
.risk-acceptance-history summary {
cursor: pointer;
font-size: var(--type-body-size);
}
.risk-acceptance-history dl {
display: grid;
gap: 12px;
}
.risk-acceptance-history dt {
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.risk-acceptance-history dd {
margin: 4px 0 0;
white-space: pre-wrap;
font-size: var(--type-body-size);
overflow-wrap: anywhere;
}
.dialog-window.risk-acceptance-review-dialog {
width: min(720px, 100%);
}
.risk-acceptance-review {
display: grid;
gap: var(--space-5);
}
.risk-acceptance-review-intro {
padding-left: var(--space-4);
border-left: var(--bw-emphasis) solid var(--marking-color);
}
.risk-acceptance-review-intro strong {
display: block;
color: var(--heading);
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
}
.risk-acceptance-review-intro p {
margin: var(--space-1) 0 0;
color: var(--muted);
font-size: var(--type-body-size);
}
.risk-acceptance-review-meta,
.risk-acceptance-review-group dl {
display: grid;
gap: 0;
margin: 0;
}
.risk-acceptance-review-meta > div,
.risk-acceptance-review-group dl > div {
display: grid;
grid-template-columns: minmax(150px, .35fr) minmax(0, 1fr);
gap: var(--space-4);
padding: var(--space-2) 0;
border-bottom: var(--border-hair) solid var(--line);
}
.risk-acceptance-review dt {
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.risk-acceptance-review dd {
min-width: 0;
margin: 0;
color: var(--text);
font-size: var(--type-table-body-size);
line-height: 1.5;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.risk-acceptance-review-group h3 {
margin: 0;
padding-bottom: var(--space-2);
border-bottom: var(--border-hair) solid var(--line-strong);
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
}
.risk-acceptance-review-confirmation {
margin: 0;
padding-left: var(--space-3);
border-left: var(--bw-emphasis) solid var(--success);
color: var(--text);
font-size: var(--type-body-size);
line-height: 1.5;
}
.risk-acceptance-review-actions {
display: flex;
gap: var(--space-3);
justify-content: flex-end;
}
@media (max-width: 620px) {
.accepted-risk-trigger {
grid-column: 2;
grid-row: 2;
justify-self: start;
}
.risk-acceptance-grid {
grid-template-columns: minmax(0, 1fr);
}
}
.bookmark-label {
color: var(--text);
font-size: var(--ui-control-size);
font-weight: var(--ui-label-weight);
}
.results-detail-btn {
min-width: 136px;
}
.dashboard-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 12px;
margin: 28px auto 24px;
}
.dashboard-grid label,
.review-grid > label {
display: grid;
gap: 7px;
color: var(--heading);
font-size: var(--ui-value-size);
font-weight: var(--fw-semibold);
letter-spacing: 0;
text-transform: none;
}
.dashboard-grid input,
.dashboard-grid select,
.review-grid textarea {
width: 100%;
min-height: 39px;
padding: 8px 11px;
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--legacy-radius-sm);
color: var(--text);
background-color: var(--surface-inset);
text-transform: none;
}
.reader-summary,
.review-grid,
.all-fields {
margin-top: 14px;
padding: 20px 0;
border: 0;
border-bottom: 1px solid var(--line);
background: transparent;
}
.reader-summary h3 {
margin-bottom: var(--legacy-space-5);
color: var(--heading);
font-size: var(--type-h3-size);
text-transform: none;
}
.reader-summary h4 {
margin: 0 0 7px;
color: var(--heading);
font-size: var(--ui-reading-size);
text-transform: uppercase;
}
.reader-summary > div {
padding: 0 0 15px;
margin: 0 0 15px;
border-bottom: 1px solid var(--line);
}
.reader-summary > div:last-child {
margin-bottom: 0;
}
.reader-summary > .policy-value-comparison {
display: grid;
gap: var(--legacy-space-2);
padding: 0;
border: 0;
}
.policy-value-block {
min-width: 0;
padding: var(--legacy-space-3) var(--legacy-space-4);
border-left: 4px solid var(--line-strong);
background: var(--panel-soft);
}
.policy-value-comparison[data-outcome=fail] .policy-value-block[data-value=configured] {
border-left-color: var(--critical);
background: color-mix(in srgb, var(--critical) 8%, transparent);
}
.policy-value-comparison[data-outcome=pass] .policy-value-block[data-value=configured],
.policy-value-block[data-value=expected],
.reader-summary > .reader-remediation {
border-left-color: var(--success);
background: color-mix(in srgb, var(--success) 8%, transparent);
}
.reader-summary > .reader-remediation {
padding: var(--legacy-space-3) var(--legacy-space-4);
border-left-width: 4px;
border-left-style: solid;
border-bottom: 0;
}
.policy-value-block h4 {
margin-bottom: var(--legacy-space-2);
text-transform: none;
}
.policy-value-comparison[data-outcome=historical] .policy-value-block {
border-left-color: var(--line-strong);
background: var(--panel-soft);
}
.policy-evaluation-warning {
border-left: var(--bw-emphasis) solid var(--warning);
padding: var(--tile-inset);
}
.policy-evaluation-warning p {
margin: 0;
font-size: var(--type-body-size);
}
.policy-evaluation-warning h4 {
text-transform: none;
}
.policy-value-block .rich-text-value {
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.policy-guidance-text {
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.policy-guidance-text .policy-value-emphasis {
font-weight: var(--fw-bold);
}
.policy-source-evidence {
display: grid;
gap: var(--space-3);
min-width: 0;
}
.policy-source-evidence h4 {
margin: 0;
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
text-transform: none;
overflow-wrap: anywhere;
}
.policy-source-evidence p {
margin: 0;
}
.policy-source-notice {
font-size: var(--type-body-size);
line-height: 1.5;
}
.policy-source-groups {
min-width: 0;
border-top: var(--border-hair) solid var(--line-strong);
}
.policy-source-group {
display: grid;
gap: var(--space-2);
min-width: 0;
padding: var(--space-4) var(--space-3);
border-bottom: var(--border-hair) solid var(--line-strong);
background: transparent;
}
.policy-source-group__header {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--space-2);
}
.policy-source-group h5 {
min-width: 0;
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.4;
overflow-wrap: anywhere;
}
.policy-source-group__badge {
width: fit-content;
padding: 3px var(--space-2);
font-size: var(--type-badge-size);
font-weight: var(--fw-semibold);
}
.policy-source-group__badge.is-review {
border: var(--border-hair) solid color-mix(in srgb, var(--warning) 45%, var(--line));
color: var(--text);
background: color-mix(in srgb, var(--warning) 10%, var(--tile-surface));
}
.policy-source-group__backup {
color: var(--muted);
font-size: var(--type-meta-size);
overflow-wrap: anywhere;
}
.policy-source-observation {
display: grid;
gap: var(--space-2);
min-width: 0;
}
.policy-source-observation hr {
width: 100%;
margin: var(--space-2) 0;
border: 0;
border-top: var(--border-hair) solid var(--line-strong);
}
.policy-source-reference {
width: fit-content;
max-width: 100%;
padding: 8px var(--space-2);
border: var(--border-hair) solid var(--line);
background: var(--tile-surface);
font-size: var(--type-table-body-size);
overflow-wrap: anywhere;
}
.policy-source-sequence {
color: var(--muted);
font-size: var(--type-meta-size);
}
.policy-source-value {
font-size: var(--type-body-size);
line-height: 1.55;
}
.policy-source-deviation-value {
display: inline-block;
width: fit-content;
padding: 1px 5px;
border-left: var(--bw-emphasis) solid var(--critical);
background: color-mix(in srgb, var(--critical) 14%, transparent);
}
.rich-text-table.result-evidence-table td {
white-space: pre-wrap;
overflow-wrap: anywhere;
font-size: var(--type-table-body-size);
}
.result-evidence-table td.result-evidence-difference {
border-left: 3px solid var(--warning);
background: color-mix(in srgb, var(--warning) 8%, transparent);
font-weight: var(--ui-strong-weight);
}
.variant-comparison {
display: grid;
gap: var(--space-5);
min-width: 0;
}
.variant-comparison__header {
display: grid;
gap: var(--space-1);
}
.variant-comparison__eyebrow {
margin: 0;
color: var(--warning);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
text-transform: uppercase;
}
.variant-comparison__header h3 {
margin: 0;
color: var(--heading);
font-size: var(--type-detail-title-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
overflow-wrap: anywhere;
}
.variant-comparison__scope {
margin: 0;
color: var(--muted);
font-size: var(--type-meta-size);
}
.variant-comparison__notice {
padding: var(--space-4);
border-left: 4px solid var(--warning);
background: color-mix(in srgb, var(--warning) 8%, transparent);
}
.variant-comparison__notice.is-duplicate {
border-left-color: var(--info);
background: color-mix(in srgb, var(--info) 8%, transparent);
}
.variant-comparison__notice strong {
display: block;
margin-bottom: var(--space-1);
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
}
.variant-comparison__notice p {
margin: 0;
color: var(--text);
font-size: var(--type-body-size);
line-height: 1.55;
}
.variant-comparison__notice p + p {
margin-top: var(--space-1);
color: var(--muted);
}
.variant-comparison__setting h4,
.variant-comparison__variants h4 {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
}
.variant-comparison dt {
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.variant-comparison__value {
min-width: 0;
}
.variant-comparison__value > .technical-path {
font-size: var(--type-table-body-size);
}
.variant-comparison__literal {
width: fit-content;
max-width: 100%;
padding: var(--space-2);
color: var(--text);
background: var(--surface-inset);
font-family: var(--font-path);
font-size: var(--type-body-size);
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.variant-comparison__value-note {
color: var(--muted);
font-size: var(--type-meta-size);
}
.variant-comparison__setting dl > div,
.variant-comparison__technical dl > div {
display: grid;
grid-template-columns: minmax(112px, .2fr) minmax(0, 1fr);
gap: var(--space-3);
align-items: start;
}
.variant-comparison dd {
min-width: 0;
margin: 0;
color: var(--text);
font-size: var(--type-table-body-size);
overflow-wrap: anywhere;
}
.variant-comparison__sources,
.variant-comparison__technical {
min-width: 0;
color: var(--text);
}
.variant-comparison__sources {
display: grid;
gap: var(--space-2);
}
.variant-comparison__sources > .technical-path {
display: block;
width: 100%;
box-sizing: border-box;
}
.variant-comparison__technical > summary {
width: fit-content;
cursor: pointer;
color: var(--heading);
font-size: var(--type-button-size);
font-weight: var(--fw-semibold);
}
.variant-comparison__setting {
display: grid;
gap: var(--space-3);
min-width: 0;
}
.variant-comparison__setting dl {
display: grid;
gap: var(--space-2);
margin: 0;
}
.variant-comparison__variants {
display: grid;
gap: var(--space-3);
min-width: 0;
}
.variant-comparison__variants > p {
margin: 0;
color: var(--muted);
font-size: var(--type-body-size);
line-height: 1.55;
}
.variant-comparison__table-wrap {
min-width: 0;
width: 100%;
overflow-x: auto;
}
.variant-comparison__table {
width: 100%;
min-width: 680px;
border-collapse: collapse;
table-layout: auto;
color: var(--text);
background: var(--tile-surface);
}
.variant-comparison__table th,
.variant-comparison__table td {
padding: var(--space-3);
border-bottom: var(--border-hair) solid var(--line);
text-align: left;
vertical-align: top;
font-size: var(--type-table-body-size);
line-height: 1.5;
white-space: normal;
overflow-wrap: anywhere;
}
.variant-comparison__table thead th {
color: var(--muted);
background: var(--surface-inset);
font-size: var(--type-table-head-size);
font-weight: var(--fw-semibold);
text-transform: uppercase;
}
.variant-comparison__table tbody th {
width: 112px;
border-left: 3px solid var(--warning);
color: var(--heading);
font-weight: var(--fw-semibold);
}
.variant-comparison.is-duplicate .variant-comparison__table tbody td:first-child {
min-width: 220px;
border-left: 3px solid var(--info);
}
.variant-comparison.is-duplicate .variant-comparison__table tbody td:nth-child(2) {
min-width: 150px;
}
.variant-comparison.is-duplicate .variant-comparison__table tbody td:nth-child(3) {
min-width: 140px;
}
.variant-comparison__table td:nth-child(2) {
min-width: 220px;
}
.variant-comparison__table td:nth-child(3) {
min-width: 150px;
}
.variant-comparison__table td:nth-child(4) {
min-width: 140px;
}
.variant-comparison__table .variant-comparison__sources {
margin-top: var(--space-2);
}
.variant-comparison__technical-list {
display: grid;
gap: var(--space-4);
margin-top: var(--space-4);
}
.variant-comparison__technical section {
min-width: 0;
padding-top: var(--space-3);
border-top: var(--border-hair) solid var(--line);
}
.variant-comparison__technical h5 {
margin: 0 0 var(--space-2);
color: var(--heading);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.variant-comparison__technical dl {
display: grid;
gap: var(--space-2);
margin: 0;
}
.finding-optional-detail {
margin-top: 2px;
padding: 12px 14px;
border: var(--border-hair) solid var(--line);
background: var(--panel);
min-width: 0;
max-width: 100%;
box-sizing: border-box;
overflow: hidden;
}
.finding-optional-detail > summary {
cursor: pointer;
color: var(--heading);
font-size: var(--ui-reading-size);
font-weight: var(--ui-strong-weight);
}
.finding-optional-detail[open] > summary {
margin-bottom: 10px;
}
.finding-optional-detail > .rich-text-value {
min-width: 0;
max-width: 100%;
overflow-wrap: anywhere;
word-break: normal;
white-space: pre-wrap;
}
.reader-summary p {
margin: 0;
color: var(--text);
font-size: var(--ui-reading-size);
line-height: 1.55;
white-space: pre-wrap;
}
.review-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 14px;
padding: 20px;
border: 1px solid var(--line);
background: var(--panel);
}
.review-grid textarea {
min-height: 96px;
resize: vertical;
}
.review-markers {
display: flex;
flex-wrap: wrap;
gap: 10px 18px;
grid-column: 1 / -1;
margin: 0;
padding: 12px;
border: 1px solid var(--line);
}
.review-markers label {
color: var(--text);
font-size: var(--ui-control-size);
}
.all-fields {
padding-inline: 18px;
border: 1px solid var(--line);
background: var(--panel);
}
.all-fields summary {
cursor: pointer;
color: var(--heading);
font-weight: var(--ui-strong-weight);
}
.all-fields table {
margin-top: 12px;
}
.all-fields th {
position: static;
width: 220px;
}
.linked-results-inline {
margin-top: 18px;
}
.linked-results {
display: grid;
gap: 20px;
min-width: 0;
}
.linked-results-heading {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--ui-strong-weight);
line-height: 1.35;
}
.linked-results-empty {
padding: 18px;
border-left: 3px solid var(--warning);
background: color-mix(in srgb, var(--warning) 12%, transparent);
line-height: 1.55;
}
.result-block {
min-width: 0;
padding: 0;
border: 0;
background: transparent;
line-height: 1.55;
}
.result-block__title {
margin: 0 0 10px;
color: var(--heading);
font-size: var(--ui-heading-size);
font-weight: var(--ui-strong-weight);
line-height: 1.35;
}
.result-block__subtitle {
margin: 0 0 10px;
color: var(--heading);
font-size: var(--ui-body-size);
font-weight: var(--ui-strong-weight);
line-height: 1.4;
}
.result-block__preamble {
margin: 0 0 10px;
color: var(--text);
font-size: var(--ui-reading-size);
line-height: 1.55;
}
.maester-error {
display: grid;
gap: var(--space-4);
min-width: 0;
}
.maester-error__summary {
margin: 0;
padding: var(--space-4);
border-left: var(--bw-emphasis) solid var(--critical);
color: var(--heading);
background: color-mix(in srgb, var(--critical) 8%, transparent);
font-size: var(--type-body-size);
line-height: 1.55;
}
.maester-error__facts {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0 var(--space-5);
margin: 0;
}
.maester-error__facts > div {
display: grid;
grid-template-columns: minmax(110px, .35fr) minmax(0, 1fr);
gap: var(--space-3);
padding: var(--space-2) 0;
border-bottom: var(--border-hair) solid var(--line);
}
.maester-error__facts dt {
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.maester-error__facts dd {
min-width: 0;
margin: 0;
color: var(--text);
font-size: var(--type-table-body-size);
line-height: 1.45;
overflow-wrap: anywhere;
}
.maester-error__raw {
min-width: 0;
color: var(--muted);
font-size: var(--type-button-size);
}
.maester-error__raw summary {
width: fit-content;
cursor: pointer;
color: var(--heading);
font-weight: var(--fw-semibold);
}
.maester-error__raw pre {
max-width: 100%;
margin: var(--space-3) 0 0;
padding: var(--space-3);
border: var(--border-hair) solid var(--line);
color: var(--text);
background: var(--surface-inset);
font-family: inherit;
font-size: var(--type-table-body-size);
line-height: 1.5;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.result-block > .rich-text-table-wrap:last-child {
margin-bottom: 0;
}
@media (max-width: 760px) {
.maester-error__facts {
grid-template-columns: minmax(0, 1fr);
}
.variant-comparison__setting dl > div,
.variant-comparison__technical dl > div {
grid-template-columns: minmax(0, 1fr);
gap: var(--space-1);
}
}
.results-window {
--results-action-width: 84px;
--result-edge: var(--marker-width);
--cluster-bar-h: 34px;
position: fixed;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
width: min(1040px, 78vw);
height: auto;
min-width: 440px;
max-width: 100vw;
max-height: calc(100vh - 144px);
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--legacy-radius-sm);
color: var(--text);
background: var(--bg);
overflow: visible;
}
.results-window:not(.is-minimized) {
box-shadow: var(--shadow-overlay);
}
.results-window.is-minimized {
height: auto;
border-top: 0;
border-left: var(--result-edge) solid var(--result-color);
border-radius: 0;
}
.results-window.is-minimized.is-dimmed {
filter: grayscale(1);
opacity: 0.42;
}
.results-window.is-minimized .results-window-body {
display: none;
}
.results-window.is-minimized .results-window-head {
min-height: 33px;
border-radius: 0;
border-bottom: 0;
}
.results-window.is-minimized.is-cluster-bottom,
.results-window.is-minimized.is-cluster-bottom .results-window-head {
border-radius: 0 0 var(--radius-result-cluster) var(--radius-result-cluster);
}
.results-window.is-minimized .results-window-result-summary {
align-self: stretch;
min-width: 78px;
padding-right: 10px;
border-right: var(--border-hair) solid var(--line);
}
.results-cluster-bar {
position: absolute;
top: calc(-1 * var(--cluster-bar-h));
left: calc(-1 * var(--result-edge));
right: -1px;
z-index: 100;
display: flex;
align-items: center;
height: var(--cluster-bar-h);
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--radius-result-cluster) var(--radius-result-cluster) 0 0;
color: var(--heading);
background: var(--panel-raised);
cursor: move;
touch-action: none;
user-select: none;
}
.results-cluster-slot {
display: grid;
place-items: center;
align-self: stretch;
flex: 0 0 auto;
width: 34px;
padding: 0;
border: 0;
border-right: var(--border-hair) solid var(--line);
border-radius: 0;
color: var(--muted);
background: transparent;
}
.results-cluster-slot:hover {
color: var(--marking-color);
background: var(--panel-hover);
}
.results-cluster-total {
display: grid;
place-items: center;
min-width: 58px;
height: 22px;
margin-left: 10px;
padding: 0 8px;
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--legacy-radius-sm);
color: var(--heading);
background: var(--surface-inset);
font-family: var(--font-mono);
font-size: var(--ui-label-size);
font-variant-numeric: tabular-nums;
}
.results-cluster-bar-actions {
display: flex;
align-items: center;
gap: 6px;
margin-left: auto;
padding-right: 8px;
}
.result-dock-slot {
display: flex;
align-items: center;
flex: 0 0 auto;
}
.result-dock {
display: flex;
align-items: center;
gap: 8px;
}
.result-dock-toggle {
display: grid;
place-items: center;
width: var(--control-height);
height: var(--control-height);
padding: 0;
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--radius-result-cluster);
color: var(--heading);
background: var(--panel-raised);
}
.result-dock-toggle:hover {
color: var(--marking-color);
border-color: var(--marking-color);
background: var(--panel-hover);
}
.result-dock-count {
display: grid;
place-items: center;
min-width: 58px;
height: var(--control-height);
padding: 0 8px;
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--legacy-radius-sm);
color: var(--heading);
background: var(--surface-inset);
font-family: var(--font-mono);
font-size: var(--ui-label-size);
font-variant-numeric: tabular-nums;
}
.result-dock-marks {
display: flex;
align-items: center;
gap: 2px;
min-width: 0;
overflow: hidden;
}
.result-dock-mark {
display: grid;
place-items: center;
width: 22px;
height: 22px;
flex: 0 0 auto;
padding: 0;
border: 0;
border-radius: var(--legacy-radius-sm);
color: var(--result-color);
background: transparent;
}
.result-dock-mark:hover {
background: var(--panel-hover);
}
.result-dock-mark .triangle-icon {
width: 14px;
height: 14px;
}
.results-cluster-bookmark,
.results-cluster-close,
.results-window-bookmark {
display: grid;
place-items: center;
width: 22px;
height: 22px;
padding: 0;
border: 0;
border-radius: var(--legacy-radius-sm);
color: var(--muted);
background: transparent;
}
.results-cluster-bookmark:hover,
.results-cluster-close:hover,
.results-window-bookmark:hover {
color: var(--heading);
background: var(--panel-hover);
}
.results-cluster-bookmark.is-bookmarked,
.results-window-bookmark.is-bookmarked {
color: var(--state-bookmark);
}
.results-window-resize {
position: absolute;
z-index: 5;
}
.results-window-resize-n,
.results-window-resize-s {
left: 10px;
right: 10px;
height: 5px;
cursor: ns-resize;
}
.results-window-resize-n {
top: 0;
}
.results-window-resize-s {
bottom: 0;
}
.results-window-resize-e,
.results-window-resize-w {
top: 10px;
bottom: 10px;
width: 5px;
cursor: ew-resize;
}
.results-window-resize-e {
right: 0;
}
.results-window-resize-w {
left: 0;
}
.results-window-resize-ne,
.results-window-resize-nw,
.results-window-resize-se,
.results-window-resize-sw {
width: 12px;
height: 12px;
}
.results-window-resize-ne {
top: 0;
right: 0;
cursor: nesw-resize;
}
.results-window-resize-nw {
top: 0;
left: 0;
cursor: nwse-resize;
}
.results-window-resize-se {
bottom: 0;
right: 0;
cursor: nwse-resize;
}
.results-window-resize-sw {
bottom: 0;
left: 0;
cursor: nesw-resize;
}
.results-window-head {
display: flex;
align-items: stretch;
justify-content: space-between;
gap: 0;
min-height: 32px;
min-width: 0;
padding: 0 8px 0 0;
color: var(--heading);
background: var(--panel-soft);
border-bottom: 1px solid var(--line);
cursor: move;
touch-action: none;
user-select: none;
}
.results-window-head h2 {
display: flex;
align-items: stretch;
gap: 10px;
min-width: 0;
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--ui-strong-weight);
line-height: 1.35;
}
.results-window-result-summary {
display: inline-flex;
align-items: center;
align-self: center;
flex: 0 0 auto;
gap: 5px;
padding-left: 8px;
color: var(--heading);
font-family: var(--font-mono);
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.results-window-toggle,
.results-window-toggle-icon {
display: grid;
place-items: center;
width: 20px;
height: 20px;
flex: 0 0 auto;
color: var(--result-color);
}
.results-window-toggle {
padding: 0;
border: 0;
border-radius: 3px;
background: transparent;
}
.results-window-toggle:hover {
color: var(--result-color);
background: var(--panel-hover);
}
.results-window-toggle .triangle-icon,
.results-window-toggle-icon .triangle-icon {
width: 16px;
height: 16px;
}
.results-window-name {
display: flex;
align-items: center;
min-width: 0;
padding: 5px 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.results-window-actions {
display: flex;
align-items: center;
flex: 0 0 auto;
gap: 6px;
padding: 0 0 0 8px;
}
.results-window-action {
align-self: center;
min-width: var(--results-action-width);
}
.results-window-close {
align-self: center;
display: grid;
place-items: center;
width: 22px;
height: 22px;
padding: 0;
border: 0;
border-radius: 3px;
color: var(--muted);
background: transparent;
}
.results-window-close:hover {
color: var(--heading);
background: var(--panel-hover);
}
.results-window-body {
min-height: 0;
padding: var(--panel-inset);
overflow: auto;
font-size: var(--ui-reading-size);
line-height: 1.45;
}
@media (max-width: 980px) {
.dashboard-grid,
.review-grid {
grid-template-columns: 1fr 1fr;
}
.finding-reader > * {
width: calc(100% - 36px);
}
}
@media (max-width: 620px) {
.dashboard-grid,
.review-grid {
grid-template-columns: 1fr;
}
.reader-heading {
grid-template-columns: auto minmax(0, 1fr);
}
.reader-heading-actions {
grid-column: 1 / -1;
}
.results-window:not(.is-maximized) {
left: 8px !important;
top: 8px !important;
width: calc(100vw - 16px);
height: auto;
max-height: min(78vh, 680px);
min-width: 0;
}
}
@media (prefers-reduced-motion: reduce) {
.finding-card {
transition: none;
}
.finding-card:hover {
transform: none;
}
}
.rich-text-value > :first-child {
margin-top: 0;
}
.rich-text-value > :last-child {
margin-bottom: 0;
}
.rich-text-value p {
margin: 0 0 14px;
}
.rich-text-value ul,
.rich-text-value ol {
margin: 8px 0 14px;
padding-left: 24px;
}
.rich-text-value a {
color: var(--heading);
text-decoration: underline;
text-underline-offset: 2px;
}
.rich-text-value li {
margin: 0 0 4px;
}
.inline-results-link {
display: inline;
padding: 0;
margin: 0;
border: none;
background: transparent;
color: var(--heading);
font-size: inherit;
font-family: inherit;
font-weight: var(--ui-strong-weight);
text-decoration: underline;
text-underline-offset: 2px;
cursor: pointer;
}
.inline-results-link:hover {
color: var(--marking-color);
}
.inline-results-link-disabled {
text-decoration: underline;
text-underline-offset: 2px;
opacity: 0.85;
}
.rich-text-value h5,
.rich-text-value h6 {
margin: 16px 0 6px;
color: var(--heading);
font-size: var(--ui-body-size);
font-weight: var(--ui-strong-weight);
}
.rich-text-value h6 {
color: var(--muted);
font-size: var(--ui-control-size);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.rich-text-value code {
padding: 1px 4px;
border-radius: var(--legacy-radius-sm);
background: var(--surface-inset);
font-family: var(--font-mono, monospace);
font-size: var(--ui-control-size);
}
.technical-path,
.rich-text-value code.technical-path {
display: inline-block;
vertical-align: top;
max-width: 100%;
min-width: 0;
padding: var(--space-1) var(--space-2);
border: var(--border-hair) solid var(--line);
border-radius: 0;
background: var(--surface-inset);
color: var(--text);
font-family: var(--font-path);
font-size: inherit;
font-weight: var(--fw-regular);
line-height: inherit;
white-space: pre-wrap;
overflow-wrap: anywhere;
word-break: normal;
text-transform: none;
}
.rich-text-code {
margin: 8px 0 14px;
padding: var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--surface-inset);
font-family: var(--font-mono, monospace);
font-size: var(--ui-control-size);
white-space: pre-wrap;
overflow-wrap: anywhere;
word-break: normal;
word-wrap: break-word;
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
.rich-text-table-wrap {
margin: 8px 0 14px;
overflow-x: auto;
}
.rich-text-table-wrap,
.results-window-body {
scrollbar-width: thin;
scrollbar-color: var(--line-strong) var(--surface-inset);
}
.rich-text-table-wrap::-webkit-scrollbar,
.results-window-body::-webkit-scrollbar {
width: 11px;
height: 11px;
}
.rich-text-table-wrap::-webkit-scrollbar-track,
.results-window-body::-webkit-scrollbar-track {
background: var(--surface-inset);
}
.rich-text-table-wrap::-webkit-scrollbar-thumb,
.results-window-body::-webkit-scrollbar-thumb {
border: var(--border-hair) solid var(--surface-inset);
border-radius: var(--legacy-radius-sm);
background: var(--line-strong);
}
.rich-text-table-wrap::-webkit-scrollbar-thumb:hover,
.results-window-body::-webkit-scrollbar-thumb:hover {
background: var(--muted);
}
.rich-text-table-wrap::-webkit-scrollbar-corner,
.results-window-body::-webkit-scrollbar-corner {
background: var(--surface-inset);
}
.rich-text-table {
border-collapse: collapse;
width: auto;
min-width: 100%;
}
.rich-text-table th,
.rich-text-table td {
padding: 4px var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
text-align: left;
vertical-align: top;
font-size: var(--ui-control-size);
}
.rich-text-table th {
position: static;
color: var(--heading);
background: var(--surface-panel-raised);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
white-space: nowrap;
}
.rich-text-table.is-column-resizable th {
position: relative;
}
.rich-text-table.is-column-resizable.has-custom-column-widths {
min-width: 0;
}
.results-window.is-maximized .rich-text-table.is-column-resizable:not(.has-custom-column-widths) {
width: max-content;
min-width: max-content;
table-layout: auto;
}
.results-window.is-maximized .rich-text-table.is-column-resizable:not(.has-custom-column-widths) th,
.results-window.is-maximized .rich-text-table.is-column-resizable:not(.has-custom-column-widths) td {
white-space: nowrap;
}
.result-column-resizer {
position: absolute;
z-index: 2;
top: 0;
right: -5px;
bottom: 0;
width: 10px;
cursor: col-resize;
touch-action: none;
user-select: none;
}
.result-column-resizer::after {
position: absolute;
top: 0;
right: 4px;
bottom: 0;
width: var(--border-hair);
background: transparent;
content: "";
}
.result-column-resizer:hover::after,
.result-column-resizer:focus-visible::after {
background: var(--focus-ring);
}
.result-column-instructions {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.rich-text-table tr.rich-text-table-row--highlight td {
background: var(--evidence-highlight-bg);
color: var(--evidence-highlight-text);
font-weight: var(--ui-strong-weight);
}
.rich-text-table tr.rich-text-table-row--criterion td {
background: var(--criterion-highlight-bg);
color: var(--criterion-highlight-text);
font-weight: var(--ui-strong-weight);
}
.rich-text-table tr.rich-text-table-row--violation td {
background: var(--violation-highlight-bg);
color: var(--violation-highlight-text);
font-weight: var(--ui-strong-weight);
}
.donut-metric-rack {
display: grid;
grid-template-columns: repeat(6, minmax(0, 1fr));
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;
}
.donut-metric-card {
position: relative;
display: grid;
grid-template-rows: auto minmax(0, 1fr);
min-width: 0;
min-height: var(--donut-card-min-h);
padding: var(--space-5) var(--space-3) var(--space-2);
overflow: hidden;
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
color: var(--donut-all);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
}
.donut-metric-card__title {
min-width: 0;
margin: 0;
overflow: hidden;
color: var(--donut-label);
font: var(--fw-regular) var(--donut-title-size) / 1.15 var(--font-donut-display);
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
}
.donut-metric-card__plot {
position: relative;
align-self: end;
justify-self: center;
width: min(100%, var(--donut-ring-size));
aspect-ratio: 1;
}
.donut-metric-card__plot svg {
display: block;
width: 100%;
height: 100%;
overflow: visible;
transform: rotate(-90deg);
}
.donut-metric-card__plot circle {
fill: none;
stroke-width: var(--donut-ring-stroke);
}
.donut-metric-card__track {
stroke: var(--donut-track);
}
.donut-metric-card__progress {
stroke: currentColor;
animation: donut-progress-build var(--dur-data-build) var(--ease-data-build) both;
}
@keyframes donut-progress-build {
from {
stroke-dasharray: 0 100;
}
to {
stroke-dasharray: var(--donut-progress-dash);
}
}
.donut-metric-card__values {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: var(--font-donut-display);
font-variant-numeric: tabular-nums;
line-height: 1;
}
.donut-metric-card__primary {
position: relative;
display: block;
}
.donut-metric-card__primary strong {
color: var(--donut-value);
font-size: var(--donut-value-size);
font-weight: var(--fw-semibold);
}
.donut-metric-card__primary span {
position: absolute;
left: calc(100% + var(--space-1));
bottom: 0;
color: var(--donut-value);
font-size: var(--donut-percent-size);
font-weight: var(--fw-semibold);
}
.donut-metric-card__primary.is-compact strong {
font-size: calc(var(--donut-value-size) * .85);
}
.donut-metric-card__primary.is-compact span {
font-size: var(--type-meta-size);
}
.donut-metric-card__values > small {
margin-top: var(--space-2);
color: var(--donut-label);
font-size: var(--type-meta-size);
font-weight: var(--fw-regular);
}
.donut-metric-card--all {
color: var(--donut-all);
}
.donut-metric-card--deviation {
color: var(--donut-deviation);
}
.donut-metric-card--passed {
color: var(--donut-passed);
}
.donut-metric-card--not-applicable {
color: var(--donut-not-applicable);
}
.donut-metric-card--not-run {
color: var(--donut-not-run);
}
.donut-metric-card--error {
color: var(--donut-error);
}
.donut-metric-card--critical {
color: var(--critical);
}
.donut-metric-card--high {
color: var(--high);
}
.donut-metric-card--medium {
color: var(--medium);
}
.donut-metric-card--low {
color: var(--low);
}
.donut-metric-card--info {
color: var(--info);
}
.sidebar-severity-rack {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: var(--segment-gap);
flex: 1 1 auto;
min-height: 0;
margin: 0 var(--space-3) var(--space-2);
padding: var(--segment-inset);
overflow-y: auto;
border: var(--border-hair) solid var(--segment-border);
border-radius: var(--segment-radius);
background: var(--segment-surface);
box-shadow: none;
scrollbar-color: var(--border-strong) var(--segment-surface);
scrollbar-width: thin;
}
.sidebar-severity-card {
min-height: calc(var(--donut-ring-size) + var(--space-2));
padding: var(--space-3) var(--space-2) var(--space-2);
cursor: pointer;
}
.sidebar-severity-card .donut-metric-card__title {
font-size: var(--fs-sm);
}
.sidebar-severity-card .donut-metric-card__plot {
width: calc(var(--donut-ring-size) - var(--space-8));
}
.sidebar-severity-card .donut-metric-card__primary strong {
font-size: var(--donut-compact-value-size);
}
.sidebar-severity-card .donut-metric-card__primary span {
left: calc(100% + var(--donut-compact-unit-gap));
font-size: var(--donut-compact-percent-size);
}
.sidebar-severity-card:hover {
border-color: transparent;
}
.sidebar-severity-card[aria-pressed=true] {
border-color: currentColor;
outline: var(--bw-emphasis) solid currentColor;
outline-offset: calc(-1 * var(--bw-emphasis));
}
@media (prefers-reduced-motion: reduce) {
.donut-metric-card__progress {
animation: none;
}
}
@media (max-width: 1100px) {
.donut-metric-rack {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
@media (max-width: 760px) {
.donut-metric-rack {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
.backend-connection-dialog__content {
display: grid;
grid-template-columns: 32px minmax(0, 1fr);
gap: var(--space-4);
align-items: start;
}
.backend-connection-dialog__icon {
display: grid;
place-items: center;
width: 32px;
height: 32px;
color: var(--state-active-text);
background: var(--warning);
font-size: var(--type-detail-title-size);
font-weight: var(--fw-bold);
}
.backend-connection-dialog__content p {
margin: 0;
color: var(--text);
font-size: var(--type-body-size);
line-height: 1.5;
}
.backend-connection-dialog__content .backend-connection-dialog__hint {
margin-top: var(--space-3);
color: var(--muted);
font-size: var(--type-meta-size);
}
/* src/styles/dynamic-filters.css */
.primary-filter-group {
display: flex;
align-items: center;
flex: 0 1 auto;
flex-wrap: nowrap;
gap: 6px;
min-width: 0;
padding: 0;
border: 0;
border-radius: 0;
background: transparent;
}
.primary-filter-group .select.dynamic-facet-select {
height: 28px;
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--radius-sm);
color: var(--text);
background-color: var(--surface-input);
font-size: var(--ui-label-size);
font-weight: var(--fw-medium);
}
.primary-filter-group .select.dynamic-facet-select option {
color: var(--text);
background: var(--panel-raised);
font-weight: 400;
}
.dynamic-facet-select {
flex: 1 1 0;
width: auto;
min-width: 92px;
max-width: 200px;
height: 28px;
border-color: var(--line-strong);
font-size: var(--ui-label-size);
}
.search-tools > .dynamic-facet-select.is-source-scan {
margin-left: auto;
}
.dynamic-facet-select.is-gpo-backup {
flex: 0 1 340px;
min-width: min(100%, 340px);
max-width: 100%;
}
.primary-filter-group .select.dynamic-facet-select.is-filtered,
.select.dynamic-facet-select.is-filtered,
.dynamic-range-filter.is-filtered {
border-color: var(--state-progress);
color: var(--sev-on);
background-color: var(--state-progress);
font-weight: var(--ui-strong-weight);
}
.dynamic-range-filter.is-filtered .input {
color: var(--text);
background: var(--surface-inset);
}
.search-input.is-filtered {
border-color: var(--state-progress);
color: var(--sev-on);
background: var(--state-progress);
font-weight: var(--ui-strong-weight);
}
.search-input.is-filtered + .search-clear-btn {
border-left-color: color-mix(in srgb, var(--sev-on) 45%, transparent);
color: var(--sev-on);
}
.search-input.is-filtered + .search-clear-btn:hover:not(:disabled) {
color: var(--sev-on);
background: color-mix(in srgb, var(--sev-on) 14%, transparent);
}
.search-tools .btn.standard-filter-btn,
.search-tools .btn.standard-filter-btn:hover {
height: 24px;
padding: 2px 8px;
border: 1px solid var(--button-border);
border-radius: 0;
color: var(--button-marked-text);
background: var(--button-marked-bg);
font-weight: 600;
}
.dynamic-range-filter {
display: grid;
grid-template-columns: auto 108px 108px;
align-items: center;
gap: var(--legacy-space-1);
flex: 0 0 auto;
min-height: var(--control-height);
padding: 2px var(--legacy-space-2);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
color: var(--muted);
background: var(--panel);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
white-space: nowrap;
}
.dynamic-range-filter input {
width: 108px;
min-width: 0;
height: 22px;
padding: 2px var(--legacy-space-1);
font-size: var(--ui-label-size);
}
.import-quality {
font-weight: var(--ui-label-weight);
}
.import-quality-success {
color: var(--success);
}
.import-quality-warning {
color: var(--warning);
}
.import-quality-error {
color: var(--danger);
}
.import-quality-neutral {
color: var(--muted);
}
.view-bookmark-bar {
display: flex;
align-items: center;
gap: var(--space-2);
flex: 1 1 auto;
min-width: 0;
}
.view-bookmark-create {
flex: 0 0 auto;
height: var(--btn-h);
font-size: var(--ui-label-size);
}
.view-bookmark-list {
display: flex;
align-items: center;
gap: var(--space-2);
flex: 1 1 auto;
min-width: 0;
overflow: visible;
}
.view-bookmark-item {
display: inline-flex;
align-items: stretch;
flex: 0 0 auto;
width: auto;
height: var(--btn-h);
min-width: 0;
}
.view-bookmark-entry {
display: block;
flex: 0 0 auto;
width: auto;
min-width: 0;
height: var(--btn-h);
border-color: var(--band-border);
border-right: 0;
font-size: var(--ui-label-size);
white-space: nowrap;
}
.view-bookmark-item.is-path {
outline: 2px solid var(--graph-alert);
outline-offset: -2px;
}
.view-bookmark-remove {
flex: 0 0 22px;
width: 22px;
height: var(--btn-h);
padding: 0;
border: 1px solid var(--band-border);
border-radius: 0;
color: var(--button-text);
background: var(--button-bg);
cursor: pointer;
}
.view-bookmark-remove:hover {
background: var(--button-bg-hover);
}
.view-bookmark-dialog-backdrop {
position: fixed;
inset: 0;
z-index: 1000;
display: grid;
place-items: center;
padding: var(--space-4);
background: var(--surface-scrim);
}
.view-bookmark-dialog {
display: grid;
gap: var(--space-3);
width: min(340px, 100%);
padding: var(--space-4);
border: var(--bw-hairline) solid var(--border-strong);
border-radius: var(--radius-md);
color: var(--text-primary);
background: var(--surface-overlay);
box-shadow: var(--shadow-popover);
}
.view-bookmark-dialog label {
color: var(--text-secondary);
font-size: var(--ui-label-size);
}
.view-bookmark-dialog small {
color: var(--danger);
}
.view-bookmark-dialog footer {
display: flex;
justify-content: flex-end;
gap: var(--space-2);
}
/* src/styles/datahub.css */
.datahub-page {
width: 100%;
min-height: 100%;
padding: var(--panel-inset);
color: var(--text);
background: var(--surface-app);
}
.datahub-page > * {
width: min(1180px, 100%);
margin-inline: auto;
}
.datahub-hero {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: var(--legacy-space-6);
padding: 0 0 var(--legacy-space-5);
border-bottom: var(--border-hair) solid var(--line);
}
.datahub-hero h2 {
margin: var(--legacy-space-1) 0 var(--legacy-space-2);
color: var(--heading);
font-size: clamp(17px, 2vw, 22px);
line-height: 1.15;
letter-spacing: -.01em;
}
.datahub-hero p {
max-width: 690px;
margin: 0;
color: var(--muted);
font-size: var(--ui-body-size);
line-height: 1.5;
}
.datahub-eyebrow,
.datahub-section-heading span {
color: var(--muted);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.datahub-hero-actions,
.datahub-form-actions {
display: flex;
gap: var(--legacy-space-2);
flex: 0 0 auto;
}
.datahub-projects,
.datahub-create {
margin-top: var(--legacy-space-6);
}
.datahub-section-heading {
display: flex;
align-items: end;
justify-content: space-between;
gap: var(--legacy-space-5);
margin-bottom: var(--legacy-space-3);
}
.datahub-section-heading h3 {
margin: 0;
color: var(--heading);
font-size: var(--ui-body-size);
}
.datahub-section-heading > strong {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 28px;
height: 22px;
padding: 1px 6px;
border: 1px solid var(--border-default);
border-radius: 0;
color: var(--text-primary);
background: var(--surface-input);
font-size: var(--ui-value-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.datahub-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(0, var(--tile-content-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);
}
.datahub-card {
display: grid;
grid-template-columns: 40px minmax(0, 1fr) auto;
align-items: center;
gap: var(--legacy-space-3);
min-width: 0;
min-height: 96px;
padding: var(--legacy-space-4);
overflow: hidden;
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
color: var(--text);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
text-align: left;
transition: border-color .12s ease, background .12s ease;
}
.datahub-card:hover {
border-color: transparent;
background: var(--tile-surface-hover);
}
.datahub-card-mark {
display: grid;
place-items: center;
width: 40px;
height: 40px;
border-radius: var(--legacy-radius-sm);
color: var(--button-accent-text);
background: var(--marking-color);
font-size: var(--ui-control-size);
font-weight: var(--ui-strong-weight);
letter-spacing: .05em;
}
.datahub-card-body {
display: grid;
gap: var(--legacy-space-1);
min-width: 0;
}
.datahub-card-body strong {
color: var(--heading);
font-size: var(--ui-body-size);
overflow: hidden;
text-overflow: ellipsis;
}
.datahub-card-body > span {
color: var(--muted);
font-size: var(--ui-control-size);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.datahub-card-body small {
color: var(--muted);
font-size: var(--ui-small-size);
}
.datahub-card-arrow {
color: var(--muted);
font-size: var(--ui-body-size);
}
.datahub-create {
display: grid;
grid-template-columns: 1fr 1fr auto;
align-items: end;
gap: var(--legacy-space-3);
padding: var(--legacy-space-5);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
}
.datahub-create .datahub-section-heading {
grid-column: 1 / -1;
}
.datahub-create label {
display: grid;
gap: var(--legacy-space-2);
color: var(--heading);
font-size: var(--ui-control-size);
font-weight: var(--ui-label-weight);
}
.datahub-create label small {
color: var(--muted);
font-weight: 400;
}
.datahub-alert,
.datahub-empty,
.datahub-loading {
margin-top: var(--legacy-space-6);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
}
.datahub-empty h3 {
margin: 0 0 var(--legacy-space-2);
color: var(--heading);
}
.datahub-empty p {
max-width: 650px;
color: var(--muted);
line-height: 1.5;
}
.datahub-alert {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--legacy-space-3);
padding: var(--legacy-space-3);
border-color: var(--danger);
color: var(--danger-text);
background: var(--danger-surface);
}
.datahub-empty {
padding: var(--space-7) var(--legacy-space-6);
text-align: center;
}
.datahub-empty p {
margin-inline: auto;
}
.datahub-loading {
display: flex;
justify-content: center;
gap: var(--legacy-space-3);
padding: var(--space-7);
color: var(--muted);
}
.datahub-loading i {
width: 14px;
height: 14px;
border: 2px solid var(--line-strong);
border-top-color: var(--marking-color);
border-radius: 50%;
animation: datahub-spin .8s linear infinite;
}
@keyframes datahub-spin {
to {
transform: rotate(360deg);
}
}
@media (max-width: 800px) {
.datahub-page {
padding: var(--panel-inset);
}
.datahub-hero {
align-items: flex-start;
flex-direction: column;
}
.datahub-create {
grid-template-columns: 1fr;
}
.datahub-create .datahub-section-heading {
grid-column: 1;
}
}
.btn.danger {
border: 1px solid var(--button-border);
border-radius: var(--btn-radius);
color: var(--button-text);
background: var(--button-bg);
}
.btn.danger:hover {
border-color: var(--button-border);
color: var(--sev-on);
background: var(--sev-critical);
}
.datahub-card {
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: space-between;
min-height: 132px;
padding: var(--legacy-space-4);
}
.datahub-card-main {
display: grid;
grid-template-columns: 40px minmax(0, 1fr);
align-items: center;
gap: var(--legacy-space-3);
}
.datahub-card-actions {
display: flex;
justify-content: flex-end;
gap: var(--legacy-space-2);
margin-top: var(--legacy-space-4);
padding-top: var(--legacy-space-3);
border-top: var(--border-hair) solid var(--line);
}
.datahub-card-actions .btn {
min-width: 60px;
}
.tenant-header {
display: grid;
grid-template-columns: 1fr auto;
gap: var(--legacy-space-6);
padding-bottom: var(--legacy-space-6);
border-bottom: var(--border-hair) solid var(--line);
}
.tenant-back {
grid-column: 1 / -1;
justify-self: start;
padding: 0;
border: 0;
color: var(--muted);
background: transparent;
font-size: var(--ui-control-size);
font-weight: var(--ui-label-weight);
}
.tenant-back:hover {
color: var(--heading);
}
.tenant-title {
display: flex;
align-items: center;
gap: var(--legacy-space-4);
min-width: 0;
}
.tenant-title .datahub-card-mark {
width: 46px;
height: 46px;
flex: 0 0 46px;
}
.tenant-title h2 {
margin: 0 0 var(--legacy-space-1);
color: var(--heading);
font-size: clamp(17px, 2vw, 22px);
line-height: 1.15;
}
.tenant-title p {
margin: 0;
color: var(--muted);
}
.tenant-actions {
display: flex;
align-items: center;
gap: var(--legacy-space-2);
}
.tenant-files {
margin-top: var(--legacy-space-6);
}
.tenant-file-table {
overflow: hidden;
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
}
.tenant-file-row {
display: grid;
grid-template-columns: 150px minmax(145px, .9fr) minmax(150px, 1.2fr) 72px 85px 145px 78px;
align-items: center;
gap: var(--legacy-space-3);
min-height: 48px;
padding: var(--legacy-space-2) var(--legacy-space-3);
border-top: var(--border-hair) solid var(--line);
font-size: var(--ui-control-size);
}
.tenant-file-row:first-child {
border-top: 0;
}
.tenant-file-row:not(.tenant-file-head):hover {
background: var(--panel-hover);
}
.tenant-file-head {
min-height: var(--row-height);
color: var(--muted);
background: var(--panel-soft);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.tenant-file-row > span {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
}
.tenant-file-row b {
display: block;
color: var(--heading);
}
.tenant-file-row small {
display: block;
margin-top: 2px;
color: var(--muted);
}
.tenant-file-possible-duplicate {
border-left: 0;
}
.tenant-duplicate-badge {
width: fit-content;
padding: 1px var(--legacy-space-1);
border: var(--border-hair) solid var(--warning);
border-radius: var(--legacy-radius-sm);
color: var(--warning) !important;
background: transparent;
font-size: var(--ui-small-size);
font-weight: var(--ui-label-weight);
letter-spacing: .03em;
text-transform: uppercase;
}
.tenant-scan-delete {
min-width: 64px;
padding-inline: 8px;
}
.datahub-dialog-form {
display: grid;
gap: 16px;
}
.datahub-dialog-form label {
display: grid;
gap: 7px;
color: var(--heading);
font-size: var(--ui-label-size);
font-weight: var(--fw-semibold);
}
.datahub-dialog-form label small {
color: var(--muted);
font-weight: 400;
}
.datahub-dialog-form textarea {
min-height: 100px;
resize: vertical;
}
.datahub-dialog-form footer,
.datahub-delete-warning footer {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 4px;
padding-top: 16px;
border-top: 1px solid var(--line);
}
.datahub-delete-warning {
display: grid;
gap: 10px;
}
.datahub-delete-warning > strong {
color: var(--heading);
font-size: var(--ui-heading-size);
}
.datahub-delete-warning p {
color: var(--muted);
line-height: 1.6;
}
@media (max-width: 1050px) {
.tenant-file-head {
display: none;
}
.tenant-file-row {
grid-template-columns: 1fr 1fr;
gap: 8px 18px;
padding: 16px;
}
.tenant-file-row > span::before {
content: attr(data-label);
display: block;
margin-bottom: 3px;
color: var(--muted);
font-size: var(--ui-label-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
}
@media (max-width: 800px) {
.tenant-header {
grid-template-columns: 1fr;
}
.tenant-actions {
flex-wrap: wrap;
}
.tenant-file-row {
grid-template-columns: 1fr;
}
.datahub-card-actions {
flex-wrap: wrap;
}
}
.datahub-card.active {
border-color: var(--tile-selected-border);
outline: var(--bw-emphasis) solid var(--tile-selected-border);
outline-offset: calc(-1 * var(--bw-emphasis));
background: var(--tile-surface-hover);
}
.tenant-editor-header {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: end;
gap: var(--legacy-space-5);
padding-bottom: var(--legacy-space-6);
border-bottom: var(--border-hair) solid var(--line);
}
.tenant-editor-header .tenant-back {
grid-column: 1 / -1;
}
.tenant-editor-header h2 {
margin: var(--legacy-space-1) 0;
color: var(--heading);
font-size: clamp(17px, 2vw, 22px);
line-height: 1.15;
letter-spacing: -.01em;
}
.tenant-editor-header p {
max-width: 680px;
margin: 0;
color: var(--muted);
line-height: 1.5;
}
.tenant-editor {
margin-top: var(--legacy-space-6);
padding: var(--legacy-space-5);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
}
.tenant-editor-form {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
gap: var(--legacy-space-4);
}
.tenant-editor-form label {
display: grid;
grid-template-columns: auto 1fr;
gap: var(--legacy-space-2);
color: var(--heading);
font-size: var(--ui-control-size);
font-weight: var(--ui-label-weight);
}
.tenant-editor-form label > span {
justify-self: end;
color: var(--muted);
font-size: var(--ui-small-size);
font-weight: var(--fw-semibold);
}
.tenant-editor-form .input {
grid-column: 1 / -1;
}
.tenant-editor-description {
grid-column: 1 / -1;
}
.tenant-editor-description textarea {
min-height: 118px;
resize: vertical;
}
.tenant-editor-form footer {
display: flex;
grid-column: 1 / -1;
justify-content: flex-end;
gap: var(--legacy-space-2);
padding-top: var(--legacy-space-4);
border-top: var(--border-hair) solid var(--line);
}
.tenant-import-pending {
margin-top: var(--legacy-space-5);
padding: var(--legacy-space-5);
border: var(--border-hair) dashed var(--line-strong);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
}
.tenant-import-pending > span {
color: var(--muted);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.tenant-import-pending h3 {
margin: 6px 0;
color: var(--heading);
}
.tenant-import-pending p {
margin: 0;
color: var(--muted);
line-height: 1.55;
}
.tenant-files-empty {
padding-block: 36px;
}
@media (max-width: 800px) {
.tenant-editor-header {
grid-template-columns: 1fr;
align-items: start;
}
.tenant-editor-form {
grid-template-columns: 1fr;
}
.tenant-editor-description,
.tenant-editor-form footer {
grid-column: 1;
}
}
.viewer.app-area-data-hub,
.viewer.app-area-dashboard,
.viewer.app-area-db-structure {
overflow-x: hidden;
overflow-y: auto;
background: var(--surface-app);
scrollbar-color: var(--line-strong) var(--surface-app);
scrollbar-width: thin;
}
.viewer.app-area-data-hub {
scrollbar-gutter: stable;
}
.datahub-page {
box-sizing: border-box;
min-height: 100%;
background: var(--surface-app);
}
.datahub-card {
border-radius: var(--tile-radius);
box-shadow: var(--tile-card-shadow);
}
.tenant-editor,
.tenant-file-table,
.tenant-import-pending {
border-radius: var(--legacy-radius-sm);
box-shadow: var(--shadow);
}
.tenant-editor-header {
align-items: center;
}
.tenant-editor-header h2 {
font-weight: var(--ui-strong-weight);
letter-spacing: -.01em;
}
.tenant-editor {
padding: var(--legacy-space-5);
}
.tenant-file-table {
overflow-x: auto;
overflow-y: visible;
}
.tenant-file-row {
min-width: 860px;
min-height: 54px;
}
.tenant-save-feedback {
display: flex;
align-items: center;
gap: var(--legacy-space-3);
margin-top: var(--legacy-space-3);
padding: var(--legacy-space-2) var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
border-left-width: 3px;
border-radius: var(--legacy-radius-sm);
background: var(--panel);
font-size: var(--ui-body-size);
}
.tenant-save-feedback > span {
display: grid;
place-items: center;
width: 18px;
height: 18px;
color: var(--sev-on);
border-radius: 50%;
font-weight: var(--ui-strong-weight);
}
.tenant-save-feedback.success {
border-left-color: var(--success);
color: var(--heading);
}
.tenant-save-feedback.success > span {
background: var(--success);
}
.tenant-save-feedback.error {
border-left-color: var(--danger);
color: var(--heading);
}
.tenant-save-feedback.error > span {
background: var(--danger);
}
@media (max-width: 1050px) {
.tenant-file-row {
min-width: 0;
}
}
.tenant-actions {
flex-wrap: wrap;
}
.gpo-folder-import {
display: contents;
}
.gpo-folder-actions {
position: relative;
display: flex;
align-items: center;
gap: 8px;
}
.gpo-folder-feedback {
position: absolute;
z-index: 5;
top: calc(100% + var(--legacy-space-2));
right: 0;
width: min(420px, 75vw);
padding: var(--legacy-space-2) var(--legacy-space-3);
border: var(--border-hair) solid var(--line-strong);
border-left-width: 3px;
border-radius: var(--legacy-radius-sm);
color: var(--heading);
background: var(--panel-raised);
font-size: var(--ui-control-size);
line-height: 1.45;
box-shadow: var(--shadow);
}
.gpo-folder-feedback.success {
border-left-color: var(--success);
}
.gpo-folder-feedback.error {
border-left-color: var(--danger);
}
.gpo-status-panel {
order: 10;
flex: 1 0 100%;
min-width: 0;
margin-top: var(--legacy-space-3);
padding: var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
}
.gpo-status-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--legacy-space-3);
margin-bottom: var(--legacy-space-2);
color: var(--heading);
}
.gpo-status-empty {
margin: 0;
color: var(--muted);
font-size: var(--ui-body-size);
}
.gpo-status-list {
display: grid;
gap: var(--legacy-space-2);
}
.gpo-status-item {
display: grid;
grid-template-columns: minmax(220px, 1fr) minmax(260px, auto);
gap: var(--legacy-space-4);
padding: var(--legacy-space-2) var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
border-left: 3px solid var(--state-progress);
background: var(--panel-raised);
}
.gpo-status-item > div {
display: grid;
gap: var(--legacy-space-1);
min-width: 0;
}
.gpo-status-item strong {
color: var(--heading);
overflow-wrap: anywhere;
}
.gpo-status-item span {
color: var(--muted);
font-size: var(--ui-control-size);
}
.gpo-status-result {
justify-items: end;
text-align: right;
}
.gpo-status-item.state-succeeded {
border-left-color: var(--success);
}
.gpo-status-item.state-partial,
.gpo-status-item.state-recovery-required,
.gpo-status-item.state-upload-required,
.gpo-status-item.state-storage-unavailable {
border-left-color: var(--warning);
}
.gpo-status-item.state-dead-letter {
border-left-color: var(--danger);
}
.gpo-status-item code {
color: var(--danger-text);
font-size: var(--ui-control-size);
}
.gpo-status-actions {
display: flex;
justify-content: flex-end;
gap: var(--legacy-space-2);
margin-top: var(--legacy-space-1);
}
@media (max-width: 760px) {
.gpo-status-item {
grid-template-columns: 1fr;
}
.gpo-status-result {
justify-items: start;
text-align: left;
}
}
.gpo-status-error {
color: var(--warning);
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
justify-content: flex-end;
}
.gpo-status-error code {
color: inherit;
}
.db-structure-page > *,
.results-browser-page > * {
width: 100% !important;
max-width: none !important;
margin-inline: 0 !important;
}
.dashboard-page {
box-sizing: border-box;
display: grid;
align-content: start;
gap: var(--space-4);
width: 100%;
min-height: 100%;
padding: var(--panel-inset);
color: var(--text);
background: var(--surface-app);
container-type: inline-size;
}
.dashboard-page.panel-is-loading {
grid-template-rows: auto minmax(0, 1fr);
align-content: stretch;
}
.dashboard-page.panel-is-loading .panel-loading-state {
min-height: 0;
}
.dashboard-context {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-2) var(--space-5);
margin: 0;
padding: 0 var(--space-2);
color: var(--muted);
font-size: var(--ui-label-size);
}
.dashboard-context strong {
color: var(--heading);
font-size: var(--ui-body-size);
}
.dashboard-context .work-timeslot-select {
margin-left: auto;
}
.dashboard-status-rack {
display: grid;
grid-template-columns: 290px repeat(3, 210px) 250px;
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);
}
.dashboard-status-metric {
display: grid;
grid-template-columns: 98px minmax(0, 1fr);
align-items: center;
gap: var(--space-3);
min-width: 0;
min-height: 190px;
padding: var(--space-3);
overflow: hidden;
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
color: var(--text);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
text-align: left;
}
button.dashboard-status-metric {
cursor: pointer;
}
button.dashboard-status-metric:hover {
border-color: transparent;
background: var(--tile-surface-hover);
}
button.dashboard-status-metric:focus-visible {
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
button.dashboard-status-metric[aria-pressed=true] {
border-color: var(--tile-selected-border);
outline: var(--bw-emphasis) solid var(--tile-selected-border);
outline-offset: calc(-1 * var(--bw-emphasis));
}
.dashboard-status-metric-large {
grid-template-columns: 154px minmax(0, 1fr);
}
.dashboard-status-ring {
position: relative;
width: 98px;
height: 98px;
color: var(--donut-all);
}
.dashboard-status-metric-large .dashboard-status-ring {
width: 154px;
height: 154px;
}
.dashboard-status-ring svg {
display: block;
width: 100%;
height: 100%;
transform: rotate(-90deg);
}
.dashboard-status-ring circle {
fill: none;
stroke-width: var(--donut-ring-stroke);
}
.dashboard-status-ring-track {
stroke: var(--donut-track);
}
.dashboard-status-ring-progress {
stroke: currentColor;
}
.dashboard-status-ring > span {
position: absolute;
inset: 0;
display: flex;
align-items: flex-start;
justify-content: center;
padding-top: 36px;
color: var(--heading);
font-variant-numeric: tabular-nums;
}
.dashboard-status-metric-large .dashboard-status-ring > span {
padding-top: 57px;
}
.dashboard-donut-primary {
position: relative;
display: block;
line-height: 1;
}
.dashboard-status-ring > span strong {
display: block;
font: var(--fw-semibold) var(--donut-value-size) / 1 var(--font-donut-display);
}
.dashboard-status-metric-large .dashboard-status-ring > span strong {
font-size: calc(var(--donut-value-size) * 1.45);
}
.dashboard-status-ring > span small {
position: absolute;
left: calc(100% + var(--space-1));
bottom: 0;
color: var(--heading);
font-size: var(--donut-percent-size);
font-weight: var(--fw-semibold);
}
.dashboard-status-ring .dashboard-donut-primary.is-compact strong,
.dashboard-risk-donut .dashboard-donut-primary.is-compact strong {
font-size: calc(var(--donut-value-size) * .85);
}
.dashboard-status-ring .dashboard-donut-primary.is-compact small,
.dashboard-risk-donut .dashboard-donut-primary.is-compact small {
font-size: var(--type-meta-size);
}
.dashboard-status-ring-deviation {
color: var(--donut-error);
}
.dashboard-status-ring-passed {
color: var(--donut-passed);
}
.dashboard-status-ring-not-run {
color: var(--donut-deviation);
}
.dashboard-status-copy {
display: grid;
gap: var(--space-3);
min-width: 0;
max-width: 100%;
overflow: hidden;
}
.dashboard-status-copy > span {
min-width: 0;
color: var(--heading);
font-size: var(--ui-body-size);
overflow-wrap: normal;
word-break: normal;
hyphens: manual;
}
.dashboard-status-copy > strong {
display: grid;
gap: var(--space-1);
min-width: 0;
color: var(--heading);
font-size: calc(var(--ui-heading-size) * 1.35);
font-variant-numeric: tabular-nums;
white-space: normal;
}
.dashboard-status-copy > small {
display: block;
color: var(--muted);
font-size: var(--ui-body-size);
font-weight: var(--fw-regular);
line-height: 1.35;
overflow-wrap: normal;
word-break: normal;
hyphens: manual;
}
.dashboard-status-summary {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(100px, .8fr);
align-items: stretch;
min-width: 0;
min-height: 190px;
padding: var(--space-4);
overflow: hidden;
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
}
.dashboard-status-summary-stack {
display: grid;
align-content: center;
padding-right: var(--space-4);
border-right: var(--border-hair) solid var(--line-strong);
}
.dashboard-status-summary-stack button {
display: grid;
gap: var(--space-2);
min-height: 64px;
padding: var(--space-2);
border: 0;
border-radius: 0;
color: var(--text);
background: transparent;
text-align: left;
cursor: pointer;
}
.dashboard-status-summary-stack button + button {
border-top: var(--border-hair) solid var(--line);
}
.dashboard-status-summary-stack button:hover {
background: var(--panel-hover);
}
.dashboard-status-summary-stack button:focus-visible {
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
.dashboard-status-summary-stack span,
.dashboard-ioe-summary span {
color: var(--heading);
font-size: var(--ui-body-size);
}
.dashboard-status-summary-stack strong {
color: var(--heading);
font-size: var(--ui-body-size);
font-variant-numeric: tabular-nums;
}
.dashboard-ioe-summary {
display: grid;
align-content: center;
gap: var(--space-4);
min-width: 0;
padding: 0 0 0 var(--space-5);
border: 0;
color: inherit;
background: transparent;
text-align: left;
cursor: pointer;
}
.dashboard-ioe-summary:focus-visible {
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
.dashboard-ioe-summary:disabled {
cursor: default;
}
.dashboard-ioe-summary strong {
color: var(--chart-tone-emphasis);
font: var(--fw-semibold) calc(var(--donut-value-size) * 1.45) / 1 var(--font-donut-display);
font-variant-numeric: tabular-nums;
}
.dashboard-distribution-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
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);
}
.dashboard-lower-grid {
display: grid;
grid-template-columns: minmax(0, 1.15fr) minmax(420px, 1fr);
align-items: stretch;
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);
}
.dashboard-environment {
min-width: 0;
margin: 0;
padding: var(--space-4);
overflow: hidden;
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
}
.dashboard-environment .datahub-section-heading h2,
.dashboard-block h2 {
margin: 0;
color: var(--heading);
font-size: var(--ui-body-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.dashboard-coverage-summary {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
margin-bottom: var(--space-4);
padding-bottom: var(--space-4);
border-bottom: var(--border-hair) solid var(--line);
}
.dashboard-coverage-summary > span {
display: grid;
gap: var(--space-1);
min-width: 0;
padding: 0 var(--space-3);
text-align: center;
}
.dashboard-coverage-summary > span + span {
border-left: var(--border-hair) solid var(--line-strong);
}
.dashboard-coverage-summary strong {
color: var(--heading);
font-size: var(--ui-heading-size);
font-variant-numeric: tabular-nums;
}
.dashboard-coverage-summary small {
color: var(--muted);
font-size: var(--ui-label-size);
}
.dashboard-facts {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: var(--space-3) var(--space-5);
margin: 0;
}
.dashboard-facts div {
min-width: 0;
}
.dashboard-facts dt {
margin-bottom: var(--legacy-space-1);
color: var(--muted);
font-size: var(--ui-label-size);
}
.dashboard-facts dd {
margin: 0;
color: var(--heading);
font-size: var(--ui-body-size);
overflow-wrap: anywhere;
}
.dashboard-block {
min-width: 0;
padding: var(--space-4);
overflow: hidden;
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
}
.dashboard-distribution {
display: grid;
align-content: start;
gap: var(--space-4);
}
.dashboard-segmented-bar {
display: flex;
width: 100%;
height: 28px;
overflow: hidden;
border-radius: var(--tile-radius);
background: var(--surface-active);
}
.dashboard-segment {
--share: 0%;
flex: 0 0 var(--share);
min-width: 2px;
height: 100%;
background: var(--severity, var(--viz-1));
}
.dashboard-segment + .dashboard-segment {
border-left: var(--border-hair) solid var(--surface-panel);
}
.dashboard-distribution-legend {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: var(--space-2);
margin: 0;
padding: 0;
list-style: none;
}
.dashboard-legend-button {
display: flex;
align-items: flex-start;
gap: var(--space-2);
width: 100%;
min-height: 52px;
padding: var(--space-2);
border: var(--border-hair) solid transparent;
border-radius: var(--btn-radius);
color: var(--text);
background: transparent;
text-align: left;
cursor: pointer;
}
.dashboard-legend-button:hover {
border-color: var(--line);
background: var(--panel-hover);
}
.dashboard-legend-button:focus-visible {
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
.dashboard-legend-swatch {
flex: 0 0 10px;
width: 10px;
height: 10px;
margin-top: 3px;
background: var(--severity, var(--viz-1));
}
.dashboard-legend-copy {
display: grid;
gap: var(--space-1);
min-width: 0;
color: var(--muted);
font-size: var(--ui-control-size);
}
.dashboard-legend-copy > span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dashboard-legend-copy strong {
color: var(--heading);
font-size: var(--ui-body-size);
font-variant-numeric: tabular-nums;
}
.dashboard-legend-copy small {
color: var(--muted);
font-size: var(--ui-control-size);
font-weight: var(--fw-regular);
}
.dashboard-viz-1 {
--severity: var(--viz-1);
}
.dashboard-viz-2 {
--severity: var(--viz-2);
}
.dashboard-viz-3 {
--severity: var(--viz-3);
}
.dashboard-viz-4 {
--severity: var(--viz-4);
}
.dashboard-viz-5 {
--severity: var(--viz-5);
}
.dashboard-viz-6 {
--severity: var(--viz-6);
}
.severity-dashboard-cis-cat-without-severity {
--severity: var(--donut-not-run);
}
.dashboard-empty {
margin: 0;
color: var(--muted);
font-size: var(--ui-control-size);
}
.dashboard-risk-profile {
display: grid;
align-content: start;
}
.dashboard-risk-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-4);
min-height: 32px;
}
.dashboard-risk-tool {
min-height: 30px;
max-width: min(100%, 320px);
padding: var(--space-1) var(--space-2);
border: var(--border-hair) solid transparent;
border-radius: 0;
color: var(--heading);
background-color: transparent;
font-size: var(--ui-body-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
cursor: pointer;
}
.dashboard-risk-tool:hover {
border-color: var(--line-strong);
background-color: var(--panel-hover);
}
.dashboard-risk-tool:focus-visible {
border-color: var(--focus-ring);
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
.dashboard-risk-tool option {
color: var(--text);
background-color: var(--surface-input);
text-transform: none;
}
.dashboard-marked-summary {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-5);
min-width: 240px;
padding: var(--space-2) var(--space-3);
border: var(--border-hair) solid var(--line);
color: var(--muted);
font-size: var(--ui-label-size);
}
.dashboard-marked-summary strong {
color: var(--heading);
font-size: var(--ui-body-size);
font-variant-numeric: tabular-nums;
}
.dashboard-risk-body {
display: grid;
grid-template-columns: minmax(180px, .8fr) minmax(280px, 1.2fr);
min-height: 190px;
margin-top: var(--space-4);
}
.dashboard-risk-categories,
.dashboard-risk-legend {
margin: 0;
padding: 0;
list-style: none;
}
.dashboard-risk-categories {
display: grid;
align-content: center;
padding-right: var(--space-5);
border-right: var(--border-hair) solid var(--line-strong);
}
.dashboard-risk-categories li + li {
border-top: var(--border-hair) solid var(--line);
}
.dashboard-risk-categories button,
.dashboard-risk-legend button {
display: grid;
align-items: center;
width: 100%;
min-height: 42px;
padding: var(--space-2);
border: 0;
border-radius: 0;
color: var(--text);
background: transparent;
text-align: left;
cursor: pointer;
}
.dashboard-risk-categories button {
grid-template-columns: minmax(0, 1fr) auto;
gap: var(--space-3);
}
.dashboard-risk-categories button:hover,
.dashboard-risk-legend button:hover {
background: var(--panel-hover);
}
.dashboard-risk-categories button:focus-visible,
.dashboard-risk-legend button:focus-visible {
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
.dashboard-risk-categories span,
.dashboard-risk-legend span {
min-width: 0;
overflow: hidden;
font-size: var(--ui-body-size);
text-overflow: ellipsis;
white-space: nowrap;
}
.dashboard-risk-categories strong,
.dashboard-risk-legend strong {
color: var(--heading);
font-size: var(--ui-body-size);
font-variant-numeric: tabular-nums;
}
.dashboard-risk-severity {
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-5);
min-width: 0;
padding-left: var(--space-5);
}
.dashboard-risk-donut {
position: relative;
flex: 0 0 150px;
width: 150px;
height: 150px;
overflow: visible;
}
.dashboard-risk-donut svg {
display: block;
width: 100%;
height: 100%;
overflow: visible;
transform: rotate(-90deg);
}
.dashboard-risk-donut circle {
fill: none;
stroke-width: var(--donut-ring-stroke);
}
.dashboard-risk-donut-track {
stroke: var(--donut-track);
}
.dashboard-risk-donut-segment {
stroke: var(--severity, var(--info));
}
.dashboard-risk-donut > span {
position: absolute;
inset: 0;
display: flex;
align-items: flex-start;
justify-content: center;
padding-top: 57px;
color: var(--heading);
font-variant-numeric: tabular-nums;
}
.dashboard-risk-donut > span strong {
display: block;
font: var(--fw-semibold) calc(var(--donut-value-size) * 1.45) / 1 var(--font-donut-display);
}
.dashboard-risk-donut > span small {
position: absolute;
left: calc(100% + var(--space-1));
bottom: 0;
font-size: var(--donut-percent-size);
font-weight: var(--fw-semibold);
}
.dashboard-risk-legend {
flex: 1 1 auto;
min-width: 120px;
}
.dashboard-risk-legend button {
grid-template-columns: 12px minmax(0, 1fr) auto;
gap: var(--space-3);
}
.dashboard-risk-legend i {
width: 12px;
height: 12px;
background: var(--severity, var(--info));
}
@media (max-width: 1400px) {
.dashboard-status-rack {
grid-template-columns: repeat(2, minmax(0, 290px));
}
.dashboard-status-summary {
grid-column: 1 / -1;
}
.dashboard-distribution-grid,
.dashboard-lower-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 760px) {
.dashboard-status-rack {
grid-template-columns: minmax(0, 290px);
}
.dashboard-status-summary {
grid-column: auto;
}
.dashboard-coverage-summary,
.dashboard-facts {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.dashboard-risk-body {
grid-template-columns: 1fr;
}
.dashboard-risk-categories {
padding-right: 0;
padding-bottom: var(--space-4);
border-right: 0;
border-bottom: var(--border-hair) solid var(--line-strong);
}
.dashboard-risk-severity {
padding: var(--space-4) 0 0;
}
}
.client-info-tile-grid {
display: grid;
gap: var(--segment-gap);
}
.client-info-metric-grid {
display: grid;
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: var(--segment-gap);
}
.client-info-top-row {
display: grid;
grid-template-columns: minmax(0, 3fr) minmax(320px, 1fr);
align-items: stretch;
gap: var(--segment-gap);
min-width: 0;
}
.client-info-metric {
display: grid;
align-content: space-between;
align-self: start;
gap: var(--space-2);
width: 100%;
min-width: 0;
aspect-ratio: 1;
min-height: 0;
padding: var(--space-3);
border: 0;
border-radius: var(--radius-sm);
color: var(--text);
background: var(--tile-surface);
box-shadow: none;
text-align: left;
}
button.client-info-metric {
cursor: pointer;
}
button.client-info-metric:hover {
border-color: transparent;
background: var(--tile-surface-hover);
}
button.client-info-metric:focus-visible {
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: calc(-1 * var(--bw-emphasis));
}
button.client-info-metric[aria-pressed=true] {
border-color: var(--tile-selected-border);
outline: var(--bw-emphasis) solid var(--tile-selected-border);
outline-offset: calc(-1 * var(--bw-emphasis));
}
.client-info-metric > span {
color: var(--heading);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
line-height: 1.25;
}
.client-info-top-row > .client-info-metric-grid .client-info-metric {
align-self: stretch;
height: 100%;
min-height: 220px;
aspect-ratio: auto;
}
.client-info-metric > strong {
color: var(--chart-color, var(--heading));
font-size: calc(var(--type-h1-size) * .84);
font-weight: var(--fw-regular);
line-height: 1;
font-variant-numeric: tabular-nums;
}
.client-info-metric.is-emphasis > strong {
font-size: var(--type-h1-size);
font-weight: var(--fw-semibold);
}
.client-info-card-column {
display: flex;
flex-direction: column;
align-self: start;
gap: var(--segment-gap);
min-width: 0;
}
.client-info-panels-layout {
display: grid;
grid-template-columns: minmax(0, 3fr) minmax(320px, 1fr);
align-items: start;
gap: var(--segment-gap);
min-width: 0;
}
.client-info-donut-rail {
display: grid;
align-content: start;
gap: var(--segment-gap);
min-width: 0;
}
.client-info-card {
display: flex;
flex-direction: column;
gap: 0;
min-width: 0;
min-height: min-content;
align-self: stretch;
padding: 0;
border: 0;
border-radius: var(--radius-sm);
color: var(--text);
background: var(--tile-surface);
box-shadow: none;
}
.client-info-card.is-collapsed {
align-self: start;
width: 100%;
}
.client-info-card > header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-5);
min-height: 60px;
padding: var(--space-3) var(--space-5);
border-bottom: var(--border-hair) solid var(--line);
cursor: pointer;
}
.client-info-card > header:hover {
background: var(--tile-surface-hover);
}
.client-info-card.is-collapsed > header {
flex: 1 1 auto;
border-bottom: 0;
}
.client-info-card-heading {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: var(--space-2);
min-width: 0;
}
.client-info-card-heading h2 {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
}
.client-info-card-heading > span {
color: var(--muted);
font-size: var(--type-h4-size);
font-variant-numeric: tabular-nums;
line-height: 1.35;
}
.client-info-card-heading .client-info-card-meta {
font-size: var(--type-meta-size);
}
.client-info-card-toggle {
flex: 0 0 auto;
display: grid;
place-items: center;
width: 36px;
height: 36px;
padding: 0;
border: 0;
border-radius: 0;
color: var(--heading);
background: transparent;
cursor: pointer;
}
.client-info-card-toggle .triangle-icon {
width: 16px;
height: 16px;
}
.client-info-card-toggle:hover {
border-color: var(--line-strong);
}
.client-info-card-toggle:focus-visible {
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: 1px;
}
.client-info-card-content {
display: grid;
align-content: start;
min-width: 0;
}
.client-info-card-details {
display: grid;
align-content: start;
gap: 0;
min-width: 0;
padding: 0 var(--space-5) var(--space-3);
}
.client-info-card-extra {
display: grid;
align-content: start;
min-width: 0;
padding: 0 var(--space-5) var(--space-4);
border-top: var(--border-hair) solid var(--line);
}
.client-env-groups {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--tile-content-width)), 1fr));
align-items: start;
gap: var(--segment-gap);
min-width: 0;
margin-block: var(--space-4) var(--space-5);
}
.client-env-group {
min-width: 0;
}
.client-env-group-title {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-3);
margin: 0 0 var(--space-2);
color: var(--client-info-muted);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
}
.client-env-group-title > span:first-child {
order: 0;
flex: 0 0 auto;
color: var(--client-info-text);
}
.client-env-group-title::after {
content: "";
order: 1;
flex: 1 1 auto;
height: var(--border-hair);
background: var(--client-info-line);
}
.client-env-group-note {
order: 2;
flex: 0 0 auto;
font-weight: var(--fw-regular);
}
.client-env-group-toggle {
order: 3;
flex: 0 0 auto;
display: grid;
place-items: center;
width: var(--control-h);
height: var(--control-h);
padding: 0;
border: 0;
border-radius: 0;
color: var(--client-info-text);
background: transparent;
cursor: pointer;
}
.client-env-group-toggle .triangle-icon {
width: var(--space-3);
height: var(--space-3);
}
.client-env-group-toggle:focus-visible {
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: 1px;
}
.client-env-facts {
display: grid;
grid-template-columns: 1fr;
align-content: start;
min-width: 0;
margin: 0;
}
.client-env-facts > div {
display: grid;
align-content: center;
gap: 0;
min-width: 0;
min-height: calc(var(--row-h) + var(--space-3));
padding: var(--space-1) 0;
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.client-env-facts dt {
color: var(--client-info-muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
overflow-wrap: break-word;
}
.client-env-facts dd {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-table-body-size);
font-variant-numeric: tabular-nums;
line-height: 1.35;
overflow-wrap: break-word;
}
.client-command-center .client-gpo-readiness {
grid-column: 1 / -1;
min-width: 0;
margin-block: var(--space-3);
}
.client-command-center .client-gpo-readiness p {
font-size: var(--type-body-size);
}
.client-command-center .client-os-inventory {
min-width: 0;
}
.client-command-center .client-os-inventory > header {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: var(--space-3);
margin-bottom: var(--space-2);
}
.client-command-center .client-os-inventory > header h3 {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
}
.client-command-center .client-os-inventory header p {
margin: 0;
font-size: var(--type-meta-size);
color: var(--client-info-muted);
}
.client-command-center .client-os-groups {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
align-items: start;
gap: var(--space-5);
}
.client-command-center .client-os-group {
min-width: 0;
}
.client-command-center .client-os-group h4 {
display: flex;
align-items: baseline;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--space-3);
margin: 0 0 var(--space-1);
color: var(--client-info-text);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
}
.client-command-center .client-os-group h4 > span:last-child {
font-variant-numeric: tabular-nums;
}
.client-command-center .client-os-group table {
width: 100%;
border-collapse: collapse;
table-layout: auto;
}
.client-command-center .client-os-group th {
padding: var(--space-1) 0;
color: var(--client-info-muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
text-align: left;
}
.client-command-center .client-os-group th:last-child {
width: 1%;
white-space: nowrap;
text-align: right;
}
.client-command-center .client-os-group td {
height: var(--row-h);
padding: var(--space-1) 0;
border-bottom: var(--border-hair) solid var(--client-info-line);
font-size: var(--type-table-body-size);
white-space: normal;
word-break: normal;
overflow-wrap: break-word;
}
.client-command-center .client-os-group td:last-child {
padding-inline-start: var(--space-2);
white-space: nowrap;
text-align: right;
font-variant-numeric: tabular-nums;
}
.client-command-center .client-os-group .client-os-source {
width: 1%;
padding-inline-start: var(--space-3);
color: var(--client-info-muted);
font-size: var(--type-meta-size);
white-space: nowrap;
}
.client-command-center .client-os-empty {
color: var(--client-info-muted);
font-size: var(--type-body-size);
}
.client-info-bars {
display: grid;
align-content: start;
gap: 0;
margin: 0;
padding: 0;
list-style: none;
}
.client-info-bars li {
min-width: 0;
border-bottom: var(--border-hair) solid var(--line);
}
.client-info-bars li:last-child {
border-bottom: 0;
}
.client-info-bar-row {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(48px, auto) minmax(120px, 1.15fr);
grid-template-rows: auto auto;
align-items: center;
column-gap: var(--space-4);
row-gap: var(--space-1);
width: 100%;
min-height: 64px;
padding: var(--space-2) 0;
border: 0;
border-radius: 0;
color: inherit;
background: transparent;
text-align: left;
}
button.client-info-bar-row {
cursor: pointer;
}
button.client-info-bar-row:hover {
background: var(--tile-surface-hover);
}
button.client-info-bar-row:focus-visible {
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
.client-info-bar-label {
grid-column: 1;
grid-row: 1 / -1;
align-self: center;
color: var(--text);
font-size: var(--type-body-size);
line-height: 1.4;
overflow-wrap: normal;
word-break: normal;
}
.client-info-bar-track {
grid-column: 3;
grid-row: 1 / -1;
width: 100%;
height: 30px;
background: var(--surface-active);
}
.client-info-bar-track i {
--share: 0%;
display: block;
width: var(--share);
min-width: 2px;
height: 100%;
background: var(--chart-color, var(--chart-tone-emphasis));
}
.client-info-bars strong {
grid-column: 2;
grid-row: 1;
display: flex;
align-items: baseline;
justify-content: flex-end;
gap: var(--space-1);
min-width: 0;
color: var(--heading);
font-size: var(--type-body-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
text-align: right;
white-space: nowrap;
}
.client-info-bars .client-info-bar-detail {
color: var(--heading);
font-size: var(--type-meta-size);
font-weight: var(--fw-semibold);
}
.client-info-bars .client-info-bar-status {
grid-column: 2;
grid-row: 2;
min-height: 12px;
color: var(--warning);
font-size: var(--type-meta-size);
line-height: 1;
text-align: right;
}
.client-info-bars .client-info-bar-status.is-empty {
visibility: hidden;
}
.client-info-card-caption {
margin: 0;
padding: var(--space-4) 0 0;
border-top: var(--border-hair) solid var(--line);
color: var(--muted);
font-size: var(--type-meta-size);
}
.client-info-card-extra .client-info-card-caption {
border-top: 0;
}
.client-info-donut-card .client-info-card-details {
padding: var(--space-5);
}
.client-info-donut-layout {
display: grid;
grid-template-columns: minmax(130px, .9fr) minmax(145px, 1.1fr);
align-items: center;
gap: var(--space-4);
min-width: 0;
}
.client-info-donut {
position: relative;
width: min(172px, 100%);
aspect-ratio: 1;
justify-self: center;
}
.client-info-donut svg {
display: block;
width: 100%;
height: 100%;
overflow: visible;
transform: rotate(-90deg);
}
.client-info-donut circle {
fill: none;
stroke-width: var(--donut-ring-stroke);
}
.client-info-donut-track {
stroke: var(--donut-track);
}
.client-info-donut-segment {
stroke: var(--chart-color, var(--info));
}
.client-info-donut > span {
position: absolute;
inset: 0;
display: grid;
place-content: center;
justify-items: center;
color: var(--heading);
text-align: center;
}
.client-info-donut > span strong {
font-size: calc(var(--type-h2-size) * 1.08);
font-weight: var(--fw-regular);
line-height: 1;
font-variant-numeric: tabular-nums;
}
.client-info-donut > span small {
margin-top: var(--space-1);
color: var(--muted);
font-size: var(--type-meta-size);
}
.client-info-legend {
display: grid;
align-content: center;
gap: var(--space-1);
margin: 0;
padding: 0;
list-style: none;
}
.client-info-legend button,
.client-info-legend-row {
display: grid;
grid-template-columns: 11px minmax(0, 1fr) auto;
align-items: center;
gap: var(--space-2);
width: 100%;
min-height: 36px;
padding: var(--space-1) var(--space-2);
border: 0;
border-radius: 0;
color: var(--text);
background: transparent;
text-align: left;
}
.client-info-legend button {
cursor: pointer;
}
.client-info-legend button:hover {
background: var(--tile-surface-hover);
}
.client-info-legend button:focus-visible {
outline: var(--border-hair) solid var(--focus-ring);
outline-offset: -1px;
}
.client-info-legend i {
width: 11px;
height: 11px;
background: var(--chart-color, var(--muted));
}
.client-info-legend span {
min-width: 0;
font-size: var(--type-table-body-size);
line-height: 1.25;
overflow-wrap: normal;
word-break: normal;
}
.client-info-legend strong {
color: var(--heading);
font-size: var(--type-table-body-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.dashboard-page.client-command-center {
--client-info-text: var(--heading);
--client-info-muted: var(--muted);
--client-info-line: var(--line);
--client-info-line-strong: var(--border-strong);
--client-info-surface: var(--surface-input);
--client-info-surface-raised: var(--tile-surface);
--client-info-surface-hover: var(--tile-surface-hover);
color: var(--client-info-text);
background: var(--surface-app);
}
.client-command-center .tone-critical {
--chart-color: var(--client-info-red);
}
.client-command-center .tone-high {
--chart-color: var(--high);
}
.client-command-center .tone-medium {
--chart-color: var(--client-info-amber);
}
.client-command-center .tone-passed {
--chart-color: var(--client-info-green);
}
.client-command-center .tone-unknown {
--chart-color: var(--client-info-neutral);
}
.client-glyph {
display: block;
width: var(--space-8);
height: var(--space-8);
fill: none;
stroke: currentColor;
stroke-width: 1.6;
stroke-linecap: round;
stroke-linejoin: round;
}
.client-overview-header {
display: grid;
grid-template-columns: auto auto minmax(240px, 1fr);
align-items: center;
gap: var(--space-8);
min-width: 0;
color: var(--client-info-muted);
}
.client-overview-identity,
.client-overview-assessment,
.client-overview-source {
display: flex;
align-items: center;
gap: var(--space-3);
min-width: 0;
font-size: var(--type-table-body-size);
}
.client-overview-identity strong {
color: var(--client-info-text);
font-weight: var(--fw-regular);
}
.client-overview-assessment .work-timeslot-select {
margin: 0;
}
.client-overview-assessment .work-timeslot-select > span {
display: none;
}
.client-overview-source {
justify-self: end;
}
.client-overview-source select,
.client-overview-assessment select {
min-width: 132px;
min-height: var(--control-h);
padding-inline: var(--space-3);
border: var(--border-hair) solid var(--client-info-line);
border-radius: var(--btn-radius);
color: var(--client-info-text);
background: var(--client-info-surface);
font: inherit;
}
.client-overview-facts {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(0, var(--tile-compact-width)));
justify-content: start;
gap: var(--segment-gap);
min-width: 0;
}
.client-overview-fact {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
place-content: center;
align-items: center;
gap: var(--space-3);
min-height: 88px;
padding: var(--tile-inset);
border: 0;
border-radius: var(--tile-radius);
color: var(--client-info-muted);
background: var(--tile-surface);
text-align: left;
}
.client-overview-fact > span {
display: grid;
gap: var(--space-1);
}
.client-overview-fact strong {
color: var(--client-info-text);
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
line-height: 1;
}
.client-overview-fact small {
color: var(--client-info-muted);
font-size: var(--type-label-size);
line-height: 1.3;
}
.client-overview-main {
display: grid;
grid-template-columns: minmax(720px, 2.18fr) minmax(300px, .82fr);
align-items: stretch;
gap: var(--segment-gap);
min-width: 0;
}
.client-posture {
position: relative;
display: grid;
grid-template-columns: minmax(300px, .82fr) minmax(430px, 1.18fr);
gap: var(--segment-gap);
min-width: 0;
border-radius: var(--tile-radius);
background: var(--tile-surface);
}
.client-overall,
.client-domains,
.client-priority > section {
min-width: 0;
border: 0;
border-radius: var(--tile-radius);
color: var(--client-info-text);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
}
.client-posture-connectors {
position: absolute;
z-index: 2;
inset: 0;
width: 100%;
height: 100%;
overflow: visible;
pointer-events: none;
}
.client-posture-connectors path {
fill: none;
stroke: var(--text-muted);
stroke-width: 1.2;
vector-effect: non-scaling-stroke;
}
.client-overall,
.client-domains {
position: relative;
z-index: 1;
}
.client-overall {
display: grid;
align-content: start;
justify-items: center;
gap: var(--space-2);
min-width: 0;
padding: var(--tile-inset);
}
.client-overall > h2,
.client-domains h2,
.client-priority h2,
.client-source-overview h2 {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.3;
}
.client-overall > h2 {
justify-self: start;
color: var(--client-info-text);
}
.client-overall-ring {
position: relative;
width: min(290px, 90%);
aspect-ratio: 1;
margin: var(--space-3) 0 var(--space-2);
color: var(--chart-color, var(--client-info-neutral));
}
.client-overall-ring svg {
display: block;
width: 100%;
height: 100%;
overflow: visible;
transform: rotate(-90deg);
}
.client-overall-ring circle {
fill: none;
stroke-width: var(--donut-ring-stroke);
}
.client-overall-ring-track {
stroke: var(--donut-track);
}
.client-overall-ring-value {
stroke: var(--chart-color, var(--chart-tone-emphasis));
stroke-linecap: butt;
}
.client-overall-ring > span {
position: absolute;
inset: 0;
display: grid;
place-items: center;
color: var(--donut-value);
}
.client-overall-ring-number {
position: relative;
}
.client-overall-ring-number strong {
font-size: var(--type-h1-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
line-height: 1;
}
.client-overall-ring-number small {
position: absolute;
left: calc(100% + var(--space-1));
bottom: 0;
color: var(--client-info-text);
font-size: var(--donut-percent-size);
white-space: nowrap;
}
.client-overall-ring em {
position: absolute;
top: calc(50% + var(--type-h1-size) / 2 + var(--space-2));
color: var(--client-info-muted);
font-size: var(--type-label-size);
font-style: normal;
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
}
.client-overall-status {
color: var(--chart-color, var(--muted));
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
}
.client-overall-critical {
display: flex;
align-items: baseline;
justify-content: center;
gap: var(--space-2);
min-height: 40px;
padding: var(--space-1) var(--space-3);
border: 0;
border-radius: 0;
color: var(--critical);
background: transparent;
cursor: pointer;
}
.client-overall-critical:hover:not(:disabled) {
background: var(--client-info-surface-hover);
}
.client-overall-critical:disabled {
cursor: default;
opacity: .65;
}
.client-overall-critical b {
font-size: var(--type-h3-size);
font-variant-numeric: tabular-nums;
}
.client-overall-critical span {
font-size: var(--type-table-body-size);
font-weight: var(--fw-semibold);
}
.client-overall-coverage {
display: grid;
gap: var(--space-2);
width: 100%;
margin-top: var(--space-3);
}
.client-overall-coverage > span {
display: flex;
justify-content: space-between;
gap: var(--space-3);
color: var(--client-info-text);
font-size: var(--type-label-size);
}
.client-overall-coverage > span strong,
.client-overall-coverage > span b {
font-weight: var(--fw-semibold);
}
.client-overall-coverage > i {
display: block;
height: 7px;
background: var(--client-info-line);
}
.client-overall-coverage > i u {
--share: 0%;
display: block;
width: var(--share);
height: 100%;
background: var(--client-info-green);
text-decoration: none;
}
.client-overall-coverage small {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
line-height: 1.3;
}
.client-overall-secondary {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
width: 100%;
margin: var(--space-2) 0 0;
border-top: var(--border-hair) solid var(--client-info-line);
}
.client-overall-secondary > div {
display: grid;
justify-items: center;
gap: var(--space-1);
padding: var(--space-4) var(--space-2) 0;
}
.client-overall-secondary > div + div {
border-left: var(--border-hair) solid var(--client-info-line);
}
.client-overall-secondary dt {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
}
.client-overall-secondary dd {
grid-row: 1;
margin: 0;
color: var(--client-info-text);
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.client-domains {
position: relative;
min-width: 0;
padding: var(--tile-inset);
}
.client-domains > header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
}
.client-domains > header > span {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
}
.client-domains ul {
position: relative;
display: grid;
gap: var(--space-1);
margin: var(--space-3) 0 0;
padding: 0;
list-style: none;
}
.client-domains li {
position: relative;
min-width: 0;
}
.client-domains li > button,
.client-domains li > div {
position: relative;
z-index: 3;
display: grid;
grid-template-columns: 52px minmax(0, 1fr) auto;
grid-template-rows: auto;
align-items: center;
column-gap: var(--space-3);
row-gap: var(--space-1);
width: 100%;
min-height: 64px;
padding: var(--space-1) 0;
border: 0;
border-radius: 0;
color: inherit;
background: transparent;
text-align: left;
}
.client-domains li > button {
cursor: pointer;
}
.client-domains li > button:hover {
background: var(--client-info-surface-hover);
}
.client-domain-score {
z-index: 1;
grid-column: 1;
grid-row: 1 / 3;
display: grid;
place-items: center;
width: 46px;
height: 46px;
border: var(--border-hair) solid var(--chart-color, var(--client-info-line-strong));
border-radius: 50%;
color: var(--client-info-text);
background: var(--client-info-surface);
}
.client-domain-score .client-glyph {
width: var(--space-6);
height: var(--space-6);
}
.client-domain-score em {
color: var(--chart-color, var(--client-info-text));
font-size: var(--type-h4-size);
font-style: normal;
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
line-height: 1;
}
.client-domain-copy {
grid-column: 2;
grid-row: 1;
display: grid;
gap: var(--space-1);
min-width: 0;
}
.client-domain-copy strong {
color: var(--client-info-text);
font-size: var(--type-body-size);
font-weight: var(--fw-semibold);
line-height: 1.25;
}
.client-domain-copy small {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
line-height: 1.3;
}
.client-domains li > button > b,
.client-domains li > div > b {
grid-column: 3;
grid-row: 1;
color: var(--client-info-text);
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.client-domains li b small {
display: block;
color: var(--client-info-muted);
font-size: var(--type-meta-size);
font-weight: var(--fw-regular);
text-align: right;
}
.client-priority {
display: grid;
grid-template-rows: auto auto;
align-content: start;
gap: var(--segment-gap);
min-width: 0;
}
.client-priority > section {
padding: var(--tile-inset);
}
.client-priority-findings > header {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
align-items: end;
gap: var(--space-3);
}
.client-priority-findings > header h2 {
grid-column: 1 / -1;
align-self: start;
}
.client-priority-findings > header > div {
display: grid;
justify-items: center;
color: var(--client-info-text);
}
.client-priority-findings > header > div strong {
color: var(--chart-color, var(--client-info-text));
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.client-priority-findings > header > div span {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
}
.client-priority-context {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: var(--space-1);
margin-top: var(--space-3);
border-top: var(--border-hair) solid var(--client-info-line);
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.client-priority-context button {
display: grid;
justify-items: center;
gap: var(--space-1);
min-width: 0;
padding: var(--space-2) var(--space-1);
border: 0;
border-radius: 0;
color: var(--client-info-text);
background: transparent;
cursor: pointer;
}
.client-priority-context button + button {
border-left: var(--border-hair) solid var(--client-info-line);
}
.client-priority-context button:hover:not(:disabled) {
background: var(--client-info-surface-hover);
}
.client-priority-context button:disabled {
cursor: default;
opacity: .65;
}
.client-priority-context strong {
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.client-priority-context span {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
line-height: 1.2;
text-align: center;
}
.client-priority-findings ol {
display: grid;
gap: var(--space-2);
margin: var(--space-4) 0 var(--space-3);
padding: 0;
list-style: none;
}
.client-priority-findings li {
border-left: var(--marker-width) solid var(--chart-color, var(--client-info-neutral));
border-bottom: var(--border-hair) solid var(--line);
background: transparent;
}
.client-priority-findings li button {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
align-items: center;
gap: var(--space-1) var(--space-2);
width: 100%;
min-height: 70px;
padding: var(--space-3);
border: 0;
border-radius: 0;
color: inherit;
background: transparent;
text-align: left;
cursor: pointer;
}
.client-priority-findings li button:hover {
background: var(--client-info-surface-hover);
}
.client-priority-findings li small {
padding: var(--space-1) var(--space-2);
color: var(--sev-on);
background: var(--chart-color, var(--client-info-neutral));
font-size: var(--type-badge-size);
font-weight: var(--fw-semibold);
text-transform: uppercase;
}
.client-priority-findings li strong {
min-width: 0;
color: var(--client-info-text);
font-size: var(--type-table-body-size);
font-weight: var(--fw-semibold);
line-height: 1.3;
overflow-wrap: normal;
word-break: normal;
}
.client-priority-findings li span {
grid-column: 2;
justify-self: end;
padding: var(--space-1) var(--space-2);
color: var(--client-info-muted);
background: var(--client-info-surface-hover);
font-size: var(--type-meta-size);
}
.client-priority-findings .client-priority-empty {
padding: var(--space-4);
border-left-color: var(--client-info-green);
color: var(--client-info-muted);
font-size: var(--type-table-body-size);
}
.client-overview-action {
justify-self: end;
margin-left: auto;
}
.client-assessment-gaps {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
align-items: baseline;
gap: var(--space-1) var(--space-3);
}
.client-assessment-gaps h2 {
grid-column: 1 / -1;
margin-bottom: var(--space-2);
}
.client-assessment-gaps > strong {
color: var(--client-info-text);
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.client-assessment-gaps > span {
color: var(--client-info-muted);
font-size: var(--type-table-body-size);
}
.client-assessment-gaps dl {
grid-column: 1 / -1;
display: grid;
margin: var(--space-3) 0 0;
border-top: var(--border-hair) solid var(--client-info-line);
}
.client-assessment-gaps dl div {
display: flex;
justify-content: space-between;
gap: var(--space-3);
padding: var(--space-3) 0;
border-bottom: var(--border-hair) solid var(--client-info-line);
font-size: var(--type-table-body-size);
}
.client-assessment-gaps dt {
display: flex;
align-items: center;
gap: var(--space-2);
color: var(--client-info-muted);
}
.client-assessment-gaps dt .client-glyph {
width: var(--space-5);
height: var(--space-5);
}
.client-assessment-gaps dd {
margin: 0;
color: var(--client-info-text);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.client-assessment-gaps .client-overview-action {
grid-column: 1 / -1;
}
.client-source-overview {
min-width: 0;
padding: var(--segment-inset);
border: var(--border-hair) solid var(--segment-border);
border-radius: var(--segment-radius);
background: var(--segment-surface);
}
.client-environment-detail {
min-width: 0;
padding: var(--tile-inset);
border: 0;
border-radius: var(--tile-radius);
color: var(--client-info-text);
background: var(--tile-surface);
}
.client-environment-detail > summary,
.risk-register-detail-group > summary,
.risk-register-history > summary {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-3);
min-height: var(--control-h);
list-style: none;
cursor: pointer;
}
.client-environment-detail > summary::-webkit-details-marker,
.risk-register-detail-group > summary::-webkit-details-marker,
.risk-register-history > summary::-webkit-details-marker {
display: none;
}
.client-environment-detail > summary:focus-visible,
.risk-register-detail-group > summary:focus-visible,
.risk-register-history > summary:focus-visible {
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: var(--border-hair);
}
.client-environment-detail[open] > summary > .triangle-icon,
.risk-register-detail-group[open] > summary > .triangle-icon,
.risk-register-history[open] > summary > .triangle-icon {
transform: rotate(90deg);
}
.client-environment-detail > summary h2 {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.3;
}
.client-environment-detail > summary span {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
}
.client-environment-detail > summary > .client-env-meta {
margin-left: auto;
}
.client-env-meta {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-2) var(--space-3);
}
.client-env-restricted-toggle {
gap: var(--space-2);
margin-top: var(--space-3);
}
.client-env-restricted-toggle .triangle-icon {
width: var(--space-3);
height: var(--space-3);
}
.client-environment-restricted {
margin: 0 0 var(--space-3);
color: var(--client-info-muted);
font-size: var(--type-meta-size);
line-height: 1.35;
}
.client-source-overview > header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
margin-bottom: var(--space-3);
}
.client-source-overview > header span {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
}
.client-source-overview > div {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--tile-content-width)), var(--tile-content-width)));
justify-content: start;
gap: var(--segment-gap);
min-width: 0;
}
.client-source-overview > div > article,
.client-source-overview > div > button {
--source-color: var(--client-info-neutral);
display: grid;
grid-template-columns: var(--space-8) minmax(0, 1fr);
grid-template-rows: auto auto auto;
align-items: center;
gap: var(--space-1) var(--space-3);
min-width: 0;
min-height: 104px;
padding: var(--tile-inset);
border: 0;
border-radius: var(--tile-radius);
color: inherit;
background: var(--tile-surface);
text-align: left;
}
.client-source-overview .client-source-pingcastle {
--source-color: var(--client-info-green);
}
.client-source-overview .client-source-purple {
--source-color: var(--client-info-purple);
}
.client-source-overview .client-source-maester {
--source-color: var(--client-info-green);
}
.client-source-overview .client-source-cis {
--source-color: var(--client-info-blue);
}
.client-source-overview .client-source-gpo {
--source-color: var(--client-info-lime);
}
.client-source-overview button {
cursor: pointer;
}
.client-source-overview button:hover {
background: var(--client-info-surface-hover);
}
.client-source-overview article > .client-glyph,
.client-source-overview button > .client-glyph {
grid-column: 1;
grid-row: 1 / -1;
width: var(--space-8);
height: var(--space-8);
color: var(--client-info-muted);
}
.client-source-overview article > span,
.client-source-overview button > span {
grid-column: 2;
color: var(--client-info-text);
font-size: var(--type-table-body-size);
font-weight: var(--fw-semibold);
}
.client-source-overview article > strong,
.client-source-overview button > strong {
grid-column: 2;
color: var(--client-info-text);
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.client-source-overview article > strong small,
.client-source-overview button > strong small {
margin-left: var(--space-1);
color: var(--client-info-muted);
font-size: var(--type-table-body-size);
font-weight: var(--fw-regular);
}
.client-source-overview article > em,
.client-source-overview button > em {
grid-column: 2;
color: var(--client-info-muted);
font-size: var(--type-meta-size);
font-style: normal;
line-height: 1.3;
}
.client-risk-register {
min-width: 0;
padding: var(--tile-inset);
border: 0;
border-radius: var(--tile-radius);
color: var(--client-info-text);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
}
.client-risk-register > header {
display: flex;
align-items: end;
justify-content: space-between;
gap: var(--space-4);
margin-bottom: var(--space-4);
}
.client-risk-register > header > div {
display: grid;
gap: var(--space-1);
}
.client-risk-register > header h2 {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
line-height: 1.3;
}
.client-risk-register > header span,
.client-risk-register > header strong {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
font-weight: var(--fw-regular);
}
.client-risk-register-empty {
margin: 0;
padding: var(--space-6) 0;
border-top: var(--border-hair) solid var(--client-info-line);
color: var(--client-info-muted);
font-size: var(--type-body-size);
}
.client-risk-register-layout {
display: grid;
grid-template-columns: minmax(260px, .72fr) minmax(0, 1.78fr);
min-width: 0;
border-top: var(--border-hair) solid var(--client-info-line);
}
.client-risk-register-list {
display: grid;
align-content: start;
min-width: 0;
padding: var(--space-4) var(--space-4) var(--space-4) 0;
border-right: var(--border-hair) solid var(--client-info-line);
}
.client-risk-register-list button {
--risk-register-tone: var(--client-info-neutral);
position: relative;
display: grid;
grid-template-columns: var(--marker-width) minmax(0, 1fr) auto;
gap: var(--space-1) var(--space-3);
align-items: start;
width: 100%;
min-width: 0;
padding: var(--space-3);
border: 0;
border-bottom: var(--border-hair) solid var(--client-info-line);
border-radius: 0;
color: inherit;
background: transparent;
text-align: left;
cursor: pointer;
}
.client-risk-register-list button:first-child {
border-top: var(--border-hair) solid var(--client-info-line);
}
.client-risk-register-list button:hover {
background: var(--client-info-surface-hover);
}
.client-risk-register-list button[aria-pressed=true] {
z-index: 1;
outline: var(--bw-emphasis) solid var(--marking-color);
outline-offset: calc(-1 * var(--bw-emphasis));
background: var(--client-info-surface-hover);
}
.client-risk-register-list button:focus-visible {
z-index: 2;
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: calc(-1 * var(--bw-emphasis));
}
.client-risk-register-list button.is-current,
.client-risk-register-detail > header > strong.is-current {
--risk-register-tone: var(--client-info-green);
}
.client-risk-register-list button.is-attention,
.client-risk-register-detail > header > strong.is-attention {
--risk-register-tone: var(--client-info-amber);
}
.client-risk-register-list button.is-critical,
.client-risk-register-detail > header > strong.is-critical {
--risk-register-tone: var(--client-info-red);
}
.client-risk-register-list button > i {
grid-column: 1;
grid-row: 1 / 4;
width: var(--marker-width);
height: 100%;
min-height: 54px;
background: var(--risk-register-tone);
}
.client-risk-register-list button > span {
grid-column: 2 / -1;
display: grid;
gap: var(--space-1);
min-width: 0;
}
.client-risk-register-list button > span strong {
color: var(--client-info-text);
font-size: var(--type-table-body-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
overflow-wrap: break-word;
}
.client-risk-register-list button > span small {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
line-height: 1.3;
overflow-wrap: break-word;
}
.client-risk-register-list button > em {
grid-column: 2;
color: var(--risk-register-tone);
font-size: var(--type-badge-size);
font-style: normal;
font-weight: var(--fw-semibold);
text-transform: uppercase;
}
.client-risk-register-list button > time {
grid-column: 3;
color: var(--client-info-muted);
font-size: var(--type-meta-size);
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.client-risk-register-detail {
min-width: 0;
padding: var(--space-5) 0 var(--space-4) var(--space-5);
}
.client-risk-register-detail > header {
display: flex;
align-items: start;
justify-content: space-between;
gap: var(--space-5);
padding-bottom: var(--space-4);
}
.client-risk-register-detail > header > div {
display: grid;
gap: var(--space-1);
min-width: 0;
}
.client-risk-register-detail > header span {
color: var(--client-info-muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.client-risk-register-detail > header h2 {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-detail-title-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
overflow-wrap: break-word;
}
.client-risk-register-detail > header > strong {
--risk-register-tone: var(--client-info-neutral);
flex: 0 0 auto;
padding: var(--space-1) var(--space-2);
border-left: var(--marker-width) solid var(--risk-register-tone);
color: var(--risk-register-tone);
background: var(--client-info-surface);
font-size: var(--type-badge-size);
font-weight: var(--fw-semibold);
text-transform: uppercase;
}
.risk-register-summary {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
margin: 0;
border-top: var(--border-hair) solid var(--client-info-line);
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.risk-register-summary > div {
display: grid;
align-content: start;
gap: var(--space-1);
min-width: 0;
padding: var(--space-3);
border-right: var(--border-hair) solid var(--client-info-line);
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.risk-register-summary > div:nth-child(3n) {
border-right: 0;
}
.risk-register-summary > div:nth-last-child(-n+3) {
border-bottom: 0;
}
.risk-register-summary dt,
.risk-register-detail-group dt {
color: var(--client-info-muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.risk-register-summary dd {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-table-body-size);
line-height: 1.4;
overflow-wrap: break-word;
}
.risk-register-detail-groups {
display: grid;
grid-template-columns: 1fr;
padding-top: var(--space-4);
}
.risk-register-detail-group {
min-width: 0;
padding-block: var(--space-2);
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.risk-register-detail-group h3,
.risk-register-history h3 {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
}
.risk-register-detail-group dl {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--tile-content-width)), 1fr));
gap: var(--space-4);
margin: var(--space-3) 0;
}
.risk-register-detail-group dl > div {
display: grid;
gap: var(--space-1);
min-width: 0;
}
.risk-register-detail-group dd {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-body-size);
line-height: 1.5;
white-space: pre-wrap;
overflow-wrap: break-word;
}
.risk-register-history {
padding-top: var(--space-2);
}
.risk-register-history > summary > span {
margin-left: auto;
color: var(--client-info-muted);
font-size: var(--type-meta-size);
}
.risk-register-history ol {
display: grid;
gap: 0;
margin: 0;
padding: 0;
border-top: var(--border-hair) solid var(--client-info-line);
list-style: none;
}
.risk-register-history li {
display: grid;
gap: var(--space-2);
padding: var(--space-3) 0;
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.risk-register-history li > span {
display: flex;
justify-content: space-between;
gap: var(--space-3);
}
.risk-register-history li strong {
font-size: var(--type-table-body-size);
font-weight: var(--fw-semibold);
}
.risk-register-history li time,
.risk-register-history li small {
color: var(--client-info-muted);
font-size: var(--type-meta-size);
}
.risk-register-history li p {
margin: 0;
color: var(--client-info-text);
font-size: var(--type-body-size);
line-height: 1.5;
white-space: pre-wrap;
overflow-wrap: break-word;
}
@container (max-width: 1300px) {
.client-overview-main {
grid-template-columns: 1fr;
}
.client-priority {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.client-risk-register-layout {
grid-template-columns: minmax(230px, .8fr) minmax(0, 1.2fr);
}
.risk-register-detail-groups {
grid-template-columns: 1fr;
}
}
@container (max-width: 760px) {
.client-overview-header {
grid-template-columns: 1fr;
gap: var(--space-3);
}
.client-overview-source {
justify-self: start;
}
.client-overview-facts {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.client-posture {
grid-template-columns: 1fr;
}
.client-posture-connectors {
display: none;
}
.client-priority {
grid-template-columns: 1fr;
}
.client-risk-register-layout {
grid-template-columns: 1fr;
}
.client-risk-register-list {
padding-right: 0;
border-right: 0;
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.client-risk-register-detail {
padding-left: 0;
}
}
@container (max-width: 480px) {
.client-overview-facts,
.client-source-overview > div {
grid-template-columns: 1fr;
}
.client-priority-findings > header {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.client-priority-findings > header h2 {
grid-column: 1 / -1;
}
.client-priority-context {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.client-priority-context button:nth-child(3) {
border-left: 0;
border-top: var(--border-hair) solid var(--client-info-line);
}
.client-priority-context button:nth-child(4) {
border-top: var(--border-hair) solid var(--client-info-line);
}
.client-risk-register > header,
.client-risk-register-detail > header {
align-items: start;
flex-direction: column;
}
.risk-register-summary {
grid-template-columns: 1fr;
}
.risk-register-summary > div,
.risk-register-summary > div:nth-child(3n),
.risk-register-summary > div:nth-last-child(-n+3) {
border-right: 0;
border-bottom: var(--border-hair) solid var(--client-info-line);
}
.risk-register-summary > div:last-child {
border-bottom: 0;
}
.client-risk-register-list button > time {
grid-column: 2;
white-space: normal;
}
}
.tone-deviation,
.tone-error,
.tone-critical {
--chart-color: var(--critical);
}
.tone-passed,
.tone-low,
.tone-coverage {
--chart-color: var(--success);
}
.tone-high {
--chart-color: var(--high);
}
.tone-medium {
--chart-color: var(--medium);
}
.tone-info {
--chart-color: var(--info);
}
.tone-not-run,
.tone-neutral,
.tone-dashboard-cis-cat-without-severity {
--chart-color: var(--donut-not-run);
}
.tone-accent,
.tone-pki {
--chart-color: var(--chart-tone-emphasis);
}
.tone-gpo {
--chart-color: var(--high);
}
.tone-risk {
--chart-color: var(--warning);
}
@media (max-width: 1100px) {
.client-info-top-row {
grid-template-columns: minmax(0, 1fr);
align-items: start;
}
.client-info-metric-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.client-info-top-row > .client-info-metric-grid .client-info-metric {
height: auto;
min-height: 0;
aspect-ratio: 1;
}
.client-info-panels-layout {
grid-template-columns: minmax(0, 1fr);
}
.client-info-donut-rail {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 800px) {
.client-info-metric-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.client-info-donut-rail {
grid-template-columns: minmax(0, 1fr);
}
}
@media (max-width: 560px) {
.client-info-card > header {
align-items: flex-start;
min-height: 68px;
padding: var(--space-3);
}
.client-info-card-heading {
display: grid;
gap: var(--space-1);
}
.client-info-card-details,
.client-info-card-extra {
padding-left: var(--space-3);
padding-right: var(--space-3);
}
.client-info-bar-row {
grid-template-columns: minmax(0, 1fr) auto;
grid-template-rows: auto auto auto;
min-height: 132px;
column-gap: var(--space-3);
}
.client-info-bar-label {
grid-column: 1;
grid-row: 1;
}
.client-info-bars strong {
grid-column: 2;
grid-row: 1;
}
.client-info-bars .client-info-bar-status {
grid-column: 1 / -1;
grid-row: 2;
text-align: left;
}
.client-info-bar-track {
grid-column: 1 / -1;
grid-row: 3;
height: 44px;
}
.client-info-donut-layout {
grid-template-columns: minmax(0, 1fr);
}
}
.db-structure-page {
width: 100%;
max-width: none;
}
.db-structure-meta {
margin: 0;
color: var(--muted);
font-size: var(--ui-body-size);
}
.page-actions-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--legacy-space-4);
margin-top: var(--legacy-space-4);
}
.page-action-buttons {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: var(--legacy-space-2);
}
.db-structure-intro {
display: flex;
align-items: end;
justify-content: space-between;
gap: var(--space-7);
padding-bottom: var(--space-5);
border-bottom: var(--border-hair) solid var(--line);
}
.db-structure-intro-copy {
display: grid;
gap: var(--space-2);
max-width: 780px;
}
.db-structure-eyebrow {
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.db-structure-intro h2 {
margin: 0;
color: var(--heading);
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
line-height: 1.15;
}
.db-structure-intro p {
margin: 0;
color: var(--muted);
font-size: var(--type-body-size);
line-height: 1.55;
}
.db-structure-intro-actions {
display: flex;
align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
gap: var(--space-3);
flex: 0 0 auto;
}
.db-structure-persistence {
display: inline-flex;
align-items: center;
gap: var(--space-2);
color: var(--muted);
font-size: var(--type-meta-size);
}
.db-structure-persistence i {
width: 8px;
height: 8px;
background: var(--muted);
}
.db-structure-persistence.is-postgresql i {
background: var(--success);
}
.db-structure-summary {
display: grid;
grid-template-columns: repeat(auto-fill, var(--tile-compact-width));
justify-content: start;
gap: var(--segment-gap);
margin-top: var(--space-5);
padding: var(--segment-inset);
border: 0;
border-radius: var(--segment-radius);
background: var(--segment-surface);
box-shadow: none;
}
.db-structure-summary article {
display: grid;
align-content: space-between;
gap: var(--space-2);
min-height: 148px;
padding: var(--space-4);
border: 0;
border-radius: 0;
background: var(--tile-surface);
box-shadow: none;
}
.db-structure-summary article > span {
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.db-structure-summary article > strong {
color: var(--heading);
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
line-height: 1;
font-variant-numeric: tabular-nums;
}
.db-structure-summary article > small {
color: var(--muted);
font-size: var(--type-meta-size);
line-height: 1.4;
}
.db-structure-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-4);
margin-top: var(--space-5);
padding: 0 var(--segment-inset);
}
.db-structure-meta {
font-size: var(--type-meta-size);
}
.db-structure-meta time {
color: var(--text);
font-variant-numeric: tabular-nums;
}
.db-structure-layers {
display: grid;
gap: var(--space-7);
margin-top: var(--space-5);
width: 100%;
}
.db-structure-layer {
padding: var(--segment-inset);
border: 0;
border-radius: var(--segment-radius);
background: var(--segment-surface);
box-shadow: none;
}
.db-structure-layer-header {
display: flex;
align-items: end;
justify-content: space-between;
gap: var(--space-5);
margin-bottom: var(--space-4);
padding: 0 var(--space-1);
}
.db-structure-layer-header > div {
display: grid;
gap: var(--space-1);
max-width: 760px;
}
.db-structure-layer-header span {
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.db-structure-layer-header h3 {
margin: 0;
color: var(--heading);
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
line-height: 1.35;
}
.db-structure-layer-header p {
margin: 0;
color: var(--muted);
font-size: var(--type-body-size);
line-height: 1.5;
}
.db-structure-layer-header > strong {
flex: 0 0 auto;
color: var(--muted);
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
}
.db-structure-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--tile-content-width)), var(--tile-content-width)));
justify-content: start;
align-items: start;
gap: var(--segment-gap);
}
.db-structure-card {
min-width: 0;
border: 0;
border-radius: 0;
background: var(--tile-surface);
box-shadow: none;
}
.db-structure-card.is-expanded {
grid-column: 1 / -1;
width: 100%;
}
.db-structure-card-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-4);
width: 100%;
min-height: 112px;
padding: var(--space-4);
border: 0;
color: inherit;
background: transparent;
text-align: left;
cursor: pointer;
}
.db-structure-card-header:hover {
background: var(--tile-surface-hover);
}
.db-structure-card-header:focus-visible {
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: calc(-1 * var(--bw-emphasis));
}
.db-structure-card-copy {
display: grid;
gap: var(--space-2);
min-width: 0;
}
.db-structure-table-kind {
color: var(--muted);
font-size: var(--type-badge-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.db-structure-card-copy > strong {
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
overflow-wrap: break-word;
}
.db-structure-card-facts {
display: flex;
flex-wrap: wrap;
gap: var(--space-1) var(--space-3);
color: var(--muted);
font-size: var(--type-meta-size);
font-variant-numeric: tabular-nums;
}
.db-structure-card-toggle {
flex: 0 0 auto;
color: var(--muted);
}
.db-structure-card-body {
display: grid;
grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
gap: var(--space-6);
padding: var(--space-5);
border-top: var(--border-hair) solid var(--line);
}
.db-structure-card-section {
min-width: 0;
}
.db-structure-detail-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
margin-bottom: var(--space-3);
}
.db-structure-detail-heading h4 {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-semibold);
}
.db-structure-detail-heading span {
color: var(--muted);
font-size: var(--type-meta-size);
font-variant-numeric: tabular-nums;
}
.db-structure-column-head,
.db-structure-columns li {
display: grid;
grid-template-columns: minmax(0, 1.4fr) minmax(100px, .8fr) minmax(76px, auto);
align-items: center;
gap: var(--space-4);
}
.db-structure-column-head {
min-height: 32px;
padding: 0 var(--space-3);
border-bottom: var(--border-hair) solid var(--line);
color: var(--muted);
font-size: var(--type-table-head-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.db-structure-columns {
display: grid;
gap: 0;
margin: 0;
padding: 0;
list-style: none;
}
.db-structure-columns li {
min-height: 48px;
padding: var(--space-2) var(--space-3);
border-bottom: var(--border-hair) solid var(--line);
font-size: var(--type-table-body-size);
}
.db-structure-columns li:last-child {
border-bottom: 0;
}
.db-structure-columns strong {
color: var(--heading);
font-weight: var(--fw-regular);
overflow-wrap: break-word;
}
.db-structure-columns span {
color: var(--muted);
overflow-wrap: break-word;
}
.db-structure-columns small {
color: var(--muted);
font-size: var(--type-meta-size);
text-align: right;
}
.db-structure-relations {
padding-left: var(--space-5);
border-left: var(--border-hair) solid var(--line);
}
.db-structure-relations > p {
margin: 0;
color: var(--muted);
font-size: var(--type-body-size);
line-height: 1.5;
}
.db-structure-fks {
display: grid;
gap: 0;
margin: 0;
padding: 0;
list-style: none;
}
.db-structure-fks li {
display: grid;
grid-template-columns: minmax(0, .8fr) auto minmax(0, 1.2fr);
align-items: start;
gap: var(--space-2);
min-height: 48px;
padding: var(--space-3) 0;
border-bottom: var(--border-hair) solid var(--line);
color: var(--muted);
font-size: var(--type-table-body-size);
}
.db-structure-fks li:last-child {
border-bottom: 0;
}
.db-structure-fks strong {
color: var(--heading);
font-weight: var(--fw-regular);
overflow-wrap: break-word;
}
.db-structure-fks span:last-child {
overflow-wrap: break-word;
}
@media (max-width: 900px) {
.db-structure-intro {
align-items: start;
flex-direction: column;
}
.db-structure-intro-actions {
justify-content: flex-start;
}
.db-structure-card-body {
grid-template-columns: minmax(0, 1fr);
}
.db-structure-relations {
padding-top: var(--space-5);
padding-left: 0;
border-top: var(--border-hair) solid var(--line);
border-left: 0;
}
}
@media (max-width: 560px) {
.db-structure-summary {
grid-template-columns: minmax(0, 1fr);
}
.db-structure-summary article {
min-height: 128px;
}
.db-structure-toolbar,
.db-structure-layer-header {
align-items: start;
flex-direction: column;
}
.db-structure-grid {
grid-template-columns: minmax(0, 1fr);
}
.db-structure-column-head {
display: none;
}
.db-structure-columns li {
grid-template-columns: minmax(0, 1fr) auto;
}
.db-structure-columns small {
grid-column: 1 / -1;
text-align: left;
}
}
.viewer.app-area-results {
overflow-x: hidden;
overflow-y: auto;
background: var(--surface-app);
scrollbar-color: var(--line-strong) var(--surface-app);
scrollbar-width: thin;
}
.results-browser-page {
width: 100%;
max-width: none;
}
.results-browser-layout {
display: grid;
grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
gap: var(--legacy-space-5);
margin-top: var(--legacy-space-5);
align-items: start;
width: 100%;
}
.results-filter-panel {
display: grid;
gap: var(--legacy-space-5);
padding: var(--legacy-space-4);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
position: sticky;
top: 0;
max-height: calc(100vh - 200px);
overflow-y: auto;
}
.results-filter-group h3 {
margin: 0 0 var(--legacy-space-2);
color: var(--muted);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.results-filter-options {
display: grid;
gap: var(--legacy-space-1);
margin: 0;
padding: 0;
list-style: none;
max-height: 220px;
overflow-y: auto;
}
.results-filter-options label {
display: flex;
align-items: center;
gap: var(--legacy-space-2);
font-size: var(--ui-control-size);
color: var(--text);
cursor: pointer;
}
.results-filter-options label span {
flex: 1;
min-width: 0;
overflow-wrap: anywhere;
}
.results-filter-options label b {
color: var(--muted);
font-weight: 600;
flex: 0 0 auto;
}
.results-filter-empty {
margin: 0;
color: var(--muted);
font-size: var(--ui-control-size);
}
.results-filter-segmented {
display: flex;
gap: var(--legacy-space-1);
}
.results-filter-segmented button {
flex: 1;
min-height: var(--control-height);
padding: var(--legacy-space-1) var(--legacy-space-2);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
color: var(--text);
background: var(--panel-raised);
font-size: var(--ui-control-size);
cursor: pointer;
}
.results-filter-segmented button.active {
border-color: var(--line-strong);
color: var(--state-selected-text);
background: var(--state-selected);
}
.results-filter-readonly {
opacity: .8;
}
.results-filter-readonly ul li {
display: flex;
justify-content: space-between;
gap: var(--legacy-space-2);
font-size: var(--ui-control-size);
color: var(--muted);
padding: 2px 0;
}
.results-filter-reset {
justify-self: start;
}
.results-browser-table-wrap {
min-width: 0;
width: 100%;
}
.results-browser-table {
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
background: var(--panel);
width: 100%;
overflow-x: auto;
}
.results-browser-row {
display: grid;
grid-template-columns: minmax(280px, 1fr) 80px 120px 140px 50px 90px 110px 150px 110px;
gap: var(--legacy-space-3);
align-items: center;
padding: var(--legacy-space-2) var(--legacy-space-3);
border-top: var(--border-hair) solid var(--line);
font-size: var(--ui-control-size);
min-width: fit-content;
}
.results-browser-row:first-child {
border-top: 0;
}
.results-browser-row-toggle {
display: contents;
}
.results-browser-row.expanded {
background: var(--panel-raised);
}
.results-browser-head {
color: var(--muted);
background: var(--panel-soft);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
padding: var(--legacy-space-2) var(--legacy-space-3);
}
.results-browser-row span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.results-browser-row span[data-label=Titel] {
overflow: visible;
white-space: normal;
text-overflow: clip;
line-height: 1.35;
overflow-wrap: anywhere;
}
.results-browser-row-detail {
grid-column: 1 / -1;
padding: var(--legacy-space-3);
border-top: var(--border-hair) dashed var(--line);
color: var(--muted);
font-size: var(--ui-control-size);
line-height: 1.55;
}
.results-browser-row-detail ul {
margin: var(--legacy-space-2) 0 0;
padding: 0;
list-style: none;
display: grid;
gap: var(--legacy-space-1);
}
.results-environment-value {
color: var(--text);
font-size: var(--fs-lg);
line-height: var(--lh-prose);
}
.results-environment-value strong {
color: var(--heading);
}
.results-environment-value p {
margin: var(--legacy-space-1) 0 var(--legacy-space-3);
overflow-wrap: anywhere;
white-space: pre-wrap;
}
.results-processing-alert {
margin-bottom: var(--legacy-space-3);
}
@media (max-width: 1150px) {
.results-browser-layout {
grid-template-columns: 1fr;
}
.results-filter-panel {
position: static;
max-height: none;
}
.results-browser-row {
grid-template-columns: 1fr 1fr;
gap: var(--legacy-space-2) var(--legacy-space-4);
}
.results-browser-row span::before {
content: attr(data-label);
display: block;
margin-bottom: 2px;
color: var(--muted);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.results-browser-head {
display: none;
}
}
.datahub-mitre-management {
margin-top: var(--legacy-space-6);
padding-top: var(--legacy-space-5);
border-top: var(--border-hair) solid var(--line);
}
.datahub-mitre-card {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--legacy-space-4);
padding: var(--legacy-space-4);
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-md);
background: var(--panel-raised);
}
.datahub-mitre-info strong {
display: block;
color: var(--heading);
font-size: var(--ui-heading-size);
}
.datahub-mitre-info p {
margin: 4px 0 0;
color: var(--muted);
font-size: var(--ui-control-size);
}
.datahub-mitre-actions {
display: flex;
align-items: center;
gap: var(--legacy-space-3);
}
.datahub-mitre-upload-btn {
cursor: pointer;
}
.datahub-mitre-file-input {
display: none;
}
.baseline-table .tenant-file-row {
grid-template-columns: minmax(260px, 1fr) 90px 160px 150px 92px;
min-width: 760px;
}
.baseline-table .tenant-file-row > span {
white-space: nowrap;
}
.baseline-cell-num {
font: inherit;
font-variant-numeric: tabular-nums;
}
.baseline-table .baseline-status {
display: inline-flex;
align-items: center;
gap: var(--legacy-space-2);
color: var(--text);
font-weight: var(--ui-body-weight);
}
.baseline-table .baseline-status::before {
content: "";
flex: 0 0 auto;
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--success);
}
.baseline-table .baseline-status[data-status=metadata-required]::before {
background: var(--warning);
}
@media (max-width: 1050px) {
.baseline-table .tenant-file-row {
grid-template-columns: 1fr 1fr;
min-width: 0;
}
}
.tenant-detail-page .tenant-editor-header {
grid-template-columns: minmax(0, 1fr) auto;
align-items: start;
gap: var(--space-5);
padding-bottom: var(--space-5);
border-bottom: 0;
}
.tenant-detail-page .tenant-back {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
min-width: 0;
min-height: var(--control-h);
font-size: var(--fs-md);
}
.tenant-identity {
align-self: center;
min-width: 0;
padding: var(--space-3) 0;
}
.tenant-detail-page .tenant-identity h2 {
margin: 0;
padding-bottom: var(--space-1);
overflow: hidden;
font-size: calc(var(--fs-xl) * 3);
font-weight: var(--fw-semibold);
line-height: 1.15;
letter-spacing: -.04em;
text-overflow: ellipsis;
white-space: nowrap;
}
.tenant-detail-page .tenant-identity p {
margin: var(--space-5) 0 0;
color: var(--text-secondary);
font-size: var(--fs-xl);
font-variant-numeric: tabular-nums;
}
.tenant-rack {
display: flex;
justify-content: flex-end;
}
.tenant-detail-page .tenant-navigation-open {
min-width: calc(var(--space-8) * 2.5);
}
.tenant-detail-page > .tenant-actions {
justify-content: flex-end;
flex-wrap: nowrap;
gap: var(--space-3);
padding: var(--space-4) 0;
border-bottom: 0;
}
.tenant-detail-page > .tenant-actions .btn {
min-width: calc(var(--space-8) * 3);
}
.tenant-detail-page > .tenant-actions .btn.primary {
min-width: calc(var(--space-8) * 4.25);
}
.tenant-detail-page > .tenant-actions .gpo-folder-actions .btn {
min-width: calc(var(--space-8) * 5.25);
}
.tenant-detail-page .tenant-editor {
margin-top: var(--space-4);
padding: 0;
overflow: hidden;
border-radius: var(--radius-nav-item);
background:
linear-gradient(
135deg,
var(--surface-panel-raised),
var(--surface-panel));
}
.tenant-section-bar {
display: flex;
align-items: center;
justify-content: space-between;
min-height: calc(var(--row-h) + var(--space-3));
padding: 0 var(--space-5);
border-bottom: var(--bw-hairline) solid var(--border-subtle);
color: var(--text-secondary);
font-size: var(--fs-md);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
.tenant-section-bar > span {
display: inline-flex;
align-items: center;
gap: var(--space-2);
}
.tenant-section-bar strong {
color: var(--text-secondary);
font-size: inherit;
font-weight: var(--fw-semibold);
}
.tenant-section-bar i {
color: var(--text-muted);
font-style: normal;
}
.tenant-detail-page .tenant-editor-form {
gap: var(--space-5) var(--space-8);
padding: var(--space-4) var(--space-5) var(--space-5);
}
.tenant-detail-page .tenant-editor-form label {
color: var(--text-primary);
font-size: var(--fs-lg);
font-weight: var(--fw-regular);
}
.tenant-detail-page .tenant-editor-form label > span {
color: var(--text-primary);
font-size: var(--fs-md);
}
.tenant-detail-page .tenant-editor-form .input {
min-height: calc(var(--control-h) + var(--space-4));
border-radius: var(--radius-nav-item);
font-size: var(--fs-md);
}
.tenant-detail-page .tenant-editor-form .input[readonly] {
border-color: var(--border-subtle);
color: var(--text-secondary);
background: var(--surface-panel);
cursor: default;
}
.tenant-detail-page .tenant-editor-description textarea {
min-height: calc(var(--space-8) * 4);
padding-top: var(--space-3);
}
.tenant-detail-page .tenant-files {
margin-top: var(--space-3);
}
.tenant-scan-history {
overflow: hidden;
border: var(--bw-hairline) solid var(--border-default);
border-radius: var(--radius-nav-item);
background:
linear-gradient(
135deg,
var(--surface-panel-raised),
var(--surface-panel));
}
.tenant-scan-history > summary {
cursor: pointer;
list-style: none;
}
.tenant-scan-history > summary::-webkit-details-marker {
display: none;
}
.tenant-section-bar .tenant-history-meta {
gap: var(--space-5);
}
.tenant-history-meta b {
display: inline-grid;
place-items: center;
min-width: var(--control-h);
min-height: var(--control-h-sm);
padding: 0 var(--space-2);
border: var(--bw-hairline) solid var(--border-default);
border-radius: var(--radius-nav-item);
color: var(--text-secondary);
background: var(--surface-input);
font-size: var(--fs-md);
font-weight: var(--fw-regular);
font-variant-numeric: tabular-nums;
}
.tenant-history-meta .triangle-icon {
transition: transform var(--dur-base) var(--ease);
}
.tenant-scan-history[open] .tenant-history-meta .triangle-icon-right {
transform: rotate(-90deg);
}
.tenant-scan-history > .tenant-file-table {
border: 0;
border-radius: 0;
background: transparent;
}
.tenant-scan-history .tenant-file-row {
min-height: calc(var(--row-h) + var(--space-4));
padding-inline: var(--space-5);
font-size: var(--fs-md);
}
.tenant-detail-page .tenant-file-row {
grid-template-columns: minmax(calc(var(--space-8) * 5), 1.1fr) minmax(calc(var(--space-8) * 5), 1.15fr) .62fr .55fr .72fr minmax(calc(var(--space-8) * 5), 1.2fr) .55fr;
min-width: calc(var(--space-8) * 29);
}
.tenant-timeslots {
display: grid;
gap: var(--space-3);
margin-top: var(--space-8);
}
.tenant-timeslots-heading {
margin: 0;
color: var(--text);
font-size: calc(var(--fs-xl) * 1.25);
font-weight: var(--fw-semibold);
}
.tenant-timeslots .tenant-files {
margin-top: 0;
}
.tenant-timeslot.is-selected {
border-color: var(--state-active);
outline: var(--bw-hairline) solid var(--state-active);
outline-offset: calc(-1 * var(--bw-hairline));
}
.tenant-timeslot-title {
display: inline-flex;
align-items: center;
gap: var(--space-3);
}
.tenant-timeslot-title input[type=checkbox] {
width: 16px;
height: 16px;
margin: 0;
accent-color: var(--state-active);
cursor: pointer;
}
.tenant-timeslot-actions {
display: inline-flex;
align-items: center;
justify-content: flex-end;
gap: var(--space-2);
margin-left: auto;
margin-right: var(--space-5);
letter-spacing: normal;
text-transform: none;
}
.tenant-timeslot-actions .btn {
min-width: calc(var(--space-8) * 3);
white-space: nowrap;
}
.tenant-timeslot-actions .btn.primary {
min-width: calc(var(--space-8) * 4);
}
.tenant-timeslot-actions .gpo-folder-actions .btn {
min-width: calc(var(--space-8) * 7);
}
.tenant-timeslot-create-row {
display: grid;
place-items: center;
width: 100%;
min-height: calc(var(--control-h) + var(--space-3));
padding: 0;
border: var(--bw-hairline) solid var(--border-default);
border-radius: var(--radius-nav-item);
color: var(--text-secondary);
background: var(--surface-panel);
cursor: pointer;
}
.tenant-timeslot-create-row span {
font-size: calc(var(--fs-xl) * 1.6);
font-weight: var(--fw-regular);
line-height: 1;
}
.tenant-timeslot-create-row:hover {
color: var(--text-primary);
background: var(--surface-panel-raised);
}
.tenant-timeslot-create-row:focus-visible {
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: var(--bw-hairline);
}
.tenant-timeslot-selection {
display: flex;
align-items: center;
gap: var(--space-3);
min-height: var(--control-h);
padding: 0;
border: 0;
border-radius: 0;
color: var(--text-secondary);
font-size: var(--fs-lg);
}
.tenant-timeslot-selection strong {
color: var(--text-primary);
}
.tenant-timeslot-report-actions {
display: flex;
align-items: center;
gap: var(--space-1);
}
.tenant-timeslot-report-actions .tenant-scan-delete {
min-width: var(--control-h-sm);
width: var(--control-h-sm);
height: var(--control-h-sm);
padding: 0;
}
.timeslot-dialog-form {
display: grid;
gap: var(--space-4);
min-width: min(360px, 72vw);
}
.timeslot-dialog-form label {
display: grid;
gap: var(--space-2);
color: var(--text-primary);
font-weight: var(--fw-semibold);
}
.timeslot-dialog-form p {
margin: 0;
color: var(--text-secondary);
line-height: 1.5;
}
.timeslot-dialog-form footer {
display: flex;
justify-content: flex-end;
gap: var(--space-2);
padding-top: var(--space-3);
border-top: var(--bw-hairline) solid var(--border-subtle);
}
.tenant-scan-history .tenant-file-head {
min-height: calc(var(--row-h) + var(--space-2));
background: color-mix(in srgb, var(--surface-input) 36%, transparent);
font-size: var(--fs-sm);
}
.tenant-scan-history .tenant-file-row b {
color: var(--text-primary);
font-weight: var(--fw-semibold);
}
.tenant-scan-history .tenant-scan-delete {
min-width: calc(var(--space-8) * 2.75);
}
@media (max-width: 1050px) {
.tenant-detail-page .tenant-editor-header {
grid-template-columns: 1fr;
}
.tenant-detail-page .tenant-file-row {
min-width: 0;
}
}
@media (max-width: 800px) {
.tenant-detail-page > .tenant-actions {
flex-wrap: wrap;
}
.tenant-timeslot-actions {
flex-wrap: wrap;
justify-content: flex-start;
margin: var(--space-2) 0;
}
.tenant-timeslot > summary {
align-items: flex-start;
flex-wrap: wrap;
padding-block: var(--space-2);
}
}
.datahub-page.tenant-detail-page {
height: 100%;
min-height: 0;
padding: var(--panel-inset);
overflow: hidden;
}
.tenant-detail-page > .tenant-detail-layout {
display: grid;
grid-template-columns: clamp(420px, 27vw, 520px) minmax(0, 1fr);
width: 100%;
max-width: none;
height: 100%;
min-height: 0;
margin: 0;
}
.tenant-detail-navigation,
.tenant-detail-information {
min-width: 0;
min-height: 0;
background: var(--surface-app);
}
.tenant-detail-navigation {
display: flex;
flex-direction: column;
overflow: hidden;
border-right: var(--bw-hairline) solid var(--border-default);
}
.tenant-detail-information {
display: block;
padding: var(--space-5) var(--space-6);
overflow-y: auto;
scrollbar-color: var(--border-strong) var(--surface-panel);
scrollbar-width: thin;
}
.tenant-information-sheet {
width: min(794px, 100%);
background: transparent;
}
.tenant-policy-information {
width: 100%;
}
.tenant-detail-page .tenant-editor-header {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
column-gap: var(--space-3);
flex: 0 0 auto;
padding: var(--space-5) var(--space-5) var(--space-4);
border-bottom: 0;
}
.tenant-detail-page .tenant-back {
grid-column: 1;
justify-self: start;
min-height: var(--control-h);
margin-bottom: 0;
color: var(--text-secondary);
}
.tenant-detail-page .tenant-navigation-open {
grid-column: 2;
justify-self: end;
}
.tenant-detail-page .tenant-identity {
grid-column: 1 / -1;
padding: 0;
margin-top: var(--space-4);
}
.tenant-detail-page .tenant-identity h2 {
padding: 0;
font-size: var(--type-h2-size);
font-weight: var(--fw-semibold);
line-height: 1.15;
letter-spacing: -.03em;
}
.tenant-detail-page .tenant-identity p {
margin: var(--space-2) 0 0;
font-size: var(--fs-lg);
}
.tenant-timeslots {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: 0;
min-height: 0;
margin: 0;
overflow: hidden;
}
.tenant-timeslots-header {
display: flex;
flex: 0 0 auto;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
padding: 0 var(--space-5) var(--space-3);
border-bottom: var(--bw-hairline) solid var(--border-default);
}
.tenant-timeslots-heading {
margin: 0;
color: var(--text-primary);
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
letter-spacing: 0;
text-transform: none;
}
.tenant-timeslot-add {
flex: 0 0 auto;
}
.tenant-timeslot-add > span {
margin-right: var(--space-1);
font-size: var(--fs-lg);
line-height: 1;
}
.tenant-timeslot-list {
display: grid;
grid-auto-rows: max-content;
align-content: start;
flex: 1 1 auto;
gap: var(--space-3);
min-height: 0;
padding: var(--space-2) var(--space-2) var(--space-5);
overflow-y: auto;
scrollbar-color: var(--border-strong) var(--surface-inset);
scrollbar-gutter: stable;
scrollbar-width: thin;
}
.tenant-detail-page .tenant-files {
margin: 0;
}
.tenant-scan-history {
position: relative;
overflow: hidden;
border: var(--bw-hairline) solid var(--border-default);
border-radius: var(--radius-nav-item);
background: var(--surface-panel-raised);
}
.tenant-scan-history::after {
content: none;
}
.tenant-timeslot.is-selected {
border-color: var(--state-active);
outline: var(--bw-hairline) solid var(--state-active);
outline-offset: calc(-1 * var(--bw-hairline));
box-shadow: inset var(--marker-width) 0 0 var(--state-active);
}
.tenant-timeslot.is-selected::after {
display: none;
}
.tenant-timeslot > .tenant-section-bar {
min-height: calc(var(--row-h) + var(--space-4));
padding: 0 var(--space-4) 0 var(--space-5);
border-bottom: 0;
background: transparent;
letter-spacing: normal;
text-transform: none;
}
.tenant-timeslot.is-selected > .tenant-section-bar {
background: var(--surface-hover);
}
.tenant-timeslot > .tenant-section-bar:hover {
background: var(--surface-hover);
}
.tenant-timeslot-title {
align-self: stretch;
flex: 0 0 calc(var(--space-8) * 4.25);
padding-left: var(--space-1);
gap: var(--space-3);
cursor: pointer;
}
.tenant-timeslot > .tenant-section-bar > .tenant-history-meta {
align-self: stretch;
flex: 1 1 auto;
justify-content: flex-end;
cursor: pointer;
}
.tenant-timeslot-title input[type=checkbox],
.tenant-report-row input[type=checkbox] {
flex: 0 0 auto;
width: var(--space-4);
height: var(--space-4);
margin: 0;
accent-color: var(--state-active);
cursor: pointer;
}
.tenant-timeslot-title strong {
color: var(--text-primary);
font-size: var(--fs-lg);
font-weight: var(--fw-semibold);
font-variant-numeric: tabular-nums;
}
.tenant-section-bar .tenant-history-meta {
gap: var(--space-4);
}
.tenant-history-meta b {
min-width: var(--control-h);
min-height: var(--control-h);
border-color: var(--border-default);
background: var(--surface-panel-raised);
font-size: var(--fs-md);
}
.tenant-report-list {
border-top: var(--bw-hairline) solid var(--border-subtle);
container: timeslot-sources / inline-size;
}
.tenant-report-row {
display: grid;
grid-template-columns: var(--space-5) minmax(calc(var(--space-8) * 3.75), 1fr) calc(var(--space-8) * 4.25) calc(var(--space-8) * 3) calc(var(--space-8) * 2);
align-items: center;
gap: var(--space-2);
min-height: calc(var(--row-h) + var(--space-5));
padding: var(--space-2) var(--space-3);
border-bottom: var(--bw-hairline) solid var(--border-subtle);
background: var(--surface-panel-raised);
}
.tenant-report-row:last-child {
border-bottom: 0;
}
.tenant-report-row:not(.tenant-report-head):hover {
background: var(--surface-hover);
}
.tenant-report-head {
min-height: calc(var(--row-h) + var(--space-2));
color: var(--text-secondary);
background: var(--surface-panel);
font-size: var(--type-table-head-size);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
.tenant-report-copy {
display: grid;
gap: var(--space-1);
min-width: 0;
}
.tenant-report-row > * {
min-width: 0;
}
.tenant-report-copy > * {
min-width: 0;
}
.tenant-report-copy b {
overflow: hidden;
color: var(--text-primary);
font-size: var(--fs-lg);
font-weight: var(--fw-regular);
text-overflow: ellipsis;
white-space: nowrap;
}
.tenant-report-copy small {
overflow: hidden;
color: var(--text-secondary);
font-size: var(--type-meta-size);
font-variant-numeric: tabular-nums;
text-overflow: ellipsis;
white-space: nowrap;
}
.tenant-report-imported {
overflow: hidden;
color: var(--text-primary);
font-size: var(--type-body-size);
font-variant-numeric: tabular-nums;
text-overflow: ellipsis;
white-space: nowrap;
}
.tenant-report-status {
display: inline-flex;
align-items: center;
gap: var(--space-2);
min-width: 0;
color: var(--text-primary);
font-size: var(--type-body-size);
font-weight: var(--fw-regular);
white-space: nowrap;
}
.tenant-report-status::before {
flex: 0 0 auto;
width: var(--space-2);
height: var(--space-2);
border-radius: 50%;
background: var(--text-secondary);
content: "";
}
.tenant-report-status[data-status=recognized]::before {
background: var(--state-done);
}
.tenant-report-status[data-status=succeeded]::before {
background: var(--state-done);
}
.tenant-report-status[data-status=generic]::before {
background: var(--outcome-warning);
}
.tenant-report-status[data-status=queued]::before,
.tenant-report-status[data-status=running]::before {
background: var(--info);
}
.tenant-report-status[data-status=partial]::before,
.tenant-report-status[data-status=upload-required]::before,
.tenant-report-status[data-status=storage-unavailable]::before,
.tenant-report-status[data-status=recovery-required]::before {
background: var(--warning);
}
.tenant-report-status[data-status=not-viewable]::before,
.tenant-report-status[data-status=unavailable]::before,
.tenant-report-status[data-status=processing-error]::before,
.tenant-report-status[data-status=dead-letter]::before {
background: var(--state-offline);
}
.tenant-report-status[data-status=processing-error] {
color: var(--state-offline);
}
.tenant-report-status[data-status=dead-letter] {
color: var(--state-offline);
}
.tenant-report-status[data-status=reimport-recommended]::before,
.tenant-report-status[data-status=re-evaluation-required]::before,
.tenant-report-status[data-status=review-required]::before {
background: var(--warning);
}
.tenant-report-status[data-status=reimport-recommended],
.tenant-report-status[data-status=re-evaluation-required],
.tenant-report-status[data-status=review-required] {
color: var(--warning);
}
.tenant-processing-alert {
display: grid;
gap: var(--space-3);
margin: var(--space-4) var(--space-5);
padding: var(--space-4);
border: var(--bw-hairline) solid var(--warning);
color: var(--text-primary);
background: color-mix(in srgb, var(--warning) 8%, var(--surface-panel));
}
.tenant-processing-alert > header {
display: grid;
gap: var(--space-1);
}
.tenant-processing-alert > header > strong {
color: var(--warning);
font-size: var(--fs-lg);
}
.tenant-processing-alert[data-status=error] {
border-color: var(--state-offline);
background: color-mix(in srgb, var(--state-offline) 8%, var(--surface-panel));
}
.tenant-processing-alert[data-status=error] > header > strong {
color: var(--state-offline);
}
.tenant-processing-alert > header > span {
color: var(--text-secondary);
font-size: var(--fs-md);
}
.tenant-processing-alert-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: var(--space-4);
padding-top: var(--space-3);
border-top: var(--bw-hairline) solid var(--border-subtle);
}
.tenant-processing-alert-row p {
margin: var(--space-1) 0 0;
color: var(--text-secondary);
font-size: var(--fs-md);
line-height: var(--lh-prose);
}
.tenant-processing-alert-row .btn {
white-space: nowrap;
}
.tenant-report-row input[type=checkbox]:disabled {
cursor: not-allowed;
opacity: .42;
}
.tenant-report-row .tenant-scan-delete {
min-width: calc(var(--space-8) * 2);
width: 100%;
}
.tenant-report-gpo .tenant-report-copy b,
.tenant-report-gpo .tenant-report-copy small {
overflow: visible;
text-overflow: clip;
white-space: normal;
overflow-wrap: normal;
}
.tenant-report-gpo {
grid-template-columns: var(--space-5) minmax(0, 1fr) minmax(0, 8rem) minmax(0, 11rem) minmax(0, 7rem);
}
.tenant-report-gpo .tenant-report-status {
display: block;
white-space: normal;
overflow: visible;
}
.tenant-report-gpo .tenant-report-status::before {
display: inline-block;
margin-inline-end: var(--space-1);
}
.tenant-report-gpo .tenant-gpo-row-actions .btn {
white-space: normal;
word-break: normal;
}
@container timeslot-sources (max-width: 620px) {
.tenant-report-row:not(.tenant-report-head) {
grid-template-columns: var(--space-5) minmax(0, 1fr) calc(var(--space-8) * 2.5);
align-items: start;
}
.tenant-report-head {
display: none;
}
.tenant-report-row > :first-child {
grid-column: 1;
grid-row: 1;
}
.tenant-report-row > :not(:first-child) {
grid-column: 2;
}
.tenant-report-row > :last-child {
grid-column: 3;
grid-row: 1 / span 3;
align-self: start;
}
.tenant-report-copy b,
.tenant-report-copy small,
.tenant-report-imported {
overflow: visible;
text-overflow: clip;
white-space: normal;
overflow-wrap: anywhere;
}
.tenant-report-imported {
font-size: var(--type-meta-size);
}
.tenant-report-imported::before {
content: "Imported: ";
color: var(--text-secondary);
}
.tenant-report-status {
flex-wrap: wrap;
font-size: var(--type-table-body-size);
}
}
.tenant-gpo-source-marker {
display: grid;
place-items: center;
width: var(--space-5);
height: var(--space-5);
color: var(--surface-app);
background: var(--marking-color);
font-size: var(--type-badge-size);
font-weight: var(--fw-semibold);
}
.tenant-report-row .tenant-gpo-view {
min-width: calc(var(--space-8) * 2);
width: 100%;
}
.tenant-gpo-row-actions {
display: grid;
gap: var(--space-1);
}
.gpo-source-recovery {
flex-wrap: wrap;
min-width: 0;
}
.gpo-source-recovery .gpo-folder-feedback {
position: static;
width: 100%;
overflow-wrap: normal;
}
.tenant-gpo-row-actions .btn {
width: 100%;
min-width: 0;
padding-inline: var(--space-1);
}
.tenant-report-row .btn:not(.danger):not(.primary):hover:not(:disabled) {
background: var(--button-bg);
color: var(--button-text);
border-color: var(--border-strong);
}
.tenant-report-no-action {
color: var(--text-secondary);
text-align: center;
}
.tenant-timeslot-actions {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--space-2);
margin: 0;
padding: var(--space-3) var(--space-4) var(--space-3) var(--space-8);
border-top: var(--bw-hairline) solid var(--border-subtle);
background: var(--surface-panel-raised);
}
.tenant-timeslot-actions .btn,
.tenant-timeslot-actions .gpo-folder-actions,
.tenant-timeslot-actions .gpo-folder-actions .btn {
width: 100%;
min-width: 0;
white-space: nowrap;
}
.tenant-timeslot-actions .gpo-folder-actions {
display: contents;
}
.tenant-timeslot-add-heading {
grid-column: 1 / -1;
display: grid;
gap: var(--space-1);
margin-bottom: var(--space-1);
}
.tenant-timeslot-add-heading h4 {
margin: 0;
font-size: var(--type-body-size);
font-weight: var(--fw-semibold);
}
.tenant-timeslot-add-heading span,
.tenant-timeslot-delete-action > span {
color: var(--text-secondary);
font-size: var(--type-meta-size);
}
.tenant-timeslot-delete-action {
grid-column: 1 / -1;
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--space-2);
margin-top: var(--space-2);
padding-top: var(--space-3);
border-top: var(--bw-hairline) solid var(--border-subtle);
}
.tenant-timeslot-delete-action .btn {
width: auto;
}
.tenant-timeslot-actions .gpo-folder-feedback {
position: static;
grid-column: 1 / -1;
width: auto;
}
.tenant-files-empty {
margin: 0;
border: 0;
border-top: var(--bw-hairline) solid var(--border-subtle);
border-radius: 0;
background: var(--surface-panel-raised);
}
.tenant-information-header {
display: flex;
flex: 0 0 auto;
align-items: center;
justify-content: space-between;
gap: var(--space-4);
min-height: calc(var(--row-h) + var(--space-3));
padding: 0 0 var(--space-3);
border-bottom: var(--bw-hairline) solid var(--border-default);
background: transparent;
}
.tenant-information-title,
.tenant-information-actions {
display: inline-flex;
align-items: center;
gap: var(--space-2);
}
.tenant-information-actions {
flex-wrap: wrap;
justify-content: flex-end;
}
.tenant-information-title > strong {
color: var(--text-primary);
font-size: var(--type-h3-size);
font-weight: var(--fw-semibold);
letter-spacing: 0;
text-transform: none;
}
.tenant-edit-client,
.tenant-save-client {
min-width: calc(var(--space-8) * 3);
}
.tenant-detail-page .tenant-editor-form {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 0;
padding: 0;
}
.tenant-detail-page .tenant-editor-form label {
display: block;
min-height: 0;
padding: var(--space-5) 0;
border-bottom: var(--bw-hairline) solid var(--border-subtle);
}
.tenant-detail-page .tenant-editor-form .tenant-field-label {
display: flex;
align-items: baseline;
justify-content: space-between;
justify-self: stretch;
gap: var(--space-2);
margin-bottom: var(--space-3);
padding: 0;
color: var(--text-primary);
background: transparent;
font-size: var(--type-label-size);
font-weight: var(--fw-semibold);
letter-spacing: 0;
text-transform: none;
}
.tenant-detail-page .tenant-editor-form .tenant-field-label i {
color: var(--text-secondary);
font-size: var(--fs-md);
font-style: normal;
font-weight: var(--fw-regular);
}
.tenant-detail-page .tenant-editor-form .tenant-field-value {
display: block;
justify-self: start;
color: var(--text-primary);
font-size: var(--type-body-size);
font-weight: var(--fw-regular);
letter-spacing: normal;
line-height: var(--lh-prose);
text-align: left;
text-transform: none;
}
.tenant-field-prose {
white-space: pre-wrap;
}
.tenant-detail-page .tenant-editor-form .input {
min-height: var(--control-h);
width: auto;
min-width: 0;
padding: 0;
border: 0;
border-radius: 0;
color: var(--text-primary);
background: transparent;
font-size: var(--fs-lg);
}
.tenant-detail-page .tenant-editor-form textarea.input {
display: block;
width: 100%;
min-height: calc(var(--space-8) * 2);
line-height: var(--lh-prose);
resize: none;
}
.tenant-detail-page .tenant-editor-form.is-editing .input {
min-height: calc(var(--control-h) + var(--space-3));
margin: 0;
padding: 0 var(--space-3);
border: var(--bw-hairline) solid var(--border-default);
border-radius: var(--btn-radius);
background: var(--surface-input);
}
.tenant-detail-page .tenant-editor-form.is-editing textarea.input {
min-height: calc(var(--space-8) * 8);
padding-top: var(--space-3);
resize: vertical;
}
.tenant-detail-page .tenant-editor-form .input[readonly] {
border: 0;
color: var(--text-primary);
background: transparent;
}
.tenant-information-sheet > .datahub-alert,
.tenant-information-sheet > .tenant-save-feedback {
width: auto;
margin: var(--space-3) 0;
}
.tenant-delete-client {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: calc(var(--space-8) * 3);
margin: 0;
cursor: pointer;
}
.tenant-delete-client:focus-visible {
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: var(--space-1);
}
@media (max-width: 1050px) {
.datahub-page.tenant-detail-page {
height: auto;
min-height: 100%;
overflow: visible;
}
.tenant-detail-page > .tenant-detail-layout {
grid-template-columns: 1fr;
height: auto;
}
.tenant-detail-navigation {
max-height: calc(var(--space-8) * 20);
border-right: 0;
border-bottom: var(--bw-hairline) solid var(--border-default);
}
.tenant-detail-information {
min-height: calc(var(--space-8) * 15);
overflow: visible;
}
.tenant-information-sheet {
width: 100%;
}
}
@media (max-width: 700px) {
.tenant-timeslot-actions {
grid-template-columns: 1fr;
}
.tenant-detail-page .tenant-editor-form label {
grid-template-columns: 1fr;
gap: var(--space-2);
}
}
/* src/styles/datahub-redesign.css */
.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(--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: transparent;
background: var(--tile-surface-hover);
box-shadow: var(--tile-card-shadow);
}
.datahub-tenant-card.is-selected {
border-color: var(--tile-selected-border);
outline: var(--bw-emphasis) solid var(--tile-selected-border);
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],
.datahub-tenant-processing-dot[data-status=review] {
background: var(--warning);
}
.datahub-tenant-processing-dot[data-status=processing],
.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=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);
}
.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;
}
.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);
}
.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;
}
.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;
}
.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) {
.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;
}
}
/* src/styles/policy-analysis.css */
.policy-analysis-panel {
margin-top: var(--legacy-space-6);
padding-top: var(--legacy-space-5);
border-top: var(--border-hair) solid var(--line);
}
.policy-analysis-boundary {
margin: 0 0 var(--legacy-space-4);
padding: var(--legacy-space-3);
border-left: 3px solid var(--warning);
color: var(--heading);
background: var(--panel-soft);
font-size: var(--ui-control-size);
line-height: 1.5;
}
.policy-analysis-empty {
padding-block: 28px;
}
.policy-analysis-result-groups {
display: grid;
gap: var(--legacy-space-5);
}
.policy-analysis-result-group {
display: grid;
gap: var(--legacy-space-2);
}
.policy-analysis-result-group > h4 {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
}
.policy-analysis-summary {
display: grid;
grid-template-columns: repeat(auto-fill, var(--tile-compact-width));
justify-content: start;
gap: var(--segment-gap);
padding: var(--segment-inset);
border-radius: var(--segment-radius);
background: var(--segment-surface);
}
.policy-analysis-summary article {
display: grid;
gap: var(--legacy-space-1);
min-width: 0;
padding: var(--legacy-space-3);
overflow: hidden;
border: 0;
border-left: 3px solid var(--line-strong);
border-radius: var(--tile-radius);
background: var(--tile-surface);
box-shadow: none;
}
.policy-analysis-summary article[data-result=pass] {
border-left-color: var(--success);
}
.policy-analysis-summary article[data-result=fail] {
border-left-color: var(--critical);
}
.policy-analysis-summary span {
color: var(--muted);
font-size: var(--ui-control-size);
}
.policy-analysis-summary strong {
color: var(--heading);
font-family: inherit;
font-size: var(--ui-heading-size);
}
.policy-analysis-summary small {
color: var(--muted);
font-size: var(--ui-small-size);
line-height: 1.4;
}
.policy-analysis-problems article {
min-height: 116px;
}
.policy-analysis-technical,
.policy-analysis-controls {
margin-top: var(--legacy-space-5);
border-top: var(--border-hair) solid var(--line);
}
.policy-analysis-technical > summary,
.policy-analysis-controls > summary {
width: fit-content;
padding: var(--legacy-space-3) 0;
cursor: pointer;
color: var(--heading);
font-size: var(--ui-control-size);
font-weight: var(--ui-strong-weight);
}
.policy-analysis-technical[open] > summary,
.policy-analysis-controls[open] > summary {
margin-bottom: var(--legacy-space-3);
}
.policy-analysis-columns {
display: grid;
grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
gap: var(--legacy-space-4);
align-items: start;
}
.policy-analysis-columns > section {
min-width: 0;
padding: var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
background: var(--panel);
}
.policy-analysis-subheading {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--legacy-space-2);
margin-bottom: var(--legacy-space-2);
}
.policy-analysis-subheading h4 {
margin: 0;
color: var(--heading);
font-size: var(--ui-body-size);
}
.policy-analysis-subheading span {
color: var(--muted);
font-family: var(--font-mono);
font-size: var(--ui-control-size);
}
.policy-analysis-muted {
margin: 0;
color: var(--muted);
font-size: var(--ui-control-size);
line-height: 1.5;
}
.policy-evaluation-list,
.policy-review-list {
display: grid;
gap: var(--legacy-space-2);
}
.policy-evaluation-list article {
padding: var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
border-left: 3px solid var(--marking-color);
background: var(--panel-raised);
}
.policy-evaluation-list header,
.policy-evaluation-list footer {
display: flex;
justify-content: space-between;
gap: var(--legacy-space-2);
color: var(--muted);
font-size: var(--ui-control-size);
}
.policy-evaluation-list header strong,
.policy-evaluation-list footer strong {
color: var(--heading);
}
.policy-evaluation-list article > div {
display: flex;
flex-wrap: wrap;
gap: var(--legacy-space-1) var(--legacy-space-3);
margin: var(--legacy-space-2) 0;
color: var(--muted);
font-size: var(--ui-control-size);
}
.policy-review-item {
border: var(--border-hair) solid var(--line);
border-left: 3px solid var(--warning);
background: var(--panel-raised);
}
.policy-review-item summary {
display: flex;
justify-content: space-between;
gap: var(--legacy-space-3);
padding: var(--legacy-space-2) var(--legacy-space-3);
cursor: pointer;
}
.policy-review-item summary strong {
color: var(--heading);
font-size: var(--ui-control-size);
}
.policy-review-item summary span {
color: var(--muted);
font-size: var(--ui-small-size);
text-align: right;
}
.policy-review-detail {
display: grid;
gap: var(--legacy-space-1);
padding: var(--legacy-space-2) var(--legacy-space-3) var(--legacy-space-3);
border-top: var(--border-hair) dashed var(--line);
color: var(--muted);
font-size: var(--ui-small-size);
overflow-wrap: anywhere;
}
.policy-review-detail code {
display: inline-block;
margin: 0 var(--legacy-space-1) var(--legacy-space-1) 0;
color: var(--heading);
}
@media (max-width: 900px) {
.policy-analysis-columns {
grid-template-columns: 1fr;
}
}
/* src/styles/policy-analysis-actions.css */
.policy-orchestration {
margin-top: var(--legacy-space-6);
padding-top: var(--legacy-space-5);
border-top: var(--border-hair) solid var(--line);
}
.policy-profile-editor {
margin-top: var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
background: var(--panel);
}
.policy-profile-editor > summary {
padding: var(--legacy-space-3);
color: var(--heading);
font-weight: var(--ui-strong-weight);
cursor: pointer;
}
.policy-profile-editor form {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--legacy-space-3);
padding: var(--legacy-space-3);
border-top: var(--border-hair) solid var(--line);
}
.policy-profile-editor label {
display: grid;
gap: var(--legacy-space-1);
color: var(--heading);
font-size: var(--ui-control-size);
}
.policy-profile-editor label > span {
color: var(--muted);
font-size: var(--ui-small-size);
}
.policy-profile-editor fieldset {
display: grid;
grid-column: 1 / -1;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: var(--legacy-space-3);
margin: 0;
padding: var(--legacy-space-3);
border: var(--border-hair) solid var(--line);
}
.policy-profile-editor legend {
padding-inline: var(--legacy-space-1);
color: var(--muted);
font-size: var(--ui-label-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.policy-profile-editor .policy-profile-product-toggle {
display: flex;
grid-column: 1 / -1;
grid-template-columns: auto 1fr;
align-items: center;
}
.policy-profile-editor footer {
display: flex;
grid-column: 1 / -1;
justify-content: flex-end;
}
.policy-action-stages {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: var(--segment-gap);
margin-top: var(--legacy-space-4);
padding: var(--segment-inset);
border: var(--border-hair) solid var(--segment-border);
border-radius: var(--segment-radius);
background: var(--segment-surface);
}
.policy-action-stages > section {
min-width: 0;
padding: var(--legacy-space-3);
overflow: hidden;
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
}
.policy-action-stages h4 {
margin: 0 0 var(--legacy-space-2);
color: var(--heading);
font-size: var(--ui-body-size);
}
.policy-action-stages section > p {
margin: 0;
color: var(--muted);
font-size: var(--ui-control-size);
}
.policy-action-stages article {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--legacy-space-3);
padding: var(--legacy-space-2) 0;
border-top: var(--border-hair) solid var(--line);
}
.policy-action-stages article > div {
display: grid;
gap: var(--legacy-space-1);
min-width: 0;
color: var(--muted);
font-size: var(--ui-small-size);
}
.policy-action-stages article strong {
color: var(--heading);
font-size: var(--ui-control-size);
}
.policy-action-stages article code {
overflow: hidden;
color: var(--muted);
text-overflow: ellipsis;
white-space: nowrap;
}
.policy-action-reasons {
display: flex;
flex-wrap: wrap;
gap: var(--legacy-space-1);
}
.policy-action-reasons code {
color: var(--warning);
white-space: normal;
overflow-wrap: anywhere;
}
@media (max-width: 1000px) {
.policy-action-stages {
grid-template-columns: 1fr;
}
.policy-profile-editor fieldset {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 620px) {
.policy-profile-editor form,
.policy-profile-editor fieldset {
grid-template-columns: 1fr;
}
}
/* src/styles/import-workflow.css */
.dialog-backdrop {
position: fixed;
inset: 0;
z-index: 1000;
display: grid;
place-items: center;
padding: 24px;
background: var(--surface-scrim);
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
}
.dialog-window {
width: min(500px, 100%);
max-height: calc(100vh - 48px);
display: flex;
flex-direction: column;
border: 1px solid var(--line-strong);
border-radius: 14px;
background: var(--panel);
box-shadow: var(--shadow);
}
.dialog-window > header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 16px 20px;
border-bottom: 1px solid var(--line);
}
.dialog-window > header h2 {
margin: 0;
font-size: var(--ui-heading-size);
}
.dialog-window > header button {
width: 24px;
height: 24px;
border: 1px solid var(--button-border);
border-radius: 0;
color: var(--button-text);
background: var(--button-bg);
font-size: var(--ui-heading-size);
cursor: pointer;
display: grid;
place-items: center;
}
.dialog-window > header button:hover {
color: var(--button-text);
background: var(--button-bg-hover);
border-color: var(--button-border);
}
.dialog-body {
min-height: 0;
overflow: auto;
padding: 20px;
}
.import-dialog-intro {
margin: 0 0 16px;
color: var(--muted);
}
.import-progress {
min-height: 180px;
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
color: var(--muted);
}
.import-spinner {
position: relative;
flex: 0 0 24px;
width: 24px;
height: 24px;
}
.import-spinner i {
position: absolute;
width: 5px;
height: 5px;
background: var(--line-strong);
opacity: .55;
animation: import-square-progress .8s steps(1, end) infinite;
}
.import-spinner i:nth-child(1) {
top: 0;
left: 9.5px;
animation-delay: 0s;
}
.import-spinner i:nth-child(2) {
top: 9.5px;
right: 0;
animation-delay: -.6s;
}
.import-spinner i:nth-child(3) {
bottom: 0;
left: 9.5px;
animation-delay: -.4s;
}
.import-spinner i:nth-child(4) {
top: 9.5px;
left: 0;
animation-delay: -.2s;
}
@keyframes import-square-progress {
0%, 24.999% {
background: var(--critical);
opacity: 1;
transform: scale(1.18);
}
25%, 100% {
background: var(--line-strong);
opacity: .55;
transform: scale(.82);
}
}
@media (prefers-reduced-motion: reduce) {
.import-spinner i {
animation: none;
transform: scale(.82);
}
.import-spinner i:first-child {
background: var(--critical);
opacity: 1;
transform: scale(1.18);
}
}
.import-workflow-error {
padding: 10px 12px;
border: 1px solid var(--critical);
border-radius: 8px;
color: var(--critical);
background: color-mix(in srgb, var(--critical) 10%, transparent);
}
.import-preview-list {
display: grid;
max-height: min(58vh, 660px);
overflow-x: hidden;
overflow-y: auto;
}
.import-preview-entry {
display: grid;
grid-template-columns: 28px minmax(0, 1fr);
gap: 12px;
min-width: 0;
padding: 14px 0;
border-bottom: 1px solid var(--line);
}
.import-preview-entry:first-child {
padding-top: 0;
}
.import-preview-entry:last-child {
padding-bottom: 0;
border-bottom: 0;
}
.import-preview-selection {
padding-top: 2px;
}
.import-preview-heading {
display: flex;
align-items: center;
gap: 9px;
min-width: 0;
}
.import-preview-main {
min-width: 0;
}
.import-preview-heading strong {
min-width: 0;
overflow-wrap: anywhere;
}
.import-status {
flex: 0 0 auto;
font-size: var(--ui-label-size);
font-weight: var(--fw-semibold);
}
.import-status-ready {
color: var(--low);
}
.import-status-replacement {
color: var(--low);
}
.import-status-warning,
.import-status-duplicate {
color: var(--medium);
}
.import-status-error {
color: var(--critical);
}
.import-preview-meta {
display: flex;
flex-wrap: wrap;
gap: 5px 12px;
margin-top: 7px;
color: var(--muted);
font-size: var(--ui-value-size);
}
.import-hash {
display: block;
margin-top: 7px;
color: var(--muted);
font-size: var(--ui-label-size);
overflow-wrap: anywhere;
white-space: normal;
}
.import-message {
margin: 7px 0 0;
color: var(--muted);
font-size: var(--ui-reading-size);
line-height: 1.45;
overflow-wrap: anywhere;
}
.import-duplicate-notice {
margin-top: 12px;
color: var(--muted);
overflow-wrap: anywhere;
}
.import-duplicate-notice h3 {
margin: 0 0 4px;
color: var(--text);
font-size: var(--ui-value-size);
}
.import-duplicate-notice p {
margin: 0;
font-size: var(--ui-reading-size);
line-height: 1.45;
}
.import-replacement-notice {
margin-top: 12px;
color: var(--muted);
overflow-wrap: anywhere;
}
.import-replacement-notice h3 {
margin: 0 0 4px;
color: var(--low);
font-size: var(--ui-value-size);
}
.import-replacement-notice p {
margin: 0;
font-size: var(--ui-reading-size);
line-height: 1.45;
}
.import-preview-action {
display: flex;
align-items: center;
}
.import-dialog-footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
margin-top: 16px;
padding-top: 14px;
border-top: 1px solid var(--line);
}
.import-dialog-footer > div {
display: flex;
gap: 8px;
}
.import-report-summary {
display: grid;
gap: 5px;
padding: 16px;
border-radius: 10px;
background: var(--panel-raised);
}
.import-report-summary span {
color: var(--muted);
}
.import-report-list {
display: grid;
gap: 8px;
margin-top: 12px;
max-height: 55vh;
overflow: auto;
}
.import-report-entry {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 4px 12px;
padding: 11px 12px;
border: 1px solid var(--line);
border-radius: 8px;
}
.import-report-entry small {
grid-column: 1 / -1;
color: var(--muted);
}
.import-report-imported > span {
color: var(--low);
}
.import-report-failed > span {
color: var(--critical);
}
@media (max-width: 760px) {
.import-preview-entry {
grid-template-columns: 26px minmax(0, 1fr);
}
.import-preview-action {
grid-column: 2;
}
.import-dialog-footer {
align-items: stretch;
flex-direction: column;
}
.import-dialog-footer > div {
justify-content: flex-end;
}
}
/* src/styles/legacy-views.css */
body {
font-family: var(--font);
font-size: var(--ui-body-size);
line-height: 1.45;
font-weight: var(--ui-body-weight);
}
button,
input,
select,
textarea {
font-family: inherit;
}
.btn,
.icon-btn,
.select,
.input,
.tab-btn,
.bookmark-btn,
.results-btn {
font-size: var(--ui-control-size);
line-height: 1.35;
}
.viewer {
overflow: hidden;
background: var(--bg);
}
.viewer-scroll,
.table-scroll {
height: 100%;
min-height: 0;
overflow: auto;
scrollbar-width: thin;
scrollbar-color: var(--line-strong) var(--panel-soft);
}
.viewer-scroll::-webkit-scrollbar,
.table-scroll::-webkit-scrollbar {
width: 10px;
height: 10px;
}
.viewer-scroll::-webkit-scrollbar-track,
.table-scroll::-webkit-scrollbar-track {
background: var(--panel-soft);
}
.viewer-scroll::-webkit-scrollbar-thumb,
.table-scroll::-webkit-scrollbar-thumb {
border: 2px solid var(--panel-soft);
border-radius: var(--radius-pill);
background: var(--line-strong);
}
.records-layout {
display: grid;
grid-template-columns: clamp(380px, 24vw, 470px) minmax(0, 1fr);
height: 100%;
min-height: 0;
padding: var(--panel-inset);
background: var(--bg);
}
.record-list {
min-width: 0;
min-height: 0;
padding: 0;
border: 0;
border-right: var(--border-hair) solid var(--border-strong);
background: transparent;
overflow-y: auto;
scrollbar-gutter: stable;
scrollbar-width: thin;
scrollbar-color: var(--border-strong) transparent;
}
.record-list::-webkit-scrollbar {
width: 6px;
}
.record-list::-webkit-scrollbar-track {
background: transparent;
margin: 4px 2px 4px 0;
}
.record-list::-webkit-scrollbar-thumb {
background: var(--border-strong);
border-radius: var(--radius-pill);
min-height: 36px;
}
.record-list::-webkit-scrollbar-thumb:hover {
background: var(--text-muted);
}
.record-card {
position: relative;
display: grid;
grid-template-columns: 28px minmax(0, 1fr);
grid-template-rows: auto auto;
column-gap: var(--space-2);
row-gap: var(--legacy-space-2);
width: 100%;
min-height: 74px;
margin: 0;
padding: 11px 14px;
border: 0;
border-left: var(--marker-width) solid transparent;
border-bottom: var(--border-hair) solid var(--line);
border-radius: 0;
color: var(--text);
background: var(--panel-raised);
box-shadow: none;
font: inherit;
text-align: left;
cursor: pointer;
transition: background .12s ease, border-color .12s ease;
}
.record-card:first-child {
border-top-left-radius: var(--radius-sm);
border-top-right-radius: var(--radius-sm);
}
.record-card:last-child {
border-bottom-left-radius: var(--radius-sm);
border-bottom-right-radius: var(--radius-sm);
border-bottom: 0;
}
.record-card::before {
content: "";
grid-column: 1;
grid-row: 1 / 3;
align-self: center;
justify-self: center;
width: 24px;
height: 27px;
clip-path: polygon(50% 0, 94% 24%, 94% 76%, 50% 100%, 6% 76%, 6% 24%);
background: var(--muted);
}
.record-card::after {
content: "";
grid-column: 1;
grid-row: 1 / 3;
align-self: center;
justify-self: center;
width: 7px;
height: 4px;
border-left: 2px solid var(--sev-on);
border-bottom: 2px solid var(--sev-on);
transform: translate(-6.5px, 0.5px) rotate(-45deg);
pointer-events: none;
}
.record-card:hover {
border-color: var(--line);
background: var(--panel-hover);
box-shadow: none;
transform: none;
}
.record-card.active,
.record-card.active:hover {
z-index: 1;
border-color: var(--line);
border-left-color: var(--state-selected-flat-border);
color: var(--state-selected-flat-text);
background: var(--state-selected-flat);
box-shadow: none;
transform: none;
}
.record-card.severity-critical::before {
background: var(--critical);
}
.record-card.severity-high::before {
background: var(--high);
}
.record-card.severity-medium::before {
background: var(--medium);
}
.record-card.severity-low::before {
background: var(--low);
}
.record-card.severity-info::before {
background: var(--info);
}
.record-card.is-workspace {
outline: 2px solid var(--state-active);
outline-offset: -2px;
}
.record-title {
grid-column: 2;
grid-row: 1;
align-self: end;
min-width: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--fw-regular);
line-height: 1.28;
overflow-wrap: anywhere;
}
.record-meta {
min-width: 0;
color: var(--muted);
font-size: var(--ui-control-size);
font-weight: 400;
line-height: 1.3;
}
.record-meta-line {
grid-column: 2;
grid-row: 2;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--legacy-space-2);
min-width: 0;
}
.record-diagnostic-badge {
display: inline-flex;
align-items: center;
min-height: 20px;
padding: 2px var(--legacy-space-2);
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--legacy-radius-sm);
color: var(--text);
background: transparent;
font-size: var(--ui-badge-size);
font-weight: var(--ui-label-weight);
line-height: 1.18;
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.record-card.active .record-title {
color: var(--state-selected-flat-text);
}
.record-card.active .record-meta {
color: var(--state-selected-flat-muted);
}
.record-card.active .record-diagnostic-badge {
border-color: var(--state-selected-flat-muted);
color: var(--state-selected-flat-text);
}
.action-pill {
display: inline-flex;
width: fit-content;
margin-left: var(--legacy-space-1);
padding: 1px var(--legacy-space-1);
border: var(--border-hair) solid var(--success);
border-radius: var(--legacy-radius-sm);
color: var(--sev-on);
background: var(--success);
font-size: var(--ui-small-size);
line-height: 1.4;
vertical-align: middle;
}
.finding-reader {
min-width: 0;
min-height: 0;
padding: var(--legacy-space-6) 0 var(--space-7);
color: var(--text);
background: var(--bg);
overflow-y: auto;
}
.finding-reader > * {
width: min(834px, calc(100% - var(--reader-inset) - var(--legacy-space-6)));
margin-left: var(--reader-inset);
margin-right: auto;
}
.reader-nav {
margin-bottom: var(--legacy-space-6);
color: var(--muted);
font-size: var(--ui-control-size);
}
.reader-nav button {
color: var(--text);
}
.reader-heading {
padding-bottom: var(--legacy-space-5);
border-color: var(--line);
}
.reader-heading h2 {
min-width: 0;
color: var(--heading);
font-size: var(--type-detail-title-size);
font-weight: var(--ui-strong-weight);
line-height: 1.3;
letter-spacing: 0;
}
.reader-heading h2 .technical-path,
.reader-summary h3 .technical-path {
display: block;
box-sizing: border-box;
width: 100%;
margin-top: var(--space-1);
}
.reader-title-hex {
width: 26px;
height: 30px;
}
.finding-badges,
.mitre-line {
gap: var(--legacy-space-2);
margin-top: var(--legacy-space-3);
font-size: var(--ui-badge-size);
}
.status-badge,
.severity-badge,
.mitre-badge,
.reader-severity {
display: inline-flex;
align-items: center;
min-height: 22px;
height: auto;
padding: 3px var(--legacy-space-2);
border: var(--border-hair) solid var(--line-strong);
border-radius: var(--legacy-radius-sm);
color: var(--text);
background: transparent;
font-size: var(--ui-badge-size);
font-weight: var(--ui-label-weight);
line-height: 1.18;
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
white-space: normal;
}
.severity-badge.severity-critical,
.reader-severity.severity-critical {
border-color: var(--critical-badge);
color: var(--severity-ink);
background: var(--critical-badge);
}
.severity-badge.severity-high,
.reader-severity.severity-high {
border-color: var(--high-badge);
color: var(--severity-ink);
background: var(--high-badge);
}
.severity-badge.severity-medium,
.reader-severity.severity-medium {
border-color: var(--medium-badge);
color: var(--severity-ink);
background: var(--medium-badge);
}
.severity-badge.severity-low,
.reader-severity.severity-low {
border-color: var(--low-badge);
color: var(--severity-ink);
background: var(--low-badge);
}
.severity-badge.severity-info,
.reader-severity.severity-info {
border-color: var(--info-badge);
color: var(--severity-ink);
background: var(--info-badge);
}
.reader-summary,
.review-grid,
.all-fields {
border-color: var(--line);
}
.reader-summary h3 {
color: var(--heading);
font-size: var(--type-h3-size);
font-weight: var(--ui-strong-weight);
line-height: 1.3;
letter-spacing: 0;
}
.reader-summary h4 {
color: var(--heading);
font-size: var(--ui-reading-size);
font-weight: var(--ui-label-weight);
line-height: 1.25;
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.reader-summary p,
.reader-summary .rich-text-value {
color: var(--text);
font-size: var(--ui-reading-size);
font-weight: 400;
line-height: 1.55;
}
.dashboard-grid label,
.review-grid > label {
color: var(--heading);
font-size: var(--ui-control-size);
font-weight: var(--ui-label-weight);
letter-spacing: var(--ui-label-tracking);
}
.dashboard-grid input,
.dashboard-grid select,
.review-grid textarea {
border-color: var(--line);
background-color: var(--surface-inset);
color: var(--text);
}
.tile-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(0, var(--tile-content-width)));
align-items: stretch;
align-content: start;
justify-content: start;
gap: var(--segment-gap);
min-height: 100%;
padding: var(--segment-inset);
border: var(--border-hair) solid var(--segment-border);
border-radius: var(--segment-radius);
background: var(--segment-surface);
}
.data-tile {
position: relative;
display: grid;
grid-template-columns: 32px minmax(0, 1fr) 30px;
align-items: start;
gap: var(--legacy-space-3);
min-width: 0;
min-height: var(--tile-content-min-height);
padding: var(--legacy-space-4);
border: var(--border-hair) solid var(--tile-border);
border-radius: var(--tile-radius);
color: var(--text);
background: var(--tile-surface);
box-shadow: var(--tile-card-shadow);
cursor: pointer;
overflow: hidden;
text-align: left;
transition: background .12s ease, border-color .12s ease;
}
.data-tile:hover {
border-color: transparent;
border-radius: var(--tile-radius);
background: var(--tile-surface-hover);
box-shadow: var(--tile-card-shadow);
outline: 0;
}
.data-tile:focus-visible {
border-color: transparent;
border-radius: var(--tile-radius);
background: var(--tile-surface-hover);
box-shadow: var(--tile-card-shadow);
outline: var(--bw-emphasis) solid var(--focus-ring);
outline-offset: calc(-1 * var(--bw-emphasis));
}
.data-tile-hex {
position: relative;
width: 26px;
height: 30px;
margin-top: 1px;
clip-path: polygon(50% 0, 94% 24%, 94% 76%, 50% 100%, 6% 76%, 6% 24%);
background: var(--muted);
}
.data-tile-hex::after {
content: "";
position: absolute;
left: 2px;
top: 12px;
width: 7px;
height: 4px;
border-left: 2px solid var(--sev-on);
border-bottom: 2px solid var(--sev-on);
transform: rotate(-45deg);
pointer-events: none;
}
.data-tile.severity-critical .data-tile-hex {
background: var(--critical);
}
.data-tile.severity-high .data-tile-hex {
background: var(--high);
}
.data-tile.severity-medium .data-tile-hex {
background: var(--medium);
}
.data-tile.severity-low .data-tile-hex {
background: var(--low);
}
.data-tile.severity-info .data-tile-hex {
background: var(--info);
}
.data-tile-content {
min-width: 0;
}
.data-tile-content h3 {
margin: 0;
color: var(--heading);
font-size: var(--type-h4-size);
font-weight: var(--ui-strong-weight);
line-height: 1.35;
overflow-wrap: normal;
word-break: normal;
hyphens: manual;
}
.data-tile[data-tool=group-policy] .data-tile-content h3 {
max-width: 100%;
white-space: normal;
overflow-wrap: anywhere;
word-break: normal;
}
.data-tile-badges {
display: flex;
flex-wrap: wrap;
gap: var(--legacy-space-2);
margin-top: var(--legacy-space-4);
font-size: var(--ui-control-size);
}
.tile-grid > .data-tile .data-tile-badges {
display: grid;
grid-template-columns: max-content max-content;
align-items: start;
justify-content: start;
}
.tile-grid > .data-tile .data-tile-badges > * {
max-width: 100%;
overflow-wrap: normal;
word-break: normal;
}
.tile-grid > .data-tile [data-badge-role=status],
.tile-grid > .data-tile [data-badge-role=category],
.tile-grid > .data-tile [data-badge-role=score] {
grid-column: 1 / -1;
justify-self: start;
}
.data-tile-actions {
display: grid;
gap: var(--legacy-space-2);
align-content: start;
}
.tile-bookmark-btn,
.tile-results-btn {
display: grid;
place-items: center;
width: 28px;
height: 28px;
padding: 0;
border: var(--border-hair) solid var(--line);
border-radius: var(--legacy-radius-sm);
color: var(--text);
background: var(--panel-raised);
font-size: var(--ui-control-size);
font-weight: var(--ui-label-weight);
cursor: pointer;
}
.tile-bookmark-btn[aria-pressed=true] {
border-color: var(--state-active);
color: var(--state-active-text);
background: var(--state-active);
}
.tile-results-btn,
.tile-results-btn:hover {
border-color: var(--border-results-action);
color: var(--text-results-action);
background: var(--surface-results-action);
}
.tile-results-btn.is-open,
.tile-results-btn.is-open:hover {
border-color: var(--result-color);
color: var(--button-accent-text);
background: var(--result-color);
}
.data-tile.is-bookmarked {
outline: 2px solid var(--state-active);
outline-offset: -2px;
}
.table-scroll {
padding: var(--panel-inset);
}
.view-table table {
width: max-content;
min-width: 100%;
border-color: var(--line);
background: var(--panel);
color: var(--text);
font-size: var(--type-table-body-size);
}
.view-table th,
.view-table td {
min-width: var(--table-col-min-w);
max-width: min(440px, 46vw);
padding: var(--legacy-space-1) var(--legacy-space-2);
border-color: var(--line);
white-space: normal;
overflow-wrap: break-word;
}
.view-table th {
color: var(--muted);
background: var(--panel-soft);
font-size: var(--type-table-head-size);
font-weight: var(--ui-label-weight);
line-height: 1.2;
letter-spacing: var(--ui-label-tracking);
text-transform: uppercase;
}
.view-table td {
color: var(--text);
background: var(--panel);
font-size: var(--type-table-body-size);
font-weight: 400;
line-height: 1.35;
}
.view-table tbody tr:nth-child(even) td {
background: var(--panel-soft);
}
.view-table tbody tr:hover td {
color: var(--heading);
background: var(--panel-hover);
}
.view-table .row-index {
width: 54px;
min-width: 54px;
font-variant-numeric: tabular-nums;
}
.raw-view {
min-height: 100%;
margin: 0;
padding: var(--panel-inset);
color: var(--text);
background: var(--panel);
font-family: var(--font-ui);
font-size: var(--type-table-body-size);
font-weight: var(--fw-regular);
line-height: 1.5;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
@media (max-width: 1050px) {
:root {
--reader-inset: var(--legacy-space-6);
}
.records-layout {
grid-template-columns: minmax(300px, 42%) minmax(0, 1fr);
}
}
@media (max-width: 760px) {
:root {
--reader-inset: var(--legacy-space-4);
}
.records-layout {
grid-template-columns: 1fr;
}
.record-list {
max-height: 320px;
border-right: 0;
border-bottom: var(--border-hair) solid var(--line);
}
.tile-grid {
grid-template-columns: 1fr;
padding: var(--panel-inset);
}
}
@media (prefers-reduced-motion: reduce) {
.data-tile,
.record-card {
transition: none;
}
.record-card:hover {
transform: none;
}
}
/* src/styles/obsidian-graph.css */
.app-area-graph {
overflow: hidden;
}
.obsidian-graph {
box-sizing: border-box;
position: relative;
width: 100%;
height: 100%;
min-width: 0;
min-height: 0;
padding: var(--panel-inset);
color: var(--text-primary);
background: transparent;
overflow: hidden;
}
.obsidian-graph-surface {
display: block;
width: 100%;
height: 100%;
min-height: 0;
touch-action: none;
cursor: grab;
user-select: none;
}
.obsidian-graph-surface:active {
cursor: grabbing;
}
.obsidian-graph-edges line {
stroke: var(--graph-edge);
stroke-width: 1;
vector-effect: non-scaling-stroke;
transition: stroke .12s ease, stroke-width .12s ease;
}
.obsidian-node {
color: var(--graph-technique);
cursor: pointer;
outline: none;
}
.obsidian-node-selection-ring {
fill: none;
stroke: var(--graph-selected);
stroke-width: 3;
opacity: 1;
vector-effect: non-scaling-stroke;
pointer-events: none;
filter: none;
}
.obsidian-node-branch-ring {
fill: none;
stroke: var(--graph-selected);
stroke-width: 2;
opacity: .82;
vector-effect: non-scaling-stroke;
pointer-events: none;
}
.obsidian-node.is-branch-muted {
opacity: .42;
}
.obsidian-graph-edges line.is-branch-path {
stroke: var(--graph-selected);
stroke-width: 2;
opacity: 1;
}
.obsidian-graph-edges line.is-branch-muted {
opacity: .2;
}
.obsidian-node.is-selection-muted {
opacity: .48;
transition: opacity .14s ease;
}
.obsidian-node.is-selection-muted:hover,
.obsidian-node.is-selection-muted:focus-visible {
opacity: 1;
}
.obsidian-graph-edges line.is-selection-muted {
opacity: .24;
}
.obsidian-node-role-ring {
fill: none;
stroke: currentColor;
stroke-width: 1.5;
opacity: .72;
vector-effect: non-scaling-stroke;
pointer-events: none;
}
.obsidian-node-core {
fill: currentColor;
stroke: var(--surface-app);
stroke-width: 1.5;
vector-effect: non-scaling-stroke;
transition: filter .12s ease, stroke .12s ease;
}
.obsidian-node-finding {
color: var(--graph-finding);
}
.obsidian-node-finding.severity-critical {
color: var(--critical);
}
.obsidian-node-finding.severity-high {
color: var(--high);
}
.obsidian-node-finding.severity-medium {
color: var(--medium);
}
.obsidian-node-finding.severity-low {
color: var(--low);
}
.obsidian-node-finding.severity-info {
color: var(--info);
}
.obsidian-node-finding.severity-unknown {
color: var(--graph-unknown);
}
.obsidian-node-category,
.obsidian-node-defense,
.obsidian-node-target,
.obsidian-node-technique,
.obsidian-node-tactic {
color: var(--graph-relation);
}
.obsidian-node:hover .obsidian-node-core,
.obsidian-node:focus-visible .obsidian-node-core {
filter: brightness(1.25);
stroke: var(--graph-selected);
}
.obsidian-node:hover .obsidian-node-role-ring,
.obsidian-node:focus-visible .obsidian-node-role-ring {
opacity: 1;
stroke-width: 2;
}
.obsidian-node.is-selected .obsidian-node-core {
stroke: var(--graph-selected);
stroke-width: 2.5;
}
.obsidian-node.is-selected .obsidian-node-role-ring {
opacity: 1;
stroke: var(--graph-selected);
stroke-width: 2;
}
.obsidian-graph-card-connectors {
pointer-events: none;
}
.obsidian-graph-card-connectors line {
vector-effect: non-scaling-stroke;
}
.obsidian-card-connector-backdrop {
stroke: color-mix(in srgb, var(--surface-app) 88%, var(--pathfinder-micro-connector-backdrop-mix));
stroke-width: 5;
opacity: .9;
}
.obsidian-card-connector {
stroke: var(--graph-selected);
stroke-width: 2;
}
.obsidian-card-connector-anchor {
fill: var(--graph-selected);
stroke: color-mix(in srgb, var(--surface-app) 88%, var(--pathfinder-micro-connector-backdrop-mix));
stroke-width: 1.5;
vector-effect: non-scaling-stroke;
}
.obsidian-node-inline-label {
fill: var(--text-secondary);
stroke: var(--surface-app);
stroke-width: 3px;
paint-order: stroke fill;
font-size: var(--fs-lg);
font-weight: var(--fw-medium);
letter-spacing: .01em;
pointer-events: none;
}
.obsidian-node-category .obsidian-node-inline-label,
.obsidian-node-defense .obsidian-node-inline-label,
.obsidian-node-target .obsidian-node-inline-label,
.obsidian-node-tactic .obsidian-node-inline-label {
fill: var(--text-primary);
font-weight: var(--fw-semibold);
}
.obsidian-node-card-wrap {
overflow: visible;
pointer-events: auto;
cursor: grab;
touch-action: none;
}
.obsidian-node-card-wrap:active {
cursor: grabbing;
}
.obsidian-node-matrix-card-wrap {
overflow: visible;
}
.obsidian-node-matrix-card {
width: 100%;
height: 100%;
}
.obsidian-node-matrix-card .data-tile-content {
display: grid;
grid-template-rows: auto minmax(0, 1fr);
min-height: 0;
overflow: hidden;
}
.obsidian-node-matrix-card .data-tile {
box-sizing: border-box;
width: 100%;
height: 100%;
min-height: 0;
grid-template-columns: 18px minmax(0, 1fr) 18px;
gap: var(--space-2);
padding: var(--space-3);
overflow: hidden;
}
.obsidian-node-matrix-card .data-tile-hex {
width: 18px;
height: 20px;
}
.obsidian-node-matrix-card .data-tile-content h3 {
display: -webkit-box;
overflow: hidden;
font-size: var(--pathfinder-micro-title-size);
line-height: 1.2;
-webkit-box-orient: vertical;
-webkit-line-clamp: 5;
}
.obsidian-node-matrix-card .data-tile-badges {
flex-wrap: wrap;
gap: var(--space-1);
margin-top: var(--space-1);
min-height: 0;
max-height: none;
align-content: start;
overflow: hidden;
}
.obsidian-node-matrix-card .data-tile-badges > * {
flex: 0 1 auto;
min-width: 0;
max-width: 100%;
height: auto;
min-height: 20px;
padding: 0 3px;
overflow: visible;
font-size: var(--pathfinder-micro-badge-size);
line-height: 1.1;
overflow-wrap: anywhere;
white-space: normal;
}
.obsidian-node-matrix-card .tile-badge-overflow {
justify-content: center;
}
.obsidian-node-matrix-card .data-tile-actions {
align-self: start;
gap: 2px;
}
.obsidian-node-matrix-card .tile-bookmark-btn,
.obsidian-node-matrix-card .tile-results-btn {
width: 18px;
height: 18px;
}
.obsidian-node-card.data-tile {
box-sizing: border-box;
width: 100%;
height: 100%;
min-height: 0;
grid-template-columns: 26px minmax(0, 1fr);
gap: var(--legacy-space-3);
padding: var(--legacy-space-3);
overflow: hidden;
cursor: pointer;
}
.obsidian-node-card-technique .data-tile-hex,
.obsidian-node-card-category .data-tile-hex,
.obsidian-node-card-defense .data-tile-hex,
.obsidian-node-card-target .data-tile-hex,
.obsidian-node-card-tactic .data-tile-hex {
background: var(--graph-relation);
}
.obsidian-node-card .data-tile-content h3 {
display: -webkit-box;
overflow: hidden;
font-size: var(--pathfinder-micro-title-size);
line-height: 1.3;
overflow-wrap: normal;
word-break: normal;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.obsidian-node-card-technique .data-tile-content h3,
.obsidian-node-card-tactic .data-tile-content h3 {
-webkit-line-clamp: 3;
}
.obsidian-node-card .data-tile-badges {
gap: var(--legacy-space-1) var(--legacy-space-2);
margin-top: var(--legacy-space-2);
}
.obsidian-node-card .reader-severity {
min-height: 20px;
padding: 2px var(--legacy-space-1);
font-size: var(--pathfinder-micro-relation-badge-size);
}
.obsidian-node-card .outcome-mark {
flex-basis: 100%;
}
.obsidian-node.is-selected .obsidian-node-card {
border-color: var(--graph-selected);
outline: var(--bw-emphasis) solid var(--graph-selected);
outline-offset: -2px;
}
.obsidian-graph-card.is-selected .obsidian-node-card,
.obsidian-graph-card.is-selected .obsidian-node-matrix-card .data-tile {
border-color: var(--graph-selected);
outline: 3px solid var(--graph-selected);
outline-offset: -3px;
}
.obsidian-graph-toolbar,
.obsidian-graph-filters,
.obsidian-graph-inspector,
.obsidian-graph-zoom {
position: absolute;
z-index: 5;
border: var(--bw-hairline) solid var(--border-default);
border-radius: var(--radius-md);
color: var(--text-primary);
background: color-mix(in srgb, var(--surface-panel-raised) 94%, transparent);
backdrop-filter: blur(var(--space-2));
}
.obsidian-graph-toolbar {
top: var(--space-4);
left: 50%;
display: flex;
align-items: end;
gap: var(--space-2);
max-width: calc(100% - var(--space-8) * 2);
padding: var(--space-2);
transform: translateX(-50%);
}
.obsidian-graph-search {
display: grid;
gap: var(--space-1);
min-width: calc(var(--space-8) * 8);
color: var(--text-secondary);
font-size: var(--fs-sm);
}
.obsidian-graph-search input {
min-height: var(--control-h);
padding: 0 var(--space-2);
border: var(--bw-hairline) solid var(--border-strong);
border-radius: var(--radius-sm);
color: var(--text-primary);
background: var(--surface-input);
font-size: var(--fs-base);
}
.obsidian-graph-count {
align-self: center;
min-width: max-content;
padding-inline: var(--space-2);
color: var(--text-secondary);
font-size: var(--fs-sm);
font-variant-numeric: tabular-nums;
}
.obsidian-graph-branch-actions {
display: flex;
align-items: center;
gap: var(--space-2);
min-width: min(360px, 32vw);
padding-left: var(--space-3);
border-left: var(--bw-hairline) solid var(--border-default);
}
.obsidian-graph-branch-actions > span {
color: var(--text-secondary);
font-size: var(--fs-sm);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
.obsidian-graph-branch-actions .btn {
min-width: 84px;
}
.obsidian-graph-reset-view {
position: relative;
display: inline-flex;
align-items: center;
gap: 6px;
border-color: var(--border-strong);
border-radius: 999px;
color: var(--text-primary);
background: var(--surface-input);
overflow: hidden;
}
.obsidian-graph-reset-view:hover,
.obsidian-graph-reset-view:focus-visible {
border-color: var(--text-secondary);
color: var(--text-primary);
background: var(--surface-hover);
}
.obsidian-graph-reset-view span {
font-size: 11px;
line-height: 1;
}
.obsidian-graph-filters {
top: calc(var(--space-8) * 2.7);
left: 50%;
display: grid;
grid-template-columns: repeat(3, minmax(calc(var(--space-8) * 5), 1fr));
gap: var(--space-3);
width: min(calc(var(--space-8) * 20), calc(100% - var(--space-8) * 2));
padding: var(--space-3);
transform: translateX(-50%);
}
.obsidian-graph-filters label {
display: grid;
gap: var(--space-1);
color: var(--text-secondary);
font-size: var(--fs-sm);
}
.obsidian-graph-filters select {
min-height: var(--control-h);
padding-inline: var(--space-2);
border: var(--bw-hairline) solid var(--border-strong);
border-radius: var(--radius-sm);
color: var(--text-primary);
background: var(--surface-input);
font-size: var(--fs-base);
}
.obsidian-graph-zoom {
top: var(--space-4);
right: var(--space-4);
display: grid;
overflow: hidden;
}
.obsidian-graph-zoom button {
display: grid;
place-items: center;
width: var(--space-8);
height: var(--space-8);
padding: 0;
border: 0;
border-bottom: var(--bw-hairline) solid var(--border-default);
color: var(--text-primary);
background: transparent;
font-size: var(--fs-lg);
cursor: pointer;
}
.obsidian-graph-zoom button:last-child {
border-bottom: 0;
}
.obsidian-graph-zoom button:hover {
background: var(--surface-hover);
}
.obsidian-graph-inspector {
right: var(--space-4);
bottom: var(--space-4);
display: grid;
gap: var(--space-2);
width: min(calc(var(--space-8) * 12), calc(100% - var(--space-8)));
padding: var(--space-4);
}
.obsidian-graph-inspector > small {
color: var(--text-secondary);
font-size: var(--fs-sm);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
.obsidian-graph-inspector > strong {
padding-right: var(--space-6);
color: var(--text-primary);
font-size: var(--fs-lg);
line-height: var(--lh-prose);
overflow-wrap: anywhere;
}
.obsidian-graph-inspector > span {
color: var(--text-secondary);
font-size: var(--fs-lg);
}
.obsidian-graph-inspector dl {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-2);
margin: var(--space-2) 0 0;
}
.obsidian-graph-inspector dl div {
display: grid;
gap: var(--space-1);
padding: var(--space-2);
border: var(--bw-hairline) solid var(--border-subtle);
background: var(--surface-panel);
}
.obsidian-graph-inspector dt {
color: var(--text-secondary);
font-size: var(--fs-sm);
}
.obsidian-graph-inspector dd {
margin: 0;
color: var(--text-primary);
font-size: var(--fs-lg);
font-weight: var(--fw-semibold);
}
.obsidian-graph-inspector-actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-2);
margin-top: var(--space-2);
}
.obsidian-inspector-close {
position: absolute;
top: var(--space-2);
right: var(--space-2);
display: grid;
place-items: center;
width: var(--control-h);
height: var(--control-h);
padding: 0;
border: 0;
color: var(--text-secondary);
background: transparent;
font-size: var(--fs-lg);
cursor: pointer;
}
.obsidian-graph-empty {
position: absolute;
inset: 0;
display: grid;
place-content: center;
gap: var(--space-2);
color: var(--text-secondary);
text-align: center;
pointer-events: none;
}
.obsidian-graph-empty strong,
.obsidian-graph-empty span {
font-size: var(--fs-lg);
}
.obsidian-graph-card-zoom-hint {
position: absolute;
left: 50%;
bottom: var(--space-4);
z-index: 7;
min-height: var(--control-h);
padding: 0 var(--space-4);
border: var(--bw-hairline) solid var(--border-strong);
border-radius: var(--radius-sm);
color: var(--text-primary);
background: color-mix(in srgb, var(--surface-panel-raised) 94%, transparent);
font-size: var(--fs-sm);
cursor: pointer;
transform: translateX(-50%);
}
.obsidian-graph-card-zoom-hint:hover,
.obsidian-graph-card-zoom-hint:focus-visible {
background: var(--surface-hover);
outline: none;
}
@media (max-width: 900px) {
.obsidian-graph-toolbar {
left: var(--space-3);
right: calc(var(--space-8) + var(--space-5));
flex-wrap: wrap;
max-width: none;
transform: none;
}
.obsidian-graph-branch-actions {
flex: 1 1 100%;
min-width: 0;
padding-top: var(--space-2);
padding-left: 0;
border-top: var(--bw-hairline) solid var(--border-default);
border-left: 0;
}
.obsidian-graph-search {
flex: 1 1 100%;
min-width: 0;
}
.obsidian-graph-filters {
top: calc(var(--space-8) * 3.5);
grid-template-columns: 1fr;
}
.obsidian-graph-inspector {
left: var(--space-3);
right: var(--space-3);
width: auto;
}
}
@media (prefers-reduced-motion: reduce) {
.obsidian-node circle {
transition: none;
}
}
.obsidian-graph {
background: var(--surface-app);
}
.obsidian-graph-layout {
display: grid;
grid-template-columns: clamp(220px, 17vw, 280px) minmax(0, 1fr) clamp(270px, 21vw, 340px);
width: 100%;
height: 100%;
min-width: 0;
min-height: 0;
}
.obsidian-graph-filter-panel,
.obsidian-graph-inspector {
position: static;
display: flex;
flex-direction: column;
width: auto;
min-width: 0;
min-height: 0;
padding: 0;
border-radius: 0;
background: color-mix(in srgb, var(--surface-panel) 96%, var(--surface-app));
backdrop-filter: none;
}
.obsidian-graph-filter-panel {
border: 0;
border-right: var(--bw-hairline) solid var(--border-default);
}
.obsidian-graph-inspector {
border: 0;
border-left: var(--bw-hairline) solid var(--border-default);
}
.obsidian-graph-filter-panel > header,
.obsidian-graph-inspector > header {
display: flex;
flex: 0 0 auto;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
min-height: calc(var(--row-h) + var(--space-3));
padding: 0 var(--space-4);
border-bottom: var(--bw-hairline) solid var(--border-default);
}
.obsidian-graph-filter-panel > header strong,
.obsidian-graph-inspector > header strong {
color: var(--text-primary);
font-size: var(--fs-md);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
.obsidian-graph-filter-panel > header span {
color: var(--text-secondary);
font-size: var(--fs-sm);
font-variant-numeric: tabular-nums;
}
.obsidian-graph-filter-scroll {
display: grid;
align-content: start;
gap: var(--space-4);
min-height: 0;
padding: var(--space-4);
overflow-y: auto;
scrollbar-color: var(--border-strong) var(--surface-panel);
scrollbar-width: thin;
}
.obsidian-graph-filter-section {
display: grid;
gap: var(--space-2);
}
.obsidian-panel-label {
color: var(--text-secondary);
font-size: var(--fs-sm);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
.obsidian-graph-filter-panel .search-text-group,
.obsidian-graph-filter-panel .search-input-wrap,
.obsidian-graph-filter-panel .search-input,
.obsidian-graph-filter-panel .sheet-select {
width: 100%;
min-width: 0;
}
.obsidian-graph-filter-panel .search-tools,
.obsidian-graph-filter-panel .primary-filter-group {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: var(--space-2);
min-width: 0;
margin: 0;
padding: 0;
}
.obsidian-graph-filter-panel .primary-filter-group {
display: contents;
}
.obsidian-graph-filter-panel .standard-filter-btn,
.obsidian-graph-filter-panel .dynamic-facet-select,
.obsidian-graph-filter-panel .dynamic-range-filter {
width: 100%;
min-width: 0;
margin: 0;
}
.obsidian-graph-filter-panel .standard-filter-btn {
order: -1;
}
.obsidian-graph-filter-panel .dynamic-range-filter {
grid-template-columns: minmax(0, 1fr) minmax(0, .8fr) minmax(0, .8fr);
}
.obsidian-graph-workspace-tools {
display: grid;
gap: var(--space-3);
min-width: 0;
padding-top: var(--space-4);
border-top: var(--bw-hairline) solid var(--border-default);
}
.obsidian-graph-workspace-check {
display: flex;
align-items: center;
gap: var(--space-2);
min-height: var(--control-h);
color: var(--text-primary);
font-size: var(--ui-label-size);
cursor: pointer;
}
.obsidian-graph-workspace-check input {
width: 14px;
height: 14px;
margin: 0;
accent-color: var(--marking-color);
}
.obsidian-graph-workspace-check:has(input:disabled) {
color: var(--text-muted);
cursor: not-allowed;
}
.obsidian-graph-workspace-tools .view-bookmark-bar,
.obsidian-graph-workspace-tools .view-bookmark-list {
align-items: stretch;
flex-direction: column;
width: 100%;
}
.obsidian-graph-workspace-tools .view-bookmark-create,
.obsidian-graph-workspace-tools .view-bookmark-item,
.obsidian-graph-workspace-tools .view-bookmark-entry {
width: 100%;
}
.obsidian-graph-workspace-tools .view-bookmark-item {
display: flex;
}
.obsidian-graph-workspace-tools .view-bookmark-entry {
flex: 1 1 auto;
}
.obsidian-graph-stage {
position: relative;
min-width: 0;
min-height: 0;
overflow: hidden;
background: color-mix(in srgb, var(--surface-app) 95%, var(--surface-panel));
}
.obsidian-graph-stage .obsidian-graph-surface {
width: 100%;
height: 100%;
}
.obsidian-graph-edges line {
stroke: var(--graph-edge);
stroke-width: 1;
}
.obsidian-graph-edges .obsidian-edge-category {
stroke: color-mix(in srgb, var(--graph-edge) 58%, var(--text-muted));
stroke-width: .8;
}
.obsidian-graph-edges .obsidian-edge-defense {
stroke: color-mix(in srgb, var(--graph-edge) 68%, var(--graph-defense));
stroke-width: .9;
}
.obsidian-graph-edges .obsidian-edge-technique {
stroke-width: 1.15;
}
.obsidian-graph-edges line.is-direct-path {
stroke: var(--graph-alert);
stroke-width: 2;
}
.obsidian-node-core {
fill: color-mix(in srgb, currentColor 88%, var(--surface-app));
}
.obsidian-node-card.data-tile {
grid-template-columns: 18px minmax(0, 1fr);
gap: var(--space-1);
padding: var(--space-1);
}
.obsidian-node-card .data-tile-hex {
width: 18px;
height: 20px;
}
.obsidian-node-card .data-tile-content h3 {
font-size: 16px;
line-height: 1.25;
}
.obsidian-node-card .data-tile-badges {
flex-wrap: nowrap;
gap: var(--space-1);
max-height: 18px;
margin-top: var(--space-1);
overflow: hidden;
}
.obsidian-node-card .reader-severity,
.obsidian-node-card .outcome-mark {
min-height: 18px;
padding: 1px var(--space-1);
font-size: var(--fs-sm);
white-space: nowrap;
}
.obsidian-node.is-selected .obsidian-node-card {
outline-width: var(--bw-hairline);
outline-offset: -1px;
}
.obsidian-graph-stage .obsidian-graph-toolbar {
top: var(--space-3);
left: var(--space-3);
align-items: center;
max-width: none;
padding: var(--space-1);
transform: none;
}
.obsidian-graph-stage .obsidian-graph-zoom {
top: var(--space-3);
right: var(--space-3);
}
.obsidian-graph-inspector-content,
.obsidian-graph-inspector-empty {
display: grid;
align-content: start;
gap: var(--space-3);
min-height: 0;
padding: var(--space-4);
overflow-y: auto;
}
.obsidian-graph-inspector-content > small {
color: var(--text-secondary);
font-size: var(--fs-sm);
font-weight: var(--fw-semibold);
letter-spacing: var(--ls-caps);
text-transform: uppercase;
}
.obsidian-graph-inspector-content > strong {
padding-right: var(--space-6);
color: var(--text-primary);
font-size: var(--fs-lg);
line-height: var(--lh-prose);
overflow-wrap: anywhere;
}
.obsidian-graph-inspector-content > span,
.obsidian-graph-inspector-empty span {
color: var(--text-secondary);
font-size: var(--fs-lg);
line-height: var(--lh-prose);
}
.obsidian-graph-inspector-empty strong {
color: var(--text-primary);
font-size: var(--fs-lg);
}
.obsidian-graph-inspector dl {
display: grid;
grid-template-columns: 1fr;
gap: 0;
margin: var(--space-2) 0 0;
}
.obsidian-graph-inspector dl div {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: var(--space-3);
padding: var(--space-3) 0;
border: 0;
border-bottom: var(--bw-hairline) solid var(--border-subtle);
background: transparent;
}
.obsidian-graph-inspector dt {
font-size: var(--fs-md);
}
.obsidian-graph-inspector-actions {
display: grid;
gap: var(--space-2);
margin-top: var(--space-3);
}
.obsidian-graph-inspector-actions .btn {
width: 100%;
}
.obsidian-inspector-close {
position: static;
flex: 0 0 auto;
}
@media (max-width: 1100px) {
.obsidian-graph-layout {
grid-template-columns: 220px minmax(0, 1fr) 270px;
}
}
@media (max-width: 850px) {
.obsidian-graph-layout {
grid-template-columns: 210px minmax(0, 1fr);
grid-template-rows: minmax(0, 1fr) 210px;
}
.obsidian-graph-inspector {
grid-column: 1 / -1;
border-top: var(--bw-hairline) solid var(--border-default);
border-left: 0;
}
.obsidian-graph-inspector-content {
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
}
}
@media (max-width: 650px) {
.obsidian-graph-layout {
grid-template-columns: 1fr;
grid-template-rows: 220px minmax(360px, 1fr) 220px;
overflow-y: auto;
}
.obsidian-graph-filter-panel {
border-right: 0;
border-bottom: var(--bw-hairline) solid var(--border-default);
}
.obsidian-graph-inspector {
grid-column: 1;
}
}
/* src/styles/functional-icons.css */
.triangle-icon {
display: block;
flex: 0 0 auto;
width: 12px;
height: 12px;
fill: currentColor;
transform-origin: center;
}
.triangle-icon-right {
transform: rotate(180deg);
}
.triangle-icon-up {
transform: rotate(90deg);
}
.triangle-icon-down {
transform: rotate(-90deg);
}
.reader-nav button,
.sidebar-toggle-inline,
.sidebar-toggle,
.icon-btn,
.tenant-back,
.db-structure-card-toggle,
summary,
.results-browser-title {
color: var(--muted);
}
.reader-nav button,
.sidebar-toggle-inline,
.sidebar-toggle,
.icon-btn {
align-items: center;
justify-content: center;
}
.reader-nav button .triangle-icon {
width: 18px;
height: 18px;
}
.sidebar-toggle-inline .triangle-icon,
.sidebar-toggle .triangle-icon {
width: 16px;
height: 16px;
}
.tenant-back {
display: inline-flex;
align-items: center;
gap: 7px;
}
.tenant-back .triangle-icon {
width: 28px;
height: 28px;
fill: var(--band-surface);
}
.db-structure-card-toggle {
display: grid;
place-items: center;
width: 18px;
height: 18px;
}
.results-browser-title {
display: flex;
align-items: center;
gap: 7px;
}
summary {
display: flex;
align-items: center;
gap: 7px;
list-style: none;
}
summary::-webkit-details-marker {
display: none;
}
details[open] > summary > .triangle-icon-right {
transform: rotate(-90deg);
}
select:not([multiple]) {
appearance: none;
padding-right: 30px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='%23888a92' d='M1.5 2.5 6 9.5l4.5-7z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 9px center;
background-size: 12px 12px;
}
.results-parking-anchor {
position: absolute;
inset: 0 auto auto 0;
width: 0;
height: 0;
pointer-events: none;
}
/* src/styles/tile-contract.css */
.donut-metric-rack {
grid-template-columns: repeat(auto-fill, var(--tile-compact-width));
justify-content: start;
}
@media (min-width: 1101px) {
.datahub-reference-controls {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
}
/* tests/fixtures/client-info-design/preview.css */
body {
overflow: auto;
}