v2.5.0

Post templates move from the browser to the account, and the dialog they are
edited from is usable on a phone (MR !181). Requires nexus-go v2.2.0 or later,
which is deployed on both nodes.

- Templates lived in localStorage under blurtPostTemplates-<user>, so they were
  per-browser and per-device, lost with site data, and absent from a private
  window. They are now rows in nexus-go, reached through five signed RPCs.
  Every operation is signed on its own and deliberately does not use the draft
  session grant: that grant is a bearer credential meant to spare a signature
  on each draft autosave, and template operations are rare enough to pay for
  themselves.

- Writes fan out to every node and reads merge what every node returns, with
  last-write-wins and tombstones for deletes, exactly as drafts do. A list from
  zero reachable nodes is UNKNOWN rather than "you have none", so an outage
  never looks like data loss.

- A modal asks once, before the editor stops reading the browser's copy, and
  clears that copy only after every template is confirmed stored. It was the
  only copy.

- A /templates page, sibling of /drafts and beside it in the account menu,
  lists what the account holds, opens one into the editor, and deletes with a
  confirmation that says the delete cannot be undone -- because it cannot.
  Deleting used to sit in Advanced Settings as a second button identical to the
  one next to it and one click from Load.

- The beneficiary row is no longer a twelve-column grid on a phone. Splitting
  those columns between a three-character percentage and an account name never
  worked at any share: the percentage clipped or the name was cramped. The
  percentage now takes exactly the width three digits need and the name takes
  the rest. Everything in the row centres against it, the @ box is transparent
  rather than Foundation's near-white, and Advanced Settings has a Cancel
  button at all -- its only way out was the corner X.

- Adding a beneficiary over an unfinished row used to produce a second blank
  row and a duplicate-beneficiary error, because two blank rows cannot be told
  apart. Add is hidden while any row lacks a name or a percentage.

- The template picker and the community role picker no longer hand the choice
  to the operating system's own picker, which cannot be styled and covers a
  dialog with a sheet that looks nothing like the site.

- Below 640px a site-wide rule gives every table display:block so it can
  scroll, and a block box shrinks to its content -- so a narrow table stopped
  filling its card and read as one that had failed to load. The templates list
  and the community roles table use a wrapper that keeps the table a table.

- Two i18n sections, post_template_selector_jsx and beneficiary_selector_jsx,
  existed only in English and rendered that way whatever the reader's language.
  Both are translated into the other eight locales. Add account and Remove now
  say Add beneficiary and Remove beneficiary; Sign in and Sign up, a letter
  apart and neither saying what it does, say Login and Register.

Also in this release, with no effect on what users see: the repository gained a
jest configuration and a green suite where twelve of its suites had been
failing, a CI job that runs it on every merge request with the results and
coverage shown there, and an npm install that survives a socket timeout instead
of failing the pipeline before anything is tested (MRs !177, !178, !179, !180).