fix(admin): 4 admin/storefront bugs

1) Catalog + Pricing search now matches displayName + cleanDescription
   alongside name/category/description, so AI-renamed products show up
   when admin types a partial keyword. Storefront hero search now also
   matches category.

2) Order Tracking 'add from catalog' / 'pick wallet customer' search
   broadened to the same fields and the picker reopens on every input
   click (previously only opened on first focus).

3) Storefront product detail popup was holding a stale snapshot of the
   selected product while the catalog refetched every 30s, so a price
   the admin just changed kept showing the old figure. setSelected now
   resolves to the fresh row from the latest fetch.

4) Storefront WhatsApp field rejected raw numbers — only accepted
   https://wa.me/... URLs. saveWhatsapp now accepts phone numbers and
   api.whatsapp links, normalizing to https://wa.me/<digits> before
   upserting store_settings.

Tests: 100 → 106 passing (added whatsapp normalization + search
haystack coverage).
