Tier 3Roku. The whole screen is the shared custom ListItem over a stock Overhang. SceneGraph ships no preference row and no switch, so state is a right-aligned value string and OK cycles it.DesignTokens.brs · primary · focus · text · textMuted
A setting is a row whose value is text
Six ListItemData rows with valueAlign="right": the description string renders in the right-aligned value slot instead of inline. Source: Settings.brs, ListItem.brs.
OK cycles, it does not toggle a control. Media filter and history flip Enabled/Disabled, playback type cycles HLS/MP4 and shows Saving MP4... in the slot while the PUT is in flight. Version and Device rows are inert.
put.io
Settings
Only Show Media Files
Disabled
Keep populating the history page with your activities
Enabled
Video playback type
HLS
Version
2.17.5
Device
Roku Ultra (4802X)  |  Roku OS 14.1.4 build 4114
Log out
Settings · six rows, one anatomyEvery glyph is primary yellow, including Log out. Values are small 33 in textMuted.
listtranslation="[102,171]" · rows [1716,120] · spacing 12, the one list off the 30px rhythm
value slotcomputed by ListItem.brs: width 520, x = rowWidth − 568 (1148 here). The XML's static [1260,0] w412 is a dead default
ordermedia filter · history · playback type · version · device · log out
glyphsasset names media-filter, history, file-video, info, settings, logout. Map through config/phosphor-icons.json, never by Phosphor name
save failureAppDialog: Settings not saved, single OK button, value slot reverts
log outdeletes the registry token and navigates to the auth screen. No confirmation dialog
Per-control detail, the token map and the full don't list live in platforms/roku/DESIGN.md.
Do not draw a switch, a checkbox or a chevron on these rows. SceneGraph ships none, the channel fakes none: the value string is the state and OK is the toggle.