From 80607c19639f5bc975f1514da9c2dd49f4b9ca0e Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Mon, 24 Aug 2026 22:54:34 -0700 Subject: [PATCH] new dev favicons + settings favicon (#7295) * new dev favicons + settings favicon * prepr --- apps/frontend/COPYING.md | 7 ++ apps/frontend/nuxt.config.ts | 12 -- apps/frontend/src/composables/favicon.ts | 22 ++++ .../src/composables/project-settings-head.ts | 20 +--- apps/frontend/src/layouts/default.vue | 1 + apps/frontend/src/locales/ar-SA/index.json | 3 - apps/frontend/src/locales/de-CH/index.json | 3 - apps/frontend/src/locales/de-DE/index.json | 3 - apps/frontend/src/locales/en-US/index.json | 3 - apps/frontend/src/locales/es-419/index.json | 3 - apps/frontend/src/locales/fr-FR/index.json | 3 - apps/frontend/src/locales/it-IT/index.json | 3 - apps/frontend/src/locales/pl-PL/index.json | 3 - apps/frontend/src/locales/pt-BR/index.json | 3 - apps/frontend/src/locales/ru-RU/index.json | 3 - apps/frontend/src/locales/sv-SE/index.json | 3 - apps/frontend/src/locales/tr-TR/index.json | 3 - apps/frontend/src/locales/uk-UA/index.json | 3 - apps/frontend/src/locales/zh-CN/index.json | 3 - apps/frontend/src/locales/zh-TW/index.json | 3 - apps/frontend/src/pages/[type]/[project].vue | 1 + .../src/pages/organization/[organization].vue | 1 + apps/frontend/src/pages/settings.vue | 1 + .../favicon-local-light-settings.svg | 78 +++++++++++++ .../dev-favicons/favicon-local-settings.svg | 78 +++++++++++++ .../src/public/dev-favicons/favicon-local.svg | 68 +++++++++++ .../favicon-preview-light-settings.svg | 76 ++++++++++++ .../dev-favicons/favicon-preview-settings.svg | 76 ++++++++++++ .../public/dev-favicons/favicon-preview.svg | 66 +++++++++++ .../favicon-staging-light-settings.svg | 76 ++++++++++++ .../dev-favicons/favicon-staging-settings.svg | 76 ++++++++++++ .../public/dev-favicons/favicon-staging.svg | 66 +++++++++++ apps/frontend/src/public/favicon-32x32.png | Bin 0 -> 3546 bytes .../src/public/favicon-light-32x32.png | Bin 0 -> 3364 bytes .../public/favicon-light-settings-32x32.png | Bin 0 -> 3550 bytes .../src/public/favicon-light-settings.ico | Bin 0 -> 1150 bytes apps/frontend/src/public/favicon-light.ico | Bin 24838 -> 1150 bytes .../src/public/favicon-settings-32x32.png | Bin 0 -> 3471 bytes apps/frontend/src/public/favicon-settings.ico | Bin 0 -> 1150 bytes apps/frontend/src/public/favicon.ico | Bin 24838 -> 1150 bytes apps/frontend/src/utils/favicon.ts | 110 ++++++++++++++++++ 41 files changed, 805 insertions(+), 75 deletions(-) create mode 100644 apps/frontend/src/composables/favicon.ts create mode 100644 apps/frontend/src/public/dev-favicons/favicon-local-light-settings.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-local-settings.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-local.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-preview-light-settings.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-preview-settings.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-preview.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-staging-light-settings.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-staging-settings.svg create mode 100644 apps/frontend/src/public/dev-favicons/favicon-staging.svg create mode 100644 apps/frontend/src/public/favicon-32x32.png create mode 100644 apps/frontend/src/public/favicon-light-32x32.png create mode 100644 apps/frontend/src/public/favicon-light-settings-32x32.png create mode 100644 apps/frontend/src/public/favicon-light-settings.ico create mode 100644 apps/frontend/src/public/favicon-settings-32x32.png create mode 100644 apps/frontend/src/public/favicon-settings.ico create mode 100644 apps/frontend/src/utils/favicon.ts diff --git a/apps/frontend/COPYING.md b/apps/frontend/COPYING.md index ceea2a7808..9a54fca3a2 100644 --- a/apps/frontend/COPYING.md +++ b/apps/frontend/COPYING.md @@ -15,6 +15,13 @@ This includes, but may not be limited to, the following files: - src/components/brand/\* - src/public/favicon.ico - src/public/favicon-light.ico +- src/public/favicon-settings.ico +- src/public/favicon-light-settings.ico +- src/public/favicon-32x32.png +- src/public/favicon-light-32x32.png +- src/public/favicon-settings-32x32.png +- src/public/favicon-light-settings-32x32.png +- src/public/dev-favicons/\* - src/public/news/\* ## External logos diff --git a/apps/frontend/nuxt.config.ts b/apps/frontend/nuxt.config.ts index e15e5169dc..0620e4d36e 100644 --- a/apps/frontend/nuxt.config.ts +++ b/apps/frontend/nuxt.config.ts @@ -19,12 +19,6 @@ const preloadedFonts = [ 'inter/Inter-Bold.woff2', ] -const favicons = { - '(prefers-color-scheme:no-preference)': '/favicon-light.ico', - '(prefers-color-scheme:light)': '/favicon-light.ico', - '(prefers-color-scheme:dark)': '/favicon.ico', -} - const PROD_MODRINTH_URL = 'https://modrinth.com' const STAGING_MODRINTH_URL = 'https://staging.modrinth.com' @@ -50,12 +44,6 @@ export default defineNuxtConfig({ crossorigin: 'anonymous', } }), - ...Object.entries(favicons).map(([media, href]): object => { - return { rel: 'icon', type: 'image/x-icon', href, media } - }), - ...Object.entries(favicons).map(([media, href]): object => { - return { rel: 'apple-touch-icon', type: 'image/x-icon', href, media, sizes: '64x64' } - }), { rel: 'search', type: 'application/opensearchdescription+xml', diff --git a/apps/frontend/src/composables/favicon.ts b/apps/frontend/src/composables/favicon.ts new file mode 100644 index 0000000000..14522818ba --- /dev/null +++ b/apps/frontend/src/composables/favicon.ts @@ -0,0 +1,22 @@ +import { type MaybeRefOrGetter, toValue } from 'vue' + +import { + type FaviconVariant, + getFaviconHeadLinks, + resolveFaviconEnvironment, +} from '~/utils/favicon.ts' + +export function useFaviconEnvironment() { + const config = useRuntimeConfig() + const url = useRequestURL() + + return computed(() => resolveFaviconEnvironment(config, url.hostname)) +} + +export function useFavicon(variant: MaybeRefOrGetter = 'default') { + const environment = useFaviconEnvironment() + + useHead({ + link: () => getFaviconHeadLinks(toValue(variant), environment.value), + }) +} diff --git a/apps/frontend/src/composables/project-settings-head.ts b/apps/frontend/src/composables/project-settings-head.ts index 9c9c94ae87..6775ab6da8 100644 --- a/apps/frontend/src/composables/project-settings-head.ts +++ b/apps/frontend/src/composables/project-settings-head.ts @@ -1,26 +1,10 @@ -import { - defineMessages, - injectProjectPageContext, - type MessageDescriptor, - useVIntl, -} from '@modrinth/ui' - -const messages = defineMessages({ - headTitle: { - id: 'project.settings.head-title', - defaultMessage: '⚙️ {section} - {project}', - }, -}) +import { injectProjectPageContext, type MessageDescriptor, useVIntl } from '@modrinth/ui' export function useProjectSettingsHeadTitle(section: MessageDescriptor) { const { formatMessage } = useVIntl() const { projectV2: project } = injectProjectPageContext() useHead({ - title: () => - `${formatMessage(messages.headTitle, { - section: formatMessage(section), - project: project.value.title, - })}`, + title: () => `${formatMessage(section)} - ${project.value.title}`, }) } diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue index fbf55a146d..4751a030b4 100644 --- a/apps/frontend/src/layouts/default.vue +++ b/apps/frontend/src/layouts/default.vue @@ -1179,6 +1179,7 @@ const messages = defineMessages({ }, }) +useFavicon() useHead({ link: [ { diff --git a/apps/frontend/src/locales/ar-SA/index.json b/apps/frontend/src/locales/ar-SA/index.json index 51a5afd8c6..47b30ad99f 100644 --- a/apps/frontend/src/locales/ar-SA/index.json +++ b/apps/frontend/src/locales/ar-SA/index.json @@ -3554,9 +3554,6 @@ "project.settings.general.url.title": { "message": "رابط" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.title": { "message": "تمويل" }, diff --git a/apps/frontend/src/locales/de-CH/index.json b/apps/frontend/src/locales/de-CH/index.json index 1753ef43e6..c87485e341 100644 --- a/apps/frontend/src/locales/de-CH/index.json +++ b/apps/frontend/src/locales/de-CH/index.json @@ -4028,9 +4028,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Projekte auf Modrinth nehmen automatisch am Belohnungsprogramm teil. Falls du mit diesem Projekt keine Einnahmen erzielen möchtest (oder aus rechtlichen Gründen nicht darfst), kannst du dies hier deaktivieren." }, diff --git a/apps/frontend/src/locales/de-DE/index.json b/apps/frontend/src/locales/de-DE/index.json index 9341e90d55..732779edb2 100644 --- a/apps/frontend/src/locales/de-DE/index.json +++ b/apps/frontend/src/locales/de-DE/index.json @@ -4028,9 +4028,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Projekte auf Modrinth nehmen automatisch am Belohnungsprogramm teil. Falls du mit diesem Projekt keine Einnahmen erzielen möchtest (oder aus rechtlichen Gründen nicht darfst), kannst du dies hier deaktivieren." }, diff --git a/apps/frontend/src/locales/en-US/index.json b/apps/frontend/src/locales/en-US/index.json index 6f3e4b030d..36b9560015 100644 --- a/apps/frontend/src/locales/en-US/index.json +++ b/apps/frontend/src/locales/en-US/index.json @@ -4037,9 +4037,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Projects on Modrinth are automatically enrolled in the Rewards Program. If you don't want to (or can't for legal reasons) earn revenue from this project, you can turn it off here." }, diff --git a/apps/frontend/src/locales/es-419/index.json b/apps/frontend/src/locales/es-419/index.json index dcf5f0ca5a..cc2d944a80 100644 --- a/apps/frontend/src/locales/es-419/index.json +++ b/apps/frontend/src/locales/es-419/index.json @@ -4028,9 +4028,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Los proyectos en Modrinth están inscritos automáticamente en el Rewards Program. Si usted no quiere (o no puede por razones legales) obtener ingresos de este proyecto, puede desactivarlo aquí." }, diff --git a/apps/frontend/src/locales/fr-FR/index.json b/apps/frontend/src/locales/fr-FR/index.json index a29d190fc3..8bc258d58a 100644 --- a/apps/frontend/src/locales/fr-FR/index.json +++ b/apps/frontend/src/locales/fr-FR/index.json @@ -3938,9 +3938,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.title": { "message": "Monétisation" }, diff --git a/apps/frontend/src/locales/it-IT/index.json b/apps/frontend/src/locales/it-IT/index.json index f97135d822..29d0ed2341 100644 --- a/apps/frontend/src/locales/it-IT/index.json +++ b/apps/frontend/src/locales/it-IT/index.json @@ -4016,9 +4016,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "I progetti su Modrinth vengono automaticamente iscritti al Programma Premi. Se non vuoi guadagnare da questo progetto (o non puoi per motivi legali), puoi disattivarlo qui." }, diff --git a/apps/frontend/src/locales/pl-PL/index.json b/apps/frontend/src/locales/pl-PL/index.json index 38633eeccc..99314c5c1d 100644 --- a/apps/frontend/src/locales/pl-PL/index.json +++ b/apps/frontend/src/locales/pl-PL/index.json @@ -3854,9 +3854,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.title": { "message": "Monetyzacja" }, diff --git a/apps/frontend/src/locales/pt-BR/index.json b/apps/frontend/src/locales/pt-BR/index.json index 72310d7b01..151f71a783 100644 --- a/apps/frontend/src/locales/pt-BR/index.json +++ b/apps/frontend/src/locales/pt-BR/index.json @@ -3962,9 +3962,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.permissions.attention-needed.description.proj-approved": { "message": "Forneça a prova que possui permissão para redistribuir todos os seguintes arquivos. Após a conclusão, as versões retidas serão publicadas automaticamente." }, diff --git a/apps/frontend/src/locales/ru-RU/index.json b/apps/frontend/src/locales/ru-RU/index.json index a7be871b79..d1acc7ad67 100644 --- a/apps/frontend/src/locales/ru-RU/index.json +++ b/apps/frontend/src/locales/ru-RU/index.json @@ -4019,9 +4019,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} • {project}" - }, "project.settings.monetization.description": { "message": "Проекты на Modrinth автоматически зачисляются в программу наград. Если вы не хотите (или не можете по юридическим причинам) получать доход от этого проекта, вы можете отключить его здесь." }, diff --git a/apps/frontend/src/locales/sv-SE/index.json b/apps/frontend/src/locales/sv-SE/index.json index e9b2802472..9e0d5a8ddb 100644 --- a/apps/frontend/src/locales/sv-SE/index.json +++ b/apps/frontend/src/locales/sv-SE/index.json @@ -3485,9 +3485,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} – {project}" - }, "project.settings.permissions.attention-needed.title": { "message": "Okänt externt innehåll" }, diff --git a/apps/frontend/src/locales/tr-TR/index.json b/apps/frontend/src/locales/tr-TR/index.json index 2d9040478f..bbfc56269d 100644 --- a/apps/frontend/src/locales/tr-TR/index.json +++ b/apps/frontend/src/locales/tr-TR/index.json @@ -3962,9 +3962,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Modrinth’teki projeler otomatik olarak Ödül Programı’na kaydedilir. Bu projeden gelir elde etmek istemiyorsanız (veya yasal nedenlerle edemiyorsanız), buradan kapatabilirsiniz." }, diff --git a/apps/frontend/src/locales/uk-UA/index.json b/apps/frontend/src/locales/uk-UA/index.json index f02910aa26..d61de69c23 100644 --- a/apps/frontend/src/locales/uk-UA/index.json +++ b/apps/frontend/src/locales/uk-UA/index.json @@ -4025,9 +4025,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Проєкти на Modrinth автоматично реєструються в Програмі винагород. Якщо ви не хочете (або не можете з юридичних причин) отримувати дохід від цього проєкту, ви можете вимкнути його тут." }, diff --git a/apps/frontend/src/locales/zh-CN/index.json b/apps/frontend/src/locales/zh-CN/index.json index 06c1c49d61..f9adaf04c5 100644 --- a/apps/frontend/src/locales/zh-CN/index.json +++ b/apps/frontend/src/locales/zh-CN/index.json @@ -4025,9 +4025,6 @@ "project.settings.general.url.title": { "message": "URL" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Modrints上的项目自动注册于 奖励方案如果你不想(或由于法律原因不能)从这个项目赚取收入,你可以在这里关闭它。" }, diff --git a/apps/frontend/src/locales/zh-TW/index.json b/apps/frontend/src/locales/zh-TW/index.json index a7cd397b14..fcabb641de 100644 --- a/apps/frontend/src/locales/zh-TW/index.json +++ b/apps/frontend/src/locales/zh-TW/index.json @@ -4025,9 +4025,6 @@ "project.settings.general.url.title": { "message": "網址" }, - "project.settings.head-title": { - "message": "⚙️ {section} - {project}" - }, "project.settings.monetization.description": { "message": "Modrinth 上的專案會自動加入獎勵計畫。如果你不想(或因法律原因無法)從專案獲取收益,可在這裡關閉營利功能。" }, diff --git a/apps/frontend/src/pages/[type]/[project].vue b/apps/frontend/src/pages/[type]/[project].vue index c95d9ae700..f601a5964a 100644 --- a/apps/frontend/src/pages/[type]/[project].vue +++ b/apps/frontend/src/pages/[type]/[project].vue @@ -1272,6 +1272,7 @@ const { data: thread } = useQuery({ }) const isSettings = computed(() => route.name.startsWith('type-project-settings')) +useFavicon(() => (isSettings.value ? 'settings' : 'default')) // Jank modpack loaders fix const versionsRaw = computed(() => { diff --git a/apps/frontend/src/pages/organization/[organization].vue b/apps/frontend/src/pages/organization/[organization].vue index c793e2ff72..00605dae96 100644 --- a/apps/frontend/src/pages/organization/[organization].vue +++ b/apps/frontend/src/pages/organization/[organization].vue @@ -233,6 +233,7 @@ if (route.path.includes('settings')) { // hacky way to show the edit button on the corner of the card. const routeHasSettings = computed(() => route.path.includes('settings')) +useFavicon(() => (routeHasSettings.value ? 'settings' : 'default')) const client = injectModrinthClient() const queryClient = useQueryClient() diff --git a/apps/frontend/src/pages/settings.vue b/apps/frontend/src/pages/settings.vue index 291c7c86d8..ef69d5f312 100644 --- a/apps/frontend/src/pages/settings.vue +++ b/apps/frontend/src/pages/settings.vue @@ -149,6 +149,7 @@ const route = useNativeRoute() const auth = await useAuth() const flags = useFeatureFlags() +useFavicon('settings') useSeoMeta({ robots: 'noindex', }) diff --git a/apps/frontend/src/public/dev-favicons/favicon-local-light-settings.svg b/apps/frontend/src/public/dev-favicons/favicon-local-light-settings.svg new file mode 100644 index 0000000000..3740f677f0 --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-local-light-settings.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-local-settings.svg b/apps/frontend/src/public/dev-favicons/favicon-local-settings.svg new file mode 100644 index 0000000000..b2ec18ff28 --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-local-settings.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-local.svg b/apps/frontend/src/public/dev-favicons/favicon-local.svg new file mode 100644 index 0000000000..e044d27690 --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-local.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-preview-light-settings.svg b/apps/frontend/src/public/dev-favicons/favicon-preview-light-settings.svg new file mode 100644 index 0000000000..36e853d7d5 --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-preview-light-settings.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-preview-settings.svg b/apps/frontend/src/public/dev-favicons/favicon-preview-settings.svg new file mode 100644 index 0000000000..ee4977585a --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-preview-settings.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-preview.svg b/apps/frontend/src/public/dev-favicons/favicon-preview.svg new file mode 100644 index 0000000000..c8fdfd710f --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-preview.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-staging-light-settings.svg b/apps/frontend/src/public/dev-favicons/favicon-staging-light-settings.svg new file mode 100644 index 0000000000..eaa109608f --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-staging-light-settings.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-staging-settings.svg b/apps/frontend/src/public/dev-favicons/favicon-staging-settings.svg new file mode 100644 index 0000000000..5cb62c5222 --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-staging-settings.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/dev-favicons/favicon-staging.svg b/apps/frontend/src/public/dev-favicons/favicon-staging.svg new file mode 100644 index 0000000000..bb46548586 --- /dev/null +++ b/apps/frontend/src/public/dev-favicons/favicon-staging.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/public/favicon-32x32.png b/apps/frontend/src/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e266ce05734b862d07fc2f2e2055f5e221c1b8 GIT binary patch literal 3546 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 literal 0 HcmV?d00001 diff --git a/apps/frontend/src/public/favicon-light-32x32.png b/apps/frontend/src/public/favicon-light-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..ef59c57e1e7b79bfea74ed62f01473a4d4bfc3f1 GIT binary patch literal 3364 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 A_y7O^ literal 0 HcmV?d00001 diff --git a/apps/frontend/src/public/favicon-light-settings-32x32.png b/apps/frontend/src/public/favicon-light-settings-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..e7d0495f32dff51a4a7396fb2c99841b3b91e7e4 GIT binary patch literal 3550 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 literal 0 HcmV?d00001 diff --git a/apps/frontend/src/public/favicon-light-settings.ico b/apps/frontend/src/public/favicon-light-settings.ico new file mode 100644 index 0000000000000000000000000000000000000000..798066a3ad2a900799727bce0add199db74dfee5 GIT binary patch literal 1150 zcmYk+3rt&O6ae4@bTBr=vavp(AmFm`XiEz+h6;>rGAlAST$Dbzv^?yCArvCdY(lb) zhhf8_+l-1qgCGVcZEtV8KIveL$H2uU+L0+nOkA80B$`NAuBRhQyv_IDbN~OG)Bn#+ z3lM-GCKGUs0}TU!1ptW%r*LL#9&Z4+wtMH6$It&8T0L2CZX!RV#=cLYrntjp=3UE5 zQ#h@*aOcjrUWfpQ4iF0kC(w`RGTMOx-M@SWZ(rXBP3{bihT<6rQ~0XFxPvY+hHaFZ z!q>DmUSCGK=n&@iBMOzFLG&eRuXl=|*^|Yoq@u?Z#xT0n#9UERyic*`YxNF(YWtl7 zk(hTLy^pkL0CgaLpYK1MuMF1M;tg`+Q?!a?E$JQnSFX-i2KCGo2Xx&!iKhj?ynHl@ z{Cns`-=ZG$MV(75Ae z=n5)E(;C~}A(@FuD@pcWauf4WiFwyQYHPd&do4=wJTi0G=V@ZTQp6XUG5;ER9rcL? z0weYvDW_tW73Ro)>s`;OtL%yAN=fzundxa-Y7EEyL@laq@z+#Fp8n-`*+<19el^y5 zuy!D~^qFk=Ckcg0DteQ!a33~%bNE?<0D4zio!q>eE+sjCyyH1|_@nPmht@a+wdGcx zSNU~9u_!q;yP!fWQjig2WfXT^NyT7&)Wa5Uo&fj&T6lK5LC=+gEz0R zm}J3)=~EH4?u-VtJ;{XoTg13)?srRI?l3^Zcuo;viC#l1P2NM25nosEX;->IN^)tH zZSVcY8%K_h-s@ppx?K)~KeRDAXQZ6&Sw+}4iBFV#A29Blzsi zLi|1{N9z=gNi9)y2^F`hbEfq-cn_a!pDIf3Tc~1Oy`vAUac5pEp<>r$B!|{Igkv4k zZ*tB~7QnCTK4_eH2|8wEoN9Nbfv_g5`uoW7y;Ry$?zP`4+W(cWbGybN^bpp#^=em! zp#%4X=YCxKdnVW^G)=9~${db!~ rdgtGIQU*&Hc~BeL8vMc5<^TU+cA|s+0AM=`#IP*@Yk~lljsg4!TRyfD literal 0 HcmV?d00001 diff --git a/apps/frontend/src/public/favicon-light.ico b/apps/frontend/src/public/favicon-light.ico index 3b4e67a2785068faa8c8665dd8fbbb429ac49ab8..1b62c15c2106d847ea175ed221ff93bc027a95ad 100644 GIT binary patch literal 1150 zcmYk6YfM{p7{*_q+~itX+5@G9mOG9?ka3yGhAwWFY;1sWy_{Z7=@pn=ha1yH!?Kxp z%RY25-m+y&Ou)Dp+jDOzEkntoW-)wZIx(^j#tC6w60!66)*0eCdH&~ro|E_YKJQ7+ z0m#C$yc}??1HTMF1pqB5w9t9v;{^bpDT*HH-~0b96QUl1@s@lKM;M)qe9lgntlOeR z62-{Bo)it`v=sm5Wtkebq5rv;^6O66TAHi*>!7a=tAW8N)WZ?5;I47pn}PP4?z_gjyp>%YQLPizPdwxa;P%=F`cZ zLJzM!R{Ci$ovi2f4jKqx2~+5$@U1kQDmm=jB=f1RcR|zdEXyv-u3J!_?|`m zDdb63M)|W(YdnMCrmFsDI1TsGzMbLJ)PG90*46&Vs$|9I;Lb`dJfGDLDoG zhwrb1aze@8Qc9?M*NkivqmZnu`hiDm^v8d=mNk{?hu3b6=2E=wx*2D5@w!=Ge3#L} zRc~0hs!d<~@uB045`xKY`Iy*v#=+}o%y-8vHoOtO?am(j6u=j28L_bHE#z+ay`Ut03A2G32l7-W3I>m;o-ud?7$%XE=(>DiX(@O^m$70QwFz1$uRcB_6 z1d%(D=ztsFUIOp@ZV0CO30JH+Y~i(=$B|>=s?#<>zdE_Fr+H@iXn{j8q>%lqOKb`U zlf4Aa4L4Tb-uVuv76;(m7lZkMM3<3@wanQB!#%rL|NF$ko`Xjs#eg}fK%(>TxzCOH vQ;Yj{>eliBQU?HLocVxEZucP`h8-M~-Hg0FKuqFp!?GV5}6vDMr literal 24838 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 iZ9j0Qg;ndE8k5y~1tp5+PKjZfR diff --git a/apps/frontend/src/public/favicon-settings-32x32.png b/apps/frontend/src/public/favicon-settings-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..766e25dc67ee863f9d911c6db10aca377e0f930e GIT binary patch literal 3471 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 J8ZFm<{sl?*PsIQL literal 0 HcmV?d00001 diff --git a/apps/frontend/src/public/favicon-settings.ico b/apps/frontend/src/public/favicon-settings.ico new file mode 100644 index 0000000000000000000000000000000000000000..1f0147d935706fc2353655e095c250a27e7006e0 GIT binary patch literal 1150 zcmYk63rtg27{@=LqReH%Y%wew2-1ScLk5g7M%8VM79)yG7iNY+6Iy7gw1`k10vi-i z1hGsW;W5xDWYbB-vG7czJsR_WqC~0ayVbh}HY8wzO z@-5Paq$4*Evv2gP@qM*a_NSWoJ<|~XzYR>pu#N^(SIsQ)>Y1x!7cy^*T)u+(OUQ>v z%k@#~Wvu&^fri*~iT{%dew(I3y~Bbuk;s!x~uYl7U1R>wiv5{9*K>9=((3 z?fc?-vApVzG9{k|E$fMN&MYXycHRa!%F7FK$p$fxNFP=S@4wf3?}%3k_qIXL1Ya$+ z#i!pK8J2(jQ(a^>@wMt`&?6%aUe2e|x%#Q(aA*ZEu~9v_IQL;D?3d5&2i7;wq(i4u zD=|;)2(F$|MjL1-R11nI9SL02qu0cQ+KnXOX)XWmF6hSjxwzwc;{QyK=U>7`4VZ<* zq`q0hst!js+@n1Hgx0-#k{|NCDKVxG$Xa2e6(c#E?sgjFrGvfFm z*E*aTM%dy~rUctG!TYF77D%FbcbTySci+d#l*5~)H~I#;mLT>lU6 WdL+&j0IWgWF|2Y!j|YID0QeV}4>V^0 literal 0 HcmV?d00001 diff --git a/apps/frontend/src/public/favicon.ico b/apps/frontend/src/public/favicon.ico index c2ccbab9054b4efd64d26d8d5439fd980ac5e3b4..3d3c867711182ed22fd11b42744ce23187ee3155 100644 GIT binary patch literal 1150 zcmYk6drVtZ9LIk^87wmka|R5zud%U zB(wHJ1rXMHX^ zPw$#uHv071i=p39;;-ip6;@IycLue!$V?#H!XHtbBjKy%)~7rg8pRnoS;@GodZ&>~ z&#h%*zpQ5xuAb*)MHg)+_LctlBpA5Eg;?W8CDz%DY$N;ZOf}Y2L#4k|6Y(Pz3H@Ei z#DA)xk<{y1VSUvVM6%K;9DCv2`<;O%?vM_>Tn$Y8w}XyX_jL-{iE8Yn23b9g+|p5ryWggWgE4?+ zHp!yKcQ-Pz-;6oSf=3)BU|Fma_1a#NcH0!G;;#U@Z1N-x@^#3Xm>8#?ggxx#kLH5~ z-_NC8swbh3>hSzcY|?Cxa6D&vN$Y>jRSEYtZ=-(-bn;onHCTTGvfb=+GX^5|bg?Pd z9Dm&Pn{+96cXFxYdfeA~>%hKt^O-7-$Kx}#SOxQI9M(+x*W;XVokk5ps(z&}iO(+Ad^1LH4@6 z0N!%G7BbAH%ynVDmrB=%xm3%9kW+Zmaq5}(v3DQ*)VOn)&lu{Ul8sic2DMYjTtU|T zzzS3NJp z@!_HxZZEe6+_L8>COFxwnTdD3!6yCowxc+wL(O}r-5x>!z``+r kj-!~#!tnky{u|z9P#;E`cL5NH;fu=-A7uOhgj|4s04Ny|asU7T literal 24838 zcmc(n2e@5Tm4HtO5K1I;qLde;h*(i6%1EMq6p^ukh=LkKRIm@qFpi%I7NiJ>qBsg; z)L}poQ4t*#@ZkV5fG8qWfroU0(u)L=`Tv` zR@J0x`D*pmE98voy~|hCPE}P+pT4+!_{vrFed=b+SX@38yKPphs#&uZm$!IjRo$>r zRc%2Zn((l=9#P?T+~0xMu3r^wMEL`723!t5g0)~OJOfJmC@)XjKJYtO2#adYLQaO) z!X>abXdC^MmOl=Ufc>t3qhNp78nihCYQ9F+zyi?6Tfln9 zYtH(<6W$EwyD1z7?}Hs+C0GHD18pyZ4ZwDNJ^|K01gFBU>T=Y5k@BiwpDRK8_rmF* z%_(p^+*6mWy8+Gz^R;{onA@>+`84FEwf-)o<8dyW$GhPbunO!4{|ny+`@aYDcQIU2 z>+eR|-}SNWPcQ=3iMhKE)Xh8kf3Mcf$+n$feqDDaa#vUm!jCfM(ERn~TwDdNh3)2h zKN#Zym<`e2oUVbGKj-r|pzW7n3QU6C;LC6k90>Mb39QrBamPN{3*B{l99)CQ!#-2N zy=GkdYV#oM36Ya?`Z3UlzOM$?dtZ1OOot1>Hv1j~_KE&V%kDk%GKRLU`}Qymtas17 z3Ch0Nk7IHzPX%MT9?r)saIUiLxbtA56`nI3P1Os*^Q!a58P)Hv%z?6d^kwi-m$Yu2BgKL-l`Aob1^Wbne034rw-0KS<>^(D{3r&oqn|Jo@Je&=$ zhqYkbJX5z7oD16K7$cN(4D9Z}iTl+0`yqV)1^qy9t`32GpZ$cgYv6rw3Phi;qW>V3 zk3^5LI(KKLwzy|(H;31PIhgOE5dDrp5C5(~_J35ebC0->v~@maL-@#YZR*!ZZKeOO z(-!egMvptseVFIx9LgI(_Fd|p@85y&=lpySTnp=d53Z5@rossjwvNH~nZsc{D1BR= z4p)MG^y&J#hullnxj*)V=({HRcOhbgG)H}fT}aQ>$7*|hz64yy)9X6>{|eTD=(7R( zkKiE)|H@B5*eD&h=UdpEhVGuS?KR-Oj<(~_jT`+}N8bSs2KSWvVsnW0mC?Th(fCvrMfg#g(<%^kuEp_?&uQ1qcgnC)ZV00gIVc_PTfn(4?|yUM3od}% z=UmFZ3uND+Z$W(-!?Cz0T<6b1tm`J|oz75>V5$gbS{rm2wPxs!=&^6!Lcj(wOxdsp~;Ukh#V%DUO9zx(?;so&M;dqUhl<8s(!=aqBr zJ`V@O{ZPiS{4iVxXM<<$JlGV%htIj~x$k|H4}#Wbjr!diza)0$Z;6Gp&aD9Eg zT;Hy7QGNl8LD~Ni>iz{9d)I+-=B<>=ar+MCy|6X-ev$3lbmxCt_#wpmSLEV6>;Y~4 zo=tr@Z_f2$uv(8kZGNI|8hwt0#~|V>uY|l_+B=V)&Dl=qhKLq-^WpI)&bq;yX_fsAN(9#^SpOFYwrZlg3G~u=o$2SSOX%y(mVc4$nkHd z>^=#*&lc_3R^2^u5}-E;1R%b<)uk+Nq{-aD_O{I}%OIdl*056)Zo{u8=q$olXp zaLmz`rG5Szj)w2SUm&-up8&BpXQ1DhYReMVswsA}Bf&gbJ0{@u^+;jnXl z-wy7{uu+}}ac1~letywDhw>MTx-%$8&XL1z)aAJwqx?*WcBOHg&x7Fya6Rk|VY32y z`5b(Kx-!0f%lL;=m&f%p%0AoSyOb-^wh=rn*%<%Fko_D>`O`(+d6ZX$@afriVPP{y z*)t<-hLPrSLE*g9HkjGd({lzPGUGKDqAJ^+92tUT$ z7q)|ZHn`3{E74E675o9BZ%CipU%}4M*ykKl{qE>_obmiQzH(l^Nu7JT@rgbQa{iHn z()wMXu`ljc_tVLc`}iyv+dgxOHplhyx~=g^`Hf&(_7nP_sox2*edx2O_pS(ArE4GU zp6j<2?LVcwX0i#}y{P*I+zR&5DtLGJ`RdphwgJ{4&^+AKc8Xu`mf=;;JSs+&C&0GunpBQ*@UKg;-IjC<8M}f~vTYT$2 z0@2U$IVaZN4BlHK5bYh=7CY)nTguLb&+5nFJaB$JqurOr`5I*ZZ=?JP*s`dv-gwG7 z5oVw)`_^UW*E?r#_;)x4_JjQFWxdI(SHQ=sYUaIFHEpb_ri@nAw;GD~I!8+gXo3rRi zOm&&LCf{CTc7Hoo@7wo*_lbAkW$-8P*>lf}&(!rW3eSd)&qy-LZ8B`0YT1@cUFVp+ zZ~Uy|Id?z!JP*Sa*sTY>#^3r3Zg&v>Va8MV7x@*^JHoTqrW#o!*2I%uT@GjU8n(>Do zeV3&S-$|~5{!aKkOk|wBZ0F-=E9f=;5!(J(#PS`$d(m^XYaX8Dv2Q^l^u&dOSKIO zU&~W|58MT1>?JM7yWRqPz6pA*z0cY&hKTED&3&OcL(!LL4(ylk^T@}*&l*cI*2n1g zXZR(29p-@V1fC!Jf#+Vod(U@*TVa^k_hI)TaJ`x_Ok@&rzuJ#ue;9^|pKWfS&x!D6 z*bJtE??p{sZF=OI+V(+@y^{U+(p{$y!i4uhiWxcXPu&C1D^^>*=Ywu13$p)FRgx_hyINAl6}m;JZtg}rCpozN>rS?}{V7dC>Nf1|g>>{VCzm_hk7 zFp+$GW?q^7^onJDwnO)G=0xWFZ0xr$d^A4$#qHJB;>%}e7Mus=-1jP9g6+o8H<#Rw z?sIx7^zxbOJ=;!z>CnVbUlxC*&$_%m@+4RQIhS6#XYLf}^}Fqph5lH+ApNvb79;Z6m`o{{yen#$aUVG&F9SIV^{PgdB@GZL%$YZ9|q^t z{p=kaZA&75UHcg{2hRH+2gG`S_E$ldFUrRa=r_^4eZJ3!-z_7*&fyE8EAN(P*t2y| zu7?+XT&GKi=r_pklil7r2gO)kK>4--WAUua&%m~n?-|hN3fiw3VDn^;U;l&VU`1?B z8<6LG+Vfu8kFsZDul(K1?|@Cf=fwWKY@dpH?}wK_*Rzny??xXq9^XHr|Iz6E^1hw+ z=hXI-ku%{8@ZRg!uV0&UdK26M4}#@>_GQ~|v2W&}I0s%t+n_c2EH;kc{o+_k|GDh> zI}KvKl&gYscro;w>+C0V?N5ZwU`v<a(H-^pOMkw2J`Tewy8^1B59_jn%Hz4;bb)U(#VUVxvcNOfnfW5#q^;x|K zeAjL4TE_n|+ROO4?3!;1!;Jp}5i8<^jC!Q!z#kyTDD|(=J_%aKug_@fBUh)*z46Sj ziCl{Q?%6VaF30$tgF*ZMkhWMwyq&P|dzKud)ZZ6=l!N}VZ9hHxNp^G5%lNr`9qsP_ z4Pemc(xb3xU9+f1ej2j>HvLR&yqlVJ&bbfLbHA+TeyRR=^tK$L?lRif1^3eh18h&F zy}AEd;ysP_Uk>nL+=Xx$G``SV=QYO|Ru5mu72$^vV{Mb?(r(_~mERj+dkO7p!nj=P zx)J1{`zms{4_n`LnmthJ!;ZJKOMYC}%OPU6$?wp@FJMuWkI+jhllUC+j&E^cTR*(95s&_roio9KZWv6#DhG z&F8!8{*HX8FMV!J-BmEiXIuME=r=(z<+^jQ@pEsPt7Y%7e)oWW z?t$H)>E9d0JQ>+VbMB;Oqm&cVW%CPnW+IpAo}%gbiUA_!RscZUyh-$bAgGYwVP}hHp8s4*Cxu`uCE?cu(rr z%jde-Trh+`@A$94xc9ekOk2*gO~fIIhFNCVcXnUIghLtu{;ZXPbz)&Dqn`} z>%eDxT;4g(FnXI0>U{s+1BN;4BF}TMpAJn<{o-dk^q0Yn5WWV<`>^$ScpfzIO1)ov z+e&-NJ{w!Xi7@CLE$4V0_I_8^_*{b6&iA1A=^Ru2CO8_l0Y8s4@q6hxuVk|ly5AQc z2e&{Or(gLF?Ee{>*f~Z&J@=_~-x)kZ`o(K&bKcGb@6_$UyLSpSIb}U^N_F0ocR`!) zeszA9-6#3!#0&q!$fB?NZ(o?`KFB#be^nMlIrIPw7cn0NT;9lsJ&#?907hUUbvUQ!$o$omPeEpU7 zBfzsI`i=9qR1@&`e6oM5-_K>T>I5sL!b4bEAJ>H-vFKy;lmgg!Mk7$h&;Ob=e(D- zUdF7;?mzE{|AC3zmF{1^C+W&R%1GaPywCJ`7Q7wSg|2a1eyac4a-eQico}>WeD}N! z^7_R(hV=8pUeIg&uJQihdros1xg2e-p=XBA{KoK1@N<0E`1KierHpvXLM~b~R!v&upFbpk;Ku_d z&7HYu(WA-{oB8#DDT@}3Dkm>mG*?Lvg7b?6ixwjJWu7^7Q_iHDa)jR@sQACKr}=vX z*!VjLGm-ojLZ>fs^5{(dnOjYpJLz5}zi}{~ko2pj*1wYwKlu|sebD@RLdQzW9)C0H z`XpDf>V=)8MwQd5Nn^FVxB76Wyl}Cs7L8HnXBTEVc;u8?PF_42j9}DBVDv~co&%H6 zXCkXHB%+#KRXZs0g`8V$S5^O{^#&Cx)(mboli<%bbpELxXLwV_=*?XEI}TGGB`c&o zN6`KK?-A!2>0B!3xDLq9x@_Rwjyip;)0lEvXC0?jtRo$!Vy@xT&Vr9stFf&A59o>@ A [ + { + rel: 'icon', + type: icons.type, + sizes: icons.sizes, + href: hrefByMedia[media], + media, + key: `favicon-${media}`, + }, + { + rel: 'apple-touch-icon', + type: appleTouchIcons.type, + href: appleHrefByMedia[media], + media, + sizes: appleTouchIcons.sizes, + key: `apple-touch-icon-${media}`, + }, + ]) +}