From e8799da0e9afc0b0138bc16cdd4ce17f27c7a5dc Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Mon, 24 Aug 2026 13:57:41 +0300 Subject: [PATCH 1/7] fix(feed): give every feed layout a horizontal gutter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Feed cards ran flush into the sidebar on one side and the window edge on the other: no gap at all between the grid and the frame. The page container the feed sits in forces `!px-0` (FeedPageLayoutList), so the className passed to FeedContainer is the only horizontal inset the feed gets — and it was scoped to `laptop:` and to the list layout. Every other case (any width below laptop, and the grid layout at any width) therefore had none. Every non-finder feed now gets the same `px-4 tablet:px-6`. Laptop keeps the 24px it already had, so the only change is adding a gutter where there was none. Search results stay flush, as before. Co-Authored-By: Claude Opus 5 --- packages/shared/src/components/MainFeedLayout.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/shared/src/components/MainFeedLayout.tsx b/packages/shared/src/components/MainFeedLayout.tsx index 6b863d8fc0..aa7e64633c 100644 --- a/packages/shared/src/components/MainFeedLayout.tsx +++ b/packages/shared/src/components/MainFeedLayout.tsx @@ -835,9 +835,14 @@ export default function MainFeedLayout({ ) : undefined } - className={classNames( - shouldUseListFeedLayout && !isFinder && 'laptop:px-6', - )} + // The page container this sits in forces `!px-0` + // (FeedPageLayoutList), so this is the only horizontal + // inset the feed gets. Scoping it to `laptop:` and to the + // list layout left every other case flush against the + // frame — cards touched the sidebar on one side and the + // window edge on the other. Give every feed the same + // gutter; laptop keeps the 24px it already had. + className={classNames(!isFinder && 'px-4 tablet:px-6')} /> ) )} From 844270f30520b6967cba447ef9e95a852506246a Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Mon, 24 Aug 2026 14:08:29 +0300 Subject: [PATCH 2/7] fix(feed): align the breadcrumbs and tab strip with the cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The gutter added to the feed left the chrome above it behind: cards sat 24px in while the Explore breadcrumbs and the sort tabs stayed flush against the sidebar, so the column had two different left edges. Both come from FeedExploreHeader, whose `className.container` wraps the breadcrumbs and the tab strip together, so one prop settles both — on the laptop header and on the mobile sticky one. The gutter is now a single `feedGutter` constant used by all three call sites, because three copies of the same padding string is how they drift apart again. Co-Authored-By: Claude Opus 5 --- .../shared/src/components/MainFeedLayout.tsx | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/shared/src/components/MainFeedLayout.tsx b/packages/shared/src/components/MainFeedLayout.tsx index aa7e64633c..a98d87e34b 100644 --- a/packages/shared/src/components/MainFeedLayout.tsx +++ b/packages/shared/src/components/MainFeedLayout.tsx @@ -223,6 +223,14 @@ const feedWithDateRange = [ ExploreTabs.BestDiscussions, ]; +/** + * The feed's horizontal gutter. The page container forces `!px-0` + * (FeedPageLayoutList), so this is the only inset the feed surface + * gets — and the breadcrumbs, the tab strip and the cards all have to + * use the same one or they line up on different left edges. + */ +const feedGutter = 'px-4 tablet:px-6'; + export default function MainFeedLayout({ feedName: feedNameProp, searchQuery, @@ -694,7 +702,7 @@ export default function MainFeedLayout({ ); } @@ -705,8 +713,10 @@ export default function MainFeedLayout({ setTab={onTabChange} showBreadcrumbs={false} className={{ - container: + container: classNames( 'sticky top-[4.5rem] z-header w-full border-b border-border-subtlest-tertiary bg-background-default', + feedGutter, + ), tabBarHeader: 'no-scrollbar overflow-x-auto', tabBarContainer: 'min-w-0 flex-1', }} @@ -835,14 +845,7 @@ export default function MainFeedLayout({ ) : undefined } - // The page container this sits in forces `!px-0` - // (FeedPageLayoutList), so this is the only horizontal - // inset the feed gets. Scoping it to `laptop:` and to the - // list layout left every other case flush against the - // frame — cards touched the sidebar on one side and the - // window edge on the other. Give every feed the same - // gutter; laptop keeps the 24px it already had. - className={classNames(!isFinder && 'px-4 tablet:px-6')} + className={classNames(!isFinder && feedGutter)} /> ) )} From 662ad31f0ab7c4da81942e5d4b308ac34c9ab24d Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Mon, 24 Aug 2026 14:15:18 +0300 Subject: [PATCH 3/7] fix(feed): give the feed header room above and tighten it below MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The breadcrumbs started flush against the site header — 0px above them — and then sat 16px clear of the tab strip, so the two read as one loose block instead of a heading with its tabs under it. 16px above the breadcrumbs, 8px between them and the tabs. The 16px from the tabs down to the cards is unchanged. Co-Authored-By: Claude Opus 5 --- packages/shared/src/components/MainFeedLayout.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/shared/src/components/MainFeedLayout.tsx b/packages/shared/src/components/MainFeedLayout.tsx index a98d87e34b..b5712c6666 100644 --- a/packages/shared/src/components/MainFeedLayout.tsx +++ b/packages/shared/src/components/MainFeedLayout.tsx @@ -702,7 +702,16 @@ export default function MainFeedLayout({ ); } From 3f584faf9f9981af21b21c553401a4757d506ec4 Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Mon, 24 Aug 2026 14:21:13 +0300 Subject: [PATCH 4/7] fix(feed): one source for the feed's horizontal inset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous commits added a gutter on FeedContainer while FeedPage was already applying `laptop:p-10` in the legacy layout. Both were in the same ancestry, so they stacked — and because `isV2` resolves after mount, which of them applied changed as the flag settled. The feed visibly jumped between a 64px inset and a 24px one depending on whether you loaded the page, refreshed it, or navigated to it. FeedPage now sets the inset for both variants and is the only place that does: `feedGutterV2` under v2, the existing `pageMainClassNames` otherwise. v2 previously set nothing at all, which is what left the cards flush against the frame. The breadcrumbs and tab strip sit outside FeedPage, so they take the same value through `useFeedGutter` rather than a hardcoded copy — the value depends on a flag that resolves after mount, so a literal at the call site is wrong by construction. It is in the memo's deps for the same reason: a stale gutter there would reintroduce exactly the mismatch this fixes. FeedContainer goes back to its original className. Co-Authored-By: Claude Opus 5 --- .../shared/src/components/MainFeedLayout.tsx | 20 ++++----- .../src/components/utilities/common.tsx | 42 ++++++++++++++++--- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/packages/shared/src/components/MainFeedLayout.tsx b/packages/shared/src/components/MainFeedLayout.tsx index b5712c6666..44874703c4 100644 --- a/packages/shared/src/components/MainFeedLayout.tsx +++ b/packages/shared/src/components/MainFeedLayout.tsx @@ -17,7 +17,7 @@ import classNames from 'classnames'; import { useRouter } from 'next/router'; import type { FeedProps } from './Feed'; import Feed from './Feed'; -import { FeedPageLayoutMobile } from './utilities/common'; +import { FeedPageLayoutMobile, useFeedGutter } from './utilities/common'; import { ExploreChipsBar } from './feeds/ExploreChipsBar'; import { buildPersonalizedCategories } from './feeds/exploreCategories'; import { useFeeds } from '../hooks/feed/useFeeds'; @@ -223,14 +223,6 @@ const feedWithDateRange = [ ExploreTabs.BestDiscussions, ]; -/** - * The feed's horizontal gutter. The page container forces `!px-0` - * (FeedPageLayoutList), so this is the only inset the feed surface - * gets — and the breadcrumbs, the tab strip and the cards all have to - * use the same one or they line up on different left edges. - */ -const feedGutter = 'px-4 tablet:px-6'; - export default function MainFeedLayout({ feedName: feedNameProp, searchQuery, @@ -696,6 +688,10 @@ export default function MainFeedLayout({ [isExtension, onNavTabClick], ); + // Matches whatever inset FeedPage is applying to the cards, so the + // breadcrumbs and tabs never sit on a different left edge. + const feedGutter = useFeedGutter(); + const FeedExploreComponent = useCallback(() => { if (isLaptop) { return ( @@ -731,7 +727,7 @@ export default function MainFeedLayout({ }} /> ); - }, [isLaptop, onTabChange, tab]); + }, [feedGutter, isLaptop, onTabChange, tab]); // v2 reaches the Explore hub sections (Explore, Tags, Sources, Leaderboard, // Discussions) from the sidebar's Explore panel, so the page header no longer @@ -854,7 +850,9 @@ export default function MainFeedLayout({ ) : undefined } - className={classNames(!isFinder && feedGutter)} + className={classNames( + shouldUseListFeedLayout && !isFinder && 'laptop:px-6', + )} /> ) )} diff --git a/packages/shared/src/components/utilities/common.tsx b/packages/shared/src/components/utilities/common.tsx index c10e822865..7ab1ba4c57 100644 --- a/packages/shared/src/components/utilities/common.tsx +++ b/packages/shared/src/components/utilities/common.tsx @@ -99,11 +99,38 @@ export const BaseFeedPage = classed( styles.feedPage, ); -// v2 (dual-sidebar layout) ships the feed inside the floating-card chrome, -// which provides its own outer inset. The legacy `pageMainClassNames` -// (`laptop:p-10`) adds another 40px on top, which reads as way too much -// side spacing inside the card. Drop that padding under v2; control keeps -// the existing behavior unchanged. +/** + * The feed's horizontal inset, under the v2 (dual-sidebar) layout. + * Smaller than the legacy `laptop:p-10`, which reads as far too much + * side spacing inside v2's floating-card chrome. + */ +export const feedGutterV2 = 'px-4 tablet:px-6'; + +/** The legacy inset, horizontal only — `pageMainClassNames` without its vertical padding. */ +export const feedGutterLegacy = 'tablet:px-4 laptop:px-10'; + +/** + * The feed's current horizontal inset. Chrome that sits outside + * `FeedPage` — the breadcrumbs and tab strip — has to line up with the + * cards, and the value depends on a flag that resolves after mount, so + * it cannot be hardcoded at the call site. + */ +export const useFeedGutter = (): string => { + const { isV2 } = useLayoutVariant(); + + return isV2 ? feedGutterV2 : feedGutterLegacy; +}; + +// v2 used to drop `pageMainClassNames` and put nothing in its place, +// on the assumption that the card chrome always supplies the inset. +// On the feed surfaces it does not, so the cards ran flush into the +// sidebar on one side and the window edge on the other. +// +// Both variants now set an inset here, and only here. That matters +// beyond the missing gutter: `isV2` resolves asynchronously, so any +// second source of horizontal padding elsewhere in the tree would +// stack on top of this one for whichever state the flag settles into, +// and the feed would visibly change width after load. export const FeedPage = ({ className, ...props @@ -112,7 +139,10 @@ export const FeedPage = ({ return ( ); }; From aaac03dcf1d26fcad1758da2fbff7c6d9f4fe314 Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Mon, 24 Aug 2026 14:29:37 +0300 Subject: [PATCH 5/7] fix(feed): stop the feed inset depending on the layout experiment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `isV2` is not stable across client-side navigation: it reads true on load and false after a route change. Any inset keyed to it therefore changed as you moved around the app — the feed sat 24px in on arrival and 40px in after clicking a tab, and refreshing "fixed" it by landing on the other state. The feed now keeps one inset, `pageMainClassNames`, whatever the layout experiment is doing. v2's special case is gone: it set nothing at all, which is what left the cards flush against the frame to begin with. The breadcrumbs and tab strip take the horizontal half of the same value through the `feedGutter` constant, so they cannot drift from the cards. The instability in `useLayoutVariant` is untouched and still worth a look on its own — this change just stops the feed's width depending on it. Co-Authored-By: Claude Opus 5 --- .../shared/src/components/MainFeedLayout.tsx | 8 +-- .../src/components/utilities/common.tsx | 61 ++++++------------- 2 files changed, 22 insertions(+), 47 deletions(-) diff --git a/packages/shared/src/components/MainFeedLayout.tsx b/packages/shared/src/components/MainFeedLayout.tsx index 44874703c4..82920c6f96 100644 --- a/packages/shared/src/components/MainFeedLayout.tsx +++ b/packages/shared/src/components/MainFeedLayout.tsx @@ -17,7 +17,7 @@ import classNames from 'classnames'; import { useRouter } from 'next/router'; import type { FeedProps } from './Feed'; import Feed from './Feed'; -import { FeedPageLayoutMobile, useFeedGutter } from './utilities/common'; +import { FeedPageLayoutMobile, feedGutter } from './utilities/common'; import { ExploreChipsBar } from './feeds/ExploreChipsBar'; import { buildPersonalizedCategories } from './feeds/exploreCategories'; import { useFeeds } from '../hooks/feed/useFeeds'; @@ -688,10 +688,6 @@ export default function MainFeedLayout({ [isExtension, onNavTabClick], ); - // Matches whatever inset FeedPage is applying to the cards, so the - // breadcrumbs and tabs never sit on a different left edge. - const feedGutter = useFeedGutter(); - const FeedExploreComponent = useCallback(() => { if (isLaptop) { return ( @@ -727,7 +723,7 @@ export default function MainFeedLayout({ }} /> ); - }, [feedGutter, isLaptop, onTabChange, tab]); + }, [isLaptop, onTabChange, tab]); // v2 reaches the Explore hub sections (Explore, Tags, Sources, Leaderboard, // Discussions) from the sidebar's Explore panel, so the page header no longer diff --git a/packages/shared/src/components/utilities/common.tsx b/packages/shared/src/components/utilities/common.tsx index 7ab1ba4c57..4749cd3f41 100644 --- a/packages/shared/src/components/utilities/common.tsx +++ b/packages/shared/src/components/utilities/common.tsx @@ -5,7 +5,6 @@ import classed from '../../lib/classed'; import styles from './utilities.module.css'; import { ArrowIcon } from '../icons'; import { pageMainClassNames } from '../layout/PageWrapperLayout'; -import { useLayoutVariant } from '../../hooks/layout/useLayoutVariant'; import { SourceMemberRole } from '../../graphql/sources'; import type { OrganizationMemberRole } from '../../features/organizations/types'; @@ -100,52 +99,32 @@ export const BaseFeedPage = classed( ); /** - * The feed's horizontal inset, under the v2 (dual-sidebar) layout. - * Smaller than the legacy `laptop:p-10`, which reads as far too much - * side spacing inside v2's floating-card chrome. + * The feed's horizontal inset, as a horizontal-only echo of + * `pageMainClassNames`. Chrome that sits outside `FeedPage` — the + * breadcrumbs and the tab strip — uses this to line up with the cards. */ -export const feedGutterV2 = 'px-4 tablet:px-6'; +export const feedGutter = 'tablet:px-4 laptop:px-10'; -/** The legacy inset, horizontal only — `pageMainClassNames` without its vertical padding. */ -export const feedGutterLegacy = 'tablet:px-4 laptop:px-10'; - -/** - * The feed's current horizontal inset. Chrome that sits outside - * `FeedPage` — the breadcrumbs and tab strip — has to line up with the - * cards, and the value depends on a flag that resolves after mount, so - * it cannot be hardcoded at the call site. - */ -export const useFeedGutter = (): string => { - const { isV2 } = useLayoutVariant(); - - return isV2 ? feedGutterV2 : feedGutterLegacy; -}; - -// v2 used to drop `pageMainClassNames` and put nothing in its place, -// on the assumption that the card chrome always supplies the inset. -// On the feed surfaces it does not, so the cards ran flush into the -// sidebar on one side and the window edge on the other. +// v2 used to drop `pageMainClassNames` here and put nothing in its +// place, on the assumption that its floating-card chrome always +// supplies the inset. On the feed surfaces it does not, so the cards +// ran flush into the sidebar on one side and the window edge on the +// other. // -// Both variants now set an inset here, and only here. That matters -// beyond the missing gutter: `isV2` resolves asynchronously, so any -// second source of horizontal padding elsewhere in the tree would -// stack on top of this one for whichever state the flag settles into, -// and the feed would visibly change width after load. +// The inset is no longer conditional at all. `isV2` is not stable +// across client-side navigation — it reads true on load and false +// after a route change — so anything keyed to it made the feed +// visibly change width as you moved around the app. The feed keeps +// one inset whatever the layout experiment is doing. export const FeedPage = ({ className, ...props -}: HTMLAttributes): ReactElement => { - const { isV2 } = useLayoutVariant(); - return ( - - ); -}; +}: HTMLAttributes): ReactElement => ( + +); export const FeedPageLayoutList = classed( BasePageContainer, pageContainerClassNames, From a366dd8052d93630f26e7e3d272278d37d820d56 Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Mon, 24 Aug 2026 14:35:41 +0300 Subject: [PATCH 6/7] fix(feed): put the horizontal inset on the one container both routes share MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The feed renders through two different page containers depending on layout and route: FeedPage, which carries `pageMainClassNames`, and FeedPageLayoutList, which forces `!px-0`. Which one you get flips with `isV2` — itself unstable across client-side navigation — so an inset placed on either covered some routes and not others, and stacked with the other where both applied. That is the whole bug: 64px on one arrival, 24px on another, 0px after a route change. FeedContainer is the only element common to both, so the inset lives there now and nowhere else. FeedPage keeps its vertical padding and gives up its horizontal, which it could not apply everywhere anyway. One value, `px-4 tablet:px-6 laptop:px-10`, for every feed route and both layout variants — 40px at laptop, matching what the legacy path already gave. The breadcrumbs and tab strip share the constant. Co-Authored-By: Claude Opus 5 --- .../shared/src/components/MainFeedLayout.tsx | 4 +- .../src/components/utilities/common.tsx | 39 ++++++++++--------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/packages/shared/src/components/MainFeedLayout.tsx b/packages/shared/src/components/MainFeedLayout.tsx index 82920c6f96..dff944637f 100644 --- a/packages/shared/src/components/MainFeedLayout.tsx +++ b/packages/shared/src/components/MainFeedLayout.tsx @@ -846,9 +846,7 @@ export default function MainFeedLayout({ ) : undefined } - className={classNames( - shouldUseListFeedLayout && !isFinder && 'laptop:px-6', - )} + className={classNames(!isFinder && feedGutter)} /> ) )} diff --git a/packages/shared/src/components/utilities/common.tsx b/packages/shared/src/components/utilities/common.tsx index 4749cd3f41..04bccb732f 100644 --- a/packages/shared/src/components/utilities/common.tsx +++ b/packages/shared/src/components/utilities/common.tsx @@ -4,7 +4,6 @@ import classNames from 'classnames'; import classed from '../../lib/classed'; import styles from './utilities.module.css'; import { ArrowIcon } from '../icons'; -import { pageMainClassNames } from '../layout/PageWrapperLayout'; import { SourceMemberRole } from '../../graphql/sources'; import type { OrganizationMemberRole } from '../../features/organizations/types'; @@ -99,30 +98,34 @@ export const BaseFeedPage = classed( ); /** - * The feed's horizontal inset, as a horizontal-only echo of - * `pageMainClassNames`. Chrome that sits outside `FeedPage` — the - * breadcrumbs and the tab strip — uses this to line up with the cards. + * The feed's horizontal inset — the single source of it. + * + * It lives on FeedContainer rather than on a page container because + * the feed renders through two different ones depending on layout and + * route: FeedPage, which carries `pageMainClassNames`, and + * FeedPageLayoutList, which forces `!px-0`. FeedContainer is the only + * element common to both, so it is the only place an inset applies + * everywhere and can never stack with another. + * + * Chrome outside the container — the breadcrumbs and the tab strip — + * uses the same constant to line up with the cards. */ -export const feedGutter = 'tablet:px-4 laptop:px-10'; - -// v2 used to drop `pageMainClassNames` here and put nothing in its -// place, on the assumption that its floating-card chrome always -// supplies the inset. On the feed surfaces it does not, so the cards -// ran flush into the sidebar on one side and the window edge on the -// other. -// -// The inset is no longer conditional at all. `isV2` is not stable -// across client-side navigation — it reads true on load and false -// after a route change — so anything keyed to it made the feed -// visibly change width as you moved around the app. The feed keeps -// one inset whatever the layout experiment is doing. +export const feedGutter = 'px-4 tablet:px-6 laptop:px-10'; + +// Vertical padding only. The horizontal inset moved to FeedContainer +// (see `feedGutter`) because this component is not in the tree on +// every feed route — FeedPageLayoutList is used instead on some — and +// an inset here would both miss those routes and stack with the one +// that covers them. +const feedPageVerticalPadding = 'tablet:py-4 laptop:py-10'; + export const FeedPage = ({ className, ...props }: HTMLAttributes): ReactElement => ( ); export const FeedPageLayoutList = classed( From 01621198b1b76c91d18e3e92fef5c7f848b1a9c3 Mon Sep 17 00:00:00 2001 From: Tsahi Matsliah Date: Mon, 24 Aug 2026 16:23:45 +0300 Subject: [PATCH 7/7] fix(feed): keep Explore's top spacing stable across navigation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Explore showed a large gap above the breadcrumbs on arrival that a reload "fixed" — the same shape of bug as the horizontal inset, in the other axis. `disableTopPadding` was keyed to `shouldUseListFeedLayout`, and that value is not stable: `enableSsrSafeLayout` forces the list layout before mount and hands over to the real one after, so the page's 40px top padding was present in one state and zeroed in the other. The header sat 104px down or 64px down depending on how you arrived. Explore now keeps that padding in both layouts. It is the one feed that renders a breadcrumb and tab header above the cards, and with the padding zeroed that header is jammed against the site header. The `pt-4` added earlier to the Explore header goes away with it. It was compensating for this missing padding, which is why the gap read as too large in the state where both applied. Production has no such compensation, and Explore now matches it: 104px to the breadcrumbs, 64px of header offset plus the page's 40px. Co-Authored-By: Claude Opus 5 --- packages/shared/src/components/MainFeedLayout.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/shared/src/components/MainFeedLayout.tsx b/packages/shared/src/components/MainFeedLayout.tsx index dff944637f..f1132426f8 100644 --- a/packages/shared/src/components/MainFeedLayout.tsx +++ b/packages/shared/src/components/MainFeedLayout.tsx @@ -671,7 +671,14 @@ export default function MainFeedLayout({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [sortingEnabled, selectedAlgo, loadedSettings, loadedAlgo]); - const disableTopPadding = isFinder || shouldUseListFeedLayout; + // Explore keeps the page's top padding in both layouts. It renders a + // breadcrumb and tab header above the feed, and zeroing the padding + // leaves that header jammed under the site header — while + // `shouldUseListFeedLayout` flips between first paint and mount + // (see `enableSsrSafeLayout`), so keying the spacing to it made the + // gap change size on navigation and settle differently on reload. + const disableTopPadding = + isFinder || (shouldUseListFeedLayout && !isAnyExplore); const onTabChange = useCallback( (clickedTab: ExploreTabs) => { if (clickedTab === ExploreTabs.BestOf && isExtension) { @@ -700,10 +707,7 @@ export default function MainFeedLayout({ // heading and its tabs. Give the group room above and pull // the tabs up under the breadcrumbs they belong to; the // 16px down to the cards is unchanged. - className={{ - container: classNames(feedGutter, 'pt-4'), - tabWrapper: 'mb-4 mt-2', - }} + className={{ container: feedGutter, tabWrapper: 'mb-4 mt-2' }} /> ); }