feat: Add project icon with dark/light mode support
Process source PNG into transparent icon set with auto-switching SVG favicon (prefers-color-scheme media query), multi-size PNGs for favicon.ico/apple-touch-icon/manifest, and web app manifest.
@@ -4,6 +4,11 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Codewalk District</title>
|
||||
<link rel="icon" href="/favicon.ico" sizes="48x48">
|
||||
<link rel="icon" href="/icon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="/icon-dark-180.png">
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<meta name="theme-color" content="#6366F1">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&display=swap" rel="stylesheet">
|
||||
|
||||
BIN
apps/web/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
apps/web/public/icon-dark-16.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
apps/web/public/icon-dark-180.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
apps/web/public/icon-dark-192.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
apps/web/public/icon-dark-32.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
apps/web/public/icon-dark-48.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
apps/web/public/icon-dark-512.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
apps/web/public/icon-light-16.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
apps/web/public/icon-light-180.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
apps/web/public/icon-light-192.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
apps/web/public/icon-light-32.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
apps/web/public/icon-light-48.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
apps/web/public/icon-light-512.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
12
apps/web/public/icon.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<style>
|
||||
.light { display: block; }
|
||||
.dark { display: none; }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.light { display: none; }
|
||||
.dark { display: block; }
|
||||
}
|
||||
</style>
|
||||
<image class="light" width="32" height="32" href="data:image/png;base64,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"/>
|
||||
<image class="dark" width="32" height="32" href="data:image/png;base64,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"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.8 KiB |
19
apps/web/public/manifest.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "Codewalk District",
|
||||
"short_name": "Codewalk",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/icon-dark-192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/icon-dark-512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#6366F1",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
||||