Files
ytplayer/plans/transport-icons.md

4.4 KiB

Transport icon reconciliation

Branch codex/transport-icons starts at completed integration commit 0a5b113.

The previous shell mixed filled inline SVGs (main/stage/fullscreen) with Unicode play/pause/previous/next glyphs (mini, service, remote, gesture feedback, queue and playlist actions). All rendered transport glyphs now use shared currentColor SVG symbols defined in the already-eager download-actions.js; no new runtime file, loader or worker change is required. The core/playback/queue bodies remain guarded by their existing byte hashes. updatePlayBtn now has a behavioural state/handler regression test instead of an obsolete byte-identity assertion.

Location Change
frontend/download-actions.js:40 Shared drawing/state or markup
frontend/download-actions.css:13 Shared drawing/state or markup
frontend/index.html:212 Shared drawing/state or markup
frontend/app.js:3089 Shared drawing/state or markup
frontend/fullscreen-orientation.js:112 Shared drawing/state or markup
frontend/car-mode.js:13 Shared drawing/state or markup
frontend/remote-client.js:424 Shared drawing/state or markup
frontend/lyrics-window.js:27 Shared drawing/state or markup
frontend/views-core.js:225 Shared drawing/state or markup
frontend/shell-core.js:157 Shared drawing/state or markup
frontend/share-external.js:189 Shared drawing/state or markup
frontend/admin.html:388 Shared drawing/state or markup
frontend/glass-controls.js:10 Shared drawing/state or markup
frontend/stats-view.js:52 Shared drawing/state or markup
frontend/watch-party-client.js:350 Shared drawing/state or markup

Inventory: main deck previous/play/next/back10/forward10; stage back10/play/forward10; mini play; service previous/play/next; remote previous/play/next and paired-screen play; fullscreen HUD; gesture feedback; Car previous/play/back15/next; floating lyrics play/next; homepage playlist play badges; Queue/sidebar/bottom-navigation play symbols; Play all/queue/in-full, bookmark jump and Add-to-queue actions; external-player launch links; admin editor play/pause and Play-here actions; track-play statistics, party now-playing and empty-state/brand symbols. Speed's old fast-forward glyph also uses the shared set. Glass's legacy decoder accepts old input strings but emits shared SVG references; it never restores a transport Unicode icon from the new markup.

F7 uses round filled shapes and a large circular play button. Classic keeps its existing surfaces with clean line drawings. Glass uses thin strokes and translucent surfaces. Bento uses rounded tiles. Labels, IDs and event handlers remain intact; visible transport targets have at least 44px dimensions. Car retains its readable high-contrast surface and text labels. Floating lyrics clones symbol definitions into its separate document and observes playback/layout/theme changes.

Presenter has no transport controls. F7's Up-next sheet uses clickable track rows, not old transport glyphs. Lock-screen controls are rendered by the OS through unchanged MediaSession action handlers; website SVG/CSS cannot theme those buttons.

A screenshot/bounding-box check caught a Chromium SVG-reference quirk: ancestor layout selectors changed styles in referenced groups without switching cloned geometry (F7 previous remained x=5 instead of x=4). Variant selection now lives on visible <use> elements; the harness checks the rendered bounds, not just styles.

Final verification:

node --test frontend/*.test.js: 246 pass, 0 fail
bun test asset-manifest.test.js static-delivery.test.js: 21 pass, 0 fail
node perf/ui-geometry.mjs: 384 cases; 0 failed checks
node perf/ui-icons.mjs: 24 engine/layout/theme cases passed

Both engines passed transport state/geometry checks and the original download-icon checks. All sources are free of rendered legacy transport glyphs. The only remaining Unicode transport strings are the legacy decoder input mapping. Evidence is in perf/results/transport-icons-2026-10-09.json; 48 transport preview/remote screenshots were saved and the four dark-layout previews were visually inspected. Screenshots are local and ignored in plans/transport-shots/ and plans/ui-shots/. Real iPhone checks: Car/fullscreen readability and native lock-screen controls; document PiP is browser feature-dependent and was not verified on a real phone.