ΕΛEN
ART-378 · Odds CTA · ONLY what runs on /analysis

Design → Dev Handover

Odds CTA · Jira ART-378 · Foxbet design system. Rewritten 2026-08-02. It no longer documents the whole family of 5 variants — it documents only what the analysis page actually renders, flagged with where it runs. Every number is measured in the browser on 2026-08-02, on 1440px and 390px, at foxbet-responsive.html + foxbet-responsive-live.html — it is not design intent. Six placements, four control forms, of which two show no bookmaker at all.

Assets used

Only the branded controls (V7, V6) load a logo, and always from logo-assets/plain-light/ — a transparent wordmark on the brand fill. The two no-bookmaker controls (V1, player card) and the pinned chip load no asset at all.

Not needed

Neither rectangle/, nor circle/, nor plain-dark/: none of the variants shipped here use them. The plain-dark/ is added only if an operator with a light fill is introduced — see §07.

01What runs where measured 2026-08-02

The map. The only thing that changes per breakpoint is sizeno placement is desktop-only or mobile-only. That is an audit finding, not an assumption: the V8 exists in the tip card's DOM but is display:none at both breakpoints, which is why it is not here.

PlacementFormClass Desktop ≥1200Mobile ≤1199BookmakerRuns at
Hero — «Το προγνωστικό μας»V7 pill + selection .bodd.bodd--pill.bodd--sel225×48113×44 YesBoth
«Προοπτική αγώνα» ×2V7 pill + selection .bodd.bodd--pill.bodd--sel225×48113×44 YesBoth
Tip cardV6 pill, bare .bodd.bodd--pill197×48197×48 YesBoth same size
«Πιθανότητες αγώνα» ×7V1 neutral card .modd69–98 × 4167–178 × 41 NoneBoth
Player card (pitch → player)Player CTA row .plpop-bet230×36306×52 NoneBoth
Pinned slim bannerOdd chip .ps-od26 tall26 tall Colour, not a logoBoth
The CSS scope. What ships is: .modd + .modd-card + .od (V1) · the brand-fill shell .bodd* with .bodd--pill / .bodd--sel and the .bo-<operator> fills · .plpop-bet · .ps-od. The rules for V2 / V3 / V5 / V8 were removed from the stylesheet of this file too — do not bring them back «for completeness».

02V7 — brand pill with selection Both

Runs at 3 places: the hero CTA and the two in «Προοπτική αγώνα». The only desktop/mobile difference is width and 4px of height — same markup, same variant. The selection (.bodd-lbl) is the market, separated from the odd by .bodd-sep.

Desktop — 225×48 fonbet12.00 .bodd--pill.bodd--sel · 225 × 48
Mobile — 113×44 fonbet12.00 same classes · 113 × 44 · radius 12, padding 6, mark 28×16
Another operator stoiximan12.00 only the .bo-* class changes
!
The ΕΕΕΠ 21+ line is mandatory wherever an operator appears — so under every V7 and V6. V1 and the player CTA are exempt, because they name no bookmaker.

03V6 — brand pill, bare Both

One place: the tip card. 197×48 at both breakpoints — it is the only control that does not change at all. It has no selection label: the pick «1 & Over 2.5» is already the card's title to its left, so repeating it inside the pill would be duplication.

Desktop & mobile — 197×48 fonbet3.10 .bodd--pill (without --sel) · 197 × 48

04V1 — neutral card, NO bookmaker No bookmaker

The control for «Πιθανότητες αγώνα» — 7 markets in a row. It names no bookmaker: a white card, 41px tall, and the width hugs its content (measured 69–98px desktop, 67–178px mobile — the wide one is a market with a long label). The odd is Roboto Bold 14 in #1A1A1A — not Mono, not orange: those were retired on 2026-07-30.

As it runs — markets in a row .modd > .modd-card > .od · height 41, width hugs
!
The 41px is the .modd-card, not the outer <a class="modd">. The anchor measures ~41.8px because the .moddgrid is flex with align-items:stretch — do not chase it as a 1px bug. The card is exactly 41 (39 + 2×1 border).
No image, no ΕΕΕΠ line. Because no operator is named, the control loads no asset and drags no regulatory line with it. That is what lets it sit in dense places (7 in a row) without filling the page with logos.

05Player card CTA — NO bookmaker No bookmaker

The CTA inside the player card (pitch → tap/hover a player). It is not .modd nor .bodd — it is its own row (.plpop-bet) with three parts: the «Πρόταση» label (9/700, Primary 600), the market, and the odd in a dark chip (Roboto Mono, bg #1A1A1A, radius 6). It runs at both breakpoints, but with different chrome around it: desktop = popover 232px, mobile = centred modal 320px (changed from a bottom sheet on 2026-08-01).

Desktop — inside a 232px popover
1 Verbruggen
Appearances30
Clean sheets4
PropositionClean sheet2.49
.plpop-bet · 230 × 36
Mobile — inside a 320px modal
1 Verbruggen
Appearances30
Clean sheets4
PropositionClean sheet2.49
.plpop-bet · 306 × 52 (min-height 52)
!
The 52px mobile height is deliberate (min-height:52px): it is the modal's primary action and the only tap target inside it. On desktop the same row is 36px, because the popover is a hover preview and the click happens once it has been «pinned».

06Pinned slim banner — odd chip Both

When the bar pins, the wide offer becomes one line: label, the .ps-od chip with pick + odd, and «ΠΑΙΞΕ ΝΟΜΙΜΑ*». It carries no logo — the operator IS the colour of the bar itself (the .bo-<operator> supplies the --bk), because a wordmark on the brand fill said the same thing twice.

Fonbet — dark fill
Το Προγνωστικό μας 1 & Over 2.53.10
ΠΑΙΞΕ ΝΟΜΙΜΑ*
.ps-od · 26px tall · Roboto Mono in both runs
Light fill → .is-lt (ink flip)
Το Προγνωστικό μας 1 & Over 2.53.10
ΠΑΙΞΕ ΝΟΜΙΜΑ*
.is-lt: pick 72% ink, odd solid ink
!
One font for both runs. The pick and the odd are both Roboto Mono with line-height:16px. With two fonts the baselines fell 1px apart and the chip looked crooked; with align-items:baseline the chip grew 26→29px and the bar 42→45px. The chip must stay 26px.

07Operator / sponsor rules

One sponsor per page, page-level config — never a user control. The operator is applied ONLY via the .bo-<operator> class, and the colour is never tinted in any state.

  • The .bo-<operator> must match exactly the asset's filename (fonbetplain-light/fonbet.svg). A mismatch = a visible seam.
  • Light fills (interwetten, pamestoixima, winmasters) cannot carry white text: they take .is-lt + the logo from plain-dark/.
  • Sportingbet: do not ship it on a brand fill — its #1E87C9 fails AA with both white and ink.
  • Hover does not darken the brand colour — it deepens the bevel. Pressed is translateY(1px), not scale().

08Markup — copy/paste

Everything below is the real DOM from the page, as extracted on 2026-08-02 — not a rewritten example.

<!-- V7 — hero & «Προοπτική αγώνα». Ίδιο και στα δύο breakpoints. -->
<a class="bodd bodd--pill bodd--sel bo-fonbet" href="…" target="_blank" rel="noopener"
   title="Ολλανδία — fonbet" aria-label="Ολλανδία — fonbet">
  <span class="bodd-bk"><img src="logo-assets/plain-light/fonbet.svg" alt="fonbet"></span>
  <span class="bodd-in">
    <span class="bodd-lbl">1</span>
    <span class="bodd-sep" aria-hidden="true"></span>
    <span class="bodd-od">2.00</span>
  </span>
</a>

<!-- V6 — κάρτα προγνωστικού. Χωρίς .bodd-lbl / .bodd-sep. -->
<a class="bodd bodd--pill bo-fonbet" href="…" title="1 &amp; Over 2.5 — fonbet">
  <span class="bodd-bk"><img src="logo-assets/plain-light/fonbet.svg" alt="fonbet"></span>
  <span class="bodd-in"><span class="bodd-od">3.10</span></span>
</a>

<!-- V1 — «Πιθανότητες αγώνα». NO bookmaker, NO ΕΕΕΠ line. -->
<a class="modd" href="…" title="Ακριβές σκορ 1 - 0" aria-label="Ακριβές σκορ 1 - 0">
  <span class="modd-card"><span class="od">7.00</span></span>
</a>

<!-- Player card CTA — NO bookmaker. Τελευταία γραμμή του popover/modal. -->
<a class="plpop-bet" href="…" target="_blank" rel="noopener">
  <span class="plpop-bl">Πρόταση</span>
  <span class="plpop-bm">Clean sheet</span>
  <span class="plpop-bo">2.49</span>
</a>

<!-- Pinned slim banner chip. Ο operator είναι το χρώμα της μπάρας. -->
<a class="promo-slim bo-fonbet" href="…">
  <div class="ps-odds">
    <span class="ps-tiplbl">Το Προγνωστικό μας</span>
    <span class="ps-od" data-tipstick><span>1 &amp; Over 2.5</span>3.10</span>
  </div>
  <span class="ps-cta">ΠΑΙΞΕ ΝΟΜΙΜΑ*</span>
</a>

09Accessibility & regulatory

  • Always title + aria-label on V6/V7: the control shows nothing but a number, so without them a screen reader hears «2.00» with no market and no operator. Format: <market> — <operator>.
  • The separator .bodd-sep is aria-hidden — it is decorative.
  • ΕΕΕΠ | 21+ | ΠΑΙΞΕ ΥΠΕΥΘΥΝΑ mandatory wherever an operator is named (V6, V7, slim banner). V1 and the player CTA are exempt.
  • Tap targets: the player CTA is 52px on mobile. V1 at 41px is below the 44px guideline — a deliberate decision by the DS, for dense odds rows.
  • All controls are <a> with target="_blank" rel="noopener".

10What does NOT run (removed)

So nobody goes looking: these were in the previous handover and are not used on the analysis page. Their specs and CSS were removed.

VariantWhat it wasWhy it is not here
V2Sponsored two-part cardRenders nowhere.
V3Best-odds two-part cardWas in the hero; replaced by V7.
V5Brand block 100×68Does not render; the pill took its place.
V8V1 + bookmaker markIt IS in the DOM of the tip card, but display:none at both breakpoints. If you want it, that is a product decision — not a bug.

11Build checklist

  • Both pages: foxbet-responsive.html and foxbet-responsive-live.html — the CTA blocks are byte-identical.
  • V7 in 3 places (hero + 2× Προοπτική), V6 in 1 (tip card), V1 across 7 markets.
  • The .bo-<operator> matches the filename; logo from plain-light/.
  • ΕΕΕΠ line under every branded control; not under V1 / the player CTA.
  • title + aria-label on every control.
  • Player CTA: 36px desktop / 52px mobile, inside a 232px popover / 320px modal.
  • Slim chip: 26px tall, one font (Mono) for pick + odd.
  • Sportingbet: do not ship on a brand fill (AA fail).