# ZB.MOM.WW.Theme Shared UI kit (Razor Class Library — Technical-Light tokens, IBM Plex, side-rail shell, widgets) for the **ZB.MOM.WW SCADA family**; five consumers. Build/test from this directory: `dotnet test`. Component spec + gaps: `../components/ui-theme/`. ## Published 0.5.0 (2026-11-04) Published the tested ignitionoee backlog package to the shared Gitea feed on 2026-11-04. Independent download matched the reviewed artifact SHA256 `374511ebaaa15be71024051e896c8e7e59a8951b0d51a990fa48fbe378ac6485`. The ignitionoee router deployed this package to CR on 2026-11-04. No other consumer was deployed in this task. Do not repack or replace published 0.5.0. Retains 0.4.2's `.rise` fill-mode fix. Adds the remaining shared application CSS from ignitionoee (including `td.row-actions`), composable `TechButton.Class` and `ButtonSize`, plus `ITreeRow`/stateless `TreeTable` in `ZB.MOM.WW.Theme`. Tree styles live once in `layout.css`, with arbitrary-depth indentation and keyboard-focus styling. Caller-owned filtering/collapse behavior stays intact. Test harness migrated to bUnit 2.7.2 with AngleSharp 1.5.0 to address the existing NU1902 advisory without disabling audit. Runtime package dependencies are unchanged. Local verification: Release build passed with zero warnings/errors; Release tests passed 60 tests, none skipped. `build/pack.sh` produced the local 0.5.0 nupkg. All 19 remaining ignitionoee app.css rule blocks are present verbatim in the shared stylesheet; the Impeccable detector reported no findings on changed UI files. Browser QA also exposed a pre-existing mobile shell bug: closed navigation hid the page through Chromium's disclosure wrapper. The wrapper override now applies at all widths, with an explicit mobile rule hiding only the rail and author display rules for older browsers. Two regression tests cover CSS placement and closed-shell component structure; computed mobile/desktop behavior was checked in the disposable ignitionoee local browser fixture. Browser QA confirmed the visibility fix and isolated an additional mobile min-content sizing issue: bounding the direct page to 100% width/max-width with border-box reduced the page/document from 1055px to the 390px viewport and kept wide-table scrolling inside its wrapper. That measured constraint is included. See README's 0.5.0 migration section; deployed consumer validation remains separate from local source/package/browser verification. ## Index history (migrated from the scadaproj root CLAUDE.md) > Moved verbatim out of the scadaproj root `CLAUDE.md` on 2026-09-03 so it loads only when needed. **This file is now the authoritative place for this history — append new entries here and keep the root index row short.** ### Component-table row as it read in the index | Component | Status | Goal | Design | Implementation | |---|---|---|---|---| | UI Theme (layout / tokens / components) | Adopted (feed `0.2.0`–`0.4.1`). **`0.4.0` (2026-08-11) upstreamed the Bootstrap `.btn`/`.btn-sm` sizing block** that all **five** consumers had independently written into their own stylesheets (Bootstrap hard-codes `--bs-btn-font-size: 1rem`, oversized against the kit's 0.9rem body) — sized by `--bs-btn-*` variable override **only**, never by redeclaring box properties, because `.btn-group`'s seam/radius machinery reads those same variables and a literal `font-size` at equal specificity silently flattens `.btn-sm` into a padding-only difference (a real defect found in mxgw's local copy). Same release added the `rail-btn-block` full-width rail-foot modifier; **`0.4.1` fixes it** — 0.4.0 shipped `width: auto`, which fills for an `` but shrink-wraps a `