radieo/stream/icon-maskable.svg
Pierre-Olivier Mercier c73b71d32f stream: make the web player installable as a PWA
Wire up a web manifest, service worker and icon routes so the player can
be installed on mobile. The static manifest stays generic; the page
regenerates it at runtime from STATION_NAME so an instance keeps its name.
The service worker only caches the app shell, never the live stream or the
playback APIs. Icons (192/512, maskable and apple-touch) are rasterized
from the favicon.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 16:09:08 +08:00

49 lines
2.1 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
<!-- Variante « full-bleed » du favicon, destinée aux icônes d'application
(PWA maskable + apple-touch-icon). Le fond couvre tout le carré (pas de
coins arrondis : Android/iOS appliquent leur propre masque) et le motif
est ramené dans la zone de sécurité centrale (~80%) pour ne pas être
rogné par un masque circulaire. -->
<defs>
<linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#1a1030"/>
<stop offset="1" stop-color="#3a1145"/>
</linearGradient>
<linearGradient id="sun" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#ffe15a"/>
<stop offset="0.5" stop-color="#ff5c8a"/>
<stop offset="1" stop-color="#9b4dff"/>
</linearGradient>
<linearGradient id="grid" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#9b8cff" stop-opacity="0"/>
<stop offset="1" stop-color="#ff4fd8" stop-opacity="0.9"/>
</linearGradient>
</defs>
<rect width="64" height="64" fill="url(#sky)"/>
<!-- Motif ramené dans la zone de sécurité : translation + échelle 0.72. -->
<g transform="translate(9 9) scale(0.72)" clip-path="none">
<g>
<circle cx="32" cy="27" r="16" fill="url(#sun)"/>
<g fill="#1a1030">
<rect x="14" y="30" width="36" height="1.6"/>
<rect x="14" y="33.5" width="36" height="2.2"/>
<rect x="14" y="37.5" width="36" height="3"/>
<rect x="14" y="42" width="36" height="4"/>
</g>
</g>
<rect x="0" y="45" width="64" height="1.4" fill="#ff4fd8"/>
<g stroke="url(#grid)" stroke-width="1">
<line x1="32" y1="46" x2="-8" y2="66"/>
<line x1="32" y1="46" x2="8" y2="66"/>
<line x1="32" y1="46" x2="24" y2="66"/>
<line x1="32" y1="46" x2="40" y2="66"/>
<line x1="32" y1="46" x2="56" y2="66"/>
<line x1="32" y1="46" x2="72" y2="66"/>
<line x1="0" y1="50" x2="64" y2="50"/>
<line x1="0" y1="55" x2="64" y2="55"/>
<line x1="0" y1="61" x2="64" y2="61"/>
</g>
</g>
</svg>