matchesCurrencySearch() re-derives a country name for every currency on every keystroke; region codes don't change during a session, so this was redoing the same locale lookups repeatedly — worst on web, where each lookup constructs a fresh Intl.DisplayNames instance. Caches by region code instead, including null results (regions the platform doesn't recognize), so each code's lookup happens once ever. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FXcrACM5sok3M1KQJ8kByy