diff --git a/src/app/(main)/(home)/Layout.tsx b/src/app/(main)/(home)/Layout.tsx
new file mode 100644
index 0000000..9b37dc8
--- /dev/null
+++ b/src/app/(main)/(home)/Layout.tsx
@@ -0,0 +1,3 @@
+export default async function RootLayout({ children }: { children: React.ReactNode }) {
+ return
{children}
;
+}
diff --git a/src/app/(main)/(home)/page.tsx b/src/app/(main)/(home)/page.tsx
new file mode 100644
index 0000000..c6e4ed4
--- /dev/null
+++ b/src/app/(main)/(home)/page.tsx
@@ -0,0 +1,11 @@
+"use client";
+import { useDeviceStore } from "@/stores/useDeviceStore";
+import dynamic from "next/dynamic";
+
+const HomeMobile = dynamic(() => import("@/components/Home/Mobile"), { ssr: false });
+const HomeDesktop = dynamic(() => import("@/components/Home/Desktop"), { ssr: false });
+
+export default function HomePage() {
+ const isMobile = useDeviceStore((state) => state.isMobile);
+ return isMobile ? : ;
+}
diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx
new file mode 100644
index 0000000..55c7531
--- /dev/null
+++ b/src/app/global-error.tsx
@@ -0,0 +1,42 @@
+"use client";
+
+export default function GlobalError() {
+ return (
+
+
+
+ {/* آیکون هشدار */}
+
+
+ {/* متن خطا */}
+
مشکلی در سامانه رخ داده است
+
+
لطفاً ساعاتی بعد مجدد تلاش کنید.
+
+ {/* دکمه رفرش */}
+
+
+
+
+ );
+}
diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx
new file mode 100644
index 0000000..32b9a9c
--- /dev/null
+++ b/src/app/not-found.tsx
@@ -0,0 +1,22 @@
+import Link from "next/link";
+
+export default function NotFound() {
+ return (
+
+
+
صفحه مورد نظر یافت نشد
+
+
+ متأسفانه صفحهای که به دنبال آن هستید وجود ندارد.
+
+
+
+ بازگشت به صفحه اصلی
+
+
+
+ );
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
deleted file mode 100644
index 2c5c6a1..0000000
--- a/src/app/page.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import { useTranslations } from "next-intl";
-
-export default function Home() {
- const t = useTranslations("HomePage");
- return {t("title")}
;
-}
diff --git a/src/components/Header/Desktop/index.tsx b/src/components/Header/Desktop/index.tsx
new file mode 100644
index 0000000..126a30e
--- /dev/null
+++ b/src/components/Header/Desktop/index.tsx
@@ -0,0 +1,3 @@
+export default function DesktopHeader() {
+ return <>>;
+}
diff --git a/src/components/Header/Mobile/index.tsx b/src/components/Header/Mobile/index.tsx
new file mode 100644
index 0000000..f2fba60
--- /dev/null
+++ b/src/components/Header/Mobile/index.tsx
@@ -0,0 +1,3 @@
+export default function MobileHeader() {
+ return <>>;
+}
diff --git a/src/components/Home/Desktop/index.tsx b/src/components/Home/Desktop/index.tsx
new file mode 100644
index 0000000..6a5ed7e
--- /dev/null
+++ b/src/components/Home/Desktop/index.tsx
@@ -0,0 +1,3 @@
+export default function DesktopHome() {
+ return <>>;
+}
diff --git a/src/components/Home/Mobile/index.tsx b/src/components/Home/Mobile/index.tsx
new file mode 100644
index 0000000..b74f222
--- /dev/null
+++ b/src/components/Home/Mobile/index.tsx
@@ -0,0 +1,3 @@
+export default function MobileHome() {
+ return <>>;
+}
diff --git a/src/styles/globals.css b/src/styles/globals.css
index 1f00b62..35ca8a7 100644
--- a/src/styles/globals.css
+++ b/src/styles/globals.css
@@ -114,3 +114,89 @@ body {
.maplibregl-popup-tip {
display: none !important;
}
+body {
+ background-color: var(--color-bg);
+ color: var(--color-text-primary);
+ font-family: "Ravi", sans-serif;
+}
+
+:root {
+ --color-map-bg: var(--color-surface);
+ --color-pwa-primary: var(--color-primary-100);
+ --color-pwa-text: var(--color-text-primary);
+ --color-navbar-dot: var(--color-gray-400);
+}
+
+@theme {
+ /* =====================
+ Primary (Purple)
+ ====================== */
+ --color-primary-100: #7d34b9;
+ --color-primary-200: #9a5cff;
+ --color-primary-300: #b38bff;
+ --color-primary-400: #d1c2ff;
+ --color-primary-500: #ede9ff;
+
+ /* =====================
+ Background & Surface
+ ====================== */
+ --color-bg: #ffffff;
+ --color-surface: #f8f9fb;
+ --color-card: #ffffff;
+ --color-border: #e5e7eb;
+
+ /* =====================
+ Text
+ ====================== */
+ --color-text-primary: #111827;
+ --color-text-secondary: #6b7280;
+ --color-text-muted: #9ca3af;
+
+ /* =====================
+ State colors
+ ====================== */
+ --color-success: #22c55e;
+ --color-warning: #facc15;
+ --color-error: #ef4444;
+ --color-info: #0ea5e9;
+
+ /* =====================
+ Gray scale
+ ====================== */
+ --color-gray-50: #fcfcfc;
+ --color-gray-100: #f5f5f5;
+ --color-gray-200: #f0f0f0;
+ --color-gray-300: #d9d9d9;
+ --color-gray-400: #bfbfbf;
+ --color-gray-500: #8c8c8c;
+ --color-gray-600: #595959;
+ --color-gray-700: #454545;
+ --color-gray-800: #262626;
+ --color-gray-900: #1f1f1f;
+}
+
+[data-theme="dark"] {
+ --color-bg: #121212;
+ --color-surface: #181818;
+ --color-card: #1f1f1f;
+ --color-border: #2a2a2a;
+
+ --color-text-primary: #ffffff;
+ --color-text-secondary: #d1d5db;
+ --color-text-muted: #9ca3af;
+
+ --color-primary-100: #b38bff;
+ --color-primary-200: #9a5cff;
+ --color-primary-300: #7d34b9;
+
+ --color-gray-50: #1f1f1f;
+ --color-gray-100: #262626;
+ --color-gray-200: #2a2a2a;
+ --color-gray-300: #404040;
+ --color-gray-400: #525252;
+ --color-gray-500: #737373;
+ --color-gray-600: #a3a3a3;
+ --color-gray-700: #d4d4d4;
+ --color-gray-800: #e5e5e5;
+ --color-gray-900: #fafafa;
+}