رنگها
سیستم رنگبندی سمانتیک پرتو — رنگهای متن، پسزمینه، حاشیه، و توکنهای دامنه
سیستم رنگبندی پرتو مجموعهای از کلاسهای کاربردی ارائه میدهد که استفاده از رنگها را ساده، یکپارچه، و قابل دسترس میکند. تمام رنگها سمانتیک هستند — یعنی هر کلاس معنا دارد نه فقط ظاهر.
تغییر تم
برای مشاهده رنگها در تمهای مختلف (روشن و تاریک)، از سوئیچ زیر استفاده کنید:
اصول پایه
هدف سیستم رنگبندی
- یکپارچگی: تمام کامپوننتها از یک منبع رنگی استفاده میکنند
- دسترسیپذیری: تمام ترکیبهای رنگی استانداردهای WCAG را رعایت میکنند
- قابلیت تمبندی: پشتیبانی کامل از تم روشن و تاریک
- سمانتیک: هر رنگ معنای خاصی دارد و برای موارد خاص استفاده میشود
قوانین اجباری
قوانین زیر چکیدهٔ لازمالاجرای این صفحه هستند؛ جزئیات و استدلال کامل هر قانون در بخشهای بعدی همین صفحه آمده است.
فقط کلاس سمانتیک — هرگز رنگ خام Tailwind
// ✅ درست — کلاس سمانتیک، در هر دو تم رنگ درست میگیرد
<span className="text-destructive">ارسال گزارش ناموفق بود</span>
// ❌ غلط — رنگ خام Tailwind، خارج از سیستم توکن
<span className="text-red-500">ارسال گزارش ناموفق بود</span>رنگهای خام Tailwind به CSS Variables متصل نیستند؛ با تغییر تم بهروز نمیشوند و یکپارچگی سیستم را میشکنند.
روی bg-brand، bg-warning و bg-destructive همیشه text-on-*
// ✅ درست — توکن «متن همراه»، کنتراست در هر دو تم تضمینشده
<div className="bg-brand text-on-brand">رونمایی محصول جدید</div>
// ❌ غلط — متن سفید روی سبز روشن (ratio ~2.7:1) WCAG AA را رد میکند
<div className="bg-brand text-white">رونمایی محصول جدید</div>این سه رنگ پایه روشن هستند؛ text-on-X تنها ترکیب تضمینشده است و ESLint rule parto/no-low-contrast-text هر text-white روی پسزمینهٔ روشن را در زمان build خطا میدهد.
سطح مخصوص عناصر شناور — bg-overlay برای منو، bg-dialog برای دیالوگ
// ✅ درست — منوی شناور روی سطح توپُر overlay، دیالوگ روی توکن اختصاصی خودش
<div className="bg-overlay border border-overlay">منوی کشویی</div>
<Dialog className="bg-dialog">تایید عملیات</Dialog>
// ❌ غلط — surface-200 پوشش نیمهشفاف است و محتوای پشت منو از آن رد میشود
<div className="bg-surface-200">منوی کشویی</div>
<Dialog className="bg">تایید عملیات</Dialog>گزارش هفتگی کمپین تخفیف فصلی: 12 هزار منشن، نرخ تعامل بالاتر از هفتهٔ پیش و بازخورد مثبت دربارهٔ بستهبندی.
گزارش هفتگی کمپین تخفیف فصلی: 12 هزار منشن، نرخ تعامل بالاتر از هفتهٔ پیش و بازخورد مثبت دربارهٔ بستهبندی.
bg-surface-200 یک پوشش تطبیقی نیمهشفاف است که با هر چیزی که پشتش باشد ترکیب میشود؛ عناصر شناور به سطح توپُر اختصاصی خود نیاز دارند.
سلسلهمراتب متن با سطوح foreground — رنگ تاکیدی فقط در موارد ضروری
// ✅ درست — سلسلهمراتب با سطوح متن، بدون رنگ تاکیدی اضافه
<div>
<h2 className="text-foreground">بازخورد بستهبندی</h2>
<p className="text-light">خلاصهٔ نظرات مشتریان دربارهٔ کمپین تخفیف فصلی</p>
<small className="text-lighter">بهروزرسانی: امروز</small>
</div>
// ❌ غلط — رنگ تاکیدی بهجای سلسلهمراتب؛ معنای «خطا» و «برند» از بین میرود
<div>
<h2 className="text-destructive">بازخورد بستهبندی</h2>
<p className="text-brand">خلاصهٔ نظرات مشتریان دربارهٔ کمپین تخفیف فصلی</p>
</div>رنگهای تاکیدی معنای سمانتیک دارند (خطا، هشدار، برند)؛ استفادهٔ تزئینی از آنها هم بار بصری اضافه میسازد و هم اثر معنای واقعیشان را در جای درست کم میکند.
یک کد برای هر دو تم — بدون فورک دستی رنگ
// ✅ درست — توکنها theme-aware هستند؛ همین کد در هر دو تم درست کار میکند
<div className="bg-surface-100 text-foreground border border-default">محتوا</div>
// ❌ غلط — فورک دستی تم با رنگ ثابت، خارج از سیستم توکن
<div className="bg-white dark:bg-zinc-900 text-black dark:text-white">محتوا</div>تمها از طریق CSS Variables به صورت خودکار تغییر میکنند؛ فورک دستی dark: با رنگ ثابت دو منبع حقیقت میسازد که دیر یا زود از هم فاصله میگیرند.
بخش اول: استفاده از رنگ
این بخش نحوه استفاده صحیح از کلاسهای رنگی در کامپوننتها و صفحات را توضیح میدهد.
رنگهای متن (Text)
از رنگهای متن برای ایجاد سلسلهمراتب بصری در محتوا استفاده کنید. از رنگهای تاکیدی (مثل text-destructive، text-warning) به ندرت و فقط در مواقع ضروری استفاده کنید تا از بار بصری بیش از حد جلوگیری شود.
سطوح مختلف متن
| کلاس | کاربرد | مثال |
|---|---|---|
text-foreground یا text | متن پیشفرض برای عناوین و محتوای اصلی | <h1 className="text-foreground">عنوان</h1> |
text-foreground-light یا text-light | متن بدنه و توضیحات | <p className="text-light">توضیحات</p> |
text-foreground-lighter یا text-lighter | متن کمرنگ و راهنما | <span className="text-lighter">راهنما</span> |
text-foreground-muted یا text-muted | متن غیرفعال | <span className="text-muted">غیرفعال</span> |
text-destructive | متن خطا | <span className="text-destructive">خطا</span> |
text-warning | متن هشدار | <span className="text-warning">هشدار</span> |
text-brand-600 | متن و پیوند به رنگ برند | <span className="text-brand-600">برند</span> |
نمونه کد
// عناوین و متنهای اصلی
<h1 className="text">عنوان اصلی</h1>
<h1 className="text-foreground">عنوان اصلی (معادل)</h1>
// متنهای بدنه و توضیحات
<p className="text-light">این یک متن توضیحی است</p>
<p className="text-foreground-light">این یک متن توضیحی است (معادل)</p>
// متنهای ثانویه
<span className="text-lighter">اطلاعات ثانویه</span>
// متنهای کمرنگ
<small className="text-muted">متادیتا یا تاریخ</small>
// متن برجسته (در پسزمینه تیره)
<span className="text-contrast">متن با کنتراست بالا</span>رنگهای سمانتیک متن
// برند — متن به رنگ برند پلهٔ 600 است؛ خود سبز برند رنگ متن نیست
<span className="text-brand-600">پیام برند</span>
// هشدار
<span className="text-warning">این عملیات قابل بازگشت نیست</span>
// خطا و حذف
<span className="text-destructive">خطا: عملیات ناموفق بود</span>رنگهای پسزمینه (Background)
پسزمینه اپلیکیشن
ما از پسزمینه به 2 روش مختلف استفاده میکنیم:
/**
* پسزمینه سایت مستندات
* این پسزمینه تیرهتر است و عمق بیشتری ایجاد میکند
*/
<body className="bg">{children}</body>
/**
* پسزمینه استودیو (داشبورد)
*/
<body className="bg-studio">{children}</body>پسزمینهها و سطوح (Surfaces)
کدام بلوک روی کدام سطح؟ و چرا توکن عوض نمیشود
هر بلوک محصورِ صفحه (جدول، نمودار، شاخص، فرم، نخ، پنل فیلتر) یک ظرف L1 است: bg-surface-100 + border + rounded-lg
shadow-sm، هر چهار با هم.bg-background،bg-transparentوbg-sidebarرنگ خود بوماند و پوستهٔ بلوک نیستند. اختلاف پرکنندهٔ L1 با بوم در پرتو با Studio یکی است (تیره) یا قویتر (روشن)؛ جدایی از ترکیب میآید، نه از روشنتر کردن توکن. نردبان لایهها با اعداد زنده، جدول تصمیم و جفتهای درست/نادرست در گرامر بصری.
سطوح در سایت مستندات و وبسایت
توکنهای سطح دو دستهٔ متفاوت هستند و مثل یک نردبان تخت و یکنواخت که هر پله روشنتر از قبلی باشد رفتار نمیکنند:
- سطوح تودرتوی توپُر (solid):
bg-surface-75،bg-surface-100،bg-surface-300، بههمراهbg-overlayوbg-dialog. اینها رنگ ثابت و کامل دارند. در تم فعلی،surface-75وsurface-100دقیقاً یک رنگاند (هر دوhsl(150deg 4% 9.8%))، پس اختلاف بصری بین این دو انتظار نداشته باشید. - پوششهای نیمهشفاف تطبیقی (adaptive):
bg-surface-200،bg-surface-400،bg-muted،bg-control،bg-selection،bg-overlay-hoverو کل مقیاس حاشیهها. اینها بهجای رنگ ثابت، یک لایهٔ نیمهشفاف از رنگforegroundهستند (color-mix(in oklch, var(--foreground) N%, transparent)) که روی هر پسزمینهای که پشتشان باشد ترکیب میشوند و همیشه یک پله بالاتر از همان پسزمینه مینشینند — روی صفحه، روی کارت، یا روی overlay بهیک اندازه دیده میشوند.
// پسزمینه اصلی صفحه
<body className="bg">
// سطح توپُر - کارتها و پنلهای اصلی
<div className="bg-surface-100">
<h2>محتوای اصلی</h2>
</div>
// پوشش تطبیقی - یک پله بالاتر از هر پسزمینهای که پشتش باشد
<div className="bg-surface-200">
<p>ناحیهٔ برجسته روی کارت</p>
</div>
// سطح توپُر عمیقتر
<div className="bg-surface-300">
<span>محتوای عمیق</span>
</div>
</body>
// دراپداون و پاپاوور از سطح مخصوص overlay استفاده میکنند (نه surface-200)
<div className="bg-overlay border border-overlay">منوی کشویی</div>
// دیالوگ توکن اختصاصی خودش را دارد
<Dialog className="bg-dialog">محتوای دیالوگ</Dialog>سطوح در داشبورد (Studio)
برای داشبورد ما میتوانیم از سطوح توپُر bg-surface-100 و bg-surface-300 (کارتها و پنلها) و پوشش تطبیقی bg-surface-200 (ناحیهٔ برجسته روی کارت) استفاده کنیم. برای منوهای شناور از bg-overlay استفاده کنید، نه از surface-200:
// پسزمینه اصلی داشبورد
<body className="bg-studio">
// کارتها و پنلها (سطح توپُر)
<div className="bg-surface-100">
<h2>پنل داشبورد</h2>
</div>
// ناحیهٔ برجسته روی کارت (پوشش تطبیقی)
<div className="bg-surface-200">
<p>بخش تودرتو</p>
</div>
</body>
// منوی کشویی روی سطح overlay مینشیند
<div className="bg-overlay border border-overlay">
<ul>منوی کشویی</ul>
</div>فضای خالی و گرید دادهها
گریدهای داده از یک پسزمینه جایگزین برای فضای خالی استفاده میکنند تا عمق بیشتری به طرح بدهند.
جدول استفاده از پسزمینه
| کلاس | کاربرد | مثال |
|---|---|---|
bg یا bg-200 | پسزمینه اصلی اپلیکیشن (توپُر) | <body className="bg"> |
bg-surface-75 | سطح توپُر — همرنگ surface-100 | <div className="bg-surface-75"> |
bg-surface-100 | سطح توپُر پنلها و کارتها | <Card className="bg-surface-100"> |
bg-surface-200 | پوشش تطبیقی (یک پله روی پسزمینه) | <div className="bg-surface-200"> |
bg-surface-300 | سطح توپُر عمیقتر | <div className="bg-surface-300"> |
bg-surface-400 | پوشش تطبیقی بالاتر | <div className="bg-surface-400"> |
bg-overlay | سطح دراپداون، پاپاوور و منو (توپُر) | <Popover className="bg-overlay"> |
bg-dialog | سطح مودال و دیالوگ (توکن اختصاصی) | <Dialog className="bg-dialog"> |
bg-alternative | پسزمینه جایگزین (معکوس) | <div className="bg-alternative"> |
bg-selection | پسزمینه انتخاب شده (پوشش تطبیقی) | <div className="bg-selection"> |
bg-control | پسزمینه کنترلها (پوشش تطبیقی) | <input className="bg-control"> |
bg-muted | پسزمینه خاموش (پوشش تطبیقی) | <div className="bg-muted"> |
bg-button | پسزمینه دکمه | <button className="bg-button"> |
Overlay ها
ما از رنگ پسزمینه bg-overlay (توکن توپُر overlay-default) برای سطح دراپداونها، پاپاوورها و منوها استفاده میکنیم.
این را نباید با Dialog اشتباه گرفت؛ دیالوگها توکن اختصاصی خودشان bg-dialog را دارند — نه رنگ پسزمینهٔ سایت و نه سطح overlay.
// Overlay - سطح dropdown و popover
<div className="bg-overlay border border-overlay">
محتوای Dropdown
</div>
// Dialog - توکن اختصاصی dialog (متمایز از پسزمینهٔ سایت)
<Dialog className="bg-dialog">
محتوای Dialog
</Dialog>پسزمینههای ویژه
// پسزمینه انتخاب شده (selection)
<div className="bg-selection">آیتم انتخاب شده</div>
// پسزمینه کنترلها (input, select, etc.)
<input className="bg-control" />
// پسزمینه overlay و modal
<div className="bg-overlay">محتوای overlay</div>
<div className="bg-overlay-hover">hover state</div>
// پسزمینه دیالوگ
<div className="bg-dialog">محتوای دیالوگ</div>
// سایدبار و canvas داشبورد (قاب برنامه را ProductFrame میسازد؛ اینجا برای سطوح درون یک صفحه)
<aside className="bg-dash-sidebar">فهرست کناری</aside>
<div className="bg-dash-canvas">ناحیهٔ محتوا</div>رنگهای حاشیه (Border)
| کلاس | کاربرد | مثال |
|---|---|---|
border یا border-default | حاشیه پیشفرض | <div className="border"> |
border-muted | حاشیه خاموش | <div className="border border-muted"> |
border-secondary | حاشیه ثانویه | <div className="border border-secondary"> |
border-overlay | حاشیه overlay | <Popover className="border border-overlay"> |
border-control | حاشیه کنترلها | <input className="border border-control"> |
border-alternative | حاشیه جایگزین | <div className="border border-alternative"> |
border-strong | حاشیه قوی (hover، focus) | <div className="border border-strong"> |
border-stronger | حاشیه قویتر (برجسته) | <div className="border border-stronger"> |
border-button | حاشیه دکمه | <button className="border border-button"> |
border-button-hover | حاشیه دکمه در hover | <button className="border border-button-hover"> |
نمونه کد
// حاشیه پیشفرض - برای بیشتر موارد
<div className="border border-default">کارت با حاشیه معمولی</div>
// حاشیه قویتر - برای تاکید بیشتر
<div className="border border-strong">کارت با حاشیه برجسته</div>
// حاشیه خیلی قوی - برای جداسازی واضح
<div className="border border-stronger">کارت با حاشیه پررنگ</div>
// حاشیه overlay - برای مدالها و پاپوورها
<div className="border border-overlay">overlay با حاشیه</div>
// حاشیه کنترلها
<input className="border border-control" />
// حاشیه دکمه
<button className="border border-button">دکمه با حاشیه</button>
<button className="border border-button-hover">حالت hover</button>رنگهای دیگر
این رنگها شامل brand، warning، destructive و code-block هستند.
قانون متن روی رنگ (Text-on-Color)
سطحهای وضعیت (4.0). Banner، RateLimitBanner، Callout و toastهای Sonner دیگر پسزمینهٔ پررنگ ندارند. هر چهار لحن یک دستور مشترک دارند: bg-{tone}-surface، حاشیهٔ border-{tone}-border، آیکن text-{tone}-icon و متن text-foreground (لحنها: info، success، warning، danger). قانونِ bg-X با text-on-X فقط برای دکمه و چیپ پررنگ است.
سبز برند پرتو، نارنجی هشدار، و قرمز اصلی، رنگهای روشن هستند. متن سفید روی این پسزمینهها در تم روشن، WCAG AA را رد میکند (کمتر از 4.5:1).
راهحل ریشهای — توکنهای --on-*:
برای هر یک از این سه خانوادهٔ رنگ، یک توکن «متن همراه» تعریف شده که در هر دو تم، contrast درست را تضمین میکند:
--on-brand → text-on-brand (متن تیره، روی سبز روشن)
--on-warning → text-on-warning (متن تیره، روی نارنجی روشن)
--on-destructive → text-on-destructive (متن تیره، روی قرمز روشن)بهجای فکر کردن دربارهٔ ratio هر بار، فقط bg-X را با text-on-X بنویسید. سیستم بقیه را خودش هندل میکند.
<div className="bg-brand text-on-brand">پسزمینه برند</div>
<div className="bg-warning text-on-warning">هشدار</div>
<div className="bg-destructive text-on-destructive">خطا</div>این الگو در هر دو تم light/dark بدون تغییر کار میکند، چون این سه رنگ پسزمینه در دو تم تقریباً یکسان هستند (هویت برند ثابت).
برای shadeهای دیگر (-400, -500, -600 و …) که در dark theme معنای lightnessشان وارونه میشود، از text-foreground (که خودش theme-aware است) یا text-white فقط روی shadeهای تیره استفاده کنید:
| پسزمینه | متن مجاز | نسبت کنتراست | کاربرد نمونه |
|---|---|---|---|
bg-brand (default) | text-on-brand ⭐ | 8.98:1 ✓ (هر دو تم) | Banner، CTA اصلی، سطح سبز برند |
bg-brand-400 (روشن) / bg-brand-500 (تیره) | text-foreground (theme-aware) | 13.06:1 / 6.47:1 ✓ | Button primary |
bg-brand-600 | text-white فقط در تم روشن | 5.24:1 ✓ (روشن) · 1.57:1 ✗ (تیره) | CTA تیره در تم روشن؛ در تم تیره این پله روشن است و متن تیره میخواهد |
bg-warning (default) | text-on-warning ⭐ | 5.88:1 / 6.72:1 ✓ | Banner هشدار |
bg-warning-{300,400,500} | text-foreground (theme-aware) | 5+:1 ✓ | toast هشدار |
bg-destructive (default) | text-on-destructive ⭐ | 4.63:1 ✓ (هر دو تم) | Banner خطا، Alert destructive |
bg-destructive-600 dark:bg-destructive-500 | text-white | 5.27:1 / 9.75:1 ✓ | Badge عدد notification، نقاط alarm |
bg-destructive-{200,300,400,500} | text-foreground (theme-aware) | 8+:1 ✓ | Toast نرم |
چرا متن تیره روی سبز برند؟ سبز پرتو از نظر روشنایی، یک رنگ متوسط-روشن است و متن سفید روی آن کنتراست کافی ندارد. متن تیره روی سبز جفت رسمی برند پرتو است (رنگ در راهنمای برند) و برای محصول جدی گزارشمحور مناسبتر است.
استثنای badge کوچک: برای badgeهای کوچک عدد notification که فضای متن کم است و انتظار visual «alarm» قویتر داریم، الگوی bg-destructive-600 dark:bg-destructive-500 + text-white استفاده میشود (NotificationCenter از همین).
این قاعده توسط ESLint rule parto/no-low-contrast-text در زمان build تضمین میشود — هر text-white روی پسزمینهٔ روشن، در lint مرحلهٔ pre-commit خطا میدهد.
نحوه استفاده
// رنگ Brand — text-on-brand به طور خودکار رنگ درست را انتخاب میکند
<div className="bg-brand text-on-brand">پسزمینه برند</div>
<div className="bg-brand-200 text-foreground">برند 200 (تینت روشن)</div>
<div className="bg-brand-600 text-white dark:text-on-brand">برند 600 (متن سفید فقط در تم روشن)</div>
// رنگ Warning — هشدار، با متن on-warning
<div className="bg-warning text-on-warning">هشدار</div>
<div className="text-warning">متن هشدار</div>
// رنگ Destructive — متن on-destructive برای Banner/Alert
<div className="bg-destructive text-on-destructive">خطا</div>
<div className="text-destructive">متن خطا</div>
// Badge کوچک notification — استثنا، با shade تیره + متن سفید
<div className="bg-destructive-600 dark:bg-destructive-500 text-white px-2 rounded-full">5</div>آنتیپترن — استفاده نکنید
// ❌ ratio ~2.7:1 — WCAG AA رد میشود
<div className="bg-brand text-white">نکنید</div>
// ❌ ratio ~1.8:1 — فاجعه — نارنجی روشن با سفید قابل خواندن نیست
<div className="bg-warning text-white">نکنید</div>
// ❌ ratio ~2.1:1 — destructive-500 در light theme صورتی روشن است
<div className="bg-destructive-500 text-white">نکنید</div>
// ❌ text-contrast در light theme = نزدیک سفید، روی سبز روشن fail میشود
<div className="bg-brand text-contrast">نکنید</div>نمونههای کاربردی
کارت با سطوح مختلف
<div className="bg-surface-100 p-6 rounded-lg border border-default">
<h2 className="text-foreground mb-2">عنوان کارت</h2>
<p className="text-light mb-4">توضیحات کارت</p>
<div className="bg-surface-200 p-4 rounded border border-muted">
<span className="text-lighter">سطح دوم</span>
</div>
</div>فرم با validation
رنگ خطا و هشدار را خود کنترلها میگذارند: FormRow با error حاشیه و پیام را قرمز میکند و aria-invalid را روی
کنترل میگذارد. کلاس رنگ را دستی روی input خام نگذارید.
import { Input } from '@partodata/ui'
import { FormRow } from '@partodata/ui/templates'
<form>
<FormRow label="نام کاربری">
<Input kind="username" />
</FormRow>
<FormRow label="ایمیل" error="ایمیل نامعتبر است">
<Input kind="email" />
</FormRow>
<FormRow label="رمز عبور" description="رمز عبور ضعیف است؛ دستکم 12 نویسه بنویسید">
<Input kind="password" />
</FormRow>
</form>دکمهها با variant های مختلف
// دکمه اصلی — متن تیره روی سبز روشن (bg-brand همیشه با text-on-brand)
<button className="bg-brand text-on-brand hover:bg-brand/90 px-4 py-2 rounded">
ذخیره
</button>
// دکمه ثانویه
<button className="bg-surface-200 text-foreground hover:bg-surface-300 px-4 py-2 rounded">
انصراف
</button>
// دکمه خطرناک — متن سفید روی قرمز تیره (هر دو تم safe)
<button className="bg-destructive-600 dark:bg-destructive-500 text-white hover:bg-destructive/90 px-4 py-2 rounded">
حذف
</button>
// دکمه ghost
<button className="text-foreground hover:bg-surface-100 px-4 py-2 rounded">
بیشتر
</button>
// دکمه outline
<button className="border border-default text-foreground hover:bg-surface-100 px-4 py-2 rounded">
مشاهده
</button>Modal و Overlay
// Overlay backdrop
<div className="fixed inset-0 bg-overlay/80">
{/* Dialog */}
<div className="bg-dialog rounded-lg p-6 border border-overlay">
<h2 className="text-heading text-foreground mb-4">تایید عملیات</h2>
<p className="text-light mb-6">آیا مطمئن هستید؟</p>
<div className="flex gap-2 justify-end">
<button className="bg-surface-100 border border-button hover:bg-surface-200 px-4 py-2 rounded">لغو</button>
<button className="bg-brand text-on-brand hover:bg-brand/90 px-4 py-2 rounded">تایید</button>
</div>
</div>
</div>نوتیفیکیشن و Alert
// اطلاعیهٔ موفقیت — رنگ موفقیت، نه رنگ برند
<div className="bg-success-200 border border-success-400 rounded-lg p-4">
<h4 className="text-subheading text-foreground mb-1">تغییرات ذخیره شد</h4>
<p className="text-light text-sm">گزارش هفتگی از شنبه برای 3 گیرنده فرستاده میشود.</p>
</div>
// هشدار
<div className="bg-warning/10 border border-warning rounded-lg p-4">
<h4 className="text-subheading text-warning mb-1">هشدار</h4>
<p className="text-light text-sm">این عملیات قابل بازگشت نیست</p>
</div>
// خطا
<div className="bg-destructive/10 border border-destructive rounded-lg p-4">
<h4 className="text-subheading text-destructive mb-1">خطا</h4>
<p className="text-light text-sm">عملیات با شکست مواجه شد</p>
</div>بهترین روشها
استفاده از کلاسهای سمانتیک
همیشه از کلاسهای سمانتیک استفاده کنید، نه رنگهای مستقیم:
// ✅ درست
<span className="text-destructive">خطا</span>
// ❌ غلط
<span className="text-red-500">خطا</span>رعایت سلسلهمراتب
از سطوح مختلف متن و پسزمینه برای ایجاد سلسلهمراتب بصری:
// ✅ درست - سلسلهمراتب واضح
<div>
<h1 className="text-foreground">عنوان</h1>
<p className="text-light">توضیحات</p>
<small className="text-lighter">متادیتا</small>
</div>استفاده محدود از رنگهای تاکیدی
از text-warning و text-destructive فقط برای موارد واقعاً مهم استفاده کنید.
کنتراست مناسب
همیشه مطمئن شوید رنگ متن و پسزمینه کنتراست کافی دارند (حداقل 4.5:1 برای متن عادی). راهنمای کامل کنتراست در دسترسیپذیری موجود است.
پشتیبانی از شفافیت (Opacity)
تمام رنگها با استفاده از شفافیت Tailwind تولید میشوند. این بدان معناست که میتوانید از / برای تنظیم شفافیت استفاده کنید:
<div className="flex gap-3 items-center">
<div className="w-12 h-12 rounded-full bg-surface-300"></div>
<div className="w-12 h-12 rounded-full bg-surface-300/90"></div>
<div className="w-12 h-12 rounded-full bg-surface-300/80"></div>
<div className="w-12 h-12 rounded-full bg-surface-300/75"></div>
<div className="w-12 h-12 rounded-full bg-surface-300/50"></div>
<div className="w-12 h-12 rounded-full bg-surface-300/25"></div>
</div>این برای ایجاد حالتهای hover، disabled و overlay بسیار مفید است:
// حالت disabled
<button className="bg-brand/50 text-foreground/50" disabled>
غیرفعال
</button>
// حالت hover
<button className="bg-brand hover:bg-brand/90">
دکمه
</button>
// Overlay
<div className="fixed inset-0 bg-overlay/80">
<Dialog />
</div>ترکیب رنگها (Mixing Colors)
یکی از قدرتهای سیستم رنگ ما این است که میتوانید هر رنگی را در هر کلاس کاربردی استفاده کنید:
// استفاده از رنگ foreground برای پسزمینه
<div className="bg-foreground-light">
<span className="text-background">متن معکوس</span>
</div>
// استفاده از رنگ surface برای حاشیه
<div className="border-2 border-surface-300">
محتوا
</div>
// ترکیبهای خلاقانه
<div className="bg-brand/10 border border-brand/30 text-brand-600">
کارت با تم برند
</div>بخش دوم: پالتهای رنگی
برای مشاهده تمام رنگهای پایه و scale های رنگی موجود در سیستم، به صفحه پالتهای رنگی مراجعه کنید.
بخش سوم: تمها و تنظیمات پیشرفته
تمهای مختلف
سیستم طراحی پرتو از 2 تم پشتیبانی میکند:
Light (روشن)
تم روشن استاندارد، مناسب برای استفاده روزانه و محیطهای با نور کافی.
- پسزمینه: روشن و تمیز
- متن: تیره برای کنتراست بهتر
- رنگهای برند: سبز برند در هر دو تم یکی است؛ پلههای مقیاس در تم روشن روشنترند
Dark (تاریک)
تم تاریک مدرن، ایدهآل برای محیطهای کمنور و استفاده شبانه.
- پسزمینه: تیره با سطوح مختلف
- متن: روشن برای خوانایی
- رنگهای برند: سبز برند در هر دو تم یکی است؛ پلههای مقیاس در تم تیره تیرهترند
نحوه استفاده
تمام رنگها به صورت خودکار در تمهای مختلف تغییر میکنند و نیازی به تغییر کد نیست:
// این کد در هر 2 تم به درستی کار میکند
<div className="bg-surface-100 text-foreground border border-default">محتوا</div>تمها از طریق CSS Variables کنترل میشوند. توکنها (v2+) رنگ کامل هستند (نه کانال خام) و تیره پیشفرضِ پایه (:root) است — روشن opt-in صریح است:
/* Dark Theme — پیشفرض پایه (:root) */
:root,
[data-theme='dark'],
.dark {
--background-default: hsl(120deg 2.6% 7.6%);
--foreground-default: hsl(150deg 5.9% 93.3%);
/* ... */
}
/* Light Theme — انتخاب صریح */
[data-theme='light'],
.light {
--background-default: hsl(0deg 0% 99.2%);
--foreground-default: hsl(0deg 0% 1.2%);
/* ... */
}رنگهای Code Block
رنگهای مخصوص برای syntax highlighting در code block ها:
| رنگ | کاربرد | مثال |
|---|---|---|
--code-block-1 | Keywords و Operators | function, const, => |
--code-block-2 | Strings و Text | "Hello World" |
--code-block-3 | Numbers و Values | 123, true, false |
--code-block-4 | Functions و Methods | console.log() |
--code-block-5 | Comments | // توضیح |
این رنگها نیز در هر دو تم به درستی کار میکنند و خوانایی کد را تضمین میکنند.
// نمونه استفاده - این رنگها به صورت خودکار اعمال میشوند
const greeting = 'سلام' // متغیر با رنگ code-block-2
function sayHello() {
// تابع با رنگ code-block-4
console.log(greeting) // استفاده از رنگهای مختلف
}خلاصه و نکات نهایی
استفاده کنید:
- کلاسهای سمانتیک (
text-foreground,bg-surface-100, etc.) - سطوح توپُر (
surface-75/100/300،overlay،dialog) و پوششهای تطبیقی (surface-200/400،muted،control) برای ایجاد عمق - شفافیت برای حالتهای مختلف (
bg-brand/50)
استفاده نکنید:
- رنگهای مستقیم Tailwind (
text-gray-500) - بیش از حد رنگ تاکیدی (
text-destructiveهمه جا) - ترکیبهای با کنتراست کم
یادتان باشد:
- تمام رنگها در سه تم کار میکنند
- کنتراست حداقل 4.5:1 برای متن
- از
opacityبرای ایجاد variations استفاده کنید
صفحات مرتبط
- رنگ در راهنمای برند — سبز برند، جفت رسمی سبز و متن تیره و قاعدهٔ رنگ در ارتباطات برند