9e6c2c7f66
Image tab: decode off the UI thread, zoom (wheel, buttons), pan, fit, rotate, neighbours, info, transparency checkerboard only when needed. Video tab reuses the ffmpeg embed player, PDF tab renders pages through Session::pdf_preview with previous/next and zoom. Copy tables moved into text/views/files to keep the folder under 12 loose files. Built by MiniMax M3.1 Flash (OpenCode Zen free route); verified from a clean checkout of the staged files: 901 lib tests, image_view, media_view and file_viewers_basic pass, xtask i18n clean. No elapsed time or page total yet; annotations not wired. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>