You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Cesium globe (#cesiumContainer) changes both vertical position on the page and rendered size as the user moves between views (cold-load, search-active, point-mode, cluster-mode, table-mode). The user has to re-orient on the map each time something above or beside it changes.
Diagnosis
Two distinct causes, both in explorer.qmd:
1. Map size is content-width-dependent
#cesiumContainer (explorer.qmd:40-44) is currently sized as:
Height is derived from width via aspect-ratio. Width is the left column of grid-template-columns: 1fr 340px on .globe-layout. So any viewport-width change resizes the map.
The side-panel column has max-height: 700px; overflow-y: auto, which is the right pattern (bounded + internal scroll), but the map column has no comparable height anchor.
2. Map position drifts because variable-height content lives above it
The flow above .globe-layout:
.search-bar — fixed
.search-actions — fixed
.search-help — fixed
#searchResults (.search-results) — variable, grows with results
.view-toolbar — fixed, but #tableControls toggles visibility
When any of those grow/shrink, #cesiumContainer.getBoundingClientRect().top shifts and the map jumps vertically.
Proposed fix (CSS + light HTML restructure)
Treat the globe as an app-shell anchor, not a flow-layout element:
Replace aspect-ratio: 4/3 + min-height: 500px on #cesiumContainer with a viewport-stable height (e.g., height: clamp(500px, 70vh, 800px)). Map height becomes a function of viewport height alone.
Bound #searchResults with min-height: 0; max-height: <small>; overflow-y: auto — or move inline status into a Cesium overlay (.cesium-topleft slot already styled at explorer.qmd:23-30).
Reserve a fixed-height slot for banner-style messages above the map (loading, phase, error) so the slot exists whether or not a message is showing.
Verify with Playwright: snapshot #cesiumContainer.getBoundingClientRect() across the five views; assert top/height stable within ε.
No JS logic changes expected. Scope is similar to a single Codex-loop PR.
Open design choices
Target height: clamp(500px, 70vh, 800px) is a starting point. May want to align with the Hana mockup direction referenced near .cesium-viewer-toolbar styling (explorer.qmd:~98).
#cesiumContainer.getBoundingClientRect() has constant top-y and height across cold-load, search-active, point-mode, cluster-mode, and table-mode (within a small ε).
Window resize changes map size monotonically with viewport height, not with side-panel content state.
Symptom
The Cesium globe (
#cesiumContainer) changes both vertical position on the page and rendered size as the user moves between views (cold-load, search-active, point-mode, cluster-mode, table-mode). The user has to re-orient on the map each time something above or beside it changes.Diagnosis
Two distinct causes, both in
explorer.qmd:1. Map size is content-width-dependent
#cesiumContainer(explorer.qmd:40-44) is currently sized as:Height is derived from width via aspect-ratio. Width is the left column of
grid-template-columns: 1fr 340pxon.globe-layout. So any viewport-width change resizes the map.The side-panel column has
max-height: 700px; overflow-y: auto, which is the right pattern (bounded + internal scroll), but the map column has no comparable height anchor.2. Map position drifts because variable-height content lives above it
The flow above
.globe-layout:.search-bar— fixed.search-actions— fixed.search-help— fixed#searchResults(.search-results) — variable, grows with results.view-toolbar— fixed, but#tableControlstoggles visibilityWhen any of those grow/shrink,
#cesiumContainer.getBoundingClientRect().topshifts and the map jumps vertically.Proposed fix (CSS + light HTML restructure)
Treat the globe as an app-shell anchor, not a flow-layout element:
aspect-ratio: 4/3+min-height: 500pxon#cesiumContainerwith a viewport-stable height (e.g.,height: clamp(500px, 70vh, 800px)). Map height becomes a function of viewport height alone.#searchResultswithmin-height: 0; max-height: <small>; overflow-y: auto— or move inline status into a Cesium overlay (.cesium-topleftslot already styled atexplorer.qmd:23-30).#cesiumContainer.getBoundingClientRect()across the five views; assert top/height stable within ε.No JS logic changes expected. Scope is similar to a single Codex-loop PR.
Open design choices
clamp(500px, 70vh, 800px)is a starting point. May want to align with the Hana mockup direction referenced near.cesium-viewer-toolbarstyling (explorer.qmd:~98)..cesium-topleftstyling) is denser; reserved slot is more conventional. PR explorer: surface 'Fetching sample index…' during cold-cache boot→point-mode wait (#190 fix 2) #191's "Fetching sample index…" UX is currently implemented one of these ways — choice should be consistent with that.Acceptance criteria
#cesiumContainer.getBoundingClientRect()has constant top-y and height across cold-load, search-active, point-mode, cluster-mode, and table-mode (within a small ε).