Handover · Predictions (Tips)

Κάρτα πρόγνωσης: τίτλος επιλογής, δύο γραμμές ομάδων με ώρα ή σκορ, chip διοργάνωσης και ένα odds CTA σε υποδοχή. Πηγή: Figma component set «Tip» 4036:171711, σελίδα «Tips» 8328:288198. Και οι 10 παραλλαγές αποδίδονται στο ακριβές ύψος του frame τους.

v1.4.0status: ready prefix .prd11 variantsodds-cta >= 4.0.0 Jira: —

Assets που χρησιμοποιούνται

Όλα τα αρχεία βρίσκονται στον φάκελο Assets/ δίπλα σε αυτή τη σελίδα. Κάθε chip ανοίγει το αρχείο απευθείας.

Εμβλήματα ομάδων

Διοργανώσεις & άθλημα

Εικονίδια αποτελέσματος

Λογότυπα στοιχηματικών (από το odds-cta)

Και οι 10 παραλλαγές, ζωντανά

Κάθε specimen έχει το πλάτος του frame του στο Figma, ώστε τα ύψη να είναι άμεσα συγκρίσιμα.

Mobile · open · single · CTA V5 (Figma 8329:310515)
Mobile · lost · single · CTA V5 (Figma 8329:310565)
Mobile · won · single · CTA V5
Desktop · open · single · CTA V4 (Figma 8329:310619)
Sidebar · open · CTA V4 full-width 40px (Figma 8329:310670) — Description layer is hidden in Figma
Mobile · open · bet builder · CTA V1 bare (Figma 8329:310752)
Mobile · open · outright · title + league + label only (Figma 4036:171722)
Desktop · open · single · CTA V1 bare — no selection label inside the CTA
Desktop · open · bet builder · CTA V4 + divider + stake (Figma 4036:171714)

Bet Builder

Over 2.5 γκολ
Goal/Goal
Τ. Δουβίκας να σκοράρει
Κόμο
Ρόμα
Τρίτη22:00
Ποντάρισμα: 10.00Πιθανό Κέρδος: 21.12
Desktop · open · outright · CTA V4 + divider + stake (Figma 4036:171713)

Νις να υποβιβαστεί

Μακροχρόνιο
Ποντάρισμα: 10.00Πιθανό Κέρδος: 21.12

01Οι παραλλαγές

Τρεις άξονες: data-variant (επιφάνεια) × data-bet (τύπος στοιχήματος) × data-cta (ποιο CTA μπαίνει στην υποδοχή). Η δηλωμένη παραλλαγή αποφασίζει — ΟΧΙ το πλάτος του viewport, όπως και στο Form Bubbles.

idΠεριγραφήvariantbetcta
mobile-v5Mobile - CTA V5 stacked 100x68 (Figma default)data-variant="mobile"data-bet="single"data-cta="v5"
desktop-v4Desktop - CTA V4 pill, slot-stretched to 48 (Figma default)data-variant="desktop"data-bet="single"data-cta="v4"
sidebar-v4Sidebar - CTA V4 full-width 40 (Figma default)data-variant="sidebar"data-bet="single"data-cta="v4"
mobile-v1Mobile - CTA V1 (added, not in Figma)data-variant="mobile"data-bet="single"data-cta="v1"
desktop-v1Desktop - CTA V1 (added, not in Figma)data-variant="desktop"data-bet="single"data-cta="v1"
mobile-v4Mobile - CTA V4 pilldata-variant="mobile"data-bet="single"data-cta="v4"
desktop-v5Desktop - CTA V5 stackeddata-variant="desktop"data-bet="single"data-cta="v5"
mobile-bbMobile - bet builder, CTA V1 baredata-variant="mobile"data-bet="bb"data-cta="v1"
mobile-outrightMobile - outright, no teamsdata-variant="mobile"data-bet="outright"data-cta="v5"
desktop-bbDesktop - bet builder, CTA V4 + divider + stakedata-variant="desktop"data-bet="bb"data-cta="v4"
desktop-outrightDesktop - outright, CTA V4 + divider + stakedata-variant="desktop"data-bet="outright"data-cta="v4"
Το σώμα της κάρτας είναι ίδιο σε mobile και desktop. Αλλάζει μόνο η υποδοχή .prd-cta — 100px κεντραρισμένη σε mobile, 240px δεξιά σε desktop. Το sidebar είναι όμως άλλη κάρτα, όχι στενό desktop.

02Επαληθευμένα ύψη

Κάθε παραλλαγή αποδίδεται στο ακριβές ύψος του frame της στο Figma. Μέτρηση σε Chromium στο πλάτος του frame, μόνο ορατό περιεχόμενο.

ΠαραλλαγήΎψοςΣημείωση
mobile-open-single-v5134px134
mobile-lost-single-v5134px134
mobile-won-single-v5134px134
desktop-open-single-v4122pxΣΚΟΠΙΜΑ ΜΙΚΡΟΤΕΡΗ από το frame των 134 (1.3.0, εγκεκριμένο): το cols layout βάζει την ώρα δίπλα στις ομάδες, άρα η στήλη του αγώνα χρειάζεται 3 σειρές και όχι 4
sidebar-open-v4171px171
mobile-open-bb222px222 (unchanged after the CTA swap to V1)
mobile-open-outright-v598px98 (74 content + 24 padding, with the master's stake and divider off)
desktop-open-bb262px262
desktop-open-outright138px138
Τρία πράγματα χαλούν αυτά τα ύψη σιωπηλά — γι' αυτό είναι γραμμένα ρητά: το περίγραμμα 2px είναι inset ring, όχι border (το Figma το ζωγραφίζει ΜΕΣΑ στο frame)· ο .prd-hr έχει μηδενικό ύψος (pseudo-element, όχι border-top)· και τα h3/p χρειάζονται margin:0.

03Συμβόλαιο δεδομένων — οι υποδοχές

Το component.html είναι template με {{key}}. Ο renderer είναι σκόπιμα χωρίς λογική: ό,τι τελειώνει σε _html είναι έτοιμο κομμάτι markup. Κενή τιμή = η ενότητα δεν εμφανίζεται.

ΚλειδίΤι είναι
{{pick}}Ο τίτλος της επιλογής — Roboto Condensed Bold 16/24. Υποχρεωτικός: στα V4/V5 δεν υπάρχει label μέσα στο control, άρα αυτός είναι η μόνη λεζάντα της αγοράς.
{{icon_html}}.prd-ic 14×14 — εικονίδιο αποτελέσματος (won/lost). Κενό στα open.
{{descTop_html}}.prd-desc ΠΑΝΩ από τον τίτλο. Χρησιμοποιείται από το outright.
{{descMid_html}}.prd-desc ΑΝΑΜΕΣΑ σε τίτλο και ομάδες. Θέση του sidebar.
{{legs_html}}.prd-legs — τα σκέλη του bet builder (28px ανά σκέλος).
{{teams_html}}.prd-teams — δύο .prd-team. Κενό στο outright.
{{when_html}}Μέσα στο .prd-when: ώρα έναρξης (open) ή .prd-sc σκορ (won/lost).
{{leagueName}} {{sportIcon}} {{leagueFlag}}Το chip διοργάνωσης.
{{label_html}}.prd-lbl — έξτρα chip, μόνο στο outright.
{{divider_html}}.prd-hr — διάστικτη γραμμή, μηδενικού ύψους.
{{stake_html}}.prd-stake — «Ποντάρισμα / Πιθανό Κέρδος», 20px.
{{meta_html}}Ό,τι κάθεται στη γραμμή του chip διοργάνωσης: το pill δώρου (.prd-gift) και/ή ο δείκτης ποντάρισμα → Πιθανή επιστροφή (.prd-meta). Είναι δύο ξεχωριστά πράγματα — μη τα ενώσεις σε ένα chip. Δες 3C για το ποια παραλλαγή παίρνει τι.
{{ctaGift_html}}1.2.0 — το pill δώρου μέσα στο slot του control, δηλαδή κάτω από το control και κεντραρισμένο σε αυτό. Εδώ το βάζουν όλες οι mobile παραλλαγές. Βάζεις το markup σε ΕΝΑ από τα δύο slots — η θέση είναι απόφαση δεδομένων.
{{leagueHref}}1.2.0 — το href του chip διοργάνωσης. Οι ομάδες παίρνουν το δικό τους href μέσα από το {{teams_html}}.
{{cta_html}}Το control από το odds-cta. Το predictions ΔΕΝ δηλώνει ποτέ .modd ή .bodd.

3CΔώρο, δείκτης, links & κίνηση 1.3.0

Τρία πράγματα μπήκαν εδώ, και το κρίσιμο είναι πού ζει το καθένα: το pill δώρου αλλάζει θέση και μέγεθος ανά παραλλαγή, ο δείκτης ποντάρισμα → Πιθανή επιστροφή έμεινε μόνο στις desktop κάρτες, και οι ομάδες και η διοργάνωση είναι πλέον links.

Οκτώ από τις δέκα παραλλαγές κρατούν ακριβώς το ύψος του frame τους (delta 0), και μετρήθηκαν ξανά μετά από κάθε αλλαγή. Οι δύο desktop cols κάρτες είναι σκόπιμα 122 αντί 134 από το 1.3.0 — δες 3D. Τρέχοντα: 134 · 134 · 134 · 122 · 171 · 222 · 98 · 122 · 262 · 138.

1. Το pill δώρου — τρεις θέσεις, τρία μεγέθη

Η θέση είναι απόφαση δεδομένων, όχι CSS: βάλε το markup στο slot που θέλεις. Το μέγεθος δεν είναι θέμα γούστου — το ορίζει η αριθμητική του container.

ΠαραλλαγήSlotΘέσηΜέγεθοςΓιατί όχι μεγαλύτερο
desktop data-layout="cols"{{meta_html}} στο merged lane, κάτω από το control32px, glyph 18 Είναι το πραγματικό μέγεθος του Figma (6174:37488). Το lane είναι 108px με control 48 — χωράει, άρα εδώ δεν υπάρχει απόκλιση.
mobile (single, bb){{ctaGift_html}} κάτω από το control, κεντραρισμένο σε αυτό, +10px26px, glyph 15 Slot 110 − control 68 − gap 10 = ταβάνι 32px. Το 26 αφήνει 6px περιθώριο.
sidebar{{meta_html}} στη γραμμή του chip, δεξιά (margin-left:auto)20px Η γραμμή είναι 20px. Ένα pixel πάνω και σπάει το 171.
bb / outright{{meta_html}} στη γραμμή του chip, μετά το chip20px Ίδιος λόγος — γραμμή 20px.

Το UI του pill είναι Figma 6174:37488 («Buttons», Tertiary Light): radius 1000, 1px #B3B3B3, fill #FFFFFF0D, Roboto 12/500 #1A1A1A, το δικό του glyph δώρου + ένας αριθμός. Δεν είναι κουμπί — ανακοινώνει, δεν πατιέται· το control μένει το μόνο πατήσιμο στοιχείο της κάρτας.

Μία εξαίρεση, μετρημένη: το mobile / outright κρατά το δώρο στη γραμμή του chip. Το slot του είναι 74px με control 68 — control + gap + pill = 96, και η κάρτα των 98 θα γινόταν 120.
1.2.1 — τα settled states στο cols layout. Το .prd-when κρατά δύο score chips 20px αντί για τη γραμμή έναρξης των 16px, και 24+40+22+20 με τρία gaps 2px κάνει 112 σε κουτί 110. Υποχωρούν τα gaps (row-gap:0 στο .is-won/.is-lost), ποτέ τα chips — τα chips είναι μέρος της επαληθευμένης γεωμετρίας, τα gaps όχι. Επίσης: το .prd-ttl μένει display:flex εδώ — ως block, το 14×24 .prd-ic των won/lost σπρώχνει τον τίτλο σε δεύτερη γραμμή και η κάρτα μετρά 160. Βρέθηκε από τον πρώτο καταναλωτή (σελίδα ανάλυσης), όχι από example — το component δεν έχει desktop won/lost example.

2. Ο δείκτης ποντάρισμα → Πιθανή επιστροφή

Ζει μόνο στις δύο desktop cols κάρτες. Το mobile και το sidebar δεν τον έχουν καθόλου· τα bb / outright δεν τον είχαν ποτέ, γιατί τυπώνουν ήδη «Ποντάρισμα / Πιθανό Κέρδος» από κάτω ({{stake_html}}) — οι ίδιοι αριθμοί δεν εμφανίζονται δύο φορές.

1.4.0 — settled outcome. Όσο το tip είναι ανοιχτό ο δείκτης είναι ουδέτερος: είναι πρόβλεψη. Μόλις κλείσει, ο δεύτερος αριθμός παύει να είναι πρόβλεψη και γίνεται γεγονός, άρα παίρνει το χρώμα της έκβασης — .prd-meta-v--win (--win) για την επιστροφή, .prd-meta-v--loss (--err) για το ποντάρισμα που χάθηκε (π.χ. −10.00). Είναι modifiers στην τιμή, όχι νέα στοιχεία: η γραμμή, τα labels και η γεωμετρία μένουν ίδια, άρα τίποτα δεν μετακινείται. Μετρημένη αντίθεση στη λευκή κάρτα: 5.41 και 4.83 — και τα δύο περνούν AA στα 12px, και είναι δηλωμένα στο component.json.
ℹ️Το label μένει «Πιθανή επιστροφή» και στα settled, κατ' εντολή. Αξίζει δεύτερη σκέψη: μετά το settle δεν είναι πια «πιθανή» — «Επιστροφή» / «Απώλεια» θα διάβαζε σωστότερα.

3. Links: οι ομάδες και η διοργάνωση

Κάθε .prd-team είναι <a> προς τη σελίδα ανάλυσης του αγώνα· το chip είναι <a class="prd-lg" href="{{leagueHref}}"> προς τη διοργάνωση. Τα hrefs των examples είναι placeholders — τα δίνει η σελίδα.

Το styling τους είναι επίτηδες layout-neutral: μόνο text-decoration και outline — ποτέ border, padding ή αλλαγή βάρους. Αυτό το component έχει σπάσει έτσι: ένα a{border-bottom:1px} της σελίδας πρόσθεσε 1px σε κάθε control και χάλασε τα μετρημένα frames. Γι' αυτό υπάρχει και το border:0 εδώ. Επίσης :focus-visible, όχι :focus.

4. Κίνηση — δύο ρολόγια, ένα διακόπτης

KeyframeΡολόιΤι κάνει
prd-gift-ring6s Καμπανάκι, όχι loop: όλο το swing (14° → −11° → 8° → −5° → 2°) τελειώνει μέσα στο πρώτο 12% και τα υπόλοιπα ~5s είναι ακινησία. Pivot στο 15% από πάνω, σαν κάτι που κρέμεται.
prd-gift-glow6s, ίδιο Το περίγραμμα «ανασαίνει» μαζί με το swing, ώστε να διαβάζονται ως ένα γεγονός και όχι ως δύο πράγματα που κουνιούνται ασύνδετα.
prd-gift-sweep2.8s, συνεχές Χρώμα που περνά μέσα από το pill: φαρδιά, μαλακή μπάντα στο 26% του --acc. Επειδή δεν σταματά ποτέ, πρέπει να μένει διακριτικό — γρήγορο ή κορεσμένο sweep σε μόνιμη κίνηση δεν διαβάζεται ως προσφορά, διαβάζεται ως χαλασμένη σελίδα. Χρειάζεται overflow:hidden για να κοπεί στο radius.
Το prefers-reduced-motion τα σβήνει όλα και το sweep το αφαιρεί αντί να το παγώσει στη μέση της διαδρομής. Animation που δεν απενεργοποιείται είναι accessibility defect, και εδώ όλα είναι διακοσμητικά.
ℹ️Κινούνται τα δώρα στο desktop cols, στο mobile κάτω από το control και στο sidebar. Τα bb / outright δεν κινούνται — δεν ζητήθηκε, και είναι μια γραμμή CSS αν το θέλετε.
ℹ️Το sweep χρησιμοποιεί color-mix() — το μόνο «σύγχρονο» feature του component (Chrome 111+, Safari 16.2+, Firefox 113+). Τα δύο εικονίδια του δείκτη (κέρμα, τάση) δεν προέρχονται από Figma — δεν υπάρχει node· ακολουθούν το idiom του glyph του δώρου.

3D1.3.1 — η ώρα δίπλα στις ομάδες, ένα link για τον αγώνα 1.3.0

Το κελί ώρας/σκορ επέστρεψε δίπλα στις ομάδες

1.3.1: το κελί κάθεται ακριβώς δίπλα στα ονόματα (12px), όχι στο δεξί άκρο της στήλης — το .prd-teams γίνεται flex:0 1 auto και «αγκαλιάζει» το περιεχόμενό του. Στο mobile μένει το flex:1 0 0 του Figma, που σπρώχνει το κελί δεξιά.

Στο cols layout η ώρα ήταν δική της σειρά στο τέλος της στήλης του αγώνα. Για το «Σάβ 23:00» δούλευε· για settled κάρτα όχι: το ίδιο κελί κρατά τότε δύο score chips, ένα ανά ομάδα, και μόνο του σε γραμμή δεν κάθονταν πια απέναντι από τις ομάδες τους. Τώρα το .prd-mid είναι κανονικό grid cell (όχι display:contents) και κρατά ομάδες + κελί ώρας μαζί, όπως στο mobile.

Μετρημένο: open και settled είναι και τα δύο 122px, ο τίτλος μένει 24, και τα chips προσγειώνονται ακριβώς στις γραμμές των ομάδων (y40 / y64 και στις δύο καταστάσεις).
Ένα special case διαγράφηκε, δεν ρυθμίστηκε. Το 1.2.1 είχε χρειαστεί row-gap:0 στα .is-won/.is-lost για να χωρέσουν τα 20px chips όπου η ώρα ήθελε 16. Με το κελί δίπλα στις ομάδες, open και settled έχουν ίδια γεωμετρία — το hack έφυγε τελείως.
Η κάρτα είναι πλέον 122, όχι 134, και αυτό είναι εγκεκριμένη απόφαση του Βασίλη, όχι αστοχία: η στήλη του αγώνα χρειάζεται 3 σειρές (κελί αγώνα 44 + chip διοργάνωσης 22 + τίτλος 24) αντί για 4. Οι υπόλοιπες οκτώ παραλλαγές κρατούν ακριβώς τα frames τους. Επίσης έφυγε το min-height και το row-gap ανέβηκε 2 → 4px: ο «προϋπολογισμός 8px» υπήρχε μόνο όσο η κάρτα ήταν καρφωμένη στα 110 περιεχομένου.

Ένα link για τον αγώνα, όχι ένα ανά ομάδα

Το anchor είναι το .prd-teams — το στοιχείο που υπήρχε ήδη — άρα δεν προστέθηκε wrapper και δεν άλλαξε κανένα box. Και τα δύο ονόματα υπογραμμίζονται μαζί στο hover, ώστε να διαβάζεται ως ένας στόχος.

Δεν ήταν μόνο θέμα καθαρότητας: δύο διαδοχικά links στον ίδιο προορισμό σήμαιναν ότι ο screen reader ανακοίνωνε τον αγώνα δύο φορές και το tab σταματούσε δύο φορές για έναν προορισμό.

04Εξάρτηση από το odds-cta

Το CTA δεν υλοποιείται εδώ. Έρχεται από το odds-cta μέσα στην υποδοχή .prd-cta. Απαιτείται odds-cta >= 4.0.0. Μοναδική πηγή αλήθειας: foxbet-odds-cta.pages.dev.

05Καταστάσεις

Η κατάσταση διεκπεραίωσης μπαίνει ως κλάση στην κάρτα και βάφει την αριστερή γραμμή.

ΚλάσηΓραμμήFigmaΚελί ώρας
.is-open--ink#444444ώρα έναρξης
.is-won--win#4CAF50.prd-sc σκορ
.is-lost--err#EF5350.prd-sc σκορ
?Προς επιβεβαίωση: τα won/lost του Figma είναι αισθητά φωτεινότερα από τα tokens. Κρατήθηκαν τα tokens (κανόνας design system) — πες μας αν θέλεις τις τιμές του Figma. Το κελί των 44px κρατά και την ώρα και τα σκορ, ώστε οι γραμμές των ομάδων να μη μετακινούνται όταν κλείνει το tip.

06Tokens & αποκλίσεις

Χρησιμοποιούμενα tokens: --ink --mut --line --fill --body --win --err · instance var --prd-disp (Roboto Condensed — δεν υπάρχει token στο tokens.css).

Λυμένα

07Προσβασιμότητα

08Τι ΔΕΝ περιλαμβάνεται

09Build checklist