From 661de0dbbb5c753b789876f53403d751f485ac75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20H=C3=A4gele?= Date: Mon, 7 Sep 2026 19:21:47 +0200 Subject: [PATCH] feat(web-standalone): show the loading overlay while a region's proven links are pulled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Choosing a region pulls proven links for up to 14 nodes, 5 to 15 seconds, and the only sign was a status line in Step 1, off-screen on a phone since #118 scrolls to Step 2 (#121). A shared link already had the right pattern: a loading overlay with a spinner, a title and one line on what is being waited for. The shared-link splash is now the app's loading overlay: #loading-overlay with showLoading(title, sub) and hideLoading(token). The token ties each hide to its own show, so a stale activation finishing late cannot take down a newer one's overlay. The card click and switchToRegion() show "Pulling proven links for region N…" and hide it in the promise's finally, so a failed pull clears it too. The shared-link flow uses the same calls with its old text. Verified in the pane at 412 px: overlay hidden after discovery, shown with the region text 300 ms after tapping a card, hidden once the cluster is locked; shown by hand it is fixed, full-viewport, z 5000, display flex. The pane's screenshots do not composite fixed overlays, so the check is on the DOM and computed style. Co-Authored-By: Claude Fable 5.1 --- web-standalone/changelog.json | 6 ++++ web-standalone/index.html | 63 +++++++++++++++++++++++++---------- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/web-standalone/changelog.json b/web-standalone/changelog.json index 427c625..00d026d 100644 --- a/web-standalone/changelog.json +++ b/web-standalone/changelog.json @@ -1,4 +1,10 @@ [ + { + "id": "2026-09-07-waiting-for-proven-links", + "date": "2026-09-07", + "title": "Choosing a region shows what it is waiting for", + "body": "Picking a region pulls proven links from mc-radar for up to 14 nodes, which takes a few seconds. The page now shows the same loading overlay a shared link uses, saying which region it is pulling links for, until the cluster is locked." + }, { "id": "2026-09-07-map-layers", "date": "2026-09-07", diff --git a/web-standalone/index.html b/web-standalone/index.html index d764b8d..8cc48b4 100644 --- a/web-standalone/index.html +++ b/web-standalone/index.html @@ -1035,7 +1035,7 @@ auto-triggered discovery is in flight. Fixed over the whole viewport (not scoped to the map, which sits below Step 1/2/3 on load) so it's visible immediately regardless of scroll position or screen size. */ - #deep-link-splash { + #loading-overlay { position: fixed; inset: 0; z-index: 5000; @@ -1046,7 +1046,7 @@ selector specificity — an ID rule setting `display` unconditionally would beat it and stay visible even when hidden. Keep display conditional on :not([hidden]) instead. */ - #deep-link-splash:not([hidden]) { + #loading-overlay:not([hidden]) { display: flex; align-items: center; justify-content: center; @@ -1058,7 +1058,7 @@ #intro-overlay { position: fixed; inset: 0; - z-index: 5100; /* above #deep-link-splash (5000) */ + z-index: 5100; /* above #loading-overlay (5000) */ background: rgba(7, 17, 24, 0.62); backdrop-filter: blur(3px); padding: 16px; @@ -1196,7 +1196,7 @@ cursor: pointer; } - .deep-link-splash-card { + .loading-card { width: min(260px, 80%); padding: 20px; border-radius: 20px; @@ -1205,7 +1205,7 @@ box-shadow: var(--shadow); text-align: center; } - .deep-link-spinner { + .loading-spinner { width: 28px; height: 28px; margin: 0 auto 12px; @@ -1217,13 +1217,13 @@ @keyframes deep-link-spin { to { transform: rotate(360deg); } } - .deep-link-splash-card p { + .loading-card p { margin: 0; font-size: 0.82rem; font-weight: 500; color: var(--text); } - .deep-link-splash-card p.deep-link-splash-sub { + .loading-card p.loading-sub { margin-top: 6px; font-size: 0.72rem; font-weight: 400; @@ -1352,11 +1352,11 @@ -