شعار أزورا

نظام تصميم أزورا

توكنز ومكوّنات مُستخرجة من نظام أزورا الفعلي — الألوان، التايبوجرافي، المسافات، وكل نمط واجهة مؤكّد، في صفحة مرجعية واحدة.

أزورا هو نظام الـ ERP الخلفي (back-office) اللي بتشغّل بيه سيميكولون منتجات السفر والسياحة والأسطول (ملفات/بروفايلات السائحين، الخدمات السريعة، الفوترة، جدولة البرنامج اليومي، لوحات CRM). النظام ده اتستخرج مباشرة من screenshots للتطبيق الفعلي — مش مُختلَق. وفين ما قيمة معينة متقدرناش نقرأها بالظبط من الـ screenshot (شوية ألوان في الـ charts)، استخدمنا أقرب قيمة منطقية وحددناها عشان تتستبدل بالقيمة الحقيقية بعدين.

المبادئ

  • البرتقالي بيحمل الفعل (Action). كل إجراء أساسي — Add Profile، Pay/Invoice، Invoice، Create Invoice، الخطوة الحالية في الـ stepper، زرار الإعدادات العائم — بيستخدم نفس البرتقالي الأساسي للعلامة التجارية. لو اللون برتقالي، يبقى ده الحاجة اللي المفروض تدوس عليها بعدين.
  • الكحلي الغامق هو البديل الهادئ. Advanced Filter وأي إجراء ثانوي/مساعد بيقعد على كحلي قريب من الأسود، أبدًا على برتقالي، عشان الفعل الأساسي يفضل هو اللي بيبان الأول.
  • الحالة (Status) بتعيش في الـ pills، مش في chrome الصفحة. Pending، Confirmed، Draft، وstepper حالة البروفايل (Pending → Confirmed → Done → Cancel) بتستخدم مجموعة ألوان pill ثابتة وصغيرة، متكررة بنفس الشكل في الجداول والـ badges والـ stepper نفسه.
  • الكروت البيضا عايمة على خلفية رمادية فاتحة باردة. surface-page أبدًا مابتتستخدمش للمحتوى؛ كل جدول وفورم وملخص بيقعد جوه بلوك surface-card بظل خفيف وخط حدّ 1px، عشان شاشات البيانات الكثيفة تفضل واضحة.
  • الأرقام هي البطل في الداشبورد. بلاطات الـ Insights وإجماليات الـ charts بتستخدم أكبر وأثقل خط في الصفحة — أكبر من أي عنوان — عشان الـ KPIs تتقرا بسرعة.

التايبوجرافي — مؤكّد

أزورا بيستخدم خطّين مختلفين حسب اتجاه الصفحة: نسخة العربي/RTL بتستخدم Cairo (font-family: Cairo, sans-serif)، ونسخة الإنجليزي/LTR بتستخدم Roboto (font-family: Roboto, sans-serif). الاختيار بيبقى حسب اتجاه الصفحة، مش حسب نوع الجهاز أو نظام التشغيل.

الاتجاه الثنائي (RTL/LTR)

أزورا بيدعم RTL كامل، مش مجرد نصوص مترجمة.

  • الـ chrome بيتعكس. الـ sidebar وجرس الإشعارات وقائمة الحساب بتنتقل من الحافة الشمال (إنجليزي) للحافة اليمين (عربي)؛ عنوان الصفحة والـ breadcrumb بيتمحوروا لليمين؛ محتويات الكروت (الأيقونة جنب الرقم، التسمية فوق القيمة) بتتعكس كمان.
  • الأرقام والتواريخ والعملة بتفضل LTR جوه صفوف RTL. خلايا الجدول زي AZora-2026-10-26-54، أو تاريخ، أو سعر، بتتكتب من الشمال لليمين حتى جوه صف عربي متمحور لليمين.
  • توكنز الألوان والمسافات والـ radius مش مرتبطة باتجاه معين. بس الـ layout (المحاذاة، مكان الأيقونة) هو اللي بيتعكس؛ ابني المكوّنات بخصائص CSS منطقية بدل left/right ثابتة.

الأيقونات

أزورا بيسحب أيقوناته من مكتبتين — Tabler Icons (المجموعة الأساسية ذات الخط الرفيع: أيقونات الـ sidebar، أيقونات إجراءات الجدول، أيقونات حقول الفورم) وFont Awesome 6 (باقي المخزون). الاتنين خط رفيع (outline) بمقاس 16–24px، ودايمًا بلون واحد (currentColor) — أبدًا متعدد الألوان.

مراجعة إمكانية الوصول — 2026-10-26

اكتشفنا إن توكنين بيحملوا نص أبيض كانوا أقل من حد التباين الأدنى 4.5:1، وعملنالهم حل: success-strong (أغمق من success) لأي سطح نجاح فيه نص/أيقونة بيضا — توست النجاح بقى يستخدمها؛ وbutton-disabled-bg نفسه اتغمّق (من القيمة الأصلية المأخوذة #f3a282 إلى #c34513) لأن القيمة اللي اتقاسها كانت بس ~2.0:1 مع نص أبيض، ودلوقتي ~5.0:1.

اللوجو

اللوجو الحقيقي موجود في النظام كـ asset — ملف اللوجو الرسمي النظيف. ألوانه (logo-mark-blue، logo-wordmark-start/-end) مأخوذة بالضبط (pixel-sampled) من نفس الملف.

توكنز الألوان

الأسطح (Surfaces)

الحدود (Borders)

النصوص (Ink)

العلامة التجارية (Brand)

شارات الحالة (Status pills)

عناصر التحكم (Controls)

النجاح (التوست)

بلاطات الفئات (Category tiles)

الأزرار (Buttons)

اللوجو (Logo)

الرسوم البيانية (Charts)

الأخطاء (Error)

التايبوجرافي

نسخة العربي/RTL: Cairo, sans-serif. نسخة الإنجليزي/LTR: Roboto, sans-serif.

الستايلالحجمارتفاع السطرالوزنالاستخدام
Display / page-title28px34px600عناوين أعلى الصفحة ("Tourist File"، "Add Profile")
Heading / section20px26px700عناوين الأقسام ("Profile Info")
Heading / card-title16px22px700عناوين الكروت والـ widgets ("Money Summary")
Body / body14px20px400نص الفقرات وخلايا الجداول الافتراضي
Body / body-strong14px20px600القيم المُبرزة، قيم الحقول، تسميات الأزرار
Label / field-label13px18px500تسميات حقول الفورم ("Arrival Date")
Label / table-header12px16px600عناوين أعمدة الجدول
Numeral / stat-value30px36px700أرقام insight في الداشبورد

المسافات والانحناء

المسافات (Spacing)

space-14px
space-28px
space-312px
space-416px
space-520px
space-624px
space-832px
space-1040px

الانحناء (Radius)

radius-sm6px
radius-md10px
radius-lg16px
radius-full999px

المكوّنات

Button

إجراءات

أزرار إجراءات معبّأة (filled) بمستويين من الأهمية في أزورا، بالإضافة لـ outline أقل أهمية للعناصر داخل القوائم.

  • Primary (برتقالي العلامة، نص أبيض) هو العنصر البرتقالي المعبّأ الوحيد في الشاشة في أغلب الأحيان — بيحدد الفعل التالي الوحيد.
  • Secondary (كحلي غامق، نص أبيض) لإجراء مساعد بيقعد جنب إجراء أساسي من غير ما ينافسه في الانتباه.
  • Outline — محايد (شفاف، حد border-subtle، نص ink-700) للإجراءات جوه قوائم الـ dropdown وأزرار الـ toolbar.
  • Outline — primary (تعبئة بيضا، حد brand-orange 1.5px، نص brand-orange) هو شقيق أقل أهمية للزرار الـ primary المعبّأ.
  • Destructive — solid (تعبئة error، نص أبيض) لإجراء لا رجعة فيه ومعروض كزرار مستقل مش بند في قائمة.

التلاتة بيشتركوا في radius واحد 10px، تسمية 14px/600، وانتقال خلفية 0.15s.

الزرار المعطّل (Primary) — مؤكّد: لون button-disabled-bg فاتح مع نص أبيض — مش زرار رمادي على خلفية الصفحة. خلّي النص أبيض؛ بس التعبئة هي اللي بتخف.

Badge

تغذية راجعة

pills صغيرة معبّأة بالكامل مستديرة، مستخدمة لكل حالة في المنتج: قائمة البروفايلات، جدول آخر الحجوزات، وstepper حالة البروفايل.

أربع أزواج ثابتة — أبدًا متخلطش خلفية حالة مع لون نص حالة تانية:

الحالةالخلفيةالنص
Pendingstatus-pending-bgstatus-pending-ink
Confirmedstatus-confirmed-bgstatus-confirmed-ink
Draftstatus-draft-bgstatus-draft-ink
Confirmed / success (صفوف القوائم)status-success-bgstatus-success-ink

تسمية 12px/600، padding رأسي space-1–space-2، padding أفقي space-3، وradius-full. دي أبدًا مش outline — التعبئة هي اللي بتخليها واضحة في جدول كثيف.

في شكل badge تاني أهدأ للحالات التشغيلية/التوفّر:

الحالةالخلفيةالنص
Availablestatus-available-bgstatus-available-ink

StatCard

عرض بيانات

بلاطة KPI المستخدمة في صف Insights بالداشبورد. كارت أبيض على surface-page، بظل shadow-card، radius radius-md، padding space-4: صف تسمية فوق بستايل ink-500/field-label، بعدين الرقم بستايل stat-value (أكبر خط في النظام) بلون ink-900، وتعليق سطر واحد اختياري.

خلّي التعليقات جملة قصيرة واحدة. الرقم دايمًا هو مرساة الكارت البصرية.

DataTable

عرض بيانات

نمط القائمة الكثيفة اللي بتحمل أغلب شاشات أزورا. حاوية surface-card بظل shadow-card وradius radius-md، صف هيدر بستايل table-header (ink-500، 12px/600) على حد سفلي رفيع، وصفوف المحتوى بستايل body/14px بـ padding رأسي space-3 ونفس الخط الرفيع بين الصفوف — من غير تلوين zebra.

ترتيب محتوى الصف ثابت: عمود معرّف/رابط (لينك بلون brand-orange)، عمود أو أكتر بيانات عادية، عمود حالة Badge، وعمود إجراءات ختامي. الجداول القابلة للاختيار بتضيف عمود checkbox في أقصى اليسار.

StatusDonut

عرض بيانات

الحلقة رباعية الأقسام من widget "معالجة الملفات" في الداشبورد: دونات واحد لكل حالة (Pending، Confirmed، Done، Cancel)، كل واحد حلقة صغيرة مستقلة بالنسبة المئوية جواها وتعليق "Count: N" تحتها.

بيستخدم مجموعة ألوان خاصة بيه (chart-status-pending…chart-status-cancel)، مش نفس زوج status-* المستخدم في badges الجدول.

Toggle

إجراءات

مفتاح on/off المستخدم كعنصر تحكم على مستوى الصف في كل جدول قائمة — Hotels، Drivers، Last Profiles. الحالة On بتستخدم control-on (نفس برتقالي كل زرار primary)؛ الحالة Off بتستخدم control-off، مسار رمادي متوسط. مسار وthumb بـ radius-full، thumb أبيض، من غير نص تسمية جنبه.

خصّص ده لتبديل مباشر وفوري بس. لحالة workflow بتمر بخطوات، استخدم Badge أو stepper تفاصيل البروفايل بدلاً منه — أبدًا Toggle.

Toast

تغذية راجعة

نمط التوست المؤكّد في المنتج: مستطيل معبّأ، نص أبيض ثقيل، ثابت أعلى يمين الشاشة، زوايا radius-sm. حالتين مؤكّدتين — error (خلفية error) وsuccess (خلفية success-strong، توست "Updated successfully" في صفحة Users).

  • تعبئة solid error/success-strong، أبدًا tint خفيف.
  • بيستخدم success-strong، مش توكن success الأساسي: النص الأبيض على success الخام (#1fa971) بيقيس أقل من حد 4.5:1 (~3.0:1)، فأي سطح نجاح فيه نص لازم يستخدم success-strong بدلاً منه.
  • كدّس التوستات الجديدة فوق القديمة بفجوة صغيرة (space-2)؛ كل واحد له زرار إغلاق مستقل.
  • خلل معروف في المنتج، مش نمط للتكرار: التوست التاني الملتقط بيعرض raw i18n key (general.changeStatusError) بدل النص المترجم.

CategoryTile

تنقّل

صف بلاطات الروابط السريعة الباستيل أعلى صفحة Users: أيقونة + تسمية على خلفية ناعمة ملونة حسب الفئة، نص غامق بنفس درجة اللون، من غير حد أو ظل.

أربع أزواج ثابتة، واحد لكل فئة تقرير:

البلاطةالخلفيةالنص/الأيقونة
Cashbox Statementcategory-peach-bgcategory-peach-ink
Invoice Reportcategory-slate-bgcategory-slate-ink
Payment Voucherscategory-blue-bgcategory-blue-ink
Services Reportcategory-mint-bgcategory-mint-ink

WizardStepper

تنقّل

الـ stepper الأفقي المرقّم المستخدم للتنقل في فورم متعدد الخطوات — Add Profile، Edit User. مختلف عن stepper حالة Badge في صفحة تفاصيل البروفايل: ده دوائر وخطوط واصلة، للتنقل جوه فورم.

  • كل خطوة دائرة مرقّمة: الخطوات الحالية والمكتملة معبّأة brand-orange بنص أبيض؛ الخطوات القادمة دائرة outline.
  • الخط الواصل بين الخطوات brand-orange لحد الخطوة الحالية، بعدين border-strong للباقي.
  • تسمية الخطوة فوق الدايرة بتاعتها.

FileUpload

فورمات

منطقة رفع المرفقات من قسم Attachments في فورم حجز الفندق: مستطيل كبير بحد متقطّع، border-strong، radius radius-md، أيقونة رفع سحابة في المنتصف بلون ink-500 ونص "Drag and drop, or click to upload file" بحجم body ولون ink-500.

بيترافق مع نجمة حقل إلزامي على التسمية زي أي FormField، وزرار primary معطّل تحته لحد ما يتم إرفاق ملف فعليًا.

ChoiceCard

فورمات

محدد radio على شكل pill لاختيارات ثنائية إما/أو في wizard استئجار السيارة، دايمًا معروض ككارتين pill كبار جنب بعض.

  • غير مختار: خلفية surface-card، حد border-subtle 1px، نقطة radio فاضية رمادية، تسمية ink-700.
  • مختار: خلفية brand-orange-soft، حد brand-orange 2px، نقطة radio معبّأة brand-orange (مركز أبيض)، تسمية ink-900 عريضة.
  • أيقونة صغيرة في chip أبيض مستدير الزوايا على طرف الكارت الخارجي.
  • مؤكّد إنه RTL-native: نقطة الـ radio والتسمية في الحافة اليمين (البداية) في العربي، وchip الأيقونة في الحافة الشمال.

Tabs

تنقّل

شريط التابات بخط سفلي (underline) المستخدم للتنقل بين أقسام صفحة تفاصيل سجل.

  • التاب النشط: نص وأيقونة brand-orange، عريض، خط سفلي 3px brand-orange بعرض التاب بالكامل.
  • التاب غير النشط: نص وأيقونة ink-500، من غير خط سفلي.
  • خط رفيع border-subtle بيمر تحت الشريط بالكامل.
  • التابات مرقّمة في نص التسمية نفسها ("1. Overview") لما بتمثل تسلسل ثابت.
  • مختلف عن WizardStepper: التابات أقسام متوازية لسجل مكتمل الشخص بيتنقل بينها بحرية؛ WizardStepper فورم متعدد خطوات لسه مش مكتمل وبيتحرك للأمام.

Checkbox

فورمات

checkbox اختيار الصف المستخدم في كل DataTable: الحالة غير المحددة مربع outline بحد border-strong على surface-card؛ الحالة المحددة مربع معبّأ brand-orange بعلامة صح بيضا، زوايا radius-sm. عنصر "تحديد الكل" في الهيدر بيستخدم نفس المربع البرتقالي المعبّأ بشرطة بيضا قصيرة لما يكون التحديد جزئي.

FormField

فورمات

حقل النص المسمّى المستخدم في كل فورم "Add…": تسمية field-label فوق حقل surface-card بحد border-subtle 1px وزوايا radius-sm. الحقل الإلزامي بيضيف نجمة error صغيرة.

موضع النجمة غير ثابت في المنتج نفسه: أغلب الفورمات بتحطها بعد النص ("Name *")، بس فورم حجز الفندق بيحطها قبل ("* Check in").

حالة الحقل غير الصالح المؤكّدة: حد الحقل بيفضل محايد (border-subtle)، مش error — بس سطر واحد من نص المساعدة بلون error بيظهر تحت الحقل مباشرة. ولا التسمية ولا خلفية الحقل بتتغير.

AuthLayout

تنقّل

الـ layout المنقسم لشاشة تسجيل الدخول العامة — السطح الوحيد في المنتج اللي مش جزء من chrome التطبيق الداخلي.

  • اللوحة اليسار (~1/3 العرض، خلفية surface-page): لوجو أزورا الحقيقي أعلاه، بعدين "تسجيل الدخول" بستايل page-title، عنوان فرعي body/ink-500، اتنين FormField (إيميل، باسورد)، checkbox بسيط + تسمية ("عرض كلمة المرور")، وزرار الإرسال مثبّت أسفل اللوحة.
  • اللوحة اليمين (~2/3 العرض): صورة فوتوغرافية/توضيحية full-bleed، من غير نص أو UI فوقها.
  • زرار الإرسال بيستخدم button-disabled-bg، مش brand-orange، رغم إنه مفعّل وقابل للنقر بالكامل — ده لون الزرار الأساسي الخاص بشاشة الدخول؛ متصلحوش لـ brand-orange لما تطابق الشاشة دي بالتحديد.
  • تحديث 2026-10-26: قيمة توكن button-disabled-bg اتغمّقت من القيمة الأصلية المأخوذة #f3a282 إلى #c34513 كحل لمشكلة إمكانية الوصول — النص الأبيض على القيمة الأصلية كان بيقيس بس ~2.0:1، دلوقتي ~5.0:1.
  • التحقق الداخلي هنا بيطابق نمط FormField المؤكّد: حد محايد، نص مساعدة أحمر بس.