b6f90bac

By: Michael Lynch <git@mtlynch.io>

Replace filename/thumbnail_filename with file_id + original_filename

- Add FileID type and OriginalFilename to MediaItem; drop Filename and
  ThumbnailFilename
- Add MediaTypePhotoAnimated; GIF photo imports become photo-animated entries
- Update migration SQL: file_id + original_filename columns, add
  photo-animated to CHECK constraint
- Update store queries and InsertEntry signature accordingly
- Import CLI now writes {fileID}-o.ext originals plus multi-size variants:
  850px (aspect-ratio resize) and 250px/150px (square crops) for photos;
  thumb-250px/thumb-150px for videos
- Browse handler builds ThumbnailSrc + ThumbnailSrcset from FileID
- Media detail handler builds MediaSrc (850px), OriginalPath, MediaPath
  from FileID + OriginalExt()
- Templates: add srcset/sizes to browse thumbnails; wrap photo img in
  link to original on media detail page
- Add tests for ResizedWidths() and OriginalExt()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
configuredevShellbackendbackend-devcheck-bashcheck-frontendcheck-go-formattingcheck-go-test-packagescheck-trailing-newlinecheck-trailing-whitespacediagramdocker-imagee2e-testsgo-testsimport-from-tinybeanslint-sqllittle-momentslittle-moments-devx86_64-linux