- 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).
- Add local Persian fonts: Vazirmatn, Sahel, Shabnam, Lalezar, IranNastaliq
- Configure @font-face in globals.css with all font weights
- Set Vazirmatn as primary font, Lalezar for headings, Sahel for alt text
- Fix Hero image loading with crossOrigin and error fallback
- Fix SmartAdvisor disabled button contrast (WCAG compliance)
- Add visible labels for form inputs in SmartAdvisor step 1
- Fix UserDashboard null safety for walletBalance
- Fix announcement bar hydration mismatch (loading state guard)
- Fix UserDashboard null checks for profile fields
- Improve overall frontend robustness and data-loading guards