feat(demo): typing splash + intro on every fresh visit; neutral desktop Cloud tabs

- Demo boots at '/' (first visit or a browser refresh) always start with
  the typing splash into the onboarding intro — the per-calendar-day
  gate is gone. In-session SPA navigation never replays it, and
  deep-route refreshes keep the visitor's place.
- Cloud top-level tabs return to the standard mode-switcher style on
  desktop; the orange full-width switcher stays mobile-only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-07-15 11:12:49 +01:00
co-authored by Claude Fable 5
parent 6e5a99ef71
commit c13ee58edf
5 changed files with 25 additions and 48 deletions
+6 -1
View File
@@ -398,8 +398,13 @@ onMounted(async () => {
// One-shot "Replay intro" request from the login screen — must survive the
// auto-re-mark below (which otherwise instantly suppresses the replay on any
// onboarded node).
const replayRequested = sessionStorage.getItem('archipelago_replay_intro') === '1'
let replayRequested = sessionStorage.getItem('archipelago_replay_intro') === '1'
if (replayRequested) sessionStorage.removeItem('archipelago_replay_intro')
// Public demo: every fresh boot at the root (first visit or a browser
// refresh) starts with the typing splash for the full effect. In-session SPA
// navigation never remounts App, and deep-route refreshes keep their place.
const { IS_DEMO } = await import('@/composables/useDemoIntro')
if (IS_DEMO && route.path === '/') replayRequested = true
let onboardingComplete: boolean | null = localStorage.getItem('neode_onboarding_complete') === '1' ? true : null
const splashCandidate = !seenIntro
&& (fromBoot || (route.path === '/' && import.meta.env.VITE_DEV_MODE !== 'boot'))