- ClientLayout: implement proper manual scroll restoration using module-level
_wasPopNavigation flag and sessionStorage. Fixes scroll jumping to top/bottom
on Back navigation. Scroll position saved on scroll (debounced) and cleanup,
restored via double-rAF on popstate navigation.
- AuthModal/LoginModal: fix Android back button to push only ONE history sentinel
on modal open (not on every subView/step change). Prevents stacking of extra
history entries. Back in sub-views re-pushes sentinel for next back press.
- AuthModal/LoginModal: remove navigator.credentials.get (WebOTP API) which was
showing an intrusive permission modal. The native autoComplete=one-time-code
on the first OTP input provides the suggestion bar above the keyboard instead.
- AuthModal/LoginModal: add isVerifyingRef guard to prevent double toast on
successful login. Both onComplete callback and form submit were calling
triggerVerifyOtp/handleVerifyOtpWithCode simultaneously.
- AuthModal: remove triggerVerifyOtp from handleOtpChange to eliminate the second
duplicate call (only onComplete now triggers verification).
- OtpInput5: remove maxLength=1 restriction from first input so browser can
inject the full 5-digit OTP code. Multi-char input is already handled by
handleDigitChange which distributes digits across all boxes.
- ProductPage: fix swipe gesture direction in media gallery. Swipe right -> next
item, swipe left -> previous item (matches RTL intuition for Persian users).