Skip to content

fix: Stage 0 Begin button unreachable due to scroll gating clipping content below fold#26

Merged
Maangled merged 2 commits intomainfrom
copilot/fix-begin-button-visibility
Mar 21, 2026
Merged

fix: Stage 0 Begin button unreachable due to scroll gating clipping content below fold#26
Maangled merged 2 commits intomainfrom
copilot/fix-begin-button-visibility

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 21, 2026

body.scroll-gated { overflow: hidden; height: 100vh } (introduced in PR #24) traps the entire page at viewport height — if Stage 0 content (hero + android + featured profiles + assist levels) exceeds the viewport, the Begin button is silently clipped with no scroll path to reach it.

Fix

Keep body locked, but let #stage-0 scroll internally:

/* body stays gated — no free-scrolling into other stages */
body.scroll-gated { overflow: hidden; height: 100vh }

/* Stage 0 viewport scrolls internally so Begin is always reachable */
body.scroll-gated #stage-0 { max-height: 100vh; overflow-y: auto; -webkit-overflow-scrolling: touch }
  • Attention gating is preserved — the rest of the document remains unreachable until unlockScroll() fires
  • All existing unlockScroll() call sites verified correct: Begin, Skip/dismiss featured profiles, close alias gallery, close profile gallery, fork profile
  • Added dev comment at the gating block explaining the internal-scroll requirement
Original prompt

Goal

Fix the regression where the Stage 0 Begin button is not visible / not reachable, and ensure the Stage 0 onboarding remains gated without trapping the user.

The user reports: after pulling latest (after merging PRs #22, #23, #24 on 2026-03-21), they cannot get past the Begin button because it never shows up.

This likely stems from the scroll gating introduced in PR #24 (body.scroll-gated { overflow: hidden; height: 100vh }) clipping content below the fold.

Repo / file

  • Repository: Maangled/ferros
  • Primary file: docs/personal-profile.html

Hard constraints (from docs/AGENT_GUIDE.md)

  • Must work on file:// protocol
  • Zero external dependencies (no CDN, no fetch, no ES modules)
  • Do not modify hashData() semantics or remove djb2 fallback
  • Do not write to localStorage anywhere except saveProfile()
  • Do not restructure the stage flow (0→1→2→3) or bypass Trade Window

Requirements

1) Make Begin reachable in Stage 0

  • Ensure the Begin button is always visible or reachable on first visit / Stage 0, even when scroll gating is active.
  • Must work on small screens and when content height exceeds viewport.

Preferred approach:

  • Keep attention gating but allow Stage 0 viewport to scroll internally:
    • Keep body.scroll-gated { overflow: hidden; }
    • Add a Stage 0 wrapper (or use an existing Stage 0 container) with max-height: 100vh; overflow-y: auto; so users can reach Begin.
    • Alternatively, move Begin into the hero panel area above the fold, but avoid layout regressions.

2) Ensure gating can be unlocked reliably

  • unlockScroll() should be triggered when the user:
    • clicks Begin
    • selects/forks a featured profile
    • opens Browse Profiles (gallery) and then closes it
    • clicks Skip / dismiss featured profiles
  • Confirm that any modal close handler calls unlockScroll().

3) Do not break returning user behavior

  • Returning users with an existing profile should not be gated.
  • Existing flow that bypasses Stage 0 should continue to work.

4) Add a minimal self-check note (dev comment)

  • Add a short developer comment near the scroll gating code explaining why internal scrolling is required (Begin button must never be clipped).

Acceptance criteria

  • On a fresh load (no localStorage profile), Stage 0 renders and the user can find and click Begin without resizing the window.
  • Works when opened as a local file (file://).
  • No console errors.
  • No changes to seal chain / hashing / storage boundaries.

Nice-to-have (optional if time)

  • Add a temporary debug visual indicator if Begin is off-screen (e.g., a subtle down-arrow cue) — but only if it doesn’t add complexity.

The following is the prior conversation context from the user's chat exploration (may be truncated):

Assistant: Good call — that's a lot for one agent session, especially on a 163KB single-file HTML prototype. PR #21 is already in-flight and will likely timeout trying to do everything at once.

Here's how I'd split it into 3 focused PRs that can each finish within the hour:


PR 1 — Quick fixes + banner + recovery placeholder (items 1, 6, 7)

Smallest scope, least risk, clears the ground for the other two.

  • ✅ Fix the FERROS acronym from "Federated Experiential Resilience & Operational System" → "Foundational Embedded Rust Runtime Operating System"
  • ✅ Add "FERROS Cloud sync coming soon" badge under recovery section
  • ✅ Add architecture TODO comments at section boundaries (project separation plan: Profile → Schedule Ledger → Home Dashboard → Devices → Agent Command Center → Rust backend)

PR 2 — Hero experience + achievement animations (items 2, 3)

Focused on the top-of-page experience only — no profile/gallery changes.

  • 🤖 CSS-animated android assistant near the hero banner with cycling speech bubbles
  • ✨ Begin button slow-pulse animation after ~8 seconds
  • 🏆 "Genesis Pioneer" auto-unlock animation (🚀, +25 SP) on page load
  • 🏆 "Discover Profiles" achievement with hoverable flowchart diagram + clickable gallery link
  • All achievements get hoverable diagrams with SP values

PR 3 — Featured profiles revamp + onboarding gating (items 4, 5)

The heaviest change — profiles section rework + scroll gating.

  • 🐛 Fix profile click bug (cards opening full gallery instead of specific profile)
  • 📰 Replace carousel with side-by-side newspaper-style schedule comparison (2 profiles + "?" build-your-own)
  • 🔀 Reframe "alias" → "fork a profile" language throughout
  • 🎯 Setup assistant when viewing an example profile
  • 🔒 Scroll gating: full page unlocks after dismissing featured profiles
  • 🎭 Rename Alias button → "Browse Profiles"

Want me to go ahead and kick off PR 1 now (it's the quickest win and should finish well within the hour)? Then we can queue up PR 2 and PR 3 sequentially — or in parallel if PR 1 merges fast enough to avoid conflicts.

Also — do you want to let PR #21 keep running to see what it produces, or close it and start fresh with...

This pull request was created from Copilot chat.


⌨️ Start Copilot coding agent tasks without leaving your editor — available in VS Code, Visual Studio, JetBrains IDEs and Eclipse.

…Begin button is always reachable

Co-authored-by: Maangled <108793241+Maangled@users.noreply.github.com>
Agent-Logs-Url: https://github.com/Maangled/ferros/sessions/0f362126-9cbe-4eb8-8d77-3502a52ea880
Copilot AI changed the title [WIP] Fix regression for Stage 0 Begin button visibility fix: Stage 0 Begin button unreachable due to scroll gating clipping content below fold Mar 21, 2026
Copilot AI requested a review from Maangled March 21, 2026 07:19
@Maangled Maangled marked this pull request as ready for review March 21, 2026 07:21
@Maangled Maangled merged commit 8c0461c into main Mar 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants