- manifest.webmanifest + apple/maskable PNG icons; relative paths so the app works both at dev root and under /weather - plain-JS service worker (sw.js) with notificationclick/push handlers and an SW-mediated showNotification() path for native Android notifications - src/lib/pwa.js bootstraps registration and routes alerts to the SW - Every alert kind (storm/precip/heat/cold/uv/wind) is now a per-type preference toggle in Settings; removed the old alertThresholds.thunderstorm boolean in favor of notificationTypes.storm - Store dedups native notifications per forecast day and fires best-effort native notifications for newly-appeared alerts - inline-assets keeps manifest/sw/icons in dist; deploy.yml uploads + verifies all PWA files via WebDAV
25 lines
1.2 KiB
XML
25 lines
1.2 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
|
|
<defs>
|
|
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
|
|
<stop offset="0" stop-color="#0ea5e9" />
|
|
<stop offset="1" stop-color="#132744" />
|
|
</linearGradient>
|
|
</defs>
|
|
<rect x="0" y="0" width="512" height="512" rx="112" ry="112" fill="url(#bg)" />
|
|
<circle cx="256" cy="256" r="196" fill="#fbbf24" opacity="0.92" />
|
|
<g stroke="#fbbf24" stroke-width="12" stroke-linecap="round" opacity="0.9">
|
|
<line x1="256" y1="92" x2="256" y2="140" />
|
|
<line x1="256" y1="372" x2="256" y2="420" />
|
|
<line x1="92" y1="256" x2="140" y2="256" />
|
|
<line x1="372" y1="256" x2="420" y2="256" />
|
|
<line x1="142" y1="142" x2="184" y2="184" />
|
|
<line x1="328" y1="328" x2="370" y2="370" />
|
|
<line x1="142" y1="328" x2="184" y2="370" />
|
|
<line x1="328" y1="142" x2="370" y2="184" />
|
|
</g>
|
|
<path d="M256 332 Q214 332 196 306 Q184 276 192 256 Q188 232 214 218 Q206 204 238 196
|
|
Q246 190 262 194 Q268 178 296 190 Q300 208 314 216 Q328 226 326 238
|
|
Q342 246 344 268 Q348 288 336 300 Q330 318 316 330 Q310 344 256 332Z"
|
|
fill="#38bdf8" opacity="0.95" />
|
|
</svg>
|