One match drawn one way wherever it appears: a face for each player, one team per line, the viewer’s team first, each name its own tap. The ATP card is the reference; the row, the block, the sheets, the number pad, the ResultRow and the profile history all draw it.
A header line, then one team per line: a 32 face (two overlapping 8 for a pair) in a 56 slot, 12, the names, the games.
The same anatomy; a singles team has one face.
A plain result shows no Tag; the header's Tag is for 예정 and 검토 중; a schedule has no numerals.
The same faces on ink, ringed in the block’s ink; the block stays 144.
The same 32 faces in a 48 line; the 40 face and the 40 footprint pair are retired.
The cells context: the faces, then a 48 input for each set.
The history row: the same shell with a date header; the profile’s recent matches draw it.
What a round costs in height: 4 rows are 512, 8 rows are 1024.
From 1.5× the faces drop and the names keep the width; each name stays a tap.
Longer English names wrap whole and the row grows.
Pickup players are strangers, so every face is initials, drawn the same as a missing face.
A photo shows only when the person has one and the viewer may see it; otherwise initials, which look the same either way.
Blue: the row’s own press, the match page. Orange: each name, a stop to that player’s profile.
The match grammar: one anatomy on every surface that draws a match.
flat-v2-kit-content.jsx
grounded in 6 source file(s)
packages/app/src/presentation/components/sessions/match-scoreboard.tsxpackages/features/sessions/src/scorecard-page/schedule-match-row.tsxpackages/features/sessions/src/scorecard-page/tabs/live-tab.tsxpackages/features/sessions/src/session-detail/page/session-matches-section.tsxpackages/features/sessions/src/draw/preview/draw-preview-view.tsxpackages/features/sessions/src/scorecard-page/tabs/ladder-tab.tsx