From 5bf2dbcc7a0600a4074482ab07b3727bc9907a6a Mon Sep 17 00:00:00 2001 From: Elmar Kresse Date: Thu, 25 Apr 2024 09:08:01 +0200 Subject: [PATCH] #1: added pwa config and manifest --- frontend/index.html | 18 +- frontend/package-lock.json | 302 +++++++++++++++++- frontend/package.json | 1 + frontend/public/favicon.svg | 1 + frontend/public/pwa-192x192.png | Bin 0 -> 767 bytes frontend/public/pwa-512x512.png | Bin 0 -> 2999 bytes frontend/public/pwa-maskable-192x192.png | Bin 0 -> 595 bytes frontend/public/pwa-maskable-512x512.png | Bin 0 -> 1685 bytes frontend/public/robots.txt | 2 + frontend/public/themes/pwa-192x192.png | Bin 0 -> 767 bytes frontend/public/themes/pwa-512x512.png | Bin 0 -> 2999 bytes .../public/themes/pwa-maskable-192x192.png | Bin 0 -> 595 bytes .../public/themes/pwa-maskable-512x512.png | Bin 0 -> 1685 bytes frontend/vite.config.ts | 54 +++- 14 files changed, 365 insertions(+), 13 deletions(-) create mode 100644 frontend/public/favicon.svg create mode 100644 frontend/public/pwa-192x192.png create mode 100644 frontend/public/pwa-512x512.png create mode 100644 frontend/public/pwa-maskable-192x192.png create mode 100644 frontend/public/pwa-maskable-512x512.png create mode 100644 frontend/public/robots.txt create mode 100644 frontend/public/themes/pwa-192x192.png create mode 100644 frontend/public/themes/pwa-512x512.png create mode 100644 frontend/public/themes/pwa-maskable-192x192.png create mode 100644 frontend/public/themes/pwa-maskable-512x512.png diff --git a/frontend/index.html b/frontend/index.html index fa85e90..cce14c3 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,18 +1,20 @@ - - - - - - + + HTWKalender + + + + + + + - - HTWKalender
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7bbdb40..799c9ff 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -37,6 +37,7 @@ "sass-loader": "^13.3.3", "typescript": "^5.4.3", "vite": "^5.2.7", + "vite-plugin-mkcert": "^1.17.5", "vite-plugin-pwa": "^0.19.8", "vitest": "^1.4.0", "vue-tsc": "^1.8.27" @@ -2535,6 +2536,191 @@ "node": ">= 8" } }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", + "dev": true, + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", + "dev": true, + "dependencies": { + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.1.0.tgz", + "integrity": "sha512-pGUdSP+eEPfZiQHNkZI0U01HLipxncisdJQB4G//OAmfeO8sqTQ9KRa0KF03TUPCziNsoXUrTg4B2Q1EX++T0Q==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "dev": true, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", + "dev": true, + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "dev": true + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", + "dev": true, + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/rest": { + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.0.tgz", + "integrity": "sha512-STVO3itHQLrp80lvcYB2UIKoeil5Ctsgd2s1AM+du3HqZIR35ZH7WE9HLwUOLXH0myA0y3AGNPo8gZtcgIbw0g==", + "dev": true, + "dependencies": { + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "^9.1.5", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "^10.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.1.tgz", + "integrity": "sha512-Y73oOAzRBAUzR/iRAbGULzpNkX8vaxKCqEtg6K74Ff3w9f5apFnWtE/2nade7dMWWW3bS5Kkd6DJS4HF04xreg==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^22.1.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.14.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz", @@ -3863,6 +4049,12 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3887,6 +4079,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", @@ -3941,6 +4144,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -4198,6 +4407,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -4419,6 +4640,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -5051,6 +5287,26 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -5060,6 +5316,20 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -6113,7 +6383,6 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "peer": true, "engines": { "node": ">= 0.6" } @@ -6123,7 +6392,6 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -6660,6 +6928,12 @@ "vue": "^3.0.0" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -7783,6 +8057,12 @@ "node": ">=8" } }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -7924,6 +8204,24 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-plugin-mkcert": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.5.tgz", + "integrity": "sha512-KKGY3iHx/9zb7ow8JJ+nLN2HiNIBuPBwj34fJ+jAJT89/8qfk7msO7G7qipR8VDEm9xMCys0xT11QOJbZcg3/Q==", + "dev": true, + "dependencies": { + "@octokit/rest": "^20.0.2", + "axios": "^1.6.8", + "debug": "^4.3.4", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=v16.7.0" + }, + "peerDependencies": { + "vite": ">=3" + } + }, "node_modules/vite-plugin-pwa": { "version": "0.19.8", "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.19.8.tgz", diff --git a/frontend/package.json b/frontend/package.json index fe1ac6d..9c4e16b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -42,6 +42,7 @@ "sass-loader": "^13.3.3", "typescript": "^5.4.3", "vite": "^5.2.7", + "vite-plugin-mkcert": "^1.17.5", "vite-plugin-pwa": "^0.19.8", "vitest": "^1.4.0", "vue-tsc": "^1.8.27" diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg new file mode 100644 index 0000000..003b2d3 --- /dev/null +++ b/frontend/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/pwa-192x192.png b/frontend/public/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..b951f1c172b8538b780431a01bb4d139a1a2c2a0 GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1#sNMdu0Z<#doX&%@c%W#|2JUt z7R&~cK=clVAl$bM;b(<50JRB}1o;Is2q+jh1SAwR^v_?v|NQ;;%2G{T3=B-!o-U3d z6}R4AIo-F|K*TjrT0?=a?$7`0+gy0_!mBT&K2&~`^1iaAWL>z7AP`(ke?EQ3uEN>! zJEts{Hraoq$ZV&e_3{6C#jo~k-qo9*s(yC8;m&os_a8?K9s6cjz0~&jc9EXkKSg49 zW+v2dKK_*)X|k_vV{iW2rjM;XultX#uC57v{959-?zB~&hIMBnj_Y_F+pc!@N7%KV zc;jiYRiQoksTY5QP3ZyY(BFG$=Pl>sH{M@8zRoz#JNa_!N7eNvQ@3s7e(W9ha`Bd_ ztdHZ9-gK)b{kgL5(qazD>+W(BH*UYrcgkYQ=0eH&?sBsVt8|Ys9(!zPm%x)OaaiJ* zeH56nZzUr4Y_nhLF)v7eHqa|I=8uoR=(&8M=kv#>bLV_qva8_U`T7n=$?(VA zlE05}Z|_^5Hb?CGm3vnErWD$x-T!_lbA7-|iQ~1esvp+q+>6cs{q~2r-W`K|ZH0IK zv~p)3+uoE^lbtUSfAGhRn(f@T?H%t=N~+QBIJUj)=#OhkQujYi`nWdbaW_}j$F=Ua ze_WS*{`^hVv)r0cPs4qtmFju_tN#doHv6}rHK<6U_|N-kjmOoMfZ)|-`KN1QeyscP SI~SNF89ZJ6T-G@yGywp=l6*A) literal 0 HcmV?d00001 diff --git a/frontend/public/pwa-512x512.png b/frontend/public/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..ed86203c4717dcf07c12ce9d7246ead6cffe5267 GIT binary patch literal 2999 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 O&(b9;BTB=u?0*AwV?fdX literal 0 HcmV?d00001 diff --git a/frontend/public/pwa-maskable-192x192.png b/frontend/public/pwa-maskable-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..371b04f0d453d3c9419883d84817bfcdce65ed52 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1HUT~%uKz*c&;S2F|Nndc|L^_( zf3E%ibN>JD{r`Wi|NmqD|L^_(zcu{-TJZl%!vD_!|35nX|6uU{y~6)@0{`DK2&Lvq zF)%P*@^or-FFXA$7drgs`K?#3SEpv3H2iY&LCSi;0~hZy0WF1t zdvjlxq`s9|bUk$EN5TIRAk51zxHoYynFpeT9~BSzu@_1 z`#9rVZ~XB89{c#dQ;g=sjlKCbzkWP5+V=766pMYCB~sG%g(vcC>o)e>-B5Mrbx&=K z=H!o6f96W+Uz~F0hnRT|?@jk$qsN+gH%{Gf4K_-iZu>;$^@$&H=1Ycu4 zPwBDbvSV@86F%0b-kGpb#YipL$j<8V?dNHGG!8aO@~8Y^lALTPIeFuf~kz`_m$Zn_1^|%9(#E2UqBPH zF`uNQ{^IbaWMjU!_txM3;m6r`_J^HC?o59Pd;7-*W>pJ+r~f&&vcs;hX7d!8`#X+& zJR4F{W4ydKe@<_F$YhIsGjsnenzrSmuX)wg1^=!8h3TfQ*FY_dht4 UcXX*%vx0;@UHx3vIVCg!0LnEa)&Kwi literal 0 HcmV?d00001 diff --git a/frontend/public/pwa-maskable-512x512.png b/frontend/public/pwa-maskable-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9c589e557ccef77fb7d36e53137a969b298823 GIT binary patch literal 1685 zcmbVNX;c$e6pp4HTAiRhsAP}|C`zRk(-EmCA}Wg@MXIP&4Wv4vN5Q1@0B#t^4ay=3 z$Z}W&+bWBFM5&g_}G_Qm|}NwNZz^cz^7pA~7Sm@JD4Vp6WmfzMhtTVl9f;WQ0is^V4jS2Xll&Nvw)bW3(e?pS zdc>immDg|HwUbMs&b~QE_r(|?zxXvt5)B2-vq#i!pYqM~2bug7z*9rX;p}IgkduE+ zOKoA*okTd4^SC*wPO7diEZL_Heom}`Lc-5K`y9zoGO7N{2oV%mn&bn8IC{*dn=QY4 zM)q4yQURu|Lw-uek%3J7By50?&*;1J;Bz?Y58ZQn?dT#QrEM4| za*QT>0yqU%D5Py=wbBa#?A_Y!tD)qt=z9?LvzV~jFobZyIN>O31(MPHWe>*jsS43< zcb`vJ$&E#g#tV!k>iAqUkZ&y97A*QkAwA{9)&v~Dv@Zo?z!Q8qu&;v`-f;|d0#b+sQ8>y4Oilr)iRI({15JM$EFue60s1TB^lvBjdYZKL71k5N8I{L`I6FtP(5XL2fZINh zZu;)-!pkC5H?IfN+5?G$m(ooTwG2p@A%uNTBz$K) z|4;FW!G19<4vaU^hKS>RATsXbR=s*VuqGd5$DkfXgJ0Pj+oa9}-q+_)Bqn-&t9Uj5(FPh|40KOrsMe z7KxI?!UmI}2Sk&&|5a0&g2-YXj^?1tG6i?yk=M+f_?QCkNo#wQ_g97`PpskTramMOryVzS7P~ zkl;72k(oyvNvBJGR?S=hGJjTwLuM1v#B>p-jNEst%~3rfQnC_OmB;I!J2Cm;CRDod ezw!R7GFd_^?w9z7AP`(ke?EQ3uEN>! zJEts{Hraoq$ZV&e_3{6C#jo~k-qo9*s(yC8;m&os_a8?K9s6cjz0~&jc9EXkKSg49 zW+v2dKK_*)X|k_vV{iW2rjM;XultX#uC57v{959-?zB~&hIMBnj_Y_F+pc!@N7%KV zc;jiYRiQoksTY5QP3ZyY(BFG$=Pl>sH{M@8zRoz#JNa_!N7eNvQ@3s7e(W9ha`Bd_ ztdHZ9-gK)b{kgL5(qazD>+W(BH*UYrcgkYQ=0eH&?sBsVt8|Ys9(!zPm%x)OaaiJ* zeH56nZzUr4Y_nhLF)v7eHqa|I=8uoR=(&8M=kv#>bLV_qva8_U`T7n=$?(VA zlE05}Z|_^5Hb?CGm3vnErWD$x-T!_lbA7-|iQ~1esvp+q+>6cs{q~2r-W`K|ZH0IK zv~p)3+uoE^lbtUSfAGhRn(f@T?H%t=N~+QBIJUj)=#OhkQujYi`nWdbaW_}j$F=Ua ze_WS*{`^hVv)r0cPs4qtmFju_tN#doHv6}rHK<6U_|N-kjmOoMfZ)|-`KN1QeyscP SI~SNF89ZJ6T-G@yGywp=l6*A) literal 0 HcmV?d00001 diff --git a/frontend/public/themes/pwa-512x512.png b/frontend/public/themes/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..ed86203c4717dcf07c12ce9d7246ead6cffe5267 GIT binary patch literal 2999 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 O&(b9;BTB=u?0*AwV?fdX literal 0 HcmV?d00001 diff --git a/frontend/public/themes/pwa-maskable-192x192.png b/frontend/public/themes/pwa-maskable-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..371b04f0d453d3c9419883d84817bfcdce65ed52 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1HUT~%uKz*c&;S2F|Nndc|L^_( zf3E%ibN>JD{r`Wi|NmqD|L^_(zcu{-TJZl%!vD_!|35nX|6uU{y~6)@0{`DK2&Lvq zF)%P*@^or-FFXA$7drgs`K?#3SEpv3H2iY&LCSi;0~hZy0WF1t zdvjlxq`s9|bUk$EN5TIRAk51zxHoYynFpeT9~BSzu@_1 z`#9rVZ~XB89{c#dQ;g=sjlKCbzkWP5+V=766pMYCB~sG%g(vcC>o)e>-B5Mrbx&=K z=H!o6f96W+Uz~F0hnRT|?@jk$qsN+gH%{Gf4K_-iZu>;$^@$&H=1Ycu4 zPwBDbvSV@86F%0b-kGpb#YipL$j<8V?dNHGG!8aO@~8Y^lALTPIeFuf~kz`_m$Zn_1^|%9(#E2UqBPH zF`uNQ{^IbaWMjU!_txM3;m6r`_J^HC?o59Pd;7-*W>pJ+r~f&&vcs;hX7d!8`#X+& zJR4F{W4ydKe@<_F$YhIsGjsnenzrSmuX)wg1^=!8h3TfQ*FY_dht4 UcXX*%vx0;@UHx3vIVCg!0LnEa)&Kwi literal 0 HcmV?d00001 diff --git a/frontend/public/themes/pwa-maskable-512x512.png b/frontend/public/themes/pwa-maskable-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9c589e557ccef77fb7d36e53137a969b298823 GIT binary patch literal 1685 zcmbVNX;c$e6pp4HTAiRhsAP}|C`zRk(-EmCA}Wg@MXIP&4Wv4vN5Q1@0B#t^4ay=3 z$Z}W&+bWBFM5&g_}G_Qm|}NwNZz^cz^7pA~7Sm@JD4Vp6WmfzMhtTVl9f;WQ0is^V4jS2Xll&Nvw)bW3(e?pS zdc>immDg|HwUbMs&b~QE_r(|?zxXvt5)B2-vq#i!pYqM~2bug7z*9rX;p}IgkduE+ zOKoA*okTd4^SC*wPO7diEZL_Heom}`Lc-5K`y9zoGO7N{2oV%mn&bn8IC{*dn=QY4 zM)q4yQURu|Lw-uek%3J7By50?&*;1J;Bz?Y58ZQn?dT#QrEM4| za*QT>0yqU%D5Py=wbBa#?A_Y!tD)qt=z9?LvzV~jFobZyIN>O31(MPHWe>*jsS43< zcb`vJ$&E#g#tV!k>iAqUkZ&y97A*QkAwA{9)&v~Dv@Zo?z!Q8qu&;v`-f;|d0#b+sQ8>y4Oilr)iRI({15JM$EFue60s1TB^lvBjdYZKL71k5N8I{L`I6FtP(5XL2fZINh zZu;)-!pkC5H?IfN+5?G$m(ooTwG2p@A%uNTBz$K) z|4;FW!G19<4vaU^hKS>RATsXbR=s*VuqGd5$DkfXgJ0Pj+oa9}-q+_)Bqn-&t9Uj5(FPh|40KOrsMe z7KxI?!UmI}2Sk&&|5a0&g2-YXj^?1tG6i?yk=M+f_?QCkNo#wQ_g97`PpskTramMOryVzS7P~ zkl;72k(oyvNvBJGR?S=hGJjTwLuM1v#B>p-jNEst%~3rfQnC_OmB;I!J2Cm;CRDod ezw!R7GFd_^?w9