QA release: backend 1.1.27, frontend 1.1.70 (r4)

Frontend image re-pushed at the SAME locked version 1.1.70 (standing
instruction: the frontend version does not move until told). Distinguish
releases by DIGEST, not by tag:

  r1  sha256:5b90e224...  initial
  r2  sha256:595d6257...  mic/camera menu height
  r3  sha256:3bbbc302...  clickable links in chat bubbles
  r4  sha256:487f9976...  THIS ONE

What r4 adds over r3:
  - Invite-link landing page (app vs browser chooser + installers from
    /api/public/config), built to Figma 2288:16906.
  - An ENDED meeting is reported to a joiner as "hasn't started yet" — every
    room is restartable, and the public pre-join payload never carried the
    fields the old reusable/terminal split relied on.
  - iOS Safari background effects: correct orientation in all four device
    orientations, and switching effects OFF hands the raw camera back instead
    of republishing a canvas capture.
  - The false "Your browser paused the meeting audio" banner is gone.
  - Token-refresh requests have timeouts; a hung backend no longer leaves the
    app on a spinner forever.
  - Leaving a meeting no longer bounces through the join page into the
    device-check screen.

Bundle content is unchanged from r1-r3 (same image tags), so this tag marks the
image, not a compose change.
This tag has no release notes.