diff --git a/src/NullDepth/wwwroot/css/app.css b/src/NullDepth/wwwroot/css/app.css
index 072db49..64ba68c 100644
--- a/src/NullDepth/wwwroot/css/app.css
+++ b/src/NullDepth/wwwroot/css/app.css
@@ -205,3 +205,17 @@ kbd { color:var(--cyan); background:none; padding:0; }
@media(max-width:720px) { .title-card { left:1.5rem;top:8vh; }.title-card h1 { font-size:2.7rem;letter-spacing:.12em; }.title-menu { left:1.5rem;bottom:5rem; }.room-panel { left:0;bottom:5.4rem;width:100%;padding:1.2rem;background:rgba(2,8,11,.82); }.movement-pad { right:1rem;bottom:15rem; }.command-bar { overflow-x:auto;justify-content:flex-start; }.command-bar button { white-space:nowrap; }.map-grid { grid-template-columns:repeat(4,2.8rem);grid-template-rows:repeat(10,1.9rem);overflow:auto; }.briefing-card { left:1rem;width:calc(100vw - 2rem);padding:1.4rem; }.briefing-card dl { grid-template-columns:1fr; }.briefing-card dd { margin-bottom:.5rem; } }
@media(max-width:720px) { .inventory-card ul { grid-template-columns:1fr; } .breaker-grid { grid-template-columns:1fr; } .puzzle-controls { grid-template-columns:1fr; } }
@media(prefers-reduced-motion:reduce) { *, *::before, *::after { animation-duration:.01ms!important; animation-iteration-count:1!important; transition-duration:.01ms!important; } }
+
+#blazor-error-ui {
+ display: none;
+ position: fixed;
+ inset: auto 0 0;
+ z-index: 2000;
+ padding: .75rem 1.25rem;
+ background: #b32121;
+ color: #fff;
+ text-align: center;
+}
+
+#blazor-error-ui .reload { color: #fff; font-weight: 600; }
+#blazor-error-ui .dismiss { position: absolute; right: 1rem; cursor: pointer; }
diff --git a/src/NullDepth/wwwroot/index.html b/src/NullDepth/wwwroot/index.html
index 6ce7a92..0e3b0ff 100644
--- a/src/NullDepth/wwwroot/index.html
+++ b/src/NullDepth/wwwroot/index.html
@@ -13,7 +13,6 @@
-