diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 9059b0e9..dbc2ad47 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -10,6 +10,7 @@ import { AnimatedBackground } from '@/components/AnimatedBackground';
import MaintenanceBanner from '@/components/layout/MaintenanceBanner';
import BackgroundMesh from '@/components/layout/BackgroundMesh';
import PageWrapper from '@/components/layout/PageWrapper';
+import ScrollToTop from '@/components/layout/ScrollToTop';
import { ThemeProvider } from "@/components/providers/theme-provider";
import "./globals.css";
@@ -115,6 +116,7 @@ export default function RootLayout({
{children}
+
diff --git a/src/components/layout/ScrollToTop.tsx b/src/components/layout/ScrollToTop.tsx
new file mode 100644
index 00000000..1d7bf961
--- /dev/null
+++ b/src/components/layout/ScrollToTop.tsx
@@ -0,0 +1,49 @@
+"use client";
+
+import { useState, useEffect } from "react";
+import { ArrowUp } from "lucide-react";
+import { motion, AnimatePresence } from "framer-motion";
+
+export default function ScrollToTop() {
+ const [isVisible, setIsVisible] = useState(false);
+
+ useEffect(() => {
+ const toggleVisibility = () => {
+ if (window.scrollY > 300) {
+ setIsVisible(true);
+ } else {
+ setIsVisible(false);
+ }
+ };
+
+ window.addEventListener("scroll", toggleVisibility);
+
+ return () => {
+ window.removeEventListener("scroll", toggleVisibility);
+ };
+ }, []);
+
+ const scrollToTop = () => {
+ window.scrollTo({
+ top: 0,
+ behavior: "smooth",
+ });
+ };
+
+ return (
+
+ {isVisible && (
+
+
+
+ )}
+
+ );
+}