Index: src/views/pages/admin-circle.ejs
===================================================================
--- src/views/pages/admin-circle.ejs	(revision 46f3dd6f843397dd4da3f37539315aedb56c20f7)
+++ 	(revision )
@@ -1,133 +1,0 @@
-<div class="container admin-page">
-  <h1><%= t('acir.title') %></h1>
-  <p><a href="/admin/settings" class="btn">&larr; <%= t('acir.back_settings') %></a></p>
-
-  <% if (success) { %><div class="alert alert-success"><%= success %></div><% } %>
-  <% if (error) { %><div class="alert alert-error"><%= error %></div><% } %>
-
-  <% if (tenancy !== 'circle') { %>
-    <section class="set-card">
-      <p class="set-help"><%= t('acir.mode_off_1') %> <strong><%= t('acir.circles') %></strong>. <%= t('acir.mode_off_2') %>
-        <a href="/admin/settings"><%= t('acir.settings') %></a> <%= t('acir.mode_off_3') %> <code>/cirkel</code>.
-        <%= t('acir.mode_off_4') %></p>
-    </section>
-  <% } %>
-
-  <section class="set-card" style="margin-top:1rem">
-    <h2><%= t('acir.visibility_title') %></h2>
-    <p class="set-help"><%= t('acir.visibility_help_1') %> <strong><%= t('acir.all_public') %></strong> <%= t('acir.visibility_help_2') %>
-      (<code>/.klonkt/outbox.json</code>). <%= t('acir.visibility_help_3') %></p>
-    <form method="post" action="/admin/circle/allow" class="set-form">
-      <label class="set-opt" style="align-items:center">
-        <input type="checkbox" name="allow_circle" value="on" <%= allowCircle ? 'checked' : '' %>>
-        <span><strong><%= t('acir.show_in_circles') %></strong></span>
-      </label>
-      <button type="submit" class="btn btn-primary"><%= t('acir.save') %></button>
-    </form>
-  </section>
-
-  <section class="set-card" style="margin-top:1rem">
-    <h2><%= t('acir.add_title') %></h2>
-    <p class="set-help"><%= t('acir.add_help') %></p>
-    <form method="post" action="/admin/circle/add" class="set-form">
-      <label class="set-field">
-        <span><%= t('acir.url') %></span>
-        <input type="text" name="remote_url" inputmode="url" autocapitalize="off" autocorrect="off" spellcheck="false" placeholder="artiest.klonkt.com" required>
-      </label>
-      <p class="set-help" style="margin:.2rem 0 .6rem"><%= t('acir.name_auto') %></p>
-      <button type="submit" class="btn btn-primary"><%= t('acir.add') %></button>
-    </form>
-  </section>
-
-  <section class="set-card" style="margin-top:1rem">
-    <h2><%= t('acir.in_circle', { n: links.length }) %></h2>
-    <% if (!links.length) { %>
-      <p class="set-help"><%= t('acir.no_sources') %></p>
-    <% } else { %>
-      <form method="post" action="/admin/circle/sync-all" style="margin:0 0 .9rem">
-        <button type="submit" class="btn">&#8635; <%= t('acir.sync_all') %></button>
-      </form>
-      <%
-        var _cActive = t('acir.st_active');
-        var _cPosts = t('acir.posts');
-        var _cLast = t('acir.last');
-        var _cMismatch = t('acir.st_mismatch');
-        var _cMismatchReason = t('acir.mismatch_reason');
-        var _cError = t('acir.st_error');
-        var _cPaused = t('acir.st_paused');
-        var _cRefresh = t('acir.refresh');
-        var _cRemove = t('acir.remove');
-        var _cRemoveConfirm = t('acir.remove_confirm');
-      %>
-      <ul class="circ-list">
-        <% links.forEach(function(l){ %>
-          <li class="circ-item">
-            <div class="circ-main">
-              <strong><%= l.label || l.remote_url %></strong>
-              <small><%= l.remote_url %></small>
-              <div class="circ-status">
-                <% if (l.status === 'active') { %>
-                  <span class="circ-badge ok">&#10003; <%= _cActive %></span>
-                  <span class="circ-meta"><%= counts[l.id] || 0 %> <%= _cPosts %><% if (l.last_synced) { %> &middot; <%= _cLast %>: <%= l.last_synced %><% } %></span>
-                <% } else if (l.status === 'outdated') { %>
-                  <span class="circ-badge err">&#8635; <%= _cMismatch %></span>
-                  <div class="circ-reason"><%= l.last_error || _cMismatchReason %></div>
-                <% } else if (l.status === 'error') { %>
-                  <span class="circ-badge err">&#9888; <%= _cError %></span>
-                  <% if (l.last_error) { %><div class="circ-reason"><%= l.last_error %></div><% } %>
-                <% } else if (l.status === 'paused') { %>
-                  <span class="circ-badge">&#9208; <%= _cPaused %></span>
-                <% } else { %>
-                  <%# Unknown status: show it raw + any reason instead of silently showing "paused". %>
-                  <span class="circ-badge"><%= l.status %></span>
-                  <% if (l.last_error) { %><div class="circ-reason"><%= l.last_error %></div><% } %>
-                <% } %>
-              </div>
-            </div>
-            <div class="circ-actions">
-              <form method="post" action="/admin/circle/<%= l.id %>/sync" style="display:inline">
-                <button type="submit" class="btn"><%= _cRefresh %></button>
-              </form>
-              <form method="post" action="/admin/circle/<%= l.id %>/remove" style="display:inline"
-                    onsubmit="return confirm('<%= _cRemoveConfirm %>')">
-                <button type="submit" class="btn btn-danger"><%= _cRemove %></button>
-              </form>
-            </div>
-          </li>
-        <% }); %>
-      </ul>
-    <% } %>
-  </section>
-</div>
-
-<style>
-.admin-page { max-width: 760px; margin: 3rem auto; padding: 0 1rem; }
-.admin-page h1 { font-family: var(--font-display, serif); font-size: 2rem; margin: 0 0 .25rem; }
-.set-card { background: var(--paper-2); border: 1px solid var(--rule); border-radius: 12px; padding: 1.25rem; }
-.set-card h2 { font-family: var(--font-display, serif); font-size: 1.25rem; margin: 0 0 .5rem; }
-.set-help { color: var(--ink-muted); font-size: .9rem; margin: 0 0 1rem; }
-.set-form { display: flex; flex-direction: column; gap: 1rem; }
-.set-opt { display: flex; gap: .75rem; align-items: flex-start; padding: .85rem 1rem; border: 1px solid var(--rule); border-radius: 8px; background: var(--paper); }
-.set-field { display: flex; flex-direction: column; gap: .3rem; }
-.set-field > span { font-size: .8rem; font-weight: 600; color: var(--ink-soft, var(--ink-muted)); }
-.set-field input { width: 100%; box-sizing: border-box; padding: .55rem .7rem; border: 1px solid var(--rule); border-radius: 6px; background: var(--paper); color: var(--ink); font: inherit; }
-.set-form .btn, .circ-actions .btn { align-self: flex-start; }
-.circ-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .6rem; }
-.circ-item { display: flex; justify-content: space-between; gap: 1rem; align-items: center; padding: .75rem 1rem; border: 1px solid var(--rule); border-radius: 8px; background: var(--paper); flex-wrap: wrap; }
-.circ-main { display: flex; flex-direction: column; gap: .15rem; min-width: 0; }
-.circ-main small { color: var(--ink-muted); font-size: .78rem; word-break: break-all; }
-.circ-actions { display: flex; gap: .4rem; flex-shrink: 0; }
-.circ-badge { font-size: .72rem; font-weight: 700; padding: .1rem .45rem; border-radius: 20px; background: var(--rule); white-space: nowrap; }
-.circ-badge.ok { background: #d1fae5; color: #065f46; }
-.circ-badge.err { background: #fee2e2; color: #991b1b; }
-.circ-status { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .5rem; margin-top: .25rem; font-size: .78rem; color: var(--ink-muted); }
-.circ-meta { color: var(--ink-muted); }
-/* Reason on its own line below the badge; normal word breaking (no break-all
-   that cuts whole sentences mid-word — that is applied to the URL small, not here). */
-.circ-reason { flex-basis: 100%; line-height: 1.4; color: var(--ink-muted); word-break: normal; overflow-wrap: anywhere; }
-.btn-danger { background: #dc2626; color: #fff; border-color: #dc2626; }
-.btn-danger:hover { background: #b91c1c; border-color: #b91c1c; color: #fff; }
-.alert { padding: .75rem 1rem; border-radius: 6px; margin-bottom: 1rem; }
-.alert-success { background: #d1fae5; color: #065f46; border: 1px solid #a7f3d0; }
-.alert-error { background: #fee2e2; color: #991b1b; border: 1px solid #fca5a5; }
-</style>
Index: src/views/pages/admin-settings.ejs
===================================================================
--- src/views/pages/admin-settings.ejs	(revision 46f3dd6f843397dd4da3f37539315aedb56c20f7)
+++ src/views/pages/admin-settings.ejs	(revision d71ed0317f432dcfec0a7c029d67f8d6f429ff9f)
@@ -5,29 +5,4 @@
   <% if (success) { %><div class="alert alert-success"><%= success %></div><% } %>
   <% if (typeof error !== 'undefined' && error) { %><div class="alert alert-error"><%= error %></div><% } %>
-
-  <section class="set-card">
-    <h2><%= t('aset.mode') %></h2>
-    <p class="set-help">
-      <%= t('aset.mode_help') %>
-    </p>
-
-    <form method="post" action="/admin/settings" class="set-form">
-      <label class="set-opt">
-        <input type="radio" name="tenancy" value="solo" <%= tenancy === 'solo' ? 'checked' : '' %>>
-        <span>
-          <strong><%= t('aset.solo') %></strong> — <%= t('aset.solo_title') %>
-          <small><%= t('aset.solo_desc') %></small>
-        </span>
-      </label>
-      <label class="set-opt">
-        <input type="radio" name="tenancy" value="circle" <%= tenancy === 'circle' ? 'checked' : '' %>>
-        <span>
-          <strong><%= t('aset.circle') %></strong> &mdash; <%= t('aset.circle_title') %>
-          <small><%= t('aset.circle_desc') %></small>
-        </span>
-      </label>
-      <button type="submit" class="btn btn-primary"><%= t('aset.save') %></button>
-    </form>
-  </section>
 
   <%# ── Default language for visitors ── %>
@@ -70,15 +45,4 @@
 
   <%# Mode-specific config — Circle settings below the mode card. (Hub removed.) %>
-  <% if (tenancy === 'circle') { %>
-  <section class="set-card set-card--mode" style="margin-top:1rem">
-    <h2>🔗 <%= t('aset.your_circle') %></h2>
-    <p class="set-help">
-      <%= t('aset.your_circle_help') %>
-    </p>
-    <div class="set-actions">
-      <a href="/admin/circle" class="btn btn-primary"><%= t('aset.manage_circle') %> &rarr;</a>
-    </div>
-  </section>
-  <% } %>
 
   <%# Premium (Patreon) — only visible when the self-hoster enables the premium layer
Index: src/views/pages/admin.ejs
===================================================================
--- src/views/pages/admin.ejs	(revision 46f3dd6f843397dd4da3f37539315aedb56c20f7)
+++ src/views/pages/admin.ejs	(revision d71ed0317f432dcfec0a7c029d67f8d6f429ff9f)
@@ -43,7 +43,4 @@
         <a href="/admin/sites/new" class="btn"><%= t('admin.b_makesite') %></a>
       <% } %>
-      <% if (tenancy === 'circle') { %>
-        <a href="/admin/circle" class="btn"><%= t('admin.b_circle') %></a>
-      <% } %>
       <% if (primarySite) { %><a href="/admin/seo" class="btn"><%= t('admin.b_seo') %></a><% } %>
       <a href="/admin/settings" class="btn"><%= t('admin.b_settings') %></a>
Index: src/views/pages/changelog.ejs
===================================================================
--- src/views/pages/changelog.ejs	(revision 46f3dd6f843397dd4da3f37539315aedb56c20f7)
+++ src/views/pages/changelog.ejs	(revision d71ed0317f432dcfec0a7c029d67f8d6f429ff9f)
@@ -4,6 +4,4 @@
   <p class="cl-meta">
     <%= t('chlog.app_version') %> <strong>v<%= appVersion %></strong>
-    <span class="cl-sep">·</span>
-    <%= t('chlog.fed_proto') %> <strong><%= proto %></strong>
     <% if (typeof user !== 'undefined' && user && user.role === 'god') { %>
       <span class="cl-sep">·</span> <a href="/admin/updates"><%= t('chlog.manage_updates') %></a>
Index: src/views/pages/circle-post.ejs
===================================================================
--- src/views/pages/circle-post.ejs	(revision 46f3dd6f843397dd4da3f37539315aedb56c20f7)
+++ 	(revision )
@@ -1,61 +1,0 @@
-<article class="container cirkel-post">
-  <p class="cirkel-post-back">
-    <a href="/cirkel" hx-get="/cirkel?partial=1" hx-target="#pcms-main" hx-swap="innerHTML"
-       hx-push-url="/cirkel" hx-indicator="#pcms-loading">&larr; <%= t('cpost.back') %></a>
-  </p>
-
-  <header class="cirkel-post-head">
-    <div class="cirkel-post-src">
-      <% if (post.sourceAvatar) { %><img class="cirkel-post-avatar" src="<%= post.sourceAvatar %>" alt=""><% } %>
-      <span><%= t('cpost.via') %>
-        <% if (post.sourceUrl) { %><a href="<%= post.sourceUrl %>" target="_blank" rel="noopener"><%= post.sourceName %></a>
-        <% } else { %><%= post.sourceName %><% } %>
-      </span>
-      <% if (post.published) { %><span class="cirkel-post-date">&middot; <%= post.published.slice(0, 10) %></span><% } %>
-    </div>
-    <h1 class="cirkel-post-title"><%= post.title %></h1>
-  </header>
-
-  <% if (post.image) { %>
-    <img class="cirkel-post-cover" src="<%= post.image %>" alt="" loading="lazy">
-  <% } %>
-
-  <div class="cirkel-post-body"><%= post.body %></div>
-
-  <% if (post.tags && post.tags.length) { %>
-    <div class="cirkel-post-tags">
-      <% post.tags.forEach(function(t){ %>
-        <% if (post.sourceTagBase) { %>
-          <a class="cirkel-tag" href="<%= post.sourceTagBase %>/tag/<%= encodeURIComponent(t) %>" target="_blank" rel="noopener">#<%= t %></a>
-        <% } else { %>
-          <span class="cirkel-tag">#<%= t %></span>
-        <% } %>
-      <% }); %>
-    </div>
-  <% } %>
-
-  <% if (post.originalUrl) { %>
-    <p class="cirkel-post-readmore">
-      <a href="<%= post.originalUrl %>" target="_blank" rel="noopener"><%= t('cpost.read_more', { source: post.sourceName }) %> &rarr;</a>
-    </p>
-  <% } %>
-</article>
-
-<style>
-.cirkel-post { max-width: 720px; margin: 2rem auto; }
-.cirkel-post-back a { color: var(--ink-muted); text-decoration: none; font-size: .85rem; }
-.cirkel-post-back a:hover { color: var(--accent); }
-.cirkel-post-head { margin: 1rem 0 1.25rem; }
-.cirkel-post-src { display: flex; align-items: center; gap: .45rem; font-size: .85rem; color: var(--ink-muted); margin-bottom: .5rem; }
-.cirkel-post-src a { color: var(--ink-muted); }
-.cirkel-post-src a:hover { color: var(--accent); }
-.cirkel-post-avatar { width: 24px; height: 24px; border-radius: 50%; object-fit: cover; }
-.cirkel-post-title { font-family: var(--font-display, serif); font-size: 1.9rem; line-height: 1.15; margin: 0; }
-.cirkel-post-cover { width: 100%; border-radius: var(--radius); margin: 0 0 1.5rem; display: block; }
-.cirkel-post-body { font-size: 1.05rem; line-height: 1.7; white-space: pre-wrap; color: var(--ink); }
-.cirkel-post-tags { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: 1.25rem; }
-.cirkel-tag { font-size: .8rem; color: var(--ink-muted); background: var(--paper-2); border: 1px solid var(--rule); border-radius: 999px; padding: .15rem .6rem; text-decoration: none; }
-.cirkel-tag:hover { border-color: var(--accent); color: var(--accent); }
-.cirkel-post-readmore { margin-top: 2rem; padding-top: 1.25rem; border-top: 1px solid var(--rule); }
-.cirkel-post-readmore a { color: var(--accent); text-decoration: none; font-weight: 600; }
-</style>
