- expiry editor commits on blur/Enter with explicit clear button — no more
per-keystroke PATCHes transiently expiring live links
- shift-range walks the filtered view, anchors reset on clear, updaters
kept pure (StrictMode-safe)
- bulk delete surfaces errors, 404s on zero deletions, and shares one
delete+cleanup path with single and album delete (s3::photo_prefix is
the only prefix source)
- expiry end-of-day convention extracted; share rows update from the
PATCH response instead of reloading the list
- Gallery container always renders, restoring the simple observer effect