From fef6956d62728861869216fe016e177f59295471 Mon Sep 17 00:00:00 2001 From: kobold-ai Date: Thu, 15 Oct 2026 21:57:58 +0200 Subject: [PATCH] Add hand-drawn sketch favicon and PWA icons, align popup form labels above inputs, and compact shopping list typography --- app/main.py | 7 ++ app/static/apple-touch-icon.png | Bin 0 -> 2945 bytes app/static/favicon.ico | Bin 0 -> 4418 bytes app/static/favicon.svg | 82 +++++++++++++++++++++++ app/static/icon-192.png | Bin 2032 -> 3200 bytes app/static/icon-512.png | Bin 6149 -> 9432 bytes app/static/sw.js | 9 ++- app/templates/cookbook.html | 8 +-- app/templates/home.html | 8 +-- app/templates/login.html | 5 +- app/templates/shopping_list.html | 108 ++++++++++++++++++++----------- 11 files changed, 176 insertions(+), 51 deletions(-) create mode 100644 app/static/apple-touch-icon.png create mode 100644 app/static/favicon.ico create mode 100644 app/static/favicon.svg diff --git a/app/main.py b/app/main.py index b879e00..2df2d28 100755 --- a/app/main.py +++ b/app/main.py @@ -242,6 +242,13 @@ def get_service_worker(): return FileResponse(sw_path, media_type="application/javascript", headers={"Service-Worker-Allowed": "/"}) raise HTTPException(status_code=404, detail="Service worker not found") +@app.get("/favicon.ico") +def get_favicon(): + ico_path = os.path.join(STATIC_DIR, "favicon.ico") + if os.path.exists(ico_path): + return FileResponse(ico_path, media_type="image/x-icon") + raise HTTPException(status_code=404, detail="Favicon not found") + # ========================================== # AUTH VIEWS diff --git a/app/static/apple-touch-icon.png b/app/static/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..78d172fb020106ef29c8227f3e17f04da740d1e7 GIT binary patch literal 2945 zcmV-{3x4#8P) zL2Dj28pr?LEQR!B*c?kC)Rg+*Pf+$!STJ#WC}Hh_Avd4g&(K3YLww3DV5kEoht?*r zuou(Ao_$COE{4+GQwu(&5HQ(;U%7f^X-3jW8tKvh2Z7h~zB8kde)HrRNizcwLI@#* z5JCtcgb+dqA^CW3?gF@Y`{wf9++`rcy#K*Ub^cUQAj&I;xh0=<=M-5kbBSGirc7OS1W;xY&ccITV0-{Ac62#f=piUGaSo%qh^2z@I#P zx%77`p)a01zWIFrn{Ov=D;Ar~xlY&=x%6L?mZ$(jQ6X1F>oV)|+9Xd=23=%x*<4~P za;6?BNFj8w=&Z~9>e<1q@7Esf-25&_rJIr1{5u7%sH~P>Jb7G9YP}vyq*3RG$4|}a zrlCaV(53SywZB)-4y-bp-=!*_io!YM9m15hbYwPVK0iDz8ku9;uZfhyb#NCye7*Gd z{V%?|wcZ?!5WCN@w4!umZt>!FROp(Xc%(<>iyyweC9qod>e<0f`Z0yMqVt^SGS?{b z+c%f*hAs@JcH3popKa0ECNppyq0OjWW7m?68ZP=&UCk-8-X|SHl+bfXqN1})W`&a4 zm1h$>dU{byWRCHS11k=CN;g`}m0eKi&XFWDK%uK(?)+Jb%m9V%8vPl2Wd<4LWDZ zjw1KJ_-^Un+?W%2YD98$1{x6>__OlY9_=_IuJRP+DO|%39|o zl%xllfrcWqVrXdA{7(N|DpJ>;c1V^PXe>hO_%@6l)kFB?;mezQ2U{QhuJz=~L30s$ z3bjUQH9}~+^=c};q#BAYgq|byaP4n(d$U*>dXpLGL}(yRYL#jX-SO?azmg)WecH+* zoo<8%%13J31#Id0#y!albS5+q-oR6$w7$abApjD{>%B(}7HChrw+VeD0L7@$5pU(``UADPtc0P0oQrzj1 z`qdfCn}?y$7WA6}rbxZIy@`{pE9>%@ZBpiOm~uFndXeao830bUt|p}ol-Ui19w2pO z)(MrGd9xoB+LJkjVyfW}g&rX$^*BE~#)Ic~mX1Lj0Ow%)`R zEwt^)pQ=G!4|Qo#@Udgi>p{BMqJ_4N?u`v*{0rkxEh;I!&r_8Car&R-1*c{D(Q8Dk z&|~7ReEgwx`9J^nUtIqD>)^UR(x>8=DI$#Fv+dln#-i`@^55c5;#!4E$=J1kM7j|A?!6WK@!RFnvXI8EN&YF4+Uh|XT?h?aH>M4r25v3V zxsJ65L<$}9vQ6K{uOYIf7FAmQ3s0z>F9vEBI{x;H!b}{+?_{4Pn-CD|e_jA+$c_v6V<6 z1-;H&kh*%IrO)4Og;u1lUg#36@9n%8N;^n9R4sH3(RqDu=d{;6+N6ajUA53tV2Uz~ z)cO%CH0hIWgsx#O#+>wW{M`sW1}_X{K%t2!susGIt7`UiTvJ1@(->6?O-Lx!3tciw zGmm!DLUaZi5E@vPdhYb2H}pEMU1p#Wp@G{|8!2{P%sOsCW}vb8(B{2@V-;@xzSoKV zW*@Xm&QkA|$w^Z}1JmEZ9gFJeSl`<@EwbTPOB2@ zG?POU;sb>yqM*>3Iom&2`mFy=($jPf?Ze5|mGdR?xjEZEz{QitHxjF-@t^G{o~v+Vvz-Q(#ku*GC&Kfa#L!Qm2&JEHB`9QcCD+9zwj(zL+wc?H_z~gpFH+ zE3c0>PLDpfuj4{V9U`+$Se@J{Q>##D2iF&dFK>+)>cih-(&@ZD+JHI{e4wy#Q0NIz zy7~~`ZI>F}j#W1lnuvlz6H!p;0eFvLdvqyuFM|!e9H&l~LKC@kA$01|u~vIJq>mB; zod`Vz=Fx3Ip@}HE6onWyA!uD3!zfi{%9~MGB133 z8oU0e(5u^w_CxmDz_eAG^z;hiEnRXtmrq7!~@L?|=Nswp>aSXg!~n zl4_W^j>F}nB1MF5Hjh?Fm!K7<=Fb3AjvI6tT8YwnIa`-G74P}{=%X(``}F+q_?7KD z?IA9^=ZD9W&aN8pc`HE4*IM|TToPo~qw~NkGuFmZ4nD@f!1bgh9hYQNM34PnL4wRF z@ruwuUs2k|)c3jEy|*$sm60lMs^|P_&*Th$5-*f|Dw_PzPa~Xn!{^k20 ze;OJ~*BY()!4{I29MKtwjL?*tOd&+(&}|0`?Q^zJYU09IW<^MJ1|lQ$Sn2^#YI2(p znL|?zMNlt?&PQK<_9*}i^?ED{rata2e$U>I&d>syx6D9zbOt5}4Ma%|uuHEi%o%h! zWdt|@jWl4#3W))g7BsOV_xkOe} rA+!xjUO#ioO9&x^5JCtcge>uY?xL*2O3wgHSR1SoC97|+t3;13T3CW0dbC6Yiwz-4 zJUR){MT}UDc$e|IN#;a1I0jVoi+^LFykJKKcqJ;58W{ymqf6h>QHH@F!orw3>Jh{*ox*Nq67Pv%IQ5R^i9 z^QVSH5n{s_F%mV3vgyP&b&6(zCreqV3L`Dt$f7K*{U7)re#Z>1b}1;C{E?Cno~{QbXH=8`0;I+x(-lDkP8_U;rv-3)F`dWuFOU z8&klXI{o(IA}JV2hv{g+4kAo+Amzr)BGs=mr}@)U!I4TC6)NcEZ_AnYc;h!w(=0Yd z!so&Z()_Jdfs(#>FkHF=C{E07_sXt!K$Rah+n*(ljVSi?)D;d61QXj|yIQR$_N6$O z44KKlY7w4TJz1`M_hzYJ;@(wxu6h=r1ByvXHsC3H?C z3GTcdt-+1_nUy^b!UV@ zY+Kbe2Wdcq+1L>frG0pwfv%26HAr5Y{m0u!Vf9w*$1b!oy?+^ZuDJM!qFjuJ0-1rh zG@2im&WMd~{y=AnG*TTrEcpI#wLpqS&V2O?q2xf@F|~_OIQXjd_tVoyyMUobDP={K&FYsRV$>%zAqa)EZPv zc`B_Qa`DMZ=n#%3c$z`^a+Uz1xJ!Ut^m(p5vfqlFKaxS4WDHu)Vc!yFQhnnR(_Hxs zEeDkCv?eVsMdgRQ_&txJ*VnBJ3y{cn4La#04VIS)i!QQA5hKMexOZJ=3fTF`86ui$ z{>9}~s81ja%l#Rr@I0QBWXXe(Pw`QJ@-bcG!I!}X28Lam-fpON2>PZ$1JeY(bx zo1>I9_*eyLjT(mvX@ukba0dJkG25}b;-w#Krj4N^8(~H)I1QD~YdKfq1N811YgcPJ zg#RBB<-4N!{wq;*aPVIMppN-hqK#HTz7{1GXUz3r6LLBE1!`F#thX&Vr z4#&{w7JhMTpc1d28qXrHV`XEOZy65%3^y+Wqo8qoh?f8?x0f|FIr$tG^s8;>d-la| z(qds9SCe-1w(?DvmCzqvpLP`6vq`42(^FYkS>b2AM*4jv=}Vdg4P5w0=*ajBRiBf! zR$~`KHrJe@^N$jAR8)i~+MLsw+jGI6jHsxad9QCp7>H3?PFN<)1pGWY+oC*h44KM| zP-t~yf%jgDD8-(zrh8v3MaG^pj%9Tm-6k57)skR&ftK{t6aj&f^z6>$Hy$%15i-0l ztL@eQblNu$6#NaWs6J)ELcd8;!`Vkb%YaZ3vfgeo{%th0)VxYz@4%(t*}Izc;oi43 z?+;$vj^6ZV>X9+m*NaV0C4qi6xfWXT@#m69;kr99i8G{1EM?sk`43&%Nt(n{*XnA@ zIT#GmYUwGyHQs7fg9}nj>J?`7bMehd_i^vnUoQJ$C<-~rq1P945?V@uA99T~W~{vb zWAQxUC^5OFPny>CpKU3b9Qt-I)IzeEtt}$*+*6CDk@LffBH>OF16>QG{mn=+oRh1` zOHNJP?uouwadq@^?C599m9IlJxBL!{=){Cy1Kt%sTLb*LFQPGnH6n_-gqwnh8hirs zM{JtM0!C^$YDdxmlN2_@+(YyYgN<(ZzjN3GG7mRto1A~?IQwt&aUK2*gBbM{-YO4LI_-A|F$TMKB?hti1E9{ zG8dy=oX)odPmD_Tp4==$%fFVNk9JGK330=555o z|F1g-`{xXM^7ld*H6x*ny8-mGwBhcxZ%KQ&UJFYU46Z&(q(|7IWgj=oW1(Z4e^t6AJLU0d(X@KY%QIr+*I zV^81e`1xo1#|TJkGjipe3HmD`N)BSW*VS5je`-t)GMC1bveAHeJou#LdVtW=Kc5#P z*OK@=boF#Q27E^OV3x&m!HSt@`>F$>TX%2d$WV?FjWs8CKwix!5+Ds~90H6AX1C+^ zuf)737xer{O+Sze9^;AdN=ip=6ZB9A?xM#>CV|1fd3O)aR%I}bYG-O}qR18@(`&Y? zyVD6+tTzR$w0jA|+dZi~DpL}uFlb%?f>=6kga?Vv9n0tE?kSb3$+2LuqYGG8Fm8D8 z&Y38{Z)ob-S%-}Far~_FvC-+~bGp8}Kh(0V_hw!?(aRZn z9X~CjBuLYVrw3bwLbcxj0?$e0OKHB_w2?|lg|Hxl-^BB`VdhhC5qfTJq&^{yvij1R zwRrnm3emQ;jT^L&p811F6>j^dKa2UBzfN_MGo$g41kk54Z;dm;1UT4DIY+*#vtEBX z!Yr_RXk;%?={ldF)l@YgP21hwjTb4_+R7mvT_n~w@-8gMEGAF=aT(UUc(Lf4=TAa- z5{TZ{Pk436Zd~w|RnN7LeN5f`{>S20T1RDQ5$h2o2CD~^rj{$h*U86NQ(HT3=^Agv zEtmX~KFPjUw=;?GetWGHs!oB8R2AWIZ+_BUsc5g`a2mjV(?cj{RuT(6>DUT5gNcb1 zj{I!s+^E%i>(&)Dv~7N;63kwxG+~+qGsr|({1%}7%1aO9jwDE#1X2p~4R?{y_I)8r zq3_Lq4@xTR95ZC%HqNUk=k!MxggRA>S=MBE)9~dplHR9!XsV!7bQqN$sm%bVirOtOTx%hJj(eNRSXY5!;3Ln^m4g^>V?WOuVZ`0ODO=4&dbdlk3;21m zg?}K?V$>#wN-K+Vw)M7(v1xg+CvKy@(dm-unYLgT!Cj1xA#bBpp7n5d1FELJHXX9n}erFAI2yx&YMSrByHqt!HXMO?~I+oTHBnP zx6V>dMpmqN!SS$sI9P*}jwZ@r6`vk%2GV)(=0fbsB=eV~6Xc{M7)ki}7WRX)A_$e} z0^a;y)!3vZXD?k-4*24tcDMzfF++?6xd%8R0kwN_`}-kqHQdwI5@J9WTuEv5AJ+ig zE@|@Vl)H*XN_jq6DT+LeF76tlCBJ{`A(EWC8HoIVsV4~n%={KoRi&mx(ZzJAO3pxy z8!=FMIWq73R8xSYgdCeehMk!B;J4Bed)GkCuCZ!9<;=E{HQsL2uM_2)nXs0n9t2|k zGPz@w?tnP2Cq?9>%7QH{-Vd#ky=D&X*5Gb-{7O(vPRmI2?(nN4f9|^G@50tU^(E~# zmnv)m($6ysp2yGu=Qly0d>i%#&h}QGGi+P#Ot_ZM>C7;5L5@{L_|u`f90#qt1KoXV zGp{K%bBM~T-lsNSjZP082xT(T`%pQ-aJ7lQ9oSC~b}_kl?@+Vz%|S`ln&zpwH9reX z5K z4VX|x-n$S`V3Y}_Tf2>qV`gRjR#YTFjh9I1c{Y6BI4cTjXSQDGb|6Qf9x=TnP2$0@Na)&_{yzpz`ihtSuYt27J&wNGvAq5@a9cU*?gDq%i3J7(oE3GQ zN~E_yU2PLIS3|?`Mz|1&6)v1{$Wh(v5@YcJn+&2 zEc&ZNPUNH&l&&xzmd z2M*(Xq$S-Pq8=S7638Bbj7uNhO#1?^!P1>|h&j$PTReDhjzbPaUbeVkn=U@idoYRF zxeh%vkiT_1Bb=@0(1kx4S37QEVX$T|=Z)SCzql)CO8q40R>bkbT@e(=Bdxu9=m)x8 zxesdH#BE`niDwf!lUbSF>70ot1m-Eg{XB8bU|GK$bsXj5fND-w zuCGNm#to$OMD2F2PnPodb>|Xe~sc6ccU#BA5bqR?iAVGJ{=3mmTT= z4pR`pFfwE!ijvl!pU1GmhVZqMCLl+SgkJQ-hE&qx*;N4ybJ(XcH z>4_YXslD{}lFdsO;KHA)X2xJn8|0nt_Nyn_mDDk~ajEvTvH{rAkBj&XL-y%F+bMYO!x`5DWS}-UjFUOTSah%v|N)%rr;$H{?r7i zsP9vlPxRz#suUQ~jNiDdsB4@cart!}aF}P#Z41UYbN}6dc&XdIYgxvs9~y{%Q!ssR zcX)7(ITx7sIKNQyj?=Z8W>>nq!(PKZFFxVrD{O2vjRA;LIb-{D-)(^LC?{X1v%0u# zLuLyd$PJ|Gumb*e#zy9ZY)7f81(oIC+I{K~q({n`$W?dBH)AN^xK-7_M}pUHYPF78 z1xhjs+lc2LJ+c@O!_7HV9-mF5b1jK zSh>9~>$0smz3*u#8r6I<3S@z-PcV*8Zx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/icon-192.png b/app/static/icon-192.png index 2408beb9523215de61000265627d8c0ebe57963b..9cafeaa8f136d6560dbcbfb12f46f6e1fe4511c2 100755 GIT binary patch delta 3196 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 lZb$}F`+xoy$oC~8Y2W-(E~fUMgMS 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 ldh5}(aV`)_s~5NnrRBG*T+ - - - - + + + +