Media Library v2026.07.24: Store original video files, refresh the PDF viewer, and unify copy URL behavior

This release adds storage of original video files, replaces the PDF preview with a new viewer, and brings consistent behavior to URL copy actions across all asset types.

Original video files are now stored

When you upload a video, the Media Library now keeps the raw original file alongside the streaming renditions. That means videos work like images and files: you can download the original from the asset menu, and copy a CDN URL that serves the file directly. Videos uploaded before this change don't have a stored original, so those options are disabled for them with a tooltip explaining why.

A new PDF viewer

PDF previews have been completely rebuilt using the same design system as the rest of the Media Library, rather than a themed third-party component, so the toolbar, search, and page list all look and behave like the app around them. Performance is improved too, the viewer ships a fraction of the JavaScript and pages render in a background thread so the app stays responsive with large documents. Everything you could do before is still here: search within the document, page thumbnails, zoom presets, fullscreen, text selection, and document info.

Consistent disabled states for copy URL actions

The context menu now handles unavailable URL options consistently. When you can't copy a URL, whether because an asset is private or a video has no original file, the menu item is disabled with a tooltip explaining why. Previously, some options would fail silently with an error toast, others showed tooltips, and some were hidden entirely. The behavior now matches how downloads already work: clear feedback about what's available and why.

🐛 Notable bugfixes

Fixed arrow key navigation in the asset grid: pressing the down arrow could land diagonally instead of directly below at certain zoom levels, and in Safari arrow keys sometimes didn't respond after clicking an asset. Navigation now stays in-column and works whether you click or tab to focus.

Fixed video thumbnails shrinking by 1 pixel each time the preview area re-rendered, which could cause them to gradually disappear over time.

Fixed dimension and file size filters producing impossible queries when using "is not" or "are not" operators; these filters now correctly exclude assets matching the specified range.