Frontmatter
| id | 9482 |
| title | Firefox Nightly: Scroll wheel stuck on Portal home page due to scroll-snap-type mandatory |
| state | Closed |
| labels | bugai |
| assignees | tobiu |
| createdAt | Mar 15, 2026, 8:20 PM |
| updatedAt | Mar 15, 2026, 9:39 PM |
| githubUrl | https://github.com/neomjs/neo/issues/9482 |
| author | tobiu |
| commentsCount | 2 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 15, 2026, 9:07 PM |
Firefox Nightly: Scroll wheel stuck on Portal home page due to scroll-snap-type mandatory

Input from Gemini 3.1 Pro:
✦ We successfully identified and resolved the root cause of the scroll wheel lock in Firefox Nightly.
Diagnosis: The issue was not the JavaScript events, the
OffscreenCanvas, or the general CSSscroll-snap-typerules. The culprit was the interaction between Firefox's layout engine,scroll-snap-type: mandatory, and a zero-width element using CSS scroll-driven animations (animation-timeline: --page-scroll).The
.portal-home-progresscomponent, which is the first child in the DOM flow of the snapping container, usedscale: 0 1;for its initial state. In Firefox, placing an element with an effective width of0at the very top of a scroll container while it evaluates a scroll intersection for a snap point triggers a calculation failure. It assumes the wheel delta is insufficient to break the0threshold, causing the viewport to snap immediately back toscrollTop: 0.Resolution: The fix is surprisingly simple but highly specific. By changing the initial scale state from
scale: 0 1;toscale: 0.001 1;, the element's bounding box is mathematically non-zero. This infinitesimally small value is completely invisible to the user but allows the Firefox layout engine to properly calculate the scroll intersections and release the snap lock when the user scrolls down from the Hero section.A detailed comment has been added to the SCSS file to document this engine-specific hack for future reference.

opened a FF bugreport, to give the team a heads-up: https://bugzilla.mozilla.org/show_bug.cgi?id=2023455
Describe the bug On the portal app home route (
apps/portal/view/home/MainContainer.mjs), we use a CSS-based "snappy" scrolling to enforce page-by-page scrolling (scroll-snap-type: y mandatory).This works fine in Chrome and Safari. However, in Firefox Nightly (v150), using the mouse wheel makes it virtually impossible to scroll down. The scroll increments from the wheel are too small to break the
mandatorythreshold for the 100vh sections, causing Firefox to snap back to the current element.To Reproduce
Expected behavior The user should be able to scroll to the next section using the mouse wheel.
Solution We will apply a CSS feature query targeting Firefox to downgrade the snapping behavior to
proximity. This allows free scrolling with the mouse wheel while still snapping when close to a boundary.@supports (-moz-appearance: none) { scroll-snap-type: y proximity; }