Adds CustomerRepository::findDuplicate() which checks for an existing
record with the same customer_type_id and attribute_values before any
write. The update path excludes the current record so saving without
changes does not trigger a false positive. Both the create and edit
forms now display a linked error banner identifying the conflicting
customer by ID and type name.
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.