Tier 3Roku. Tokens inherit as on tier 2, but they arrive as generated BrightScript. Geometry is not inherited at all: Roku has its own metrics module, and this card is downstream of it.UiMetrics.brs · DesignTokens.brs · primary · appBackground · focus · text
Authored at FHD, on a 3px grid
Not 1280x720 scaled up. The grid is why an FHD layout lands on whole pixels when the device downscales to HD.
uiScreenWidth1920 · uiScreenHeight 1080
uiScaleGrid3. uiSnap() rounds computed positions to it
uiPageMargin102, a constant. Produces the 1716px row width. Never computed from --tv-overscan-*
uiBorderWidth3. roku-ui-metrics.test.ts fails any dialog at width="1": a 1px border vanishes on a real panel after scaling
uiShadowOffset12, flat. SceneGraph has no blur
cornernine-patch list-item-focus.9.png. SceneGraph has no border-radius, so Roku never reads --radius-tv
put.io
Your Files
Search
History
Settings
Home, drawn 1:1Logo-only header, list at [102,189], 1716×120 rows 30 apart. A value measured off this card is the value in the channel.
Canvas
1920 × 1080
uiScreenWidth / uiScreenHeight
Grid
3px
uiScaleGrid · uiSnap() rounds to it
Page margin
102px
uiPageMargin, a constant
Row
1716 × 120
uiListRowWidth / uiListRowHeight · 30 apart
Border
3px
uiBorderWidth · 1px is a test failure
Shadow
12px offset
uiShadowOffset · no blur
Centring
uiCenterX / Y
snapped, never a raw divide
Corner
nine-patch
no --radius-tv on Roku
Per-control detail, the token map and the full don't list live in platforms/roku/DESIGN.md.
Do not invent a metric. UiMetrics.brs, Typography.brs and roku-ui-metrics.test.ts are the contract; this card is downstream.

Need a value that is not there? Add it to UiMetrics.brs so the whole channel snaps to it.