Tier 3Roku. SceneGraph ships no node for this, so put.io builds it from generated tokens. Every number here is read from the channel source, not designed here.DialogStyle.brs · primary · textInverse · buttonSurface · buttonFocus · dangerFocused
Dialog button focusDialogStyle.applyDialogButtonStateput.io owns this
Dialog buttons are full-width bars, 78 tall and 18 apart, stacked under the body. There is no hover: a button is focused or it is not, and focus is a fill.
OK
primary, focusedprimary fill, textInverse label
OK
primary, unfocusedbuttonSurface, the panel's own fill, so it reads as text
Cancel
secondary, focusedbuttonFocus fill
Delete file
danger, focuseddangerFocused fill, label text
Delete file
danger, unfocusedNo fill. The label carries dangerFocused
Cancel
disabledWhile deleting: secondary fill, disabledText label
buttoncontent width x 78: 804 in the 900 AppDialog, 936 in the 1044 one and in DeleteFileDialog; 18 apart
labelh2 36 medium, centred both axes
AppDialogbutton 0 is primary, button 1 secondary. Exit is OK / Cancel with Cancel focused
DeleteFileDialogDelete file danger over Cancel secondary, Cancel focused
primaryfocused primary + textInverse; resting buttonSurface
secondaryfocused buttonFocus; resting no fill
dangerfocused dangerFocused + text; resting no fill, label dangerFocused
disabledbg secondary, label disabledText
panelsurface, 3px panelBorder, shadow at [12,12], centred by uiCenterX / uiCenterY
Do not. Give a Roku dialog button a hover state, a border, or a corner radius. Focus is a fill; the panel owns the only border in the dialog.
Contract: platforms/roku/DESIGN.md