- fetch_page: replace subprocess.run(curl) with urllib (stdlib, cleaner) - fetch_all_pages: add matches_max/non_matches_max params for early-exit. When both are set, stop fetching once quotas are satisfied. - browse_events: add sort_by param (None='fast' early-exit, 'volume'=full fetch+sort). Early-exit only used when sort_by=None (no client-side sort needed). - Remove subprocess import (no longer needed after migration)