Extract geolocation detection and storage logic from `QuestionBirthplace`
and `QuestionPhone` into a new `geo-region.ts` library. This provides a
single source of truth for user region data, including city, country,
and phone calling codes.
- Create `src/lib/geo-region.ts` to manage GeoIP fetching, caching,
and subscription-based updates.
- Refactor `QuestionBirthplace` to use the new `getUserGeoRegion` utility
instead of inline fetch logic.
- Refactor `QuestionPhone` to use the unified storage and retrieval
mechanism for phone calling codes.
- Add unit tests in `ui-config.test.tsx` to verify auto-detection
behavior when `enable_geoip` is enabled.
Enhance the user experience by allowing the browser's back button to
close active question sheets instead of navigating away from the page.
- Update `useSheetScrollLock` to manage history state using `pushState`
- Implement `popstate` event listener to trigger `onBack` callback
- Add support for an optional `onBack` option in the scroll lock hook
- Clean up redundant CSS rules related to `question-sheet-open`
- Add integration tests to verify sheet closure on `popstate` events