Home / Odds
BETON odds
The BETON line is a sportsbook board, not a slot grid. Two teams sit in one row: home crest left of the home name, away crest right of the away name. Cells 1 / X / 2 mean home win, draw, away win. Tap a yellow price to open the cabinet. Until login, the board is a sample line. Each row also carries a league label, a kick-off time and three quote cells. The market label 1, X or 2 sits above the decimal price. The price is electric yellow. The label is muted. They never share one text node, so you will not see a glued 12.20.
Crests come from Wikimedia and the shared official SVG set: Shakhtar, Dynamo Kyiv, Kryvbas, Polissya, Oleksandriya, Kolos, plus a short European set (Real Madrid, Bayern, Arsenal). object-fit is contain. There are no homemade circles.
js/odds.js hydrates in this order: localStorage key bbs_odds_json_v1, then data/odds.json, then an in-memory SAMPLE. A remote Worker is optional and off by default (ODDS_FEED_URL is empty). A dead feed cannot leave a forever skeleton. Status text switches between Line and Line snapshot.
The favourite — the lowest decimal — gets a yellow frame. Times render in Europe/Kyiv. The next match sits above the board. All match rows are data-cta links into the cabinet.
UPL is the default conversation on this host. The rail pins it. European cups sit in the same table so you can compare a Saturday in Kryvyi Rih with a midweek Champions League price without changing accounts.
If you need the login door, use BETON login. If you want the first-stake walkthrough, open how to place a stake. Live markets are described on the live guide.
CITYCODE LLC holds the sportsbook licence PlayCity No.104-R (2025–2030). Age 21+. A price on this page is a seed snapshot, not a promise that the cabinet will print the same number at kick-off. Stakes can lose the deposit.
The homepage keeps the same board so you do not have to open this guide to read a Saturday card. This page exists so search can land on a dedicated odds URL with its own title and a longer explanation of the 1/X/2 stack.
Decimal prices are strings in the JSON so trailing zeros survive. The renderer does not multiply them. If a draw market is missing, the X cell prints an em dash and is not treated as a favourite.
League keys in the seed use upl and ucl. The UI prints the human league name, not the API sport key. A visitor who only cares about Saturday UPL can ignore the midweek European rows without leaving the same table.
Do not screenshot a seed board and treat it as a settled ticket. Settlement lives in the cabinet history. This guide will not invent a cash-out button that the static page cannot execute.
If you build a parlay, that builder is inside the product after login. This page only explains singles 1/X/2 so the cell rules stay readable. Mixed markets (both teams to score, totals) follow the same label-above-price stack when the cabinet shows them.