Restore a light app icon while keeping the legacy background removed

The previous icon fix solved the square-background issue on older macOS
versions, but it overcorrected by removing the card entirely and turning the
app mark into a bare transparent glyph. This keeps the icon light and app-like
again by using a shallow light card as the icon body while still removing the
extra outer background that made uncropped icons look wrong.

Constraint: Older macOS versions may expose the bundled icon without applying the newer rounded mask treatment
Constraint: The desktop bundle must keep app-icon.svg and generated PNG/ICNS/ICO assets aligned
Rejected: Keep the transparent-only glyph | no longer reads like the intended app icon in Finder and DMG views
Rejected: Restore the original AI-generated image wholesale | reintroduces the outer background that caused the square-icon issue
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Treat desktop/src-tauri/app-icon.svg as the canonical source and regenerate the bundled icon assets in the same change
Tested: desktop bun run lint; desktop bun run test; extracted regenerated icon.icns for visual verification
Not-tested: Full DMG rebuild and manual Finder/Dock verification on older macOS
This commit is contained in:
程序员阿江(Relakkes) 2026-04-21 18:26:02 +08:00
parent 5377eb596f
commit 056dc36331
8 changed files with 35 additions and 17 deletions

View File

@ -1,48 +1,66 @@
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="brandStroke" x1="158" y1="136" x2="378" y2="390" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF9568"/>
<stop offset="0.5" stop-color="#F07C54"/>
<stop offset="1" stop-color="#C65F35"/>
<linearGradient id="cardSurface" x1="108" y1="82" x2="387" y2="430" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFFEFC"/>
<stop offset="0.54" stop-color="#F5F2ED"/>
<stop offset="1" stop-color="#DDD8D2"/>
</linearGradient>
<linearGradient id="brandSpark" x1="256" y1="120" x2="256" y2="284" gradientUnits="userSpaceOnUse">
<linearGradient id="cardGloss" x1="256" y1="84" x2="256" y2="247" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFFFFF" stop-opacity="0.9"/>
<stop offset="1" stop-color="#FFFFFF" stop-opacity="0"/>
</linearGradient>
<linearGradient id="brandStroke" x1="156" y1="144" x2="372" y2="386" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF9A72"/>
<stop offset="0.52" stop-color="#F18258"/>
<stop offset="1" stop-color="#C86439"/>
</linearGradient>
<linearGradient id="brandSpark" x1="256" y1="145" x2="256" y2="263" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFB08B"/>
<stop offset="0.55" stop-color="#FF885F"/>
<stop offset="1" stop-color="#E76A43"/>
<stop offset="0.58" stop-color="#FF8A62"/>
<stop offset="1" stop-color="#E26C45"/>
</linearGradient>
<filter id="cardShadow" x="64" y="76" width="384" height="392" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feDropShadow dx="0" dy="18" stdDeviation="18" flood-color="#534330" flood-opacity="0.22"/>
</filter>
</defs>
<g transform="translate(-31 -31) scale(1.12)">
<g filter="url(#cardShadow)">
<rect x="96" y="92" width="320" height="320" rx="82" fill="url(#cardSurface)"/>
<rect x="96.75" y="92.75" width="318.5" height="318.5" rx="81.25" stroke="#F5F1EB" stroke-width="1.5"/>
<path d="M121 146C168 117 231 107 302 118C344 124 379 138 405 159V239C370 222 324 211 273 208C210 203 158 188 121 163V146Z" fill="url(#cardGloss)"/>
</g>
<g transform="translate(-22 -18) scale(1.06)">
<path
d="M161 191L226 255L161 320"
d="M168 193L230 255L168 317"
stroke="url(#brandStroke)"
stroke-width="38"
stroke-width="33"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M353 176L402 188L348 356L308 345"
d="M344 178L391 189L341 348L303 338"
stroke="url(#brandStroke)"
stroke-width="35"
stroke-width="30"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M224 343C246 362 275 363 298 344"
d="M225 332C245 349 272 350 295 333"
stroke="url(#brandStroke)"
stroke-width="20"
stroke-width="17"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M302 259C312 246 327 247 336 255"
d="M301 253C310 242 323 243 331 251"
stroke="url(#brandStroke)"
stroke-width="18"
stroke-width="15"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M256 136L266 176L306 167L274 197L303 225L264 217L256 257L248 217L209 225L238 197L206 167L246 176L256 136Z"
d="M256 145L265 176L296 167L272 191L295 213L264 207L256 238L248 207L217 213L240 191L216 167L247 176L256 145Z"
fill="url(#brandSpark)"
/>
</g>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 107 KiB