diff --git a/README.md b/README.md
index 3660b7e..859c528 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ Open [http://localhost:3000](http://localhost:3000) with your browser to see the
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
-This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
+This project uses [`next/font/local`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to load local font assets from `app/fonts` without relying on external font providers.
## Learn More
diff --git a/app/layout.tsx b/app/layout.tsx
index 724aafa..03db705 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -13,11 +13,6 @@ import "./globals.css";
const museo = localFont({
src: [
- {
- path: "./fonts/MuseoSansRounded100.woff2",
- weight: "100",
- style: "normal",
- },
{
path: "./fonts/MuseoSansRounded300.woff2",
weight: "300",
@@ -38,14 +33,12 @@ const museo = localFont({
weight: "900",
style: "normal",
},
- {
- path: "./fonts/MuseoSansRounded1000.woff2",
- weight: "1000",
- style: "normal",
- },
],
variable: "--font-museo",
display: "swap",
+ preload: false,
+ fallback: ["Arial", "Helvetica", "sans-serif"],
+ adjustFontFallback: "Arial",
});
const dubai = localFont({
@@ -60,11 +53,6 @@ const dubai = localFont({
weight: "400",
style: "normal",
},
- {
- path: "./fonts/Dubai-Medium.woff2",
- weight: "500",
- style: "normal",
- },
{
path: "./fonts/Dubai-Bold.woff2",
weight: "700",
@@ -73,6 +61,9 @@ const dubai = localFont({
],
variable: "--font-dubai",
display: "swap",
+ preload: false,
+ fallback: ["Tahoma", "Arial", "sans-serif"],
+ adjustFontFallback: "Arial",
});
export const dynamic = "force-dynamic";
diff --git a/components/layout/hero-motion-backdrop.tsx b/components/layout/hero-motion-backdrop.tsx
index 2535d47..8c2c44a 100644
--- a/components/layout/hero-motion-backdrop.tsx
+++ b/components/layout/hero-motion-backdrop.tsx
@@ -1,129 +1,19 @@
"use client";
-import { motion, useReducedMotion } from "framer-motion";
-
type HeroMotionBackdropProps = {
compact?: boolean;
};
-export function HeroMotionBackdrop({ compact = false }: HeroMotionBackdropProps) {
- const reducedMotion = useReducedMotion();
-
+export function HeroMotionBackdrop({}: HeroMotionBackdropProps) {
return (
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/components/layout/home-hero.tsx b/components/layout/home-hero.tsx
index 526a0e2..3fdc535 100644
--- a/components/layout/home-hero.tsx
+++ b/components/layout/home-hero.tsx
@@ -1,7 +1,5 @@
"use client";
-import { motion, useReducedMotion } from "framer-motion";
-
import { HeroBadge } from "@/components/layout/hero-badge";
import {
HeroContentMotion,
@@ -23,7 +21,6 @@ export function HomeHero({
title,
description,
}: HomeHeroProps) {
- const reducedMotion = useReducedMotion();
const titleLines = title.split("\n").filter(Boolean);
const isArabic = locale === "ar";
const lines = isArabic
@@ -73,33 +70,12 @@ export function HomeHero({
👋
-
+
}
>
{kicker}
diff --git a/components/layout/site-hero.tsx b/components/layout/site-hero.tsx
index 008fd15..a8525b7 100644
--- a/components/layout/site-hero.tsx
+++ b/components/layout/site-hero.tsx
@@ -3,7 +3,6 @@
import type { ReactNode } from "react";
import { ArrowDown } from "lucide-react";
-import { motion, useReducedMotion } from "framer-motion";
import { Container } from "@/components/layout/container";
import { HeroMotionBackdrop } from "@/components/layout/hero-motion-backdrop";
@@ -119,54 +118,15 @@ export function HeroShell({
export function HeroContentMotion({
children,
className,
- variant = "home",
}: HeroContentMotionProps) {
- const reducedMotion = useReducedMotion();
-
- if (reducedMotion) {
- return {children}
;
- }
-
- return (
-
- {children}
-
- );
+ return {children}
;
}
export function HeroMotionItem({
children,
className,
- variant = "home",
}: HeroContentMotionProps) {
- const reducedMotion = useReducedMotion();
-
- return (
-
- {children}
-
- );
+ return {children}
;
}
export function HeroTitle({
@@ -176,27 +136,18 @@ export function HeroTitle({
className,
}: HeroTitleProps) {
const isArabic = locale === "ar";
- const reducedMotion = useReducedMotion();
+ const titleClassName = cn(
+ "text-balance font-semibold text-[hsl(var(--hero-ink))]",
+ variant === "home"
+ ? isArabic
+ ? "mt-6 flex w-full max-w-[26rem] flex-col gap-y-1 px-4 text-[clamp(2.85rem,11vw,5.9rem)] leading-[1.06] tracking-[-0.03em] sm:max-w-[30rem] sm:px-0 md:max-w-[36rem] lg:max-w-[32rem]"
+ : "mt-6 flex w-full max-w-[26rem] flex-col gap-y-1 px-4 text-[clamp(2.7rem,12vw,6.3rem)] leading-[0.94] tracking-[-0.045em] sm:max-w-[30rem] sm:px-0 md:max-w-[36rem] lg:max-w-[32rem]"
+ : "mt-4 flex w-full max-w-[30rem] flex-col gap-y-1 px-4 text-[clamp(2.55rem,9vw,4.9rem)] leading-[0.96] tracking-[-0.05em] sm:px-0 md:max-w-[36rem] lg:max-w-[40rem]",
+ className,
+ );
return (
-
+
{lines.map((line, index) => (
))}
-
+
);
}
@@ -230,19 +181,13 @@ export function HeroScrollLink({
label,
className,
}: HeroScrollLinkProps) {
- const reducedMotion = useReducedMotion();
-
return (
-
-
+
);
}