Foxbet · Component handover

Φάση αγώνα — live match states

Ένα μοντέλο φάσης που οδηγεί και το hero της live σελίδας ανάλυσης και κάθε live γραμμή στο widget «Αναλύσεις ημέρας». Δύο εκδόσεις: ποδόσφαιρο (υλοποιημένη) και μπάσκετκαι οι δύο εγκεκριμένες.

ART-378 family · Analysis page Ποδόσφαιρο · υλοποιημένο 2026-07-30 Μπάσκετ · εγκεκριμένο 2026-07-30 — προς υλοποίηση

00Διάβασε πρώτα αυτό

Η «φάση» είναι μία κατάσταση που περιγράφει έναν αγώνα και εμφανίζεται σε δύο μεγέθη. Δεν είναι δύο components: το ίδιο μοντέλο δίνει pill + σκορ + slot χρόνου, και ο καταναλωτής αποφασίζει μόνο μέγεθος και χρώμα φόντου.

ℹ️Πού χρησιμοποιείται σήμερα. foxbet-responsive-live.html → hero (.hw-live) και το widget «Αναλύσεις ημέρας» (.aw-lv / .aw-sc / .aw-mn). Όλοι οι live αγώνες του widget ακολουθούν τη φάση· το σκορ αλλάζει μόνο στον αγώνα που περιγράφει η φάση.
Στο production η φάση έρχεται από το live feed. Δεν είναι ρύθμιση σελίδας — σε αντίθεση με το variant/sponsor του Odds CTA. Το «remote» σε αυτή τη σελίδα και στο prototype είναι dev control και φεύγει με το feed.
Η έκδοση μπάσκετ εγκρίθηκε από τον Βασίλη (2026-07-30). Οι 7 φάσεις είναι τελικές — υλοποιήστε τις ως έχουν, μαζί με τις δύο συνειδητές αποφάσεις: τα διαλείμματα Α΄→Β΄ και Γ΄→Δ΄ δεν είναι φάσεις και το pill δείχνει την περίοδο, όχι «LIVE». Δεν υπήρχε προηγούμενο μοντέλο φάσεων για μπάσκετ στο project, άρα ορίστηκε από τις συμβάσεις FIBA/Euroleague — αυτό το έγγραφο είναι πλέον η πηγή αλήθειας, όχι πρόταση. Ό,τι διαφέρει από το ποδόσφαιρο είναι στην §04.
Εκκρεμεί μόνο η υλοποίηση: το μπάσκετ δεν έχει ακόμη live σελίδα ανάλυσης ούτε live αγώνα μπάσκετ στο widget, οπότε δεν υπάρχει consumer να το δείξει.

01Ανατομία & tokens

Τρία μέρη, πάντα με αυτή τη σειρά: pill (φάση) · σκορ · slot χρόνου. Το slot χρόνου είναι το μόνο που μπορεί να είναι κενό.

ΜέροςΚλάσηΚανόναςToken
Pill φάσης.lvpill Κόκκινο όταν τρέχει ο αγώνας, γκρι σε κάθε παύση/λήξη (.is-rest στον γονέα). Το κείμενο είναι η φάση, ΠΟΤΕ σκέτο «LIVE» σε παύση. --live #D92D20
--rest #666666
Παλμός.lvdot Μόνο όσο τρέχει ο αγώνας1.5s ease-out, scale 1→3.2, opacity .85→0. Στις παύσεις το dot μένει αλλά χωρίς animation. Πάντα σβήνει με prefers-reduced-motion.
Σκορ.lvsc Συμπαγές: en-dash, χωρίς κενά (1–0). Tabular numerals, αλλιώς το σκορ «χοροπηδά» σε κάθε αλλαγή. Στη λήξη τα τέρματα του νικητή bold (.win).--num
Slot χρόνου.lvcl Λεπτό / χρόνος περιόδου / tally. Κενό ⇒ δεν αποδίδεται (:empty), δεν αφήνει κενό στη σειρά. Στο ΤΕΛΙΚΟ γίνεται γκρι (.fin).--num
Η φάση δεν είναι μόνο χρώμα. Το pill αλλάζει κείμενο (ΗΜΧ, ΤΕΛΙΚΟ, ΠΑΡ.), όχι μόνο απόχρωση, και ο παλμός σταματά. Άρα η κατάσταση διαβάζεται χωρίς αντίληψη χρώματος — απαίτηση WCAG 1.4.1.

02Ποδόσφαιρο υλοποιημένο

Οκτώ φάσεις. Ο χρόνος ανεβαίνει σε λεπτά και δεν μηδενίζεται στο ημίχρονο. Πηγή: το demo του widget «Αναλύσεις ημέρας» (#aw-live-demo) — μία πηγή αλήθειας για τις δύο σελίδες.

Demo φάση · ποδόσφαιρο

Hero — live σελίδα ανάλυσης
Γραμμή widget «Αναλύσεις ημέρας»
Ολλανδία – Ιαπωνία
ΦάσηPillΤρέχειΣκορSlot χρόνου
Α΄ ημίχρονοLIVEναι0–0τρέχον λεπτό, από 23′
ΗμίχρονοΗΜΧόχι1–0κενό
Β΄ ημίχρονο · defaultLIVEναι1–0τρέχον λεπτό, από 63′
Λήξη κανον. διάρκειαςΛΗΞΗ Κ.Δ.όχι1–190′
Παράταση Α΄ / Β΄LIVE · ΠΑΡ.ναι1–1από 98′ / 112′
ΠέναλτιLIVE · ΠΕΝ.ναι1–1tally χωρίς πρόθεμα: 4–3
ΤελικόΤΕΛΙΚΟόχι1–1, νικητής bold(4–3) γκρι, σε παρένθεση
Το tally των πέναλτι ανήκει σε ΕΝΑΝ αγώνα. Όταν η φάση οδηγεί πολλές γραμμές (widget), το λεπτό είναι κοινό αλλά το 4–3 και το bold του νικητή μπαίνουν μόνο στον αγώνα της φάσης. Αλλιώς ένα 0–0 εμφανίζεται με «(4–3)» και νικητή — συνέβη, γι' αυτό γράφεται εδώ.
Ισοπαλία στο ΤΕΛΙΚΟ ⇒ κανένα bold, εκτός αν υπάρχει tally πέναλτι να κρίνει τον νικητή. Μην συμπεραίνεις νικητή από τη σειρά των ομάδων. Και όταν κρίνεται στα πέναλτι, bold γίνεται ΜΟΝΟ το όνομα — τα τέρματα μένουν κανονικά, γιατί το bold στο «1» ενός 1–1 διαβάζεται ως λάθος. Σε κανονική νίκη (2–1) bold γίνονται και το όνομα και τα τέρματα του νικητή.

03Μπάσκετ εγκεκριμένο · προς υλοποίηση

Επτά φάσεις: τέσσερα δεκάλεπτα, ημίχρονο, παράταση, τελικό. Ο χρόνος μετρά αντίστροφα μέσα στην περίοδο — έτσι δουλεύει κάθε scoreboard μπάσκετ, και είναι η βασική διαφορά από το ποδόσφαιρο.

ℹ️Τα διαλείμματα Α΄→Β΄ και Γ΄→Δ΄ ΔΕΝ είναι φάσεις. Αφαιρέθηκαν συνειδητά: διαρκούν ~2 λεπτά, δεν αλλάζουν σκορ και δεν προσθέτουν πληροφορία που δεν δίνει ήδη το «Α΄ 0:00». Παύση με δική της κατάσταση είναι μόνο το ημίχρονο, όπως στο ποδόσφαιρο. Στα δύο μικρά διαλείμματα το pill μένει στην περίοδο που μόλις έληξε με το ρολόι στο 0:00.

Demo φάση · μπάσκετ

Hero — live σελίδα ανάλυσης
Γραμμή widget «Αναλύσεις ημέρας»
Παναθηναϊκός – Ολυμπιακός
ΦάσηPillΤρέχειΣκορSlot χρόνου
Α΄ δεκάλεπτοΑ΄ναι18–15αντίστροφα, από 10:00
Β΄ δεκάλεπτοΒ΄ναι34–30αντίστροφα
ΗμίχρονοΗΜΧόχι41–38κενό
Γ΄ δεκάλεπτο · defaultΓ΄ναι55–52αντίστροφα
Δ΄ δεκάλεπτοΔ΄ναι78–78αντίστροφα
ΠαράτασηΠΑΡ.ναι85–83αντίστροφα, από 5:00
ΤελικόΤΕΛΙΚΟόχι88–85, νικητής bold(ΠΑΡ.) γκρι, αν κρίθηκε στην παράταση
Πολλαπλές παρατάσεις είναι κανονικές στο μπάσκετ. Το pill γίνεται ΠΑΡ. 2, ΠΑΡ. 3 — δηλαδή ο αριθμός μπαίνει στο pill, ΟΧΙ στο slot χρόνου, που κρατά το ρολόι. Στο ΤΕΛΙΚΟ ο δείκτης γίνεται (2 ΠΑΡ.).
Δεν υπάρχει ισοπαλία στο μπάσκετ, άρα στο ΤΕΛΙΚΟ υπάρχει πάντα νικητής να γίνει bold — και κανένα tally σαν τα πέναλτι.

04Ποδόσφαιρο vs μπάσκετ — τι αλλάζει

ΠοδόσφαιροΜπάσκετ
ΡολόιΑνεβαίνει σε λεπτά (63′), συνεχές — δεν μηδενίζεται στο ημίχρονο· καθυστερήσεις ως 90+3′ Κατεβαίνει μέσα στην περίοδο (7:12) και μηδενίζει σε κάθε δεκάλεπτο. Θέλει mm:ss, άρα το slot είναι φαρδύτερο
Pill όσο τρέχειΠάντα LIVE (+ · ΠΑΡ. / · ΠΕΝ.) Η περίοδος: Α΄ Β΄ Γ΄ Δ΄. Το «LIVE» δεν προσθέτει πληροφορία όταν το pill λέει ήδη περίοδο, και το ρολόι δείχνει ότι τρέχει
ΠαύσειςΜία: ΗΜΧ (+ ΛΗΞΗ Κ.Δ.) Μία: ΗΜΧ. Τα διαλείμματα Α΄→Β΄ και Γ΄→Δ΄ δεν είναι φάσεις (§03) — το pill μένει στην περίοδο με ρολόι 0:00
ΙσοπαλίαΚανονικό αποτέλεσμα· νικητής μόνο με πέναλτι Δεν υπάρχει — πάντα νικητής, πάντα bold
Πλάτος σκορ1 ψηφίο ανά ομάδα στην πράξη 2–3 ψηφία (105–98). Tabular numerals + χώρος για 3 ψηφία, αλλιώς η γραμμή μετακινείται σε κάθε καλάθι
Δείκτης παράτασης(4–3) = tally πέναλτι (ΠΑΡ.) / (2 ΠΑΡ.) = κρίθηκε στην παράταση
Ίδιο CSS, διαφορετικά δεδομένα. Οι δύο εκδόσεις δεν έχουν καμία διαφορά σε κλάσεις ή στυλ — αλλάζει μόνο ο πίνακας φάσεων και ο τύπος του ρολογιού (up/down). Άρα ένα component με sport στο μοντέλο, όχι δύο.

05Markup & μοντέλο

Το markup είναι ίδιο για τα δύο σπορ και τους δύο καταναλωτές. Ο γονέας παίρνει .is-rest — τίποτα άλλο δεν αλλάζει κλάση.

<!-- hero (live σελίδα ανάλυσης) — .is-rest όταν ο αγώνας δεν τρέχει -->
<div class="lvhero is-rest">
  <span class="lvpill"><span class="lvdot"></span>ΗΜΧ</span>
  <span class="lvsc">1<span class="d">–</span>0</span>
  <span class="lvcl"></span>            <!-- κενό ⇒ δεν αποδίδεται -->
</div>

/* το μοντέλο — μία εγγραφή ανά φάση */
{ key:'q3', pill:'Γ΄', live:true, run:true, base:600, score:'55–52' }
/* live  = τρέχει ο αγώνας → κόκκινο pill + παλμός
   run   = υπάρχει ρολόι που κινείται
   base  = ποδόσφαιρο: δευτερόλεπτα που ΑΝΕΒΑΙΝΟΥΝ · μπάσκετ: δευτερόλεπτα που ΚΑΤΕΒΑΙΝΟΥΝ
   pens / ot = δείκτης που εμφανίζεται σε παρένθεση στο ΤΕΛΙΚΟ */
Ο consumer δεν ξαναχτίζει τη λογική. Στο prototype το widget re-render-άρει μόνο του (tabs, άνοιγμα πρωταθλήματος) και σβήνει το patch — γι' αυτό το patch ξανατρέχει σε κάθε tick. Αν το component γίνει κανονικό, η φάση πρέπει να είναι στο data model του widget, όχι patch πάνω στο DOM.

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

ΈλεγχοςΑποτέλεσμα
Λευκό στο #D92D204.83:1 — AA ✔ (12px bold = 4.5 απαιτούμενο)
Λευκό στο #6666665.74:1 — AA ✔
#D92D20 σε λευκό (slot χρόνου, widget)4.83:1 — AA ✔
Η φάση δεν είναι μόνο χρώμαΤο pill αλλάζει κείμενο και ο παλμός σταματά
Reduced motionprefers-reduced-motion σβήνει τον παλμό σε κάθε φάση
Αλλαγή σκορΤο σκορ αλλάζει χωρίς αλληλεπίδραση: θέλει aria-live="polite" στο .lvsc ώστε ένα goal/καλάθι να ανακοινώνεται μία φορά. ΟΧΙ aria-live στο ρολόι — θα μιλάει κάθε δευτερόλεπτο
ΣυντομογραφίεςΗΜΧ, ΠΑΡ., ΛΗΞΗ Κ.Δ. θέλουν title/aria-label με ολόκληρη τη λέξη

07Assets

Κανένα. Το component είναι μόνο τυπογραφία + CSS (pill, dot, en-dash) — δεν χρησιμοποιεί εικόνες, εικονίδια ή λογότυπα, άρα δεν υπάρχει λίστα assets να κατεβάσετε. Τα λογότυπα καναλιών και τα εικονίδια σπορ που βλέπετε γύρω του ανήκουν στο widget «Αναλύσεις ημέρας» και τεκμηριώνονται στο δικό του handover.

Foxbet · Analysis page · Φάση αγώνα. Ποδόσφαιρο = υλοποιημένο στο foxbet-responsive-live.html. Μπάσκετ = εγκεκριμένο 2026-07-30, προς υλοποίηση.