Index: src/views/pages/post-edit.ejs
===================================================================
--- src/views/pages/post-edit.ejs	(revision 28bf7f0bdd406f40398565567e14a085ed778279)
+++ src/views/pages/post-edit.ejs	(revision b5a09ce2f2e9daf88c11443526cecc77c3c84678)
@@ -106,4 +106,6 @@
                    placeholder="<%= t('pedit.cover_url_placeholder') %>">
           </label>
+          <%# Muted loop MP4 for an animated cover (auto-made from an animated WebP). Hidden — set by the uploader. %>
+          <input type="hidden" name="cover_video_url" id="cover-video-field" value="<%= post.cover_video_url || '' %>">
           <div class="pe-cover-upload">
             <button type="button" class="pe-btn pe-btn-secondary" id="cover-upload-trigger">
@@ -1170,4 +1172,5 @@
   const coverTrigger = document.getElementById('cover-upload-trigger');
   const coverUrl     = document.getElementById('cover-url-field');
+  const coverVideo   = document.getElementById('cover-video-field');
   const coverStatus  = document.getElementById('cover-upload-status');
   const coverWrap    = document.getElementById('cover-preview-wrap');
@@ -1329,6 +1332,7 @@
         const j = await uploadImage(edited);
         coverUrl.value = j.url;
+        if (coverVideo) coverVideo.value = j.video || ''; // muted loop MP4 for an animated cover
         showCoverPreview(j.url);
-        coverStatus.textContent = '<%= t('pedit.js_uploaded') %> ✓';
+        coverStatus.textContent = (j.video ? '🎬 ' : '') + '<%= t('pedit.js_uploaded') %> ✓';
         setTimeout(() => { coverStatus.textContent = ''; }, 2000);
       } catch (e) {
