Add pre-session billing and cost notice

AC
17h ago
+398-7

An interview runs on Gemini Live, which bills the server's Google AI project on the whole context of the session: retained audio and images are paid for again on every later turn (docs/provider-cost-and-degradation.md, "What an interview spends"). Neither the operator entering a key nor the candidate pressing Start was told so before a session began. This PR adds the pre-session billing notice from #161, while the session length cap and text-only mode remain tracked in that issue.

The notice appears in two places following the wording in docs/provider-cost-and-degradation.md ("What an interview spends", "What a whiteboard interview adds", and "What the candidate sees"):

  • Setup page (Google AI section): States next to the API key input that Gemini Live usage is billed to this server's Google AI project on the whole context of the session.
  • Interview lobby (above Start): Names who is billed and what media the selected mode sends to Gemini Live:
    • Coding mode with candidate video enabled: voice and video.
    • Coding mode without candidate video: voice.
    • Coding mode with example drawing checked: voice (or voice and video if video is enabled), plus the drawing whenever the interviewer reads it (read_board).
    • Whiteboard mode: voice and board images (since the camera is off, but every board update is sent on the same stream as a realtime image and stays in the billed context).

/api/session now reports candidateVideo (true, false, or null). It returns a boolean only when this web process hosts the interviewer locally and knows its configuration; in a web-only split deployment where an external agent joins with its own environment, it returns null so the lobby does not make a promise it cannot verify. The lobby keeps the billing notice hidden whenever candidateVideo is null, before /api/session responds, and during offline practice when the session request or a subsequent refresh fails.

Regression tests cover the /api/session response across signed-out, signed-in, and unknown (null) states, the Setup page notice, and the lobby notice visibility and wording across mode switches, example drawing toggles, and failed requests.

UI Verification

Setup page (Google AI section):
截圖 2026-10-24 下午1 42 23

Lobby — Coding mode (candidate video disabled / default):
截圖 2026-10-24 下午1 31 05

Lobby — Coding mode (candidate video enabled):
截圖 2026-10-24 下午1 35 53

Lobby — Whiteboard mode:
截圖 2026-10-24 下午1 31 16

Refs #161