Two bugs made 'Fill saved password' do nothing:
1. HOST MISMATCH. Saving used location.hostname at submit time (e.g.
accounts.google.com); filling derived the host from the app's
configured URL (mail.google.com). The Keychain lookup always found
nothing for any service with a separate auth domain. Fixed by storing
the save-time hostname in App.saved_host and reading it back at fill
time, falling back to default_scope for entries saved before this.
2. SILENT FAILURE. Every error path in the fillpw sentinel called only
eprintln!, which is invisible to the user. A feature that fails silently
is indistinguishable from one that is not wired up. Fixed by emitting a
fill-error event; the shell shows it as a toast in the nav column, which
is left of the stage and therefore always above native views.