Touch is the engine — no focus rings, long-press for context, bottom-sheet for actions. Visual stays put.io: yellow folders, GT America, tabular-mono numerics. Native chrome (status bar, tab bar, FAB, gesture pill) is the only thing that changes between platforms.
9:41
Files
your storage
Films
Search in Films
202412 items
2023 · keep40 items · pinned
Dune.Part.Two.mkv3.42 GB · Mar 14
tears_of_steel.mkv1.20 GB · Feb 28
subtitles.srt14 kB
Files
Transfers
Recent
Account
iOS · SwiftUI
Files screen, dark by default.
Large title at 28px / 700 with an uppercase mono eyebrow above.
Search sits below title (iOS large-title pattern); collapses on scroll.
Tab bar uses yellow for active — never iOS-default blue.
Long-press opens the bottom-sheet with the file name pinned to the top.
3-dot menu is the canonical row affordance (vs iOS's swipe).
FAB hidden when sheet open — would compete for taps.
10:24
tears_of_steel.mkvFilms · 2023
00:42:18−01:08:42
Audio
Subs
PiP
More
Android · Player chrome
Media3 PlayerView with overlay.
Scrubber uses --yellow-solid on a translucent track.
Cast first-class top-right (Chromecast is primary on Android per the brief).
PiP active tints yellow — Android handles handoff to system PiP natively.
Mono numerics for timecode — never reflow on tick.
9:41
┌( ಠ_ಠ)┘
Link this device
Open put.io/link on the device showing this code, and enter it.
P
U
T
I
O
7
Pairing flow — shared across all native apps
Same kaomoji, same code, same copy.
Kaomoji ┌( ಠ_ಠ)┘ is the existing welcome on Android TV — keep it.
Six-character code in mono at 18pt / 700.
Pill CTA at 44pt min — iOS hit-target floor.
Used on iOS, Android, tvOS, Roku — copy identical, only chrome differs.
02Mobile components — patterns that only exist on touchSwiftUI · Compose · Media3
Beyond the shells: native mobile patterns the web app doesn't have. Pull-to-refresh, swipe-to-action, native segmented controls, toast snackbars, setting toggles, FAB. All match the production styling in putio-ios and putio-android.