Index: src/views/pages/authorize-interaction.ejs
===================================================================
--- src/views/pages/authorize-interaction.ejs	(revision f7d142fd84f4cfd1fcf99b1ca2ac8620ef8159f2)
+++ src/views/pages/authorize-interaction.ejs	(revision 667fb411773ddfae0500a3a6b0e9807d8d999e43)
@@ -93,4 +93,11 @@
       <a class="btn" href="/"><%= t('fedi.remote_back') %></a>
     </p>
+  <% } else if (typeof voted !== 'undefined' && voted) { %>
+    <h1 class="auth-interact-title">📊 <%= t('poll.voted_title') %></h1>
+    <p class="auth-interact-note"><%= t('poll.voted_done') %></p>
+    <p class="auth-interact-actions">
+      <% if (uri) { %><a class="btn btn-primary" href="<%= uri %>" rel="nofollow noopener"><%= t('fedi.remote_view_original') %></a><% } %>
+      <a class="btn" href="/"><%= t('fedi.remote_back') %></a>
+    </p>
   <% } else if (typeof followTarget !== 'undefined' && followTarget) { %>
   <h1 class="auth-interact-title"><%= t('fedi.follow_heading') %></h1>
@@ -135,4 +142,25 @@
         <span><%= t('fedi.remote_view_original') %></span>
       </a>
+    <% } %>
+    <% if (target.poll) { var _pl = target.poll; var _tot = _pl.options.reduce(function(s,o){return s+(o.count||0);},0); %>
+      <% if (!_pl.closed) { %>
+        <form method="post" action="/authorize_interaction/vote" class="auth-poll">
+          <input type="hidden" name="uri" value="<%= uri %>">
+          <% _pl.options.forEach(function(o){ %>
+            <label class="auth-poll-choice"><input type="<%= _pl.multiple ? 'checkbox' : 'radio' %>" name="choice" value="<%= o.name %>"><span><%= o.name %></span></label>
+          <% }); %>
+          <div class="auth-interact-actions">
+            <button type="submit" class="btn btn-primary"><%= t('poll.vote') %></button>
+          </div>
+          <p class="auth-poll-foot"><% if (_pl.multiple) { %><%= t('poll.multiple') %> · <% } %><%= (_pl.voters!=null?_pl.voters:_tot) %> <%= t('poll.votes') %></p>
+        </form>
+      <% } else { %>
+        <div class="auth-poll">
+          <% _pl.options.forEach(function(o){ var _pct = _tot ? Math.round((o.count||0)*100/_tot) : 0; %>
+            <div class="auth-poll-res"><span class="auth-poll-fill" style="width:<%= _pct %>%"></span><span class="auth-poll-name"><%= o.name %></span><span class="auth-poll-pct"><%= _pct %>%</span></div>
+          <% }); %>
+          <p class="auth-poll-foot"><%= (_pl.voters!=null?_pl.voters:_tot) %> <%= t('poll.votes') %> · <%= t('poll.closed') %></p>
+        </div>
+      <% } %>
     <% } %>
     <% var _liked = (typeof reacted !== 'undefined' && reacted.liked); var _boosted = (typeof reacted !== 'undefined' && reacted.boosted); %>
@@ -251,4 +279,16 @@
   .fedi-edit-save { padding: .4rem 1rem; border: 0; border-radius: 999px; background: var(--accent); color: var(--paper, #fff);
     font: inherit; font-weight: 600; font-size: .82rem; cursor: pointer; }
+  /* Poll ballot / results on the interact page */
+  .auth-poll { display: flex; flex-direction: column; gap: 8px; margin: 0 0 1rem; }
+  .auth-poll-choice { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 10px; cursor: pointer;
+    border: 1px solid color-mix(in srgb, var(--ink, #000) 14%, transparent); }
+  .auth-poll-choice:hover { border-color: var(--accent); }
+  .auth-poll-choice input { accent-color: var(--accent); }
+  .auth-poll-res { position: relative; padding: 9px 12px; border-radius: 10px; overflow: hidden; display: flex; align-items: center; gap: 8px;
+    background: color-mix(in srgb, var(--ink, #000) 6%, transparent); }
+  .auth-poll-fill { position: absolute; inset: 0 auto 0 0; background: color-mix(in srgb, var(--accent) 22%, transparent); z-index: 0; }
+  .auth-poll-name { position: relative; z-index: 1; flex: 1; font-size: .95rem; }
+  .auth-poll-pct { position: relative; z-index: 1; font-variant-numeric: tabular-nums; font-weight: 500; }
+  .auth-poll-foot { font-size: .82rem; color: var(--ink-soft, #888); margin: .1rem 0 0; }
 </style>
 
