Frutiger Aero: the theme now plays its soundtrack

Selecting Aero starts a random track from the Frutiger Aero playlist
(Bigblamboii's set on SoundCloud); every following track is drawn at random
too, so the set shuffles itself. The player is the credit bar from the mock:
a 44px glass circle with a note by default, expanding into pause + the
track's title + "SoundCloud - artist" (both reported by the widget).

- Only Aero ever touches SoundCloud: the embed and the widget API are created
  while the theme is on and the listener has not turned it off; light/dark
  request nothing (pinned by a suite check).
- The off choice persists (freezmo.aero-music.v1); re-selecting Aero in
  Settings is fresh consent (applyTheme clears it).
- Autoplay rides the theme-selection gesture; after a reload the circle comes
  up paused (browsers require a gesture) and one tap starts it.
- Volume 45; the iframe is 1px and inert, only the audio engine; the credit
  area collapses back to the circle without stopping the music.
- Geometry: clears the phone tab bar, lifts above the chat composer and the
  wizard bar, steps aside under immersive overlays and while the cookie
  notice shares the corner. 44px targets on phones.
- Cookie policy gained the third-party-embed paragraph it was owed.

tests/aero-music-test.mjs (16th suite, stubbed widget API, 21 checks). All
suites green, contrast scan clean. Version 0.7.0, SW v92.
This commit is contained in:
Martin Dvořák 2026-10-15 22:47:44 +00:00
commit a4c85ed77a
14 changed files with 570 additions and 4 deletions

View file

@ -1492,6 +1492,24 @@ Things I chose while building, with the reasoning:
into view as you type. No strings, so no i18n; the additive change sits on top of the merged
scene-heat rework unchanged.
101. **Frutiger Aero has its soundtrack.** Picking the theme starts a random track from the
Frutiger Aero playlist (Bigblamboii's set on SoundCloud) and draws every following track at
random too, so the set shuffles itself. The player is the credit bar from the user's mock: a
44px glass circle with a note by default, expanding into pause + the track's own title +
"SoundCloud · artist" (the widget reports both; the fallbacks are the playlist's own title and
author). Details that matter: the SoundCloud embed and its widget API are only ever created
while Aero is on and the listener has not turned it off — light/dark request nothing from
soundcloud.com, and a suite check pins that; the off choice persists (`freezmo.aero-music.v1`)
while re-selecting Aero in Settings is fresh consent (`applyTheme` clears the flag); volume
starts at 45; playback pauses rather than resumes after a reload (browsers require a gesture,
so the circle comes up paused and one tap starts it); the iframe is 1px and inert, only the
audio engine; the control clears the phone tab bar, lifts above the chat composer and the
wizard bar, steps aside under immersive overlays and while the cookie notice shares the
corner, and the credit area collapses back to the circle without stopping the music. The
cookie policy gained the one third-party-embed paragraph it was owed (soundcloud.com may set
its own cookies; Freezmo still sets none). `tests/aero-music-test.mjs` stubs the widget API
and pins all of it (21 checks).
100. **The review breakdown carries each deck's own total.** The follow-up to 99: "bro its not
possible, I only have 2 decks" — the screenshot showed three deck cards (one clipped at the
window edge) and a breakdown of 15 + 13 + 6 = 34, so the count was right and the *number of