diff --git a/apps/desktop/assets/icon.icns b/apps/desktop/assets/icon.icns index 2eb10307..ad992525 100644 Binary files a/apps/desktop/assets/icon.icns and b/apps/desktop/assets/icon.icns differ diff --git a/apps/desktop/assets/icon.png b/apps/desktop/assets/icon.png index 1c9d4064..e56166a1 100644 Binary files a/apps/desktop/assets/icon.png and b/apps/desktop/assets/icon.png differ diff --git a/apps/extension/public/icons/icon-128.png b/apps/extension/public/icons/icon-128.png index f9294888..4b165e12 100644 Binary files a/apps/extension/public/icons/icon-128.png and b/apps/extension/public/icons/icon-128.png differ diff --git a/apps/extension/public/icons/icon-16.png b/apps/extension/public/icons/icon-16.png index 2fd8f4c3..b761a8a8 100644 Binary files a/apps/extension/public/icons/icon-16.png and b/apps/extension/public/icons/icon-16.png differ diff --git a/apps/extension/public/icons/icon-32.png b/apps/extension/public/icons/icon-32.png index 7eb7aacb..886818e0 100644 Binary files a/apps/extension/public/icons/icon-32.png and b/apps/extension/public/icons/icon-32.png differ diff --git a/apps/extension/public/icons/icon-48.png b/apps/extension/public/icons/icon-48.png index 7b7b2b8a..3acca6af 100644 Binary files a/apps/extension/public/icons/icon-48.png and b/apps/extension/public/icons/icon-48.png differ diff --git a/apps/ios/EdgeEver/Resources/Assets.xcassets/AppIcon.appiconset/icon.png b/apps/ios/EdgeEver/Resources/Assets.xcassets/AppIcon.appiconset/icon.png index 349711bc..feeff194 100644 Binary files a/apps/ios/EdgeEver/Resources/Assets.xcassets/AppIcon.appiconset/icon.png and b/apps/ios/EdgeEver/Resources/Assets.xcassets/AppIcon.appiconset/icon.png differ diff --git a/apps/mobile/app.json b/apps/mobile/app.json index 0e186485..e1535103 100644 --- a/apps/mobile/app.json +++ b/apps/mobile/app.json @@ -35,7 +35,7 @@ "package": "org.edgeever.mobile", "versionCode": 95, "adaptiveIcon": { - "backgroundColor": "#d8f3ec", + "backgroundColor": "#16A06E", "backgroundImage": "./assets/icon.png", "foregroundImage": "./assets/adaptive-icon-transparent.png" } @@ -46,7 +46,7 @@ [ "expo-splash-screen", { - "backgroundColor": "#D8F3EC", + "backgroundColor": "#16A06E", "image": "./assets/icon.png", "imageWidth": 180, "resizeMode": "contain" diff --git a/apps/mobile/assets/adaptive-icon-foreground.png b/apps/mobile/assets/adaptive-icon-foreground.png index 9a90ff7e..75f7f39b 100644 Binary files a/apps/mobile/assets/adaptive-icon-foreground.png and b/apps/mobile/assets/adaptive-icon-foreground.png differ diff --git a/apps/mobile/assets/adaptive-icon-foreground.svg b/apps/mobile/assets/adaptive-icon-foreground.svg index 4285447b..db12b2e9 100644 --- a/apps/mobile/assets/adaptive-icon-foreground.svg +++ b/apps/mobile/assets/adaptive-icon-foreground.svg @@ -1,3 +1,5 @@ - - + + + + diff --git a/apps/mobile/assets/adaptive-icon-transparent.svg b/apps/mobile/assets/adaptive-icon-transparent.svg index 180cdd8a..7369ea43 100644 --- a/apps/mobile/assets/adaptive-icon-transparent.svg +++ b/apps/mobile/assets/adaptive-icon-transparent.svg @@ -1 +1 @@ - + diff --git a/apps/mobile/assets/icon.png b/apps/mobile/assets/icon.png index 49b1c313..dd371f5c 100644 Binary files a/apps/mobile/assets/icon.png and b/apps/mobile/assets/icon.png differ diff --git a/apps/site/public/apple-touch-icon.png b/apps/site/public/apple-touch-icon.png index 0232f2ac..00780f01 100644 Binary files a/apps/site/public/apple-touch-icon.png and b/apps/site/public/apple-touch-icon.png differ diff --git a/apps/site/public/favicon.ico b/apps/site/public/favicon.ico index a2c4554c..7ae065b5 100644 Binary files a/apps/site/public/favicon.ico and b/apps/site/public/favicon.ico differ diff --git a/apps/site/public/favicon.svg b/apps/site/public/favicon.svg index ca20ecbe..9619b0c3 100644 --- a/apps/site/public/favicon.svg +++ b/apps/site/public/favicon.svg @@ -1,6 +1,8 @@ - + EdgeEver - A rounded cat face drawn with bold lines on the EdgeEver theme block. - - + An open cat face in near-black on the EdgeEver green rounded tile. + + + + diff --git a/apps/site/public/icon-192.png b/apps/site/public/icon-192.png index a4799f75..addccf88 100644 Binary files a/apps/site/public/icon-192.png and b/apps/site/public/icon-192.png differ diff --git a/apps/site/public/icon-512.png b/apps/site/public/icon-512.png index 49b1c313..cb28cb7f 100644 Binary files a/apps/site/public/icon-512.png and b/apps/site/public/icon-512.png differ diff --git a/apps/site/src/components/navbar/navbar.astro b/apps/site/src/components/navbar/navbar.astro index 32594bec..f0cb20c8 100644 --- a/apps/site/src/components/navbar/navbar.astro +++ b/apps/site/src/components/navbar/navbar.astro @@ -49,13 +49,7 @@ const menuitems = [
- - - + EdgeEver diff --git a/apps/site/src/layouts/Layout.astro b/apps/site/src/layouts/Layout.astro index f084e3db..3ba7e4bc 100644 --- a/apps/site/src/layouts/Layout.astro +++ b/apps/site/src/layouts/Layout.astro @@ -53,7 +53,7 @@ const makeTitle = title ? title + " | " + "EdgeEver" : copy.defaultTitle; -const faviconVersion = "edgeever-cat-20260809"; +const faviconVersion = "edgeever-open-cat-20260809"; const localeRedirectScript = `(() => { const storageKey = ${JSON.stringify(siteLocaleStorageKey)}; const localeAttribute = ${JSON.stringify(siteLocaleDataAttribute)}; diff --git a/apps/web/public/apple-touch-icon.png b/apps/web/public/apple-touch-icon.png index 0232f2ac..00780f01 100644 Binary files a/apps/web/public/apple-touch-icon.png and b/apps/web/public/apple-touch-icon.png differ diff --git a/apps/web/public/favicon.svg b/apps/web/public/favicon.svg index ca20ecbe..9619b0c3 100644 --- a/apps/web/public/favicon.svg +++ b/apps/web/public/favicon.svg @@ -1,6 +1,8 @@ - + EdgeEver - A rounded cat face drawn with bold lines on the EdgeEver theme block. - - + An open cat face in near-black on the EdgeEver green rounded tile. + + + + diff --git a/apps/web/public/maskable-icon-512x512.png b/apps/web/public/maskable-icon-512x512.png index 49b1c313..dd371f5c 100644 Binary files a/apps/web/public/maskable-icon-512x512.png and b/apps/web/public/maskable-icon-512x512.png differ diff --git a/apps/web/public/pwa-192x192.png b/apps/web/public/pwa-192x192.png index a4799f75..addccf88 100644 Binary files a/apps/web/public/pwa-192x192.png and b/apps/web/public/pwa-192x192.png differ diff --git a/apps/web/public/pwa-512x512.png b/apps/web/public/pwa-512x512.png index 49b1c313..cb28cb7f 100644 Binary files a/apps/web/public/pwa-512x512.png and b/apps/web/public/pwa-512x512.png differ diff --git a/apps/web/src/components/PwaIosPrompt.tsx b/apps/web/src/components/PwaIosPrompt.tsx index 7f6b7be1..3f25423d 100644 --- a/apps/web/src/components/PwaIosPrompt.tsx +++ b/apps/web/src/components/PwaIosPrompt.tsx @@ -25,10 +25,12 @@ export const PwaIosPrompt = () => {
- {/* EdgeEver Logo representation */} -
- EE -
+

diff --git a/assets/brand/edgeever-concept-open-cat.png b/assets/brand/edgeever-concept-open-cat.png new file mode 100644 index 00000000..47656dd0 Binary files /dev/null and b/assets/brand/edgeever-concept-open-cat.png differ diff --git a/assets/brand/edgeever-icon.svg b/assets/brand/edgeever-icon.svg index ca20ecbe..9619b0c3 100644 --- a/assets/brand/edgeever-icon.svg +++ b/assets/brand/edgeever-icon.svg @@ -1,6 +1,8 @@ - + EdgeEver - A rounded cat face drawn with bold lines on the EdgeEver theme block. - - + An open cat face in near-black on the EdgeEver green rounded tile. + + + + diff --git a/assets/brand/edgeever-mark.svg b/assets/brand/edgeever-mark.svg index 4285447b..db12b2e9 100644 --- a/assets/brand/edgeever-mark.svg +++ b/assets/brand/edgeever-mark.svg @@ -1,3 +1,5 @@ - - + + + + diff --git a/scripts/prepare-brand-icons.mjs b/scripts/prepare-brand-icons.mjs index 3a349de4..99a9aff6 100644 --- a/scripts/prepare-brand-icons.mjs +++ b/scripts/prepare-brand-icons.mjs @@ -16,22 +16,22 @@ await copyFile(sourcePath, path.join(projectRoot, "apps/web/public/favicon.svg") await copyFile(sourcePath, path.join(projectRoot, "apps/site/public/favicon.svg")); const pngTargets = [ - ["apps/web/public/pwa-192x192.png", 192], - ["apps/web/public/pwa-512x512.png", 512], - ["apps/web/public/maskable-icon-512x512.png", 512], - ["apps/web/public/apple-touch-icon.png", 180], - ["apps/site/public/icon-192.png", 192], - ["apps/site/public/icon-512.png", 512], - ["apps/site/public/apple-touch-icon.png", 180], - ["apps/mobile/assets/icon.png", 512], - ["apps/ios/EdgeEver/Resources/Assets.xcassets/AppIcon.appiconset/icon.png", 1024], - ["apps/extension/public/icons/icon-16.png", 16], - ["apps/extension/public/icons/icon-32.png", 32], - ["apps/extension/public/icons/icon-48.png", 48], - ["apps/extension/public/icons/icon-128.png", 128], + ["apps/web/public/pwa-192x192.png", 192, { preserveAlpha: true }], + ["apps/web/public/pwa-512x512.png", 512, { preserveAlpha: true }], + ["apps/web/public/maskable-icon-512x512.png", 512, { background: "#16a06e" }], + ["apps/web/public/apple-touch-icon.png", 180, { background: "#16a06e" }], + ["apps/site/public/icon-192.png", 192, { preserveAlpha: true }], + ["apps/site/public/icon-512.png", 512, { preserveAlpha: true }], + ["apps/site/public/apple-touch-icon.png", 180, { background: "#16a06e" }], + ["apps/mobile/assets/icon.png", 512, { background: "#16a06e" }], + ["apps/ios/EdgeEver/Resources/Assets.xcassets/AppIcon.appiconset/icon.png", 1024, { background: "#16a06e" }], + ["apps/extension/public/icons/icon-16.png", 16, { preserveAlpha: true }], + ["apps/extension/public/icons/icon-32.png", 32, { preserveAlpha: true }], + ["apps/extension/public/icons/icon-48.png", 48, { preserveAlpha: true }], + ["apps/extension/public/icons/icon-128.png", 128, { preserveAlpha: true }], ]; -const renderPng = async (input, destination, size, { preserveAlpha = false } = {}) => { +const renderPng = async (input, destination, size, { preserveAlpha = false, background = "#16a06e" } = {}) => { const outputPath = path.join(projectRoot, destination); await mkdir(path.dirname(outputPath), { recursive: true }); const pipeline = sharp(input, { density: 384 }).resize(size, size, { @@ -39,13 +39,13 @@ const renderPng = async (input, destination, size, { preserveAlpha = false } = { kernel: sharp.kernel.lanczos3, }); if (!preserveAlpha) { - pipeline.flatten({ background: "#d8f3ec" }).removeAlpha(); + pipeline.flatten({ background }).removeAlpha(); } await pipeline.png({ compressionLevel: 9 }).toFile(outputPath); }; -for (const [destination, size] of pngTargets) { - await renderPng(source, destination, size); +for (const [destination, size, options] of pngTargets) { + await renderPng(source, destination, size, options); } await renderPng(adaptiveForegroundSource, "apps/mobile/assets/adaptive-icon-foreground.png", 1024, { diff --git a/scripts/trace-brand-icon.mjs b/scripts/trace-brand-icon.mjs index e9bff2fa..3bc4019a 100644 --- a/scripts/trace-brand-icon.mjs +++ b/scripts/trace-brand-icon.mjs @@ -4,7 +4,7 @@ import { fileURLToPath } from "node:url"; import sharp from "sharp"; const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); -const conceptPath = path.join(projectRoot, "assets/brand/edgeever-concept-bold-outline.png"); +const conceptPath = path.join(projectRoot, "assets/brand/edgeever-concept-open-cat.png"); const iconPath = path.join(projectRoot, "assets/brand/edgeever-icon.svg"); const markPath = path.join(projectRoot, "assets/brand/edgeever-mark.svg"); const adaptiveMarkPath = path.join(projectRoot, "apps/mobile/assets/adaptive-icon-foreground.svg"); @@ -12,7 +12,7 @@ const adaptiveMarkPath = path.join(projectRoot, "apps/mobile/assets/adaptive-ico const source = await readFile(conceptPath); const { data, info } = await sharp(source) .removeAlpha() - .blur(1.5) + .blur(0.8) .raw() .toBuffer({ resolveWithObject: true }); const { width, height, channels } = info; @@ -24,10 +24,10 @@ for (let index = 0; index < pixelCount; index += 1) { const red = data[offset]; const green = data[offset + 1]; const blue = data[offset + 2]; - // The generated concept uses a pale mint backdrop and a highly saturated teal - // mark. Require strong saturation so the backdrop vignette cannot leak into - // the traced outline as small edge artifacts. - if (green - red > 60 && green - blue > 4 && red < 180) { + // The approved concept uses a near-black mark over a green field. Trace only + // genuinely dark pixels so the generated backdrop variation cannot leak into + // the production vector. + if (red < 72 && green < 72 && blue < 72) { mask[index] = 1; } } @@ -204,12 +204,21 @@ const pathData = loops return `M${start[0]} ${start[1]}${curves.join("")}Z`; }) .join(""); -const title = " EdgeEver\n A rounded cat face drawn with bold lines on the EdgeEver theme block.\n"; -const sharedPath = ` \n`; -const iconSvg = `\n${title} \n${sharedPath}\n`; -const markSvg = `\n${sharedPath}\n`; +const iconSize = 1024; +const tileInset = 100; +const tileSize = 824; +const tileRadius = 188; +const sourceCropInset = 72; +const sourceCropSize = width - sourceCropInset * 2; +const scale = Number((tileSize / sourceCropSize).toFixed(8)); +const transform = `translate(${tileInset} ${tileInset}) scale(${scale}) translate(-${sourceCropInset} -${sourceCropInset})`; +const title = " EdgeEver\n An open cat face in near-black on the EdgeEver green rounded tile.\n"; +const sharedPath = ` \n`; +const transformedMark = ` \n${sharedPath} \n`; +const iconSvg = `\n${title} \n${transformedMark}\n`; +const markSvg = `\n${transformedMark}\n`; await writeFile(iconPath, iconSvg); await writeFile(markPath, markSvg); await writeFile(adaptiveMarkPath, markSvg); -console.log(`[trace-brand-icon] traced ${loops.length} contours from ${width}x${height} bold-outline concept`); +console.log(`[trace-brand-icon] traced ${loops.length} contours from ${width}x${height} open-cat concept`);