diff --git a/src/client/components/ui/folder.vue b/src/client/components/ui/folder.vue
index 523298f225..6a163130c2 100644
--- a/src/client/components/ui/folder.vue
+++ b/src/client/components/ui/folder.vue
@@ -98,11 +98,10 @@ export default defineComponent({
 	> header {
 		display: flex;
 		position: relative;
-		z-index: 2;
-		// TODO
-		// position: sticky;
-		// top: var(--stickyTopOffset);
-		// backdrop-filter: blur(20px);
+		z-index: 10;
+		position: sticky;
+		top: var(--stickyTop, 0px);
+		backdrop-filter: blur(20px);
 
 		> .title {
 			margin: 0;
diff --git a/src/client/directives/sticky-container.ts b/src/client/directives/sticky-container.ts
index db29ea64b7..60b442eba4 100644
--- a/src/client/directives/sticky-container.ts
+++ b/src/client/directives/sticky-container.ts
@@ -5,7 +5,7 @@ export default {
 		//const query = binding.value;
 
 		const header = src.children[0];
-		const currentStickyTop = getComputedStyle(src).getPropertyValue('--stickyTop');
+		const currentStickyTop = getComputedStyle(src).getPropertyValue('--stickyTop') || '0px';
 		src.style.setProperty('--stickyTop', `${parseInt(currentStickyTop) + header.offsetHeight}px`);
 		header.style.setProperty('--stickyTop', currentStickyTop);
 		header.style.position = 'sticky';
diff --git a/src/client/ui/universal.vue b/src/client/ui/universal.vue
index 1387b02b2c..3e2ee28817 100644
--- a/src/client/ui/universal.vue
+++ b/src/client/ui/universal.vue
@@ -259,6 +259,7 @@ export default defineComponent({
 	> .contents {
 		width: 100%;
 		min-width: 0;
+		--stickyTop: #{$header-height};
 
 		&.withHeader {
 			padding-top: $header-height;