Tier 2Tier 2 · Native apps: tokens only. Video is AVPlayerViewController: put.io presents it and sets .tint(), and that is the whole integration. Audio is a screen composed from stock parts, a system Slider, SF-Symbol Buttons and glass transport in the floating layer.--yellow-solid · --app-bg · --component-bg · --font-mono
The video player is not ours to design
AVPlayerViewController ships the transport, scrubber, PiP, AirPlay, track menus, Lock Screen and every gesture. put.io supplies the tint. Rebuilding it is a regression, not a design.
There is no system audio player, so the app composes one from stock parts: a Slider, SF Symbol buttons, glass on the transport. The disco ball is the app's oldest joke and the only put.io art here.
21:04−33:12
English
AVPlayerViewControllerEvery control here is Apple's. put.io set a tint and stopped.
9:41
Now Playing
Disco ball
ambient-session-03.mp3
72.4 MB · Music / sessions
18:22−26:05
Up Next
ambient-session-04.mp3
68.1 MB
Now Playing · composedStock Slider and Buttons; glass on the transport because it floats. ±15s uses the system skip glyphs.
Video chrome
AVKit
presented, never rebuilt
Played track
--yellow-solid
from .tint() on both players
Transport
glass · floating
44 / 56 / 76pt circles
Artwork slot
1:1 · 14pt
--component-bg · disco ball only
Title
22pt bold
the raw filename
Times
Berkeley Mono 13pt
elapsed / remaining, tabular
Skip
±15s
system glyph, app's interval
Up Next
List row
same row anatomy as the browser
Per-control detail, the token map and the full don't list live in platforms/apple/DESIGN.md.
Do not ship a custom video player on Apple platforms. If a feature is missing from AVKit, a stream-quality switch, a subtitle offset, surface it as a menu item on the system player or as a route in the file's context menu.

Rebuilding the transport to add one control loses PiP, the Lock Screen, CarPlay and the remote.