feat: post to Bluesky cross-posting for galleries and stories
Add "Post to Bluesky" toggle to gallery and story creation forms.
After creating a gallery/story, optionally cross-posts to Bluesky
with location, description (truncated to fit 300 grapheme / 3000 byte
limits), images, and #grainsocial hashtag. Parses facets for URLs,
@mentions (resolved via public Bluesky API), and hashtags. Gallery
creation is never blocked by a cross-post failure.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>