Polish portfolio, blog, and site chrome for clearer browsing.

Add patterned title bands, lightbox gallery, project link bar, footer stats/credit, gradient link hovers, and more reliable blog covers/body rendering.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-23 22:17:25 +03:30
co-authored by Cursor
parent 37d8e4be91
commit 908d86939c
19 changed files with 710 additions and 193 deletions
+122 -18
View File
@@ -1,11 +1,50 @@
import Link from "next/link";
import { images } from "@/data/assets";
import { nav, site } from "@/data/home";
import {
portfolioCategoryHref,
topPortfolioCategories,
} from "@/data/portfolioCategories";
const stats = [
{ value: "112+", label: "بیش از ۱۱۲ وبسایت", labelEn: "WEBSITES" },
{ value: "28+", label: "بیش از ۲۸ لوگو", labelEn: "LOGOS" },
{ value: "7+", label: "بیش از ۷ اپلیکیشن", labelEn: "APPS" },
];
export function Footer() {
return (
<footer className="border-t border-line/70 bg-surface">
<div className="mx-auto flex max-w-7xl flex-col gap-10 px-5 py-12 lg:flex-row lg:items-start lg:justify-between lg:px-8">
<div>
<footer className="border-t border-line/70 bg-[linear-gradient(180deg,#fafafa_0%,#f3f5f7_100%)]">
<div className="border-b border-line/60">
<div className="mx-auto grid max-w-7xl grid-cols-1 divide-y divide-line/60 sm:grid-cols-3 sm:divide-x sm:divide-y-0 sm:divide-line/60">
{stats.map((stat) => (
<div
key={stat.label}
className="flex items-center gap-4 px-5 py-7 lg:gap-5 lg:px-8 lg:py-9"
>
<p
className="latin shrink-0 text-[clamp(2rem,4vw,2.75rem)] font-light leading-none tracking-tight text-ink"
dir="ltr"
>
{stat.value}
</p>
<span
aria-hidden
className="h-10 w-px shrink-0 bg-line/80 sm:h-12"
/>
<div className="min-w-0">
<p className="text-sm leading-6 text-ink-soft">{stat.label}</p>
<p className="latin mt-1 text-[10px] tracking-[0.22em] text-muted uppercase">
{stat.labelEn}
</p>
</div>
</div>
))}
</div>
</div>
<div className="mx-auto grid max-w-7xl gap-10 px-5 py-12 sm:grid-cols-2 lg:grid-cols-4 lg:gap-8 lg:px-8 lg:py-14">
<div className="sm:col-span-2 lg:col-span-1">
<p className="mb-2 text-2xl font-black text-ink">{site.nameFa}</p>
<p className="latin text-xs uppercase tracking-[0.18em] text-muted">
{site.taglineEn}
@@ -15,30 +54,95 @@ export function Footer() {
</p>
</div>
<div className="flex flex-col gap-3 text-sm text-ink-soft">
{nav.map((item) => (
<Link
key={item.href}
href={item.href}
className="transition link-hover"
>
{item.label}
</Link>
))}
<div>
<p className="mb-4 text-xs text-muted">خدمات</p>
<div className="flex flex-col gap-2.5 text-sm text-ink-soft">
{nav
.filter((item) => item.href !== "/portfolio")
.map((item) => (
<Link
key={item.href}
href={item.href}
className="link-hover transition"
>
{item.label}
</Link>
))}
</div>
</div>
<div className="text-sm text-muted" dir="ltr">
<a href={site.phoneHref} className="block transition hover:text-ink">
<div>
<p className="mb-4 text-xs text-muted">نمونه‌کارها</p>
<div className="flex flex-col gap-2.5 text-sm text-ink-soft">
<Link href="/portfolio" className="link-hover transition">
همه نمونه‌کارها
</Link>
{topPortfolioCategories.map((category) => (
<Link
key={category.id}
href={portfolioCategoryHref(category.slug)}
className="link-hover transition"
>
{category.nameFa}
</Link>
))}
</div>
</div>
<div>
<p className="mb-4 text-xs text-muted">تماس</p>
<a
href={site.phoneHref}
className="latin block text-sm text-ink-soft transition hover:text-ink"
dir="ltr"
>
{site.phone}
</a>
<p className="mt-2 max-w-xs text-right" dir="rtl">
<p className="mt-3 max-w-[16rem] text-sm leading-7 text-muted">
{site.address}
</p>
<Link
href="#contact"
className="mt-5 inline-flex rounded-full border border-line px-4 py-2 text-xs text-ink-soft transition hover:border-ink/30 hover:text-ink"
>
تماس با ما
</Link>
</div>
</div>
<div className="border-t border-line/70 py-5 text-center text-xs text-muted">
© 2026 Meshkee — مشکی
<div className="footer-bottom-bar">
<div className="mx-auto flex max-w-7xl flex-col items-center justify-between gap-3 px-5 py-4 sm:flex-row lg:px-8">
<div className="text-xs text-[#999]">
© {new Date().getFullYear()} Meshkee — مشکی
</div>
<a
href="https://meshkee.com"
target="_blank"
rel="noopener noreferrer"
dir="ltr"
className="meshkee-credit group inline-flex items-center gap-2.5 px-2.5 py-1.5 text-[#999] transition-colors duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] hover:text-[#555]"
>
<span className="meshkee-credit__frame" aria-hidden>
<span className="meshkee-credit__line meshkee-credit__line--l" />
<span className="meshkee-credit__line meshkee-credit__line--t" />
<span className="meshkee-credit__line meshkee-credit__line--r" />
<span className="meshkee-credit__line meshkee-credit__line--b" />
</span>
<img
src={images.meshkeeCreditLogo}
alt="Meshkee"
width={36}
height={32}
className="relative h-8 w-auto shrink-0 object-contain opacity-50 transition-opacity duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] group-hover:opacity-100"
/>
<span className="relative flex flex-col leading-snug">
<span className="text-[11px]">Designed And Developed By</span>
<span className="text-[13px] font-semibold text-[#666] transition-colors duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] group-hover:text-[#333]">
Meshkee E-Commerce Team
</span>
</span>
</a>
</div>
</div>
</footer>
);