ينشئ مستند تسليم تصميم يوجّه وكلاء البرمجة بالذكاء الاصطناعي بمواصفات قابلة للتنفيذ والمعالجة آليًا، بلا غموض: كل قيمة صريحة، كل حالة معرّفة، وكل حالة حدّية لها قاعدة.
View original English source1# ملاحظات تسليم التصميم — للذكاء الاصطناعي ومقروءة للمطورين23### مستند تسليم منظّم ومهيّأ لوكلاء تنفيذ البرمجة بالذكاء الاصطناعي (Claude Code, Cursor, Copilot)، مع بقائه واضحًا للمطورين البشر45---67## عن هذا الموجّه89**الوصف:** ينشئ مستند تسليم تصميم يعمل كتعليمات تنفيذ مباشرة لوكلاء البرمجة بالذكاء الاصطناعي. بدلًا من ملاحظات التسليم التقليدية التي تكتفي بوصف الانطباع المطلوب من التصميم، يقدّم هذا المستند مواصفات قابلة للمعالجة آليًا من دون أي غموض. كل قيمة صريحة، كل حالة معرّفة، وكل حالة حدّية لها قاعدة واضحة. المستند منظّم بحيث يستطيع وكيل الذكاء الاصطناعي قراءته من الأعلى إلى الأسفل والتنفيذ من دون الحاجة إلى أسئلة توضيحية — وفي الوقت نفسه يستطيع المطور البشري قراءته بسلاسة.1011**الفلسفة الأساسية:** إذا قرأ الذكاء الاصطناعي هذا المستند واضطر إلى تخمين أي شيء، فالمستند لم ينجح.1213**متى تستخدمه:** بعد اعتماد التصميم النهائي وقبل بدء التنفيذ. هذا المستند يغني عن تسليم Figma، وملفات مواصفات التصميم PDF، ومحادثات مثل «خلّه يطلع مثل التصميم».1415**من يقرأه:**16- الأساسي: وكلاء البرمجة بالذكاء الاصطناعي (Claude Code, Cursor, Copilot، وغيرها)17- الثانوي: المطورون البشر عند مراجعة مخرجات الذكاء الاصطناعي أو تصحيحها18- الثالث: أنت بصفتك المصمم، عند التحقق من مطابقة التنفيذ للنية التصميمية1920**العلاقة مع CLAUDE.md:** يفترض هذا المستند وجود ملف نظام تصميم باسم CLAUDE.md في جذر المشروع. تشير ملاحظات التسليم إلى الرموز tokens الموجودة في CLAUDE.md ولا تعيد تعريفها. إذا لم يكن ملف CLAUDE.md موجودًا، شغّل أولًا موجّهات استخراج نظام التصميم.2122---2324## الموجّه2526```27أنت مهندس أنظمة تصميم تكتب مواصفات تنفيذ.28ستُقرأ مخرجاتك بشكل أساسي من وكلاء برمجة بالذكاء الاصطناعي (Claude Code, Cursor)29وبشكل ثانوي من مطورين بشر.3031يجب أن تتبع كتابتك قاعدة واحدة مطلقة:32**إذا اضطر القارئ إلى التخمين أو الاستنتاج أو افتراض أي شيء، فقد فشلت.**3334كل قيمة يجب أن تكون صريحة. كل حالة يجب أن تكون معرّفة. كل حالة حدّية35يجب أن تكون لها قاعدة واضحة. لا تستخدم عبارات مثل «حسب المناسب» أو «تقريبًا» أو «مشابه لـ».3637## سياق المشروع38- **المشروع:**39- **إطار العمل:** [Next.js 14+ / React / إلخ]40- **أسلوب التنسيق:** [Tailwind 3.x / CSS Modules / إلخ]41- **مكتبة المكونات:** [shadcn/ui / custom / إلخ]42- **موقع CLAUDE.md:** [المسار — أو «لم يُنشأ بعد»]43- **مصدر التصميم:** [كود مرفوع / رابط مباشر / لقطات شاشة]44- **الصفحات المطلوب توثيقها:** [كل الصفحات / صفحات محددة]4546## قواعد تنسيق المخرجات4748قبل كتابة أي مواصفات، اتبع قواعد التنسيق التالية بدقة:49501. **القيم دائمًا جاهزة للاستخدام في الكود.**51 خطأ: «مسافة متوسطة»52 صحيح: `p-6` (24px)53542. **الألوان دائمًا تكون مرجع token + قيمة hex احتياطية.**55 خطأ: «أزرق الهوية»56 صحيح: `text-brand-500` (#2563EB) — من رموز CLAUDE.md57583. **الأحجام دائمًا تكون بنظام الوحدات المستخدم في المشروع.**59 إذا كان Tailwind: استخدم class من Tailwind كقيمة أساسية، وpx كملاحظة60 إذا كان CSS: استخدم rem كقيمة أساسية، وpx كملاحظة61 خطأ: «كبّره على desktop»62 صحيح: `text-lg` (18px) عند ≥768px، و`text-base` (16px) أقل من ذلك63644. **الشروط تستخدم if/else بشكل صريح، وليس «حسب الحاجة».**65 خطأ: «اعرض حالة التحميل عند الحاجة»66 صحيح: if data fetch takes >300ms, show skeleton. If fetch fails, show error state. If data returns empty array, show empty state.67685. **مسارات الملفات يجب أن تكون صريحة.**69 خطأ: «أنشئ مكون زر»70 صحيح: create `src/components/ui/Button.tsx`71726. **كل خاصية بصرية يجب أن تُذكر، ولا تعتمد على الافتراض أو الوراثة غير المصرّح بها.**73 حتى لو كانت «واضحة» — اذكرها. وكلاء الذكاء الاصطناعي لا يملكون سياقًا بصريًا.7475---7677## هيكل المستند7879أنشئ مستند التسليم بالأقسام التالية:8081### SECTION 1: IMPLEMENTATION MAP8283جدول مرتب حسب الأولوية لكل ما يجب بناؤه.84يجب على وكلاء الذكاء الاصطناعي التنفيذ بهذا الترتيب حتى تُحل الاعتماديات بشكل صحيح.8586| Order | Component/Section | File Path | Dependencies | Complexity | Notes |87|-------|------------------|-----------|-------------|-----------|-------|88| 1 | إعداد رموز التصميم | `tailwind.config.ts` | None | Low | يجب أن يكون أولًا — كل المكونات الأخرى تعتمد على هذه القيم |89| 2 | مكونات النصوص | `src/components/ui/Text.tsx` | Tokens | Low | متغيرات Heading, Body, Caption, Label |90| 3 | الزر | `src/components/ui/Button.tsx` | Tokens, Typography | Medium | 3 variants × 3 sizes × 6 states |91| ... | ... | ... | ... | ... | ... |9293القواعد:94- لا يجوز لأي عنصر أن يعتمد على مكون يأتي بعده في الجدول95- Complexity = عدد المتغيرات × الحالات داخل المكون96- Notes = أي أمر غير بديهي في التنفيذ9798---99100### SECTION 2: GLOBAL SPECIFICATIONS101102هذه المواصفات تُطبق في كل مكان. يجب على وكيل الذكاء الاصطناعي إعدادها قبل بناء أي مكونات.103104#### 2.1 Breakpoints105عرّف حدود السلوك بدقة:106107```108BREAKPOINTS {109 mobile: 0px — 767px110 tablet: 768px — 1023px111 desktop: 1024px — 1279px112 wide: 1280px — ∞113}114```115116لكل breakpoint، اذكر:117- أقصى عرض للحاوية والـ padding118- حجم الخط الأساسي119- معامل المسافات العام إذا كان يتغير120- وضع التنقل Navigation mode (hamburger / horizontal / إلخ)121122#### 2.2 Transition Defaults123```124TRANSITIONS {125 default: duration-200 ease-out126 slow: duration-300 ease-in-out127 spring: duration-500 cubic-bezier(0.34, 1.56, 0.64, 1)128 none: duration-0129}130131RULE: كل عنصر تفاعلي يستخدم `default` ما لم يحدد هذا المستند خلاف ذلك.132RULE: الانتقالات تطبق على: background-color, color, border-color,133 opacity, transform, box-shadow. لا تطبق أبدًا على: width, height, padding,134 margin لأنها تسبب إعادة حساب التخطيط.135```136137#### 2.3 Z-Index Scale138```139Z-INDEX {140 base: 0141 dropdown: 10142 sticky: 20143 overlay: 30144 modal: 40145 toast: 50146 tooltip: 60147}148149RULE: لا تستخدم أي قيمة z-index خارج هذا السلم. نهائيًا.150```151152#### 2.4 Focus Style153```154FOCUS {155 style: ring-2 ring-offset-2 ring-brand-500156 applies-to: كل عنصر تفاعلي (buttons, links, inputs, selects, checkboxes)157 visible: فقط عند التنقل بلوحة المفاتيح (استخدم focus-visible، وليس focus)158}159```160161---162163### SECTION 3: PAGE SPECIFICATIONS164165لكل صفحة، قدّم مواصفات تنفيذ كاملة.166167#### Page:168**Route:** `/exact-route-path`169**Layout:**170**Data requirements:** [ما البيانات التي تحتاجها هذه الصفحة، ومن أين تأتي]171172##### Page Structure (من الأعلى إلى الأسفل)173174```175PAGE STRUCTURE:176├── Section: Hero177│ ├── Component: Heading (h1)178│ ├── Component: Subheading (p)179│ ├── Component: CTA Button (primary, lg)180│ └── Component: HeroImage181├── Section: Features182│ ├── Component: SectionHeading (h2)183│ └── Component: FeatureCard × 3 (grid)184├── Section: Testimonials185│ └── Component: TestimonialSlider186└── Section: CTA187 ├── Component: Heading (h2)188 └── Component: CTA Button (primary, lg)189```190191##### مواصفات كل قسم192193لكل قسم:194195****196197```198LAYOUT {199 container: max-w-[1280px] mx-auto px-6 (mobile: px-4)200 direction: flex-col (mobile) → flex-row (desktop)201 gap: gap-8 (32px)202 padding: py-16 (64px) (mobile: py-10)203 background: bg-white204}205206CONTENT {207 heading {208 text: ""209 element: h2210 class: text-3xl font-bold text-gray-900 (mobile: text-2xl)211 max-width: max-w-[640px]212 }213 body {214 text: ""215 class: text-lg text-gray-600 leading-relaxed (mobile: text-base)216 max-width: max-w-[540px]217 }218}219220GRID (if applicable) {221 columns: grid-cols-3 (tablet: grid-cols-2) (mobile: grid-cols-1)222 gap: gap-6 (24px)223 items:224 alignment: items-start225}226227ANIMATION (if applicable) {228 type: fade-up on scroll229 trigger: when section enters viewport (threshold: 0.2)230 stagger: each child delays 100ms after previous231 duration: duration-500232 easing: ease-out233 runs: once (do not re-trigger on scroll up)234}235```236237---238239### SECTION 4: COMPONENT SPECIFICATIONS240241لكل مكون، قدّم عقد تنفيذ كاملًا وواضحًا.242243#### Component:244**File:** `src/components//.tsx`245**Purpose:** [جملة واحدة — وظيفة هذا المكون]246247##### Props Interface248```typescript249interface Props {250 variant: 'primary' | 'secondary' | 'ghost' // visual style251 size: 'sm' | 'md' | 'lg' // dimensions252 disabled?: boolean // default: false253 loading?: boolean // default: false254 icon?: React.ReactNode // optional leading icon255 children: React.ReactNode // label content256 onClick?: () => void // click handler257}258```259260##### Variant × Size Matrix261عرّف القيم الدقيقة لكل تركيبة:262263```264VARIANT: primary265 SIZE: sm266 height: h-8 (32px)267 padding: px-3 (12px)268 font: text-sm font-medium (14px)269 background: bg-brand-500 (#2563EB)270 text: text-white (#FFFFFF)271 border: none272 border-radius: rounded-md (6px)273 shadow: none274275 SIZE: md276 height: h-10 (40px)277 padding: px-4 (16px)278 font: text-sm font-medium (14px)279 background: bg-brand-500 (#2563EB)280 text: text-white (#FFFFFF)281 border: none282 border-radius: rounded-lg (8px)283 shadow: shadow-sm284285 SIZE: lg286 height: h-12 (48px)287 padding: px-6 (24px)288 font: text-base font-semibold (16px)289 background: bg-brand-500 (#2563EB)290 text: text-white (#FFFFFF)291 border: none292 border-radius: rounded-lg (8px)293 shadow: shadow-sm294295VARIANT: secondary296 [نفس الهيكل، بقيم مختلفة]297298VARIANT: ghost299 [نفس الهيكل، بقيم مختلفة]300```301302##### State Specifications303كل حالة يجب تعريفها لكل variant:304305```306STATES (تطبق على كل variants ما لم يذكر خلاف ذلك):307308 hover {309 background: — أغمق بدرجة واحدة من الحالة الافتراضية310 transform: none (لا تستخدم scale/translate عند hover)311 shadow:312 cursor: pointer313 transition: default (duration-200 ease-out)314 }315316 active {317 background: — أغمق بدرجتين من الحالة الافتراضية318 transform: scale-[0.98]319 transition: duration-75320 }321322 focus-visible {323 ring: ring-2 ring-offset-2 ring-brand-500324 all other: نفس الحالة الافتراضية325 }326327 disabled {328 opacity: opacity-50329 cursor: not-allowed330 pointer-events: none331 ALL hover/active/focus states: لا تطبق332 }333334 loading {335 content: استبدل children بـ spinner (16px, animate-spin)336 width: حافظ على نفس عرض حالة عدم التحميل (لتجنب layout shift)337 pointer-events: none338 opacity: opacity-80339 }340```341342##### Icon Behavior343```344ICON RULES {345 position: قبل نص الزر دائمًا (leading). في واجهات RTL تظهر يمين النص ما لم تحدد المواصفة خلاف ذلك346 size: 16px (sm), 16px (md), 20px (lg)347 gap: gap-1.5 (sm), gap-2 (md), gap-2 (lg)348 color: يرث لون النص (currentColor)349 when loading: تختفي الأيقونة، ويأخذ الـ spinner مكانها350 icon-only: إذا لم يوجد children، يصبح المكون مربعًا (width = height)351 أضف متطلب aria-label prop352}353```354355---356357### SECTION 5: INTERACTION FLOWS358359لكل مسار مستخدم، قدّم خطوات تنفيذ واضحة:360361#### Flow: [اسم المسار، مثل «إنشاء حساب مستخدم»]362```363TRIGGER: المستخدم يضغط زر «إنشاء حساب» في الهيدر364365STEP 1: يفتح Modal366 animation: fade-in (opacity 0→1, duration-200)367 backdrop: bg-black/50، الضغط خارج النافذة يغلق الـ modal368 focus: احصر التركيز داخل الـ modal، واجعل أول input يأخذ التركيز تلقائيًا369 body: scroll-lock (منع تمرير الخلفية)370371STEP 2: المستخدم يعبئ النموذج372 fields:373 validation: on blur (وليس on change — لتقليل الإزعاج)374375 field: email {376 type: email377 required: true378 validate: regex pattern + "must contain @ and domain"379 error: "البريد الإلكتروني غير صحيح — تأكد من كتابته بدون أخطاء"380 success: تظهر أيقونة صح خضراء (fade-in, duration-150)381 }382383 field: password {384 type: password (مع زر إظهار/إخفاء)385 required: true386 validate: min 8 chars, 1 uppercase, 1 number387 error: اعرض قائمة تحقق بالمتطلبات، وميّز غير المكتمل منها388 strength: اعرض مؤشر قوة كلمة المرور (ضعيفة/متوسطة/قوية)389 }390391STEP 3: المستخدم يرسل النموذج392 button: يعرض حالة التحميل (راجع مواصفات مكون Button)393 request: POST /api/auth/signup394 duration: المتوقع 1-3 ثوانٍ395396STEP 4a: نجاح397 modal: يتحول المحتوى إلى رسالة نجاح (crossfade, duration-200)398 message: "تم إنشاء الحساب! راجع بريدك الإلكتروني للتفعيل."399 action: زر "حسنًا" يغلق الـ modal400 redirect: بعد الإغلاق، وجّه المستخدم إلى /dashboard401 toast: none (الـ modal هو رسالة التأكيد)402403STEP 4b: خطأ — البريد الإلكتروني مستخدم مسبقًا404 field: حقل email يعرض حالة الخطأ405 message: "هذا البريد عليه حساب مسجل — هل ترغب بتسجيل الدخول بدلًا من ذلك؟"406 action: رابط "تسجيل الدخول" يبدّل الـ modal إلى نموذج تسجيل الدخول407 button: يرجع للحالة الافتراضية (ليس loading)408409STEP 4c: خطأ — فشل الشبكة410 display: error banner أعلى الـ modal (ليس toast)411 message: "حدث خلل من طرفنا. حاول مرة أخرى؟"412 action: زر "إعادة المحاولة" يعيد الإرسال413 button: يرجع للحالة الافتراضية414415STEP 4d: خطأ — تم تجاوز الحد المسموح للمحاولات416 display: error banner417 message: "محاولات كثيرة. انتظر 60 ثانية ثم حاول مرة أخرى."418 button: disabled لمدة 60 ثانية مع عداد ظاهر419```420421---422423### SECTION 6: RESPONSIVE BEHAVIOR RULES424425لا تكتفِ بوصف ما يتغير — حدّد القواعد الدقيقة:426427```428RESPONSIVE RULES:429430Rule 1: Navigation431 ≥1024px: horizontal nav، كل العناصر ظاهرة432 <1024px: hamburger icon، drawer ينزلق من اليمين433 drawer-width: 80vw (max-w-[320px])434 animation: translate-x (duration-300 ease-out)435 backdrop: bg-black/50، الضغط خارج النافذة يغلقها436437Rule 2: Grid Sections438 ≥1024px: grid-cols-3439 768-1023px: grid-cols-2 (العنصر الأخير يمتد لكامل العرض إذا كان العدد فرديًا)440 <768px: grid-cols-1441442Rule 3: Hero Section443 ≥1024px: عمودان — في RTL: النص يمين والصورة يسار، وفي LTR: النص يسار والصورة يمين — تقسيم 55/45444 <1024px: عمود واحد (النص أعلى، الصورة أسفل)445 image max-height: 400px, object-cover446447Rule 4: Typography Scaling448 ≥1024px: h1=text-5xl, h2=text-3xl, h3=text-xl, body=text-base449 <1024px: h1=text-3xl, h2=text-2xl, h3=text-lg, body=text-base450451Rule 5: Spacing Scaling452 ≥1024px: section-padding: py-16, container-padding: px-8453 768-1023px: section-padding: py-12, container-padding: px-6454 <768px: section-padding: py-10, container-padding: px-4455456Rule 6: Touch Targets457 <1024px: كل العناصر التفاعلية يجب أن يكون hit area لها على الأقل 44×44px458 إذا كان الحجم البصري أقل من 44px، استخدم padding غير مرئي للوصول إلى 44px459460Rule 7: Images461 all images: استخدم next/image مع responsive sizes prop462 hero: sizes="(max-width: 1024px) 100vw, 50vw"463 grid items: sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"464```465466---467468### SECTION 7: EDGE CASES & BOUNDARY CONDITIONS469470هذا القسم يمنع مشاكل «طيب وش يصير إذا...؟»:471472```473EDGE CASES:474475Text Overflow {476 headings: حد أقصى سطران، بعدها truncate مع text-ellipsis (أضف title attr للنص الكامل)477 body text: اتركه يلتف بشكل طبيعي، بدون truncation478 button labels: سطر واحد فقط، حد أقصى 30 حرفًا، بدون truncation (قيد تصميمي)479 nav items: سطر واحد، truncate إذا تجاوز 16 حرفًا على الجوال480 table cells: truncate مع tooltip عند hover481}482483Empty States {484 lists/grids with 0 items: اعرض مكون485 - illustration:486 - heading: ""487 - body: ""488 - CTA: "" →489490 user avatar missing: اعرض الأحرف الأولى على خلفية ملوّنة491 - background: ولّد اللون من hash اسم المستخدم (deterministic)492 - initials: أول حرف من الاسم الأول + اسم العائلة، uppercase493 - font: text-sm font-medium text-white494495 image fails to load: اعرض placeholder رمادي مع أيقونة صورة496 - background: bg-gray-100497 - icon: ImageOff from lucide-react, text-gray-400, 24px498}499500Loading States {501 page load: full-page skeleton (ليس spinner)502 component load: component-level skeleton مطابق لأبعاد المحتوى النهائي503 button action: inline spinner داخل الزر (راجع مواصفات Button)504 infinite list: skeleton row × 3 في الأسفل أثناء جلب الصفحة التالية505506 skeleton style: bg-gray-200 rounded animate-pulse507 skeleton rule: شكل skeleton يجب أن يطابق شكل المحتوى النهائي508 (rectangle للنص، circle للأفاتار، rounded-lg للبطاقات)509}510511Error States {512 API error (500): اعرض inline error banner مع زر retry513 Network error: اعرض banner أعلى الصفحة "يبدو أنك غير متصل بالإنترنت" (يختفي تلقائيًا عند عودة الاتصال)514 404 content: اعرض مكون 404 مخصصًا (وليس الافتراضي من Next.js)515 Permission denied: وجّه إلى /login مع return URL param516 Form validation: inline لكل حقل (راجع flow specs)، لا تستخدم alert() نهائيًا517}518519Data Extremes {520 username 1 character: اعرضه بشكل طبيعي521 username 50 characters: اختصره إلى 20 حرفًا في nav، واعرضه كاملًا في profile522 price 0.00 ر.س: اعرض "مجاني"523 price 999,999.99 ر.س: تأكد أن التخطيط لا ينكسر (اختبر الرقم بعد التنسيق)524 list with 1 item: نفس تخطيط العناصر المتعددة (بدون حالة خاصة)525 list with 500 items: paginate عند 20 عنصرًا، واعرض زر "تحميل المزيد"526 date today: اعرض "اليوم" وليس التاريخ527 date this year: اعرض "13 مارس" وليس "13 مارس 2026"528 date other year: اعرض "13 مارس 2025"529}530```531532---533534### SECTION 8: IMPLEMENTATION VERIFICATION CHECKLIST535536بعد التنفيذ، يجب على وكيل الذكاء الاصطناعي أو المطور البشري التحقق من التالي:537538```539VERIFICATION:540541□ كل مكون يطابق variant × size matrix بدقة542□ كل حالة (hover, active, focus, disabled, loading) تعمل543□ ترتيب Tab يتبع الترتيب البصري في كل الصفحات544□ حلقة focus-visible تظهر عند التنقل بلوحة المفاتيح، وليس عند النقر بالماوس545□ كل transitions تستخدم المدة والـ easing المحددين (وليس الافتراضي من المتصفح)546□ لا يوجد layout shift أثناء تحميل الصفحة (افحص CLS)547□ حالات skeleton تطابق أبعاد المحتوى النهائي548□ كل الحالات الحدّية من Section 7 تم التعامل معها549□ touch targets ≥ 44×44px عند breakpoints الجوال550□ لا يوجد horizontal scroll في أي breakpoint551□ كل الصور تستخدم next/image مع sizes prop صحيح552□ قيم z-index تستخدم السلم المحدد فقط553□ حالات الخطأ تظهر بشكل صحيح (اختبر باستخدام network throttle)554□ حالات الفراغ تظهر بشكل صحيح (اختبر ببيانات فارغة)555□ اختصار النص يعمل عند أطوال الحدود المحددة556□ رموز الوضع الداكن Dark mode tokens، إن وجدت، كلها مربوطة بشكل صحيح557```558559---560561## كيف يجب على وكيل الذكاء الاصطناعي استخدام هذا المستند562563أدرج هذه التعليمات في أعلى مستند التسليم الناتج564حتى يعرف وكيل التنفيذ كيف يتعامل معه:565566```567INSTRUCTIONS FOR AI IMPLEMENTATION AGENT:5685691. اقرأ هذا المستند كاملًا قبل كتابة أي كود.5702. نفّذ بالترتيب المحدد في SECTION 1 (Implementation Map).5713. ارجع إلى CLAUDE.md لقيم tokens. إذا كان هناك token مذكور هنا572 وغير موجود في CLAUDE.md، نبّه عليه واستخدم قيمة fallback المقدمة.5734. كل قيمة في هذا المستند مقصودة. لا تستبدلها بقيم «قريبة بما يكفي».574 `gap-6` تعني `gap-6`، وليس `gap-5`.5755. كل حالة يجب تنفيذها. إذا لم تُذكر حالة لمكون معين، فهذا نقص في المواصفة —576 نبّه عليه ولا تخمّن.5776. بعد تنفيذ كل مكون، راجع state matrix الخاصة به578 وتأكد أن كل الحالات تعمل قبل الانتقال للمكون التالي.5797. عند وجود غموض، اختر التفسير الأكثر صراحة.580 إذا بقي الغموض، أضف تعليق TODO: "// HANDOFF-AMBIGUITY: [description]"581```582```583584---585586## ملاحظات التخصيص587588**إذا كنت لا تستخدم Tailwind:** استبدل كل مراجع class الخاصة بـ Tailwind في الموجّه بما يقابلها في نظامك. يبقى الهيكل كما هو — الذي يتغير فقط هو صيغة القيم. قل لـ Claude: `Use CSS custom properties as primary, px values as annotations.`589590**إذا كنت تسلّم لأداة ذكاء اصطناعي محددة:** أضف ملاحظات خاصة بالأداة. مثال لـ Cursor: `Generate implementation as step-by-step edits to existing files, not full file rewrites.` ومثال لـ Claude Code: `Create each component as a complete file, test it, then move to the next.`591592**إذا لم يكن CLAUDE.md موجودًا بعد:** اطلب من الموجّه أن ينشئ قسم tokens بسيطًا في أعلى مستند التسليم يغطي فقط الرموز المطلوبة لهذا التسليم المحدد. لن يكون نظام تصميم كاملًا، لكنه يمنع استخدام قيم hardcoded.593594**للمشاريع متعددة الصفحات:** شغّل الموجّه مرة لكل صفحة، لكن أدرج Section 1 (Implementation Map) وSection 2 (Global Specs) في التشغيل الأول فقط. الصفحات اللاحقة تشير إلى المواصفات العامة نفسها.