From f91037fa49c9122e010d19a6b67a14733461c9f5 Mon Sep 17 00:00:00 2001 From: Mikko Tapionlinna Date: Thu, 6 Oct 2022 11:44:59 +0300 Subject: [PATCH 1/8] UHF-4571: Add favicon files --- src/images/favicon/README.md | 67 +++++++++++++++++++++++ src/images/favicon/apple-touch-icon.png | Bin 0 -> 2204 bytes src/images/favicon/favicon.ico | Bin 0 -> 5430 bytes src/images/favicon/favicon.svg | 1 + src/images/favicon/favicon_16.png | Bin 0 -> 260 bytes src/images/favicon/favicon_192.png | Bin 0 -> 3275 bytes src/images/favicon/favicon_32.png | Bin 0 -> 448 bytes src/images/favicon/favicon_512.png | Bin 0 -> 9411 bytes src/images/favicon/hel.fi_favicon.sketch | Bin 0 -> 16087 bytes src/images/favicon/manifest.webmanifest | 11 ++++ 10 files changed, 79 insertions(+) create mode 100644 src/images/favicon/README.md create mode 100644 src/images/favicon/apple-touch-icon.png create mode 100644 src/images/favicon/favicon.ico create mode 100644 src/images/favicon/favicon.svg create mode 100644 src/images/favicon/favicon_16.png create mode 100644 src/images/favicon/favicon_192.png create mode 100644 src/images/favicon/favicon_32.png create mode 100644 src/images/favicon/favicon_512.png create mode 100644 src/images/favicon/hel.fi_favicon.sketch create mode 100644 src/images/favicon/manifest.webmanifest diff --git a/src/images/favicon/README.md b/src/images/favicon/README.md new file mode 100644 index 000000000..493ae7c74 --- /dev/null +++ b/src/images/favicon/README.md @@ -0,0 +1,67 @@ +# Hel.fi favicon + +Many of the favicon instructions online are out of date and overly verbose. Here is the sweetspot for favicons that we use in hel.fi website. Only the necessary files are here, for example the safari svg silhouette is no longer needed, read more from the [blog post this work is based on](https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs). + +Logo is black on white, and where svg icon is supported it adapts to users darkmode preference. Previously we had transparent background on the favicon and this was problematic with dark skins of some browsers. + +The logo layout is taken from Helsinki Design System (HDS) [favicon instructions](https://hds.hel.fi/foundation/visual-assets/favicon). Like in the HDS favicon package, the logo has padding around the shape same amount as the logo border width. The original logo shape for the sketchfile is from the visual styleguide as linked in [HDS logo page](https://hds.hel.fi/foundation/visual-assets/logo) as the svg version in HDS was overly compressed resulting in poor quality where svg would be used in large size. + +## HTML Code + +We should use this code to include the favicons on the site. (of course with proper paths) + +```html + + + + +``` + +### Explanation of the above HTML code: + +* `favicon.ico` file with 16px and 32px versions with white backcround, preferrably should be shared (also) from root folder of website +* `favicon.svg` is the 512px version, with handwritten darkmode support added to switch between white and black background version. +* `apple-touch-icon.png` is 180px version, with extra 20px padding on sides to accomodate Apple iOS design recommendations. +* `manifest.webmanifest` tells systems that support it what files to use. Adapted from HDS, see changes and other contents below. + * short name "hel.fi" that will be used as a name and most places + * description "Helsingin kaupunki" that will be used when adding shortcut + * contains reference to `favicon_192.png` + * contains reference to `favicon_512.png` + * theme color: `#ffffff` from HDS + * background color: `#ffffff` from HDS + * display mode: "browser" as we're not serving an application like HDS usually does, but a website + +## Relevant files contained in this package: + +* [favicon.ico](favicon.ico) 16px and 32px png images in .ico format, this should be served (also) in for RSS readers and others that do not read HTML when getting the file +* [favicon.svg](favicon.svg) 512px with handwritten darkmode support that flips colors to dark background while in darkmode +* [apple-touch-icon.png](apple-touch-icon.png) 180px version with 20px padding for apple devices homescreens +* [manifest.webmanifest](manifest.webmanifest) Links to bigger png files, name and color settings +* [favicon_192.svg](favicon_192.svg) 192px png version for webmanifest +* [favicon_512.png](favicon_512.png) 512px png version for webmanifest + +### Additional files: +* `README.md` This file +* [hel.fi_favicon.sketch](hel.fi_favicon.sketch) origin of generated images +* [favicon_16.png](favicon_16.png) source file for generating favicon.ico, not used in HTML directly +* [favicon_32.png](favicon_32.png) source file for generating favicon.ico, not used in HTML directly + +## Steps to regenerate these files + +If you need to do changes to the logo for any reason, please follow Helsinki [visual indentity guidelines](https://brand.hel.fi/en/logo/). + +### Requirements + +* Sketch (sorry, only on macos with a licence, ask a designer to help if needed) +* `optipng` (osx homebrew: `brew install optipng`) to optimise .png files +* `svgo` via `npx` to optimise .svg files +* ImageMagick `convert` to combine .png files to .ico format + +### Steps + +* Export images from sketch +* Optimise png images `optipng -o7 *.png` +* Generate .ico file from 16px and 32px files: `convert favicon_32.png favicon_16.png favicon.ico` +* Optimise svg file `npx svgo --multipass favicon.svg` +* Edit the svg file with your favorite text editor, add `` to handle mode switch, and `class="r"` to rectangle and `class="l"` to logo for targeting the css, remove fill attributes from icons and check that the logo works in darkmode and lightmode. +* Add the webmanifest file and link to 192 and 512px versions from it. diff --git a/src/images/favicon/apple-touch-icon.png b/src/images/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..31d20314e39faa31740edb1ce9471dbfebd15f88 GIT binary patch literal 2204 zcmb8xc{tSD8vyX{%vdLD7)v7>l)Y@pl5NH^7!|@8GO`WXcS+WpC4N~-_ASfpkz~&@ zS+mPb!X;bE7+HUo3gLeJbMN2xc|Pws?>Xl^=g;>!i8sv*+2KNP007vrMi_H&u0IVH z7&yXtet;tY2{1R*173eXu7C@Siw)KlhXbU+oCScyy8{fTC141F0RXTf2yl8Aa=KRp z{pYm42=;G&T4*(%83q8*v74rr`ls~}2ows1!C(vw42+D7OiWD7%*-q-EUc`oa5$We zjg6h1or8melarH+i;J6^n}>&omzS51j}L)B@bmKv2nYxY3JQUQgw6>GA#=H?dW=9U%~mX?;cEiJ9AtgJ!S);1s;8$2FwYimmY5eRm6cJ}u64h{}PBGJ*& z@$TKbPEJnF&dx3_E+jWM4-XGdPfsr|FK>{yx390SpRaF#zkfhLKww~CP*6~CP*6xn zNN8y2{rmUBLE+&K9z2MMh=`7kj){(rjfshkjg5gww5?(XU7>Fw?9>+9?9?;ji-92y)P9v&VU z85tcNrBEnTDs^mZ?9-=D=;zO0 zzkcoS?;ji-93CG2{{8#t=;-+P_~hioNx*Ij02nV}F}jwa)9cfRg~_*(%v+r z6VGwH683-gH9SR8aW(E`MuZx3|CNXKSb}jPE^R2-{+4*Ay?^B=E6K3Gyehojr{|L& z9>+ZleUx2O9ZVCvu4FPldSh9wT5UP3P-!`Day5+15ejEYvZ^oPt0L*k*i!#XTEX7( zt(z(JY%X2+BT$Q`vI`t7R45F?xJ%sLZ^vbo{rh0VLGjMVv9XZJs$-&Od6TynE%kyb zljiX*S^L~=o%tmKWPTLux(`+%2g>O0u6rDSkux7DPPK=?Th~}7gLa|nln+ZIgziYyHn{o>;%E<^&v+keBo7#Q0;>)nna;z z^+l{zPI*{DX`k{Le5$^rI_T1)`60kGQtN;6W>DK>J!a~2 zh+m==vAF3y#JyQ~K32sT?za~{}jc3$U~C)$zeJxA#1x9e2>03>CJ)8Bf>RcWx_6A;PB zi$u)Kr>o>gvF??qZoBbQ>eO54U5Jh;p1wkeIB#k$P*0B3c?rb5p6NNpB6A<_Q8Gevy0QcBYJKGT`87gs1DsgF;jmE^y)bHML8x*U=g@A zq4=Jc?djr?$Z1|L{`8ssp5_!v>GDVE^j7w68w3AZN484?osSe!zOi-F(dm_J-TmSg zY)&y^^hhi|yWNiP@Rj9lyOE5+6Iyqp4#u_j>~#wa+_U72zO%6`)dEx6f3c;7Y~&$J z4M`HW{*0-s?q@V~ayxFVGt!>c*Oovz^m34GF$Ik&cVtlRHRyR6)T-wTGXLZL$r?o; zt~3*JBX#&}+BuHi-Ukcn+<2Wsl20UebG15xHb_PJ&6(2qJUJ+PP#tkTbIHU@_~WPz~F%D zjkTWP(E)h%p3Im*{v{Mjc+Tk?iFU{3#ABc+S?-vl(V4AwzPsTif)9zIk1;c7HaX P{tU4CW|-G{#F)PUv|99F literal 0 HcmV?d00001 diff --git a/src/images/favicon/favicon.ico b/src/images/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..526928d56ac6b40db93f406a09ebb1c51613f66b GIT binary patch literal 5430 zcmeHLM@ytZ5dC)9AK*`z)3PUjfL`{Zh!L}>2g7CbU={=F!7PsHpkU58V#I?WD29ue zRs{p1B8pit2aIpOS1>XRyW_gcxCf`8ro(jg>#nZ)c-@NfN%^d3G>Tek6uph2d{q?1 zMlIRaeo>SkYW6wck`=6{`oV99v&V^&YhBy0v8t-5R-Cwd5OTl zK(w^97%$19bz%|o;^G3+)6?+s^1|8KnME;;CnuJVkB?vv4-X?KC?{rs4>2$>faT?7^z`&#W@bjtb7f@(^YioA-QAUWx3;!0 zH#djP%}r@fO-;$11R+*%a4?8%icg>T`ubvZbyZ>^F)FEdy3qx*hE^2CO5FQ?m zhK2?yxsSZOJmlx+OYCu-At51XZEb~=amjV=qq4FRSy@>a9UTSpiTmU^u&l4I2mM7~3=R$=G&B@-b#-!H zT=&k-&a3;szP?6gW~PiC85t2g8Zj;?-QC?NFE5w6;oCFN0{N-TSOd%@;;ZftBwZZPNH zONmKrt5`i?^}xsVfa!a{d$;*c!Dk7LsxR*p>KlfseB2XyedkL{OITc7G&}J8{2V%+ zPWT!*nz1%FH-kzpXR5TJZB0>QxnMT zSSNpNYimPCM+b(6hJ>>i)cEEL{Fp7j>xJ%a1%@9!7hSW!`dw diff --git a/src/images/favicon/favicon_16.png b/src/images/favicon/favicon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..9721e9b8f1ada4e125b6d2e9eb81bf7c1b405b9c GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UA7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TWzSU;#6N4N_gO)bz_8i#(dJW{UXdUdc)I$ztaD0e0sxsgPfP#+ literal 0 HcmV?d00001 diff --git a/src/images/favicon/favicon_192.png b/src/images/favicon/favicon_192.png new file mode 100644 index 0000000000000000000000000000000000000000..e110fe8a883e6e82e61f0d3fd94b9a511ea025ec GIT binary patch literal 3275 zcmaKv2Ut_d7Jx$tMM5uvh!Bc`fzT5vB9XE{Lg*Mu5D;kzqS8SrK`A1=h#HX?352Sk zl+eXTS3p#%hzi0|r3RJu;;y^C_kH``{l0V0+%sq9%-rwXGylC|Wnsd@CC&u^0C>zy zjck~@^@nf*nfHn2Z7Zf?3A8aW095oz%rPH~JRQuuFc<)o+2#bWB=`bAKU|n1&J+NE zmCOQQWonimHZt(<-c~Z}ul5f|jIMSM0Kg45GdgV-Hnx;^#VTb%veVH25JR}b&JOAo z5TcfWuIbtx7+Mta$|iX9!koKQU4jPUxIHv%ygRIIpmuG_hQ~wi;-!?JvbiqL6{uF% z`@T465G4B>h8l+O<*C8nqGoolZQ|Y!ZC`yq8y?laUQum61{eSc;eY@l00iXcL_z=% z{um?x$ifNw%RmJDG(h+Pe|Y@q3g86&bp5|$LBKyI`@@wv`#+AYhgyY&)#(GcAbQ!H znx1Rt713x3t!c>u4p18l@e&du5r2H(yrpGLYm#g91V^%%Ao8K4!up15dI>+v< zqvPYGmyI5syc42beSN9rSJ!7=>d2(0rSUn3^kg6BH=PB2-#IDMmX@T`l^IAOd5iOk`e7^NR8C=G;eXxQ+}cV&F6B>$+(V{G=}VsQm#`nNCJe&~ zLs$2998ExYJpQh3sQ+wVo^J5`^ykm^SS$xIsFEYIU03SV)q#lWyPR^LCmKS}XG$il z9)VhUcz75avu&~n(+F6yifi-9=)K00lKH95v?EXJkZ}EojYRP}L$<-~U`RFSu7-Ci z6qs=$dwOwEsn_gCbwk4y0|NsBq4b!c*rv?t>Z}Tw7*P)+6mRW|o%Twp)v%&kH-+ z+mC1mTrUtfqrBCV$Y~V%YT$w4s2v|4Ux-*rYO0rQt>0*@blK9*w{=Y{Tp&*F!VUCe+yq2dUtY!QpVUq6aLrf`aRKkF1D| z-%n?S3J?p53XAzZXE&L;sGnGkMFxQIzP@T28d*nQO=su|7;E}D&fj?>NDKY)zKUD3 zDe~)zG^zgL4E+?tHw`wcOlXCt%7Ujrf;_)+1}5d!JNQ(Mo-`>+>J^6uH2NGyVDfB1LpC z>El>6K?bN7w&FHX9}LC2-v+*d`4ovct|$rne0ksGmzk53(-gBj(a@`&EDlG(h!%M| z?ZNC-EU^aucLOywHGP!RAB%LRN%ebuV3)NZzj$Geh@FaedM<40Y&|km?)-MX$*1Ij zzgSE3epCjR+49nOEjX9-R!~7xGh5Ljq(nJAD@$k#dt>p^Y4Sx77ccJ_G`af)$u3el zW2Sd`d0FOd>Ji;rULKQZi1Zsmz(Yw;rpiEtOG90!KO-rVL>gayX_u77%=>sgDdkYB zhmKuaB8kpsl;$(b-y77pV8?=_4lB*1e7*Wi?yIJayw+a z=7N`(SL8M$a(#w}WV9+O;!dCy7k^XM1wdpv<7uyyEkfs+qV9%BlclFsQrUs11 zfC<Csu25qp)Ho;}^&+E*A#wF^dp55K@U&TX}!&}e%1Kpa?9_4@Hq^OWRdyQ3iIr#=GM zf#=T+{rj@Bg?-~=VgMpjx^s}V2{ydY$)~75c+F%Sa!qO$k}%C~vX~=y3X9^AJ)yC! z_OPx_%l~NBH63kn33&KD!v-K6fpBtmR;)kAE@S29=5`{USr3!WGgepKHJ*%9mD=0e znN@t|{(>qTPOY(fsxZjd998yLUYwur(F0oB+lxp_`d_@Ll6-G>XGc!(#$zY(45@J&6WVXS%<;*HoxfCWS67#t#=y>(?kxF1xqv(j*MS4C&_o^H z`u(-_bzg1@>3+7&)3>dIV`EN^j(12T^a&k0Md2{Uy7&;S+TxzpX@l&X9N#^M%Cpz{ zJ6JhE8>ZyB*M*gAb(fEb9hL(uu+BX&g4`9WV$%#KONjx5^Q%s!OQJwrPA&IgEB%R_ zI3tf^=f)932|TAyqd-YFZn%TX1YH_g*!z2807D5bYHBEuPQ-?Sv)h}ljJm{*7p7S3 z5XYe54dmAH#8eaw>pZy$+DOgJ6trMx2&t^G$^6zpuk<_zYC5PYNTE<1ggR0W$-a;^ zA+M}lsu{T?D!TfJ1;B1*Yn!#6reAf;h%>}v8XUCyJ-A|OOz7}UFy7C|#3WGsU46Li zQQ{b=_eLr&?_$EIm}j=T!>+sxMj5My_ltCrZ8Oq1F794rVALL6w)wXMze8TWd>Ngu zoh5{P^_=%u68__@f;k6KvBaAMZcv%SGx+YgXC4tfY?-EVH3$UG*xlWIZ1)(FZ2PpP zhMj{WFy+)pUj>C?aDkXO)!mJA8Jyr>eh6+=rInU$cdE2-I-iu4H7v-!5k|$Cs_4Dz zOzGX7;=^4wlv&@Hvz9gC8rM-*w`n8`5`9|NHaA6v6!XrwHbvNfrOG4I$c(12RTkox*wZ%~QS2^Ot8A8un@@X@Pw`FNC9l3!SVk zms~HQa1}e1+_QMli*1csaigaAX!xXGdTnP*9BYm;D;cjHKhJ(?z(wuKP?=t3Wq^LD zv>?Ss07~n@P+dF2LPJ+4?eQ(h!H-JH%Ko>rvWPD5xyqn!L28<$6?>0Y`o(-N**B{+ zb-!v?$Z_G0&gJ*JufMLchaVCB{%xY^3ifNooH0thtM=sR>-E+zEjOcQTM%rS){c&5 z@(czeFrMJC{^&Z0kvA9}*IN>ycj@(2pZD+R%yKZlcaVZ$`*cvPw6qkB zLM3s5gBc163Z|Bp`e7fC4h~|$@}D$%JbQ1!uX>ISQe{SIf+b1N0(^0RPTcZYB89TQ z^KJH~sLIp2Jhwrwe`&Tv=jZ0uGTBTzH8tR~*wPHb>GV6KF%2Se(I4A?QB|xOsg5TQ z3=IvJ{4Utf?H@nvIdjU1kJ!2&br`=&G5*9*a%{Z4-OkMkYIYy4mGTqZw*to?1GEBX zlCNE3t!=YV`P74i*wcg83;nz>`{~ezIkwMk66k=9Gl}`B>qL0zu5Q} z@B&$W!Rg;@`VU;q1nmFC#{bRa|B2u~!>F?Ffn7YTjJ#d-fBc;Q%#1CJDh%9W{|%=~ BoNE98 literal 0 HcmV?d00001 diff --git a/src/images/favicon/favicon_32.png b/src/images/favicon/favicon_32.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad28dbd1e9853dbab527ec18d6168cd6f1ebd87 GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVV{wqX6T`Z5GB1G~m(&Q)G+$o^ zEg+kNfw4W4fd!-lh^2s-fq{7eBLg##W(0{XV1mmkEMP{kK?>KjC4B}e)ADq246!(! z{KKEYphtl9{`>pKnBUc>TVy_!?-2eGJwN4!{I^ektz{nkJ^kS?&+ogNCX^yJiQ-skae_w4)k z=I(6q`Ex5v9zL9TIsO3GIhNW3Z_n~8rc2nl>mFR2;CV&8?f>$cRblH|n|#CT{_oqA z$vb8Hrc1v?G|b-nX`E?qXwun#i0OWhjfTdH{oR6h^|emTf9%h{zpnQ}ioXXVgZS+3 Uk|}X-)`3FL)78&qol`;+02(Q{A^-pY literal 0 HcmV?d00001 diff --git a/src/images/favicon/favicon_512.png b/src/images/favicon/favicon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..dcde529c3f5b3d3380cd107bdd9ff5d7b42a0ca9 GIT binary patch literal 9411 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 literal 0 HcmV?d00001 diff --git a/src/images/favicon/manifest.webmanifest b/src/images/favicon/manifest.webmanifest new file mode 100644 index 000000000..9d6d7eee0 --- /dev/null +++ b/src/images/favicon/manifest.webmanifest @@ -0,0 +1,11 @@ +{ + "short_name": "hel.fi", + "name": "Helsingin kaupunki", + "icons": [ + { "src": "/favicon_192.png", "type": "image/png", "sizes": "192x192" }, + { "src": "/favicon_512.png", "type": "image/png", "sizes": "512x512" } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "browser" +} From ea37f889a970d64a7de49e458d82daa8b2945538 Mon Sep 17 00:00:00 2001 From: Mikko Tapionlinna Date: Thu, 6 Oct 2022 12:10:04 +0300 Subject: [PATCH 2/8] UHF-4571: Add html metatags for handling new favicon files --- templates/layout/html.html.twig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/layout/html.html.twig b/templates/layout/html.html.twig index 28367b51c..f1f26cd1b 100644 --- a/templates/layout/html.html.twig +++ b/templates/layout/html.html.twig @@ -53,6 +53,10 @@ {{ head_title|safe_join(' | ') }} + + + + From 2d323f4369db66336881d61188a5f8702b65825b Mon Sep 17 00:00:00 2001 From: Mikko Tapionlinna Date: Thu, 6 Oct 2022 12:10:32 +0300 Subject: [PATCH 3/8] UHF-4571: Remove deprecated favicon.ico file from theme root --- favicon.ico | Bin 15086 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 favicon.ico diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index d061cbe3b7aef9949a7bdb930ff555bd50863d71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 From d2c8c15e7b605d7f25f456b948c937cf5ff2ba8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Thu, 6 Oct 2022 16:07:59 +0300 Subject: [PATCH 4/8] UHF-4571: Changed hardcoded path to use theme path variable. --- hdbt.theme | 5 +++++ templates/layout/html.html.twig | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/hdbt.theme b/hdbt.theme index bb13acf71..16dd1c424 100644 --- a/hdbt.theme +++ b/hdbt.theme @@ -109,6 +109,11 @@ function hdbt_preprocess_html(&$variables) { else { $variables['#attached']['library'][] = 'hdbt/nav-local'; } + + // Add theme path to as variable. + $variables['theme_path'] = '/' . \Drupal::service('theme_handler') + ->getTheme('hdbt') + ->getPath(); } /** diff --git a/templates/layout/html.html.twig b/templates/layout/html.html.twig index f1f26cd1b..56eb0ae0b 100644 --- a/templates/layout/html.html.twig +++ b/templates/layout/html.html.twig @@ -53,10 +53,10 @@ {{ head_title|safe_join(' | ') }} - - - - + + + + From b264ac00aada99e6ff214e7048af026811fd82d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Thu, 6 Oct 2022 16:17:06 +0300 Subject: [PATCH 5/8] UHF-4571: Added update hook for the theme favicon settings. --- modules/hdbt_content/hdbt_content.install | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/modules/hdbt_content/hdbt_content.install b/modules/hdbt_content/hdbt_content.install index 6395187dd..aaa6a3b11 100644 --- a/modules/hdbt_content/hdbt_content.install +++ b/modules/hdbt_content/hdbt_content.install @@ -149,3 +149,37 @@ function hdbt_content_update_9004() { } } } + +/** + * Manually update HDBT and HDBT Subtheme favicon settings. + */ +function hdbt_content_update_9005() { + $theme_handler = Drupal::service('theme_handler'); + $config_factory = \Drupal::configFactory(); + + // Handle HDBT theme. + if ($theme_handler->themeExists('hdbt')) { + + // Update HDBT favicon settings. + $hdbt = $config_factory->getEditable('hdbt.settings'); + $hdbt_data = $hdbt->getRawData(); + if (!empty($hdbt_data)) { + $hdbt_data['favicon']['path'] = ''; + $hdbt_data['favicon']['use_default'] = 0; + $hdbt->setData($hdbt_data)->save(TRUE); + } + } + + // Handle HDBT Subtheme. + if ($theme_handler->themeExists('hdbt_subtheme')) { + + // Update HDBT favicon settings. + $hdbt_subtheme = $config_factory->getEditable('hdbt_subtheme.settings'); + $hdbt_subtheme_data = $hdbt_subtheme->getRawData(); + if (!empty($hdbt_subtheme_data)) { + $hdbt_subtheme_data['favicon']['path'] = ''; + $hdbt_subtheme_data['favicon']['use_default'] = 0; + $hdbt_subtheme->setData($hdbt_subtheme_data)->save(TRUE); + } + } +} From 6522bae47e3b8023836c14b56ae16c124796c113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Kalij=C3=A4rvi?= Date: Thu, 6 Oct 2022 17:21:32 +0300 Subject: [PATCH 6/8] UHF-4571: Fixed the update hook. --- modules/hdbt_content/hdbt_content.install | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/hdbt_content/hdbt_content.install b/modules/hdbt_content/hdbt_content.install index aaa6a3b11..558e23f11 100644 --- a/modules/hdbt_content/hdbt_content.install +++ b/modules/hdbt_content/hdbt_content.install @@ -179,7 +179,15 @@ function hdbt_content_update_9005() { if (!empty($hdbt_subtheme_data)) { $hdbt_subtheme_data['favicon']['path'] = ''; $hdbt_subtheme_data['favicon']['use_default'] = 0; - $hdbt_subtheme->setData($hdbt_subtheme_data)->save(TRUE); } + else { + $hdbt_subtheme_data = [ + 'favicon' => [ + 'use_default' => 0, + 'path' => '', + ], + ]; + } + $hdbt_subtheme->setData($hdbt_subtheme_data)->save(TRUE); } } From 045da4f2e65590d670f70ecd20bc774fd573498f Mon Sep 17 00:00:00 2001 From: Mikko Tapionlinna Date: Thu, 6 Oct 2022 22:10:44 +0300 Subject: [PATCH 7/8] UHF-4571: Fix manifest file url --- src/images/favicon/manifest.webmanifest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/images/favicon/manifest.webmanifest b/src/images/favicon/manifest.webmanifest index 9d6d7eee0..0c3b7a9e2 100644 --- a/src/images/favicon/manifest.webmanifest +++ b/src/images/favicon/manifest.webmanifest @@ -2,8 +2,8 @@ "short_name": "hel.fi", "name": "Helsingin kaupunki", "icons": [ - { "src": "/favicon_192.png", "type": "image/png", "sizes": "192x192" }, - { "src": "/favicon_512.png", "type": "image/png", "sizes": "512x512" } + { "src": "favicon_192.png", "type": "image/png", "sizes": "192x192" }, + { "src": "favicon_512.png", "type": "image/png", "sizes": "512x512" } ], "theme_color": "#ffffff", "background_color": "#ffffff", From c6cfe156fe532101ca91a7f81b445625cce9a74a Mon Sep 17 00:00:00 2001 From: Mikko Tapionlinna Date: Tue, 15 Nov 2022 13:42:57 +0200 Subject: [PATCH 8/8] UHF-4571: Update favicons to latest HDS spec --- src/images/favicon/LICENCE.txt | 1 + src/images/favicon/README.md | 71 +++++------------------ src/images/favicon/apple-touch-icon.png | Bin 2204 -> 609 bytes src/images/favicon/favicon-192x192.png | Bin 0 -> 739 bytes src/images/favicon/favicon-32x32.ico | Bin 0 -> 241 bytes src/images/favicon/favicon-512x512.png | Bin 0 -> 1966 bytes src/images/favicon/favicon.ico | Bin 5430 -> 0 bytes src/images/favicon/favicon.svg | 2 +- src/images/favicon/favicon_16.png | Bin 260 -> 0 bytes src/images/favicon/favicon_192.png | Bin 3275 -> 0 bytes src/images/favicon/favicon_32.png | Bin 448 -> 0 bytes src/images/favicon/favicon_512.png | Bin 9411 -> 0 bytes src/images/favicon/hel.fi_favicon.sketch | Bin 16087 -> 0 bytes src/images/favicon/manifest.webmanifest | 4 +- templates/layout/html.html.twig | 2 +- 15 files changed, 20 insertions(+), 60 deletions(-) create mode 100755 src/images/favicon/LICENCE.txt create mode 100644 src/images/favicon/favicon-192x192.png create mode 100644 src/images/favicon/favicon-32x32.ico create mode 100644 src/images/favicon/favicon-512x512.png delete mode 100644 src/images/favicon/favicon.ico delete mode 100644 src/images/favicon/favicon_16.png delete mode 100644 src/images/favicon/favicon_192.png delete mode 100644 src/images/favicon/favicon_32.png delete mode 100644 src/images/favicon/favicon_512.png delete mode 100644 src/images/favicon/hel.fi_favicon.sketch diff --git a/src/images/favicon/LICENCE.txt b/src/images/favicon/LICENCE.txt new file mode 100755 index 000000000..b35194b6c --- /dev/null +++ b/src/images/favicon/LICENCE.txt @@ -0,0 +1 @@ +This work is lisenced under CC BY 4.0, except where otherwise stated. The City of Helsinki logo is a registered trademark. The Helsinki Grotesk Typeface is a proprietary typeface licensed by Camelot Typefaces. diff --git a/src/images/favicon/README.md b/src/images/favicon/README.md index 493ae7c74..03de5ba66 100644 --- a/src/images/favicon/README.md +++ b/src/images/favicon/README.md @@ -1,67 +1,26 @@ -# Hel.fi favicon +# HDS Favicon kit -Many of the favicon instructions online are out of date and overly verbose. Here is the sweetspot for favicons that we use in hel.fi website. Only the necessary files are here, for example the safari svg silhouette is no longer needed, read more from the [blog post this work is based on](https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs). +Here are the favicons to be used on desktop and mobile web browsers. If you need the Helsinki-logo for general use instead it is available on [the Helsinki brand site](https://brand.hel.fi/tunnus/). -Logo is black on white, and where svg icon is supported it adapts to users darkmode preference. Previously we had transparent background on the favicon and this was problematic with dark skins of some browsers. +The favicons are available in the following sizes and formats: -The logo layout is taken from Helsinki Design System (HDS) [favicon instructions](https://hds.hel.fi/foundation/visual-assets/favicon). Like in the HDS favicon package, the logo has padding around the shape same amount as the logo border width. The original logo shape for the sketchfile is from the visual styleguide as linked in [HDS logo page](https://hds.hel.fi/foundation/visual-assets/logo) as the svg version in HDS was overly compressed resulting in poor quality where svg would be used in large size. +* favicon-32x32.ico (32x32px) -## HTML Code +* favicon.svg (512x512px, dark mode support) -We should use this code to include the favicons on the site. (of course with proper paths) +* apple-touch-icon.png (180x180px) -```html - - - - -``` +* favicon-192x192.png (192x192px, webmanifest) -### Explanation of the above HTML code: +* favicon-512x512.png (512x512px, webmanifest) -* `favicon.ico` file with 16px and 32px versions with white backcround, preferrably should be shared (also) from root folder of website -* `favicon.svg` is the 512px version, with handwritten darkmode support added to switch between white and black background version. -* `apple-touch-icon.png` is 180px version, with extra 20px padding on sides to accomodate Apple iOS design recommendations. -* `manifest.webmanifest` tells systems that support it what files to use. Adapted from HDS, see changes and other contents below. - * short name "hel.fi" that will be used as a name and most places - * description "Helsingin kaupunki" that will be used when adding shortcut - * contains reference to `favicon_192.png` - * contains reference to `favicon_512.png` - * theme color: `#ffffff` from HDS - * background color: `#ffffff` from HDS - * display mode: "browser" as we're not serving an application like HDS usually does, but a website +#### How to use favicons -## Relevant files contained in this package: +1. Deploy the favicon image and manifest files to your CDN. -* [favicon.ico](favicon.ico) 16px and 32px png images in .ico format, this should be served (also) in for RSS readers and others that do not read HTML when getting the file -* [favicon.svg](favicon.svg) 512px with handwritten darkmode support that flips colors to dark background while in darkmode -* [apple-touch-icon.png](apple-touch-icon.png) 180px version with 20px padding for apple devices homescreens -* [manifest.webmanifest](manifest.webmanifest) Links to bigger png files, name and color settings -* [favicon_192.svg](favicon_192.svg) 192px png version for webmanifest -* [favicon_512.png](favicon_512.png) 512px png version for webmanifest +2. Add the tags to your index.html between the tags and update image file paths if needed. -### Additional files: -* `README.md` This file -* [hel.fi_favicon.sketch](hel.fi_favicon.sketch) origin of generated images -* [favicon_16.png](favicon_16.png) source file for generating favicon.ico, not used in HTML directly -* [favicon_32.png](favicon_32.png) source file for generating favicon.ico, not used in HTML directly - -## Steps to regenerate these files - -If you need to do changes to the logo for any reason, please follow Helsinki [visual indentity guidelines](https://brand.hel.fi/en/logo/). - -### Requirements - -* Sketch (sorry, only on macos with a licence, ask a designer to help if needed) -* `optipng` (osx homebrew: `brew install optipng`) to optimise .png files -* `svgo` via `npx` to optimise .svg files -* ImageMagick `convert` to combine .png files to .ico format - -### Steps - -* Export images from sketch -* Optimise png images `optipng -o7 *.png` -* Generate .ico file from 16px and 32px files: `convert favicon_32.png favicon_16.png favicon.ico` -* Optimise svg file `npx svgo --multipass favicon.svg` -* Edit the svg file with your favorite text editor, add `` to handle mode switch, and `class="r"` to rectangle and `class="l"` to logo for targeting the css, remove fill attributes from icons and check that the logo works in darkmode and lightmode. -* Add the webmanifest file and link to 192 and 512px versions from it. + + + + diff --git a/src/images/favicon/apple-touch-icon.png b/src/images/favicon/apple-touch-icon.png index 31d20314e39faa31740edb1ce9471dbfebd15f88..8f076d104b8db5cd12b2c29edd4d6e7510a95b48 100644 GIT binary patch literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^TR@ltNH9n&i+snxz@*{n;uuoF`1Y>gh9?FL$3C9d z)DvG`+7%qDr?*`%c6#jeb>8Py{eS{>dinb9>!mOA?*I9J=jKn}CE9-%)f{qY zX5*DI$+)n<5ybcs&b&4}1zPI@x|;@ zTlWM7-2BV{Hw1~1e7!39OI3a!%#QDey~6)JZG>@~|GB}9eIar>C@%Zojf)xkI2piB zn(nnFFz`CxUuV~Ke764$Z=abHaxHYx+*3i?U-GBMYF~^?T_}2M^_#%Xx)oaYbn)j&eg_9YD#=Wi8#fer`W&wf~Ko z&&$%!PYS<$%Ws#wUm9#%Q9Digay0+J;|KNPU#Lf{f1jQsf8KDX{9e0VEuZfQ8{GJ` zw??R>Pux>&&Re&(IK5|^7k)l+SA4;3c0`;4qobZ7`mReys7!egDD8N<`njxgN@xNA Dr1v6s literal 2204 zcmb8xc{tSD8vyX{%vdLD7)v7>l)Y@pl5NH^7!|@8GO`WXcS+WpC4N~-_ASfpkz~&@ zS+mPb!X;bE7+HUo3gLeJbMN2xc|Pws?>Xl^=g;>!i8sv*+2KNP007vrMi_H&u0IVH z7&yXtet;tY2{1R*173eXu7C@Siw)KlhXbU+oCScyy8{fTC141F0RXTf2yl8Aa=KRp z{pYm42=;G&T4*(%83q8*v74rr`ls~}2ows1!C(vw42+D7OiWD7%*-q-EUc`oa5$We zjg6h1or8melarH+i;J6^n}>&omzS51j}L)B@bmKv2nYxY3JQUQgw6>GA#=H?dW=9U%~mX?;cEiJ9AtgJ!S);1s;8$2FwYimmY5eRm6cJ}u64h{}PBGJ*& z@$TKbPEJnF&dx3_E+jWM4-XGdPfsr|FK>{yx390SpRaF#zkfhLKww~CP*6~CP*6xn zNN8y2{rmUBLE+&K9z2MMh=`7kj){(rjfshkjg5gww5?(XU7>Fw?9>+9?9?;ji-92y)P9v&VU z85tcNrBEnTDs^mZ?9-=D=;zO0 zzkcoS?;ji-93CG2{{8#t=;-+P_~hioNx*Ij02nV}F}jwa)9cfRg~_*(%v+r z6VGwH683-gH9SR8aW(E`MuZx3|CNXKSb}jPE^R2-{+4*Ay?^B=E6K3Gyehojr{|L& z9>+ZleUx2O9ZVCvu4FPldSh9wT5UP3P-!`Day5+15ejEYvZ^oPt0L*k*i!#XTEX7( zt(z(JY%X2+BT$Q`vI`t7R45F?xJ%sLZ^vbo{rh0VLGjMVv9XZJs$-&Od6TynE%kyb zljiX*S^L~=o%tmKWPTLux(`+%2g>O0u6rDSkux7DPPK=?Th~}7gLa|nln+ZIgziYyHn{o>;%E<^&v+keBo7#Q0;>)nna;z z^+l{zPI*{DX`k{Le5$^rI_T1)`60kGQtN;6W>DK>J!a~2 zh+m==vAF3y#JyQ~K32sT?za~{}jc3$U~C)$zeJxA#1x9e2>03>CJ)8Bf>RcWx_6A;PB zi$u)Kr>o>gvF??qZoBbQ>eO54U5Jh;p1wkeIB#k$P*0B3c?rb5p6NNpB6A<_Q8Gevy0QcBYJKGT`87gs1DsgF;jmE^y)bHML8x*U=g@A zq4=Jc?djr?$Z1|L{`8ssp5_!v>GDVE^j7w68w3AZN484?osSe!zOi-F(dm_J-TmSg zY)&y^^hhi|yWNiP@Rj9lyOE5+6Iyqp4#u_j>~#wa+_U72zO%6`)dEx6f3c;7Y~&$J z4M`HW{*0-s?q@V~ayxFVGt!>c*Oovz^m34GF$Ik&cVtlRHRyR6)T-wTGXLZL$r?o; zt~3*JBX#&}+BuHi-Ukcn+<2Wsl20UebG15xHb_PJ&6(2qJUJ+PP#tkTbIHU@_~WPz~F%D zjkTWP(E)h%p3Im*{v{Mjc+Tk?iFU{3#ABc+S?-vl(V4AwzPsTif)9zIk1;c7HaX P{tU4CW|-G{#F)PUv|99F diff --git a/src/images/favicon/favicon-192x192.png b/src/images/favicon/favicon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..1a93ad136f87f7d92bed786f814ef14880e3837c GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1_5nU2u0Wa+uvxW9AE;lnB*-tA zAz*&Pe}@V87wj)cSg#=P{(Qbcf4vIBQCS8CCOc0T$B+ufH+LMlnhgZnE*^1-zWn?C z_SZ%Wlv;Uy?EAaF;`B|QpKJAQu70}V+UDyF4D&z^g@TCFd%|FB1l@4q8`sp&k1}Sn zR(!v}>L8>0oe?34#`<09$@u*=Kayxc5EBv)mAS>Xgi*l#a5{g(ein#~!6oKnA0G*e zmntpzc47NmE5}V@EJ+M93OAI@_PqTU{`Y(7or_goS8LP_)O_#AC_J)}Wk2)moYb7< z_xEHxbvRJj!p!;EV#4LAc^2X+W)|JLH=L^%@@jJHZF)RmzaOIs>*mM04|&S_JR&Ap zrW7{0r(K*A-S^_F)c^T{-8RQPd@9uCExa~rr1rg@`_YPZw(8uZN5;i-j&k*>e$ush z%&eVJb8Gg7j^kXXWSc(ESQtA$(r<&;>DW!C5>MwJs^tj_d^dINarT!}cTPX*)%V*| z#!jnRGtBD{^9k>d!FxV(@U56v0x&V`Q>pNtMAcO-RB6IbTCGDpF_VV3X- z=G&%Q-=;5k?7D?B6&Q;*7sQCnJFCiY)$N4e#@YGC=LL7QB>zxL**E>hjDi(Ud`p6J zb`%P8ZYvbtl_BzedX4xFuMD3x4zV8Xe*b4es~k4UJ3L(+Ln>}1ConX!^87#9z{yi! z5WzF!zyb#qoBq2EY-~vf{~gS0U~p!ZP-57{!N@GKU||o#3#G+u0=WljEMolUG0vE9 zk4?d-|8R!Yg58WvJbVcqbLIxRu83dY(;&7gMLK{%?1ul6GS;@=312AszSXd`Nd+~*bHEgVHEHXtIifRm|(<3@e4+u+KGk(*4_`8PGJLQu;4xLFh o2N%W>2bEOE!p$_a zL#yU&h`b#j4}f$5nRs9WAhpinIRW(F%^9PMkabe|GJin&8x7j4s9TOd=3||XzmZ+b zK%Blh6cAYsTK{ps#~y10TCNr5|4>-p<6CR=x%72K9 zpG|~}1&TJ94Td(n*8X*6BeZ77+eWHFA;d*Ss~Uw z_OzB4rIaGP+Ya_QejMb*BP2@vo^bUeNM zv##!k>^fL$pB&59*WQg)Uy?T($Ej;h4~8$dBtvs#@Ee7^5yZYXX&wf0S@`K3@d6xVf! z$?<8lu#3xJs6~G%4CWr2v~ZML+Wd1LnmwfMK8{SKHO+e$oPW5@Z@&80oZeB=z4OEL zKyxdcor~Jm^ri}D!E(W9Vm3Vh>6K1A?3)*H#_~i}HO9n0sL1%kfzbZNEdL2Ugb_sa z44CWMRCH0oL^6U8dHJb!!N|F$_gb|z+_&^Au#_h$V!~UeXRZWDx4Lj7@L2;B0 zsM&d?Sr%U(Xlw${W1luWkRb;=047QliQ<2tQ|t=AbasIp!luRAWOgct#~@p(BpF9< zsHt_*li=6xIgk=~P6izzG|J4TYgPjR5X*vzx*P^#h(Kw(pmO(WFXVDW7wV@0MTB@y zKi0yd{4b{%;u+?OD3*k{(wy#)QO_pBTS(ZZ`n?gh`6H-so$Z0F@XmT0j9fnH*M;;-eLLv@dzdZoq+eHN_%=?JJBwO-RbE>*@6l@~y{yF(rmbSU zUFu5>na0JvdD})u_kJ-L)7mz$eb~m+i@4iRhnWK$+ZuaCnkWqH%u#}( z?~6vV&>zHT^yzuQrMdeGH{-X!!+PfHEEtwC3#0GNWpS!C)WaVo@W>+wRT?7&R7uH( wdg!48{uq!vT{2g7CbU={=F!7PsHpkU58V#I?WD29ue zRs{p1B8pit2aIpOS1>XRyW_gcxCf`8ro(jg>#nZ)c-@NfN%^d3G>Tek6uph2d{q?1 zMlIRaeo>SkYW6wck`=6{`oV99v&V^&YhBy0v8t-5R-Cwd5OTl zK(w^97%$19bz%|o;^G3+)6?+s^1|8KnME;;CnuJVkB?vv4-X?KC?{rs4>2$>faT?7^z`&#W@bjtb7f@(^YioA-QAUWx3;!0 zH#djP%}r@fO-;$11R+*%a4?8%icg>T`ubvZbyZ>^F)FEdy3qx*hE^2CO5FQ?m zhK2?yxsSZOJmlx+OYCu-At51XZEb~=amjV=qq4FRSy@>a9UTSpiTmU^u&l4I2mM7~3=R$=G&B@-b#-!H zT=&k-&a3;szP?6gW~PiC85t2g8Zj;?-QC?NFE5w6;oCFN0{N-TSOd%@;;ZftBwZZPNH zONmKrt5`i?^}xsVfa!a{d$;*c!Dk7LsxR*p>KlfseB2XyedkL{OITc7G&}J8{2V%+ zPWT!*nz1%FH-kzpXR5TJZB0>QxnMT zSSNpNYimPCM+b(6hJ>>i)cEEL{Fp7j>xJ%a1%@9!7hSW!`dw + \ No newline at end of file diff --git a/src/images/favicon/favicon_16.png b/src/images/favicon/favicon_16.png deleted file mode 100644 index 9721e9b8f1ada4e125b6d2e9eb81bf7c1b405b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UA7>k44ofy`glX(f`xTHpSruq6Z zXaU(A42G$TlC0TWzSU;#6N4N_gO)bz_8i#(dJW{UXdUdc)I$ztaD0e0sxsgPfP#+ diff --git a/src/images/favicon/favicon_192.png b/src/images/favicon/favicon_192.png deleted file mode 100644 index e110fe8a883e6e82e61f0d3fd94b9a511ea025ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3275 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 BoNE98 diff --git a/src/images/favicon/favicon_32.png b/src/images/favicon/favicon_32.png deleted file mode 100644 index 1ad28dbd1e9853dbab527ec18d6168cd6f1ebd87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVV{wqX6T`Z5GB1G~m(&Q)G+$o^ zEg+kNfw4W4fd!-lh^2s-fq{7eBLg##W(0{XV1mmkEMP{kK?>KjC4B}e)ADq246!(! z{KKEYphtl9{`>pKnBUc>TVy_!?-2eGJwN4!{I^ektz{nkJ^kS?&+ogNCX^yJiQ-skae_w4)k z=I(6q`Ex5v9zL9TIsO3GIhNW3Z_n~8rc2nl>mFR2;CV&8?f>$cRblH|n|#CT{_oqA z$vb8Hrc1v?G|b-nX`E?qXwun#i0OWhjfTdH{oR6h^|emTf9%h{zpnQ}ioXXVgZS+3 Uk|}X-)`3FL)78&qol`;+02(Q{A^-pY diff --git a/src/images/favicon/favicon_512.png b/src/images/favicon/favicon_512.png deleted file mode 100644 index dcde529c3f5b3d3380cd107bdd9ff5d7b42a0ca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9411 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 diff --git a/src/images/favicon/manifest.webmanifest b/src/images/favicon/manifest.webmanifest index 0c3b7a9e2..1b1a4fe3f 100644 --- a/src/images/favicon/manifest.webmanifest +++ b/src/images/favicon/manifest.webmanifest @@ -2,8 +2,8 @@ "short_name": "hel.fi", "name": "Helsingin kaupunki", "icons": [ - { "src": "favicon_192.png", "type": "image/png", "sizes": "192x192" }, - { "src": "favicon_512.png", "type": "image/png", "sizes": "512x512" } + { "src": "/favicon-192x192.png", "type": "image/png", "sizes": "192x192" }, + { "src": "/favicon-512x512.png", "type": "image/png", "sizes": "512x512" } ], "theme_color": "#ffffff", "background_color": "#ffffff", diff --git a/templates/layout/html.html.twig b/templates/layout/html.html.twig index 56eb0ae0b..399cca790 100644 --- a/templates/layout/html.html.twig +++ b/templates/layout/html.html.twig @@ -53,7 +53,7 @@ {{ head_title|safe_join(' | ') }} - +