Owns the user-settings slice for a standalone extension surface (the options
page) without pulling in the full app reducer. It hydrates from
chrome.storage.local (key user_settings, via the LZ-aware cstorage
wrapper), persists edits, keeps country in sync with location, refreshes
the USD→currency rate when the currency changes, drives the active UI locale
from the language setting, and re-hydrates live when another surface (e.g. the
popup's Settings tab) writes the same key — mirroring the behavior of
App.tsx so both surfaces stay consistent.
Owns the user-settings slice for a standalone extension surface (the options page) without pulling in the full app reducer. It hydrates from
chrome.storage.local(keyuser_settings, via the LZ-awarecstoragewrapper), persists edits, keepscountryin sync withlocation, refreshes the USD→currency rate when the currency changes, drives the active UI locale from the language setting, and re-hydrates live when another surface (e.g. the popup's Settings tab) writes the same key — mirroring the behavior ofApp.tsxso both surfaces stay consistent.