diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ApiKeys.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ApiKeys.razor index ec88539f..bbf436e8 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ApiKeys.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/ApiKeys.razor @@ -142,6 +142,13 @@ try { _keys = await Keys.ListAsync(default); + // The one-time banner is only meaningful while its key exists; the credential is + // otua__, so drop it once no listed key matches (deleted here or elsewhere). + if (_created is not null + && !_keys.Any(k => _created.StartsWith($"otua_{k.ApiKeyId}_", StringComparison.Ordinal))) + { + _created = null; + } } catch (Exception ex) { diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/wwwroot/css/site.css b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/wwwroot/css/site.css index 3e5c1edb..9da4e982 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/wwwroot/css/site.css +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/wwwroot/css/site.css @@ -48,3 +48,14 @@ flex: 0 0 18px; width: 18px; } + +/* Modal backdrop overran the viewport on /raw (#631). The theme's `.rise` entrance animation runs with + `animation-fill-mode: both`, which keeps its final keyframe's transform applied for good — and ANY + transform (even the identity it leaves) makes that section the containing block for position:fixed + descendants. A modal rendered inside a `.panel.rise` therefore had its fixed backdrop offset by the + panel's left edge, so it ran 240px past the viewport and the page grew a horizontal scrollbar. + `backwards` keeps the hidden start state during the stagger delay but drops the transform once the + animation ends. (Upstream fix belongs in ZB.MOM.WW.Theme's theme.css.) */ +.rise { + animation-fill-mode: backwards; +}