ΕΛEN
Foxbet · Component handover

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

One phase model that drives and the hero of the live analysis page and every live row in the «Αναλύσεις ημέρας» widget. Two editions: football (implemented) and basketballboth approved.

ART-378 family · Analysis page Football · implemented 2026-07-30 Basketball · approved 2026-07-30 — to be implemented

00Read this first

The «phase» is one state that describes a match and appears at two sizes. It is not two components: the same model produces pill + score + time slot, and the consumer decides only the size and the background colour.

ℹ️Where it is used today. foxbet-responsive-live.html → hero (.hw-live) and the «Αναλύσεις ημέρας» widget (.aw-lv / .aw-sc / .aw-mn). Every live match in the widget follows the phase· the score changes only on the match the phase describes.
In production the phase comes from the live feed. It is not a page setting — unlike the Odds CTA's variant/sponsor. The «remote» on this page and in the prototype is dev control and goes away once the feed is in.
The basketball edition was approved by Vasilis (2026-07-30). The 7 phases are final — implement them as they are, together with the two deliberate decisions: the Α΄→Β΄ and Γ΄→Δ΄ breaks are not phases and the pill shows the period, not «LIVE». No prior basketball phase model existed in the project, so this one was derived from FIBA/Euroleague convention — this document is now the source of truth, not a proposal. Everything that differs from football is in §04.
The only thing outstanding is the implementation: basketball has no live analysis page yet, and no live basketball match in the widget, so there is no consumer to show it.

01Anatomy & tokens

Three parts, always in this order: pill (phase) · score · time slot. The time slot is the only one that may be empty.

PartClassRuleToken
Phase pill.lvpill Red while the match is running , grey at every pause/end (.is-rest on the parent). The text is the phase — NEVER a bare «LIVE» while paused. --live #D92D20
--rest #666666
Pulse.lvdot Only while the match is running1.5s ease-out, scale 1→3.2, opacity .85→0. At pauses the dot stays but without animation. Always suppressed under prefers-reduced-motion.
Score.lvsc Tight: en-dash, no spaces (1–0). Tabular numerals, otherwise the score jumps on every change. At full time the winner's goals are bold (.win).--num
Time slot.lvcl Minute / period clock / tally. Empty ⇒ not rendered (:empty), it leaves no gap in the row. At ΤΕΛΙΚΟ it turns grey (.fin).--num
The phase is not colour alone. The pill changes its text (ΗΜΧ, ΤΕΛΙΚΟ, ΠΑΡ.), not just its hue, and the pulse stops. So the state is readable without colour perception — WCAG 1.4.1.

02Football implemented

Eight phases. The clock counts up in minutes and does not reset at half time. Source: the «Αναλύσεις ημέρας» widget demo (#aw-live-demo) — one source of truth for both pages.

Phase demo · football

Hero — live analysis page
«Αναλύσεις ημέρας» widget row
Ολλανδία – Ιαπωνία
PhasePillRunningScoreTime slot
First halfLIVEyes0–0current minute, from 23′
Half timeΗΜΧno1–0empty
Second half · defaultLIVEyes1–0current minute, from 63′
End of normal timeΛΗΞΗ Κ.Δ.no1–190′
Extra time, first / second halfLIVE · ΠΑΡ.yes1–1from 98′ / 112′
Penalty shootoutLIVE · ΠΕΝ.yes1–1tally no prefix: 4–3
Full timeΤΕΛΙΚΟno1–1, winner bold(4–3) grey, in brackets
The penalty tally belongs to ONE match. When the phase drives many rows (the widget) the minute is shared, but the 4–3 and the winner's bold apply only to the phase's own match. Otherwise a 0–0 shows up with «(4–3)» and a winner — it happened, which is why it is written down here.
A draw at ΤΕΛΙΚΟ ⇒ nothing bold, unless a penalty tally decides the winner. Never infer the winner from the order of the teams. And when penalties decide it, ONLY the name goes bold — the goals stay regular, because bolding the «1» of a 1–1 reads as an error. On a normal win (2–1) both the winner's name and goals go bold.

03Basketball approved · to be implemented

Seven phases: four quarters, half time, overtime, final. The clock counts down within the period — that is how every basketball scoreboard works, and it is the core difference from football.

ℹ️The Α΄→Β΄ and Γ΄→Δ΄ breaks are NOT phases. They were dropped deliberately: they last ~2 minutes, change no score, and add nothing «Α΄ 0:00» does not already say. The only pause with a state of its own is half time, as in football. During the two short breaks the pill stays on the period that just ended, with the clock at 0:00.

Phase demo · basketball

Hero — live analysis page
«Αναλύσεις ημέρας» widget row
Παναθηναϊκός – Ολυμπιακός
PhasePillRunningScoreTime slot
First quarterΑ΄yes18–15counting down, from 10:00
Second quarterΒ΄yes34–30counting down
Half timeΗΜΧno41–38empty
Third quarter · defaultΓ΄yes55–52counting down
Fourth quarterΔ΄yes78–78counting down
OvertimeΠΑΡ.yes85–83counting down, from 5:00
Full timeΤΕΛΙΚΟno88–85, winner bold(ΠΑΡ.) grey, if it was decided in overtime
Multiple overtimes are normal in basketball. The pill becomes ΠΑΡ. 2, ΠΑΡ. 3 — that is, the number goes in the pill, NOT in the time slot, which keeps the clock. At ΤΕΛΙΚΟ the marker becomes (2 ΠΑΡ.).
There is no draw in basketball, so at ΤΕΛΙΚΟ there is always a winner to bold — and no tally like the penalties one.

04Football vs basketball — what changes

FootballBasketball
ClockCounts up in minutes (63′), continuous — no reset at half time; stoppage time as 90+3′ Counts down within the period (7:12) and resets every quarter. Needs mm:ss, so the slot is wider
Pill while runningAlways LIVE (+ · ΠΑΡ. / · ΠΕΝ.) The period: Α΄ Β΄ Γ΄ Δ΄. «LIVE» adds nothing when the pill already names a period, and the clock already shows it is running
PausesOne: ΗΜΧ (+ ΛΗΞΗ Κ.Δ.) One: ΗΜΧ. The Α΄→Β΄ and Γ΄→Δ΄ breaks are not phases (§03) — the pill stays on the period, clock at 0:00
DrawA normal result; a winner only via penalties Does not exist — always a winner, always bold
Score width1 digit per team in practice 2–3 digits (105–98). Tabular numerals + room for 3 digits, otherwise the row shifts on every basket
Overtime marker(4–3) = penalty tally (ΠΑΡ.) / (2 ΠΑΡ.) = decided in overtime
Same CSS, different data. The two editions differ in no class and no style — only the phase table and the clock direction (up/down) change. So it is one component with a sport in the model, not two.

05Markup & model

The markup is identical for both sports and both consumers. The parent takes .is-rest — nothing else changes class.

<!-- 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 = δείκτης που εμφανίζεται σε παρένθεση στο ΤΕΛΙΚΟ */
The consumer does not rebuild the logic. In the prototype the widget re-renders on its own (tabs, opening a league) and wipes the patch — which is why the patch re-runs on every tick. If the component becomes real, the phase must live in the data model of the widget, not as a patch over the DOM.

06Accessibility

CheckResult
White on #D92D204.83:1 — AA ✔ (12px bold ⇒ 4.5 required)
White on #6666665.74:1 — AA ✔
#D92D20 on white (time slot, widget)4.83:1 — AA ✔
The phase is not colour aloneThe pill changes its text and the pulse stops
Reduced motionprefers-reduced-motion kills the pulse in every phase
Score changeThe score changes with no interaction: it needs aria-live="polite" on the .lvsc so a goal/basket is announced once. NOT aria-live on the clock — it would speak every second
AbbreviationsΗΜΧ, ΠΑΡ., ΛΗΞΗ Κ.Δ. need a title/aria-label with the full word

07Assets

None. The component is typography + CSS only (pill, dot, en-dash) — it uses no images, icons or logos, so there is no asset list to download. The channel logos and sport icons you see around it belong to the «Αναλύσεις ημέρας» widget and are documented in its own handover.

Foxbet · Analysis page · Φάση αγώνα. Football = implemented in foxbet-responsive-live.html. Basketball = approved 2026-07-30, to be implemented.