0c72b70de7
The catalog only has 4 products; with 2 already in the cart, the initial pick's pool shrinks to 2 and pickRandom's slice can't pad past what's available, so the grid rendered 2 cards instead of 3. The swap-after-add path already had fallback logic for this exact case — extracted it into pickWithFallback() and reused it for the initial pick too.