# UI Theme — current state: OtOpcUa Repo: `~/Desktop/OtOpcUa` (Gitea `lmxopcua`). Stack: .NET 10, Blazor SSR. UI surface: `src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/` (Razor Class Library). All paths below are relative to the repo root. Verified against source on 2026-06-01. **Summary:** OtOpcUa already uses a side-rail layout and the full Technical-Light token set. Adoption is **lowest effort** of the three apps — the shell shape already matches the canonical target. The one bug fixed by adoption: a latent font-path 404 that silently falls back to system fonts today. --- ## 1. CSS / design tokens **`theme.css`** — 379-line hand copy of the Technical-Light design system. - Path: `src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/wwwroot/css/theme.css` - Font path: `url('fonts/ibm-plex-sans-400.woff2')` (lines 24, 29, 34) - **Bug:** the path is relative to the CSS file location (`wwwroot/css/`), so it resolves as `wwwroot/css/fonts/…` — a 404. The browser silently falls back to system fonts. The canonical RCL path `url('../fonts/…')` fixes this permanently. - Wired in `App.razor` line 17: ``. **`site.css`** — 174 lines of per-app page layout (side-rail shell, login card layout, page body padding, miscellaneous overrides). - Path: `src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/wwwroot/css/site.css` - Wired in `App.razor` line 18: ``. - After adoption: the `.side-rail`, `.rail-*`, `.login-wrap`, `.login-title` rules are superseded by the RCL's `layout.css`. The page-layout residuals (body padding, page- specific overrides) stay in `site.css`. --- ## 2. IBM Plex fonts Three `.woff2` files vendored into: `src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/wwwroot/fonts/` - `ibm-plex-sans-400.woff2` - `ibm-plex-sans-600.woff2` - `ibm-plex-mono-500.woff2` After adoption: delete all three; the RCL serves them from `_content/ZB.MOM.WW.Theme/fonts/`. --- ## 3. Layout shell **`MainLayout.razor`** — 28-line static layout (no `@rendermode`). Renders `.app-shell` flex row, hamburger toggle, `` inside a Bootstrap collapse div, and `
`. - Path: `src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Layout/MainLayout.razor` - Structure: `.app-shell d-flex flex-column flex-lg-row` (line 8), hamburger (lines 11–18), `