### Connect the search field and the results of the Elements page to `searchCatalog` **Goal:** The Elements page (the design is in #114, #41) shows real results from the API, and the search field works. This is the first part of #110, which is split in parts: this issue is the search and the results, and the filters, the sort and "Load more" are the next ones. The API is in `dev`: `searchCatalog(search:, first:, ...)` (see "Search, filter, sort and pagination" in [API.md](docs/API.md)). #### Done when - [ ] The results are loaded with `searchCatalog` through Apollo Client (typed by hand like `catalogOperations.ts`) and shown in the table and in the cards, instead of `exampleElementRows`. The example rows and `src/lib/elementList.ts` are removed or only used by tests. - [ ] "Showing X of Y" uses `totalCount`. Only the first page (`first: 20`) is loaded here; "Load more" is a later issue. - [ ] The search text is sent to the API when the user has stopped typing (debounce), and at most 80 characters can be typed (the API gives `BAD_USER_INPUT` for more than 80 characters or 8 words). - [ ] The search text is in the address (`?search=...`, `useSearchParams`), so a result can be shared and the back button works. - [ ] A loading state, an error state with "Try again" (`describeError`), and an empty state ("No elements match ...") that a screen reader hears (`role="status"`). - [ ] Each row gets its fields from the API: the apparatus and group from `elementGroup`, the value from `value` or `dValue`, `imageUrl` for the drawing, and "More variants" when `variants` is not empty. The group of a vault is shown by its number (see #114). - [ ] Tests: the results, the debounce, the address, loading, error with retry, and the empty state. #### Not in this issue - The filters (#84, #85, #86), the sort, "Load more", and the variants of a search match (#58).