diff --git a/Directory.Packages.props b/Directory.Packages.props
index be7a12fe..4036f69f 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -119,7 +119,7 @@
-
+
diff --git a/src/ZB.MOM.WW.ScadaBridge.CentralUI/wwwroot/css/site.css b/src/ZB.MOM.WW.ScadaBridge.CentralUI/wwwroot/css/site.css
index 7f1b1fef..0ff58715 100644
--- a/src/ZB.MOM.WW.ScadaBridge.CentralUI/wwwroot/css/site.css
+++ b/src/ZB.MOM.WW.ScadaBridge.CentralUI/wwwroot/css/site.css
@@ -120,19 +120,26 @@
--card: #25282d;
--ink: #e6e8ec;
--ink-soft: #9aa0aa;
- --ink-faint: #6b727c;
+ --ink-faint: #a8b0bc;
--rule: #33373e;
--rule-strong: #3a3f46;
/* Accent — lightened for contrast on dark */
- --accent: #4d7fe8;
- --accent-deep: #7aa0ef;
+ --accent: #7aa0ef;
+ --accent-deep: #9dbaf6;
+ --accent-tint: #1e2640;
+ --accent-border: #566d9c;
+ --accent-focus: #a7c1ff;
+ --on-accent: #111827;
- /* Status — foregrounds unchanged (inherently visible on dark) */
+ /* Status — signal colors are retained; text uses the readable inks below. */
--ok: #40b856;
--warn: #f0a030;
--bad: #f05050;
--idle: #7a8290;
+ --ok-ink: #8ada96;
+ --bad-ink: #ff9d9d;
+ --idle-ink: #c3cad5;
/* Status — tinted backgrounds (dark surface tints) */
--ok-bg: #1a2e1e;
@@ -149,17 +156,18 @@
--bad-border-soft: #44201e;
/* Warning ink — brightened amber for dark contrast */
- --warn-ink: #d4891a;
- --warn-ink-deep: #b8741a;
+ --warn-ink: #efbd63;
+ --warn-ink-deep: #efbd63;
- /* Info tint */
+ /* Semantic information stays blue, independent of product accent. */
+ --info-ink: #b4c6ff;
--info-bg: #1a2240;
--info-border: #2a3660;
/* Neutral surface washes */
--zebra-bg: #202328;
--hover-bg: #2a2e38;
- --active-bg: #1e2640;
+ --active-bg: var(--accent-tint);
/* Bootstrap bridge tokens */
--bs-body-bg: var(--paper);
@@ -171,6 +179,21 @@
--sb-backdrop: rgba(0, 0, 0, 0.6);
}
+/* Supported-dark Bootstrap adapter: secondary actions use host surface inks. */
+[data-bs-theme="dark"] .btn-outline-secondary {
+ --bs-btn-color: var(--ink-soft);
+ --bs-btn-border-color: var(--ink-soft);
+ --bs-btn-hover-color: var(--card);
+ --bs-btn-hover-bg: var(--ink-soft);
+ --bs-btn-hover-border-color: var(--ink-soft);
+ --bs-btn-active-color: var(--card);
+ --bs-btn-active-bg: var(--ink-soft);
+ --bs-btn-active-border-color: var(--ink-soft);
+ --bs-btn-disabled-color: var(--ink-soft);
+ --bs-btn-disabled-bg: transparent;
+ --bs-btn-disabled-border-color: var(--ink-soft);
+}
+
/* ── Rail pending-updates indicator ──────────────────────────────────────
Sits in .rail-foot just above .rail-user. One line when quiet, two when
something is pending; tokens only so dark mode follows for free. */
diff --git a/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Pages/NotificationReportDetailModalTests.cs b/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Pages/NotificationReportDetailModalTests.cs
index 50b6cf43..fabd071f 100644
--- a/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Pages/NotificationReportDetailModalTests.cs
+++ b/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Pages/NotificationReportDetailModalTests.cs
@@ -143,7 +143,7 @@ public class NotificationReportDetailModalTests : BunitContext
/// Verifies that close button, dismisses modal.
[Fact]
- public void CloseButton_DismissesModal()
+ public async Task CloseButton_DismissesModal()
{
var cut = Render();
cut.WaitForState(() => cut.Markup.Contains("Pump fault at Plant-A"));
@@ -154,8 +154,7 @@ public class NotificationReportDetailModalTests : BunitContext
cut.WaitForState(() => cut.FindAll(".modal.show").Count > 0);
- var closeButton = cut.Find(".modal.show .modal-footer button");
- closeButton.Click();
+ await cut.InvokeAsync(() => cut.Find(".modal.show .modal-footer button").Click());
cut.WaitForAssertion(() => Assert.Empty(cut.FindAll(".modal.show")));
}