diff --git a/apps/web/app/space/[id]/(space)/layout.tsx b/apps/web/app/space/[id]/(space)/layout.tsx
index 7367be1d15..4f1254f831 100644
--- a/apps/web/app/space/[id]/(space)/layout.tsx
+++ b/apps/web/app/space/[id]/(space)/layout.tsx
@@ -37,6 +37,7 @@ import { SpaceMembers } from '~/partials/space-page/space-members';
import { SpacePageMetadataHeader } from '~/partials/space-page/space-metadata-header';
import { SpaceTabs } from '~/partials/space-page/space-tabs';
import type { PersonRecordCounts } from '~/partials/space-page/space-tabs';
+import { SPACE_TABS_ANCHOR } from '~/partials/space-page/space-tabs-anchor';
import { cachedFetchEntitiesBatch, cachedFetchEntityPage } from '../../(entity)/[id]/[entityId]/cached-fetch-entity';
import { cachedFetchSpace } from '../cached-fetch-space';
@@ -209,17 +210,28 @@ export default async function Layout(props0: LayoutProps) {
>
) : null}
-
-
-
+ {/*
+ * The tab bar is a link target, so a link can send the reader to the tabs rather than
+ * to the top of the page — see `withSpaceTabsAnchor`.
+ *
+ * The margin clears the navbar, which is `sticky top-0 h-11` and would otherwise cover
+ * the row the link exists to show — the same 44px the hub panel and the side rail sit
+ * below as `top-11`. `scroll-mt-14` is that plus 12px, so the tabs land under the
+ * navbar rather than welded to it.
+ */}
+
+
+
+
+
diff --git a/apps/web/core/debates/browse/debate-feed-player.tsx b/apps/web/core/debates/browse/debate-feed-player.tsx
index 9b0865098f..f177781c45 100644
--- a/apps/web/core/debates/browse/debate-feed-player.tsx
+++ b/apps/web/core/debates/browse/debate-feed-player.tsx
@@ -392,35 +392,49 @@ function DebaterVideo({
)}
- {/* Debater identity: avatar + name + position, opens their personal space in the side panel. */}
-