# بازنویسی متن استارت‌اپی و رفع نمایش موبایل صفحه فرود (Landing) ## پروژه `clinicpro` — صفحه فرود عمومی روت `/` (سرو شده توسط `HomeController`). این صفحه Twig خام + CSS دستی است (نه React، نه پنل ادمین). ## زمینه صفحه `https://clinic-pro.ddev.site/` یک landing بازاریابی کامل و self-contained است. دو ایراد دارد: 1. **متن‌ها استارت‌اپی نیستند** — لحن فعلی توصیفی/خنثی است؛ کاربر متن جذاب‌تر، قلاب‌دار (hook) و محصول-محور می‌خواهد. ارقام/ادعاها هم باید قوی‌تر و باورپذیر بمانند. 2. **نمایش موبایل درست نیست** — هدر روی گوشی شلوغ می‌شود (برند + دو دکمه + همبرگر کنار هم سرریز می‌کند)، منوی موبایل با inline-style شکننده باز می‌شود و با کلیک روی لینک بسته نمی‌شود، و بین breakpoint ۱۰۰۰px و ۶۴۰px هیچ نقطه میانی تبلت وجود ندارد. ## مشکل / هدف - همه متن‌های فارسی صفحه را به لحن **استارت‌اپی، کوتاه، قلاب‌دار و محصول-محور** بازنویسی کن (همان معنا، همان RTL، همان جایگاه‌ها — فقط متن داخل تگ‌ها عوض شود). - نمایش موبایل را **واقعاً درست** کن: هدر بدون سرریز، منوی موبایل تمیز و قابل‌بستن، و یک breakpoint میانی تبلت اضافه شود. ## فایل‌های مرتبط | فایل | نقش | | ---------------------------------------------------- | ------------------------------------------------------------------------------- | | `clinicpro/templates/public/home.html.twig` | کل HTML صفحه + JS inline منو/اسکرول (تک‌فایل، extends نمی‌کند) | | `clinicpro/assets/home/styles.css` | تمام استایل صفحه، شامل `@media (max-width:1000px)` و `@media (max-width:640px)` | | `clinicpro/src/Shared/Controller/HomeController.php` | فقط `return $this->render('public/home.html.twig')` — **نیازی به تغییر ندارد** | | `clinicpro/assets/home/index.js` | فقط `import './styles.css'` — تغییر نمی‌کند | > توجه: این صفحه ربطی به پنل ادمین React یا API ندارد. فقط Twig + CSS. نیازی به migration، docs/api، یا BaseController نیست. --- ## وظیفه ۱ — بازنویسی استارت‌اپی همه متن‌ها متن‌ها را در `home.html.twig` بازنویسی کن. **جایگاه/کلاس‌ها/تعداد آیتم‌ها ثابت بماند**؛ فقط متن داخل تگ عوض شود. لحن: کوتاه، قاطع، با فعل عمل، منفعت‌محور (نه فهرست امکانات خشک). اعداد فارسی بمانند. ### وضعیت فعلی (نمونه‌هایی که باید استارت‌اپی شوند) ```html

نوبت، پرونده و حساب مطب،
همه یک‌جا

کلینیک پرو کارهای روزمره‌ی مطب را سر و سامان می‌دهد؛ از نوبت‌دهی و پرونده‌ی بیمار تا فاکتور و گزارش مالی. دیگر خبری از دفتر نوبت و کاغذبازی نیست.

تماس با ما ``` ```html

پرونده‌ی بیمار

سابقه، نسخه و آزمایش هر بیمار جای خودش است و هر وقت لازم شد، چند ثانیه‌ای پیدایش می‌کنید.

``` ```html

راه‌اندازی با شما

...

پشتیبانی همیشگی

...

متناسب با مطب ایرانی

...

گزارش‌گیری دقیق

``` ```html

هرجا باشید،
مطب دست‌تان است

روی گوشی، تبلت یا کامپیوتر بازش کنید؛ اطلاعات خودش هماهنگ می‌ماند ...

``` ### راهنمای بازنویسی (نمونه لحن استارت‌اپی — می‌توانی بهترش کنی) - **Hero H1:** قلاب کوتاه و بلندپروازانه. مثال: `مطب‌تان را هوشمند اداره کنید` یا `کل مطب، توی جیب شما` (دو خطی با `
` مثل الان). - **Hero P:** یک جمله منفعت‌محور + یک جمله «خداحافظ کاغذبازی». کوتاه و پانچی. - **Feature cards:** تیتر فعل‌محور («پرونده‌ای که گم نمی‌شود»)، توضیح ۱ خطی با نتیجه ملموس. - **Why band:** روی اعتماد و سرعت راه‌اندازی مانور بده («در کمتر از یک روز راه می‌افتید»). - **CTAها و eyebrowها** (مثل `نرم‌افزار دسکتاپ`، `هر تخصص، روال خودش`): کوتاه و دعوت‌کننده. ### نکات - **همه‌ی** بخش‌های متنی صفحه را پوشش بده: nav، hero، feature columns، why band، devices، specialties (`پزشک عمومی`/`دندان‌پزشک`/`متخصص پوست`/`متخصص اطفال` و دو tick هرکدام)، app/desktop CTA (`کاملاً ایمن`/`نصب آسان`/`آپدیت رایگان`)، modal ثبت‌نام (`دکتر هستم`/...)، footer. - اعداد و ادعاها را **باورپذیر** نگه‌دار (`+۵۰۰ مطب`, `۹۵٪ رضایت` می‌توانند بمانند یا کمی پانچی‌تر شوند، اما اغراق بی‌پایه نکن). - آدرس/تلفن/ایمیل footer (`02191550875`، `info@clinic-pro.ir`، آدرس یاسوج) **دست‌نخورده** بماند. - لینک‌ها و `href`ها (`#hero`, `#features`, `/admin`, action مودال) عوض نشوند. --- ## وظیفه ۲ — رفع نمایش موبایل ### مشکل ۲٫۱ — سرریز هدر روی گوشی در `home.html.twig` خط ۳۳ تا ۳۹، `nav-right` همزمان همبرگر + دکمه «ثبت نام» + دکمه «ورود به پنل» را نشان می‌دهد. روی گوشی باریک (<۴۲۰px) کنار برند سرریز می‌کند. **وضعیت فعلی:** ```html ``` **راه‌حل:** در `styles.css` داخل `@media (max-width:640px)` دکمه «ثبت نام» را مخفی کن (داخل منوی موبایل در دسترس می‌ماند) و فقط «ورود به پنل» + همبرگر بماند؛ یا هر دو دکمه ghost/blue را جمع‌وجور کن. مثال: ```css @media (max-width: 640px) { .nav-right #openRegModal { display: none; } /* در منوی موبایل می‌آید */ .nav-right { gap: 10px; } .brand small { display: none; } /* «مدیریت مطب» را جا باز کن */ } ``` ### مشکل ۲٫۲ — منوی موبایل با inline-style شکننده باز می‌شود و بسته نمی‌شود در `home.html.twig` خط ۷۵۶ تا ۷۷۲، توگل منو با ست‌کردن مستقیم `navLinks.style.*` کار می‌کند (position/background/... دستی). این روش: - با کلیک روی آیتم منو بسته نمی‌شود، - دکمه‌های ثبت‌نام/ورود را شامل نمی‌شود، - شکننده است. **وضعیت فعلی:** ```js var navToggle = document.getElementById("navToggle"); var navLinks = document.getElementById("navLinks"); if (navToggle) navToggle.addEventListener("click", function () { var open = navLinks.style.display === "flex"; navLinks.style.display = open ? "" : "flex"; if (!open) { navLinks.style.position = "absolute"; navLinks.style.top = "84px"; navLinks.style.insetInline = "0"; navLinks.style.flexDirection = "column"; navLinks.style.background = "#fff"; navLinks.style.padding = "20px 32px"; navLinks.style.gap = "18px"; navLinks.style.boxShadow = "0 16px 30px oklch(0.4 0.08 285 / 0.1)"; } }); ``` **راه‌حل پیشنهادی:** منطق را به یک کلاس CSS منتقل کن (به‌جای inline-style) و با toggle کلاس کنترل کن؛ با کلیک روی هر لینک منو بسته شود. JS تمیزتر: ```js var navToggle = document.getElementById("navToggle"); var navLinks = document.getElementById("navLinks"); if (navToggle) { navToggle.addEventListener("click", function () { navLinks.classList.toggle("open"); }); navLinks.addEventListener("click", function (e) { if (e.target.tagName === "A") navLinks.classList.remove("open"); }); } ``` CSS متناظر در `styles.css` داخل `@media (max-width:640px)` (پنل dropdown زیر هدر): ```css @media (max-width: 640px) { .nav-links { display: none; } .nav-links.open { display: flex; position: absolute; top: 84px; /* ارتفاع هدر */ inset-inline: 0; flex-direction: column; gap: 18px; background: #fff; padding: 20px 32px; box-shadow: 0 16px 30px oklch(0.4 0.08 285 / 0.1); } } ``` > اگر می‌خواهی دکمه «ثبت نام» مخفی‌شده (مشکل ۲٫۱) هم در منوی موبایل بیاید، یک لینک «ثبت نام» داخل `#navLinks` فقط برای موبایل اضافه کن یا با CSS در `.nav-links.open` نمایش بده. ### مشکل ۲٫۳ — نبودِ breakpoint میانی تبلت الان فقط `max-width:1000px` و `max-width:640px` هست؛ بین ~۶۴۱px تا ۱۰۰۰px (تبلت پرتره) چیدمان جا می‌افتد ولی فاصله/پدینگ بهینه نیست. یک breakpoint میانی **اختیاری اما توصیه‌شده** اضافه کن (مثلاً `@media (max-width:768px)`) که grid چهارستونی feature/icon/specs را به ۲ ستون نگه دارد و پدینگ سکشن‌ها را کم کند تا پرش ناگهانی ۱۰۰۰→۶۴۰ نرم شود. ### نکات موبایل - `clamp()` روی H1/H2 از قبل هست؛ آن را به‌هم نزن. - بعد از تغییر CSS، build لازم است: `ddev exec yarn dev` (یا `yarn watch`). خطای `lightningcss.linux-arm64-gnu.node` در ddev پیش‌زمینه‌ای و بی‌اهمیت است؛ مانع build نیست. - `art-chip`ها در ۶۴۰px از قبل `display:none` شده‌اند — دست نزن. - در ۶۴۰px مطمئن شو `overflow-x: hidden` بدنه (خط ۴۴) همچنان جلوی اسکرول افقی را می‌گیرد؛ SVGها با `max-width:100%` مقیاس می‌شوند. --- ## تست نهایی 1. `ddev exec yarn dev` بدون خطای JS/TS. 2. `https://clinic-pro.ddev.site/` را در عرض موبایل (~۳۷۵px) باز کن: هدر سرریز نکند، همبرگر منوی dropdown تمیز باز/بسته کند، کلیک روی لینک منو را ببندد. 3. متن‌ها استارت‌اپی و فارسی صحیح، RTL سالم، بدون شکستن layout. 4. عرض دسکتاپ بدون رگرسیون.