Build & Push Docker Image / build (push) Has been cancelled
Refresh the homepage around new hero/services/roadmap sections, shared design tokens, and updated brand assets. Co-authored-by: Cursor <cursoragent@cursor.com>
3.1 KiB
3.1 KiB
Navbar
Canonical header: HeroHeader in components/header.tsx.
Do not create a second site header. Extend the existing component when navigation changes.
Structure
- Fixed to the top (
fixed inset-x-0 top-0 z-50). - Content constrained with
<Container>. - Safe area:
pt-[env(safe-area-inset-top,0px)]. - RTL reading order: Logo → primary links → utilities (English, theme, CTA, menu).
Heights
| State | Height |
|---|---|
| Default (top) | h-14 mobile / h-16 desktop |
| Scrolled glass | h-12 |
Logo scales slightly on scroll (scale-[0.97]).
States
Default (scrollY ≤ 24px)
- Transparent background, no border, no blur.
- Full height bar flush with top (
mt-0).
Sticky / scrolled (scrollY > 24px)
Threshold: SCROLL_THRESHOLD = 24.
- Same vertical position as default — no top margin / vertical shift of chrome.
- Glass:
bg-background/75(or/65when backdrop-filter supported). - Blur:
backdrop-blur-xl backdrop-saturate-150. - Border:
border-border/50. - Shadow:
shadow-sm. - Radius:
rounded-2xl. - Width: identical to unscrolled — never a narrower/wider max-width.
- Horizontal inset only:
px-4 md:px-6so logo / nav / CTA move inward and the glass rim shows.
Transition: duration-300 ease-out across padding, background, border, shadow, backdrop-filter, radius.
Desktop (≥ xl)
- Horizontal
NavigationMenuwith underline affordance on links. - Dropdown panels:
rounded-xl,bg-popover/95,backdrop-blur-xl,shadow-md. - Primary CTA:
Button size="sm". - English link +
ThemeTogglevisible.
Tablet / mobile (< xl)
- Hamburger
Button variant="ghost" size="icon". Sheetfrom the right (side="right"), widthmin(100%, 20rem).- Sheet glass:
bg-background/95 backdrop-blur-xl shadow-xl. - Accordion for grouped links (e.g. خدمات).
- Staggered enter animation (
header-nav-in, ~320ms) — disabled underprefers-reduced-motion.
Padding & alignment
- Always inside site
Container(layout.container:max-w-[76.8rem]+px-6). - Top of page: inner padding
px-0— logo and CTA align with section content edges. - Scrolled: glass fills the container; inner padding
px-4 md:px-6insets chrome toward the center so the glass rim shows. - Do not use a different
max-w-*for the sticky state. - Nav link padding ≈
px-2 py-1.5; mobile rowspx-3 py-2.5. - Keep CTA and icon buttons on the trailing side; do not center-float disconnected controls.
Accessibility
navhasaria-label="ناوبری اصلی".- Mobile toggle:
aria-expanded,aria-controls="mobile-nav",aria-label. - Sheet title available to SR (
sr-only). - Active routes reflected visually (underline / foreground) without relying on color alone when possible.
Forbidden
- Second fixed header on inner pages.
- Opaque solid bar that ignores glass tokens when scrolled.
- Breaking out of
Containeralignment (e.g.max-w-[68rem]ormax-w-[90rem]shells). - Animating layout width with JS reflow—use transform/opacity/height transitions already defined.