From 87c8280efe09d722e29215ad72d4930565340682 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Mon, 27 Nov 2023 19:05:21 +0800 Subject: [PATCH 01/23] lazyload search result text with css content-visibility --- public/static/themes/simple.css | 1 + 1 file changed, 1 insertion(+) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 2670c22..7c01ca5 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -278,6 +278,7 @@ footer { flex-direction: column; justify-content: space-between; margin: 2rem 0; + content-visibility: auto; } .results_aggregated .result { From 0d95fa9ad018a1e355f12c320ae43e572bcfdbba Mon Sep 17 00:00:00 2001 From: cybrejon Date: Mon, 27 Nov 2023 22:30:06 +0800 Subject: [PATCH 02/23] typo, lightning-fast is grammatically correct --- src/templates/partials/footer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/templates/partials/footer.rs b/src/templates/partials/footer.rs index beaa8ca..2ced457 100644 --- a/src/templates/partials/footer.rs +++ b/src/templates/partials/footer.rs @@ -12,7 +12,7 @@ pub fn footer() -> Markup { html!( footer{ div{ - span{"Powered By "b{"Websurfx"}}span{"-"}span{"a lightening fast, privacy respecting, secure meta + span{"Powered By "b{"Websurfx"}}span{"-"}span{"a lightning-fast, privacy respecting, secure meta search engine"} } div{ From 4c95824a035edc505777c2f423172eaa0f9d42d6 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Tue, 5 Dec 2023 20:07:05 +0800 Subject: [PATCH 03/23] revamped logo to look more modern --- public/images/websurfx_logo.png | Bin 7397 -> 8501 bytes public/images/websurfx_logo.svg | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 public/images/websurfx_logo.svg diff --git a/public/images/websurfx_logo.png b/public/images/websurfx_logo.png index 8667af39a450f3841851a10436c108abad0ec7b0..24d39e15326b389340444fefc230fa2ab8373791 100644 GIT binary patch literal 8501 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 literal 7397 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 diff --git a/public/images/websurfx_logo.svg b/public/images/websurfx_logo.svg new file mode 100644 index 0000000..2574345 --- /dev/null +++ b/public/images/websurfx_logo.svg @@ -0,0 +1,7 @@ + + + + + + + From df813c3f4f1aaaacc682a1d34e5c78bb0183f0e3 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Tue, 5 Dec 2023 20:08:15 +0800 Subject: [PATCH 04/23] added class to control how new logo looks and behaves --- public/static/themes/simple.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 7c01ca5..5eb8949 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -33,6 +33,10 @@ body { display: flex; } +.websurfx-logo { + width: clamp(12rem, 40rem, 48rem); +} + /* styles for the search box and search button */ .search_bar { From 1f563995c854ca8810c343492f7bf839c4f7fd8c Mon Sep 17 00:00:00 2001 From: cybrejon Date: Tue, 5 Dec 2023 20:09:56 +0800 Subject: [PATCH 05/23] added class to control how new logo looks and behaves --- src/templates/views/index.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/templates/views/index.rs b/src/templates/views/index.rs index 3816f22..cfa1eb6 100644 --- a/src/templates/views/index.rs +++ b/src/templates/views/index.rs @@ -18,7 +18,7 @@ pub fn index(colorscheme: &str, theme: &str) -> Markup { html!( (header(colorscheme, theme)) main class="search-container"{ - img src="../images/websurfx_logo.png" alt="Websurfx meta-search engine logo"; + img class="websurfx-logo" src="../images/websurfx_logo.svg" alt="Websurfx meta-search engine logo"; (bar(&String::default())) (PreEscaped("")) } From b5e2f8e43861e381fa17e4c2ded88f2b92452b42 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Wed, 6 Dec 2023 23:39:58 +0800 Subject: [PATCH 06/23] Replace old websurfx logo in readme file --- images/websurfx_logo.png | Bin 15088 -> 45582 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/websurfx_logo.png b/images/websurfx_logo.png index ad810b38cdca1c778a25a2bbd3aaf21051321383..07157f142b96eecdd3020f1a66ba9284844eda8c 100644 GIT binary patch literal 45582 zcmeFZbySpH`#(BEcXtR3E#2KUAT25q(j_%?cXx_N2$Ci!f*>6dN=r$1s5D5&*~9ZZ z@B4nw`K@)0LeU^laD^NR{rlP;+(3b%LQui&Xz(Hd*T^x*7Y!8s z<~t>+Q1$dL0rkwD*98W@zh0e-Q_&ss)-ugGy9J`%CR$jj8 z!$%;n5}$Ae^smoe&Nf{Jl+Df)7Vo;(Q_@_n0~7RhFfjBq)Y6o+a&_jluy(by;q`S! zAoT^2mh(keSUK8wGFsZ$Ik?Ecb{bk>j1JZ^um>Vq{8|Vl8+!-1zq`#{e{BORe@80` zYnYrYj=fp(_clk+=C^j5k9(9c5sKz>Jh!-EA0!d4+lT zc~pEIyai#hIE>Qn*0z%R%Bp{p0H0)F_MV;yNj^RwA0J*HAzoK^J3avk2?;)aK|Vo2 z9x#H(!_URj!k5RzgBeNUFB-}=9#-xS2u}xB7e*va3rkloPZ<~te9!m~f6fRkt$&es z@%UQ`KpuR)76?88UVc7jXTJY@!oyR=8xZ-Mq5tC(9tM608$Nv-4_7aDD;pJW8y8RJ z|0H2;^{?jj|U?>>QjCH%|d!|BsQL4z~Xm z*8kuQ`OVF8{*w{#_`m4>kJ10E{bn#2rKKgQ>}utOWKUgL28Ntp(%RL^!CLa>(n7*Q zSWHk8|tx|+3m%YxX*#%g`TqM00|#fDyPg(EX$pw(3y6z} z@q?GBh^VmezX#p7arXe0h@^P~oj2bg)glQN0|aY{Uhg{P~#fvc;N z4D4T^`>(IHfIC@Rcv>i1c-jD>|AJwIe_)u4AAs>+>?6r(xmr8e`u)F+Mmi6pG#C$5 z4tMYX^ZVW0`pcv4+PMAo>93DY4mYmE$av!vk``8fEy2UW+vYC`16qH5Wo2*SVrK); z<8O2Q=f1=L*%YiS1TC$2`1!?w{)9w@c`QW4EO;b@_$4f@MS)-?{u1lIsC&5Ddiq$n z+bGxpIRaS$^SlXAj2t(L;=GaBzefAm+aR?71O^P0hhOynE-=2o7tDvmjDJ=v&G-M1 ziS*5Y{{R{A++X(qcmXWr`xhAgEi=Hu|DQj9>*D{$B{Fo0y*JS}K_9co>9im~I=Emk$^)*7C0NB-9wgH8d#f z)E#)zNJJFvaiNY-MhyrH3LKr-)THE#TFa%hz94QkdKx}G)6DXW3;c#{M%Bz-Q2uh zWllX&TsVNd_A`mw2zhOC4K+Dktb~M%(ZZw>l9&x?&m34>CX_!Wr;8 z5+xS>zqK)lohO7AvN=}=y_n|U7fUfTMHLWT1B0zB5-t&~bAeD5$c(g;^5G+H=0vHM zL#+L86he3~T9Q`NupOq6*LGCOII8I*yGQM-c;WUq$It#4=fii#s8l_1unQmI_*J62 zaj!DSuE@_8{KMT0d#dx{j9TBFkp0HwaS2KY z4(?L})E~T&zSynOh+r5o=Pzf;_^x8ty()#0!n<7Z3C+<8M4SY6uZ;%epHdVv>aS>} z+UL3o#%`3M_E4q{YH-#jU0L6~swRh2eO&*kq9QUsCj6Ttv__gjS$K8(8PSica|R}H zfp7e=PBB8Q(-jTop*td^uMjaPhC{>O7-P!{KTXN^bf61cl^DO*7E)f+1#6J;go`*hqkx>dTiP)0HMtmBR0i4H#uOs zcvrPhxcMh#&lh7m0qD-<$AVZebg$&jjp6%3;7U=$KIFsHAKUSbx9k ztEdiPAQM=NT2U~k9rVjfUki&j$5&c@cX=W9IY-j1GBL3n`;leKt-XXy3(KEEl|OBv zlVIl25~)f9=U57rlmL-Ka z5j7NC>%g1es9QT~mRPj>wi0ik=O>=z+;j+IC$lC}j>p49SU0szYbKJQJbh?%VwQ;m zIX%7Srx?p8Bnr#f=DIgK_mp4sM<;jeW)3ckwq#a2yE_#|8p>?d`;u2#xF{rA3a-&n zan_%n8M21)C0*N(w5#JnfPv<8Ec(*KPot6$o5EE&LU~exFe&E8SgKt45EgHK%fjcX z;xbDJkC~IEQAl19GK!ebms(^?evH+VWDFKLi(o%I=7B)!h+AoFRg{HF8@3_!Gz3W1 z<@;lwRjc5I!^0r&>lRr&6B2TXU+uHO@yM$Bzr3#@8W-7l2;tx`q+*XeK|d+OB<^SA zWSt9K$;HBC1B~P2(tN6u#Us^@Rw!X?+fiv7VvJza-+GF@uIEe(Z zD$D>~{?S1|0UN^pls0uHNL2M4`@|SBgo8_Ii)z>hkL94Lp`TAai^v6w3%3m-nEEq@ zoLh(+jiOpa{^N;q27C-&rL0EH(Dwxf{os3Yu4DaJ(f%nv0W5wh;Ypd*4ls1GT>*gI zG%Vir+u>p2NcGI^bT)2_-gtRN>noa!X_PLG@@Q87$B(!BA)er#C0cZ^vG zl~si4Us9@2l(!ZD=B3RX8O8GliB37|G`pp46!LiYA+LoI=W?)ksI7Qx5Z@(-K9wNS;}&l^knkL*w*(mQ zn7((YoCk>pk(q`+OmIVWgyRhU*gV|eTZ82YlqsX8ex-}$V3V}3Po5o=gCqdY;GEp5 ze}YN_Q*p5B;JCE{py00C>#4}jug^ZPsOzYIJ-y|@SY#+5`y(o{n$DW?fgm2N;RyCU z)ix@Xmll|Nc;+6l@H#naIIca(E3A4}6C(I;D{@BFFMDueJxyZ8jy@2Ea<6yK%(69=MN$H?ISHD(wN$1af~3jR7%gRN~I`)DXHw1Xd^co0H7w9#wf3 z2n-W_O#!K{NvZJhMoU8z&n$RcDQcT_+>EG8DK)OI4RcX8b7b^gsVm6*55^A0Do4Il z@d`c#T^67;^m?1c^e!XhWcjBQjhuPtttb#;y~xN2Qs2v3vzV1|fPRYYNn)l25omUO zM6Y`2HdTH_J_YfhN_b)8b_6a;6+~W{Ok(yArohk`5@4%;mQsyT@B?L{klgvLBcBmi zq+arvqrV+-s}|iF8XC)?SYordYIY%`$=t^uyE%m`+_+RvNO6)3G#MG^MuztXSi(J& zA1!QnBW)ap5Jp%$(T*a?mXOHyVD6QWdf2&@Qh+L!0D8N5iDnvTr3NNBu2%XR`0 zt>Sqyg}f{PLL?!1Y5G{P%B2g*N{KLoKk7SnZ)C7cI+OO?xC0z|3W2douSGONkqV!b z&xtzn`-isIpfG;J^K#KSNkYlL0pmpyraVJD&5u<}zA>=tnOOmuQ9xp2VRrKgEnmL;AOfp@ z-|dI02#W%|BBCN*I!JUNvl)ly*dc;kkQ<4>f9!NVU%$=(Be1Z=4{kfBnBk!NJdk99+MeRRNXXyQH+5Jx5Nn;YbIGsYT74rax5;>`;lVKmwV&+0w-Q0A$5K*^pi|6GtmpPds9D8~Sj|BCQ8xui{#$ zB0Ts=B~9UIp^?;4L2x0;%ETlDz8}0sj+uD0o!P2L$@YG1pK-x?3)M?l>h-hgKF)^v8BC!VGsv( z!R@(Oe6}i9rOcrX)eFcC4j>lrkImX6BY^$D50jYetW$v!(^14f&4hLib09fN6P%ie z|1>3If|m+cXvs=)31Y2t5K5C_VxO`2p2S98wx##8Y)Ssz`lQW75~ zfpF4rgo0oBSvLB8EV35JTO`srZ;;4h$_dXH!wBDV61lM-CtYT@$Abw-(}maRmCvKd zK4;PwYFQOtQc^&!cQov*^KV!}Yr6b$%s(|h0L*6-VTxMN19B*U<}aOGR}7;;%($bO zXzTvB4SOwm)V)7mjbZ$3DU`;8jenjO0!5O}n4gHl<1-Us)@KWyDm9UdxUnC}%Oi&2 zS>H$?fR|pQg*tC+L3Z{!caR^gh;w7Gdgxx)!@tZucH7gco8gMSjM(gYJ(sQMiUPSsXnKy(zi}r6*kx-it#OsjZ0fKH*SRdPsmjG8`E;)52 zR{-U5!ndVymnYvsZaCr8U)qwpqOC<|(KlD@aGAh_?#|l6$X{700UWZwJu3*Mdvt4! z8*<~*<$pFrtMjM&!ODa;?rnTWx*kaJxnD`)w84bZs)otpD%>e@9wLF<08?w^!{t{7 zcVl^&id4RsQn;fX(W_lF)PJI@`wM77@x2?mHr18n>^?F`tT=Rxdg(EPEMM-4=102Z z0M7MVne}QD{}u(4;>d^N$pWU0>82H_PCCRaX3@>Nj8@M$r;{X zes&n};rHhP1q~zyuro^k*ttL=edhcKjt&P>Mb8KpHfT`OUGqL5y$o9sD{t(B^Dli$=j~ z9CS#fK9eKZ;9C3r?8aqcGf66?PgG8tnDHWdDw^aM$S2CpLqS^l3K50ELA7Z^r2P7r z8cJt$OSPx}0rbW(Q(I5?e-S!kpgnjF>Ppf*dv6o`n=JZXfB7OdI^YL(7c++vWYISk zATiBwNuYW@h0K57RTwXj|79)DICdUKS*JaNKQ#S}ZFc+b5D<$Hck}IK1Dv-;lCtOd zD2DDhki6pf`B)+6DUvInzR>P|Xo1_M2439`A-Rk!=`RO4wm@LpIHC^o&J#eW9tlyrGZLWSTj8>;9|ah9Y3-<7vJ|iS##Lla=lBwd-!Fv;7WRiw8`nrUQx(l8ibSZA zb44NC8k~FDx%)13WRRqA#(C1EA8f$z-kl-=akk|8gdByvm zOtsTb&9Jn)0PZj@hVuVM(A*66p+lY<# za`%DmrdFV1E521 z$jx7TK&RoxP_*u_$QcsGJj)mX3oLpejO#(;xxuy$1(Yd)HMm*O9!ciVZ%d`khO;-F(1gtexP&PdI zEeaI@CK8d_99xy^m4ms=#H^s9wsy?5n%vVT>MW(}s+&GoT58_v4*1qflZm;MB|6E6{M-9YIs0;zBUjG<@GIzZy$N6LaT z?I|7+$PXN@Uowlh{dMj&jf>8baN>b*-4cneehtMvM^}Z#3v#NB$MUUGC~%h&H-U_- zxVGoEeP+Qt6G@C!4K7OEFYibDtr75!DkBTc4tXPr3tnWF{;L`_!jB@J))UKnc%C%i z4Os^>U*k?zNZLyL9eKUg$AKGfQWiVRLP&7MX0Us)_Iypg)DLW``7G-p3Orx|&Y(R} z69wFVc&RI6h^Hc7q2#f&f+a_a^V%f>1Ja3r$`?Jp+}dU7A4QQsdH%&9bKI#lTttjn z#D`Z>dn?@LVIac=Oqx>aH{lES{{EqS-Zcf`haO?_Dfg3ctZ0R^@gjSox#-%J14+7; zNCBK1QPMY^lCWw?dLk2`!pYG(k-mqX)cPOeZ5yR%DGL(w(lxl7j+Wu@-nI>MN;cIq za8O6l{R7r%cUq1ZTqhan?%?lHT2aPjgRDAcdgap+4Q1k zH?kpJAI4mu3<5ntp$v3U2&_F;*i3Vyi+myMkVnes(AU(0w zM_6Hr7k)1d{ZMhZ9u(KUqfpr4C;Y+9UK)w0)2%i~2T*B&gP8}HZ}!3plvc9l^KznU zqL#qg2lcnjqHkQI=s+H*Ic#+>zhg0l%(23s?M*=D%83dc-~&BMV>!mURR|f$Uj#5= zfi6_B1h0b0l=PfCY1ujbpnH0_fu8O7JY20xUc-929I}8NGnDqMBb_>}=!11!9~6J@ z(I*-Ti2eN`PfU{U9(vX0Hklzh^l=UnFFzj=l&lUajkNVcC~@-g>4mi-Tmz|Adn;Bg zQ!Zh!KJq2K%fG$&##Z^8N~mXCy8lgRvcI-+ixMV1ycNo;ImYJLVa-{jp_$Uz zA0x|tQ*AmcbiSr7l*+@4w6EI3W5KA=H=s6VYz@kd+pKGc%6nMyOFRJ>IBOTWh!>a6 zhM)7bof;QHcAjM9BX93-u!T_=NSbm-UcK`+8J|ha;+1zIp{M)Q2{$nnL--IqM_x;w z1<_s`R88ofD)cvI$PK9b5pFl%cNS!>V+sr-j;A0kF@Yd3qDR*^U(-@65{O@ zwCCAJqS~Ns=*;2db*NOdt>Dl~vhyt34xAz4CT^bj<97pF_`05{Vv#O)WY-?v zhBPh`X>}24pQx~{BVlcq6Kbz?NRFa`k+7701izoS0@wsMfnFAV{_>7r-W1U z?!|5{eapT!HgVhIFs+7ys5X4R0h6iaDW-TdzSsB*-$h9mTzJX%N7W{oIrzIhP>@Y1 z!Q)2b+^TI>_rjoQMRC4yiNyGO%apFj{LS{OsV*bgezE(Xq>pPl8k+rze@cB?(~;f5?mgz8 z@_HErTd@4RuK+MqV$<>|d}+zL#@j?=s-;FuMQiy)4#O{|J}pNG z^BMXou&}N=xKfr#vcY6Ka>pYvrBI}tDE$%@RwEE$+-`+ka%7fAXnP_aZ>wW~vZ~WU?o=hV{Z?&_ga^HtKd<*`)URpVZAFBF;F%Gl7=!2(Wvi z;2ah9{`XQIN-NOR8}XT2WDhEy=O>N*Y@g|T$}Av5`HtNOntpE6onAPP%NbgP-rI%_ zQrfA6*qCU|72_CS`r)H{7S$^hZQnhSxy<)4M3J)gdFO$&HS;Da&}I9@;9#Gu7Ow)^fQ>^_YGC4lw^1~%)Id_(O3XH zv8&d&XFijXu#1K(w0{vl6Lcr?bRRZ{k?TX2sY#;xCBLW`V44$V+CIFKMa8h)#BpWd z6G&1~zh3Zue|*rrW|QiBush{ndne%(LA)%wowcn|71ie9-;A5$c^bV=ImtYMWm_%P0THdTghP^}$j_r8JI@ z;%%K!Dt^(Su(f5Wx>Dw}a0?#t*|Xb#vzM<|@#xCFf^_(FIW*aiQs>5s=|=>0Yj^G~ zz_?IKRx=m20gb0I_pV>EgNFP`0r74!KQ63c4JB;Cgh7GI4OwOi(JA{q;5vap(&|Bp zei28h_GXa_BD`fPAw(vx;f;;Mb)S*794&Z9tDn!QMIM7QOdT$pYW#m)pp zaDPqFo>J{y@0Pmq>Xh-&qXx_?w+c~)e(v7Lp?r?lhF<~5XSZXsFQvKCLu-dws-8;9 z#&5q3jHD+3Vii;zhV0x)KBDL&{^4kVudvRN{JZ;|-T6|7xV8a| zLm!c)zB$U_zy+_3?Gs!<`=|Qtt49mpQbKS$pS&5ArEkHq#Q=Sd=OGKO!=^r|BYnkw zx}=B8e9gx=`X3VjR++}2Q^@|hrXjK619`_##?~at8HZfgwIh&UQfuiW@IM!T?ld;`pHn3UFxxvt+(^HQ~h?8o8FV^ zR(MNpa9T;09GuD}E*nw|xf0d^2Eq~PVvx-c7jVXCj%k|nJNUnv@CV}s!C$Y(?m-^a%CO%^DGKTrKor;vx8fjfuz z)n4bFFPI`Fc>Qz8YD;CN=J*owxpeGqi!(O9iw+EDolk8nCs(g|UlJ|QYM0=+O;~aL zBB(tKTbN-wI=aI+?U8PD$>Gey^GFkW$!||hBchdD8}G`$*pO1Ci9Vas{rrm!z_hhg z9yGdI-+;zd0TCwzGj@9cDU=e(&O}1sj?nTe5>|Z4FWgPYGL`sAW?D+`_Eq;maDmwf z{Vq$H#oYHdx}T3ItOp;)&SjBeoi?ps2t_m#=S}Tl9@b1S@%Rvs=vUdU3V;M+jklSu z+*=m67w_QPq%GS&X8}qQ6|d5Q#bx4pxQs!6+R0Z1MpB~u$txOY2YwhZoc;js>jX3| zGcrHa6Z&xWqX)4Y1%#t$eD?IXhxb)|q1?#NBSz*HyadreqNpcth;cLvTmG;JcaN4I zIM$Z*Ji|9e4OLrLdS0nS-2U23)=d6uKI(6ctr^ro67j`QKr;be`M zwn-q4`x>`$$BX{dtgocP->8`6F6M|cdFvBF)_{e}9uC80T?Z#PSG0L&<2oM%Qf;5CU|q9e>*&(}yHM)4@limbqTN*GSdc0A zIsbj!6h2TN(Nj=+xS5Rp5$X_$!E>HG1z?rNrw4P?jp&wYIO{`B>>^r^D)Mw5-zV^U^`&+U7l8^nFoiW+ zVD^PA%Xo=}A>ZV>rDhVQW(PZdCac{a4z!=ze060*d5>}7xTx|}ycH(znMQKCWv5%S zEo!S^-4Pxg>`ZXG@7;|rZX<}8Up>o4?140w6@@Cu?xxK+sw(u-$VWo1IiZCcW`nmK_h*lmetbPB^ko#k?3oBGQ$V zI!p#$=!m9X1v0(K6q{5D$=J0SOIZj=DHBnb@WV30COD? zuSNOl!ltK(FZV;`f+yG{4541DY=mm-z@~JX@wE!3EW?&jO<&HQ(xnUTr{1fBWTPAF zIMkz}uikOn?C)k0c9EgHM=#7YoO{zO#bFo+aV?y+IBQ@m*&JM zD=a!9ml(^}u3sCvr~VTTA5`hx+mhBR*6i7dV&=VdYLn3Rs$V$+H`bS>N8H+&9jF@Q z5yaJNWbI3+5KxGd@{@*cCQt5}gFG*uV@Fr)_WgNbd|c>l3Y4V`e%DEn9zL_^#b(h& zLT^qv8}gj!<~34#nHt>AdyYhu4CiA9i5G&^1#^V+a6X-J4p^kT&axhN;~{~#-QuTA zWye0@{mf!yPcj>iuO_aH!!ux6!-na~dcB)JD8MF8yi>O(DaWfvDVZDr z1rn?uAx|7#R4x5^{b^F#@i3oU8(*IgX>SEm0Aou{O(!3D^V2aWx#-&yaB4*;wXBU) zG~O^PY;PEv$y1*vB}z2OA4N)P#JQFoAdbvUzJH;r7xEx>7YD0Hc?Dg5MuC&_C%a`3 zU|Sk5$oT8{ecTSWoOvUoHWU81Y&eG!8d>Ubc0_ z(pIJEIYtjD&sBRcP5slMZKm`Avd@aHWQ6fLF$mG#3(#zbUw$f*aO)v*8wozFES)-A z-nN{ubpz@v=Msx*+0{D5$0x%>{^HwA+OY#pVtyy)BDT-*g@r~GVsp^Uz&N0TigWMw|w_snu#w|H=6bL}3M=Rzat7zXS%x-0o|DqM?=JSf!4{RzSEV;{? zJ!};uWDi%>^z=QRxwBV+105hU+9BHSUV|ARV}$>e^z-+6_UFsJwX5`fB5%&0#uJn_Ze)~Q0Q1JnvUC7JNv{Dikf=pV-9^LR6Pnn>CgeeIqE z1~e}|@)To0nvbOmTPP9A^A%6wTQhz4!iu+k*h_{hFo4L5EJbHM7>OvJWm|2d+d+vY z?;Isr@$=vYBX=XYQ_;wTyXX3-2Oxz%C5AmQ>vL031&@C9)_24`nFyhom^qh$kLaGc z*8e74>hEqwWhRUL+)``bhSR!)Gc~+1`l)>Ag<&kL{ztwiw@S;WP_PW6AMP0Gogpxr zrb&wWJ64s0eP9vJc+8QnYiheTHBPC~4|MfELfLEON)MAS5D%CyNUgFP?3FYx^R;U+ znV4grcNI%J6epHR@k@>-eS0F-)#p#6ETjUV8vdqh;bZ}JxTF>2!k;TAcCmx*sEXAq zlF~mPL~uieAof#0oo57%S!5P?J6{7e#Z zE?0wTjI=V-2V0Lu=>zit-y1{w!zE^*Ic%_ftytLj4s@~~LzG{4Ww89BpcVL&KiN_4 zKxb%VFIg|LcAfmT2xsO`jaKX(&6-M3b9i6xm2bS2qq`eo<-bk$g|&3AB&jRm({^ix zU2y!u7jfV-TPyHQ?^!g|J%D@)Cj6o3^vL#kTB`hk3GQOu56-+ja!5`y1`G|Pl^iWA zkL?N6G<7VJ@4yu%L9SJMeQ)~sBC71g=@$Znx6Rnvwd|sj{W%28Wb*9uVksJnt!RvB z@we{-iO?!6Mia2_zavFXROL#yB@xA6Gg-@1Sk2P+9(#n}B2o*_C#9(T1p`mF+O|56r7<&+CZzN%QE0ec@hMcQHX*m3eK-1I(JVZ(~=(o0E zmc#kv+w|KrSEpuOn#AT#?@3dFm%ZWOXwehl7}DdwWkS$|0-KTE$MlhIDc8okJ-i^e znKSax25?af#=nD>W^OoAe~H_&8=9R-Xf7kht4U(oz(++P$_b^e+I>|p7ac{rcCaw= z8UHmaqSKa=B)TZX1nCZ2V8_Q?jb3}}1XVIOSrG>`(FC!G1D>qaMUo-gG0VocBGwSv zXOnTm!5ahOWCLc&hK8i_8in42xcruWv(XPVL9;hHKsWg77{KP9?PgSZSsqG{{`_pM zX%w6nyD2dR17YmqVOQ1MXqLXlt*LT}5ta1acjN+a2ZLN`jgq~JTKv$O7a`nt6g{x) z>qCdo%%OKg@535cA}|XE_QLV->N9=NA6D!d zMG;2P>i)D?S`akw35$^j*C*(Y8#vbT<%`?tC7~R$TO+Mre9X9*HF&+WIi93!?NOQq zHUxyMAI8{q&U-ZW$50*-PLV-a@AvDpJsIPahT4B)TUy#1PZxP_>7-}Qgf^w^we)JI zIeMkYtTN{ns|npriESjfJ?FTgV%j&a=BsAFju*W zh^YZca&60Ti^1krGIW*N{d=Zi z)rW8)$VMZ+tw!ea;o>t{P#|&Q4;@gvZLKM|AmF`RkSp}>$bZ>#Qv6C`wqRTwmLao#Sg<&Ry%DGe`7~bCd&R?M_KMbu$3^nZWq10 z&TWS>&=54WajxlcZ!jq7s|IWK-Db*h2u_O>c7S!fPB?8T{md6iNtn`Zap39Uneys1SHww@hS>GSLy7ay3c2)4ud^g{Y0x{(%LmirtSM@pkMD2nK|Ae~F zC3`kl_vhnv*oEJn7gDA}!k3$Jvti-;Hg#)O^Q~&lS1j9CQ*3>v{;W&s-vx(6v4pdHem&~MdVp6&t63vJ4emHiMcY_#;Z4`()Pm3G;2BhdBf+DLZIbx zp8mZZKje=q2iQ>%&iz)ojeyBYpdLImOZZk(YkBpWc7c|@6`?cYCnH0E83+ms`adyq z@{hH#^{a4-C56hl2qrt9h&TN{RWI+q(;Epo#ib%oRsW25#f&6HR9>w$;!2V|%yM9K ziqtjv9Q{$`rfCtYNtT0Yb+)sB2g%{(oFn$MUhP1L7uA~5QUsr`mJ58}lB$*E1KdT? zDLI7lDZwg5B+byxE1%Czyq>Ilf)dw1Wxn z=M1AJ$R9Z-%1IucyD#l=-Sp#PSB(G1Lx!=PlJzG%s-5-IY=c@@qg#H^V$^)SkX!ck z8A(i2*kPo`1+6dpf3qv2K}gi-dKbwj6T{)F6wItyqWQ_cd~zCS1BOk-giEj4q%B~= z)=b5Wt0zR0Js+H3GxS9whYPHwRe-IaI+UbRu z=#Qj*n+fHuyT-kOZWr&^&1oz|U)c5Bau^dik zcp`XL;;`{n)H8)Qi1fU3E%?&r?v70vr=r#&KU_Ci)|(Of$LE^4q<;!M-|nbmhd%k2%l>CN<{auv z9`>OTcaoXY+@41<_rrtV<$%~+56(^;a%_^Gbff$@j#<_y=)bMiwjO+`_qM@`6^F~6 z38Za)-scW3iQ1IegUrLmbV10rwZG07t*q~nB^4CxK)r4HtjWsu%)cKJwWirv zM9vQ1Gqr?<&Z+p+6F()IbkJ1zY~% zJ~LSm>X?_$h3oVn-TWCETNg&rz6lmO&@U6vF9{W`^763rP09R-IECWUeRr54Ehj38 zotQGYBDgJbqSCXM%lKjB5;*#zoO3@K)&8|$@h@ck(bNE0KxqG#`UzTC6csJ>4CmuQ zb!Qp#VP#r-O~FjME$8SLi|hqm2-iCXHV?sBtgqDQ8NqCHhs7;2lE)>tHeW6iKm_c2 zU0agVu8`+ezdxGsX$9w{!SR9^hr-4;_=55Aeay4P8U@Bd=dkfE2i4I*vBf(H&v76D zM~A$s;^LP9EqCHTz&3c>c#GkD;K0zY*Q^5%v)llU%3dmoz4?Ht`uPmKNW^_DA7rbs zW9=MH=lf?uuMUwbuQm&%fLNxLEv`%tBJRk;o&?;=6JM>PMlsomgsZ4O5ck`pN*?vOv*Xgd6 z5$Qm+kIQ_kID?ocbej#5Qw-F|I#b_5SoSi{x4!6aNr)%koWS&5n?wRwm3Kb zQW7&fn6Im@GO*9RPUgq?_e%3;Y{;|{Pn`}i*A^3@951MPmL~Vt5oT~$a<3iQ1&A5w5INyE2YTuEBRdx4Xn+xklGYCA{C_pK-k~A6XG8-#(UU!s|aP1-a{of_uY8m`o2vne|1o zScX5DuQ6zY6H_~!bcbzXG%{Qx-RyP?^#Lt0NynExwv3nS+Kqo$j-;;-s2L0!q_N@s ze7T20_~(z3b7~wSiNr6uc5It{71w>}MCi}Wg86Uz^f1OZFXFu)^uy&ApZ|0H_4p({bl8QraqM7AZPK5H7i56j`G2yw;XGyP0SlE z(kKn9Z@pqjJzh_kzIXI(74!Et#m;45FOB-1bEn+kZGNBm17_9pY4*#2(rR#?BL3jY zRLO`fS;DnjfBD#+0jua!N6b;MTyhQO&?rOK&t`uA!0`~fLa4`G&rCas5AR!(qM~lC zlyzIEJHXOq{QHC@K%hE4(VN~@F`Ymo5XBr4CsOUMi~GLQGI`87eH#Ughx-tTLy&l@>P zG8Et6D^%fLF}lVSp@9X>Nkl03ey=yVHkVnvSTyJI~{d`s)B<}WZV6IP+Xcgyj- ztDygaj$!}Bmi0tKydvS6^Vkw z_e@f)Y^f;*Hl3@Qyzg-88KkAGyj7l~vV!-px;^%z5^1ojz-a|oS6S>T9bfujmel46 zcHH5N{>*8VnN{!dybAb(4>HMTB(4`nzY(46FP!$svtLbxsE--Z&0a{^Cm*})68K1; zNew8gKnp9kgu|QNM8h9~o}yCaB?b8#7iE2aUesskOC;%gQPM1vt`@w$ zbh4YJ&QH(l#XP+}IQUc`6doLSk{hC|{Wa>Lf$RC*C z6T8I3)|U?`Laa#Hj>c1#7M&w}-vpz4)!wsN>nsYLLt;A@*x-6e3jW>B%w zW3-(KmGEkeVKH&S`5?Qcf~w%^t0`qk(HNqRoG@fh!f!L`E&44! zqEEZyam0ZKgr>U~19MOHO)TTrzf6WLzn^G*`g|kY0a{ScO@Iog{yWZorXomPdD*ytSOcNyR7}b^aOwz2A2yy4UTh`x`Yn-xLm1+^IRH zBL94z{ptSzG^x8 zY`$t@ve%MjF+r;49O8YsEt>Zu7-I|^pr6>o!EE8~TP()? z12}kX)rHV^~)h{j*o+NeCC4s?e&5jhnGfFN7#c~7v0nW3{yY% z83jI?r{`A7b1dZU8BRYwF05Q-p>5^9+j4#HusYA2=woOmNvX(hi({P7Op0j#94EQ* zb}aNE_Z6N_XpHZ=iPZHYt)U$i^T7R1IM0aucAf{9XtpZ&a|P*WwH7}qf|jf4ShAk_ z=#G;&^VLgt2}fUeaELFj>o|r$7%q<`1NS~8%i&+~p_!uIniGhW+LnumNLuFSp$_w4 z_~GY|Cw9Gncgx>#H=Louq9ANgdNe-7w+{P?XrlG=kY-0a?)4s9@a3u8mBTK>*2EOP zPi5qYm0S-+PV3$IVEQY8Yro5ZOFjmb9)_wnkqc*o@6-lnG@ly?IPs6P58*i@_X)IK zpKg5O2(jdNfAWoR`K+bU>}Sx(;sD0x$#TnJpAkfnQ9#D^dkR`(u~6{G>9Z3b#<~aF zPIMwm{c0`!bhdFN)h4Ch{!8!X%~E+x&!q;;Z}a(!F-!$sITB)pCD)_APyC9B1G*S1 zPk5g1rx2c~?k(}Pgy!p9qp1!t{9KDsa#oo6li@GjY-RgNI|K4aMmm!4qV86CfD&=; zvdF^6-Ms>_<@3R6W_y#mfOih+7q)i@WzTad5>MX6t{vLGBlNj0A;?!^dgR1Ax`&(V zyTYYob$nNi>D`ZK7TGx&i2=IUM=^c za=+nD7WTqIJpWs2D%%fFbuwPhAHez$p7W5XAzh=UTaK>RQt*a*zoS}TZRr$Wj?Ph^ zR%q9De^Qe4c%!OLH(QTA7smVi?;}gj~V8^C$;#Mpek7T2k%%lsO}!OIE3^0UPX8@g?9TKF0%6-w`E74 zH9>}iiMrTt*~@pEr&8t}4BTD#Gr!sTEPw06@hU5Sh#zPCWA{w$yrvepu(e|PyVoN6 zmeUyl<_|Lp7PghyW%v1NTglf~;zV%KX622?4hKa+^}$9?a5_wjI}#n$y2K?HNiG(I zk>&6sIIy>DNBi6}01BP``ROy%Q0V>;{kB6}Gi7kap(J{zJ-ep8@A=R3MFs|2DgkW` z+@~hzZs)m;9Z}6kLhF8WSYYGZO5-|dJ6@^xYySG5fXg}JLlOGgrm6w6W;YF;nX@VF zOyG8`$u~XqNW%U3MI(^amd@!lq&J zNr5zocL8;GZNX24@FkcZNvH#qi4-fh^;Fy7hr2C`+5D*gfY7b3OE%e4^XW{CYkd@` zk|n?Ik)hW)>lq43^ZUGgmWBZf)Rx&P)Fj-O&of#LsVc85G5;@`zA`F~F4z`=I|TRO z?(P;saCf)h?(Ptr;2MI%;KAJ?KyY`N;4=8&^X9wv-Ji2o&*{_EbxQW$wVLebYH)kX z&%)?x@fOs~LG;{ho+00Ztc|65HgjB#S4Xt`*fblhW?Isf?SPZ!2VDlk2CX}B|5a0Rd)b`%* zP-y~&&3BlqsNO@SEq}kN>pP%TS_qZ#D42|m8>mCv&@EOVsFMkFkDf<|SwP;4LV71~ zM-7QhC)h->(-Y&sIa5^rJCiIYpZQV{9y;8g9mZpfYkT=%9+E~m)+McGd~Ax_uWCXr zY0^pB#yazT@saW+kKw%ON9Y(+gL@L`fuGwS6)&1`U}$>(t}ilN3GAYGv}=PH@?`G3 zJ2p0qiOA*1AT*U$vACDN;z7V70ef1aJ{V|~Os;$L2q=1bsgd*fg0ww67gR*8v*JX9 zVbAL4Rp5QKuII+*r@V;Oc3ScSKME7y^3AanqLT-cl)?iQPxB>XZOD!g?QBCmc|6DkyML*FR2=Q>Jw8qaPw$-A=*yR1Gp#ai#b<6rzch*P*j#P~Om|dt-&C9hU5cMj2y96B=8mkq z9S+B9=Xk1k@;*=3VJLY-_*X8?gASg4s4Z#@43ZU zx6c;b^g3MNoNX9%0@Mnp7xaSQm*xX#dV7k<;W} zyJ-Rt1xvrMlfl;3U!3Ln!59lOyG770=|nl#OL@e^tO%^!PK?sqZ`_-R zs``3blOL%heiE8+eh%n_#j1DY_Hz8LyjMX;@48n*R3o-2qtIO7*HIL>V%hNID&o^; z^hG-l@}d?B_Tm4LmmYXCahGsBj_w#nz{-Dds}o4Dp}P}PdhW~qwwGG}7vDwv4wh6A z{3sd)V9tL_)QnX;3pfbW))aavj}rBsWDz&KgKZ}_`Pt<`+$J6@M&K}WsN)bMLTa*c z;A7CaTY)y7o5^fx4c`YRLeQz-J{Zl7TxDMTgc5w>>{4C@u+=m6aGcO1FnYJ_8@n)l zL1pub&`cjaI4`emsk6CXoNYvkMhE0iU^?zcFkBMRB7NsfXWVMa1PqDDVh?R($c&~h zyb=)d;W2WouD9_JA>t#o-68oWu9sIA%f@xa#%~(+N#G04hDs|2_?t&Iq1UsGlSqVY&Bjxa?$^r$4a6=^ z|4`YzX+>PWCk9|gusRtme~TQDvLC=S9A(&Xa87ITb}i^ENC(jU0kh>Cu>sMXuht6n zLNYkvSC{zIUknYrP3?isj>)4CF0h5Vo*;X|ku#~H=Xas8$--@y;gigk-#h5o@e0x^ zyjgEIj=?wk0*`BxJNsiZTf@me#h#xI@&vHP|18uH+vS5Jp30MIg%*dCzz_FC;$@7e z^_ws3N&Gt_trubZ1Sb57h*QWFbc?^Z%w0RvW8oyP;=eU%HougZ`)uJJntuK2nOcbO z$A2&i@YmgUjJdGOwsTDRv(m(`@rrIUmdSVbrX4av^T^z!&gopj_wO5Pbb~~rdQM@( zrK)!#GfTQ;rwgEfEfocy`ind`Np&WnhDOx_WfEqrB0%r$9StrI3VPyQ2o?n)rRY7W zXZ^--z#g5;T!zs*Fa-A_&I^KW{DfR9>Ggh}cc`ppb{6TVqQqY+n)S~RSF`&t6@^p8 zdPGJ4<|snv$wL4_BmBC51uBW8)%U1Elk`EJoykw)i-G?J2kaR(lAH6ydz)Kvy9x_* z;2xKWx&F~3+zXG>@o!FqIFAp1+b0OuS`DmJrZ2!X2{1dHN7;PesrPu%6ySadmme;L z4r3B4xqil$G7poJ*puPi8Vr5PnjWUGWluf0->EOJx_LY)l=IGX^;L}8LD@GBlwZK#!PzO%!K2 zKXYbqvjZZ@@@K?&H=Gycy=WmT5(zagXS!Rh$Z4qA5|!8!%#TjpYdWeH{dP4hM7_x% zbiNmpc+N51IGu3yYy&@cEA!DY<{o;ekPFzvRxL-~<45tPALQj$+^Y0N%j&*CaWQR- z8u`TX;orzSEqLf=O3ejhy?M$Cr6D6*2Yl^kWdpHa^2A3+Lqbv%RV<*Y`zF&|@JuNJp-~Bv>^{T>P6J&!~<)=|^ z)4bbEtYsabj`-MvjTCAYH+mD{D^_Rjy@bfr!4s=;@1)hXh^KDS;3Qc;d~se}x9U?= zH{95SM2GO}bysIQ@L1$i$IgeVxhC-JoCZfY(WsTGX~JH`o1OMMy(XJRpVCQ~a;1&~ zR&(Iofsuc+@Qf( znPA4(1@I3%JK+17<_R~|a}PeI!WkKyunu(u@B0o$&gZDR9cK#zM;NR?u>zH};Jau3 zwQo(20oXL|2o%0Hn5 z;$vrCO+H)I9}zecP?F`T*aHBRBCEfAcb>NsF_QD1e+T+2nB5C^<#_D*yyfd2{h40s zAu%CEaraY<1tJLvo8ismV#a((&jL!^T_Nf(eQh1_Yn17_ z5>h)hKBsQ4de9=Xwr2bD^eqZHM#=yWs!*yxgA?os?5AvLuy3Vkx22v*z;g2leDt$U zFEd)JIT4(u@6egs@4cx$V0CP!`7y1vGO-|VXLhaq98}|b&JeVYfcJ%eBU3^_xv@En ztTnC@kScV*yA$6tB5n6xzCC4ZB7jkbD{$zF3H5eBo;&yyY+w6dBdJ9f;YcY`4vKDI^&ATQdv$ z@`eDU`4h{NrSq^Ft<#y`NePEG81V)=uSR`!u%1FO4zLX!t(G93Jl#nEKl$xOdk*Wa zBasi+@;HqD!|^et`Z19IHib|wT*I&H)o}hJ!&gk0g#v;+qKlmbn>PKIJ}5QvJy}O# z{tlK6nGq9apftQntu+L<2LvB-!y&gr*!e70IvC^PR-AkfgGbZzI*kYiq=Yr zB;^HkY5VP|MB>}n3*CE;Py=XcKbF+W zm5{&U5aNXPxx=DfO;7WC z@bHa#_vrq~wGn7IE08W6i)MiLm~*lzvbQKt{B~1;xfxxMz&g-OWoYQVYx}gk=Y0?- zy_wx8j;1dpVsPwOcLw$l5jNC&Uje;%vH$Hl=jW}3uypI-IRg(Qf(m~3oGIf^e*D5A z*IM(-7vzsK%t`0{SFrDg3fq#bZx6j@2VT_c6zGxB2#}J^hcGlt%;Ve&`cOeZxK+S* znBcIbXk7%#WxZZo_|7@^J~OwbkP-V31NcVAEMBX7!#;b%xT12hCV|lpkTO<; ztiZOL83@`n!kKD|@zIAW;TB*y<__)wF#E<5DRGtZCi_Z8paK7}h}uNYG-i?}>2J{} zo6T6Nu{*LQe6(t1?!-K0K8gtheCTyn6X=K=hsBUHR@C%wSyrYEEu7PqSC&NUAG*>H z=l~o1f@kaE{`ni}+J`^+zbj2?us5fj zy#pUvUBn;Bg>wPcSE#{rjz4hdI$A-o=2@dGiXeyw^5)#&VvXo%dkYu|_=H;@Tx)G?7?N()BY( z21CKrG8z{tz6}v4i^wX(10Hkb&ILXc(2o&sF^5Fuw*_D_YW#%A!#C-jB{cg+CdkD1 zo!Ihkiy>MQ)8_3rj1_VB?=3HRc9(a*6x!d%O%1iaCpX}(uT88@%;Wea&&lKDzl7W> z;h$-~qEGngs#=`xqj0;z*C=$fMm z1qV%;vBiw%rjX96@IZDs24glcIoXjiRa!yOLro+}c=gyE@et7NXq&nc(d3ex_rCXo zBg`2Ep?okZMerA02b#E3Qx6gzb9R$twED5FYSk8s0d{K?=X&$glBzhS2v5_fCeySF zYB+6+A;$=AL=3Z&1V&c+d6>A839bhvj=zTjU1DP8FOLJ;)!{6FE~SAZm_vie__LvE**b6`D(|!Cae@>`6sb zTvh?3HQK+(Ho26wG|WZRQEpK^jO1t*XJ>8wIi%@{PjC&u(7AB2xqtT_{Gi2cQEMc~ zlIv0a*{rQFtG(4_aghGE!GcX7~;C;4yzO9WIJ+fWnincn@Dyy5z!n8k@s z&)(grWq5_e#3d-z$G@?XBoJI;v@Uv~pibgIZvAf{7L z{g`DwIh$bDdY~{2-lvcuLorg{+>FSCZjJ=3h`a76#@wt(?>}(u4Pr54RLo8hZZ(9i`@(Be6OmJTwPuD94 zrk^Mddt5FAEM@m2qD<8NTv>)1aU~5c@pHvyW7z6&$#6mjkKDRC{az^B<}{4Y!K;<& zWaWkT_u_?$>Uj2w4^6Lgl-JupiIUnnrG$_oQ^DUr8IlP!Xp@N!jo1

YcdAG1;II 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�`)LLgvQ;MWzSCij ztg<9xB&tSaiB5JU8WV%m!HM9*AUR53bdUszVsy`!!e|nI|7VWxm6S!e0olG5N7+e* zYy5bi1uwJTkLHz0%XOs@Q!+BZV=Cl4$GoT+Q6T&3B&S*H!;4R z67=tGnuv4-dPnp3t+3iiD9P$n&(aw;Zx1==12;(V6ya+$|#)OCsq1afr201|4#S-^nh3otcxlbpCJX4oUTQ@%0gbog;W5N zE@ptIn%8+U={piY-#23$LaSvSM!W5lvnE{x^wY)_E7w0tQIp0ZzIjFcterA7%K{cp z-NoBfU=$vlq){v&*=zI%#NhH$HJfFhB@u-@j&Yk2D`zdzgtujW;xGTbUn&xdVoX^+ zv54w`vZ@2PLuaGk9;L@6fBOT>`99r$kfll+y=|3zZLZ&BY(cL;tRfrz=>iom+Vr?q zwLZd|6hpNJj7rliYQ^96mO`R~B|@@1_Fz5dwob~9fG463i<*&Ztj*~)2Xy-%9B=pv zt&P0|)bF$>Al;m_NPgFNZ1Wh1l5*_4#a3unR*`@I)zZU&Hz2?cR846kem|a=cy1|& zh(S$OkM}8)c5y`s)PVes@XFE72h1`Oa&6ck=6m@;Y1APh5}m6hK$FP<9wG+FXHgob zr_UCtGzJbM(X2@$p*c>JLLNSjfH73RD!#2#m%^O5+{vlN{^*-4@3s2|UlnJnAM? zHgG19svswsg1ZnvyNvOhZF;R&Qiv_6o1sKN4ovkHmUEmBUjPkUAgNVS0^fQiUBqc0!ex7PF z5SAA98`}2wkd9bBqwNtYV>+?$_dXHmGCAU$yUGM_<4YXPq(c{#9V|t|mx0c5l~?C!Jl|2Jyr)inVQ!G- zLp^$2qQu(OPP;Gf+5mLi2BO7vNGkGHrunS+I?Jo`t5?*$MH5~CmC47&)zYZ%kLt=D zF?n!0#1W!jf2f(Qo`s@2Vw@Q!xQq>2g&aMKKm@$6WXAu9KCxxGy# z#TAKu~V%A?W79{Fb9JWNgz~oSa=Xw zdnzj7J}RAx|7TZ^zRjA1*j`Pd9C$gPv!iysx4-#4ex~U2)x_{mE^%cgm*pB}5T-~> zfogCWzI zcO$fEXI0MUMC@&<*R-AzBQGC1_q_u9a-}2mm-UeZ(ZNcQ=Xn!?sh}SCgaTW$!<2KN zZ=^UyEaCukAz&I596myThR_8-MM9(fWMZKLymQ90?M8}=LR!6`4@Dys`?;WsN);18 zO1^!rL(U4-HST>RC{_wx-Ffe+n;G=S80vc~=H3VWLK?lWN=>8y(!#9%Y|sU(q1D&D zqdRMJAYj#HppEqrSA?~`i~DbZHtjIg>`Fa>jMV2Die%Vb1M@}MbA{(nl#a-! zt>ABybU5fJ5+#%62t(i9)ah+7*ne<7uX9+=MCAoh%N&AO#TXFSvf>|{C_&o$Vh}JV z#Q*5L++-YqC1TXOG%cxCLLPBElt_eD!5AxMa+}Pjw_*+SofuERHK`p`ZF^B2*+Y&} zxwTJ0@9ihtr3@|5yeznaGGaq{Me*wFEOO{G#CS8rm^)m!v^3;;Q$sNegJK=G*lb5O z9YU0=J5Wm@5)e%BJRTLNfeQrLdp=KM6XV8r`Hg8vN~fYqVCjVw>_xXdxVsNXth#Gb zIG04UD=2ijZ~t_-+MIc@q5Z4wsLrcQ2pL4pGZRI}zbiTL4hCWdbl?rl1J1_K98t_g zTFR+7ZHcwBB7Jr&&(ro-hKm_EfGu%Gh#{jOG*Q%GTCox+G#~>U18XQ)eb-WRTL+RT zM?o4mz*h3h54g8K*1EA3=mz2P7fX}=Z*Fg4GI#+ zvYc(re#_fd%Of`Y6V57<1{E$$(k|Op^}hPA%zoc6?RH}kD3a`!K~!5=Q`>vx@3gbM zkdOu)%AMjr<9|&iki}4}(jgXr3L0ZZYr$O&~b$E|!aSl4%zE7sH-SqFj} z0htG@0b6`jkoJ=HbmdkglB8i5WJs}+legu-p$IQjAaP9R>;)wrnyc|9B4Ke=!BwK? zlZ$Xqs;AP~KKS|Ik0i()s)v(+gah26%8k>~Sk9L<)0o0Otk**Lx7eWE&Y-Kfq<+2kLz(K19uX7y)LROj&&xfU!Qi9 zl)!%WDHSpst0H?3QUk(veV0Ez$!<1o5#}6=tI@ei9pv zO$NBtZ83CSJsSNh2vUG_%j7Bk^$c>8-n8e>dsX;*J52ysQl3h?DW(9o2e9E#&(;KU4J)!xiit&zAuBWB!(DW~iC(ORfip8WXM69xseGs;B&1{3F76E zX!0AWI*T7>bA1ef5Fi;qf=~RR@30>-c6`-!OYodZuUOCXdS^YzdtJ!Fy=UrGF^YTP zu=^FiU;O1z;J8(Bsk0a{!>OBuzX^2t3n%9-BAGVC4srowfguFr@}%%$kFU;dsjzrh zyT*!;;`6nM=VSbp-&BEx`Nv@dZ9uao)FcG>+MFOL*naV}ksMY*Phu0h2pQeNLQ>}i zOVT+=%8Yl3Xqc7h7kAss-?`Sj7zHFFvqDc4hy1aSuEHL#I#W(hmQBY(yU&9vj!4yI zom&VHhh|A1MWi=aky~X`%>0l}jn>|{dQvv`lv9nf94{!R$wkBH;rZ`ySVA)1v6 zLd)_K3IGwyPrRAj?XsZv?8Z&ZNcsGHPYb=mCbSCPjCb+#s!Qa(NOHE%m1zKe4MDC{QS%}Eq zuh1~vGax}i!cyt1!PGxU9x`z0O1_f+9%5)Iep5a_K|Kcq-ruxaESWo6t?=4Qh{qHW zWgOyQSGJYpzjl|u1?0d4aK#HbdSzb^o-Gl}t=q#m;ooib$6a+gD{hDMd&PJzlsf)l z>M}BJbPhKhZ;9FvnCFX^i-%)(aOS~4c5lxn+)zp-tadH)yd?2-I1_!2C!BnG#_$4w z!o)-lWsHBJOB|~my@W$UktNfsfLeg^$RvcLl+BQ_I#sIOcZ8W=% ze*PEhN?(>j^_nPv3*+z%-5&NxXt!0pno$WPRPZfxe{$q}UKLtY&iqs-6`E zMSRxt^05sL6d6dGJeaT_;K{6+)sWx{D=`p^4x0Rtxd&MVKAw!PrS@!{jR~^KyxrdR zb#@!1PPk!`k)t6A0v~TUteM<>q092o>i?TT$Lt8t10!=XhRT;7$AsRX9_=qT{NDGy z*eB&Ev@Q6w;7O&_bGO=1MOzy2j!V&&Spiz)!7!LI3ns|+xaX>czGqbVKI&AtUMG8Y z#C7lDgSI6ahw%H^U1{48`X z@lci79DvVeR#1+PALXDqmPWkuskzb{kipj~D_BwkIQi!5H&4EZ4|DLh%fFnFEHQ1; z?(Anq)DDim*w-eO^oI){I%dO62b;Ro}{*%l|~6HS1vY=j~mV0!VD6kqVAc%$er@Tb9N`g5)r0#l~2i1sBW z%vyzjHuepmPMXrl2A`JIHJE-BV{6YU6Dj!0!m&U%r%x1D!@USk$qu#mE!4_Pjo!{V z2As=M>g}3IzYUIKQGy9dmF>iNDo_5(2=7D(TtRKtB%w5whqS|d^v;b;CqP7FyV zHkRbYj!pN;_LGV6Pjz)2oOL_H3{=~wnhpfRF#vuRPy{r1r2clG7Js7sfZUnbXqW8I zNohb(v|olLhj5N0Gp=mp)f3uyy_r0oMu+(5D?vM?EVeLYBH|r^479UX6u$9%o3<6w zSJAbEarm0X8>oY3f#UqL!i&J%Cr-D)X3$qYRoC%7AN2j%eoeW|l)dEi`+fUYb?#3L zao#!+Rm>HpIFA}XqXFAIwMz?Cho(Xex@vq{SxaM^YU6URkua5#y1u$_*Ur(CH6ORt z&N8ESt_KvywT@q1%k{yh`WSUS58oG6Qp8DZ{AHX3%^i)dr-Hw?x+p6$0~cZkqom3z ziooLc7hu`h*b@YCQCbOOc56NRXMR%x#!=WYp(@Ov^(Y&}%rKSH3hXK`TFcLQzm6Nv ze!rBcf`J;-8TYEcs*vJy@zvS+Lb6GAu>DfY&(wUsQmVz*>-QM{dVfh=W20xp zL&KoeIBQo9e&G(7@TrArUhQCm0Rh3}RkKF#n#`@K!qL}$S(3mOw1Qt$1O2!NG6YNy zDsc>DD|-)do+yhI)ciS_(`pBloqw7WNK1pp#L;1ibt})999`?bN0+U5K{H#5y%U48 zx4iH4f9l0OmHbqv&bb^WbMLr%mCcevv(7Ma^NbW>AmC+AFivI zxBfdxg656$L`H#QCG(4eqsmih{F)KDmb}2zFKiHiV=fAi1Q#nJ0cn8BlQiiXBaS=N z3OnlR9#R<}Q`kaDkYTfuEMa&@n7r@TmfYf&t={c3*1=Z0gHG1QU~cE_r-tH)^V42- zdSbKTiX-)rg2|l_RY;8%6Y2PlIW%(GJu1FoO1+2y;Kt^0SXLrrCbH5WTvf4Yy(_!Yn8XbOhqi`Q(*Ckz|sH zCy$(c^H8B|<(I#Qi=R`D+JY@Lq)6}c+B2*KI*ss7h_GSOUpA_DsfYeg`RUj%;XJ)J zzbW5xJ~<8RNv=#OYeH@Ed?gOOS6UG31IZE?6Sffx)HvneJ3LSO^)+iMuA8-^WzW=fOZu~A^2^jU=c>JbY+}=asm~qV|kGEgH8zC%4x_+_gV%f*3 zU+qlA*h6>ukvMos!w@Lu9Z^EOy}6>tFyVPd`5RJzrqnQIB!==7V;9` zeD}zG*alPLA2_P%Uv_C0X$ccu^ohTSbkl|qibl^tBy3DFW^AKva`Ahx>S?zfM)^erPbUMLCab4n76{YM51pR`j_h3z7dEv`0%IMaZRrxf-6rz3xM3n6~4cSij5F z>7(p>vscMA!|5i_c_qAXsEpe8G6sd@dq81y2*L@92jbQ^^~#?^d4k@|Q_2A6u$*7) zd%@aa9yh8RMmcmqNrIti?#VAZ|1|(N9;>7YD`Mj zd`1U420?-XQ36Y+mqCtO6QiA{0aj#BTA;@k7^+d+WUb|@{F8u^PF@~t30dicl|Mq8 z2GEK2J21d=w8BtO*m>&%k&+>(l?EL~JiN40mYcKe@gOP3zvba0FRpi#u#?JDC#-x> z(*(Z|(h1X)c}sF~fSi7$^d6gOOb{C&zR|m{mvK^5AVP*pNrKa1vJ`OJaWRC6Rs)^^ z-8264DpXyb>^<6ZzT<8I_<6s{(7ECU420eh0vu(WOF8D~CcWsSVeo~^q(ZMnUQSn$ zyys~?PB?nr+@Uk~kZOJpP(2IO%PQ!tCUX3sc|ciTfW`}+q(zFyg-)VcmfajeMPhn= zykF=%8yh^6Dt8)YWJh~~0l4Vle7v3Heye1AsAe2n=2hq13u~rzfBP1FA78gyGJhE9 z_jw1DBE=||P%MBHw0_XxN39pHUJX54X8X|72fbMuSt9M5WS+`#I=Z{7&iZOb|3Yzz5iE{y9%FoIp8zyr$oTGEYnAD$t=o#lVUj&;Y|B5V5`Wf{A{N z!s?e=;L)%zkNTyO2xU#47Box6WXou#NJOTm$ar(3KVoM*N2DrA> zaHoPbWQWT3+$!8j`{>o>LlI7=DqEE;_4C#iO*1M*SKA||8W$`gUri>4oTT%M@$5Ke zJ67ElMhTu9j-Q$U3xx^UEdO`W`TJ*w7ze@bfA3}?RH3DruxK>r2e*yITh(8l8b9BS z@;`WD<$RZvdF;!Ewff3sX0sL(Q_s_pw!nANoo5%oc2MOvH77%hTz1HUVc2|c1Z3a2u+u>5bK#diC&CQEg0ia_|tUAV7I#=Bz<zh1t6y90;snKy?0Wl!uXMGfm7P6#9n$A#C;FezMqU#A>|n(y0R z+OB}TiOM$b=B=)$nzGO%b@Zx2u%M?=YGqY2eVo&!AO2f5ZuT(G_5HjFRwNN_AsURA zd}=BiviI4Rc*XVbl5L1aUhg_Y7hNI4d-bUK+&dY@6#uZO0$%PPpJEfH3-|3PG}*^H zNX)g%*2h01I{$@PCfr0-hhKPLD<0aJ<5O$KY{(B}EGG!P7L97j$vQK%mJ*V#AV7Lo zqehe0H5S3qoaH_cWKfG-Hfr;_M@!)#NsG}}wCV_>NqZ>~e<2JY?BhG$<)Py6bcWMk zuMRn$V{O6|_zE;zM#X?YjHu`_^g4Hl0&^kMvj661C|@6u8#_W1CXopD)=Thgu2B6akXh>b+(vH**mgyMIOh1fKG7JIo z6)P_n)JJFc7PRy~0B-3EG_ug9#X}~Wf}h2VPv-~=ONO=;csC>rSt7q1C0bM z0zB=Vq4wr=VK9;ZlEkwjnWvndVR$d^{mQX7Pb1D9$j+acn@jKE-yMf5vu>L*29QIx zC@Q`>QDxWCHxH=<(qafa!COrYVBucrsI0cx1TXrG0A)JO&MixGCZv|*>iUICd;>P| z-R%)3v;z22JVxb`!sKwxquT1*2ie=NZ?Y{Jl~b_vf7R9HMme>RZ8xqH>wh%EE>b$rP%ue6RHj-O3dQB5*sR#wON&nf*85~56!=(yXxGJ22Z6kS=zoL9DN zM|=!I<>L93MY}xdk!kcO#2^gT7N{Ui691WuqtJwtR$zOV_~+Z z(-BnGRDBqpak~8WxD{r*86m0AmUO_%8yU_Y`8=trO?r9?VoJqw0 zx5_I@ziD{Dv6}@pqKxfHc{IiLs+Ge9(t1BUVwUrju3UG0Jx}vOCFx4>sr^z){^hjB z5tLx0B@7GbDa_jE8m`r+3tM{zmKI`Rdn+30*_ACYA!@A#}P>&WsW2|`+BcaYmoslqq>fE_?< z#x0kA)@~`zVPua@giq*0|A+iqD!1zvsFonk^5T5KKR&1E6oGqMUXO2^m19~Y&1#Y& znG^rL_=z+q$xH7iqzE?7<*xMZ!=fz>28~4`i80(H+wAnoo0xcv=0QjG0V6@n5s}Z< zcDi7IoJC#D*Bpu?Ud~H;340ILQ#v!&hgo?7q?@Bo#7iW{nUk-^ipx|Jg*K!r#?RM_Tr$571xvM8s z_*HQjys6BIhz_()+sg)Mf5ECWQ^_dkU@?(OY|BP4ywidj0ALXFEDfdzsE-inU=Cp? zr&4NL!70+I)a2P(h*)`@-`>FPbed8wc6QqWBf)F!(A}o6Gg`k4-(HuAK zlFbXV1ibcxi>y)zKP|0sd@3sEho!igG-_^HdmOg5uz}tmExR+99oC_*8>^gamhzR; zy%lTUOPKcmdIG&{ycWZntCL;*s|?rGRv*M1Utn3UGt)|O9j(io%Xy_?7=Heu?sG>F zyuFG16foe^%>zV+_w8j>UTMubB(=!{6Qt#Iz+XcN3oS6LTZ=?GiE9`GN{4T%t{LoJ zmWSjG?fav){AzKcp-8(}+|<`fa3I8CwMpjY8l+4Vo(UpSS$J#J}aR)h9F_`CM!WB>PK5Oa@GhQbVv<6GO$y zRZj4^1gGrYlJaW^Ux!a0qhf@Fv}fe9VIi^-!3Q~G$H`*{#t=fPo+I!PzUR=^^WO(b zJe3~$+dF3RmMW0o!9z<5;vg1C=|r8_kONloFJIp7{WHV|7D6zu7s2{602Om7@h`HY zFki=?A(cMoNRH%hpBW)e6Se+P>Ds4%4fS=CvRjm4ma(JniU<=nhiD||(}91Qd^IP+ zBLY#7i9`f+YwIc05oopF;VcIyEYI4!4NB+}_rT0EwmWMZj>0TSQNe6rE6~%%RUb!6 zIHu)Q4?{y8vi6is*_|bj630bom83J+`X_^`_jp@@@nXj@EdKlhwnXArmHbd)qJ`p= zr3pSUDK!;i<1upWnC-%kz74$y1B}YtFvodpGQW_Pn7z^sVzRAjvoOopG ztIYgY_(#6)NCA2-zpS4Fv|vFP-({S){#{ysX=Zx&()SN^&j^e}WkP@dY(rj%Xzo6k z;$dLV)+^V#o49K>tHCllBC~Y)L00GECw05TZpc0OthLlb5L4qsTjE?Z?AB6{RZ| zbqL(WaI~}4Qm60{QMB=>C?!~S5@pTPDxHGpwoCbzyBf%pzEM;jrinUg^LHu}+E8=Z z#Oz|oLi{Bk*^M)U2Eg3X!t3GSz7VC(o6DmA@VX!X=(?eL9h*lnDgR9 zl!EI??83N6m$gxlWr|C0I*lGaBESKoj);m`HW=CpvxUN}*kR1Q?$^iRUCW}A9rM>y zl1(K*3$q;+0Yu z+u)Uj^p~oJ>kK6!lB7R#%UXN5;VR68Xq@ct+DiwjMpd$|j1 z*#{8Kg-pF1XS=*c3|$N8kr7!f2ucmZ0RIaip50*kFA)582d%$E9mykq&{0m1Ur)zU zz_q`ON<1*I14i)oq<6sSFeNkfDuR6#YJZ@J>}%Ox$8mhCQUWJooNxlmvX4N(_x?Ax zN57bLZDnp?y(B0ow=<$qQK7$OjFeymZNm+;`O*7XuDzu2Qhwk~98gc->|I)EgW7Fe zc_X+D_qbpP?V!rLdwcDn=BniUk$%c?!95@%N(*Hor^o}2_$caG2aYNBa}2Cgh<_5) zB9>}hK%%B(un;C&HW-B{<|UE{a|m5$fEEz~2ZPRd zDl67xG+i&em{7J#K&mF2f!}iTpe6s{W;A+Hezl4 zI$iJhPPcN(>E|1nTOxLA#N*9ItET0K`aW-_$HTnORU<}nN`gyOlSTu1Z(?69Y&W;d zYCGY)2==rxb4g}M2Ydr04#Gk@!69lVBy*bR@1;3{M@Pfwy>cGmx9#^vrF9g9CT{vv zrqR3~rCod(xb^@2M)2`n@3)-CZ#fZkOb$Mu3DbxX@d2ZwR{HUIfJL2B>t21{6tEyi zgMlUm7B)(fmr#$xg0(xIxI|^hF|0pqQDK?Q2-G4acqKQw7TaWSF6hof_Q77tPZUXQCbF2?RGB5?*S<~>B;ya<$s6oK--_50w$voO@c)oCYLhqNNhy=D8sTg~lgbuRY^kS)k^#8L=E3Q| ziV)2uX&3ANbNfR(c&Y(o#oVtStFE}|;(v5N36*d*sL4pW|9tLgVokGsl%n=e51X^4 z6*A2IM}^FuaCkUwooWL9$BcBO`UuP`AWN{H4Zi-5BueQf@zc%B*v*{J)W!Ti1z=-g zV`pS#VPs=hXXWH$XXRt#re|T{V`15RY_j@)0QQb%))wCXe?V;o{NMio02v8I@j5Z1 G;Qs^P)U Date: Fri, 8 Dec 2023 21:28:31 +0800 Subject: [PATCH 07/23] major visual revamp --- public/static/themes/simple.css | 139 +++++++++++++++++++++++++------- 1 file changed, 109 insertions(+), 30 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 5388161..be0d5ae 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,4 +1,5 @@ /* @import url('./catppuccin-mocha.css'); */ +@import url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700;800&display=swap'); * { padding: 0; @@ -16,7 +17,13 @@ body { justify-content: space-between; align-items: center; height: 100vh; - background: var(--color-one); + font-family: 'Rubik', sans-serif; + background-color: var(--background-color); +} + +/* enforce font for buttons */ +button { + font-family: 'Rubik', sans-serif; } /* styles for the index page */ @@ -29,46 +36,71 @@ body { align-items: center; } -.search-container div { - display: flex; +.search-container svg { + color: var(--logo-color); } -.websurfx-logo { - width: clamp(12rem, 40rem, 48rem); +.search-container div { + display: flex; } /* styles for the search box and search button */ .search_bar { display: flex; + gap: 10px; + align-items: center; } .search_bar input { - padding: 1rem; + border-radius: 6px; + padding: 2.6rem 2.2rem; width: 50rem; height: 3rem; outline: none; border: none; box-shadow: rgb(0 0 0 / 1); - background: var(--foreground-color); + background-color: var(--color-one); + color: var(--foreground-color); + outline-offset: 3px; + font-size: 1.6rem; +} + +.search_bar input:focus { + outline: 2px solid var(--foreground-color); +} + +.search_bar input::placeholder { + color: var(--foreground-color); + opacity: 1; /* Firefox */ +} + +.search_bar input::-ms-input-placeholder { /* Edge 12 -18 */ + color: var(--foreground-color); } .search_bar button { - padding: 1rem; - border-radius: 0; + padding: 2.6rem 3.2rem; + border-radius: 6px; height: 3rem; display: flex; justify-content: center; align-items: center; - outline: none; + outline-offset: 3px; + outline: 2px solid transparent; border: none; + transition: .1s; gap: 0; - background: var(--background-color); - color: var(--color-three); + background-color: var(--color-six); + color: var(--background-color); font-weight: 600; letter-spacing: 0.1rem; } +.search_bar button:active { + outline: 2px solid var(--color-three); +} + .search_bar button:active, .search_bar button:hover { filter: brightness(1.2); @@ -85,13 +117,19 @@ body { width: 20rem; background-color: var(--color-one); color: var(--foreground-color); - padding: 1rem 2rem; + padding: 1.2rem 2rem; border-radius: 0.5rem; - outline: none; + outline-offset: 3px; + outline: 2px solid transparent; border: none; text-transform: capitalize; } +.search_area .search_options select:active, +.search_area .search_options select:hover { + outline: 2px solid var(--color-three); +} + .search_area .search_options option:hover { background-color: var(--color-one); } @@ -204,12 +242,17 @@ footer { width: 100%; background: var(--background-color); display: flex; - padding: 1rem; align-items: center; } header { justify-content: space-between; + padding: 2rem 3rem; +} + +footer { + padding: 1.7rem 1.7rem 4rem 1.7rem; + gap: 1.8rem; } header h1 a { @@ -217,7 +260,6 @@ header h1 a { text-decoration: none; color: var(--foreground-color); letter-spacing: 0.1rem; - margin-left: 1rem; } header ul, @@ -271,6 +313,11 @@ footer { display: flex; flex-direction: column; justify-content: space-around; + gap: 1rem; +} + +.result { + gap: 1rem; } .results .search_bar { @@ -280,7 +327,7 @@ footer { .results_aggregated { display: flex; flex-direction: column; - justify-content: space-between; + justify-content: space-between; margin: 2rem 0; content-visibility: auto; } @@ -292,10 +339,10 @@ footer { } .results_aggregated .result h1 a { - font-size: 1.5rem; + font-size: 1.7rem; + font-weight: normal; color: var(--color-two); text-decoration: none; - letter-spacing: 0.1rem; } .results_aggregated .result h1 a:hover { @@ -308,14 +355,15 @@ footer { .results_aggregated .result small { color: var(--color-three); - font-size: 1.1rem; + font-size: 1.3rem; word-wrap: break-word; line-break: anywhere; } .results_aggregated .result p { color: var(--foreground-color); - font-size: 1.2rem; + font-size: 1.4rem; + line-height: 2.4rem; margin-top: 0.3rem; word-wrap: break-word; line-break: anywhere; @@ -445,6 +493,7 @@ footer { display: flex; justify-content: space-around; width: 80dvw; + margin: 5rem 0; } .settings h1 { @@ -452,11 +501,20 @@ footer { font-size: 2.5rem; } +.settings > h1 { + margin-bottom: 4rem; + margin-left: 2rem; +} + .settings hr { border-color: var(--color-three); margin: 0.3rem 0 1rem; } +.settings > hr { + margin-left: 2rem; +} + .settings_container .sidebar { width: 30%; cursor: pointer; @@ -467,7 +525,6 @@ footer { margin-left: -0.7rem; padding: 0.7rem; border-radius: 5px; - font-weight: bold; margin-bottom: 0.5rem; color: var(--foreground-color); text-transform: capitalize; @@ -475,18 +532,30 @@ footer { } .settings_container .sidebar .btn { - padding: 0.5rem; + padding: 2rem; border-radius: 0.5rem; + outline-offset: 3px; + outline: 2px solid transparent; +} + +.settings_container .sidebar .btn:active { + outline: 2px solid var(--color-two); +} + +.settings_container .sidebar .btn:not(.active):hover { + color: var(--color-two); } .settings_container .sidebar .btn.active { background-color: var(--color-two); + color: var(--background-color); } .settings_container .main_container { width: 70%; border-left: 1.5px solid var(--color-three); padding-left: 3rem; + border: none; } .settings_container .tab { @@ -495,6 +564,7 @@ footer { .settings_container .tab.active { display: flex; + gap: 1.2rem; flex-direction: column; justify-content: space-around; } @@ -542,7 +612,7 @@ footer { .settings_container .general select { margin: 0.7rem 0; width: 20rem; - background-color: var(--background-color); + background-color: var(--color-one); color: var(--foreground-color); padding: 1rem 2rem; border-radius: 0.5rem; @@ -560,16 +630,19 @@ footer { display: flex; flex-direction: column; justify-content: center; - gap: 1rem; padding: 1rem 0; + margin-bottom: 2rem; + gap: 2rem; } .settings_container .engines .toggle_btn { color: var(--foreground-color); font-size: 1.5rem; display: flex; - gap: 0.5rem; align-items: center; + border-radius: 100px; + gap: 1.5rem; + letter-spacing: 1px; } .settings_container .engines hr { @@ -602,8 +675,14 @@ footer { position: absolute; cursor: pointer; inset: 0; - background-color: var(--background-color); - transition: 0.4s; + background-color: var(--foreground-color); + transition: 0.2s; + outline-offset: 3px; + outline: 2px solid transparent; +} + +.slider:active { + outline: 2px solid var(--foreground-color); } .slider::before { @@ -613,8 +692,8 @@ footer { width: 2.6rem; left: 0.4rem; bottom: 0.4rem; - background-color: var(--foreground-color); - transition: 0.4s; + background-color: var(--background-color); + transition: .2s; } input:checked + .slider { From de2959c157a52083908aa2b568197c23718ee741 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Fri, 8 Dec 2023 21:33:11 +0800 Subject: [PATCH 08/23] removed logo files and switched to inline svg --- public/images/websurfx_logo.png | Bin 8501 -> 0 bytes public/images/websurfx_logo.svg | 7 ------- src/templates/views/index.rs | 13 ++++++++++++- 3 files changed, 12 insertions(+), 8 deletions(-) delete mode 100644 public/images/websurfx_logo.png delete mode 100644 public/images/websurfx_logo.svg diff --git a/public/images/websurfx_logo.png b/public/images/websurfx_logo.png deleted file mode 100644 index 24d39e15326b389340444fefc230fa2ab8373791..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8501 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 diff --git a/public/images/websurfx_logo.svg b/public/images/websurfx_logo.svg deleted file mode 100644 index 2574345..0000000 --- a/public/images/websurfx_logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/templates/views/index.rs b/src/templates/views/index.rs index cfa1eb6..13a91c4 100644 --- a/src/templates/views/index.rs +++ b/src/templates/views/index.rs @@ -15,10 +15,21 @@ use crate::templates::partials::{bar::bar, footer::footer, header::header}; /// /// It returns the compiled html markup code as a result. pub fn index(colorscheme: &str, theme: &str) -> Markup { + + let logo_svg = r#" + + + + + + + + "#; + html!( (header(colorscheme, theme)) main class="search-container"{ - img class="websurfx-logo" src="../images/websurfx_logo.svg" alt="Websurfx meta-search engine logo"; + (PreEscaped(logo_svg)) (bar(&String::default())) (PreEscaped("")) } From 0f4e681d0d0f209ffc15c9d78a35cdec94bfd970 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Fri, 8 Dec 2023 21:34:30 +0800 Subject: [PATCH 09/23] added `--logo-color` to make svg logo colorscheme adaptive --- public/static/colorschemes/catppuccin-mocha.css | 1 + public/static/colorschemes/dark-chocolate.css | 1 + public/static/colorschemes/dracula.css | 1 + public/static/colorschemes/gruvbox-dark.css | 1 + public/static/colorschemes/monokai.css | 1 + public/static/colorschemes/nord.css | 1 + public/static/colorschemes/oceanic-next.css | 1 + public/static/colorschemes/one-dark.css | 1 + public/static/colorschemes/solarized-dark.css | 1 + public/static/colorschemes/solarized-light.css | 1 + public/static/colorschemes/tokyo-night.css | 1 + public/static/colorschemes/tomorrow-night.css | 1 + 12 files changed, 12 insertions(+) diff --git a/public/static/colorschemes/catppuccin-mocha.css b/public/static/colorschemes/catppuccin-mocha.css index 41cc9e0..2394f0a 100644 --- a/public/static/colorschemes/catppuccin-mocha.css +++ b/public/static/colorschemes/catppuccin-mocha.css @@ -1,6 +1,7 @@ :root { --background-color: #1e1e2e; --foreground-color: #cdd6f4; + --logo-color: #f5c2e7; --color-one: #45475a; --color-two: #f38ba8; --color-three: #a6e3a1; diff --git a/public/static/colorschemes/dark-chocolate.css b/public/static/colorschemes/dark-chocolate.css index 32f1f0b..5dacf88 100644 --- a/public/static/colorschemes/dark-chocolate.css +++ b/public/static/colorschemes/dark-chocolate.css @@ -1,6 +1,7 @@ :root { --background-color: #000; --foreground-color: #fff; + --logo-color: #e0e0e0; --color-one: #121212; --color-two: #808080; --color-three: #999; diff --git a/public/static/colorschemes/dracula.css b/public/static/colorschemes/dracula.css index bb15d4c..5933506 100644 --- a/public/static/colorschemes/dracula.css +++ b/public/static/colorschemes/dracula.css @@ -1,6 +1,7 @@ :root { --background-color: #44475a; --foreground-color: #8be9fd; + --logo-color: #ffb86c; --color-one: #f55; --color-two: #50fa7b; --color-three: #ffb86c; diff --git a/public/static/colorschemes/gruvbox-dark.css b/public/static/colorschemes/gruvbox-dark.css index ca89eb2..8120bdb 100644 --- a/public/static/colorschemes/gruvbox-dark.css +++ b/public/static/colorschemes/gruvbox-dark.css @@ -1,6 +1,7 @@ :root { --background-color: #1d2021; --foreground-color: #ebdbb2; + --logo-color: #ebdbb2; --color-one: #282828; --color-two: #98971a; --color-three: #d79921; diff --git a/public/static/colorschemes/monokai.css b/public/static/colorschemes/monokai.css index ea1b58e..c89e570 100644 --- a/public/static/colorschemes/monokai.css +++ b/public/static/colorschemes/monokai.css @@ -1,6 +1,7 @@ :root { --background-color: #49483Eff; --foreground-color: #FFB269; + --logo-color: #ffd866; --color-one: #272822ff; --color-two: #61AFEF; --color-three: #ffd866; diff --git a/public/static/colorschemes/nord.css b/public/static/colorschemes/nord.css index 234b57b..dde536b 100644 --- a/public/static/colorschemes/nord.css +++ b/public/static/colorschemes/nord.css @@ -1,6 +1,7 @@ :root { --background-color: #122736ff; --foreground-color: #a2e2a9; + --logo-color: #e2ecd6; --color-one: #121B2Cff; --color-two: #f08282; --color-three: #ABC5AAff; diff --git a/public/static/colorschemes/oceanic-next.css b/public/static/colorschemes/oceanic-next.css index 896bae1..e7753ae 100644 --- a/public/static/colorschemes/oceanic-next.css +++ b/public/static/colorschemes/oceanic-next.css @@ -1,6 +1,7 @@ :root { --background-color: #1b2b34; --foreground-color: #d8dee9; + --logo-color: #d8dee9; --color-one: #343d46; --color-two: #5FB3B3ff; --color-three: #69Cf; diff --git a/public/static/colorschemes/one-dark.css b/public/static/colorschemes/one-dark.css index 30f858e..5a0a3e8 100644 --- a/public/static/colorschemes/one-dark.css +++ b/public/static/colorschemes/one-dark.css @@ -1,6 +1,7 @@ :root { --background-color: #282c34; --foreground-color: #abb2bf; + --logo-color: #c8ccd4; --color-one: #3b4048; --color-two: #a3be8c; --color-three: #b48ead; diff --git a/public/static/colorschemes/solarized-dark.css b/public/static/colorschemes/solarized-dark.css index 44494f9..842b254 100644 --- a/public/static/colorschemes/solarized-dark.css +++ b/public/static/colorschemes/solarized-dark.css @@ -1,6 +1,7 @@ :root { --background-color: #002b36; --foreground-color: #c9e0e6; + --logo-color: #EEE8D5ff; --color-one: #073642; --color-two: #2AA198ff; --color-three: #2AA198ff; diff --git a/public/static/colorschemes/solarized-light.css b/public/static/colorschemes/solarized-light.css index 7434b37..7a8f67a 100644 --- a/public/static/colorschemes/solarized-light.css +++ b/public/static/colorschemes/solarized-light.css @@ -1,6 +1,7 @@ :root { --background-color: #EEE8D5ff; --foreground-color: #b1ab97; + --logo-color: #586E75; --color-one: #fdf6e3; --color-two: #DC322Fff; --color-three: #586E75ff; diff --git a/public/static/colorschemes/tokyo-night.css b/public/static/colorschemes/tokyo-night.css index 16c54bd..66ad547 100644 --- a/public/static/colorschemes/tokyo-night.css +++ b/public/static/colorschemes/tokyo-night.css @@ -1,6 +1,7 @@ :root { --background-color: #1a1b26; --foreground-color: #c0caf5; + --logo-color: #e2afff; --color-one: #32364a; --color-two: #a9b1d6; --color-three: #5a5bb8; diff --git a/public/static/colorschemes/tomorrow-night.css b/public/static/colorschemes/tomorrow-night.css index 2f2c29c..8b462a0 100644 --- a/public/static/colorschemes/tomorrow-night.css +++ b/public/static/colorschemes/tomorrow-night.css @@ -1,6 +1,7 @@ :root { --background-color: #35383Cff; --foreground-color: #D7DAD8ff; + --logo-color: #D7DAD8ff; --color-one: #1d1f21; --color-two: #D77C79ff; --color-three: #f0c674; From 362392335398a4fd97d6934d78552322eba568b4 Mon Sep 17 00:00:00 2001 From: aocosmic <51456343+cybrejon@users.noreply.github.com> Date: Sat, 9 Dec 2023 09:06:42 +0800 Subject: [PATCH 10/23] Update public/static/themes/simple.css Co-authored-by: neon_arch --- public/static/themes/simple.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index be0d5ae..e6af3bd 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,5 +1,9 @@ /* @import url('./catppuccin-mocha.css'); */ -@import url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700;800&display=swap'); +@font-face { + font-family: 'Rubik'; + src: url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700;800&display=swap'); + fallback: sans-serif; +} * { padding: 0; From cfb51f95e21c283dd908d49f877d03519fe6726a Mon Sep 17 00:00:00 2001 From: codefactor-io Date: Sat, 9 Dec 2023 03:57:51 +0000 Subject: [PATCH 11/23] [CodeFactor] Apply fixes --- public/static/themes/simple.css | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index e6af3bd..7555e6a 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,6 +1,6 @@ /* @import url('./catppuccin-mocha.css'); */ @font-face { - font-family: 'Rubik'; + font-family: Rubik; src: url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700;800&display=swap'); fallback: sans-serif; } @@ -21,13 +21,13 @@ body { justify-content: space-between; align-items: center; height: 100vh; - font-family: 'Rubik', sans-serif; + font-family: Rubik, sans-serif; background-color: var(--background-color); } /* enforce font for buttons */ button { - font-family: 'Rubik', sans-serif; + font-family: Rubik, sans-serif; } /* styles for the index page */ @@ -79,7 +79,7 @@ button { opacity: 1; /* Firefox */ } -.search_bar input::-ms-input-placeholder { /* Edge 12 -18 */ +.search_bar input::input-placeholder { /* Edge 12 -18 */ color: var(--foreground-color); } @@ -255,7 +255,7 @@ header { } footer { - padding: 1.7rem 1.7rem 4rem 1.7rem; + padding: 1.7rem 1.7rem 4rem; gap: 1.8rem; } From 211e1b79a29033285c88bb1d6a021510e14b4d6c Mon Sep 17 00:00:00 2001 From: cybrejon Date: Sat, 9 Dec 2023 21:12:28 +0800 Subject: [PATCH 12/23] chores: fix duplicate footer selector and remove unknown pseudo-class --- public/static/themes/simple.css | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 7555e6a..03c27c7 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -76,11 +76,7 @@ button { .search_bar input::placeholder { color: var(--foreground-color); - opacity: 1; /* Firefox */ -} - -.search_bar input::input-placeholder { /* Edge 12 -18 */ - color: var(--foreground-color); + opacity: 1; } .search_bar button { @@ -241,20 +237,21 @@ button { /* styles for the footer and header */ -header, -footer { + +header { width: 100%; background: var(--background-color); display: flex; align-items: center; -} - -header { justify-content: space-between; padding: 2rem 3rem; } footer { + width: 100%; + background: var(--background-color); + display: flex; + align-items: center; padding: 1.7rem 1.7rem 4rem; gap: 1.8rem; } From 4e06216032a7f99c03c7184ec9681817c693f540 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Sat, 9 Dec 2023 21:14:37 +0800 Subject: [PATCH 13/23] chores: remove missed duplicate footer selector --- public/static/themes/simple.css | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 03c27c7..9aa1ef7 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -254,6 +254,8 @@ footer { align-items: center; padding: 1.7rem 1.7rem 4rem; gap: 1.8rem; + flex-direction: column; + justify-content: center; } header h1 a { @@ -302,11 +304,6 @@ footer div { gap: 1rem; } -footer { - flex-direction: column; - justify-content: center; -} - /* Styles for the search page */ .results { From cdd9d534a8e5cf70d7be7b4c24e6c5e0b159c79e Mon Sep 17 00:00:00 2001 From: cybrejon Date: Sat, 9 Dec 2023 22:27:22 +0800 Subject: [PATCH 14/23] chores: pass formatter check by deleting empty line at 18 --- src/templates/views/index.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/templates/views/index.rs b/src/templates/views/index.rs index 13a91c4..d55ef7d 100644 --- a/src/templates/views/index.rs +++ b/src/templates/views/index.rs @@ -15,7 +15,6 @@ use crate::templates::partials::{bar::bar, footer::footer, header::header}; /// /// It returns the compiled html markup code as a result. pub fn index(colorscheme: &str, theme: &str) -> Markup { - let logo_svg = r#" From c7af9f9faf667b674e8dccc8924293e61447c8ff Mon Sep 17 00:00:00 2001 From: cybrejon Date: Wed, 20 Dec 2023 22:25:25 +0800 Subject: [PATCH 15/23] fix search result title disappearing after being visited --- public/static/themes/simple.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 9aa1ef7..aab743e 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -348,7 +348,7 @@ footer div { } .results_aggregated .result h1 a:visited { - color: var(--background-color); + color: var(--color-five); } .results_aggregated .result small { From 0a9558ea30f8345fa0b6005be7f4dc17af16bf61 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Wed, 21 Feb 2024 00:54:11 +0800 Subject: [PATCH 16/23] =?UTF-8?q?=F0=9F=92=84=20style:=20revamped=20the=20?= =?UTF-8?q?about=20page=20to=20look=20more=20modern=20and=20responsive?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/static/themes/simple.css | 203 ++++++++++++++++++++++++++++---- src/templates/views/about.rs | 143 +++++++++++++++++++--- 2 files changed, 308 insertions(+), 38 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 3990799..a9ba3b6 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,8 +1,43 @@ /* @import url('./catppuccin-mocha.css'); */ @font-face { - font-family: Rubik; - src: url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700;800&display=swap'); - fallback: sans-serif; + font-family: 'Rubik'; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + optional: sans-serif +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + optional: sans-serif +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + optional: sans-serif +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + optional: sans-serif +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + optional: sans-serif } * { @@ -20,8 +55,8 @@ body { flex-direction: column; justify-content: space-between; align-items: center; - height: 100vh; - font-family: Rubik, sans-serif; + min-height: 100vh; + font-family: 'Rubik', sans-serif; background-color: var(--background-color); } @@ -459,39 +494,121 @@ footer div { font-size: 1.5rem; color: var(--foreground-color); padding-bottom: 10px; + max-width: 1100px; + margin: 14rem auto; + display: flex; + flex-direction: column; + row-gap: 100px; } .about-container article h1 { color: var(--color-two); - font-size: 2.8rem; + font-size: 4.5rem; } -.about-container article div { - padding-bottom: 15px; +.about-container article .logo-container { + display: flex; + align-items: center; + justify-content: center; +} + +.about-container article .logo-container svg { + width: clamp(200px, 530px, 815px); +} + +.about-container article .text-block { + box-shadow: 0 0 0 100vmax var(--foreground-color); + background-color: var(--foreground-color); + clip-path: inset(0 -100vmax); + padding: 90px 0; + display: flex; + gap: 40px; + align-items: center; + justify-content: center; + flex-direction: column; + text-align: center; + color: var(--background-color); +} + +.about-container article .text-block .text-block-title { + font-size: 64px; + font-weight: 500; +} + +.hero-text-container { + width: 860px; +} + +.hero-text { + font-size: 45px; + font-weight: 200; } .about-container a { color: var(--color-three); } -.about-container article h2 { - color: var(--color-three); - font-size: 1.8rem; - padding-bottom: 10px; -} - -.about-container p { - color: var(--foreground-color); - font-size: 1.6rem; - padding-bottom: 10px; -} - -.about-container h3 { - font-size: 1.5rem; -} - .about-container { width: 80%; + margin-bottom: 140px; +} + +.feature-list { + padding: 35px; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + row-gap: 60px; +} + +.feature-list-title { + text-align: center; + font-size: 64px; + font-weight: 500; +} + +.features { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 40px; +} + +.feature-card { + background-color: var(--foreground-color); + color: var(--background-color); + text-align: center; + display: flex; + padding: 30px; + border-radius: 24px; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 15px; +} + +.feature-card-header { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + row-gap: 15px; +} + +.feature-card-header h4 { + font-size: 33px; + font-weight: 500; +} + +.feature-card-body p { + font-size: 20px; + font-weight: 200; +} + +.about-footnote { + font-size: 24px; + text-align: center; + color: var(--foreground-color); } /* Styles for the settings page */ @@ -730,3 +847,41 @@ input:checked + .slider::before { .slider.round::before { border-radius: 50%; } + +@media only screen and (max-width: 1135px) { + .hero-text-container { + width: unset; + } + .features { + grid-template-columns: repeat(2, 1fr); + } +} +@media only screen and (max-width: 705px) { + .about-container article .logo-container svg { + width: clamp(200px, 290px, 815px); + } + .about-container article .text-block .text-block-title { + font-size: 33px; + } + .hero-text { + font-size: 22px; + } + .about-container { + width: unset; + } + .feature-list-title { + font-size: 33px; + } + .features { + grid-template-columns: 1fr; + } + .feature-list { + padding: 35px 0; + } + .feature-card { + border-radius: 0; + } + .about-footnote { + padding: 0 15px; + } +} \ No newline at end of file diff --git a/src/templates/views/about.rs b/src/templates/views/about.rs index 3f34819..e46b200 100644 --- a/src/templates/views/about.rs +++ b/src/templates/views/about.rs @@ -1,6 +1,6 @@ //! A module that handles the view for the about page in the `websurfx` frontend. -use maud::{html, Markup}; +use maud::{html, Markup, PreEscaped}; use crate::templates::partials::{footer::footer, header::header}; @@ -15,33 +15,148 @@ use crate::templates::partials::{footer::footer, header::header}; /// /// It returns the compiled html markup code as a result. pub fn about(colorscheme: &str, theme: &str, animation: &Option) -> Markup { + let logo_svg = r#" + + + + + + + + "#; + + let feature_lightning = r#" + + "#; + + let feature_secure = r#" + + "#; + + let feature_clean = r#" + + "#; + + let feature_privacy = r#" + + "#; + + let feature_foss = r#" + + "#; + + let feature_customizable = r#" + + "#; + html!( (header(colorscheme, theme, animation)) main class="about-container"{ article { - div{ - h1{"Websurfx"} - hr size="4" width="100%" color="#a6e3a1"{} - } - p{"A modern-looking, lightning-fast, privacy-respecting, secure meta search engine written in Rust. It provides a fast and secure search experience while respecting user privacy."br{}" It aggregates results from multiple search engines and presents them in an unbiased manner, filtering out trackers and ads." + div class="logo-container" { + (PreEscaped(logo_svg)) } - h2{"Some of the Top Features:"} + div class="text-block" { + h3 class="text-block-title" {"Why Websurfx?"} + div class="hero-text-container" { + p class="hero-text" {"Websurfx aggregates results from multiple search engines and presents them in an unbiased manner, filtering out trackers and ads."} + } + } - ul{strong{"Lightning fast "}"- Results load within milliseconds for an instant search experience."} + div class="feature-list" { + h3 class="feature-list-title" {"Features"} + div class="features" { - ul{strong{"Secure search"}" - All searches are performed over an encrypted connection to prevent snooping."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_lightning)) } + h4 { + "Lightning-fast" + } + } + div class="feature-card-body" { + p { + "Results load within milliseconds for an instant search experience." + } + } + } - ul{strong{"Ad free results"}" - All search results are ad free and clutter free for a clean search experience."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_secure)) } + h4 { + "Secure Search" + } + } + div class="feature-card-body" { + p { + "All searches are performed over an encrypted connection to prevent snooping." + } + } + } - ul{strong{"Privacy focused"}" - Websurfx does not track, store or sell your search data. Your privacy is our priority."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_clean)) } + h4 { + "Ad-free Results" + } + } + div class="feature-card-body" { + p { + "All search results are ad free and clutter free for a clean search experience." + } + } + } - ul{strong{"Free and Open source"}" - The entire project's code is open source and available for free on "{a href="https://github.com/neon-mmd/websurfx"{"GitHub"}}" under an GNU Affero General Public License."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_privacy)) } + h4 { + "Privacy-focused" + } + } + div class="feature-card-body" { + p { + "Websurfx does not track, store or sell your search data. Your privacy is our priority." + } + } + } + + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_foss)) } + h4 { + "Free and Open-source" + } + } + div class="feature-card-body" { + p { + "The entire project's code is open source and available for free on "{a href="https://github.com/neon-mmd/websurfx"{"GitHub"}}"." + } + } + } + + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_customizable)) } + h4 { + "Highly Customizable" + } + } + div class="feature-card-body" { + p { + "Websurfx comes with 9 built-in color themes and supports creating custom themes effortlessly." + } + } + } + } + } - ul{strong{"Highly customizable"}" - Websurfx comes with 9 built-in color themes and supports creating custom themes effortlessly."} } - h3{"Devoloped by: "{a href="https://github.com/neon-mmd/websurfx"{"Websurfx team"}}} + h3 class="about-footnote" {"Developed by the "{a href="https://github.com/neon-mmd/websurfx"{"Websurfx team"}}} } (footer()) ) From 08a6b0fd738f806f93ea9a7f20972656cb09d91e Mon Sep 17 00:00:00 2001 From: codefactor-io Date: Tue, 20 Feb 2024 21:00:50 +0000 Subject: [PATCH 17/23] [CodeFactor] Apply fixes --- public/static/themes/simple.css | 40 ++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index a9ba3b6..86c6ded 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,42 +1,46 @@ /* @import url('./catppuccin-mocha.css'); */ @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 200; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); optional: sans-serif } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 300; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); optional: sans-serif } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 400; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); optional: sans-serif } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 500; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); optional: sans-serif } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 600; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); optional: sans-serif } @@ -56,7 +60,7 @@ body { justify-content: space-between; align-items: center; min-height: 100vh; - font-family: 'Rubik', sans-serif; + font-family: Rubik, sans-serif; background-color: var(--background-color); } @@ -848,39 +852,49 @@ input:checked + .slider::before { border-radius: 50%; } -@media only screen and (max-width: 1135px) { +@media only screen and (width <= 1135px) { .hero-text-container { width: unset; } + .features { grid-template-columns: repeat(2, 1fr); } } -@media only screen and (max-width: 705px) { + +@media only screen and (width <= 705px) { .about-container article .logo-container svg { width: clamp(200px, 290px, 815px); } + .about-container article .text-block .text-block-title { font-size: 33px; } + .hero-text { font-size: 22px; } + .about-container { width: unset; } + .feature-list-title { font-size: 33px; } + .features { grid-template-columns: 1fr; } + .feature-list { padding: 35px 0; } + .feature-card { border-radius: 0; } + .about-footnote { padding: 0 15px; } From a1a615b79e91301ab75cdac6ea3ebd514cb7db92 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Thu, 22 Feb 2024 00:08:37 +0800 Subject: [PATCH 18/23] chore: remove invalid css property --- public/static/themes/simple.css | 195 ++++++++++++++++++++++++++++---- 1 file changed, 171 insertions(+), 24 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 3990799..8e6a8ea 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,8 +1,38 @@ /* @import url('./catppuccin-mocha.css'); */ @font-face { - font-family: Rubik; - src: url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700;800&display=swap'); - fallback: sans-serif; + font-family: 'Rubik'; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); +} +@font-face { + font-family: 'Rubik'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); } * { @@ -20,8 +50,8 @@ body { flex-direction: column; justify-content: space-between; align-items: center; - height: 100vh; - font-family: Rubik, sans-serif; + min-height: 100vh; + font-family: 'Rubik', sans-serif; background-color: var(--background-color); } @@ -459,39 +489,121 @@ footer div { font-size: 1.5rem; color: var(--foreground-color); padding-bottom: 10px; + max-width: 1100px; + margin: 14rem auto; + display: flex; + flex-direction: column; + row-gap: 100px; } .about-container article h1 { color: var(--color-two); - font-size: 2.8rem; + font-size: 4.5rem; } -.about-container article div { - padding-bottom: 15px; +.about-container article .logo-container { + display: flex; + align-items: center; + justify-content: center; +} + +.about-container article .logo-container svg { + width: clamp(200px, 530px, 815px); +} + +.about-container article .text-block { + box-shadow: 0 0 0 100vmax var(--foreground-color); + background-color: var(--foreground-color); + clip-path: inset(0 -100vmax); + padding: 90px 0; + display: flex; + gap: 40px; + align-items: center; + justify-content: center; + flex-direction: column; + text-align: center; + color: var(--background-color); +} + +.about-container article .text-block .text-block-title { + font-size: 64px; + font-weight: 500; +} + +.hero-text-container { + width: 860px; +} + +.hero-text { + font-size: 45px; + font-weight: 200; } .about-container a { color: var(--color-three); } -.about-container article h2 { - color: var(--color-three); - font-size: 1.8rem; - padding-bottom: 10px; -} - -.about-container p { - color: var(--foreground-color); - font-size: 1.6rem; - padding-bottom: 10px; -} - -.about-container h3 { - font-size: 1.5rem; -} - .about-container { width: 80%; + margin-bottom: 140px; +} + +.feature-list { + padding: 35px; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + row-gap: 60px; +} + +.feature-list-title { + text-align: center; + font-size: 64px; + font-weight: 500; +} + +.features { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 40px; +} + +.feature-card { + background-color: var(--foreground-color); + color: var(--background-color); + text-align: center; + display: flex; + padding: 30px; + border-radius: 24px; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 15px; +} + +.feature-card-header { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + row-gap: 15px; +} + +.feature-card-header h4 { + font-size: 33px; + font-weight: 500; +} + +.feature-card-body p { + font-size: 20px; + font-weight: 200; +} + +.about-footnote { + font-size: 24px; + text-align: center; + color: var(--foreground-color); } /* Styles for the settings page */ @@ -730,3 +842,38 @@ input:checked + .slider::before { .slider.round::before { border-radius: 50%; } + +@media only screen and (max-width: 1135px) { + .hero-text-container { + width: unset; + } + .features { + grid-template-columns: repeat(2, 1fr); + } +} +@media only screen and (max-width: 705px) { + .about-container article .logo-container svg { + width: clamp(200px, 290px, 815px); + } + .about-container article .text-block .text-block-title { + font-size: 33px; + } + .hero-text { + font-size: 22px; + } + .about-container { + width: unset; + } + .feature-list-title { + font-size: 33px; + } + .features { + grid-template-columns: 1fr; + } + .feature-list { + padding: 35px 0; + } + .feature-card { + border-radius: 0; + } +} \ No newline at end of file From f832599a311d617d339dd1d7b18a0a5982cc3909 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Thu, 22 Feb 2024 00:10:06 +0800 Subject: [PATCH 19/23] chore: remove lines between or after svg string literals to conform with proper rust formatting --- src/templates/views/about.rs | 136 +++++++++++++++++++++++++++++++---- 1 file changed, 122 insertions(+), 14 deletions(-) diff --git a/src/templates/views/about.rs b/src/templates/views/about.rs index 3f34819..2b4de53 100644 --- a/src/templates/views/about.rs +++ b/src/templates/views/about.rs @@ -1,6 +1,6 @@ //! A module that handles the view for the about page in the `websurfx` frontend. -use maud::{html, Markup}; +use maud::{html, Markup, PreEscaped}; use crate::templates::partials::{footer::footer, header::header}; @@ -15,33 +15,141 @@ use crate::templates::partials::{footer::footer, header::header}; /// /// It returns the compiled html markup code as a result. pub fn about(colorscheme: &str, theme: &str, animation: &Option) -> Markup { + let logo_svg = r#" + + + + + + + + "#; + let feature_lightning = r#" + + "#; + let feature_secure = r#" + + "#; + let feature_clean = r#" + + "#; + let feature_privacy = r#" + + "#; + let feature_foss = r#" + + "#; + let feature_customizable = r#" + + "#; html!( (header(colorscheme, theme, animation)) main class="about-container"{ article { - div{ - h1{"Websurfx"} - hr size="4" width="100%" color="#a6e3a1"{} - } - p{"A modern-looking, lightning-fast, privacy-respecting, secure meta search engine written in Rust. It provides a fast and secure search experience while respecting user privacy."br{}" It aggregates results from multiple search engines and presents them in an unbiased manner, filtering out trackers and ads." + div class="logo-container" { + (PreEscaped(logo_svg)) } - h2{"Some of the Top Features:"} + div class="text-block" { + h3 class="text-block-title" {"Why Websurfx?"} + div class="hero-text-container" { + p class="hero-text" {"Websurfx aggregates results from multiple search engines and presents them in an unbiased manner, filtering out trackers and ads."} + } + } - ul{strong{"Lightning fast "}"- Results load within milliseconds for an instant search experience."} + div class="feature-list" { + h3 class="feature-list-title" {"Features"} + div class="features" { - ul{strong{"Secure search"}" - All searches are performed over an encrypted connection to prevent snooping."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_lightning)) } + h4 { + "Lightning-fast" + } + } + div class="feature-card-body" { + p { + "Results load within milliseconds for an instant search experience." + } + } + } - ul{strong{"Ad free results"}" - All search results are ad free and clutter free for a clean search experience."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_secure)) } + h4 { + "Secure Search" + } + } + div class="feature-card-body" { + p { + "All searches are performed over an encrypted connection to prevent snooping." + } + } + } - ul{strong{"Privacy focused"}" - Websurfx does not track, store or sell your search data. Your privacy is our priority."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_clean)) } + h4 { + "Ad-free Results" + } + } + div class="feature-card-body" { + p { + "All search results are ad free and clutter free for a clean search experience." + } + } + } - ul{strong{"Free and Open source"}" - The entire project's code is open source and available for free on "{a href="https://github.com/neon-mmd/websurfx"{"GitHub"}}" under an GNU Affero General Public License."} + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_privacy)) } + h4 { + "Privacy-focused" + } + } + div class="feature-card-body" { + p { + "Websurfx does not track, store or sell your search data. Your privacy is our priority." + } + } + } + + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_foss)) } + h4 { + "Free and Open-source" + } + } + div class="feature-card-body" { + p { + "The entire project's code is open source and available for free on "{a href="https://github.com/neon-mmd/websurfx"{"GitHub"}}"." + } + } + } + + div class="feature-card" { + div class="feature-card-header" { + div class="feature-card-icon" { (PreEscaped(feature_customizable)) } + h4 { + "Highly Customizable" + } + } + div class="feature-card-body" { + p { + "Websurfx comes with 9 built-in color themes and supports creating custom themes effortlessly." + } + } + } + } + } - ul{strong{"Highly customizable"}" - Websurfx comes with 9 built-in color themes and supports creating custom themes effortlessly."} } - h3{"Devoloped by: "{a href="https://github.com/neon-mmd/websurfx"{"Websurfx team"}}} + h3 class="about-footnote" {"Developed by the "{a href="https://github.com/neon-mmd/websurfx"{"Websurfx team"}}} } (footer()) ) From 938ba26bb992a0cef867418a3a951499499c1387 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Thu, 22 Feb 2024 00:21:33 +0800 Subject: [PATCH 20/23] chore: remove blank lines between svg literals to conform with proper Rust formatting --- src/templates/views/about.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/templates/views/about.rs b/src/templates/views/about.rs index d297a63..e46b200 100644 --- a/src/templates/views/about.rs +++ b/src/templates/views/about.rs @@ -15,6 +15,40 @@ use crate::templates::partials::{footer::footer, header::header}; /// /// It returns the compiled html markup code as a result. pub fn about(colorscheme: &str, theme: &str, animation: &Option) -> Markup { + let logo_svg = r#" + + + + + + + + "#; + + let feature_lightning = r#" + + "#; + + let feature_secure = r#" + + "#; + + let feature_clean = r#" + + "#; + + let feature_privacy = r#" + + "#; + + let feature_foss = r#" + + "#; + + let feature_customizable = r#" + + "#; + html!( (header(colorscheme, theme, animation)) main class="about-container"{ From c3d04bc097bde161a801a24b99e9fd13ce035232 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Thu, 22 Feb 2024 00:53:59 +0800 Subject: [PATCH 21/23] refactor: changed decimal values to percentage, added quotation in urls, add blank lines to before rule declarations and between font-face rules --- public/static/themes/simple.css | 47 ++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 8e6a8ea..eb953fe 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,38 +1,42 @@ /* @import url('./catppuccin-mocha.css'); */ @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 200; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 300; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 400; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 500; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); } + @font-face { - font-family: 'Rubik'; + font-family: Rubik; font-style: normal; font-weight: 600; font-display: swap; - src: url(https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2) format('woff2'); + src: url("https://fonts.gstatic.com/s/rubik/v28/iJWKBXyIfDnIV7nBrXw.woff2") format('woff2'); } * { @@ -51,7 +55,7 @@ body { justify-content: space-between; align-items: center; min-height: 100vh; - font-family: 'Rubik', sans-serif; + font-family: Rubik, sans-serif; background-color: var(--background-color); } @@ -93,7 +97,7 @@ button { height: 3rem; outline: none; border: none; - box-shadow: rgb(0 0 0 / 1); + box-shadow: rgb(0 0 0 / 100%); background-color: var(--color-one); color: var(--foreground-color); outline-offset: 3px; @@ -231,7 +235,7 @@ button { } .error_box .dropdown_error_box .error_item:hover { - box-shadow: inset 0 0 100px 100px rgb(255 255 255 / 0.1); + box-shadow: inset 0 0 100px 100px rgb(255 255 255 / 10%); } .error_box .error_item .severity_color { @@ -843,37 +847,50 @@ input:checked + .slider::before { border-radius: 50%; } -@media only screen and (max-width: 1135px) { +@media screen and (width <= 1136px) { + .hero-text-container { width: unset; } + .features { grid-template-columns: repeat(2, 1fr); } + } -@media only screen and (max-width: 705px) { + +@media screen and (width <= 706px) { + .about-container article .logo-container svg { width: clamp(200px, 290px, 815px); } + .about-container article .text-block .text-block-title { font-size: 33px; } + .hero-text { font-size: 22px; } + .about-container { width: unset; } + .feature-list-title { font-size: 33px; } + .features { grid-template-columns: 1fr; } + .feature-list { padding: 35px 0; } + .feature-card { border-radius: 0; } + } \ No newline at end of file From 338e074887f3a7bccf8f6b5ca627dbb860b1ea18 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Thu, 22 Feb 2024 00:55:03 +0800 Subject: [PATCH 22/23] refactor: correctly remove blank lines between and after svg string literals to conform with proper rust formatting --- src/templates/views/about.rs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/templates/views/about.rs b/src/templates/views/about.rs index e46b200..2b4de53 100644 --- a/src/templates/views/about.rs +++ b/src/templates/views/about.rs @@ -24,31 +24,24 @@ pub fn about(colorscheme: &str, theme: &str, animation: &Option) -> Mark "#; - let feature_lightning = r#" "#; - let feature_secure = r#" "#; - let feature_clean = r#" "#; - let feature_privacy = r#" "#; - let feature_foss = r#" "#; - let feature_customizable = r#" "#; - html!( (header(colorscheme, theme, animation)) main class="about-container"{ From f98182353e0c73034154c91c6fa1c342f361f541 Mon Sep 17 00:00:00 2001 From: cybrejon Date: Thu, 22 Feb 2024 01:14:10 +0800 Subject: [PATCH 23/23] chore: revert percentage values into decimals and trimmed blank lines before first rule inside media queries --- public/static/themes/simple.css | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index eb953fe..1d3c084 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -97,7 +97,7 @@ button { height: 3rem; outline: none; border: none; - box-shadow: rgb(0 0 0 / 100%); + box-shadow: rgb(0 0 0 / 1); background-color: var(--color-one); color: var(--foreground-color); outline-offset: 3px; @@ -235,7 +235,7 @@ button { } .error_box .dropdown_error_box .error_item:hover { - box-shadow: inset 0 0 100px 100px rgb(255 255 255 / 10%); + box-shadow: inset 0 0 100px 100px rgb(255 255 255 / 0.1); } .error_box .error_item .severity_color { @@ -848,7 +848,6 @@ input:checked + .slider::before { } @media screen and (width <= 1136px) { - .hero-text-container { width: unset; } @@ -856,11 +855,9 @@ input:checked + .slider::before { .features { grid-template-columns: repeat(2, 1fr); } - } @media screen and (width <= 706px) { - .about-container article .logo-container svg { width: clamp(200px, 290px, 815px); } @@ -892,5 +889,4 @@ input:checked + .slider::before { .feature-card { border-radius: 0; } - } \ No newline at end of file