Tier 3Tier 3 · Roku. 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.DesignTokens.brs · primary · appBackground · focus · borderHover · textMuted · danger
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. Every position passes uiSnap()
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
9:41
Row geometry · every number from UiMetrics.brs and ListItem.xml
The.Wire.S03E04.Back.Burners.1080p.BluRay.x264-DEMAND.mkv
resume at 21:04
3.42 GB
2024
Folder
12 items
Search Filter Settings
OKPlayOptionsBack
The grid, drawn 1:1102px margin, 1716×120 rows, 3px borders. 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
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.