Use is_callable for ShortLinksRepository; build qr image URL when pack
only has short_url (stale seed compatibility).
Co-authored-by: Cursor <cursoragent@cursor.com>
Gmail blocks short-link + attachment as phishing; use multipart/alternative
HTML with s.f0xx.org/api/v1/qr PNG URL (QR still encodes …&src=qr).
Co-authored-by: Cursor <cursoragent@cursor.com>
Multipart SMTP mail attaches verify-email-qr.png; QR encodes s.f0xx.org URL
with src=qr via ShortLinksRepository::shortenForOutboundMail.
Co-authored-by: Cursor <cursoragent@cursor.com>
Outbound registration mail uses ShortLinksRepository::shortenForOutbound
(s.f0xx.org) with 24h TTL; falls back to long URL if shortener unavailable.
Co-authored-by: Cursor <cursoragent@cursor.com>