publish lexicons, harden handle input, prevent flash on load
- add src/publish-lexicons.js + publish:lexicons script to push
agency.portable.{membership,attestation} as com.atproto.lexicon.schema
records on the attester's PDS (resolves via _lexicon.portable.agency DNS)
- normalize handle input in /login: strip leading @, extract from
bsky.app/profile URLs, drop trailing dot; catch resolve errors to
show a friendly message instead of 500
- validate NSID format in /lexicons/:nsid to block path traversal
- hide #rows on load when localStorage has a DID, unhide after client
render completes — stops the empty-form flash before populated view
- pin Railway service in npm scripts (deploy, logs) so the CLI
doesn't prompt when link state is lost