Tier 4Tier 4 · TV (Generic): tv.put.io, Tizen, webOS. The restrained, list-first web binding is the reference presentation. Android TV shares the product behaviour but applies Google's native TV components and focus model.--hi-contrast · --lo-contrast · --yellow-solid · --radius-tv
Sign-in is a code, never a keyboard
Device-code auth: the app requests an OOB code, shows it in tiles, and polls until put.io/link on another device redeems it. There is no password field on any TV tier. Source: features/auth/screens/auth-with-code.tsx.
Code tiles are the one place the TV inverts: --hi-contrast tiles with --lo-contrast characters, sized 2x the 48px label step (96px). The link is the only yellow text on the screen.
The kaomoji in the heading is shipped copy: ┌( ಠ‿ಠ)┘ welcome! — keep it verbatim, it is the product's voice.
┌( ಠ‿ಠ)┘ welcome!
use this activation code to sign in
H7K2F9
follow the steps at the website below
2.3.1 (482)
Auth · verifying stateThe Get new code Button holds preferred focus, so OK always has a target. The release string sits at the bottom, as on error screens.
statesGetting code LoadingScreen, then this verifying screen, then replace with the app on success
heading┌( ಠ‿ಠ)┘ welcome! at 64 medium. Column spacing 64 (xl), inner groups 8 / 4
codeone tile per character: 96px, radius 12, --hi-contrast fill, --lo-contrast 48 medium char, 8 apart
linkput.io/link, 48 medium --yellow-solid. Plain text, not a button
refreshmd Button, refresh glyph, preferred focus. Remounts per code so focus never strands
expired codethe standard ErrorState: Expired code / Seems like your code has expired. Please get a new one and try again. + Get new code
Contract: platforms/tv-generic/DESIGN.md · source: features/auth/**, components/activation-code.tsx
Do not add a username/password form, a QR code, or an in-app keyboard here. Device-code is the TV authentication path.