diff --git a/apps/control-station/src/styles/e35-degradation-recovery.css b/apps/control-station/src/styles/e35-degradation-recovery.css index 0189d61..16ecb51 100644 --- a/apps/control-station/src/styles/e35-degradation-recovery.css +++ b/apps/control-station/src/styles/e35-degradation-recovery.css @@ -18,7 +18,7 @@ .e35-degradation-evidence__timeline { position: absolute; z-index: 3; - top: 3.7rem; + top: 4.9rem; right: 0.6rem; display: flex; flex-wrap: wrap; @@ -27,11 +27,24 @@ max-width: calc(100% - 1.2rem); } -.e35-degradation-evidence__timeline .nodedc-button { +.e35-degradation-evidence__timeline + .nodedc-button[data-variant="secondary"] { background: var(--nodedc-floating-surface); backdrop-filter: blur(var(--nodedc-blur-control)); } +.e35-degradation-evidence__timeline + .nodedc-button[data-variant="primary"] { + background: var(--nodedc-glass-control-active); + color: var(--nodedc-glass-control-active-text); + backdrop-filter: blur(var(--nodedc-blur-control)); +} + +.e35-degradation-evidence__timeline + .nodedc-button[data-variant="primary"]:hover:not(:disabled) { + background: var(--nodedc-glass-control-active); +} + .e35-degradation-evidence__telemetry { position: absolute; z-index: 3; @@ -74,7 +87,7 @@ @media (max-width: 900px) { .e35-degradation-evidence__timeline { - top: 4rem; + top: 5.2rem; } .e35-degradation-evidence__timeline .nodedc-button { diff --git a/apps/control-station/src/styles/laboratory-reporting.css b/apps/control-station/src/styles/laboratory-reporting.css index e80a059..1ab074a 100644 --- a/apps/control-station/src/styles/laboratory-reporting.css +++ b/apps/control-station/src/styles/laboratory-reporting.css @@ -1,8 +1,8 @@ -.laboratory-summary__brief { +.laboratory-summary .laboratory-summary__brief { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.4rem; - margin-top: 0.65rem; + margin-top: 0.85rem; } .laboratory-summary__brief > div { @@ -44,7 +44,7 @@ } @media (max-width: 1100px) { - .laboratory-summary__brief { + .laboratory-summary .laboratory-summary__brief { grid-template-columns: repeat(2, minmax(0, 1fr)); } diff --git a/apps/control-station/src/styles/laboratory.css b/apps/control-station/src/styles/laboratory.css index c127b14..d59189d 100644 --- a/apps/control-station/src/styles/laboratory.css +++ b/apps/control-station/src/styles/laboratory.css @@ -5,6 +5,10 @@ gap: 0.85rem; } +.laboratory-work-template { + gap: 1rem; +} + .recordings-workspace { width: 100%; height: 100%; @@ -163,7 +167,7 @@ .laboratory-summary__method { display: grid; gap: 0.45rem; - margin-top: 0.65rem; + margin-top: 0.85rem; } .laboratory-summary__method > header { diff --git a/apps/control-station/src/styles/system-telemetry.css b/apps/control-station/src/styles/system-telemetry.css index 093e970..b8fd12c 100644 --- a/apps/control-station/src/styles/system-telemetry.css +++ b/apps/control-station/src/styles/system-telemetry.css @@ -55,7 +55,6 @@ .compute-contour-settings__install code { overflow: auto; padding: 0.8rem; - border: 1px solid var(--station-hairline); border-radius: var(--nodedc-radius-control); background: var(--station-panel-deep); color: var(--nodedc-text-secondary); @@ -132,7 +131,6 @@ .system-telemetry-series, .network-stat-card { min-width: 0; - border: 1px solid var(--station-hairline); border-radius: var(--nodedc-radius-card); background: var(--station-panel-soft); } @@ -213,8 +211,8 @@ .worker-hardware__facts dl { grid-template-columns: repeat(2, minmax(0, 1fr)); - border: 1px solid var(--station-hairline); border-radius: var(--nodedc-radius-control); + background: var(--station-panel-soft); } .worker-hardware__facts dl > div, @@ -383,13 +381,11 @@ gap: 0.75rem; padding: 0.72rem 0.8rem; isolation: isolate; - border: 1px solid var(--station-hairline); border-radius: var(--nodedc-radius-control); background: var(--station-panel-soft); } .worker-stage-list li[data-state="active"] { - border-color: var(--station-hairline-strong); background: var(--nodedc-focus-surface); } @@ -498,7 +494,6 @@ min-width: 0; gap: 0.3rem; padding: 0.78rem; - border: 1px solid var(--station-hairline); border-radius: var(--nodedc-radius-control); background: var(--station-panel-soft); } diff --git a/apps/control-station/test/laboratoryProductUi.test.mjs b/apps/control-station/test/laboratoryProductUi.test.mjs index 932f7ab..94b2c41 100644 --- a/apps/control-station/test/laboratoryProductUi.test.mjs +++ b/apps/control-station/test/laboratoryProductUi.test.mjs @@ -30,6 +30,14 @@ const e35ResultUrl = new URL( "../src/workspaces/laboratory/E35Result.tsx", import.meta.url, ); +const e35StylesUrl = new URL( + "../src/styles/e35-degradation-recovery.css", + import.meta.url, +); +const laboratoryReportingStylesUrl = new URL( + "../src/styles/laboratory-reporting.css", + import.meta.url, +); const advancedLaboratoryResultUrl = new URL( "../src/workspaces/laboratory/AdvancedLaboratoryResult.tsx", import.meta.url, @@ -166,9 +174,18 @@ test("E34 keeps temporal evidence inside the canonical LAB and viewer contracts" }); test("E35 extends the canonical LAB with fault and recovery evidence", async () => { - const [e35Source, advancedSource] = await Promise.all([ + const [ + e35Source, + advancedSource, + e35Styles, + laboratoryStyles, + reportingStyles, + ] = await Promise.all([ readFile(e35ResultUrl, "utf8"), readFile(advancedLaboratoryResultUrl, "utf8"), + readFile(e35StylesUrl, "utf8"), + readFile(laboratoryStylesUrl, "utf8"), + readFile(laboratoryReportingStylesUrl, "utf8"), ]); assert.match(e35Source, / { diff --git a/apps/control-station/test/systemTelemetry.test.mjs b/apps/control-station/test/systemTelemetry.test.mjs index bad34b2..31a5db9 100644 --- a/apps/control-station/test/systemTelemetry.test.mjs +++ b/apps/control-station/test/systemTelemetry.test.mjs @@ -59,6 +59,11 @@ test("Worker 006 telemetry remains a bounded system feature slice", async () => telemetryStyles, /\.worker-stage-list\s*\{[^}]*grid-template-columns:\s*repeat\(3,/s, ); + assert.doesNotMatch( + telemetryStyles, + /\bborder:\s*1px\s+solid/, + "System product blocks must not reintroduce decorative perimeter outlines", + ); assert.match(networkWorkspace, /127\.0\.0\.1:8000/); assert.match(networkWorkspace, /telemetry_poll_interval_seconds/); assert.match(networkWorkspace, />\s*Обновить\s*