diff --git a/docs/v4v-native-player-20261006.md b/docs/v4v-native-player-20261006.md
new file mode 100644
index 00000000..5d17ae72
--- /dev/null
+++ b/docs/v4v-native-player-20261006.md
@@ -0,0 +1,43 @@
+# V4V native player and music banner follow-up
+
+## Source changes
+
+- The existing native player now offers previous, next and shuffle. Each command
+ delegates to V4V's existing action, so V4V owns the queue and shuffle ordering.
+ Shuffle state and the current cover come back from the same app snapshot.
+- Cover artwork sits under a dark contrast layer; malformed or credential-bearing
+ URLs are ignored. Remote artwork requires HTTPS. No media URL, payment token or
+ second audio element is handed to the dashboard.
+- The app iframe remains mounted while hidden. The app panel and bottom bar have
+ complementary transitions, disabled for reduced-motion preferences.
+- V4V's same-host default-port media handshake survives a same-app login redirect
+ or absent referrer. Parent window, exact origin and per-session nonce checks
+ remain required. Unrelated host/sibling-port referrers are rejected.
+- The Sovereign Music banner uses the app's final settled cymatic field, not an
+ early intro frame: the original pattern, zero offset, particle lift 0.88 and
+ `renderFrame(0)`, matching `setSettledPattern`. The capture uses a fixed random
+ seed and the app's actual `cymatics.mjs`. A decorative record/play symbol and
+ waveform appear on the right, subdued on small screens.
+
+## Validation
+
+- App media protocol: 4 tests passed, including login redirect boundaries and
+ delegation of all three queue controls.
+- Dashboard bridge/audio/catalog: 18 tests passed.
+- Native player rendering: 1 test passed, including cover, authoritative shuffle,
+ control delegation, visibility on reopen and absence of a second audio element.
+- Vue type check passed.
+- Real Chromium component rendering at 390 and 1440 pixels: all six buttons
+ visible; previous/next/shuffle reached the controller; no horizontal overflow.
+ Reduced-motion rendering exercised. This is an isolated component fixture,
+ not live app integration acceptance.
+- The operator reported that the existing bottom-bar transition is now working.
+ This is separate from the automated evidence above.
+
+## Still required after deployment
+
+On Yaya, play a real song, close the app, operate previous/next/shuffle from the
+native bar, and reopen the same iframe. Verify uninterrupted audio, matching
+song/cover/shuffle, and the app's actual queue. Repeat at mobile and desktop
+sizes and through the new Nostr login. Verify banner visually with the signed
+node-only catalog. This follow-up does not claim those live checks passed yet.
diff --git a/neode-ui/public/assets/img/v4v-login-background.png b/neode-ui/public/assets/img/v4v-login-background.png
index abe9c059..bcef8db4 100644
Binary files a/neode-ui/public/assets/img/v4v-login-background.png and b/neode-ui/public/assets/img/v4v-login-background.png differ
diff --git a/neode-ui/src/components/GlobalAudioPlayer.vue b/neode-ui/src/components/GlobalAudioPlayer.vue
index 6ce5b864..fe26e6f3 100644
--- a/neode-ui/src/components/GlobalAudioPlayer.vue
+++ b/neode-ui/src/components/GlobalAudioPlayer.vue
@@ -6,9 +6,11 @@
ref="barEl"
class="fixed left-0 right-0 z-40 audio-player-bar"
>
+
+
{{ audioPlayer.error.value }}
@@ -43,7 +47,8 @@{{ formatTime(audioPlayer.currentTime.value) }} / {{ formatTime(audioPlayer.duration.value) }}