diff --git a/public/fonts/segoeui/SegoeUIBold.ttf b/public/fonts/segoeui/SegoeUIBold.ttf new file mode 100644 index 0000000..5723e8b Binary files /dev/null and b/public/fonts/segoeui/SegoeUIBold.ttf differ diff --git a/public/fonts/segoeui/segoeui.ttf b/public/fonts/segoeui/segoeui.ttf new file mode 100644 index 0000000..0f52cbd Binary files /dev/null and b/public/fonts/segoeui/segoeui.ttf differ diff --git a/public/fonts/urdu/NotoNastaliqUrdu.ttf b/public/fonts/urdu/NotoNastaliqUrdu.ttf new file mode 100644 index 0000000..3362081 Binary files /dev/null and b/public/fonts/urdu/NotoNastaliqUrdu.ttf differ diff --git a/public/fonts/yekanx-arabic/ArabicYekanXRegular.ttf b/public/fonts/yekanx-arabic/ArabicYekanXRegular.ttf new file mode 100644 index 0000000..cb01293 Binary files /dev/null and b/public/fonts/yekanx-arabic/ArabicYekanXRegular.ttf differ diff --git a/public/fonts/yekanx/YekanXFaNum-R.ttf b/public/fonts/yekanx/YekanXFaNum-R.ttf new file mode 100644 index 0000000..c96391a Binary files /dev/null and b/public/fonts/yekanx/YekanXFaNum-R.ttf differ diff --git a/src/app/globals.css b/src/app/globals.css index 937a4c1..b757cbe 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -75,11 +75,13 @@ @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); - --font-sans: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + --font-sans: var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; --font-mono: var(--font-geist-mono); - --font-arabic: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; - --font-ryling: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; - --font-faminela: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + --font-arabic: var(--font-yekanx-arabic), var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + --font-persian: var(--font-yekanx), var(--font-yekanx-arabic), var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + --font-urdu: var(--font-nastaliq-urdu), var(--font-yekanx-arabic), var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + --font-ryling: var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + --font-faminela: var(--font-faminela-local), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; --color-semantic-neutral-bg: var(--semantic-neutral-bg); --color-semantic-neutral-text: var(--semantic-neutral-text); @@ -196,29 +198,49 @@ body { justify-content: center; overflow: hidden; color: var(--foreground); - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + font-family: var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; overscroll-behavior: none; } +/* ─── Multi-Language Typography matching Flutter Najm AppTheme ─── */ +/* 1. Arabic (ar) -> Flutter yekanxArabic (ArabicYekanXRegular.ttf) */ html:lang(ar) body, -:lang(ar) { - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; +html[lang="ar"] body, +body[data-lang="ar"], +:lang(ar), +.font-arabic { + font-family: var(--font-yekanx-arabic), var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; } -.font-arabic, -.font-ryling { - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; +/* 2. Persian (fa) -> Flutter yekanx (YekanXFaNum-R.ttf) */ +html:lang(fa) body, +html[lang="fa"] body, +body[data-lang="fa"], +:lang(fa), +.font-persian { + font-family: var(--font-yekanx), var(--font-yekanx-arabic), var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; +} + +/* 3. Urdu (ur) & Kashmiri (ks) -> Flutter NastaliqUrdu (NotoNastaliqUrdu.ttf) */ +html:lang(ur) body, +html[lang="ur"] body, +body[data-lang="ur"], +:lang(ur), +html:lang(ks) body, +html[lang="ks"] body, +body[data-lang="ks"], +:lang(ks), +.font-urdu { + font-family: var(--font-nastaliq-urdu), var(--font-yekanx-arabic), var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; +} + +/* 4. Global / Latin / Cyrillic / Asian languages -> Flutter Segoeui */ +html:not([lang="ar"]):not([lang="fa"]):not([lang="ur"]):not([lang="ks"]) body { + font-family: var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; } -.font-faminela:lang(ar), -.font-ryling:lang(ar), -[dir="rtl"] .font-faminela, -[dir="rtl"] .font-ryling, -[dir="rtl"].font-faminela, -[dir="rtl"].font-ryling, .font-faminela { - font-family: - var(--font-faminela-local), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + font-family: var(--font-faminela-local), var(--font-segoeui), "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; } .app-shell { diff --git a/src/app/layout.tsx b/src/app/layout.tsx index fbcc616..0ba432f 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -13,6 +13,49 @@ import { import { getInitialMarriageProfile } from "@/hooks/marriage/use-profile-main"; import type { MarriageProfileResponse } from "@/hooks/marriage/types"; +const yekanxArabic = localFont({ + src: "../../public/fonts/yekanx-arabic/ArabicYekanXRegular.ttf", + variable: "--font-yekanx-arabic", + display: "swap", + preload: false, + fallback: ["Segoe UI", "Tahoma", "Geneva", "Verdana", "sans-serif"], +}); + +const yekanx = localFont({ + src: "../../public/fonts/yekanx/YekanXFaNum-R.ttf", + variable: "--font-yekanx", + display: "swap", + preload: false, + fallback: ["Segoe UI", "Tahoma", "Geneva", "Verdana", "sans-serif"], +}); + +const notoNastaliqUrdu = localFont({ + src: "../../public/fonts/urdu/NotoNastaliqUrdu.ttf", + variable: "--font-nastaliq-urdu", + display: "swap", + preload: false, + fallback: ["Segoe UI", "Tahoma", "Geneva", "Verdana", "sans-serif"], +}); + +const segoeui = localFont({ + src: [ + { + path: "../../public/fonts/segoeui/segoeui.ttf", + weight: "400", + style: "normal", + }, + { + path: "../../public/fonts/segoeui/SegoeUIBold.ttf", + weight: "700", + style: "normal", + }, + ], + variable: "--font-segoeui", + display: "swap", + preload: false, + fallback: ["Segoe UI", "Tahoma", "Geneva", "Verdana", "sans-serif"], +}); + const faminela = localFont({ src: "../../public/fonts/Faminela/Faminela.otf", variable: "--font-faminela-local", @@ -407,7 +450,7 @@ export default async function RootLayout({ />
{t["Failed to load advisors."]}
@@ -83,7 +81,6 @@ export default function MarriageAdvisorsPage({ type="button" onClick={() => refetch()} className="cursor-pointer rounded-[20px] border-none bg-[rgba(14,177,60,0.1)] px-4 py-1.5 text-[12px] font-semibold text-[#0EB13C] transition-transform active:scale-95" - style={{ fontFamily: "'Segoe UI', sans-serif" }} > {t["Try again"]} @@ -94,7 +91,6 @@ export default function MarriageAdvisorsPage({{t["No advisors are currently available."]}
diff --git a/src/app/new-match/profile/page.tsx b/src/app/new-match/profile/page.tsx index d45edc5..5adcbe1 100644 --- a/src/app/new-match/profile/page.tsx +++ b/src/app/new-match/profile/page.tsx @@ -78,13 +78,11 @@ function MatchField({{label}
{value}
@@ -195,7 +193,6 @@ function NewMatchProfileSkeleton({ )}