From e91eeba7f0ad6dd9183beb470e68703641b49573 Mon Sep 17 00:00:00 2001 From: yuler Date: Fri, 8 May 2026 11:29:33 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9C=A8=20Add=20signature=20component=20w?= =?UTF-8?q?ith=20animated=20SVG=20and=20update=20favicon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/favicon.png | Bin 0 -> 11228 bytes public/favicon.svg | 71 ++++++++++++++-- src/components/Signature.astro | 131 +++++++++++++++++++++++++++++ src/components/cards/Profile.astro | 5 +- src/layouts/Layout.astro | 2 +- 5 files changed, 199 insertions(+), 10 deletions(-) create mode 100644 public/favicon.png create mode 100644 src/components/Signature.astro diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4f9bdf60dc2e65296a8f61750ec3188882a4e5 GIT binary patch literal 11228 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 - - + + + + diff --git a/src/components/Signature.astro b/src/components/Signature.astro new file mode 100644 index 0000000..78e1f14 --- /dev/null +++ b/src/components/Signature.astro @@ -0,0 +1,131 @@ +--- +interface Props { + class?: string +} + +const { class: className = '' } = Astro.props +--- + +
+ +
+ + + + + diff --git a/src/components/cards/Profile.astro b/src/components/cards/Profile.astro index ae0d614..c8868d5 100644 --- a/src/components/cards/Profile.astro +++ b/src/components/cards/Profile.astro @@ -1,13 +1,14 @@ --- import Avatar from '../Avatar.astro' import CornerMarkers from '../CornerMarkers.astro' +import Signature from '../Signature.astro' ---
-
+
@@ -15,4 +16,6 @@ import CornerMarkers from '../CornerMarkers.astro'
A programmer & father of two
+ +
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 001d932..bed3f1c 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -24,7 +24,7 @@ const ogImageAbsolute = image && !image.startsWith('http') ? new URL(image, site - + From 7d2a7c060b00b197499d1edd4249acaf48875382 Mon Sep 17 00:00:00 2001 From: yuler Date: Fri, 8 May 2026 13:08:55 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=A9=B9=20Address=20PR=20review=20for?= =?UTF-8?q?=20signature=20animation=20and=20favicon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wrap animation.finished in try/catch for cancellations; use light stroke in dark mode; prefer SVG favicon with PNG fallback. Co-authored-by: Cursor --- src/components/Signature.astro | 10 +++++++--- src/layouts/Layout.astro | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/Signature.astro b/src/components/Signature.astro index 78e1f14..8766c26 100644 --- a/src/components/Signature.astro +++ b/src/components/Signature.astro @@ -61,8 +61,12 @@ const { class: className = '' } = Astro.props }, ) - await animation.finished - signaturePath.style.strokeDashoffset = String(to) + try { + await animation.finished + signaturePath.style.strokeDashoffset = String(to) + } catch { + // Animation was cancelled (e.g. mouseenter), ignore + } } function getOffset(): number { @@ -108,7 +112,7 @@ const { class: className = '' } = Astro.props @media (prefers-color-scheme: dark) { .signature-root { - --signature-stroke: #0f172a; + --signature-stroke: #f8fafc; } } diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index bed3f1c..459bc67 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -24,6 +24,7 @@ const ogImageAbsolute = image && !image.startsWith('http') ? new URL(image, site + From e81552d18d1d2a922e14d14bb2901117fd3a1614 Mon Sep 17 00:00:00 2001 From: yuler Date: Fri, 8 May 2026 13:18:27 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=8E=A8=20Simplify=20favicon=20and=20s?= =?UTF-8?q?eparate=20animated=20signature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace animated favicon.svg with clean white stroke version - Move animated signature to signature-animate.svg - Remove favicon.png and associated link - Clean up dark mode styles from Signature component --- public/favicon.png | Bin 11228 -> 0 bytes public/favicon.svg | 70 ++++----------------------------- public/signature-animate.svg | 64 ++++++++++++++++++++++++++++++ src/components/Signature.astro | 6 --- src/layouts/Layout.astro | 1 - 5 files changed, 71 insertions(+), 70 deletions(-) delete mode 100644 public/favicon.png create mode 100644 public/signature-animate.svg diff --git a/public/favicon.png b/public/favicon.png deleted file mode 100644 index 8a4f9bdf60dc2e65296a8f61750ec3188882a4e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11228 zcmZ{KWmFtZur@&#cUaureR0>|!CiyP1_|ySoW(7;d+^|r;Ic^YU_llM5?nssd%pYg z{+O9Q)iYgPJ$Jw_^NDW+cAsneFB)#@SK53$JUZInTx+kX`IC3#Uo(9_ z{rP3K&^vU;f%xp?6e85RVRHsyVGCk!tLDf4B)oLi;3z6 ziqKS$(~tVe&PZJ5*p|oybG^XRH%*43-nP?IA^jnq?6G`s7Wv9{jsevd-^a!ts;JGv z4WhzmH1R5Ckn8kn)Cfxpr&F&Hz&Sx}E4AW1GxCrf1-Q3S0|ntNkDW)qZDr-;SRvwP zIyxH{eqkO-fP2&ZU>~7Sq6G!|>menoSCj}RTH7kGpIYOVRpLs2rB|oI9Pn+VunsWE zDX-kD+^UD{I?JRVW4h{L(40|5isfue$R>4qj)qJS0s#$8Mv>Ip z?2ih0cxaDRS#0aH8eXZ@=J91Evszppv2-XSW#5J`R231>U6bb)Pvcqol6LnfK9k#M z`nZOIP3iovDn@$}@SkxSqse&U3Uot z?N*`)ewt#RptL=_QOy}&d!!Gl`9jk9kU4ymrrdRUb`*b<;?(U@w08t4KELZV?<#(b zIIoOliG`wkS%6h;l9R2y6IW+S9Lm=M9)ZbC(Tee7Y?-P5TO$jd#K{js+O7$^$yBsjjVlToZI{HQLp#&K?;VvBFES0}!<0_1*{)0_+AU?Gwo?W2ACrE0NmWm~{I`(&` zEw!4X-hZ*|?q~42b@bB@@eT$VE}?*Q#v_x4Od5KT-omTnF)h~kLoSHeYc z*FYjKI7mn}`?_Q)9c@-V$p1;90-CK42;Ob18F|%S!odMnA*1Du^|vT^nkGrNr(i~m zWrh@BBP6ZHmtH=k=zi02wgAKf!I}(eAK-b&4HA}FI##}wR}&tXOn0VTunz$DbxQ(qA(L)M%V-wlg!;Tuc-_*P5oExK*2 zhQHCG?43^=T@VO~8G`Kb%zzZg6V}(BnHZB{MrZf~NP%`U=ccGb{Hj$MlCx%oUqE&@esF;rzH zE|A+DOy?76?L}I2woQHuu88RjV~Ye#-&XK|Bv&n&npxAwvp(=qnmg#3eO!*$Ut&6L zsM1)PS*%`l3%!(eLdht9?Zw#vMWi?ik`nm2;E!*4TH1$D;AgYg+)2BW%lvB4t07OA zox3pZi$#^#@LF$ZHR4FRI`N_Q`3cBI5Kz1oXutp4d{)3$HTsIh^Y7lV?m}zyP!w}W z#C-XiP#O4=bAp?zDqb`g`5(|HYg0Th2c}b?fSSvP3A5j^k>FRds0N3mA^k9?w@T|w(<#RRo{&S9dtnSPs2 zsC4pQjax(EY@YK|D`Bqr$M^uaYYBZCFUgs!U?rU1WZb7_b*Bq~bjN>+?g+oCaDoJ^ z4z+wYrAL2WnX#1SMcr@jO9MB>1X=@&CG;fg%xwj8r&x){7{p> z+F4g8X2@43i;@_x)=O!@6=B!?Gu$?sw!-Rv}rSpPt z`;mmbmEQ?oN(`F?_{Kza46K~G2`OJO$5Eg(|I$6MxA^ObJM^Dk zjrMW-i~VqAiDM!IEI@MGwjqiVJ?r_kg{}JYngNJP$}}dx_u2DI4)7Y!lc6M6(BWbn zIK_F?ly5ECcAnLxqym<}c;?tEZOz%MKodTTqZN-ea2)BJs7r!2;81evK_hYgcu{0 zLaQk<)QQEx#Q#=I%Lk=h~^AFfAaEk8!A=Do+n5S#^H7uizYtSGEa<=i6= z)dgw^{cFclJ+>q_bI!f#L`NZ(SjdO{Ij@(f{VdG>N@Lz-y2qAss;HC|G24rs@`H-o zY!36Gn0_iJWZCX{#T=_>wdG}IyZoBxZzIxduB5B;q|p&~%3{tLp8!R$6!iMGLQFPh zZh6z|N3X^s0%ZXOJQ;0t(8|vlJ?m-(k~(T6=t7{qHR&D=T-L|^F_r4HlvH9WKjO6( zyChBskST(@EIZK6KDx4TLD6xs&Vx1TF*|Oz7uj{rm3&11J&pPADc|6Y0+-j5Syi?t z_Vi@bQ3Gp&e}TjiCuM!;L;YJ$3$Q}Bu}#aqomrR2%yNfIwYQ9nzU$&){j@KB+VfMh z_q=j8N=%%}|NX6ggaxyf#7KrnQx5Be~BfH?- z{5OYBFnrpJfMgeDViqZ*CzCxV?vb0u*7`=RQO12le8u+-SRfIFl;WA6e%z58R@mh}Yb^r#xdT&#?rJ>rssb8~b339a`I(7#;Gn0j^} zpj-_^f$RZrf_S08g|PZuya*5dZ>vgW&FlfS)}oluZ(BT)lIK*_6O$OtsUVltHi}!n zou5(e_VYmjg0ft=NLB8h=~9qC)r43B}hsG#U20V;y>65MKMO+B>4 z2N64u*bAKaJ?nw`*E-rR8@CQ0iwjrzJs3pWJc9Ci%%o~YB;y%rbWS&Ija1)y^cBh< zkIgeqNgLS_sp)4%9(Qm73?x1^HQ$&M!D>$Y9ynD^vk|rEGKgdsNcdgFa)MfbUux-*uS%o-&FXggmoHz$lNqR84XDZVE^(0_ zo0y>V^6^c*BPLl?i9lP2*P;ELihA?F1i$Tci?z5-!k0#M#FwC3}9+VZ< zH(Ep7=2MYbDcaBHZy{FnWaK=)`+@?-@q6}(yh+Mx)hg>SLUVW433fl(bc?grL>1b! zN;WzdOz~dtjQ_B8sDbiVyZgnu>TM*iu@CajX~m}ZRlY{j^U30utDc$=?)#}7gW{-9 z6r}x{7bG2Oufn;rCIc9rR8%0uCjv#=bYL0=}Z;giTNq?7sA?c4a%yVrnWa~ zDc{Yb%s<zfyiw%}BkZFe4Hdy-p2ABHtn-sWT5)G|w9w@=jRnQh+> z1XRyXj83&0mNgnppW)YdCE#Ji+@XxGIW{XbYge1?QbZK{ z4rBj|1-JuVsI;^44iIS`2=EOIWKm%w?t8b;Z%K^j6wifT|l z-`^-v=SXe@EJ22!>;2c}y(sStInb=|@zL^o+bD^-N=9#>0#hJSj3Jn5`%P!4Q*S6z zJOZYI?7xf5$ju9WrHxINmdd2f-YwayB84b3%xXJ?V zSqox$(CV)v1JNIsS)KUy!Ug$w9Tl{H=BB4+Iqt1tEse9YEKQIX>{UN&Z(dcwI3R3tR=x`WUjtsKV5MoM0b9{cg3Wn2~Y zG?@TL@LZp7**=moKN7}JSN*-R6}eMoxj^o;VL9xHPW#xogYH#S_iq0b=`~!Mn{@Zp z*iD|?FOO)wQQM$)^0u~)AkH6py4qTUMHf|JW7tNueor+<#npFfB`x`OPy{Sqi&{2I z9Qba^S`@Stci)qq$mC3|zFI+g^3X3RSdR9ocPq{KJG>3tF<{iA1^`atuc7P*k;RMU z&y0~{<`v3axwzh_@(&Z;8}1960vusqMXiB3(Wt&~)kVlg`#f9XcW7&ERA@a@pI7-# z&l`9j%T*;*hEue-x=^Ed`}%?6+~dX3*l=1VRXU`G8NKWLQ*t(kr&9B}E*D3hG6w%} z#I}*p z{t+~H>SL?9{rN8~68x|pto3QGY9Z1>_fvZgV`&}MX61Kbsqy;Wr!s#U{yFiJwl>8c z*O=5?DkmJJGpkC(l-)cqk6#vjdGhMgddii=a$OyLF={nJh#rgE62WKOAU@6sLOxiT zv6g%$Sa5lNEvTu%?>HfoM?Nx-qI$`r#1c%Y~?$&h(|#D24hHZ(1I1icVt$wRRznefh6z?4Nq17V)q`_#K^xI3N% zfI|l6?(S|{qsYrg7F!vN=Y-$yj6A{_RpwkPYE}}fR&K2H>hyB`lr}TVFWyU?pKI1m zA9+6qzl%&HA04Qg!%Sd(Az-xUg8n+EB&Pa&{3+*b-OwdRM4U>=JMR46Trn@ez4KcB zyMjWaHY@(hfdzr{bt^xQDmSm@ z^A5Mo(xBKf6Ma_NxXPc=oeAR7zP?X*@EMJKa6B#%xZPA7-%{ODOaTc8v0{cLk*VfF zt8V6>$~^AJ7KbTBz2kAirtxJ8kgif^U|qf>d*-))l|AaZ%XCN%o>DSw#g}fw-Ppf% z9e5dUsGVzd-Tw)E9HM^GuUw8$xp#Wk;J+3v?y7;Jbw0Fcw0qxbl;GXHsTMN8M56`( zPel5MlCz$8%>GLRXJ6Vs`z705>jb! zgNcZU&gZkeo1_y;B-(WV+!+hLn;ov8DIi1_rK1*-D#n)t|ulknpWQ__}e9XIC-@OB-x{#8RL)Ki^KC@kmoX3~A zH(2I0jFLWgO;56Un)>4|7_+w#_cEmf1lBBeVJvxE$^XWk5Avzr!*uZ}t7|R|kl@{N z3`G3N$CU0D*kkytbT(q75TBFh+?$C0GRhq1r&1+Zm}`9ZhxbU|OL=bZyUK`fo29*h za#PaPGzInVq|Qs>aCu!rH4?R;|C}Q)UUUQ%wrZ>`dc~o>jLFXuGn(*YxPwbOIOwMm#wqg)Rxk( zN%GClhwKTPNQl*SMh5TrlGQYsX!txGYFhuE(W}*0>B9P$a9@1NjPA+0t@5F7 zr&6%iufFTmM1FS_>I@7DdRaUvmLEhQZlv65hrwJ|GaO8NRz!+d=Jk%w%KDQ=) zj#pSw><FDS)aDDuS#C|Ii1Q2nKdCkoukamM=hiEB2v~QTijo&!}nhDm)%c7MJRsq z8J891O+F?Wl@)^{pA~VBVY^+eQP0{e3%;sQw|L<`RhAN%?{DH{UfKv}t{|IVCyz-A4` zVUG1MH=b7+l3<&fKj0p(cbaOuDx3#R&Lz`>osF@OGfx9OGVR(B-@y4qZVzjJ>*(og zebKfJI)fe(P9~gl%FEr6-#0H61!1x}tvyimdh~tvn-( zJa*IxEJ%jX24b1^R?|4pM>f7D{%jrpG7HYnm849%G(jRiaS< z%oSDOjkqz|VkXI1yvMhDym?Sx_AZ1+=WAD_?KxI*PrT__Q@g=c2p$Gb1Y>_Y0Vg8s zgw7DBgV=boqj3DgaGnTa|0ao`h}QT@8ZdSMTG&f|ll|&V9USK$kqIHF5n*eXdP|l~ z`My04o$M@7y`>lUz0= zRyjjU42_S z<9YzVS$IcPLnA3cBfhZbm+Q=-$i$Ws%d&+a3HV!oi!%=sbz?=|LG8QYsXW^WT&DCn z67dqIlW%(s7ipa3eBlvF+`a=Q1amt_>W4W|w7ck5)xOV;wYpf2rH z);WK$g%4m%STY!Uhz>bXQ4XcBW|?eXD2F)9q%z_3Eo$Qx6(Tj#!Ja)_TQ zb-486R)KGlq>(CsSViINlqwrZpsrHs2t`5$@uP9BNGx&k0r+>Yd7abK7TvQIUpNnP zd^VGpO6S4>3R|!|BUV8{eLP)!;i^5qcI{l!TOD9Tf(#)5;rNUiQ2Eh*-$?y`UL2yH zR#-HT%wCmc4z#aW>tVPg3I@T+yEFPWXjfG-$6dB>5RlBg>u>j!Ct8~IzoFi+`ZJWQ zjagtT^dNDJ)vpRf_nN(ZR)r?uOG!k&6~02GEMuXL!kAUFbljtP7MBc-`_y{3e5$j> zkko^7Ls?O+&K3NSO|(#gZ>gY(zY*n56@#P`!L4hXLdZHA*&nSkJSandOv~v)u$Pf_ zbXdG0ILxeI(#7LnsD_L=+FuJ1e$xzxB2tv}^SEdX?WIhGFD*#nj9M$f!J+&9#|uDX zdCRcj18Jx27ttAEztFp|!!2`IA|52{g&H#*G~+~+$?wyR7Duzv&ne*=+hv$(!9W^^ zo)vO`UJR%afZ<*gy6`oggoi-8+_%S7BYfLZSci;YmX5JKd6);|pp<>Wn`gA1IE>?# zP75X!9j&to<4&+h^a*^1e~+5`E|eCJNj5@^U`hA*_sN561$68-4RfA|rN~pkJ+w-D ze})tb?+7>5RBY!&hO~AqPln|E4)-IfMZOHVjZ%M&x6rkF)G)L81c{Ad*$J++#r`k} zZe&tf)ajbq_#pzYXRzYw*yO(AH-I1!ltC+?GKOV8 zjPk+2ge2;jd>Ql`sYew}0yA1Xo_B&*kSKHzS5f6sb9%&p@$R&%zTqK%)`>fM0n>V^ ziGrpK{KWow?(tv95e`4s z7Xv;xYmjMb{x3>9OjKdOG^-&_4D={hHO_s^ITmaZ2xxIiiq zmW9258Q4aQxE1<9kAp(-hEnyge<@LK5Uqn%3m?M2zb8wQN{NwGn<1}Im1F@7CbMKn zDsbB;8M#W&on8W#J{8Aa#HwV(&I>1(X#X{!-@zH4RYpgz`#9od+*r>Wzll6hWRbE6 z^|Iy!z=s1Bl*!@B4vUnAw=uSnCwWd>+aF6niP6IEiM7Xcpq06!b2r68In6-;!dMXS z!zb-gKKJS-1dDY`4CvP^b7X~>pP#MY-0H$oZ_Mf+Jkr{twND9Yxv!DiWP0@SRar9dnKV_Fc0p}=92WT`@ITLu z(vhIwaEGG@mob5yGF7%fv^O)c7{$`v;lP5W1IO8v?-^XT^XSU<1~qH-iJC0|1W_QJ zS*%GnER|StVD&y3M>HC%dj=rXzD!#S;>f`q06Z5Bu^M*=!plBr19#-q7sBt=(9doJ zt(^~z&A3P7aD0U@@XLNSe`;7wCjF~G_yM@{m1sw2n-U`(!!bv;aJR#iNm>V;Kr73- z$*BaxC_|JSF;12|V%~8|{OiEG&rd}{>wy?75punM$5^cQ&04p=ZDF#NDGghqqoe1? zSL8U%LZcH8%^(rVseLu8#4_}mZRQ0&hIFH-BPoN~!uUK_DRw6Qq02LCMT z@sGRo{1%Y`FU&EVcwmd?;qN48H$p>*&o4Q<&Sbp(+;V(r^y=CP&H0+%MU9aUkZl}9 zG+UFc+XEH`NnVVeYAq2jCGqGBTy#pZsH!yY27f#PgELAvoH$Z6`Mh-{nM!JajJ}PQ z#0*KfG0doh=D}jv$ zAx^`;QHA8cx(}mjJ_$4~)rEc8TI~&d!VL@;ywUS0R!P z3vIU8;ZRa}-lqcRXiWASoVsoork^MRi|r43%7?Q^nkBCZVqLMF5M}YLJ~J8z-h2s+ zUM#l$YX!@{$21YK_3*7UxoTRz7)by5d22-T8ikph8ah zz6L4ANQ^DbkmA>vVd+!v#zLHj-F|F!`S?OXdV?yeyYCyWElnSCEbvnRKqhYu-`XGcN?qon-{+AVmT-qW&czD;q;!x*-y28m*9Rix`l*4z ztFETT!(L`d8imE_K%*u+IkGIRR|n}qgqLSjPh~iS#@n|8IL$W_W87sXY{dO{3-1D@m3NfDHPLz9l@wv%`*yknh0K~ zUavvUA`l=b0C5|>1`se1qtlch|2y`$J&{H@@+xm;8Dy>*dQxD5oJAvlz(bK@c4QU< z_q(J0^blrOec{F!I$-B?eWU;_-};3+r)gel0x8G&-(N9F7iIAh5Qg>&eZ@tp78P3d zbISk&RZ`jqjNWf;K=l$%rO@)tsyg!dzqpcXk*l;mMD**?V1)@!CuG8soWWEMK5 z3XBT5zbmSe(~FWXuTaW^zgqgA6{PJ4N6K4F;8d)gZk|4FKLSf6`7o|H;#2h1-iQLv z&9#<5CM0Q46l!+lz0Mi=Vdh~)B$X;6n!N--?7`suKT-7l zZMaKH>`y79hx*~vKii)|4*#2aom}2}lydjROA`M+asO-rqeFmYi(#O1kfk`-aiC5% z=}O7~(KLSNkcs-e6uWFF?k~sTF}1Ox&|n7T)VCesAJD27xP0fs5iBVk=J`;8HKy)7o;f+&4z8fBwf7$(N%3IhVdr2}8&xN~5g_Gtmxhoi3Jmhn+ z-5V=}iMI4cWx5Y=ANL0s!kWIVgxJOo{zToiv3GMnvLv5p_eu+rWK(Zu8yzKetJSNq z>;Grn+p*Es`hhL|xbVhLoG@z6wjgtFi2tWiR54v+S!^1a5c=Fd!Kbm3$u6*9U8fGJyu51j z0i4Iw-^ZxQXG98hpV>J%H}fZ0cbER7fxiAS3p>xUqWr@Y=q1 zV@~FC0qwT@J4v5dumy|cI%U6k;rYzTp4RhS$KpSx-ed - - -