diff --git a/components/main/MainContent.vue b/components/main/MainContent.vue
index 3034e273..ded5d648 100644
--- a/components/main/MainContent.vue
+++ b/components/main/MainContent.vue
@@ -8,12 +8,23 @@ defineProps<{
   noOverflowHidden?: boolean
 }>()
 
+const container = ref()
 const route = useRoute()
+const { height: windowHeight } = useWindowSize()
+const { height: containerHeight } = useElementBounding(container)
 const wideLayout = computed(() => route.meta.wideLayout ?? false)
+const sticky = computed(() => route.path?.startsWith('/settings/'))
+const containerClass = computed(() => {
+  // we keep original behavior when not in settings page and when the window height is smaller than the container height
+  if (!isHydrated.value || !sticky.value || (windowHeight.value < containerHeight.value))
+    return null
+
+  return 'lg:sticky lg:top-0'
+})
 </script>
 
 <template>
-  <div>
+  <div ref="container" :class="containerClass">
     <div
       sticky top-0 z10 backdrop-blur
       pt="[env(safe-area-inset-top,0)]"