Index: src/views/pages/authorize-interaction.ejs
===================================================================
--- src/views/pages/authorize-interaction.ejs	(revision 3d7312ab39fe3619ae0a9b953d94789dded655a0)
+++ src/views/pages/authorize-interaction.ejs	(revision 3d7312ab39fe3619ae0a9b953d94789dded655a0)
@@ -0,0 +1,48 @@
+<div class="auth-interact">
+  <h1 class="auth-interact-title"><%= t('fedi.remote_title') %></h1>
+
+  <% if (!target) { %>
+    <p class="auth-interact-note"><%= t('fedi.remote_notfound') %></p>
+    <form method="get" action="/authorize_interaction" class="auth-interact-form">
+      <input type="url" name="uri" placeholder="https://…/een-post" value="<%= uri || '' %>" required>
+      <button type="submit" class="btn btn-primary"><%= t('fedi.remote_load') %></button>
+    </form>
+  <% } else { %>
+    <p class="auth-interact-meta">
+      <%= t('fedi.remote_replying_to') %>
+      <a href="<%= target.actor_url %>" rel="nofollow noopener" target="_blank"><strong><%= target.actor_name %></strong></a>
+      <span class="fedi-handle"><%= target.actor_handle %></span>
+    </p>
+    <% if (target.preview) { %>
+      <blockquote class="auth-interact-preview"><%= target.preview %></blockquote>
+    <% } %>
+    <form method="post" action="/authorize_interaction" class="auth-interact-form">
+      <input type="hidden" name="uri" value="<%= uri %>">
+      <textarea name="text" rows="4" required placeholder="<%= t('fedi.reply_ph') %>"></textarea>
+      <div class="auth-interact-actions">
+        <button type="submit" class="btn btn-primary"><%= t('fedi.send') %></button>
+        <a href="<%= uri %>" class="btn"><%= t('comments.cancel') %></a>
+      </div>
+    </form>
+    <p class="auth-interact-note"><%= t('fedi.remote_as', { site: siteTitle }) %></p>
+  <% } %>
+</div>
+
+<style>
+  .auth-interact { max-width: 580px; margin: 2rem auto; padding: 0 1rem; }
+  .auth-interact-title { margin: 0 0 1rem; }
+  .auth-interact-meta { color: var(--ink-soft, #888); margin: 0 0 .75rem; }
+  .auth-interact-preview {
+    margin: 0 0 1rem; padding: .75rem 1rem; border-left: 3px solid var(--accent, #888);
+    background: color-mix(in srgb, var(--ink, #000) 4%, transparent); border-radius: 0 12px 12px 0;
+    color: var(--ink, inherit);
+  }
+  .auth-interact-form { display: flex; flex-direction: column; gap: .75rem; }
+  .auth-interact-form textarea, .auth-interact-form input[type=url] {
+    width: 100%; box-sizing: border-box; padding: .6rem .8rem; font: inherit; resize: vertical;
+    border-radius: 12px; border: 1px solid color-mix(in srgb, var(--ink, #000) 18%, transparent);
+    background: var(--paper, #fff); color: var(--ink, #000);
+  }
+  .auth-interact-actions { display: flex; gap: .5rem; align-items: center; }
+  .auth-interact-note { color: var(--ink-soft, #999); font-size: .85rem; margin-top: 1rem; }
+</style>
Index: src/views/pages/post.ejs
===================================================================
--- src/views/pages/post.ejs	(revision 82079add2859eb42986c97e651ed5be8d0bec7d1)
+++ src/views/pages/post.ejs	(revision 3d7312ab39fe3619ae0a9b953d94789dded655a0)
@@ -135,4 +135,13 @@
     </section>
   <% } %>
+
+  <!-- Reply via the fediverse (remote interaction: bounces to the visitor's own server) -->
+  <% var _postAbsUrl = (typeof ogOrigin !== 'undefined' && ogOrigin ? ogOrigin : '') + (typeof _base !== 'undefined' && _base ? _base : '') + '/' + post.slug; %>
+  <div class="post-fediverse-cta">
+    <button type="button" class="btn fedi-remote-reply-btn"
+      onclick="(function(){var d=prompt(<%- JSON.stringify(t('fedi.remote_prompt')) %>);if(!d)return;d=d.trim().replace(/^@?[^@\s]*@/,'').replace(/^https?:\/\//i,'').replace(/\/.*$/,'').trim();if(d)location.href='https://'+d+'/authorize_interaction?uri='+encodeURIComponent(<%- JSON.stringify(_postAbsUrl) %>);})()">
+      🐘 <%= t('fedi.remote_reply') %>
+    </button>
+  </div>
 
   <!-- Comments -->
