## Why

CSV import lives on its own admin screen with its own event picker, but a guest belongs to
exactly one event (design D11) and the Guests screen is already where an admin chooses that
event. So importing means leaving the list you were looking at, re-answering a question the
previous screen had already answered, and hoping the two answers match. Folding import into
the Guests screen as a modal puts it next to Add guest — the other way rows arrive on the
same list — and removes the only place in the admin where the destination event can be
chosen twice.

## What Changes

- The Guests screen gains an **Import CSV** button beside Add guest, visible only with the
  `import_guests` permission and disabled until an event filter is chosen, matching how Add
  guest already behaves.
- The button opens the existing import flow in a modal: file picker, mandatory validation
  report (row counts, merge warning, per-row problems, first rows), Discard, and Import.
  Nothing about parsing, validation, merging or the two-call preview/commit contract changes.
- The modal's destination event is the Guests screen's event filter, read from the screen
  rather than picked again. **BREAKING** for the operator flow: an admin can no longer import
  into an event other than the one currently shown — they select it in the filter bar first.
- A successful import closes the modal and reloads the guest table, so imported rows appear
  on the list that is already open. This is new behaviour; the standalone screen showed a
  result summary on a page with no table.
- **BREAKING**: the `/admin/import` route stops rendering a page and redirects to
  `/admin/guests`, and the Import tab is removed from the admin navigation. Old bookmarks and
  the docs' links land on the guest list rather than a 404.
- `ImportView` is no longer a route-level screen; its event `<select>` and page heading move
  out, and it becomes the modal's body driven by an event passed in as a prop.

Non-goals: no change to the import API endpoints, the CSV column contract, per-row error
reporting, dedup/merge rules, or the `import_guests` policy action. This is a relocation of
the surface, not a change to what import does.

## Capabilities

### New Capabilities

None.

### Modified Capabilities

- `guest-management`: the bulk CSV import requirement gains a surface and destination rule —
  import is reached from the guest list as a modal, its destination event comes from the
  screen's event filter rather than a control inside the import flow, and a completed import
  refreshes the list behind it. The standalone import screen is removed.

## Impact

- `web/components/admin/ImportView.tsx` — drops the event dropdown and the outer page
  spacing, takes `eventId` and completion callbacks as props.
- `web/components/admin/GuestsView.tsx` — new `canImport` prop, Import CSV button, modal
  state, reload on success.
- `web/app/admin/(protected)/guests/page.tsx` — passes `canImport` from the session
  permissions.
- `web/app/admin/(protected)/import/page.tsx` — becomes a redirect to `/admin/guests`.
- `web/components/admin/AdminNav.tsx` — the Import nav item is removed.
- `docs/USER-GUIDE.md` and any walkthrough step that navigates to `/admin/import`.
- No API, database, migration, or generated-client change. `web/lib/api/browser.ts`'s
  `previewImport`/`commitImport` are called exactly as they are today.
