From cfe4fd80c49e227063988b4efb11abe2043dbfc0 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Wed, 1 Jul 2026 00:58:51 +0200 Subject: [PATCH] fix(icons): render small favicons from 3D raster to kill white tab-border MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The flat app-icon.svg's gradient B mark has a bright (#fff) sheen that runs to the badge perimeter with no dark separation. At favicon sizes (16/32px) that edge anti-aliases into a white halo that reads as a border around the icon — visible in Safari browser tabs, and the same defect in the small Windows .ico / Linux launcher reps that also rendered from the flat SVG. The committed 3D raster masters (used by every >=128px output already) frame the mark in a dark surround and stay clean down to 16px. Set RASTER_THRESHOLD 0 so all app-icon sizes route through the raster path; the flat SVG is kept as a gated source, re-enablable only with a corrected flat mark. Regenerated favicons + small desktop reps; output remains byte-deterministic. Updated the generator header/comments, README source matrix, and the dated icon spec. --- packages/desktop/build/icon.ico | Bin 372526 -> 372526 bytes packages/desktop/build/icons/16x16.png | Bin 666 -> 955 bytes packages/desktop/build/icons/32x32.png | Bin 1511 -> 2877 bytes packages/desktop/build/icons/48x48.png | Bin 2255 -> 5593 bytes packages/desktop/build/icons/64x64.png | Bin 2949 -> 9013 bytes packages/web/public/icons/favicon-16.png | Bin 666 -> 955 bytes packages/web/public/icons/favicon-32.png | Bin 1511 -> 2877 bytes scripts/gen-icons.README.md | 6 +-- scripts/gen-icons.mjs | 51 +++++++++++++---------- 9 files changed, 32 insertions(+), 25 deletions(-) diff --git a/packages/desktop/build/icon.ico b/packages/desktop/build/icon.ico index 3a803cf603651d879bed8b6fa46db713e710da7e..26c5d417a4dff502df802656846a52fbe94252c9 100644 GIT binary patch delta 29749 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 Wr{2xBAbmmlH>t#)yV)h%1^z#_%(Q3# delta 32713 zcmd^o2UJzbmbN`PzJF%kyy}`%QH+?y zEC$Ru+lFrK^t$`|_pW>EaL&Ew27=vd&9K(xgsR%H!meGr>TJLFKilv9&-}HDi;GK> z!Y(cci@3VJqU&3GKh9Ic#pM8%XnZ?7Fn`n(j0*0J;>Am#S-nPT+L|>9xOV9ZDw5PBQKJ0S8-mj<%Mx&4 z^%g|*ABmF0NU4&g;O*`q@+w^5^~+c2-+zEwnBOsgTi3G1J3pT`2=6@z+h;FB`Lg9u zwscweG;FHo@7XI1FCINX>(;*NJ8gMM)H0G_SDye>C|e%BO`3CFMJ*5-5`w$eZo;dn zmw3kjZePEtrWY?!0$XP+K_~CFs9d2E{5)EyX%azThd^YVI)_FL8ls7Z2flmr4yl{A zV=GDE$l7gKHF>s>K%Hte(bmJ8%9H*rD^c4vZE(v5f z%alX4N>wni+W?d)RYsI8?CN?-5+JWkz)U3)^CG5W)`Y2u89fQ(`wqpJo&(T7u&ZD| zQpo4yxjEvfeTOhA~qw&J@(e$)#C1;6gBb1^t(ZV zvD+QkN~f~d=@;+n>ROV)%RhqMp74Gzg=BEesSXB-R_dlapT2f+@nZyExw%!a)TEOz zG;lTDfh^1ve_ga_Il3mwcLjYV!q<|-UKHW(z!vZZ_1!T)Y9_WUPr#-0W4M0sBrd0B z;M}%!99z2s8)n3zVV(M@Ua6|+#uW+Rj?@yl zeD2~Gs32qUMr@g~0NmkKpw`x?R(+cVxL`nge>}f+Uo`XLB~8Fv`uNx^vt(=((r2zj zovJkj@$E!6Af;}he?PzWcz*XGj;8HLnX+Y7ppPFtLQK?j^;vSj*Qi0GO$exu;bEkM zmoYK^0RedR_!%ypK8s3~%{{l&KO;DO?1U8p2DmwT5q3t#qge6cC_&=v)Vz&Vz7Byw zc=zfJ9^ATvy7lT=r8E4@6Q{)ca^=gTcCFg*p+QzzJb8vtK{wwHBC&L-(&*fxoen@_ z>RI1?^A>Mky++HHt#oNp5?Tbx=<&FH^c=EwA3;j&YIryFRLhhj6?gUVm(Qm5KUq=m z*PnjI$PpuDg4LA~oHcXc<>85eJ^LVL%w(LRN*Yf(X2~!y70XpXkJct;BypZio8rT} z_jq#uA>65_mhZ)IARn{{sU}gwOgfMlbVVfRVLq)e2AVKERdC^Qcz6x-O3)0xHv> zZhZlNx*2|*sx{EReTXQlXgQGg-p#%7;Kpra9zLeCG49>FhdX2)AtfaRA881GeeW?I zU&>Z1(V3*(7~gBKY6`L~Vxa=Vo~}{DMz~7m!QL%9P@zIalqypOVPv}u888R~!}_96 z7o`W`Psf7sk(fJr3L>eWh#D{o>n6<+HjRM6`lr77ISn>RTA-Hq+z)j055(v} z!_co=FZ2oRj~%C0S0X$=TEbN#!~XbBlz-1g1Ou0Ug$oxhLr9hqlACnRo5AAhnoVVw6e;pI zMM}s1_U|kD5te@@hPmnFk30Mr%&8<(-qDB8HHsVkJt$gj~)_@Wo(NCwS z&+z<^Y)yA5I=&L43eW$nYQkqgE|_CnU%R?CV&s4R^Pm5{h>JpY&*$e{Cs`um*vIxDM2w>PbvjpVt}8Dv z7B>!@!nL$xxRP=h7q{=n`AuoaOx%UztF~c4P*-8cl`T^iZOG1YCqlHi2>Dyxn5#|H z-t)}%B=xCJvu@$akyBVQYd)gJO-B5Tc~~|l7At4PVhu@P%c7MyxN0*plXl@$LNYSq zH(+#^zADndX1*v^tho9ta7dd=i%@&d_R+Du2l3*@J?u=}j55THHr?pHc8yv{njR|% zNT0O|JmKVgHE9shPTl#PVgx|GD@|7C;XV8C`pzR9Oio2<8nR@Xqic<-)p0m(J@(ID zO$J0~QI5F}ZRw|lVY|;QNzRD2kJT17w**#_EYE$r)A0W3D_qUIfLdgt$~3+%Shx^Bef%DiCrr}4*XH5- zjgbol0mFiNh@#)K#pDZfj z)`*2-!oX?lz8TV?n=GT(KhL2uj%47+?>^zf>u=CG*i>;OQ0-L`ke-?*fU#?C%;4b| zKV&2pOpZqS@(nnhumdTxmcz5I+2ch7l&6`gREJgjUzeDOzyA0We)#qyMhqV=sWiMw z0uH3^Rns42W>LqKiL0qcac=Wo4DZ%Qc+9kfS1w-(;lW|1GM4)P^zox0VAjl8Do|}< z?Y$)6P+E=(BB^7F8aoMV$lzlFPOeEtc-OwFwaVq$5jm!F9|2#{0_6LvSy_UBtCzD- zxoTCrL`VW`)q&=Xn^IT2Rn&ptmO1mdnpLX9+$8n-X9AkHXn~i{pNl$h?$jBSt5Crv z5snC8co74`1p!OLr>Ssw{ynMNAbPgZ{yn|C@Z`ZG(F%?qJOb_sEhWXz&JfTuAXpHv zgQm?AhC9tlB6XRr69gnj#;F7}tW^(@y@uQG z{~1AjcXwo8xh8tTotw6*?N|~aC2)A(eigV(<7@RQRgoT_C`i*IptC*&_5}3Vf^%^yC{@5uo8m?TlL>L#G->Z3ZeE;D)QqwnhbN?xx zUAsd@N=`p;Vaq=3BMG!?ruSBKCC9)RB_zi{u!mfxRUvVn+J8jY1B+(PRoit7YBf`p zDVP-%gP1AP5IJ5!MEH0N>(w7^y?sbx`jL{|@QLGRL6N?AiGa+a_wwG>l`WzpyY~r; zD0Tf-4D8hxp@E$c5-UzVC=+{}5nbLNs$HsLAi36C$Q&M0mJHbl%v&$dBim?}lp zip0PP`6-$njnN`xW7v$t#G~o|gF=P= z@kpUUe>4^sS;V)utLos>eSgf2EhZDQfacb9ooJ`(} zV_Q;@v2hm;Cnn=y!WQgWvJPuwVll4o5LBh8013DW8C!m2YBr%cFNZD2_eNJzgTlc# z4~-I?eOIM&6)c^*5ckh!;o-TfxPOKmbSE$3&av~jbvP5*t#wPG=p4W!Dwhj*!-@zj|L4y@d4 zQbEE_oFop8ELxA9(Th>7LQX^vQ#v@Xn+Q9x6k%SU8_?qCjZEbdUS!`F930)XPpk#! z1z-ygFQhG63swO$aA3|F(*#>nUs^QqK)WU!c%vCZ^4k9E)~SnYXD;B??T3Pa%>5at zQYEJu>X2v=THGtzjCHHm!r{dmR1Q)jm!Om;XhHA0(r{q`R14GSo~N=`XzBmWy(fy` zAnU|g)G=5mHY)7s-T1J**Niu8Bcl70l{4TH?#y_|ML` zlShu>!;3e9gBN!mz^|Roqb~uAt7PE&ci*B{_nx{m6VW#G->jjBjstBV3;QnS4IFO( z%zlfgLiOex)tm2LzZDF;dH57vl+Gb`0ckmiUl40IuT~8MI(64EP`6qwwQM=^1S}jh zQ9LW!LiX;fR;z|9=P%;Z+Yf?+_s?IWe;>!*BP|07D^{sQm~k2FpACoPS<6%o62`>n zDjhe{g zz?mh(BkVh1B@tDK`Wx472sfkTAaTuFokV0_qpOyIRZEtsgs@SgczHBM)5acRoDTI5 z!qj17afpZHwJ9nGLpqw4kF>x!5_I{99G|u}O?zL4+*23NU%<~l{G>8)AT1rmOtzu1 z{XI*$TZZL^7WuZya5<9IT^gZ*Bg)8B7X8D&S_^ShN16E$3dN zwt~cQj+dI=Q^1;3!H(_8B5GU<$eDXB134-%X#YIK`nPI>J@M<*R%%Y0k5ZdDoJh1<2O6HLw5X#BSvwiWKqtNlFVoCYQTWw_8-;1>2Q{4jEv= zn2F05E~y>Sr?<)n#LjoFFat2)z#(FG!fWRR0bZIVZPq_e40c2;atKI@me)Vd($b_H z3)rBDm^{U)@|FxJ5~#gv>C&Zj9Q5!F)FJa})D*j?E!MrW2anS@vgAa@F-0AZ*`}K~ z*0EV-$$=w8oL+}QQnV@vZPngPthxQSp&c1%QA=~h0R!g1=)<&iMcQ=lp1i=|f!Ya% zb@S9QpjewkhC~bs>8ayDJF8(r{5)HLXFJ?^IU^C7N8y`Nq~ElZRMo70^WX`>di1gh zNXtRussx+)B$8&0$eLchS!G~P%yPL5mDBzMn)wJ0IC4W4%*~YziftRWs56_FG&AlV zY8-i+zJI@%*nIy^`4+cmdAV~(@>aBKkM?ca!LM~&v6$ADf?<1h3Pmghu4b;^t&Rme zzaQGk+9Kl3IjjQSX5=*Cmi>P*njURU+@MY_dGA1n_5oG^*(l+u8P9CKrIy1>(=Ts5 z5No1F_JkacxfR5QN2p8Kik8wo6lu*IScQpE9nt1y5Tv2W83VG$)SBQNRfI7Ej}py2sH3Qg3S$z7>47af#Wu5PV<%$5uu%x_Hy9)P4#J4u1JS#4HxUvZ z*0Bph+6N+t9FIY*+rhtO8?++tN~ z7ON>Zckz@Nm_KeB=8cKK?2(f&bwD^G`cVMRq~1d@h`bfvWChuDvzsX<4n}_I=2o1p z`B`+*sMk*WSM{zDSAO0x(Y)xyD`&K5xmdum?EmwFATMQetN%qzJ^y|6)mMKZE*|6s zsiur`?O#(sqdR@=c9@5kY6=(rvx$7u{~|?{B2`E)f7I$Xid1#7axsy#a9mle+4H^+ zVmI3%%T5B%B^=WRC3}U4+B>uZc5%k`FI<%pB})81dJ#QSPGBX2%?v+g z9jYePc#rr$(~EiZ%k!dd9*B@c2g{oRxe6v+T;`Z{Rf+~9*TSU4Gx?w}KZIG&sS1n` z7ncjvYr2X6EfM+Q>iVR>fak7K_0NxpoGMEyd`zKHZepNA_x?cS9 z%P;>`JHQtzq|i|aMc7Q|4qZ$q2mdV!#JfqG(y|Yp#`Sax#G@UvS#);G zW!g1+Y3D&)pkTZ+8&h#~?RM;lU4@tt6Tne~T7p|OX@+jJW1^3LXSDZfB~DS&rrW;f z3BHR<3XK6-wln40C{&5#)4Jx9XX@6ei+FVY8Xiy-;{DT?agQSqk6*xTCF2}!au_0U ze7PfIS(eaMTp413PTj0V#nau}PReWTN2$4+r;5=`mO*87U2+fAd3uavw^OOHXKZ z;`#NvsstWgxQ@j573dZmD)u4Ou1O3099irr5}0>e*Qr?>J%d8TK_SQ2?GUZt%vuTx zHP-=_z`?l*7}3diWhydkxYgNoHg{M`@#OUyM7`b98+Y;I=6zKHmyVo-kGDS1N9W+r z4Ki19dH3zq4M%AMtEB|erY|+%)D#%U1858NZ} z-#&V-O5j=cJ#?i0Kud(YFRIX5=hjlZGtre|I5hqRk`pd5rIrJkA&^GPz6)PHw$`(?~ z_fz_fu#$im1p#UEaUDn&AvFc4|5_BGe&bRWK2YeZRsy4k+lj~K_Roh}ND1)K4rx1g z>!{UI?#w+enOU|1%d-MY)5%x6rpBYd^v~R1qu8l$Uw)&LfHHoPJ!VYp-%rTnTMn4s%Y8RF>#oYBS{Ko@@RsioxYTAFTxD#yE&xl>NVv1SX6b zmuKR3(viN}IPQk^&6?rSoqH6k^XFypMumr%*t$ls*^2sxN|NdK@1d{1I3Jwx6 zDx}dUH%?z~IRl^CbOf!bULbo>4(L8Z{aeKT)wynOatoJpgVz=czp z;IjuDz{$~nK}nzrF|>NxTq~Xfif}2V&#I&F*_63 zmBJf2*?YpClPkMSC#{{^NCEyD2}Je_x1nD1_|GTaumt!>R41qwdHB?w?Cfm(LdUVP z@ggPg?VGpg*3~$&&cy{o9g2Or-U06y8(os1+Qe zu*k7J2O9c@6qOPZI}Z>n0qzmC@9o`x`t(UBfvuajI9-_?Wd^8awGJxidT-Abd^<@M{=brSgDyN?(=$k^SMgV+qi zmj3f10ZZU~2GO!9vvfTnTSQ~J^ix%&(?0{?1A|!t4J;0%v;?kwo-}!~P6FH$exwun zdi6AR#c9gg)<0*;Z5_}6Rykzf;-;DLy3vqhIZg8cP5YOHIlz-8z&)aT=jh5I&FSgs zx}K1ya(ql+h`l|W_Vmw43qk@6hriIEwFlT!Iv^m_c>X7M3uq4}bR+>z=NS9cUAuLo zA=`v(4+QvIN2ya8`}${~1tkIQ9}dJP>8#>;gB0T(B>{9YJ=Xyvli86ZxGrp?4PDY6 zkXG@_hfl1nB1if!NC_~kgsF3N5>PlO+lV7Rl9MICJ)%*%qjxOsBs#B>TY;1S&yJtb zHv_!ATS%CW_0Nb3stz!$<&$P;B%maSkaQz%_-uccfcA4PM)~Z$^5-@*|M(QlrS0RPC#k$!sd&zEJzNVnQ z^`d|wf`XDjg>vO_oWkQx{sG0bXtW|+|3Mdv*L7Cu_E1M%ST7q^wsf^ z%q#)zNh6koHiAO8mr94x+QqFp-Ok+d1|>qU|n zzVer9-qWXcWGl!^9XPp0Nyg0K6Hvi{--ow6@-A|21vTho2rVJ`x|jOb0_hvp2QO%| zrgr&!)5^7m&SZAK?%J7xmvmZ;GZMH+9g1mw4SWSYhGH;ShE#^Rmr`eLMiZQ;;h3ZuDpTMZ)NP^$e~QxHU< zRXi4G^XBDVai&m*=DtWF?)l?j3kOfMIZl{iy{34=tIoisJht_(1rSJEQXgErt_BkE z{z&$Io=?xfwiUFsanUlYppRWFpS2M2(Q`0oQY2|g%oKq| z{H=&JV`Ch8$w~j0>Bk?(ajYIk`qu*SY0(lF51+6dOh%tolCfmY#uF;qfI=P%POLER z9Hq}}@nO_#AM)-|o+nJ}Gs18YK})2#cX8Q8*I`!gttH}|{=czA+ht`$^JjrNL^g^ zGxz*Qb)gQGHy#!9qyJnJWuOM7Ab=Ra_>K3KnD{sSrykMhvu*!N^-r}vLCZbg8}79F zqxBzZpgTLw#b!I!l_6bUVs6C-GxI6X{Ebyzrr+r~XQ|_JAtYTtrM`ag7td)ovw4eT z=I27@0PbhpB1zll#HPWFm{PoH=wFDESYo|^4qC`n-RM-H6^WSmiGB;HpN_pex4QVw zGu2@JqVXTGAwAzal0Oph>!==~thU+bMe0OzTbQ!N#f*k1)Jb@Hh)*x5l|wXsV9}%OCpgY z7RwNhB&iF=@cSb>9&d0(RsFt_R?1}RZ9?$Zf5Ke8Ks=cx5=#(?CwK2qBt{?@#_OxY z<@Vroc~RBCmP2vdq;zKA?M$|w61iLhu|%39hg&&2Jk5I}GYt1$W}x#NCto{5*YQ!> zU+gEFJb=TgB7Y2)rDQ6!Ohtb6;_3>^d(W z?dRaWHePQ&O)6HvVs&gwiDZtnFo;AGw6}Hh#f^3PI>yPS8~NquKe+$H1HQSp&iAXo zF+cq^E?1Czyor`WUFeN6Qaqj!9pk*x+QpZPKk`oh1%EUena&e~Y;J6kNj{6i8YU5b zhSkr0Vz}o#(NLZj_7~CVO-R8|l;-D;b8BvmcLy$DmQ^vR5Z!MK@$kW>FwbDJIH}ZV znVwi;yl)D>CqYxbm0Fz2nLr&#j7uNn>?*=sx*28yk;_M)TNhethmYS0`>Uc4`KX zD?%*LAPn@vz+H#p^kOzUnVwu=_QN~KqI0p>%YWkhJxnGAMe(wys)EK`3)e>P;!_j& zUFjzY6vb28Dr|NYSys3*HqY6iS^T~zdV>X>K^6<6qPRq=wsA&_A7Qun2&gHlHMK}W zxMO#yI7=z44lE)`DdzicU1y+pp26Zp`d*!6r1Kh=2A6m)-%c{zfFf#DYjl507K^fC zwSPJ(VHYV(vJIobMq~CEt%rJOZR(}v;3rg7Vh(z}8J$k1wpJG3-nd;O-mKB;cNfL~0=J{SBLtb+;{X5v07*qoM6N<$f_g8v AbpQYW delta 634 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 diff --git a/packages/desktop/build/icons/48x48.png b/packages/desktop/build/icons/48x48.png index 4184676e626ec98d62eb73c2bb6a258e750789c5..fc6737b3f72e5c027a10383cf4dea4a71e0c61de 100644 GIT binary patch literal 5593 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 delta 2236 zcmV;t2t)VTE6)*-D}T6*006j*0nGNhF8}}tfk{L`RCwCenu${sS02at2lk4)737!! z1Qe8ExRezUko%HL5D*P2qN{)h7*9+91rHGA79HeTLD39|93p~>pfDl?7D`MI(;Gc_^6-kotcTXYe1 z7n@O2eiPLfnov>FfWMx)h~nIG6yykzl~RQCL-{zCbQ*`g%tpelV~E?4irDC6#B7X5 z^oBTWUKfkdzzEn{If28`kOmR0Li}x`GQw|-ib40C0e|#%{0;Z+456!a039ul(caXL zw#Gi(s(*my%lC1k`W~)TcHwGyC+aSAp!Qrls!BwtEN(@4{%u?kw4f~aCQ7q!;7rCf z6di9s^4?-Bvb38F;3@%7|3(qPskd_^DHZ)a&+xEom9i!ok)R_BLcJcERF>_HcLfL)6+> z0NUDIx`)w2Y^0<4F_4?)X=;p62CFHavVb@zscn-|<&mVY87a1E07rQ_0>HU@z5KC1&akGtnmr$8ED zmd-5s0rd2AQFXC~yv;W>z|+AItX&-@aeiByhyf_bE0+3lY^@z|?&LKF;N-z-BB%~) zj+=wuj~dXHQv!bd1BVN7yjs|%C^fe+jMNTS^H~?kHvS@hCiUr@;#aiB(aBQ}~h z7p=EM#GCxU0DQSGP9|X#0ifKdIDo&$YS#57)^5m7xFj0@pU=bBcRTU!`!NO}?O3|Z zu2vBMQ@$Asz}?=DZ6{XF$cQVK4u3!if4`>}V?VrS0J1W2wZIO?V$Vqj7=1m; z00_S-r_%;`Qw>=GD39Xl>WiYRY91 z<|ze`FDPPN6PDJ}xzO4CYSalutVo=DL`dHB;tB6*VY(1Ub`?tppwa;GB_wLQOWf(~ zkEVf%Qi60Lqv?q(@MqTWDSaYai zCT?qveCafwZ;X!iE(YM`-$$`N{4c*q9MI9xrj7U~0BXI9YusSAA%FHoWy)UhRY1B2BS^#?X)?b=O*$bb7G= zIlR5RWdc|ex>jZY+eHp605|&&#ggtUUF_bJs(3|aWHcAIZi<+K=Ha~|I5|2^3Q!@e zlq-r`S}bG%EOQSPtA7TyNm+SBxsuY@*qAJ*4yL5+YJUXlMb_iy9XN0R5fPi{&V@Yj z!@<^#1>ofz#ERN6;Rls3>dj0|AiCYf6!oI!Zdh2%|0pe#$gtfk0P&)R(m+J$KIH-E zHpl!0xZB#pv{kNOX#Wup{8)atl#^?;L&*T(~(hMlb~I!ROOr`BRu+Y=l;l!*=N zA`uj@65gJ^bi}o{bA+q22Wchx!rwO-p&{YevT-L4$7ho$Tu=8#D++ECfEF4cJFx;r zhJ4nuKJ$-+zJIR%!~lx47MW7d&K_+yyP4joGR<8|1A^o#QoJnrSte?Ukt+b1jzawWY=qG?+UTAqX}4aF(DhDXqkY8Ts2WasUV=JMK^?3hfB1e12~Wuq zKV!y>-!;g5YK1!DLR1w@VDhP>FaMw8HtP9gA3KQ4<^Eohp#KFv#Uh~5Lz{O10000< KMNUMnLSTYYdpuwO diff --git a/packages/desktop/build/icons/64x64.png b/packages/desktop/build/icons/64x64.png index 8823aa033bc6e80173535c963f2d5e507c7a7186..6ab93cfa3e44eda31af8ceb797d3e481b3e25c1e 100644 GIT binary patch literal 9013 zcmV-5Bg))~P)WXk2G96W56+1Su3LQlPjLiWPS$ zZh=4u8r(^M;!bdPmp}qR3Wb(Z3Z*St|L=R>Z=W-gK;{20YrX4ChGcTSXMg*%ed6Tw zH~&(~ReFO;pvF>%sO!`V3Pn}XrsNbVxdM`GDzB87R2~V5sk+J`K0%a%xOl6Q5gV6; zm{?7gm_$Td5~z4YM#UjAG8Pe3c!ULE;TD93MLX(6NND7>;E;$z!NCz@f`Y^2o&G=n zbitHwna5UZ#!0U{+14t?6{@NC>ZiAv*;8hP$5W@ZfK(GctK?n#10sLwT z2&w#9<9X9&8uRFt75@kBo}w!`<@Ih~6hOHm#=j20>w;iZRD3ZHpllux_4fb*1waT) z=HSOvP;ukmpw5UJ|J@$9NxnCw;@<|pzxDuef5#YLH(p{ujKl!l3nGgFh_C^$#{jGG z))=5|fpBdL*Z?R9C;d%9_Q1%L)!c4?Zd@^!e;oiv4@ge7ralKxNYbv!`u_`rBrA|a ztBOI1*QB6`M+l4Foatt0gtwphf7L>eJ0s;z1S|1aEX2o-7#YO<$|L%UYJ@p1F+XxXGQnlyOl`AfX;AVAm&Ddfd zqp!TANLlr&RqJ31jo!BU1lBJ;iun_^A#3CYY9pqP+Kic_H)GbAtv1aTjopel>A9He zpxNp2|64F)^d`)ZpC7RfQ--g>cx0wcOE#n4VmFtGhX^lvi{eOk>% zua+~>y?GY8HkpD>4JV?*hvU(vZW>zE9)adHhoDJ~foM>*FX~qAfyVFmL;Hp!(WB)= zenu8PsM<;yY7K(o0V)7$`(FVt8UqhFB_yQYlmO%yt!+S(v>HCi5zcEtNT8(g(TQl= zx+@Om=3(lv4d~ZqCKgWIi8XUhVC}3^*qVJ2+m_}bHzyCykWd zUX+JT3oc;8{Igg;?+n(?J%v@Xj$_4)qgX!u5SC8ek0q1#U=craUIx8mJiREL9yMkI zhIXHej!j47lP06kt@${N?z$L_Yj%XeKS1*UbEv-h!Lt8#4+yyKMB|@Zqwt?Xa8&ZE zFv^vyqE^0R`(8Mdn~%vu)?;MPY^LSoH2ZN?m)jAB`>_jY8L!Y3SZ^JbJXqz}W6fP$l&P_!>g^R#>5K2DhCM3uki{!KFFSzh~B;H036$O6;p<8#JGN|kh}CE_O33#vD`u$vlNZ% zw?}ML6`1_uU^c`vXw^pj589x4<1P$r-841shUSgBGRSp7lMg%L!#eFz?cHXuL{x#n z#{$=~fhhI151h-G;Ncn!HD(Ju^@66>K=y#eUeDicFG%*24U6KQ<7 zGW<0F;AAaGia=2MGY_!u{}kQr`}P`wuP<=_)(d=f{WBULo-F34yP75WKz2aCh}Z*|Hw6@c-L49EyQ$ zreS=y98^yE0A4-@l?62S50d?_0gy^e0Z1t4VEkV|P?^BK=Lhs1fs=c$GrBXl4c~+v z%k!{*?NyxGc^&PW^@7PW7NG$N@b(BoQhXKUU%Z8TH(%iL+55PD>05kW@Cdi4&+{MQ zM&3gdp8FOBryk(avHQ4i@N1meeGezLeTAbNzr?|HUt#ZxJNPW?7}_@d6eeQ?{QQ{H zjRfHv2p?|~ygZF?bMr=xip|jHqlw5MfOZY~!o%B-#s@nXZv$Yh$pu1ck#hBwm_XN; zl`og_E~~Kw3>`dH89#OSMy9o`*uCl!_OB_#xxKg1we0}-dvN8A(eO7!z{?{L6EbGv zo7*pO{^T8e`Nj8m_{}psdhi^NzNPs3;r(ZL@YPe?zxxFDZvTk8*T2WD%irPJ*>90| z_&!eVxQl&jZXkE@6>M8{4QYKBu;_`QTT6foqd`Fg5ogTU zKK}4C1n7oq@-vt<07W2J0VEU!k)#_ht1kg>^vFz{5aWk!Wd7cUJ!>xE;D$ov9lDFI zZ3e*T5yib8MHdZ4XmA`0lUQtAw+mn0c!qm-f54OPf5MX=e!{cozu?95f8+VnKk)3y zAAIk3{P_4ceE;wlLirir+pHBsMYwD zSk5LPJ#8}g{54D&vJUgcZ^OQImvNYpKJVaN^zJwm{+`jA@xH9cf}~bYU~yCt`*)qj z!!KXryKi3*z)QS*_B--VJi^9B=dfYnIW6_gK82MtPT;et$FO4Bai+yQ9NT;k1;-xa z=7mSdKmHBQ?)?hKx7^0AoU7QAeG?69w}lUl76_8=#MR9VeBD})z@*-vVN{n{ycZhm zYf^9&06z_glj9&l0dRz%14z=F9C7;z>COOAP2f5+)CQ@IQf9ci_`}87$Ta7NvSoZxrnEOomhixvZ@Q0K1*)n)23L#m!ek?&)Vv>Cl%L(mNeyFU@#gZ@O%Nw6GjjurrIaBojb+er^SnuTT@Gj^*RYcMNdf zy~J<709UVk!Ji3LIo-&VW-?Lc2>8>Ljs6U1#$a}A3~JoJ-aZoD1x5g}hHb@xmAA2X z={3fHLY!HD4~=WLhnu?>%*+U~`W%AdqYrx`t;+)RY@P;pH(&ld0eBmAFYs3|oMgzL zrms2#s~4!a5R-!0Q?s!#`v?YpG81#hZehU7W5BzLg5&pCj*erhlRd8+Z{k2gjE`Xd zADyJ!-x5av41nb;*23A7SMZb({zqnj-+u!NuiREC(#MBEE07R_E$s0{(RAY|EvN-V zsC{knm*5rxR~9?Ndd|WD?)@DLuP_rZ?QZ;rUEn7u>+GSvM;af07CkNMcSl;Mg>0rq z^5?v{4Gi$|GU{Gn0}!t!EfyVwn#!_|kEZ+1n79b5=kG_~kEdYfs14Zl*?An=T%ZEp zh<+0g;ALTj7X=@>Zh*f`VkF|r@FPJ7kgNfSWv56FICr`b&wd~ProZ2RCxENBVfK$^ zMCP^$j^VH)mH=ZF#Nbd1KaV1epui{<)I?s~$Ah|0!tTX4v2|WP_HYYa*!%!>-}?xq zO1r{n2%;xx>9ASdZWz^ZJ~}oS!cy5=Z38baZ5vqSBqJv4=vj@PnBy(H`5BWIW9f|T z=-O;Nrn3j%o^u9!*W{^ymo|7J%${1b_u+mu8)9{d6;f|9H&53c&uH75ke3_1R*eFn@mezjx95OW(*+|5pl#hx;ZoL%TTKVxZPWo6H2^ZA5)Y6; zq>QOD$IQaQNt@8I@fb`Ux`w&N%Qs#CVfaus1 z#0UTmC@NH}iHjF*;Q904@#N{x`1il*0fhu$ws5t=H2^d|lpYjHh@uevs@|i52st_V zJ#1Ne8fzw9#Lnz1II-a_z2FjpjIms0A64)er6Od()3{D21)z29z69WD1K>pfA_3tf z^E!bb<0}~>ebTlkmd?sW>ko!t;-{Zs)4UU0{j)f|^CrfP$Wj5%_gh-iL}r5ryyiK`!p%&~Ln`d6`f@&)W$c?|`-zr*z5D^c=o4|utoRKAyz*p~nr z)a-!a9p<7%jh=8O0NDbbo?0BRLU58{r3Qh&m@bz#C=31CO~i;UbFnt-umW&`5kF(p z3@zaKMlzky&FHqlfl9b!z2e1K<44^!K zt1PiVf}u4aN^mq7!`XPHvJRPxLmO@(XUu7?ej!e6y@M-zAEWNOZSnS-E-Gb8uIH>z z6*~2*x5cpbbI_z}7uFUY%pd~5?ggH_Iz@2h)QFiA*@XCt=-n;@eOph)g3-Cy#7WN1 z?DH7XD+3{hIL&xAHU8|ogOu^nY8)L#a1ko_#cR`E@c>Jb0uaqQAeyPL!n?I`IsX=3 zumF8Hl3SiI+j-u;FtJN3J5f6y4 z0Z7yVNE|4~Ybq+z1M->nUj9q~FMd@33KamB!2}Sf0K_3DXDcq8`3k3xe~z;!?jY~< zH@I~25q7Wr94oTUW5?1$RSDia^%QGo9!7LP1p@Hn9`{kXUdmk!fRS^-))>@g2I^L9 zV+Y{j>j1zHPGJIolHeB{8qOYmAXk4UR%9N)#+fIuVa{=^ntc>48}#B2n;7k*mGQwL z+TK?H1Yo2cK!grJ3ZW)fS&&TRe5xQpAS73oqv&PK1m!kWt=)9-ss8CV)EcwPG2Zg<9o5 z;{Ur7fUo)<4^O+ClnaMhlm~=_MItHTT`W%DiA^(3V;u(%n>p88JNFoJvJRkWz0RsS z6KFQ$!|fiRwg6*5gbpDhTH6K+KxG0byrZ_j(-*&hSrAv41x%)B6$1i;V|g%=gt>Ea zapuH*T)FfO3OO*ja`6GKoO^(R)4EPRz@F7t@o|H}2=YyUb16=N*fY4gcx#oOj}`+2 zK+ShsqJQfw)F{^+Wvl?)ivb8#r>hoal&qxD6o?NQJhsg{kF9e~W8>@-*u3}*)-T|6 zcJ?9EtKFJ69ijqWxbFUv{?r!Wd*TJf0YpZp5I`N|7v9CQm+bkUSpnQ;g%_mn~s6YmUsmy!j(;UVexxXCC0f;d|J={3=`JJY;;j9w{-kQKEzk z1GB%D+N=PWtv2s^i#KYaU7=Tdi=?dF1a|kOtUo!`by;*8lc3DsO)PT-h30Q zXPspLJc=1Z_i_By9IkGjEUC37$Lax9QW~OHi^-^**bt>lyV(JF=n!~yk^@C61c~aw z!BTRDbH5wWwn2Xu8Tr`GOpv?mEVi#YgDt$NW%Ku-^1F3dokb!lGSTJ*;SK=8qa>dv zsyGnFoL=GGTDX+|1-^gs8-955Gk&8B6cl_;<2lzeNDIq~kL|OW{e-U<4>Al)gGLrV z{)s3T^8uRH?86zv1{~*n@a#U0#@1fLYHrin!}lX=;C94YD#63cM;m()fCRxx$@S2^ zStcsQ*JqXJssr$$@frko1t26!t-9@GHCQ`S6F2v8H=;x1f!MpU0J~OR#EzBcuygG> z>{xdJOXloA3ac^+h_df(0H`npAwfZqU>HV75(6$?x{b$=f5Bt+0>7~tD##}Q7E^wH za(r!3snEnuP$s+{ZvJeOjjZkr3}D`P>n&%vmNubz^+7yD$;ZKs*IA%l#`1~Buz2J# z3}`n^O@3wAAwy5`fC`Cq*$8DIHMR~)DF8m2bmJ8O?Kn9~SEO21@c=VjTmqiEn?XU? zx2k}1zdY<(a~?a_oyV>Xm)I$;=Qyo`@*D+$+dveidqJ2Ah=~kti7EzMxNwUD(4X-5 z(M$Zwb~vAfk)LlE%hw=oDfaNJ_07B*IO&z9$HU#gIe;HQhzu&yzs12wt6D=j7%jl& z1?RDD`Wa-8K8*Rp_VWB7RjsZ}e!YDSD4$SA0Z6gbBmkG!1CRqmS#>eo>H$GP5n4-0 zFOcTK-PM5hjRw%|3b2>$@UFEN6oj4Y^DuebGFE9R2n&r-K~TEEFu96UEJ$KapP*vE z`E$4N?fsX8@B%--1TLPtuBOF4-ext`HA^2avjC&a0L&_&N$D!7%iUee^V0Hqy9HrV zzYSPJ<5x{Oj-0fESUK(t8dmRsGR|5@C>~HQt`<5sN=H(3bq#>4e1>;X0OIaquqaT! zisU>^wUxXXKSFSG_CuS7{jq=j73}3eL?CSEcG$l5BGN}L(pEl9>j$)kMw4uVknnf~ z;OwbexPOlaAsm7K`V+8e?LkIxS7oeG`gl{A8feJ&lLHKy+lxy}aFYnH1uj3fz0T;+ za5%EZ(f!99z`~LHuqNX?4^z`ox{R|n8u#%-a%>HBY?y|G$f^o}n+<@EO-|zO+Btee z5e4YmKpiEid3&Hbernfv01m9@G?ox{uDO8Rm8Y>~@LFhf1Tp&nug)**0yZ`4NEs)c2tQ^v)W z{eK6{9I_j;2lJqG*lw&$KZC*TvUoD&rWzto9)u)Vs-k`UQHTq#f>I@&6#zLjadX!J z@aiN+io{?UB`E-WEi*Nd%-W^9k{gkg5(w=ZeM$(N#xN%ASalwom!HDAC1=p1(-`$L z0wGlI=LJF#8zyOol?QzNT#du_ZOh}yP7H5^uI??P>OggDZ8Kg02)3Q!84UKZwu_qw zYE^EH$^ABCN?)E35893uV@|R2o5eWcrn)^3FJHt(R>sF43`YzrMh$?s4S-cn+M^?( zuz?5&cTkuDVDi_zz@Tbulj^(MHyX$zuqy;`ku}0utXp&fD_AkMZ#7VD9jOvSLq)O5 zGm?_3;Ox=6`0CnESTb`v!UD?CExlBxk$o<6dVwrP+W?pxj`>#)uOA5mkvRblSzMUL=F^e zAk1MlAZi|G(heKck&>(g_oOSEkB&`;@&xz_YlQRIL=RXo=Li;0+s_l;9_stULbPd4 zh-?jls8YTjk}TC&y87Xrx1CX@ln0y{)TA*{#uWo#bUesZ00Pu&0rqLP42gGiN)!E6m5H#iy}$-f=9MvLAEC?Lxy3Iw+SGFHmzmZY?(tZ@l?- zDbD&`82p^^PKmN`;SEWEv!2-4jJ7FI+Xj@}hun0v%5^cBLy)cwCnKZ#8cgrE6|0#A zYE@`~x85wRx;__I4@8BfqGhdt^tL2!0T;FU0>G7@p~*`FU{!GtCfh?rb^zMANsG>2 z-gGrW=+bJICeI4)Mfj7qUieMa`W9D)@%ZLHJ!$jpY@nKXcw|a?MI*?1|{EdWzE26 z2%O!K5K{#m8ja-pv1)6$5P%DRr-DEUd?(v4(|@6JLE;JB zTaLjNKHjo2>j;))?!)wvxyTr>2KC=>s~}2L7GvcX%gu@LvInJbQL}nq4T3tnRG-bL z&-c{NaNaMmr(T`rm@{D=dh*!2MU5dC^~q99>Aevv(vD+z`&lSm!V}J=y_Bn$DdUP7 zl^dbw$K&{1LWqLy;_Rg$*a3J7fMV4Bi$kzJSg55Xf7_l6u${1YN}r6iN(GfMO)RYy!d#!R{4CQ&7=}YPM5^uZV?YGMES{9+4TJ`Oc#-T}nRly1r<^Hb%cuD}~8`?tyW*Y=YudoItgTD6- z4v&}E&e;jU%SW5D%Mp}7XvM>b1!MOhd;CGn7_t?U`>)4@KC3aN+cKuFrBn_^Qo}ng z!O#wiFsR*peA;F%`n8^oetbr-f2%nd(0VQgemoyTY4qrhpJ77xb(qGKCyh@|I!~v=iAR)tyRS4`HkcCAb`swzxMPU+k##MQ&#Pi7%IV?UN>9>&u2L&zC>2-#x~ zBAYe5T$iLtEx#Z0M(n}7;kz++=q}72vJ(E_5gj~a-|Oi%zw-J#^7t_PgBhsS6S z4cO&Z48*H)G~R4$SXB2W(^eKL?##udO1RM*0+7t&=fi4k(WS*u4C*|Q&k)W+I-l>! z=$Fm?y%gj7<|t+KD`P-X z)cb6A>mVV#I#T0mBR;yaI=66UFm!W~XAIm_K-2)ZE91*5xr;^-fPcKCATQV?9{>OX z+et)0R895=2NZ;2FqDVrQidDMMV_`00J0UlR0}Ip7lT@X5^Q)%yzPoICFyo$wT$7( z2O@mjgH(z#c(du^X_JZP4oZHS{Czkq;dIE05as7eG0l~Hn>Sv{n~~j%U%TRe{^u>c z`L7bH(h~`EXI7~a^<@eqJ%C(o09>@y*8#*had`L!bzO#tb`Y9;i+RQ?UpvUhPYZ+! zf9Oa@U##$xiuA}5V&3HGf z(fSrpuN&F`uof3DIAw?MComkZ4zm87w|?TP9XuM;F_fC-cxbJsWC&|2l7OTICl5Om zuAX+ae=Vz8RIaM5wHo(|9Dpd}%V?`#48U=!=-(3ZhE3EXwR&QJgF!X}|ADlhw;w%u z>f>kG4hn*s){$B3avKnF&$6#d_O4wtrnD|Ss+U!A*Hp&c{@N<%qT=s)%xmCl|8k5s zUYYvUYJ{US5QQo+jI_YT0eh^}w00000NkvXXu0mjfZE`QV delta 2935 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 diff --git a/packages/web/public/icons/favicon-16.png b/packages/web/public/icons/favicon-16.png index 174c252712e839086413f6283d1af3cd51401d38..8a4c0db388f63ff2a77f6ae15da6bfae375f6f2d 100644 GIT binary patch delta 926 zcmV;P17ZA{1-l23D}M_U000XU0RWnu7ytkRZAnByRCwAwlUqz2Wf+F%PN5ujVNbKi z*_}PI=kspMVri*1wMq)8R5w__Qsf{eP_#f3EA|*uuptB!O)8-@&^9DBRicTBTxh(p zT~thU+bMe0OzTbQ!N#f*k1)Jb@Hh)*x5l|wXsV9}%OCpgY z7RwNhB&iF=@cSb>9&d0(RsFt_R?1}RZ9?$Zf5Ke8Ks=cx5=#(?CwK2qBt{?@#_OxY z<@Vroc~RBCmP2vdq;zKA?M$|w61iLhu|%39hg&&2Jk5I}GYt1$W}x#NCto{5*YQ!> zU+gEFJb=TgB7Y2)rDQ6!Ohtb6;_3>^d(W z?dRaWHePQ&O)6HvVs&gwiDZtnFo;AGw6}Hh#f^3PI>yPS8~NquKe+$H1HQSp&iAXo zF+cq^E?1Czyor`WUFeN6Qaqj!9pk*x+QpZPKk`oh1%EUena&e~Y;J6kNj{6i8YU5b zhSkr0Vz}o#(NLZj_7~CVO-R8|l;-D;b8BvmcLy$DmQ^vR5Z!MK@$kW>FwbDJIH}ZV znVwi;yl)D>CqYxbm0Fz2nLr&#j7uNn>?*=sx*28yk;_M)TNhethmYS0`>Uc4`KX zD?%*LAPn@vz+H#p^kOzUnVwu=_QN~KqI0p>%YWkhJxnGAMe(wys)EK`3)e>P;!_j& zUFjzY6vb28Dr|NYSys3*HqY6iS^T~zdV>X>K^6<6qPRq=wsA&_A7Qun2&gHlHMK}W zxMO#yI7=z44lE)`DdzicU1y+pp26Zp`d*!6r1Kh=2A6m)-%c{zfFf#DYjl507K^fC zwSPJ(VHYV(vJIobMq~CEt%rJOZR(}v;3rg7Vh(z}8J$k1wpJG3-nd;O-mKB;cNfL~0=J{SBLtb+;{X5v07*qoM6N<$f_g8v AbpQYW delta 634 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 diff --git a/scripts/gen-icons.README.md b/scripts/gen-icons.README.md index b9455bfe..44fda197 100644 --- a/scripts/gen-icons.README.md +++ b/scripts/gen-icons.README.md @@ -37,12 +37,12 @@ git history clean. ## Sources -App-icon outputs use a hybrid pipeline: SVG <128 px (crisp pixel-grid alignment, where 3D detail wouldn't read), 3D-rendered raster ≥128 px (the designed render shows). The closest-fit picker selects the smallest raster source whose native dimension is ≥ the target output size, so every output is a downscale — no upscale anywhere. +Every app-icon output renders from the 3D-rendered raster sources — including favicons and the small `.ico` / Linux reps. The flat `app-icon.svg` is retained as a source but no longer rendered: at favicon sizes its gradient mark's bright sheen runs to the badge perimeter and anti-aliases into a white halo that reads as a border around the icon (reported in Safari tabs; same defect in small Windows/Linux reps). The closest-fit picker selects the smallest raster source whose native dimension is ≥ the target output size, so every output is a downscale — no upscale anywhere. See `RASTER_THRESHOLD` in `gen-icons.mjs` for the gate. | Brand source | Drives | |------------------------------------|-------------------------------------------------------------------------------------| -| `assets/brand/app-icon.svg` | App-icon outputs <128 px (favicons 16/32, small Linux launcher reps 16/32/48/64, small `.ico` reps 16/24/32/48/64) | -| `assets/brand/app-icon-x1.png` (149) | App-icon outputs ≥128 and ≤149 (Linux 128, Windows `.ico` 128 rep) | +| `assets/brand/app-icon.svg` | Retained as the flat archival source; not rendered (gated off — see `RASTER_THRESHOLD`). Re-enable only with a corrected flat mark whose sheen stops short of the perimeter. | +| `assets/brand/app-icon-x1.png` (149) | App-icon outputs ≤149 (favicons 16/32, Linux 16/32/48/64/128, Windows `.ico` 16/24/32/48/64/128 reps) | | `assets/brand/app-icon-x2.png` (294) | App-icon outputs >149 and ≤294 (Linux 256, Windows `.ico` 256 rep, apple-touch 180, PWA 192, in-app `logo.png` 256) | | `assets/brand/app-icon-x3.png` (440) | App-icon outputs >294 and ≤440 (currently unused — reserved for future intermediate targets) | | `assets/brand/app-icon-1024.png` | App-icon outputs >440 (Linux 512, Linux 1024, `build/icon.png` 512, PWA 512, `.icns` synthesis input 1024) | diff --git a/scripts/gen-icons.mjs b/scripts/gen-icons.mjs index 13e8e439..1c32e8a0 100755 --- a/scripts/gen-icons.mjs +++ b/scripts/gen-icons.mjs @@ -14,13 +14,13 @@ * * Run via `pnpm gen-icons` after artwork changes; commit the diff. * - * APP-ICON HYBRID RENDERING: app-icon outputs ≥128 px source from the 3D - * raster PNGs (x1=149 / x2=294 / x3=440), routed by closest-fit (smallest + * APP-ICON RENDERING: every app-icon output sources from the 3D raster + * PNGs (x1=149 / x2=294 / x3=440 / 1024), routed by closest-fit (smallest * source ≥ target) to minimise resampling, then masked to a rounded-square - * silhouette (22 %·side ≈ Apple's macOS template radius). Outputs <128 px - * source from app-icon.svg — flat geometry stays crisp at favicon sizes - * where the 3D detail wouldn't read anyway. Tray icons and the PWA - * maskable inner remain SVG-only. + * silhouette (22 %·side ≈ Apple's macOS template radius). The flat + * app-icon.svg is retained as a source but no longer rendered: at favicon + * sizes its gradient mark halos into a white perimeter border (see + * RASTER_THRESHOLD). Tray icons and the PWA maskable inner remain SVG-only. * * DETERMINISM: byte-stable for a given lockfile only. After bumping * sharp / png-to-ico / png2icons, expect a follow-up regen+commit in @@ -64,14 +64,20 @@ const MASKABLE_BG = '#1d1d1b'; // is fine and keeps output stable across all target sizes. const SVG_DENSITY = 1200; -// Sizes at or above this threshold render from the 3D raster PNG sources; -// smaller targets render from app-icon.svg. 128 picked because: -// - dock / launcher / homescreen / PWA tile thumbnails are all ≥128 px, -// where the 3D-rendered design intent reads; -// - <128 (favicons, small Linux launcher slots, small .ico subset) reads -// better from flat SVG — crisp pixel grid alignment, and the 3D detail -// wouldn't be visible at that size regardless. -const RASTER_THRESHOLD = 128; +// Every app-icon size renders from the 3D raster PNG sources; nothing +// renders from the flat app-icon.svg. Set to 128 originally on the theory +// that flat geometry reads crisper than the 3D render at favicon sizes — +// but the flat mark's gradient sheen runs bright (#fff) to the badge +// perimeter with no dark separation, so at 16/32 px it anti-aliases into a +// white halo that reads as a border around the icon (reported in Safari +// browser tabs; same defect in small Windows .ico / Linux launcher reps). +// The committed 3D render frames the mark in a dark surround and stays +// clean down to 16 px. Lanczos downscale from the 149 px @1x source is +// sharp's standard high-quality resampler; the slight softness vs. a flat +// vector render is the correct trade against the halo. Kept as a gate (not +// hard-removed) so the SVG path can be re-enabled if a corrected flat mark +// — one whose sheen doesn't reach the perimeter — is ever supplied. +const RASTER_THRESHOLD = 0; // Rounded-square corner radius as a fraction of the side length. 0.22 // matches the existing app-icon.svg geometry (rx=32.42 on a 147.46 viewBox @@ -177,11 +183,12 @@ async function writeIco(path, svg, sizes) { } async function writeAppIconIco(path, sources, sizes) { - // Mixed-source .ico: each pixel size routes through renderAppIcon, so - // 16/24/32/48/64 come from the SVG and 128/256 from the raster — Windows - // auto-picks the closest size for the active DPI, getting flat-crisp - // small variants for taskbar/Properties and the designed render at the - // larger sizes that Alt+Tab and explorer thumbnails use. + // Every pixel size routes through renderAppIcon (3D raster, squircle- + // masked) so the whole .ico — taskbar/Properties small reps through the + // Alt+Tab / explorer large reps — shares one faithful render. Windows + // auto-picks the closest size for the active DPI. (Small reps were SVG- + // sourced until the flat mark's perimeter halo forced the raster switch; + // see RASTER_THRESHOLD.) mkdirSync(dirname(path), { recursive: true }); const buffers = await Promise.all(sizes.map((s) => renderAppIcon(sources, s))); const ico = await pngToIco(buffers); @@ -289,7 +296,7 @@ async function main() { appIconSources, [16, 24, 32, 48, 64, 128, 256], ); - trace('win-ico', join(DESKTOP_BUILD, 'icon.ico'), '7 sizes (svg<128, raster≥128)'); + trace('win-ico', join(DESKTOP_BUILD, 'icon.ico'), '7 sizes (raster)'); // --- Desktop: tray --- await writePng(join(DESKTOP_RES, 'tray-iconTemplate.png'), markMonoDark, 22); @@ -306,10 +313,10 @@ async function main() { // --- Web: favicons + PWA + in-app --- await writeAppIconPng(join(WEB_ICONS, 'favicon-16.png'), appIconSources, 16); - trace('favicon-16', join(WEB_ICONS, 'favicon-16.png'), '16 (svg)'); + trace('favicon-16', join(WEB_ICONS, 'favicon-16.png'), '16 (raster)'); await writeAppIconPng(join(WEB_ICONS, 'favicon-32.png'), appIconSources, 32); - trace('favicon-32', join(WEB_ICONS, 'favicon-32.png'), '32 (svg)'); + trace('favicon-32', join(WEB_ICONS, 'favicon-32.png'), '32 (raster)'); await writeAppIconPng(join(WEB_ICONS, 'apple-touch-icon.png'), appIconSources, 180); trace('apple-touch', join(WEB_ICONS, 'apple-touch-icon.png'), '180 (raster)');