# Figma → Project token mapping نگاشت توکن‌های خروجی `get_variable_defs` فیگما به متغیرهای واقعی این پروژه. **منبع حقیقت:** `assets/admin/styles.css` (بلاک `:root`). هرگز hex هاردکد نکن — همیشه `var(--token)`. --- ## Colors — brand | نقش فیگما (نمونه نام‌ها) | متغیر پروژه | مقدار | |---|---|---| | Primary / Brand / Indigo 500 | `--primary` | `#5559CE` | | Primary hover / 600 | `--primary-600` | `#494CB3` | | Primary pressed / 700 | `--primary-700` | `#3E41A0` | | Primary tint / subtle bg | `--primary-soft` | `#ecedfb` | | Primary tint 2 | `--primary-soft2` | `#d9dbf6` | | On-primary / text on brand | `--on-primary` | `#ffffff` | | Accent / Orange (CTA ثانویه، آواتار) | `--accent` | `#f0682a` | | Accent hover | `--accent-600` | `#db5a1f` | | Accent tint | `--accent-bg` | `#fdeee4` | ## Colors — surface / text / border | نقش فیگما | متغیر پروژه | مقدار | |---|---|---| | Page background | `--bg` | `#fafafa` | | Alt background | `--bg-2` | `#f2f2f5` | | Card / surface | `--surface` | `#ffffff` | | Surface raised 2 | `--surface-2` | `#f6f8fc` | | Surface raised 3 | `--surface-3` | `#eef2f8` | | Border default | `--border` | `#e4e9f1` | | Border strong | `--border-2` | `#d6dde8` | | Text primary | `--text` | `#0f1b2e` | | Text secondary | `--text-2` | `#56657c` | | Text muted / placeholder | `--text-3` | `#8a98ad` | | Focus ring | `--ring` | `rgba(85,89,206,.32)` | ## Colors — status | نقش | fg | bg | |---|---|---| | Success | `--success` `#15a35a` | `--success-bg` `#e6f6ed` | | Warning | `--warning` `#d98a09` | `--warning-bg` `#fcf2df` | | Danger / Error | `--danger` `#e0394a` | `--danger-bg` `#fdebed` | | Info | `--info` `#2b86d8` | `--info-bg` `#e7f1fb` | | Violet | `--violet` `#7c5cf0` | `--violet-bg` `#efeafe` | ## Colors — dashboard stat cards | رنگ | bg | fg | |---|---|---| | Amber | `--stat-amber-bg` | `--stat-amber-fg` `#FFC051` | | Violet | `--stat-violet-bg` | `--stat-violet-fg` `#5559CE` | | Green | `--stat-green-bg` | `--stat-green-fg` `#009D79` | | Pink | `--stat-pink-bg` | `--stat-pink-fg` `#F17732` | --- ## Typography | فیگما | پروژه | |---|---| | Font family (fa + latin) | `--font-sans` = `"Vazirmatn", ui-sans-serif, system-ui, sans-serif` | | منبع فونت | `@fontsource/vazirmatn/{300,400,500,600,700,800}.css` (در `styles.css`) | اوزان موجود: 300 / 400 / 500 / 600 / 700 / 800. اندازه/line-height فیگما → کلاس‌های Tailwind (`text-sm`, `text-lg`, …). ## Radius | فیگما | پروژه | مقدار | |---|---|---| | xs (chip داخلی) | `--r-xs` | `7px` | | sm (badge, input کوچک) | `--r-sm` | `8px` | | md (input, button, card عادی) | `--r` | `14px` | | lg (card بزرگ) | `--r-lg` | `18px` | | xl (modal) | `--r-xl` | `24px` | | full (avatar, pill, toggle) | `--r-pill` | `999px` | ## Shadow / elevation | فیگما | پروژه | |---|---| | Elevation 1 (card) | `--shadow-sm` | | Elevation 2 (dropdown/hover) | `--shadow` | | Elevation 3 (modal/popover) | `--shadow-lg` | ## Spacing & layout dimensions | نقش | پروژه | مقدار | |---|---|---| | Grid gap | `--gap` | `20px` (compact: `14px`) | | Card padding | `--card-pad` | `22px` (compact: `16px`) | | Table row height | `--row-h` | `56px` (compact: `46px`) | | Sidebar width | `--sidebar-w` | `243px` | | Sidebar collapsed | `--collapsed-w` | `90px` | | Topbar height | `--topbar-h` | `64px` | | Motion easing | `--ease` | `cubic-bezier(.22,.61,.36,1)` | اسپیسینگ آزاد (margin/padding داخل اجزا) → مقیاس Tailwind (`p-4`, `gap-2`, …)؛ برای ابعاد ساختاری بالا از متغیرها استفاده کن. ## Theming - Dark mode: بازتعریف متغیرها زیر `[data-theme="dark"]` در `styles.css`. رنگ خام دارک ننویس؛ همان `var(--token)` خودکار سوییچ می‌شود. - Density: `[data-density="compact"]` مقادیر `--gap` / `--card-pad` / `--row-h` را کم می‌کند. - RTL: کل پنل `dir="rtl"`؛ در نگاشت left/right فیگما را به start/end منطقی تبدیل کن. --- ## Component mapping (فیگما → کامپوننت موجود پروژه) قبل از ساخت، از `assets/admin/components/ui/` reuse کن: | المان فیگما | کامپوننت پروژه (`assets/admin/components/ui/`) | |---|---| | Table / list با ستون | `DataTable.tsx` (sort، search، skeleton، empty، bulk) | | Modal / dialog | `Modal.tsx` | | Delete/confirm dialog | `ConfirmDialog.tsx` | | Page title + breadcrumb + action | `PageHeader.tsx` | | Stat / KPI card | `StatCard.tsx` | | Status pill / badge | `StatusBadge.tsx` | | Pagination bar | `Pagination.tsx` | | Searchable / async select | `SearchableSelect.tsx` | | Appointment status control | `AppointmentStatusDropdown.tsx` | | Mobile number input | `MobileInput.tsx` | | Price / amount input | `PriceInput.tsx` | | Jalali date input/picker/calendar | `PersianDateInput.tsx` / `PersianDatePicker.tsx` / `PersianCalendar.tsx` | | Overlay/portal مبنا | `Portal.tsx` | | Feature-flag gate | `FeatureGate.tsx` | | Captcha | `Altcha.tsx` | کامپوننت‌های ترکیبی فیچرمحور (نه generic) → `assets/admin/components/*.tsx`. آیکون‌ها → `@heroicons/react/24/outline` (اول موجودها؛ فقط اگر نبود از `download_assets` فیگما). --- ## قواعد نگاشت 1. هر توکن فیگما را به نزدیک‌ترین متغیر بالا map کن. اگر معادل نبود → **توقف و بپرس**، توکن جدید خودسر به `styles.css` اضافه نکن. 2. رنگ/فاصله/شعاع خام (hex/px) در کامپوننت ممنوع؛ فقط `var(--token)` یا کلاس Tailwind. 3. اختلاف جزئی رنگ فیگما با پالت پروژه → پالت پروژه برنده است (تطبیق با design system، نه عین فیگما). 4. منبع مقادیر همیشه `assets/admin/styles.css` است؛ این فایل خلاصه‌ی نگاشت است، نه منبع مستقل — هنگام تغییر `styles.css` این را هم به‌روز کن.