utwordSystem v3.25.7
Components

Field

Where the player types a name, a room code or a recovery code. One field style on the raise surface, errors in rose words where the hint was, and a recovery code typed straight into its tiles.

stable

Usage

Use the field (.field) for free text: your name on Home, the older long recovery code, and the word lookup ("Is it a word?").

Use the code field (.field.code) to type a host's 4-letter room code in the Join a game sheet.

Use the code tiles (.rc-type) for the six-character recovery code. The six tiles are the field: you tap them and type.

Don't put a code you show in a field. A room's own code, the one the host reads out, is open display text (54px, +14px tracking), never boxed. Your recovery code is shown as tiles and copied by tapping it.

Don't block with the field. Guide, don't block: keep the buttons enabled, and when something is missing, focus the field and say what it needs.

Dark
Light
Your name, on Home label, field, hint; the hint gives way to an error in the same slot

Anatomy

PartSpecToken
Label.lbl: 700 12px, uppercase, +1.5px tracking, 8px above the field--fg-soft
Field.field: full width, 52px tall, radius 12, padding 0 14px, 500 16px--raise fill, 1px --rule, --fg text
Code field.field.code: 700 20px, uppercase, +6px tracking, centredas the field
Hint.hint: 13.5px / 1.45, 8px above and below--fg-soft
Field error.field-err: the hint's exact metrics, in the hint's place--danger
Sheet error.err: radius 10, padding 10px 12px, 1px edge, 13.5px / 1.45--danger-wash fill, --danger edge and text

The code tiles. A panel of six tiles in two groups of three, with a real input laid invisibly over them.

Dark
Light
Typing a recovery code three in; the next tile has a solid edge and a caret
PartSpecToken
Panel.rc-panel: radius 14, padding 22px 16px 14px, the tiles and hint stacked 14px apart--raise fill, 1px --rule
Tile.rct: 42×42, radius 10, 1.5px edge, 900 21px display type; 6px apart, with an 8px spacer between the groups--fg edge and letter
Empty tile.rct.empty: dashed edge--rule-strong
Next tile.rct.cur: solid edge and a 2×20px caret that blinks once a second--fg
Input.rc-type-in: covers the panel at opacity 0, 16px
Hint.rc-hint: 600 13px, "Paste works too."--fg-soft

States

Dark
Light
Errors, in rose a name too short; a room code too short; a recovery code nobody has
StateName fieldRoom codeRecovery code tiles
Emptyplaceholder "shows on the leaderboard"placeholder "CODE"; the Join button is offsix dashed tiles
Typingeach letter lands on the name board aboveletters uppercase as you type, 4 at mostletters fill the tiles in order; the next one is solid with a caret
Focus2px ring, offset 2px2px ring, offset 2pxthe caret and the solid edge
Errora rose line replaces the hinta rose banner replaces the hintevery tile's edge turns --danger; the message sits under the panel
Busythe button reads "Looking…" and waits

The field itself never changes colour on error; the message does the work. The code tiles are the exception: their edges turn rose.

Behaviour

  • Errors clear as you type. Any change to the field removes its error.
  • The name is checked when you leave the field, and again before anything that banks (Join a game, Create game and the Compete cards): if it's missing or invalid, the field takes focus, scrolls into view and says why. Blocked words are caught as you type.
  • The room code is checked when you tap Join: it must be 4 letters, then a game that exists, hasn't started and isn't full.
  • Tap anywhere on the code panel to type. The panel is a <label> for the hidden input, so the keyboard, paste and autofill all work. Enter tries the code.
  • Find my account stays tappable. It looks soft until six characters are in; tapping it early focuses the tiles and, if anything is typed, says "Your code has six characters."
  • Long codes switch over. Pasting an older word-word-id code into the tiles swaps to a plain field, and "Use a six-character code" swaps back.
  • Five misses an hour, then "Too many tries. Wait a little and try again."
  • Errors don't shake. A wrong code turns the tiles rose, with plain words under them. No movement.

Accessibility

PairDarkLight
--danger on --ground
error text on the page
8.52AAA7.54AAA
PairDarkLight
--fg-soft on --ground
labels and hints
6.36AA4.78AA
  • Text you type is at least 16px. The hidden recovery input is 16px so iOS doesn't zoom when it takes focus.
  • Labels: the name field has a visible label ("Your name"), the long-code field "Your code", and the tile input an aria-label ("Your six-character code"); the tiles themselves are aria-hidden. The room code field and the word lookup have only a placeholder. See Known issues.
  • The hint under the tiles is a status region. Error messages aren't, and they aren't linked to their field. See Known issues.
  • Keyboards: the code fields turn autocorrect off; the recovery input asks for capitals and offers one-time-code autofill.
  • Reduced motion: the caret stops blinking.

Content

  • The hint says what the field is for: "Spell it out and watch it land on the board.", "Get the 4-letter code from your host.", "Paste works too."
  • Errors say what's wrong and what to do, and never apologise. Verbatim:
FieldErrors
Name"Add your name first. It's what shows on the leaderboard." · "Names need at least 2 letters." · "Use at least two different letters." · "Pick a different name."
Room code"Room codes are 4 letters." · "No game found with that code. Double-check the letters with your host, or pick one from Public games below." · "That game already started. Ask the host for a new round." · "That room is full. 12 players max."
Recovery code"Your code has six characters." · "Type the code you saved." · "We couldn't find that code. Check it against your saved photo." · "You're offline. Connect and try again." · "Too many tries. Wait a little and try again." · "That's already you on this phone."

Why it's built this way

Known issues and gaps

  • The Join button is off until something is typed, and so is the word lookup's Check button, against "guide, don't block".
  • Two fields have no label. The room code field ("CODE") and the word lookup ("type it") rely on their placeholders.
  • Errors aren't announced and aren't linked to their field (aria-describedby); on the recovery tiles the status region empties when an error appears.
  • The validation timing is documented wrong. The long reference page says fields validate on submit, never while typing. In the code the name is checked when the field loses focus, and blocked words are caught as you type.
  • The field CSS reads legacy names (--tray-raise, --tray-line, --paper, --paper-dim, --error-text, --error-surface, --error-border); they resolve to the canonical roles.

Changelog

VersionChange
3.21.2The recovery code's six tiles become the field: tap and type, with a caret in the next tile; paste and autofill work
3.21.0Restore has six slots that fill as you type, five misses an hour, and plain errors
3.9.5The name's error is rose text in the hint's place, not a card
3.9.2A name is required before anything that banks; the field takes focus and scrolls into view