Three separate gaps around pairing failures:
The discovery phase had no visible time limit, so a pairing attempt that found
nothing just sat there until it gave up. Page 0 now carries a progress bar that
drains over the 30 seconds Solaar itself passes to discover() and set_lock().
It stops as soon as a device is found. The passkey page deliberately gets no
countdown: that timeout lives in the receiver's firmware and is never reported,
so any timer shown there would be invented.
The failure page ran gettext over a runtime value, which xgettext cannot
extract, so no pairing error was ever actually translated. The cause now comes
from literals matched exactly against the error labels that can reach the page,
which also lets each one say something useful. Bolt's "failed" in particular
used to land on "No further details are available about the error"; it now says
the sequence was not accepted, and admits that the receiver cannot tell which
buttons were pressed rather than guessing at a cause. The raw error token is
kept in a small line so bug reports still carry it.
Recovering from a failure meant closing the dialog and starting over from the
main window, so the page now offers a "Try again" button. It is packed into the
page rather than added as an assistant action widget, so the path stays usable
wherever the assistant is only duck-typed, and it is only built when a retry
callback was supplied.
The Bolt instructions also gained the long-press hint the command line already
had, and the passkey page a reminder to keep the device on and in range. The
labels added to both pages are bounded and centred so that they wrap inside the
existing dialog width instead of stretching it.