Add gallery loading indicators and recover from WebGL context loss.

- Show loading markers while the catalog, portrait thumbnails, and 3D
  halls load so users know loading is still in progress.
- Recover the 3D hall from a lost WebGL context by remounting the canvas
  with a fresh context instead of leaving a permanent dark window, and
  guard the HDR environment map behind an error boundary.
- Show movement streams whose span overlaps the view even when their
  artists lived outside the visible time range.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Danila Khodjaef
2026-07-07 12:31:56 +03:00
co-authored by Cursor
parent 99b8559607
commit 1408811948
5 changed files with 300 additions and 31 deletions
@@ -0,0 +1,61 @@
.gallery-loading-marker {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 14px;
color: rgba(232, 213, 181, 0.92);
font-family: Georgia, serif;
font-size: 15px;
text-align: center;
pointer-events: none;
}
.gallery-loading-marker p {
margin: 0;
}
.gallery-loading-marker-spinner {
width: 36px;
height: 36px;
border-radius: 50%;
border: 3px solid rgba(201, 169, 110, 0.22);
border-top-color: #c9a96e;
animation: gallery-loading-spin 0.85s linear infinite;
}
.gallery-loading-marker-overlay {
position: absolute;
inset: 0;
z-index: 20;
background: rgba(10, 10, 20, 0.72);
backdrop-filter: blur(2px);
}
.gallery-loading-marker-banner {
position: absolute;
left: 50%;
bottom: 12px;
transform: translateX(-50%);
z-index: 12;
flex-direction: row;
gap: 10px;
padding: 8px 16px;
border-radius: 999px;
background: rgba(15, 15, 26, 0.88);
border: 1px solid rgba(201, 169, 110, 0.35);
font-size: 13px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.35);
}
.gallery-loading-marker-banner .gallery-loading-marker-spinner {
width: 18px;
height: 18px;
border-width: 2px;
}
@keyframes gallery-loading-spin {
to {
transform: rotate(360deg);
}
}