Repository navigation
P0 UI/UX — unify premium SMV cool-blue theme across ARSAS; centered normal window startup #730
Description
Goal
Unify ARSAS's complete WPF workstation around the existing SMV cool-blue/white visual language, eliminate legacy warm greige/brown grids and controls, and open the main application as a centered, normal, resizable window. After first paint, the user owns window size, position, minimize/maximize/restore behavior.
Requested from eight v1.6.42 screenshots reviewed 2026-10-24. This is visual/UX work only; preserve IEC 61850 MMS/GOOSE/SMV logic, canonical SSOT, command authorization, IED Browser operator navigation, event acquisition, and FAT behavior.
Verified root causes on RC staging branch
Branch: release/arsas-integrated-rc0-20261024, observed head f27ca68e6343ff0b291a343a583ff01d54bbe5a7 (re-verify before changes; other threads are active).
Resources/P2BlueSteelGreige.xamlsetsGreigeRowA=#F3F0EA,GreigeRowB=#ECE8E1,GreigeHeader=#E1DDD5, greige surfaces/gradients, plusModernDataGridand Command/FAT style tokens using those resources.P2BlueSteelGreigeUx.csApplyEngineeringGrid()forcesGreigeRowA/GreigeRowBacross descendantDataGridinstances, potentially overriding a local visual design.ApplyIoFatWindow()enforces an additional greige grid contract.Views/SmvInlineViewer.xamlexplicitly definesSmvMeasurementGrid,SmvMeasurementRow, and cool-white/blue backgrounds; the SMV screen therefore looks different.MainWindow.xamlexplicitly setsWindowState="Maximized"even though it already hasWindowStartupLocation="CenterScreen";P2BlueSteelGreigeUx.ApplyMainWindow()enforces maximize again at runtime.IoListTestingWindow.xaml+ApplyIoFatWindow()also enforce maximize.- Regression tests lock in the unwanted behavior:
tests/ARSAS.Tests/StartupVisualStabilityRegressionTests.csasserts Maximized, andP2BlueSteelGreigeThemeTests.csasserts runtime maximize and greige values. App.xaml.csinstalls the P2 overlay as application resources before window startup. Any new semantic tokens must preserve resource lookup/first paint (no activation-time re-theming).MainWindow.NavigationLayoutFix.csalready handles nav widths on SizeChanged; preserve it and test in normal-size windows.
Visual standard — premium compact cool-blue engineering workstation
- Keep the existing dark blue-steel outer shell/nav and the SMV's light cool-blue / clean-white instrument surfaces as reference.
- One authoritative semantic token vocabulary for app background, panel, panel-raised, table headers, row A/B, hover, selected, divider, muted text, focus ring, primary/secondary/destructive buttons, form fields, menu/dropdown, scrollbar, card, empty state and disabled state. Resource keys may retain compatibility aliases during migration.
- Reference values from the accepted SMV: panel
#F8FBFF, alternate#EDF5FF, header#E8F2FF, divider#D7E5F6, hover#E4F0FF. Confirm contrast and exact tokenization before finalizing. Green/amber/red remain status-only semantics; measured phasor/waveform channel colors stay intact. - Compact typographic scale, low visual noise, single consistent button and input height, 8/12 px spacing scale, subtle 1px borders, restrained shadows/corner radii. Do not introduce bulky cards/large bold titles.
- Eliminate warm greige/brown surfaces in IED Browser, Device Explorer, Event Logs, Annunciator controls, GOOSE Sniff, Signal Testing/FAT, Diagnostics, shared Command Dock, IO List FAT and relevant dialogs. Annunciator's dark alarm canvas can remain intentional for alarm semantics; its controls must follow the common theme.
- Respect selected IED emphasis, operator value/quality/status indicators, row virtualization, text ellipsis/tooltips, focus and keyboard navigation. No misleading Good/Bad or stale-value presentation.
- Remove local hard-coded color exceptions only after the global style matches their expected cool-blue appearance; protect SMV waveform/phasor fidelity and SMV screenshot baseline.
Window policy
MainWindow: first openingWindowState=Normal,WindowStartupLocation=CenterScreen, resizable, optimized default footprint (e.g. target 1440–1480 DIP wide and ~820–860 DIP high; clamp initial size to current monitor work area, considering taskbar and WPF DPI units).- No maximize from style adapter, startup callbacks, tab switching or reactivation; once visible, do not reset/overwrite user size or position. Native Maximize/Restore must work on user demand.
- Reconcile min-size constraints and layout at 1366×768, 1600×900, 1920×1080 and 125/150% scaling; maintain accessible nav and Command Dock with scroll/collapse where needed rather than clipping.
- Assess IO List FAT independently; avoid changing deliberate hidden donor-window lifecycle (
IoListTestingWindow.EmbeddedEngineeringHost.cs).
Proposed minimal-risk execution
Phase A: New semantic cool-blue token aliases/resources; update ModernDataGrid, Command/FAT grids, panel/card/button/input/dropdown styles. Remove or narrow forced greige runtime row setters. Preserve existing names temporarily for compatibility where needed.
Phase B: Fix main and FAT window normal startup behavior without touching production protocol/UI command handlers; reconcile initial size and responsive breakpoints. Remove contrary maximize assertions, replace with centered normal / user-driven resize tests.
Phase C: Audit all tabs + dialogs for local color/style overrides; converge row/header/card/input/empty-state/control chrome onto the shared tokens. Match SMV while retaining channel-specific visualizations, alarm semantics, and command safety.
Phase D: Exact-head build + all relevant UI regression tests + manual screenshot comparison. Test 100/125/150% DPI, normal/maximized/restored, 3 connected IEDs and live grids; no layout clipping, horizontal jumps, frozen WPF UI, broken virtualized rows, signal-value state regression or engine changes.
Acceptance gates
- All major workspaces show the same cool-blue/white grid/surface language as the SMV panel; no beige/brown zebra/header styling remains.
- Buttons, ComboBoxes, TextBoxes, cards, dialogs, scrollbars, status/quality badges use one semantic token system and maintain readable contrast.
- No runtime adapter silently overwrites local style decisions with greige rows.
- Main app opens centered normal at an optimized size; user can freely resize/maximize/restore/move without forced resizing.
- Command Dock remains usable at compact heights; no clipping in minimum supported resolution/DPI matrix.
- Update
P2BlueSteelGreigeThemeTestsandStartupVisualStabilityRegressionTestsso they enforce the new intended design, not legacy colors/fullscreen. - Pass
SmvMeasurementCoolBlueCheckpointTests,SmvMeasurementPaletteRegressionTests,SmvMeasurementSplitGridRegressionTests,PremiumSmartIpWizardTests,IedBrowserOperatorNavigationAndIdentityTestsand applicable Command Dock/FAT/SSOT safety tests. - No protocol/engine/RCB/control/readback changes; CI and physical FAT gates remain under the RC handoff.
Integration / release discipline
The RC consolidation PR #727 is currently a draft and actively being reconciled. Do not modify/force-push its branch, merge to main, or release as part of this issue. Work on a separately named visual-only branch based on a newly verified accepted head, with one reviewable PR. Compare/rebase deliberately before integration; do not overwrite concurrent Browser/SMV/Smart IP/Command Dock work. This issue documents scope/acceptance and does not certify a build or FAT test.
Activity
P0 UI: replace warm greige palette with shared SMV-aligned cool-blue …
P0 UI: stop forcing maximize or overwriting MainWindow DataGrid row s…
P0 UX: align shared cool-blue styles and one-time startup placement (#…
P0 UX: open workstation as centered normal resizable window (#730)
P0 UX: open workstation as centered normal resizable window (#730)
P0 UX: align shared cool-blue styles and one-time startup placement (#…
P0 UX: clamp centered initial window bounds once without disabling us…
test(P0 UX): lock SMV-aligned cool-blue theme and normal centered sta…
test(P0 UX): lock SMV-aligned cool-blue theme and normal centered sta…
test(P0 UX): guard cool-blue tokens, grid headers, normal first paint…
P0 UX: preserve explicit SMV headers and eliminate warm scrollbar sur…
P0 UX: preserve explicit SMV headers and eliminate warm scrollbar sur…
P0 UX: unify shared search and utility buttons; protect primary hover…
masarray commentedon Oct 24, 2026
P0 source implementation staged (2026-10-24)
Draft PR #731: #731
Code branch
ui/p0-smv-coolblue-normal-window-20261024; target RC integration lane (not main). Exact latest source SHA when this comment was posted:743ab48be97b7f774b9e278103670c626fcdba31.Implemented global SMV-matched blue-white tokens, shared grid/command/FAT/industrial headers, search and utility buttons, scrollbar surfaces, no forced MainWindow grid overrides, no runtime maximize, and one-time centered work-area-aware Normal startup for MainWindow and IO List FAT. Added/upgraded regression tests; no IEC 61850 engine/control/SSOT changes.
At this checkpoint the exact-SHA Windows Build and IO List Testing workflows are in progress, not yet passed. Pending: final CI checks and field screenshot/DPI verification before merge. PR intentionally remains draft to avoid overwriting parallel RC integration work.
fix(test): declare App.xaml source in centered startup regression test (
P1 UI: canonical textbox, dropdown, editable safety, empty state and …
P1 UX: consolidate cool-blue reusable input, empty state and dialog c…
P1 UX: consolidate cool-blue reusable input, empty state and dialog c…
P1 UX: consolidate cool-blue reusable input, empty state and dialog c…
test(P1 UX): lock shared input, editable command, dropdown, empty sta…
test(P1 UX): resolve canonical dynamic dialog colors before WCAG cont…
fix(P0 UI): optimize normal startup bounds and restore truthful activ…
fix(P0 UI): optimize normal startup bounds and restore truthful activ…
fix(P0 UI): optimize normal startup bounds and restore truthful activ…
fix(P0 UI): optimize normal startup bounds and restore truthful activ…
perf(GOOSE): offload native NIC discovery and keep SCL catalog rebuil…
masarray commentedon Oct 27, 2026
D29 active-scope reset — UI SOFTWARE only, zero device recapture
Keep this issue open solely for genuinely unfinished UI/UX implementation, if any, relative to the current operator-accepted v1.6.42 and exact staging RC
d4598619b1b8fc21487cf5beb83a8a8284d0e9cf. Historical UI draft PR #732 is CLOSED NOT MERGED; do not silently infer that every visual style from it shipped.Implement from the current repo, using code/XAML regression tests and normal application screenshots/artifacts already available. Do NOT request IEC 61850 diagnostics, SCL/PCAP, IED retest or rollback to old WPF branch. No physical FAT requirement for purely visual changes. No release/main mutation under this comment. If the latest accepted UI already meets the desired outcome, close this issue as completed with an exact code/file check rather than opening a new historical PR.
masarray commentedon Oct 27, 2026
D30 source-based reconciliation — issue #730 completed (implementation scope)
All four actual UI integration PRs were MERGED: #731 cool-blue token system + centered Normal startup, #733 RC consolidation, #735 field hotfix for window/RCB/GOOSE, #736 GOOSE visibility/viewport/SNTP/Browser UX. Current staging RC exact
d4598619b1b8fc21487cf5beb83a8a8284d0e9cfstill has:MainWindow.xaml:WindowState="Normal"andWindowStartupLocation="CenterScreen";IoListTestingWindow.xaml: Normal + CenterOwner.WorkstationWindowStartupBounds.cs: first-paint work-area-constrained initial size/position; no runtime maximize or later user resize override.Resources/P2BlueSteelGreige.xaml: cool panel#F8FBFF, alternate#EDF5FF, header#E8F2FF, separator#D7E5F6, hover#E4F0FF; legacy Greige keys map to cool-blue tokens.P2BlueSteelGreigeUx.cs: once-per-window visual adapter; no forced MainWindow maximize; no inherited font/SMV ownership override.StartupVisualStabilityRegressionTests.csandP2BlueSteelGreigeThemeTests.csassert these contracts. Two canonical Windows Build runs for exact current RC SHA40486812592and40486811174concluded SUCCESS in D28 audit.Closing completed for code-implemented UI requirement; this does not manufacture a new real 100/125/150% DPI inspection, claim that all specialized dialogs have been visually eyeballed, or imply physical IED/IEC FAT. The accepted v1.6.42 binary and
mainremain unchanged; no new build or screenshot required to close this historical UI tracking issue.