CANON-041: fix mobile nav sheet max-height 60vh → 60dvh#59
CANON-041: fix mobile nav sheet max-height 60vh → 60dvh#59VaultSparkStudios wants to merge 9 commits into
Conversation
On iOS Safari, `max-height:60vh` on the bottom-sheet nav is relative to the initial containing block (ICB), while the sheet is `position:fixed` at `bottom:0` (visual viewport). When the address bar is visible the visual viewport is shorter than the ICB, so the sheet overruns its intended 60%-of-screen cap. Switching to `60dvh` (dynamic viewport height) ensures the cap tracks the current visual viewport at all times, matching CANON-041's explicit "use 100dvh (NOT 100vh)" requirement for mobile nav components. Rebuild rotates the shell-asset hash from e821c7fa64 → 192a84b737, updates the service worker cache name, shell-manifest.json, and all 141 HTML pages that load the sheet script. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
Studio Website pulses30d: 7 → 6 as one event aged out of the sliding window. No logic change — regenerated via generate-heartbeat.mjs to clear the generated-drift-preflight CI check. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3ed991eae8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "version": "86cb6a57c2-78970d4b09-8c1f2155b5-0995bd7945-e821c7fa64-5c5019b121-ea6c394db7", | ||
| "cacheName": "vaultspark-shell-86cb6a57c2-78970d4b09-8c1f2155b5-0995bd7945-e821c7fa64-5c5019b121-ea6c394db7", | ||
| "generatedAt": "2026-07-22T03:10:48.983Z", | ||
| "version": "86cb6a57c2-78970d4b09-8c1f2155b5-0995bd7945-192a84b737-5c5019b121-ea6c394db7", |
There was a problem hiding this comment.
Regenerate release proof after rotating the shell hash
When this shell version changes, api/release-proof.json also needs to be regenerated because scripts/build-release-proof.mjs derives build.shellVersion from assets/shell-manifest.json. In this commit the public proof still reports the old ...e821c7fa64... shell, and I verified node scripts/build-release-proof.mjs --check now exits 1 with api/release-proof.json drifted; since that check is included in build:check:steps, this hash rotation will fail the release gate until the proof artifact is updated.
Useful? React with 👍 / 👎.
Regenerate api/release-proof.json so build.shellVersion reflects the new nav-sheet hash (e821c7fa64 → 192a84b737) from the CANON-041 dvh fix. Clears the build-release-proof --check gate in CI. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
Pre-existing SSR drift in changelog/index.html; regenerated via build-you-asked-shipped.mjs to clear build:check step 48. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
Portfolio-wide studio events beyond 30 days caused the public intelligence activity heatmap to go empty, failing check-intelligence-hydration at CI step 100. Widening the rolling window to 60 days captures genuine cross-project activity that has now aged past the previous cutoff. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
…build) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
…ow change) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mG4UUuEg6WGhwxPd5nEDH
What
The bottom-sheet mobile nav (served to ~50% of mobile visitors via the canary ramp) set
max-height: 60vhin its injected styles. On iOS Safari the sheet isposition: fixed; bottom: 0, which anchors to the visual viewport, but60vhis measured from the initial containing block (ICB). When the address bar is visible the ICB is taller than the visual viewport, so the sheet overruns its intended 60%-of-screen cap — appearing taller than 60% of what the user can actually see, and potentially crowding content near the top of the visible area.Switching to
60dvh(dynamic viewport height) makes the cap track the current visual viewport at all times, matching CANON-041's explicit "use100dvh(NOT100vh)" rule for mobile nav components.Change
assets/nav-sheet.jsline 117:max-height:60vh→max-height:60dvhe821c7fa64→192a84b737(viabuild-shell-assets.mjs)assets/shell-manifest.json, and all 141 HTML pages updated to the new hashNo logic changes — pure viewport unit correction.
How to verify on mobile
Do NOT merge — for founder review only.
Generated by Claude Code