پنل ادمین `clinicpro` یک ناحیهی «تنظیمات» دارد که کنار محتوا یک سایدمنوی مشترک (`PurchaseSubscriptionSidebar`) نمایش میدهد. این منو در همهی صفحات تنظیمات از طریق `SettingsLayout` رندر میشود.
- صفحهی `/admin/subscription` (`SubscriptionPage.tsx`) درست و پیکسلبهپیکسل است — **مرجع درونپروژهای**.
- صفحهی `/admin/appointment-settings` (`AppointmentSettingsPage.tsx`) **خراب** است: محتوا روی زمینهی خاکستری `#fafafa` نشسته، پنل سفید ندارد و فاصلهها با مرجع فرق دارد.
## مشکل / هدف
سه اصلاح مشخص:
1.**رنگها باید از شخصیسازی ریشه بگیرند.** رنگ ردیف فعال منو در `PurchaseSubscriptionSidebar.tsx` بهصورت هاردکد `#f17732` است. باید از متغیر برند شخصیسازی (`var(--accent)`) استفاده کند تا با «رنگ اصلی» انتخابشده در پنل شخصیسازی (`Topbar.tsx` → `setBrandHue`) هماهنگ شود.
2.**محتوای appointment-settings باید روی پنل سفید `#ffffff` بنشیند، نه `#fafafa`.** مرجع (tauri و نیز `SubscriptionPage.tsx`) محتوا را داخل یک پنل با `background: var(--surface)` (سفید) میگذارد. در appointment-settings محتوا مستقیم روی `--bg` صفحه (`#fafafa`) است. `#fafafa` رنگِ **ناحیهی منو** است، نه محتوا.
3.**منو باید چسبیده به نوارِ کناری اصلی (سمت راست) باشد.** در مرجع tauri منوی تنظیمات فلاش به سایدبار اصلی میچسبد؛ در clinicpro بهخاطر padding محتوا فاصله افتاده.
- بررسی کن که در حالت hover و active در تم تیره هم درست باشد (متغیرهای `--accent`، `--surface-2` هر دو تم را در `styles.css` پوشش میدهند — نیازی به `.dark &` جدا نیست).
- بعد از تغییر، چشمی چک کن که `WeeklyScheduleTab` و `FreeVisitPrice` روی سفید (`--surface`) بنشینند و padding/فاصلهها با `SubscriptionPage` یکی باشد. اگر `WeeklyScheduleTab` خودش زمینه/کارت داخلی دارد، مطمئن شو با پنل سفید بیرونی دوبارکارت (double-card) نمیشود.
### ۳. منوی تنظیمات را فلاش به نوار کناری اصلی بچسبان
مشکل: `.content` در `styles.css` دارای `padding: var(--gap)` (۲۰px) و `max-width:1480px; margin:0 auto` است؛ همین padding سمت راست، بین نوار کناری اصلی و منوی تنظیمات فاصله میاندازد.
در `SettingsLayout.tsx` کاری کن ستون منو تا لبهی نوار کناری اصلی کشیده شود؛ گزینهی پیشنهادی: یک negative margin سمت راست روی ریشهی `SettingsLayout` برابر `--gap` تا padding محتوا خنثی شود، بدون شکستن `max-width` بخش محتوا:
style={{marginInlineStart:'calc(-1 * var(--gap))'/* منو تا لبهی نوار کناری */}}>
<PurchaseSubscriptionSidebaractive={active}/>
<divstyle={{minWidth: 0}}>{children}</div>
</div>
</div>
);
```
- **مهم:** RTL است؛ نوار کناری اصلی سمت راست است و منوی تنظیمات هم سمت راستِ گرید. جهت negative margin را با تست چشمی درست کن (`marginInlineStart`/`marginInlineEnd`) تا منو دقیقاً به نوار کناری بچسبد و لبهی چپِ محتوا از قاب بیرون نزند.
- چون `SettingsLayout` مشترک است، بعد از این تغییر **همهی صفحات تنظیمات** (subscription، appointment، tags، insurance، …) را چک کن که همزمان درست بمانند.
## نکات مهم
- **هیچ تغییری در tauri نده** — فقط مرجع بصری است.
- منبع رنگها = متغیرهای CSS در `assets/admin/styles.css`؛ رنگ برند شخصیسازی از `--accent` میآید (پنل `Topbar.tsx` → `setBrandHue`). هر رنگ هاردکد جدید ممنوع.
- هر دو تم روشن/تیره باید سالم بمانند (`--surface`، `--accent`، `--surface-2` در هر دو تم تعریف شدهاند).
- تست بصری پیکسلبهپیکسل: `SubscriptionPage` (درست) را کنار `AppointmentSettingsPage` بگذار؛ عرض منو، فاصله، زمینهی سفید و رنگ ردیف فعال باید یکسان باشند.
- تستهای موجود را نگهدار: `PurchaseSubscriptionSidebar.test.tsx`، `SettingsLayout.test.tsx`، `AppointmentSettingsPage.test.tsx` — بعد از تغییر `npm test` (یا `ddev exec`) اجرا کن. اگر تستی رنگ هاردکد `#f17732` را چک میکند، آن را به `var(--accent)` بهروزرسانی کن.
- backend/API دست نمیخورد → نیازی به بهروزرسانی `docs/api/*` نیست.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.