Mercato

الرموز

الطباعة

منظومة طباعة من أربع طبقات: سلّم متجاوب، ورموز أولية، ورموز دلالية، وأنماط نص. سبعة أدوار بثلاثة أحجام ومستويي تأكيد. عربي وإنجليزي بخط روبيك.

بنية من أربع طبقات

السلّم يحدد الأحجام (١٤ درجة متجاوبة). الرموز الأولية تسمّي الخط والوزن والحجم والتباعد. الرموز الدلالية تربط كل دور بقيمه. أنماط النص هي الطبقة النهائية. لا تكتب قيمة مباشرة، بل أشر إلى الطبقة الأعلى.

المبادئ

عشرة مبادئ حاكمة تفسّر القرارات خلف منظومة الطباعة.

01التسلسل الهرمي

الطباعة تشير للأولوية عبر الدور والحجم والوزن. عيّن الأدوار حسب أهمية المحتوى لا التفضيل البصري.

02الوضوح

يجب تمييز كل حرف عند حجمه المقصود. اختر خطوطاً بأشكال واضحة وافرض حداً أدنى لكل دور.

03قابلية القراءة

كتل النص تدعم القراءة المستمرة. استخدم أدوار القراءة للنص الطويل، والأدوار البنائية للتسميات القصيرة.

04الإيقاع

ارتفاع سطر وتباعد متسقان يخلقان إيقاع قراءة متوقّعاً. اقرن كل حجم بارتفاع سطر متناسب من السلّم.

05السلّم

الأحجام تتبع تدرّجاً نسبياً منهجياً لا قيماً عشوائية. اشتق كل الأحجام من نسبة ثابتة.

06الدور

لكل عنصر نصي غرض دلالي يحدّد تنسيقه. اختر الدور حسب ما يفعله المحتوى، لا حسب شكله.

07الوزن

الوزن يشير للتأكيد داخل الدور لا للتسلسل بين الأدوار. لا تجمع ترقية دور وزيادة وزن على العنصر نفسه.

08العائلة

كل عائلة خط تحمل هوية دلالية. عيّن العائلات حسب الفئة: بنائي، قراءة، تقني. عندنا روبيك للعربي واللاتيني.

09التباين

يجب أن يبقى النص مدرَكاً على خلفيته في كل الظروف. عامل التباين كقيد صارم وتحقّق منه عند كل حجم ومقطع.

10التكيّف

الطباعة تتكيّف بثبات عبر السياقات دون فقد التسلسل. حدّد استجابة كل دور لعرض الشاشة قبل التطبيق.

الأدوار

سبعة أدوار، لكل منها غرض دلالي محدد. اختر الدور حسب وظيفة النص لا حسب شكله. كل دور له ثلاثة أحجام (كبير، متوسط، صغير) ومستويان: أساسي وقوي.

مجموعة الدورأساسيقوي
العنوان الرئيسي500 · medium700 · bold
العرض، العناوين الفرعية، التسمية500 · medium600 · semibold
المتن، التعليق، أحادي المسافة400 · regular500 · medium
العرضأساسي · روبيك
أعلى تأثير بصري لتحديد نبرة الشاشة. مرة واحدة لكل عرض.
display/lg · 64px
وضوح
display/md · 56px
وضوح
display/sm · 48px
وضوح
العنوان الرئيسيأساسي · روبيك
يحدد تسلسل المحتوى ويفتح المناطق الكبرى. عنوان الصفحة.
headline/lg · 40px
نظام تصميم واحد
headline/md · 36px
نظام تصميم واحد
headline/sm · 32px
نظام تصميم واحد
العنوان الفرعيأساسي · روبيك
تسلسل ثانوي على مستوى المكوّن: بطاقات، لوحات، حوارات.
title/lg · 28px
تفاصيل الطلبية
title/md · 24px
تفاصيل الطلبية
title/sm · 20px
تفاصيل الطلبية
المتنثانوي · روبيك
قراءة مريحة ومستمرة للفقرات والأوصاف.
body/lg · 18px
الطباعة تبني التسلسل والوضوح في كل شاشة، بلا مجهود إضافي.
body/md · 16px
الطباعة تبني التسلسل والوضوح في كل شاشة، بلا مجهود إضافي.
body/sm · 14px
الطباعة تبني التسلسل والوضوح في كل شاشة، بلا مجهود إضافي.
التسميةثانوي · روبيك
توجّه التفاعل: الأزرار، حقول النماذج، التبويبات.
label/lg · 18px
إرسال الطلبية
label/md · 16px
إرسال الطلبية
label/sm · 14px
إرسال الطلبية
التعليقثانوي · روبيك
سياق مساند: نص مساعد، بيانات وصفية، طوابع زمنية.
caption/lg · 16px
آخر تحديث قبل ٥ دقائق
caption/md · 14px
آخر تحديث قبل ٥ دقائق
caption/sm · 12px
آخر تحديث قبل ٥ دقائق
أحادي المسافةأحادي
محتوى تقني بعرض حرف ثابت: شيفرة، قيم، معرّفات.
mono/lg · 16px
brand.primary = #1B79F5
mono/md · 14px
brand.primary = #1B79F5
mono/sm · 12px
brand.primary = #1B79F5

السلّم

أربع عشرة درجة (١٠٠ إلى ١٤٠٠)، الدرجة ٣٠٠ هي الأساس (١٦ بكسل). القيم تتقلص على الشاشات الأصغر: الدرجات ١٠٠ إلى ٣٠٠ ثابتة، وما فوقها ينخفض تدريجيا. المعاينة تعكس عرض شاشتك الحالي.

الدرجةLG/XLMDSMمعاينة
100121212أ
200141414أ
300أساس161616أ
400181816أ
500202018أ
600242220أ
700282624أ
800323028أ
900363430أ
1000403632أ
1100484236أ
1200564840أ
1300645648أ
1400726456أ

الرموز الأولية

القيم الخام التي تشير إليها الرموز الدلالية: العائلات، والأوزان، والتباعد الحرفي.

العائلات

ميركاتو تستخدم خطا واحدا للواجهة، روبيك، للعربية والإنجليزية في كل الأدوار. يملأ روبيك دوري الخط الأساسي والثانوي معا، فلا نحتاج خطين. عائلة أحادية المسافة منفصلة تحمل المحتوى التقني.

Rubikخط الواجهة · كل الأدوار (أساسي وثانوي)
أبجد هوز حطي كلمن
Monoأحادي المسافة · المحتوى التقني
0123 { } => 42

الأوزان

type.weight.regular · 400
طباعة
type.weight.medium · 500
طباعة
type.weight.semibold · 600
طباعة
type.weight.bold · 700
طباعة

التباعد الحرفي

الرمزالقيمةيستخدمه
type.letter-spacing.tight-1.2pxالعرض، العناوين
type.letter-spacing.slight-0.6pxالعناوين الفرعية، التسمية الكبيرة
type.letter-spacing.none0المتن، معظم التسميات
type.letter-spacing.loose0.1pxالمتن الصغير، التعليق المتوسط
type.letter-spacing.wide0.2pxالتعليق الصغير

التباعد والعربية

التباعد الحرفي السالب يفكك الحروف العربية المتصلة. لذلك يُحيّد التباعد إلى صفر في السياق العربي (RTL)، ويبقى للنص اللاتيني فقط.

الاقتران

اقترانات صالحة تحافظ على التسلسل ووضوح القراءة. لكل زوج علاقة وقاعدة تحكم استخدامه معا.

الاقترانالعلاقةالقاعدة
Display + Bodyمرساة + محتوىعرض مهيمن واحد، والمتن طبقة قراءة مساندة.
Headline + Bodyمرساة + محتوىالعنوان يفتح الكتلة، والمتن يواصل تدفق القراءة تحته.
Title + Bodyمرساة + محتوىالعنوان الفرعي مرساة المكوّن، والمتن يحمل الشرح.
Title + Labelمرساة + إجراءالتسمية تابعة: تعرّف ولا تنافس.
Body + Captionمحتوى + تعليقالتعليق يساند المتن، ولا يقدّم محتوى رئيسيا جديدا.
Label + Captionإجراء + تعليقالتعليق يوضّح التسمية بتفصيل لا تحمله وحدها.
Mono + Captionتقني + تعليقالتعليق يعطي سياقا للنص التقني، بوزن عادي للاثنين.

الاستخدام

لكل دور استخدام صحيح وآخر يجب تجنّبه. اختر الدور حسب وظيفة النص، لا حسب حجمه.

الدورافعلتجنّب
Displayمرة واحدة لكل عرض، وأعطه مساحة يقف فيها وحده.عناوين الصفحات أو التكرار على شاشة واحدة.
Headlineأعلى عنوان لمحتوى الصفحة، قصير ووصفي.داخل البطاقات أو الحوارات أو المكوّنات.
Titleالعنوان الافتراضي للبطاقات واللوحات والحوارات.عناوين الصفحات الكاملة.
Bodyالفقرات والأوصاف، مع احترام ارتفاع السطر.تسميات الواجهة أحادية السطر.
Labelالأزرار وحقول النماذج والتبويبات.المحتوى الوصفي متعدد الأسطر.
Captionالطوابع الزمنية والنص المساعد والتلميحات.أي محتوى يجب قراءته كمعلومة رئيسية.
Monoالشيفرة والقيم والرموز والمعرّفات.النثر أو العناوين أو النص التوضيحي.

إمكانية الوصول

يحدد الحجم والوزن تصنيف WCAG: نص كبير أو نص عادي، وهو ما يحكم عتبة التباين المطلوبة مع ألوان النص.

  • ٢٤ بكسل فأكثر بأي وزن ← نص كبير ← تباين ٣:١.
  • ١٨٫٦٧ بكسل فأكثر بوزن غامق حقيقي (٧٠٠) ← نص كبير ← تباين ٣:١.
  • ما دون ذلك ← نص عادي ← تباين ٤٫٥:١.

السميك (٦٠٠) لا يفي بإعفاء النص الكبير

الوزن السميك المستخدم في العرض والعناوين الفرعية والتسمية القوية هو ٦٠٠، لا ٧٠٠، فلا يستوفي إعفاء "١٨٫٦٧ بكسل بوزن غامق" في WCAG. العنوان الرئيسي القوي وحده يصل ٧٠٠ الحقيقي ويستوفي الإعفاء تحت هذا الحد.

الأدوار البنائية (العرض، العناوين، العناوين الفرعية) نص كبير بحكم حجمها. المتن والتسميات والتعليقات نص عادي وتتطلب تباينا أعلى. راقب دورين يتغير تصنيفهما على الشاشات الصغيرة: title/md وtitle/sm القوي.

الشيفرة للمطوّرين

التسليم الأساسي لطبقة الطباعة هو متغيّرات CSS المخصّصة. المكوّنات تستهلك رموز الأدوار الدلالية فقط (‎--type-{role}-{size}-{emphasis}-{prop}‎)، ولا تلمس السلّم ولا الرموز الأولية ولا قيم px خام أبداً. الطباعة ثابتة عبر الوضعين الفاتح والداكن؛ ما يتغيّر هو السلّم المتجاوب حسب عرض الشاشة، لا السمة.

سلسلة المتغيّرات

المتغيّرات تُبنى على ثلاث طبقات: مدرّج أوّلي، ثم رمز أوّلي، ثم رمز دلالي يُحلّ حسب الوضع. المكوّنات تستهلك الطبقة الدلالية فقط.

عقد CSS
/* Tier 1 — responsive scale step (one source, breakpoint-driven) */
--type-scale-300: 16px;   /* base step, constant across breakpoints */
--type-scale-1000: 40px;  /* at >=1024px; 36px on MD, 32px on SM */

/* Tier 2 — primitive tokens name the raw axes */
--type-size-1000: var(--type-scale-1000);
--type-weight-medium: 500;
--type-letter-spacing-tight: -1.2px;

/* Tier 3 — semantic role token; components consume THIS */
:root {
  --type-headline-lg-base-family: var(--type-family-primary);
  --type-headline-lg-base-weight: var(--type-weight-medium);
  --type-headline-lg-base-size: var(--type-size-1000);
  --type-headline-lg-base-line-height: var(--type-line-height-1200);
  --type-headline-lg-base-letter-spacing: var(--type-letter-spacing-tight);
}
/* No :root[data-theme="dark"] block: type does not change per mode.
   Only the Tier 1 scale shifts, and it shifts by viewport, not theme. */

جدول المرجع

الرمزمتغيّر CSSالقيمةالاستخدام
display.lg.strong.size--type-display-lg-strong-sizesize.1300 (48-64px)أكبر حجم عرض للأبطال
headline.lg.base.weight--type-headline-lg-base-weight500 (weight.medium)وزن عنوان الصفحة
title.md.strong.line-height--type-title-md-strong-line-heightline-height.700 (24-28px)ارتفاع سطر عنوان البطاقة
body.md.base.size--type-body-md-base-sizesize.300 (16px)حجم الفقرة الافتراضي
body.md.base.family--type-body-md-base-familyRubik (family.secondary)خط الفقرات
label.md.base.letter-spacing--type-label-md-base-letter-spacing0 (letter-spacing.none)تباعد التسميات والأزرار
mono.sm.base.family--type-mono-sm-base-familymono stack (family.mono)الشيفرة والمعرّفات

الاستخدام

مثال
.card-title {
  font-family: var(--type-title-md-strong-family);
  font-weight: var(--type-title-md-strong-weight);
  font-size: var(--type-title-md-strong-size);
  line-height: var(--type-title-md-strong-line-height);
  letter-spacing: var(--type-title-md-strong-letter-spacing);
}
.card-body {
  font-family: var(--type-body-md-base-family);
  font-weight: var(--type-body-md-base-weight);
  font-size: var(--type-body-md-base-size);
  line-height: var(--type-body-md-base-line-height);
}
/* Set all five props of a role together: the size alone is not the style. */

أخطاء شائعة

الخطأما يفسدالصواب
font-size: 16pxيفقد السلّم المتجاوب والوزن وارتفاع السطر للدورvar(--type-body-md-base-size)
var(--type-scale-1000)يتجاوز طبقة الأدوار الدلاليةvar(--type-headline-lg-base-size)
تطبيق حجم الدور وحدهيسقط العائلة والوزن وارتفاع السطر والتباعدطبّق خصائص الدور الخمس معاً
تباعد حرفي ثابت على نص عربييفكك اتصال حروف روبيك في RTLاعتمد على رمز الدور؛ RTL يحيّد التباعد إلى صفر

كيف تُستهلك

الرموز مصدرها واحد آلي القراءة (tokens.json في المهارة). حزمة @mercato/tokens تولّد منه: متغيّرات CSS (التسليم الأساسي)، وإعداد Tailwind جاهز، وكائن سمة مطبوع بـ TypeScript. أهداف المنصّات الأخرى (Style Dictionary وDTCG وiOS وAndroid وCompose) تتولّد من المصدر نفسه عند الطلب.

الاستيراد
// CSS variables (canonical) — import once at the app root
import "@mercato/tokens/css";

// Tailwind preset
// tailwind.config: { presets: [require("@mercato/tokens/tailwind")] }

// Typed theme object (JS/TS)
import { tokens } from "@mercato/tokens";