Music and media
The v5 media kit (PLAN.md §19), built for Playlist Lab: track rows, album grid, the now-playing bar (docked at the bottom of this page), queue, waveform scrubber, shuffle/repeat/like toggles, lyrics and a mini player. Built on core's .transport, .btn-go, .knob and the image card.
Track rows .tracklist > .track
Number, art, title and artist, album, like, duration and a row menu. The number turns into a play button on hover or keyboard focus (on touch the number is the button). Row 3 is playing (animated equaliser, motion settings permitting), row 5 is selected (.is-active), rows 4 and 7 are explicit, liked rows keep their heart. The album column hides in a container under 480px.
Night DriveLumen CoastHarbour Lights
Signal FiresThe Quiet OrbitPaper Satellites
Glass HoursENorth AtlasGlasshouse
Brass and EmberEddie Fenn TrioCopper Years
Postcard StaticKite SeasonAfterimage
A Very Long Song Title That Has To Truncate Cleanly On A PhoneEThe Quiet OrbitPaper Satellites
Album view: no art, no album column, current track paused
- Night DriveLumen Coast
- Fog SignalELumen Coast
- Last FerryLumen Coast
Album grid .album-grid
Square image cards (.card.has-media). The play button (.card-play) shows on hover or focus, always on touch and on the playing album; the last card is still loading.
- Harbour LightsLumen Coast · 2024
- Paper SatellitesThe Quiet Orbit · 2023
- Low Tide RadioMarisol Vega · 2022
- GlasshouseNorth Atlas · 2025
- Copper YearsEddie Fenn Trio · 2019
- AfterimageKite Season · 2021
Now-playing bar .now-playing
The live one is this page's footer: in the shell's status slot, stuck to the bottom of the screen, clear of the home indicator. Desktop: art and title, transport over the scrubber, extras with volume. Tablet: the scrubber takes its own row and only the mute button remains. Phone: play and next only. Below, the same bar paused, in the page flow.
Mini player .now-playing.is-mini
The phone layout at any width, as a card: for a sidebar, a picture-in-picture corner or a popover.
Play queue
Track rows with a drag handle (.track-handle, the app does the dragging) and a remove button. "Night Drive" is being dragged (.is-dragging) and will drop above "Brass and Ember" (.is-drop-target).
Now playing
Next in queue
Glass HoursENorth AtlasGlasshouse
Night DriveLumen CoastHarbour Lights
Brass and EmberEddie Fenn TrioCopper Years
Next from: Late drive
Postcard StaticKite SeasonAfterimage
Signal FiresThe Quiet OrbitPaper Satellites
Waveform scrubber .waveform
A real range input under a row of bars (one <i style="--level:…"> each). Drag or use the arrow keys: the played colour follows with no script. The second shows the hover preview (the app sets --hover from the pointer; this page's script does it on the first one too).
Shuffle, repeat, like and volume .media-toggle
On is the accent plus a dot (a filled heart for like), never colour alone, and nothing changes width. Repeat cycles off, all, one with three radios and no script (click, or arrow keys).
aria-pressed, .is-one).knob, needs controls.js)Lyrics .lyrics
The current line carries aria-current="true"; an empty line is an instrumental break. The app scrolls the current line into view.
- Headlights on the harbour wall
- we counted ships we couldn't see
- The tide came in and took the call
- and left the dial tone out at sea
- So hold the line, hold the line
- the static sounds like you to me
- Hold the line, hold the line
- till morning finds the frequency
Playing glyph .equaliser
Animated while playing (still under reduced motion), held with .is-paused. Here in a playlist sidebar whose selection is radios, no script.