From 8983df42968d851bc704e532e6a787c3df8cde16 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 22 Apr 2026 14:33:14 +0400 Subject: [PATCH 1/3] fix(landing): fix sidebar fixed positioning and mobile subnav layout Only apply fixed positioning to sidebar when expanded (not collapsed). Fix mobile subnav to top and compensate TOC popover margin. --- landing/src/styles/globals.css | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/landing/src/styles/globals.css b/landing/src/styles/globals.css index 8bd564ff..e7e6e727 100644 --- a/landing/src/styles/globals.css +++ b/landing/src/styles/globals.css @@ -373,15 +373,33 @@ html:not([data-anchor-scrolling]) { display: none; } -/* Sticky positioning is broken inside the fumadocs grid. Use fixed instead. */ +/* Sidebar: fixed positioning so it never scrolls with content, but only when expanded */ @media (min-width: 768px) { - [data-sidebar-placeholder] { + #nd-sidebar { + will-change: transform; + } + + [data-sidebar-placeholder]:not(:has(#nd-sidebar[data-collapsed="true"])) { position: fixed !important; width: var(--fd-sidebar-width) !important; inset-inline-start: max(0px, calc((100vw - var(--fd-layout-width, 97rem)) / 2)) !important; } } +@media (max-width: 767px) { + #nd-subnav { + position: fixed !important; + top: var(--fd-docs-row-1, 0px) !important; + inset-inline-start: 0 !important; + inset-inline-end: 0 !important; + } + + /* Compensate for fixed #nd-subnav leaving grid flow */ + [data-toc-popover] { + margin-top: 3.5rem; + } +} + [data-toc-popover] > header { position: fixed !important; top: var(--fd-docs-row-2, 0px) !important; From eedc1ecde1759418c21ab3a85b5a768ff24ac554 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 22 Apr 2026 14:43:25 +0400 Subject: [PATCH 2/3] fix(landing): replace hard-coded TOC margin with CSS variable and remove unconditional will-change --- landing/src/styles/globals.css | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/landing/src/styles/globals.css b/landing/src/styles/globals.css index e7e6e727..7f727a53 100644 --- a/landing/src/styles/globals.css +++ b/landing/src/styles/globals.css @@ -375,10 +375,6 @@ html:not([data-anchor-scrolling]) { /* Sidebar: fixed positioning so it never scrolls with content, but only when expanded */ @media (min-width: 768px) { - #nd-sidebar { - will-change: transform; - } - [data-sidebar-placeholder]:not(:has(#nd-sidebar[data-collapsed="true"])) { position: fixed !important; width: var(--fd-sidebar-width) !important; @@ -388,6 +384,7 @@ html:not([data-anchor-scrolling]) { @media (max-width: 767px) { #nd-subnav { + --subnav-height: 3.5rem; position: fixed !important; top: var(--fd-docs-row-1, 0px) !important; inset-inline-start: 0 !important; @@ -396,7 +393,7 @@ html:not([data-anchor-scrolling]) { /* Compensate for fixed #nd-subnav leaving grid flow */ [data-toc-popover] { - margin-top: 3.5rem; + margin-top: var(--subnav-height, 3.5rem); } } From 4db9530bc8759ff3c9eb61869b13697a220d01f1 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Wed, 22 Apr 2026 15:00:26 +0400 Subject: [PATCH 3/3] fix(landing): move --subnav-height to :root so TOC popover inherits it --- landing/src/styles/globals.css | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/landing/src/styles/globals.css b/landing/src/styles/globals.css index 7f727a53..276f2084 100644 --- a/landing/src/styles/globals.css +++ b/landing/src/styles/globals.css @@ -383,8 +383,11 @@ html:not([data-anchor-scrolling]) { } @media (max-width: 767px) { - #nd-subnav { + :root { --subnav-height: 3.5rem; + } + + #nd-subnav { position: fixed !important; top: var(--fd-docs-row-1, 0px) !important; inset-inline-start: 0 !important; @@ -393,7 +396,7 @@ html:not([data-anchor-scrolling]) { /* Compensate for fixed #nd-subnav leaving grid flow */ [data-toc-popover] { - margin-top: var(--subnav-height, 3.5rem); + margin-top: var(--subnav-height); } }