Story-1694 pramaan-admin type-layer convergence

Admin presentation types now live beside their owning features

This second convergence slice moves frontend-only firm-detail and staff-detail projection shapes out of the global src/types hub and into feature-local homes beside the code that assembles or consumes them.

Firm detail ownership

src/lib/firm-detail/view-models/firm-detail.ts now owns the projection rows consumed by FirmDetailViewModel:

The existing FirmDetailViewModel and FirmProvisioningSummaryViewModel names remain unchanged.

Staff detail ownership

src/components/staff/staff-detail-types.ts now owns the staff-detail view-model and projection shapes already consumed by that feature:

Compatibility

Direct consumers of the moved symbols now import from the feature-local homes. The temporary @/types barrel still re-exports those moved symbols from their new owners so this slice does not dismantle the hub ahead of Story-1695.

Generated backend contract types remain imported from @/gen/types/*. No generated files, OpenAPI snapshot, pramaan-functions code, pramaan-app code, i18n, or table dependencies changed.

Scope guardrails

No new presentation or generated contract file was created. The staff correction adds one dedicated feature-local type file, src/components/staff/staff-detail-types.ts, so staff-detail-presentation.ts remains a function-only presentation helper.

pramaan-docs ADR-124: instrumentation-exempt. This is type ownership cleanup and adds no executable workflow, route, handler, job, external call, or product-state mutation.

Verification proof

Required local verification: pnpm lint, pnpm exec tsc --noEmit, pnpm test, NEXT_PUBLIC_ENV=local pnpm build, pnpm build-storybook, and git diff --check.

Reference checks: the moved firm projection declarations no longer exist in src/types/firm.ts, and the moved staff-detail declarations no longer exist in src/types/staff.ts. They now resolve from their feature-local homes.