GH GambleHub

واجهة البطاقة والكتل المرئية

1) لماذا البطاقات

تحزم البطاقات كيانًا (لعبة، تطابق، عمل، مقالة) بسمات وأفعال رئيسية. بطاقة جيدة:
  • مسح ضوئي سريع،
  • يعطي معلم CTA واحد،
  • يتكيف مع مختلف الحاويات/الأعمدة،
  • يمكن التنبؤ به في السلوك (التحليق، الضغط، التركيز، قائمة السياق).

2) تشريح البطاقة

التكوين الأدنى:

1. منطقة الوسائط (الغلاف/الشعار/المعاينة، 16: 9/4: 3/1: 1).

2. رأسية (1-2 خطوط مقطوعة).

3. البيانات الوصفية (العنوان الفرعي، العلامة/الفئة، المزود، الوقت).

4. شارات الحالة (جديدة، حية، ترقية، تصنيف).

5. CTA/الإجراءات السريعة (زر أو أيقونات).

6. النص الثانوي (سطور قصيرة، 2-3 كحد أقصى).

7. عناصر التحكم (المفضلة،... (.

التسلسل الهرمي: media → header → CTA → meta → secondary. يتم إخفاء أو عرض الإجراءات المدمرة في القائمة.

3) الشبكات والتخطيطات

الشبكة (عمود ثابت): 2-6 أعمدة ؛ ■ عن طريق الملاءمة التلقائية/التعبئة التلقائية.
البلاط المستجيب: «minmax (240 px، 1fr)» - تنمو البطاقات بالضبط إلى الحدود.
البناء/الطول المتفاوت: حذر ؛ ضمان ترتيب التركيز وسهولة القراءة.
القائمة (على التوالي): عندما يكون الاقتصاد الأفقي والفرز مهمين.

css
.cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px,1fr));
gap: 16px;
}
.card {
border-radius: 12px;
background: var(--bg-elevated);
box-shadow: var(--elev-2);
display: grid;
grid-template-rows: auto 1fr auto;
overflow: hidden;
}
.card__media { aspect-ratio: 16/9; object-fit: cover; }

4) الكثافة والإيقاع

الهوامش/المسافات: داخل 12-16 px ؛ بين الوحدات 8-12 px.
ارتفاع الصف: 1. 3–1. 5; الخطوط: العنوان 16-18 px، meta 12-14 px.
قص النص: «مشبك الخط: 2-3» ؛ النص الكامل الإلزامي في الأدوات/التفاصيل.

5) الدول والتفاعل

Hover/Focus/Active: shadow/highlight، ولكن بدون تخطيط «قفزات» ؛ «: التركيز مرئي» دائما مرئي.
قابلة للاختيار: صندوق التحقق/الإطار ؛ لا ينبغي الخلط بينه وبين بطاقة مرجعية.
مضغوط: انخفض بنسبة تصل إلى 98٪ + ظل لأسفل (≤ 120 مللي ثانية).
مشغول/تحميل: هيكل عظمي، وليس «فارغ».

css
.card:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.card:hover { box-shadow: var(--elev-3); transform: translateY(-1px); transition: box-shadow. 16s, transform. 16s; }

6) الصور ووسائل الإعلام

نسبة الارتفاع إلى الارتفاع ثابتة ؛ في قوائم الألعاب - 16:9 أو 4:3.
التحميل الكسول: "التحميل =" الكسول "+" فك التشفير = "async" ".
عنصر عضوي/هيكل عظمي مع لون ملصق سائد.
خطأ التحميل: صورة وهمية + أيقونة إيقاف تشغيل الصورة.

html
<img class = "card __ media" src ="..." alt = "Game name" loading =" lazy" onerror =" this. src='/fallback. png'">

7) الشارات والعلامات

قصير (1-2 كلمة): جديد، مباشر، -20٪، أفضل 10.
لا يمكنك الاعتماد فقط على اللون - أضف أيقونة/نص.
الموقع: يسار وسائط الإعلام العليا ؛ عدة - في كومة بفجوة 4-6 px.

css
.badge { display:inline-flex; gap:6px; align-items:center; padding:4px 8px; border-radius:8px; font-size:.75rem; }
.badge--live { background: var(--bg-danger); color: var(--on-danger); }

8) CTA والعمل السريع

واحد أساسي لكل بطاقة (على سبيل المثال، «اللعب»، «الرهان»).
أيقونات مساعدة (مفضلة، مشاركة،...) - عن طريق التحليق/التركيز.
مدمر - من خلال التأكيد أو التراجع عن اللوحة.

html
<div class="card__actions">
<button class="btn btn--primary">Играть</button>
<button class =" icon" aria-label = "Add to Favorites" title =" B Favorites "> </button>
<button class="icon" aria-haspopup="menu" aria-expanded="false">⋯</button>
</div>

9) التوافر (A11y)

بطاقة الرابط بالكامل هي "<a>" مع "aria-label' واضحة، وإلا: العنوان مثل الرابط، والباقي ثابت.
ويتطابق ترتيب علامة التبويب مع الصورة المرئية ؛ حلقة التركيز مرئية.
'1' الصور 'البديلة' ؛ decorative - «aria-hidden =» true «».
بالنسبة للحالات، استخدم «الدور» = «الحالة »/« aria-live» = «مهذب».
تباين النص والشارة ≥ AA ؛ المعنى ليس فقط اللون.

10) الأداء

كسل تحميل الوسائط والقوائم ؛ التثبيت أو التهاب اللانهاية التمرير مع مراقب الحراسة.
افتراضية للشريط/النواتج اللانهائية (عناصر ± 10k).
تقليل التدفق: تحريك فقط «التحويل/التعتيم».
اعرض بطاقات بهياكل عظمية واستبدلها بمحتوى بعد تحميل البيانات.

11) هياكل عظمية، أخطاء، فارغة

ويكرر الهيكل العظمي هيكل البطاقة (وسائط/نصوص/زر)، دون وميض عدواني ؛ النظر في «prefers-remove-movement».
حالة الخطأ: icon + short text («Failed to load game») + Retry button.
الحالة الفارغة: أيقونة/رسم توضيحي، شرح، «ما التالي» (مرشح/بحث/اشتراكات).

12) إدارة المحتوى

القطع: «مشبك الخط» + أداة صريحة.
الأرقام/المجاميع الطويلة: أرقام الجدول: 'خط-متغير-رقم: جدول-nums; '.
التوطين: احتفظ بعرض 20-30٪ للملصقات الطويلة.
دعم RTL: قلب الشارات/الأيقونات والمحاذاة.

13) الموضوع المظلم والتباين

الظلال أضعف، استخدم الحدود («1px») بشفافية.
دعم AAA للخطوط الصغيرة ؛ تجنب الومضات.
الوسائط مظلمة بحجاب رقيق (تراكب 8-12٪) لجعل النص قابلاً للقراءة.

css
.theme-dark. card { background: var(--bg-elevated-dark); box-shadow: var(--elev-1-dark); }
.theme-dark. card__media::after { content:""; position:absolute; inset:0; background: rgba(0,0,0,.12); }

14) الفرز، المرشحات، الاستعداد

لوحة المرشح العلوي/الجانبي ؛ والنتيجة هي شبكة من البطاقات.
التثبيت مرئي ؛ التمرير اللامتناهي - فقط مع «العودة إلى القمة» والحفاظ على المركز.
المرشحات لا «تعيد ضبط» التمرير ؛ يطبق بسرعة (≤ 100 مللي ثانية) أو بمؤشر.

15) تفاصيل iGaming

15. 1 بطاقة لعبة (فتحة/جدول)

الوسائط: ملصق 16:9، شعار المزود.
البيانات الوصفية: المزود، RTP، التقلب، الفئات (- غنية بالمعلومات فقط، دون وعود بالفوز).
الشارات: جديد، مشهور، بطولة، جائزة كبرى.
CTA: "Play" + "Demo. "سياق "18 +" واللعبة المسؤولة مرئية.

15. 2 بطاقة المطابقة/المعامل

Live badge Live; الوقت/الفترة.
المعاملات الرئيسية (2-3) مع التحليق/الضغط الفوري والتراجع الآمن (إذا سمح).
تحديثات خالية من الوميض ؛ عند تغيير المسار - إضاءة أنيقة.

15. 3 بطاقة البطولة/الحدث

التواريخ، مجموعة الجوائز، القواعد (الرابط).
الحالة (التسجيل مفتوح/مغلق، قيد التنفيذ).
CTA «انضم»، «القواعد» ؛ تقدم المشاركة (نقاط/مكان).

16) أنتيباترن

البطاقة بأكملها قابلة للنقر + داخل الروابط الثانوية (مصائد التركيز/النقر).
اثنين من CTAs الأولية القريبة ("Play" و "Buy Bonus') - مسابقة الاهتمام.
لا توجد عناصر/هياكل عظمية → شبكة القفز (CLS).
تأثيرات متلألئة لا نهاية لها ؛ رسوم متحركة/ضبابية الظل (باهظة الثمن).
بيانات وصفية عمودية باللون الرمادي الصغير على الرمادي (لا تباين).
الشارات التي تنقل المعنى فقط باللون.

17) رموز نظام التصميم (مثال)

json
{
"card": {
"radius": 12,
"gap": 12,
"mediaRatio": "16/9",
"px": "12 12 12 12",
"shadow": { "rest": "var(--elev-2)", "hover": "var(--elev-3)" }
},
"badge": { "radius": 8, "px": "4 8", "icon": 14 },
"grid": { "gap": 16, "min": 240, "max": 1 },
"motion": { "hoverMs": 160, "pressMs": 100, "fadeMs": 160 },
"a11y": { "contrastAA": true, "focusRingWidth": 2, "focusRingOffset": 2 }
}

18) مقتطفات

رد الفعل: بطاقة عالمية

tsx type CardProps = {
title: string;
subtitle?: string;
mediaUrl?: string;
badges?: string[];
onPrimary?: () => void;
primaryLabel?: string;
onFav?: () => void;
children?: React. ReactNode;
};
export default function Card({
title, subtitle, mediaUrl, badges=[], onPrimary, primaryLabel='Открыть', onFav, children
}: CardProps){
return (
<article className="card group focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2">
<div className="relative">
{mediaUrl? <img className="w-full aspect-[16/9] object-cover" src={mediaUrl} alt={title}/>: <div className="aspect-[16/9] bg-neutral-200"/>}
<div className="absolute top-2 left-2 flex gap-1">
{badges. map(b => <span key={b} className="badge">{b}</span>)}
</div>
</div>
<div className="p-3 grid gap-2">
<h3 className="text-sm font-semibold line-clamp-2" title={title}>{title}</h3>
{subtitle && <p className="text-xs text-neutral-500 line-clamp-2">{subtitle}</p>}
{children}
<div className="flex items-center gap-8">
{onPrimary && <button className="btn btn--primary" onClick={onPrimary}>{primaryLabel}</button>}
{onFav && <button className="icon opacity-0 group-hover:opacity-100" aria-label="В избранное" onClick={onFav}></button>}
</div>
</div>
</article>
);
}

حراسة التمرير اللانهائية

js const sentry = document. querySelector('#sentry');
const io = new IntersectionObserver(entries=>{
if(entries. some(e=>e. isIntersecting)) loadMore();
}, { rootMargin: '200px' });
io. observe(sentry);

19) المقاييس والتجارب

CTR primary-CTA и Time-to-Click.
تمرير العمق → انقر: انقر فوق «فوق المنعطف «/» أسفل المنعطف ».
البطاقة → عرض التفاصيل → التحويل.
رؤية الشارات وتأثيرها على CTR.
وقت رؤية الهيكل العظمي и CLS.
ألف/باء: حجم البطاقات، وكمية البيانات الوصفية، ورؤية الإجراءات السريعة، ونوع الشبكة (القائمة/الشبكة).

20) قائمة QA المرجعية

توافر

  • حلقات التركيز مرئية ؛ ترتيب علامة التبويب منطقي.
  • النصوص البديلة و 'aria-label' صحيحة ؛ شارات الحالة مع النص.
  • تباين النص/الخلفية ≥ AA.

السلوك

  • اتفاقية أولية واحدة ؛ الإجراءات السريعة لا تتداخل مع السيناريو الرئيسي.
  • تحوم/اضغط/مجموعة مختارة قابلة للتمييز ؛ قائمة السياق تعمل.
  • فارغة/أخطاء/هياكل عظمية صحيحة ؛ هناك ريتري.

الأداء

  • التحميل الكسول لوسائط الإعلام ؛ لا توجد قفزات حادة في التخطيط.
  • فرضنة القوائم الكبيرة ؛ الرسوم المتحركة «التحويل/التعتيم».

الشبكة

  • «minmax (240px، 1fr)» و «الفجوة» قابلة للتكيف ؛ البناء لا يكسر ترتيب التركيز/القراءة.
  • RTL/التوطين لا «يكسر» المحاصيل والشارات.

21) التوثيق في نظام التصميم

Компоненты: "Card'،" GameCard'، "MatchCard'،" TournamentCard'، "StatusBadge"، "SkeletonCard'.
الرموز: نصف القطر/الظلال/المسافات البادئة/الطبقات، ألوان الشارة، الرسوم المتحركة.
الأنماط: «One CTA»، «Skeleton بدلاً من spinner»، «التمرير اللانهائي + الحفاظ على الوضع».
افعل/لا تقم بالمعرض: بطاقة محملة أكثر من اللازم مقابل الحد الأدنى، «بطاقة كاملة قابلة للنقر» مقابل عناصر صريحة.

موجز موجز

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

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.