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; +}