- Replace customer_lookup "Search/display field" single dropdown with a
free-text "Match field name(s)" input supporting multiple fields (semicolon-separated),
matching the api_lookup UX pattern
- When customer_lookup type is selected in the job type editor, any existing
api_lookup attributes are automatically removed (customer_lookup supersedes api_lookup)
- In the job create/edit form, api_lookup attributes are suppressed when the
job type includes a customer_lookup (customer_lookup takes the place of api_lookup)
- Backend /customers/lookup endpoint already handled multi-field match_field;
no PHP changes required for that path
Job type attributes now support a "Customer Type" pseudo-type: selecting
a customer type expands its attribute definitions inline as real rows,
letting job types reuse field configurations without manual re-entry.
The "customer" placeholder type is stripped server-side before persisting.
Also update production Keycloak redirect URIs from IP to hostname and
ignore .claude/ and .abacusai/ tool directories.
- add API Lookup attribute type with alias, URL, format, match fields, and auto-fill config
- update job type create/edit forms to configure API lookup attributes
- add authenticated /api/proxy route for external lookup requests
- enhance job create/edit flow to load and select API lookup values
- rebuild jobs table columns dynamically from job type attributes
- add unsaved-changes guard for ct-form forms
- include related UI/style updates across job and job-type views