Opium.Fill - توحيد نظام الألوان من خلال عيون المبرمج

الوجه الأزرق ، ينمو الفطر من العين

مهلا. اليوم سأريكم مخطط الألوان الذي كنت أستخدمه منذ عامين. تم اختراعه للتخلص من عدد كبير من المتغيرات في CSS في مشروع إشكالي. ثم اتضح أن هذه المبادئ يمكن تطبيقها على أي مشروع تقريبًا.

بشكل عام ، سأحاول شرح كيفية استخدام المصممين للألوان في واجهة المستخدم وكيف يمكن "كتابة" كل هذا دون دفع المصممين إلى إطارات ضيقة. سأقدم أمثلة على التنفيذ على React JS (للمطور) وفي Figma (للمصمم). لا يحتوي المخطط على روابط لـ React و Figma ، ولكن فقط أكون أكثر دراية بها.

لا يوجد شيء ماكر وفريد ​​في المخطط (ربما مجرد اسم). جميع الأفكار معلقة في الهواء. يمكنك اعتبارها أفضل ممارسة للعمل مع الألوان في التطبيقات. Opium.Fill - هذه مبادئ عامة مقترنة بالحب لإعطاء أسماء لكل شيء.

يمكن استخدام النظام مع تصميم المواد.

المقالة مكتوبة لمطور الواجهة الأمامية وقليلا للمصمم.

جدول المحتويات


  1. ما هي المشاكل التي نحلها
  2. إيديولوجيا الأفيون
  3. الافتراضات الأساسية
  4. القالب رقم 1. ألوان الوالدين
  5. الكتلة رقم 2. الاستبدال
  6. قطعة رقم 3. التحولات
  7. انعكاس اللون
  8. باستخدام
  9. عندما لا يكون هناك أي معنى للاستخدام
  10. نقد
  11. استنتاج

جميع الصور قابلة للنقر

1. ما هي المشاكل التي نحلها؟


1.1. 50 ظلال من الرمادي


ربما الجميع على دراية بهذه المشكلة. في معظم الأحيان يمكن رؤيته على ظلال الرمادي ، ولكن مع ألوان أخرى (على سبيل المثال ، أزرق) يحدث هذا. أين نضع ، أين نستخدم؟ حتى المصممين مرتبكون بشأن هذا.

1.2. يلعب المصمم بالورود


في بعض الأحيان ، يمكن للمصمم أن يقدم لونًا جديدًا ببساطة لأن اللون القديم متعب ومكره (أو لأنه غاب عن ماصة). لا حرج في هذا ؛ لست بحاجة لإلقاء اللوم على المصمم. لكن المشكلة هي أن المطور لا يدرك دائمًا التغييرات.

في هذه الحالة ، تتراكم العديد من متغيرات الألوان. بعد كل شيء ، لا يفهم المطور ما إذا كان من الضروري إزالة الألوان القديمة ، أو ما إذا كانت لا تزال تستخدم في مكان ما. من بين المشاريع التي رأيتها ، الرقم القياسي هو 273 متغيرًا للألوان فقط.

يمكن أن يحدث موقف مماثل في جميع المشاريع حيث يتم العمل على Agile ويتغير التصميم بالتزامن مع التطوير.

1.3. الموضوعات الليلية وتصميم العلامات التجارية


تنبع هذه المشكلة من المشكلة السابقة. إذا كان المشروع يحتوي على العديد من المتغيرات المضطربة ، فمن الصعب إدخال مخططات ألوان جديدة.

على سبيل المثال ، أنت تعمل على إنشاء CRM. ويمنح CRM الخاص بك العميل فرصة لضبط نظام ألوانه حسب هوية الشركة للعميل. إذا لم يكن لديك نظام ألوان واضح ، فسيكون من الصعب القيام بذلك.

ولكن ماذا لو كنت بحاجة إلى مظهر داكن للتطبيق؟ ثم تؤدي الجملة "Vasily ، لنأخذ 273 متغيرًا وننظمها" إلى حقيقة أن Vasily كسر النموذج في الخطوة العاشرة لملء الطلب ، وخاض معركة مع المطور من القسم المجاور وأصبح مجنونًا بعد أسبوع.

2. أيديولوجية الأفيون


2.1. لا تزعج المصمم للعمل


تم اختراع Opium.Fill من أجل "فك تشفير" التصميم وليس تحميل المصمم. لا يحتاج المصمم إلى معرفة وجود الأفيون ، املأ من أجل القيام بكل شيء وفقًا للمخطط.

يجب عدم فرض مخطط ألوان على المصمم ومن الأفضل الانتظار حتى ينتهي من رسم المفهوم الرئيسي للتطبيق. فقط بعد ذلك ، من المفيد أن تظهر له ما إذا كان هناك شيء لا يتناسب مع نظام الألوان ، وتوضيح ما إذا كان يمكن تصحيح هذه الأماكن. في 9 من أصل 10 أسئلة من هذا القبيل ، يقول المصممون "Pf ، هذه ليست مشكلة ، دعنا نستبدلها" أو "أوه ، وهذا بشكل عام لا أستطيع ، شكرًا لك على الملاحظة".

2.2. تحديد الألوان "بالعين"


وفقًا للجدول الدوري ، من الممكن التنبؤ بوجود عناصر لم يتم اكتشافها بعد. لهذا ، تم تخصيص الخلايا الفارغة مسبقًا. سنستخدم هذا المبدأ لنظام الألوان لدينا. اصنع طاولة واترك بعض الخلايا فارغة. ولكن بالنسبة لبقية المعلمات ، ستفهم حتى بالعين اللون الذي يجب أن يكون هناك.

الجدول الدوري


2.3. لا تثبط عزيمتك إذا لم يتضح كل شيء


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

3. الافتراضات الأساسية


3.1. لكل لون - زوج


نعتقد أن كل لون له "تجسيد". الأول مشبع (قوي مشروط). والثاني هو غير مشبع (ضعيف بشكل مشروط). إذا رأينا اللون الأزرق ، فبالإضافة إلى كونه أزرق ، يجب علينا تعريفه على أنه قوي أو ضعيف. هل هي مشبعة أم غير مشبعة؟

3.2. اقسم الألوان حسب الوظيفة


نسيان "السماء الزرقاء" ، "الذهب" ، "الأسود النفاث" وما شابه في أسماء الألوان. يجب أن يعكس اسم اللون وظائفه ، وليس ست عشريته. نعمل الآن مع الأسماء التالية: الأساس ، الإغماء ، اللهجة ، المكمل ، الناقد ، التحذير ، النجاح.

3.3. ثلاث كتل


بلوك رقم 1 هو الأهم. الكتلة رقم 3 هي الأكثر أهمية. أدناه سوف أصف كل من الكتل. هذا الفصل ضروري حتى تقل الألوان أهمية لرسم الرسم بحيث يصرف انتباهنا بشكل أقل.

4. كتلة رقم 1. ألوان الوالدين


4.1. الأسماء


العودة إلى أسماء الألوان الجديدة لدينا. قاعدة ، خافت ، لهجة ، مكمل ، ناقد ، تحذير ، نجاح. لنأخذها واحدة تلو الأخرى.

يتمركز


إنه أسود وأبيض. أو تلك الألوان التي تشبهها بدرجة من الارتباك. فهي أساسية للنص والخلفية.

ألوان أبيض وأسود


اغمى عليه


لذلك نسمي ظلال الرمادي. بعض نص الخلفية أو الخلفية الرمادية باهتة. يتم تضمين الأسود مع الشفافية (إذا كان يُنظر إليه على أنه رمادي) هنا أيضًا.

تمت إضافة لون رمادي


اللهجة


هذا هو اللون الرئيسي للشركة أو اللون الذي يبرز أهم عناصر الواجهة. على سبيل المثال ، إذا نظرت إلى البنوك الروسية ، فعندئذ: Sberbank أخضر ، VTB أزرق (أو أحمر ، كما ترى) ، Tinkoff أصفر ، Alpha أحمر. للراحة ، دعنا نشير إلى ظلال اللون الأزرق في طاولتنا تحت أكسنت.

تمت إضافة اللون الأزرق


تكملة


هذا لون تمييز اختياري. ليس لدى الجميع. دعونا نلقي نظرة على Airbnb - أود أن أقول أنها خضراء داكنة: لراحتنا ، سأشير إلى المكمل باللون الأرجواني ، سيكون مفيدًا لنا في أمثلة التصميم التي سأعرضها أدناه.

تمت إضافة اللون الأرجواني




شاشة Airbnb


حرج


لون لتسليط الضوء على الأخطاء وغيرها من المعلومات الهامة للغاية. عادة شيء أحمر.

تمت إضافة اللون الأحمر



تحذير


إذا كنت ترغب في مشاركة معلومات مهمة مع أخرى ، وهي مهمة أيضًا ، ولكن ليست قاتلة ، فإن التحذير مطلوب. عادة ما يكون هذا نوعًا من الأصفر البرتقالي.

تمت إضافة اللون البرتقالي


نجاح


في بعض الأحيان يكون الإجراء الناجح كافيًا لإظهار لهجة اللون. ولكن إذا كانت Accent ذات لون غير عادي (أحمر) أو لسبب ما ترغب في تقديم لون جديد ، فإليك النجاح. على الأرجح ، سوف تتحول إلى خضرة. تم إصدار 7 أسماء ألوان أساسية. ليس من الضروري استخدام كل منهم. وبالطبع ، يمكنك استكمال المجموعة إذا كان لديك سبب جدي لذلك.

وأضاف الأخضر




4.2. عائلات الألوان


ربما لاحظت بالفعل أنه عندما أتحدث عن اللون ، لا أشير إلى معنى محدد ، لكنني أستخدم الكلمات "ظلال رمادية" ، "شيء أحمر" ، "مخضر" ، وما إلى ذلك. دعونا نقدم مفهوم "عائلة الألوان".

كما قلت أعلاه ، نقسم الألوان في أزواج. مجرد لهجة لا يمكن أن توجد. تأكد من الحصول على لهجة قوية وضعيفة. هذان هما دائمًا اللونان اللذان يشكلان أساس العائلة. مثل أبي وأمي. دعونا نتخيل لفترة أن ألواننا هي زوجين. لنفترض أنه لا يهم ما هو جنس الوالدين ، فالشيء الرئيسي هو أن أحدهما قوي (قوي) والثاني - ضعيف (ضعيف). وسنقبل أيضًا أن القوة والضعف من السمات الشخصية ، مثل المزاج السريع والهدوء.

غادر قوي ، ضعيف يمين




حتى هنا. أبي حار جدا. غالبًا ما يكون عصبيًا في الاختناقات المرورية وركل القنافذ في الغابة. أمي هادئة. تعمل كطبيبة نفسية وتلعب البوكر. هذا هو أساس مخطط الألوان لدينا.

تم تقسيم الألوان الأساسية بالفعل (أسود وأبيض). قسم الباقي إلى عائلات:

تنقسم جميع الألوان إلى 2. أحدها مشبع ، والثاني بالكاد ملحوظ.


5. الكتلة رقم 2. الاستبدال


5.1. سياق الكلام


ألق نظرة على Bitbucket. ثم اعتبر المصمم أن اللون الأزرق ، الموجود في الجزء الخلفي الأيسر ، أغمق قليلاً للنص. وهكذا قام بتلميعه. الآن كل النص ، على الرغم من أنه يبدو أزرق (مثل قائمة جانبية) ، في الواقع له معنى مختلف في ست عشري: أي لون له سياق يستخدم فيه. يمكن تطبيق اللون على الخلفية والنصوص والخطوط والرموز. هذا ما نسميه السياق. في أي من هذه الحالات ، قد يلزم تغيير اللون بطريقة ما ، بحيث يناسب السياق بشكل أفضل. نسمي هذا التغيير البديل . نختار مكانًا في الجدول للاستبدال. كل سطر جديد هو سياق يمكننا إضافة بدائل له. بشكل افتراضي ، ستكون هناك خلايا فارغة:

شاشة Bitbucket






قائمة الألوان نفسها مقسمة إلى خطين ، ولكن تم إضافة خطوط إضافية تحتها.  سوف نسميها طاولة.


أضفنا خلايا استبدال للألوان القوية فقط. توضح الألوان الضعيفة في المربع رقم 2 كيف يبدو ذلك اللون على خلفية داكنة. في حين أننا لن نلمسها ، ولكن في النهاية سنعود إليها.

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

5.2. مولع ب


هناك نوع خاص آخر من الاستبدال - استبدال التدرج. ندعو التدرجات كلمة Fancy - سياق "مناسبة خاصة". الهوى واحد للجميع. لا يمكن أن يكون هناك تدرج منفصل للنص ، والرموز ، وما إلى ذلك (نظريًا ، يمكن أن يكون كذلك ، ولكن لا يستحق الأمر جعل الجدول أكثر صعوبة بسبب مثل هذه الحالة النادرة). دعنا نسلط الضوء على المكان أسفل الجدول لـ Fancy: لقد استعدنا للتغييرات اعتمادًا على السياق ، 100٪ من المصممين يفعلون ذلك. الخلايا الفارغة تعطينا بعض المرونة. في بعض الأحيان يجب إجراء الاستبدالات في كثير من الأحيان ، وأحيانًا أقل. إذا ظلت الكتلة رقم 2 فارغة تقريبًا ، فهذا أمر طبيعي (يحاول المصمم أيضًا تقليل عدد الألوان).

تمت إضافة سطر آخر إلى الجدول




6. كتلة رقم 3. التحولات


في بعض الأحيان يحتاج اللون إلى قتامة أو تفتيح طفيف. ولكن هذا ليس بسبب تغير السياق ، ولكن ببساطة أن كل لون له حالتان إضافيتان: "أغمق" و "أفتح". غالبًا ما يستخدم المصممون هذا لإجراء تفاعل مع تمرير الماوس. نسمي هذا تغيير اللون Shift. يمكنك عمل تغيير لأعلى (أغمق) أو لأسفل (أفتح). يبدو الجدول الفارغ الآن كما يلي:

أعلاه لون داكن.  ضوء لأسفل




الجدول ، ولكن كل لون يحتوي الآن على خلايا إضافية في الأعلى والأسفل


7. انعكاس اللون


عمدا لم أتحدث عنه على الفور ، لأنه نادر ولا يحتاجه الجميع. في بعض الأحيان ترغب في كتابة شيء ما على ركيزة داكنة ، ولكن لا يتم تكييف جميع الألوان لذلك. دعونا نلقي نظرة على مثال لأحد تصميماتنا: يوجد نص على لوحة زرقاء ، يُنظر إليه ذاتيًا على أنه خافت. وهناك دوائر تحت الأيقونات سأحددها أيضًا في عائلة Faint.  إذا كان القالب خفيفًا ، فسيكون كلا هذين العنصرين على الأرجح رماديًا فقط. لكن يموت الظلام. لا توجد ألوان مطابقة في جدولنا ، يمكنك إضافتها. لهذا فقط ، تحتاج إلى عمود Weak في المربع رقم 2. لهذا التخطيط ، يبدو الجدول كما يلي:

تصميم التطبيقات المصرفية عبر الهاتف المحمول








في الجدول ، يتم ملء جزء آخر من الخلايا ، وتبقى الأغلبية فارغة


يرجى ملاحظة أنه الآن سيتم رسم الخطوط باستخدام Faint Strong أخف وزناً ، وهذا ينعكس أيضًا في الجدول. كما تمت إضافة تدرجات اللكنة والتحولات للوالد Faint (فهي في متناول اليد لرسم حقل بحث).
ملحوظة. لا حاجة للخلط بين الانقلاب والموضوع الليلي. السمة الليلية لها العديد من الفروق الدقيقة في اللون. لذا من الأفضل إنشاء جدول منفصل له.

8. استخدم


8.1. CSS ، رد فعل


دعنا نحاول رسم مثل هذا الزر ، في CSS النقي ، يمكن تنظيم المتغيرات على النحو التالي:

زر




:root {
  /*   */

  --base-strong: #000;
  --base-weak: #fff;

  --faint-strong: #8994A6;
  --faint-weak: #F6F8FB;

  --accent-strong: #0070FF;
  --accent-weak: #EBF4FF;

  --complement-strong: #8889E2;
  --complement-weak: #EEECFD;

  --critic-strong: #F74545;
  --critic-weak: #FDEDED;

  --warning-strong: #F8AE4F;
  --warning-weak: #FCEBCF;

  --success-strong: #27AE60;
  --success-weak: #DEF8E9;

  /* C   */
  --faint-strong-down: #A5ADBB;
  --faint-weak-up: #ECEEF5;
}

/*  */
/*      */

.back {
  --faint-weak: rgba(255, 255, 255, 0.15);
}

.text {
  --faint-weak: rgba(237, 241, 247, 0.5);
}

.line {
  --faint-strong: #EDEFF2;
}

.icon {}

.fancy {
  --accent-strong: linear-gradient(132deg, #3F89EE, #5447FF);

  /*  */
  --accent-strong-down: linear-gradient(132deg, #448FF3, #594CFF);
}


/*   */

.button {
  background: var(--accent-strong);
  color: var(--base-weak);
  /*    */
}

.button:hover {
  background: var(--accent-strong-down);
}

وبعد ذلك ، لإنشاء زر في HTML ، ستحتاج إلى إضافة هذا الترميز:

<button class="fancy button">
  <div class="text">
    Hello Button
  </div>
</button>

لا توجد وسيلة في CSS لتتبع السياق بشكل أصلي ، ثم عليك تحديده يدويًا من خلال الفئات. يمكنك بالطبع محاولة فهم سياق العلامات المستخدمة ، ولكن هذا القرار ليس للجميع.

على React ، قد يبدو الرمز كما يلي:

class Button extends React.Component {
  render() {
    return (
      <Box fill="accentStrong" fancy className="button">
        <Font fill="baseWeak">Hello Button</Font>
      </Box>
    )
  }
}

//   
class Button extends React.Component {
  render() {
    return (
      <Box.Accent fancy className="button">
        <Font>Hello Button</Font>
      </Box.Accent>
    )
  }
}

// Box  Font —    ,     

//        Strong  Weak (      )
//       
//      

//    ,   
// ,    
//     ,     Opium.Fill
//       

//   'button'     
//      

لكي لا تكون مرتبطًا بـ CSS (لا تقم فقط بإنشاء تطبيقات للمتصفح) ، يمكن تخزين متغيرات الألوان في json:

{
  "color": {
    "parents": {
      "baseStrong": "#000",
      "baseWeak": "#fff",

      "faintStrong": {
        "default": "#8994A6",
        "shiftDown": "#A5ADBB"
      },
      "faintWeak": {
        "default": "#F6F8FB",
        "shiftUp": "#EDEFF2"
      },

      "accentStrong": "#0070FF",
      "accentWeak": "#EBF4FF",

      "complementStrong": "#8889E2",
      "complementWeak": "#EEECFD",

      "criticStrong": "#F74545",
      "criticWeak": "#FDEDED",

      "warningStrong": "#F8AE4F",
      "warningWeak": "#FCEBCF",

      "successStrong": "#27AE60",
      "successWeak": "#DEF8E9"
    },

    "context": {
      "back": {
        "faintWeak": "rgba(255, 255, 255, 0.15)"
      },

      "text": {
        "faintWeak": "rgba(237, 241, 247, 0.5)"
      },

      "line": {
        "faintStrong": "#EDEFF2"
      },

      "icon": {},

      "fancy": {
        "accentStrong": {
          "default": "linear-gradient(132deg, #3F89EE, #5447FF)",
          "shiftDown": "linear-gradient(132deg, #448FF3, #594CFF)"
        }
      }
    }
  }
}

8.2. مخطط الألوان في Figma


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

قائمة ألوان Figma


9. عندما لا يكون من المنطقي استخدام النظام


9.1. مشروع تصميم غير عادي


تم تصميم Opium.Fill بحيث تكون الألوان الأساسية بالأسود والأبيض (أو تلك التي تشبه ذاتيًا إلى حد الالتباس). إذا كنت بحاجة إلى كتابة الكثير من اللون الأزرق والأحمر أو استخدام مجموعة متنوعة من الألوان باستمرار في واجهة واحدة ، فإن Opium.Fill ليس الحل الأفضل.

9.2. مشروع صغير


بالنسبة لمشروع صغير ، من غير المنطقي إدخال نوع من النظام. سيكون من الأسرع إلقاء جميع ألوان العداد في المتغيرات عندما تصبح متاحة ، ولكن من الأفضل استخدام القائمة المستلمة من المصمم. وأحيانًا يكون كل شيء بسيطًا جدًا بحيث يمكنك تعيين الألوان مباشرة في الأنماط حتى لا تخلط بينك.

9.3. أنت تستخدم بالفعل شيئًا آخر


إذا كان فريقك يستخدم التصميم متعدد الأبعاد (وليس فقط) وكان الجميع سعداء بكل شيء ، فلا فائدة من تغيير أو تعديل ما يصلح.

10. النقد


فيما يلي بعض المشكلات التي يتم التعبير عنها بشكل متكرر مع Opium.Fill. سأحاول الإجابة على بعض المطالبات. يمكنك اعتبار هذا موضوعًا مفتوحًا. إذا واجه شخص ما صعوبات ، فسأكون سعيدًا إذا شاركت معي.

10.1. لا يزال هناك الكثير من المتغيرات


قام القارئ الفضولي بالفعل بحساب أن لدينا خلايا لـ 252 متغيرًا. ما هو أفضل مما كان في البداية؟

يمكنني أن أؤكد لكم أن جميع هذه الألوان لن يتم استخدامها في نفس الوقت. هناك مكان لهم ، لكن هذه خلايا فارغة ، مثل العناصر غير المكتشفة في الجدول الدوري. في المشاريع الحقيقية ، نجحنا في "فتح" ما يصل إلى 30 عنصرًا.

إذا تراكمت أكثر من 50 قطعة في طاولتك ، فمن المحتمل أن هناك خطأ ما ولا يساعد المخطط ، للأسف ، في إصلاحه.

10.2. لملء الرسوم البيانية ، عليك توسيع الجدول بشكل كبير.


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

10.3. لماذا تضاف البدائل إذا كان من الممكن نظرياً تغطية جميع الاحتياجات بالتحولات؟


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

التحولات مفيدة للزهور النادرة ، فمن الأفضل ملؤها في الحالات:

  1. معالجة الأحداث (مثل Haver أو Click)
  2. عندما تحتاج إلى مجموعة إضافية من ظلال الرمادي

استنتاج


ظهر المفهوم في بداية عام 2018 ولم يتغير كثيرًا منذ ذلك الحين. في مؤسستي المفضلة ، قمنا بتطبيق Opium.Fill في كل من التصميم والتطوير. في بعض الأحيان كان من الضروري تنفيذ التصميم الذي قامت به فرق أخرى (من منظمات أخرى) ، لكن هذا لم يتعارض مع استخدام نظام الألوان ، واجهنا صعوبات ، ولكن تمكنا من حلها. وقد دخلت بعض المشاريع حيز الإنتاج بالفعل.

إذا كان موضوع إدارة الألوان في مشروع قريب منك ، فقد يكون من المثير للاهتمام أن تقرأ عن خيارات أخرى: تصميم المواد ، تصميم Atlassian

شكرا


توصلنا إلى مخطط وكتبنا مقالًا - دينيس إليانوفسكي ، فريق JTC.
توضيح في الرأس - إيلينا إيفيموفا

All Articles