Doorsenter: a finished match with no score. A player’s Match row shows 점수 입력, the host’s 대신 입력, and the scorecard’s Match state block reads 점수 입력; each opens this Sheet. appeal: the Match state block’s door (the sm Door pill) 점수 검토 요청 › on an entered score. host: 점수 고치기 on the host review sheet, or on the row when no review is open. A player who opens enter after a score landed finds the score, not an empty keypad: the door is gone.Why keypad firstowner review 4, point 3: presets cluttered and no peer offers them (UTR, DUPR, Match Tennis, Playtomic all type the score); Toss’s amount entry opens on the keypad with nothing to choose first. Cost against chips: none for 6-4 or a loss (3 taps), one more for 6-1. Gain: 4 controls on screen at open instead of 18.Anatomya Sheet over the page, docked on the numeric keypad (216 + 34), top to bottom: (1) the title row 48: the match name with ×; appeal and host are titled 점수 검토 요청 and 점수 고치기 over the match. (2) The set table, the cells context of the team lines: one team per line, partners with the 1px break, names 15/22·600 (wrap, never cut); a player’s team is on top with "(나)" and its first cell is focused, a host sees slot order; each cell is a number Input 48 × 48, r12, $borderControl, 24/32·700 centred numerals, cells 8 apart, the set labels 13/18·500 above each column. (3) The tiebreak: a compact 36 × 36 Input (two digits wide, in a 44 target, no placeholder; named by a persistent TB label in the header row over it, 13/18·500 secondary like the set labels, and while focused by a live line in the header’s free space, 1세트 타이브레이크, 진 쪽 점수, 13/18·600 ink, wrapping with keep-all, the set labels on its last line; spoken as “1세트 타이브레이크, 진 쪽 점수”; from 1.5× the set and TB labels merge into one, 1세트 TB) on the line of the team that lost the tiebreak (the 6 side; at 6-6 the second line), directly right of that team’s games cell, 4 apart, as the display draws it; only at 6-6 and 7-6, focused at once. The set’s column widens by 40 on both lines (the other line keeps an empty slot), so the next set stays aligned, and the set label stays centred over the games cells; each set that needs one has its own cell. Three sets with a tiebreak leave the names under 120 at 390, so the faces drop (names are never narrowed, they wrap to two lines). (4) The footer: in enter mode the pair, a tonal 경기 중단 at one third and the primary 점수 저장 at two thirds (a command is a Button, so there is no inline text; the pair stacks with the commit on top from 1.5× text); appeal and host have the one primary button, max(16, 0) below it with the keypad up. Controls on screen: at most two cells per set and the buttons. Helper lines: none (the live tiebreak line names the focused cell, it is not a helper); a validation error is the only line and takes the helper’s place, in danger.Typinga digit fills the focused cell and focus moves to the next: a game takes one digit, so the first set is done in two taps. At 6-6 or 7-6 one tiebreak cell appears right of the losing team’s games cell for that set and takes focus; it takes two digits and focus never leaves it by itself. When a set is valid the next set’s cells appear if the match format has one. An invalid set (6-5, 8-2) shows the danger line and keeps the button soft. Taps: 6-4 is 3, a loss is 3, 7-6(5) is 4, any other score is 3.Modesenter: title = the match, the pair 경기 중단 and 점수 저장 for everyone · appeal: title 점수 검토 요청, cells prefilled with the stored score, button 검토 요청, no stop button; leaving the digits unchanged sends "please check" · host: title 점수 고치기, prefilled, slot order, button 점수 저장, no stop button · English: Save score, Ask for a review, Change the score, Stop match. The button names are the whole of the sheet’s copy: no helper line says who confirms, because nobody does.Turned into an appealtwo players enter at once (race Q1): the first commit wins; the second write is refused with score_changed and the stored score. This sheet turns into the appeal sheet in place: a warning Notice "{이름} 님이 먼저 입력했어요", the stored score as 입력된 점수, and the digits typed so far as 내가 아는 점수; one tap on 검토 요청 sends them as the proposed score. The same sets typed twice are a no-op: the Toast 이미 입력됐어요 and nothing to ask.Stop stepthe second step of the same Sheet, two screens with a back arrow in the title row and a footer button each; no helper line and no extra modal. (1) 무슨 일이 있었나요?: radio Cells, each with its outcome word trailing: 한 팀이 도중에 그만뒀어요 기권 · 한 팀이 오지 않았어요 부전승 · 비나 시간 때문에 멈췄어요 일시 중단 · 경기를 하지 않았어요 취소됨; the host and officials also see 규칙 위반으로 실격 처리. A reason that needs a team reveals 어느 팀이 그만뒀어요? (오지 않았어요, 실격이에요) below it on the same screen, the two teams as radio Cells with the player’s own marked (나): sequential reveal, nothing for 일시 중단 and 취소됨; 다음 waits for what the reason needs. (2) the score so far in the same cells, keypad up (optional for 부전승 and 취소됨); a 일시 중단 adds 이어서 할까요? with 다음 모임에 이어서 and 여기서 끝낼게요 (it becomes 미완료). This last screen is the confirmation: its sub states the outcome in words (박지훈, 최유나 팀 기권, 김민준, 이서연 팀 승) and the commit button is named for it: 기권 저장, 부전승 저장, 일시 중단 저장, 취소 저장, 실격 저장. It settles and rates at once and the Toast follows with no action; a recorded stop is not self-correctable, its entrant keeps 점수 검토 요청. Who records: retired, any player, the host or an official · walkover, cancelled and suspended, a player, the host or an official · defaulted, the host or an official only (a ruling, not a statement). 기록에서 제외 is not a stop reason: it lives on the host review sheet. The rain outcome is 일시 중단, so it never collides with the 경기 중단 button. A false retirement is an appeal like any other.Statesrest (the first cell focused, the button soft) · typing · valid (the button live) · tiebreak · invalid (2px danger border and the line above the button) · saving (저장 중… / 요청 중…) · saved · queued · the three stop screens. Dismissing with unsaved digits asks the guard Dialog.After savingthe Toast 저장됐어요 has no action: the score is rated at once, and the entrant may change it for 10 minutes (점수 고치기, the server decides); after that, or for anyone else, 점수 검토 요청. The gate opens at once and the other three players are told once (P2). Offline: the row reads 보내는 중 and the Toast 연결되면 보낼게요; the write carries its idempotency key and the revision it saw (Q5). An entry that meets a stored score is never dropped: the row reads 점수가 이미 있어요 and the unsent digits wait as a proposed score, one tap away.Spokeneach cell is named "{team names}, {n}세트 점수"; 경기 중단 is a button; validation is announced; the table reads as one group: "내 팀 김민준, 이서연. 상대 팀 박지훈, 최유나."; the stop reasons are a radio group read with their outcome words.Motionthe Sheet rises over 300 ms with the keypad; the next set’s cells appear over 200 ms; the stop step slides in from the right over 200 ms and back from the left; the turn into the appeal sheet cross-fades over 200 ms; reduced motion: a fadeReplaces in codescore-edit-sheet.tsx (ScoreEditSheet, ±1 steppers: ten taps for 6-4), score-call-sheet.tsx (ScoreCallSheet), score-correction-sheet.tsx, the inline numeric fields on match-card.tsx, multi-set-score-entry.tsx (whose progressive-row logic the table keeps); the stop step is new. Variants: 8 (enter, appeal, host, one set, bo3/5, stop × 2), was 9 with helper lines on every one.