Split monolithic app.js (~1850 lines) into maintainable ES modules: - src/state.js — shared mutable state (S object) - src/utils.js — md5, esc, formatDur, toast - src/api.js — Subsonic API, Navidrome REST, iTunes API - src/player.js — playback, transport, queue, media session, preview - src/views.js — navigation, page loaders, card makers, search - src/ui.js — all modals, overlays, sidebar, settings - src/pwa.js — service worker registration + update banner - src/main.js — app init, connect, window globals Updated Dockerfile to multi-stage (Node build → nginx serve). Static assets (sw.js, manifest.json, icon.svg) moved to public/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 lines
855 B
XML
23 lines
855 B
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
<rect width="512" height="512" rx="90" fill="#07070f"/>
|
|
<rect width="512" height="512" rx="90" fill="url(#bg)"/>
|
|
<defs>
|
|
<radialGradient id="bg" cx="30%" cy="40%" r="80%">
|
|
<stop offset="0%" stop-color="#1a1a2e"/>
|
|
<stop offset="100%" stop-color="#07070f"/>
|
|
</radialGradient>
|
|
</defs>
|
|
<!-- Music note -->
|
|
<g fill="#e8a020">
|
|
<!-- Note head 1 -->
|
|
<ellipse cx="180" cy="340" rx="48" ry="36" transform="rotate(-15 180 340)"/>
|
|
<!-- Note head 2 -->
|
|
<ellipse cx="332" cy="300" rx="48" ry="36" transform="rotate(-15 332 300)"/>
|
|
<!-- Stem -->
|
|
<rect x="218" y="160" width="18" height="185" rx="9"/>
|
|
<rect x="370" y="120" width="18" height="185" rx="9"/>
|
|
<!-- Beam -->
|
|
<rect x="218" y="160" width="170" height="22" rx="11"/>
|
|
</g>
|
|
</svg>
|