Close the last demo gap: seed an admission, and find the discharge form that never existed

The demo outline's final open item was D35: the admit -> discharge round trip
was tested, but a clean seed contained no admission, so the discharge form
could not be opened, screenshotted or demonstrated.

Seeding one exposed the reason it never had been.

`routes/web.php` has pointed `GET /admissions/{admission}/discharge` at
`AdmissionController::dischargeForm()` since admissions were built. That method
did not exist, and no view for it existed either. The route returned HTTP 500
for every admission ever created.

Two things kept it invisible. The POST half is well covered by tests that submit
the payload directly, so none of them ever needed the page. And
`AdminPageSmokeTest` skips record routes whose model has no seeded row, printing
its skip list only when something else has already failed -- so with no admission
in the seed the page was skipped silently, and a green run proved nothing about
it. `admissions/show` rendered a "Discharge patient" button straight at the dead
route; that button was also wrapped in a `<form method="POST">` nothing ever
submitted.

- AdmissionController::dischargeForm() plus resources/views/admissions/discharge.blade.php,
  rendering exactly the five fields `discharge()` validates
- test_the_discharge_form_renders_and_submits() asserts those five `name=`
  attributes on rendered HTML, submits through the form, and checks the
  discharge stamps `discharged_at` and `discharged_by` from the session
- Fault-injecting the method name back out fails 2 tests (that one and the
  smoke test), which is the non-vacuity proof

Two more faults came out of looking at the running page:

- The seeded admission left its `bed_assignments.admission_id` null, so the
  admission page read "No bed assignments for this admission" while the bed
  register showed that patient occupying that bed. The placement now links to
  the admission; the other three occupied beds stay unlinked because those
  patients are placed, not admitted.
- `dl.meta` sizes its label column by `max-content` while `.grid--2` stays
  two-up until 767px. Between those widths the label kept 128px of a 219px row
  and left the value 75px, which split words: "Synthetic demonstrati / on
  admission." Measured in the browser, not inferred. Definition lists inside
  two-up cards now stack until the cards are wide enough for both columns.
- `room_number` copied `bed_number`, so every screen showed "Bed GEN-01 · Room
  GEN-01". Rooms now take numbers of their own, two beds to a room.

`test_an_admission_cannot_be_raised_against_another_clinic` asserted the admission count was exactly `0` after a refused request, and `ownPatient` is "the
first Lagos patient" -- the very patient the seed now admits. That assertion is
now a before/after delta, which is what it was always trying to say.

Evidence: outputs/feature-evidence/A01-admission-transfers-beds/rev-20261015-002/
(five screenshots at 1440px and 800px, plus verification.md). The demo outline's
gap list is now empty.
