From ee3252628429bac5156857515a1ca943ce24ff6a Mon Sep 17 00:00:00 2001 From: "sasha.lorenc" Date: Wed, 12 Feb 2025 19:37:39 +0100 Subject: [PATCH] =?UTF-8?q?organisation=20ud=20projet:=20s=C3=A9paration?= =?UTF-8?q?=20du=20html=20et=20js=20fichier=20js=20commun=20aux=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- documents/Cv_en.pdf | Bin 0 -> 44282 bytes html/about.html | 171 +--------------------- html/accueil.html | 210 +-------------------------- html/contacts.html | 215 +-------------------------- html/projet.html | 177 +---------------------- html/skills.html | 206 +------------------------- js/common.js | 106 ++++++++++++++ js/contact.js | 46 ++++++ js/translations.js | 343 ++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 506 insertions(+), 968 deletions(-) create mode 100644 documents/Cv_en.pdf create mode 100644 js/common.js create mode 100644 js/contact.js create mode 100644 js/translations.js diff --git a/documents/Cv_en.pdf b/documents/Cv_en.pdf new file mode 100644 index 0000000000000000000000000000000000000000..befc5e04d852009569e6536dd48f6038959b521a GIT binary patch literal 44282 zcmbTd1yo#1w+7g_I|R3&!QGwU?iNCD*T!9vAi>>TgS!TI4=#b=PH<>^nsD!X|C^aL z^JdQKK2m4bSGBeDP$|EcWMpOHK%~0fdiagVO2$HFZ)AliAb`lM?%`lc#w>2=Y-nR| zj>xQO>IAg3wc9nl{;#@N zI@_3%(TckonA(9ei#wSbI@>#e6AbNK4Z#V@PWC1)#-{&~@|Of$-}i>j;EeD2*jU&& zS=df&tiQYAG*poJlsy!{JT?-2i+ofldC7dwAN`&WjD%yO1sXg%&1?)AZ} z*}K>|ld=9s#ust^&y4?5-e3eWJ)VEED;t8#{i_Nx-j}2oP5qmqXzK0^=7o%d_dn2I zl=Cn8i^fb%$iUh(1uNAB=wNE>3?wr%v;ms_M~)Xg{hQ;}M*c6lL}Y$%33RYA^muP? zto~PZe=+}C7%$xZPmC8~ATq0(0_|O#UaaB80>N4}Rx@=b(_;o(DH*dmxc+3!GPYn! zv45`O|6FCjl9Oj4x9STg%#!vmLVh*hmuCf2 z6H7xedv`KD7A6)lZYCZ!US1wnb}~+0P9{z=9!_v7H!m;OU;WrQgCz_k1Hb(bV`%@GG;YIW-%L6Q1mr!rm*Ov1+07HkJ(%wR3L*n*h`^Y*WEgH4Y0uV4Qs(2K?W3nXu8Yxz*ZvuFV3w>#`@Rl$yondFB$7!izQ?Gt35KdzuF>W`>P}}w!hLQ zV|$GyY_BM6uPAJ*aS z9Iq%GuP7X^C>*aS9Iq%GuP7X^C>*aS9Iq&xuPB_aD4ee-oUbUHuPB`V$mO5QD;VcL zmw%-6{~#XDzvUrvzLIdgmdEv49@pRU^b!A4Q-3|=UsXx5lX3m63?j2Rkd2J%wMPH# ztbhIHUt)PvJ9B3XurKkl^8DLI{NraYF~i9DZ)p4Lq=?K~mL_0YHa4)~Nt;@lTR6Yo zi`(1SJE=Js8k>S$TSi=5%n%3;J6wNx2OEnR*l?6hoy6^J9qjGEW=94tNYc{A864i3 z-;1liH#N350mq8JDC$mzc0eP|&b2u&{ssa0u|Qa0qa)u<%Im2#7BS_zoEf5&7le1>`j=Bn%W33?dvX++ULa zPp9Wj00unZ7vL8Z1O@;S0|E*I;<*<<3IIUB{H-1Y;GY8m5(*jy77knuBrrieI=K2! zP~b|#fNKn<_5r^KKx4pQlCz4!VyPIyy>-N93y8^qrx2^|!cqNsO37~I6o`QM1{V*X zfQp)i_8lDuCl@ylFQ52(2}vnw8Cf-T4NWa=9bID+Q!{f5ODmwWi>sTvhiA~|FJFU0 zLc?O?;u8{+l2cN1^YRM{i;7FW*VNY4H#9aiw{-XP_Vo`84h>ID&&Dd%Lesgy5Ywq;B*&a{TY-YL~!;1*^vH-09r^sKzKASb&zQH4kZuc zToA%Qva1^~6&f4xdu0;J2~AvN$pQf?)&heVfDHg=g!!)vM8Wp`T*{!~@+Lo}c|y`VtLzkFYMN_jJ776n z5?pS68iB(UpZqG>4?()J2h@HvnlR2=U|+7Q1o4!vd8-WH&37vpk6d_{s@XaRtW?MJ zxWFyPoX8!bIJ3L^C@>>F1G>69ARk0M?`&_ni9P2m<~``0zi@?Pa^v6|v40_U4F7o* zyzqwT+CI4BR5NQ4Ya=s)x+EX8s)vv(KVK<-(LJLHGujowy zIoBmM!el6Yek?uAo zEqAK9z?gEXvu5Z)oTofwp-}{5@_)#>94u>KaMFor4(X!OP4KR0_7YfkvM4V)l(fx` z85)oUoCz;YTz7$#?pgK>tj;<@$P~mjxVY||ltQJ6@z(V$E-8W98l^)y^?ZuvTSdp@ z&j1)xQ0<0�|Frnzsa3hM{Xy{o}fjHZ(TT&EUA>hsYnR1F|_K>%yeMmcpUG>r9U$ zf1I&@%-m7no9TWVM~kCYMBFb&BItgsp7C>DF*Z;@uUCkfPvLXiKximwE2X(TZzoC5 zB~FTj7vadEdX(mmX1$E2SZWQtB_E#6w?S;6xt-|>rYj)RTRARtGMmKktoTQd2U;j* z=`*`_Rg2u2tx3~-e7efhE z9-9Ck--PnTiQ)7zpO||>zb=V3sncgbzo&W!2It6_E>bA^ibpLz31Adrh!O`%2t;Y3 zA<-IHE~LHZI|(BF_|w~Py;K+*u&l+#zaq&%lz8twCFd*hX z^D1-%y;7E7%0k9#cU;|l~@;3_r9yG@aXFu9e-APXLeO%||kdQpw zw7iRrc$E2L{W1)7i{5e-C}m^?WYs+bj#>Ki%b-}J~6q- zfldy>j~ZQ?rD=kQ&ND6oPB-E+_1`*Yw6vyT1h^|$fqMr|b_|^&C zN89lUDC*jLhjfn)_CodccTeN0OWp!M<_Wb=%eWyTQ@n>2>ZD*kD=xh2cOUxj|U;*;=0fmw|4$qgPGpGH^viGCP%DUb3T+$HU$T zO(J1qA|;yr-%*P&o@gEXY=I5VIZi*itmpny*14-+Uqx_ji!?dD27w-bJps@YvUF6nzhlCJ4*Y>n|D zUzHUv5+7n=;7?pe9lm;pcvkAviE^3^gEs2czgLKND z4-MW@YDO`=;$68+JQ|%PCRPrb3KeO17@V5<5b(#H7RvKm{%tSrr{_uk~Rs!pA`jr`>cDB;<;;Sgxx64*v?t&CF_yL zM`retzzYPzbN)u4Ct;XPDbiH_zfl49T^@jR`1xCyOrCEzO7o&=kAw!IFC|CzJD*VSK0_H3I*Yj}t5tVEV^{2K`S!o7Bx8#PrtNm-nZeZD^we)cUcAqs{S>}#^!^U@aLls?ec)nT4L*`}tJ$yL1TRR~W-=jB*z zj(>nk1vm}bwsC~NAbUVxh5J)tatbUDQvKq#f)k2p@U{X(h;edzQ2Mj%o!6v@@RB#v zw_=`1BjgJV%g4SMdH^>{mw&U<`#6|j6frm`;yDhC3{2(jt?=jNe_=F9F|l@^WdFWh zBMqJY4B+$U5~6gM;6Nb|CboD-bkPT4Ko&SsADD4ehS)Gw>MsS%in^V;^?K$fCC+nY+4|d(+uFfmN24K9;tdkdbN-aApWwy{u5A&PrmyET z4&B2Mk@>gl@UIg}ffKaAoe&}VXFy;tC>N;%7UZ?At|eb{(Ac-5AwU<6A?Jl$JyGwG zyx5ePiJDY5^Kc6)DD8oiDFU}MebxndYvD|=I92?f7`O8gbP=_yc?w-59CvM=byy?r ziaqoW1N`um5Vyt`rEZM*qhmCRNxHL?9;okSY%zBW`?jJgB-9N=u04@9OAo#LSgBPp zxed52yBO1>w&+c(gKN)u^a$l5#15=WInA^f7F9Zj#xxdg1;R+kPhF0BaJeFjVn0U~ zH9gc=hTLcLH|t^Ol0EOd1mD z9eFcW)j#o^_XF?LydbmxIQtUS`lQs0MGk5?;*+`UG^e@IFVr?nK9Isze&1iBlZoNV zA!v18f@K5luNEiaGoo&)NpmtIPJGwt)z|c6#C(5H9v8^J3+*-c)w@Qp=m~*!qY$Kb zudrXUU}}5yt=ilNf+}8=22eaMf>L)eND(&2G`i7OL|`X%DqgB0 z(GW^YOD`_+w|BUZy^Dwf8T9u7@|wb~5~NI1ecJ&Jk)(6X-lF&K^|gOfFfZEX>b({1 z5+&t%kg3EXRB1lXT-AAio(OAavf%sPdn$&i6Gk5tE9oTqNI(4R=2M+OlFCo}x)Jp% z?V-dS;C=P{H0O^9aNkgf)SI$7O4|Bsm3iVWiE7OzjlIFezWj0wZKh)-2ub-&f7FvH z8GrTZS_bJekA_;K&?C>?+*hk~Q;J`{c)kPIsRqI2C-v6erg@Cb4ur&h{eg4DxSUyw zwUTGhU)HBhzH-I~uvf4zPp<|%YHxbu+;falFcSmvq_T_knCeP35Q_64YLeM?vd^^N%Io2*rCUr4o;YjCP|Y zwqX{_PKi*3YGfpvwzkCML{ zt$1$@*I;dkk%~VoYgD;K=rY+(x}RChUvwyL@?dJpQLqcgt7F~ml~0OB*ylwD8y zFIRzQzo|Mf){c@@1e5ozeh)7(gp#+fDy_Po#D63$3-xKFo z$R81HYW@5**Q-L8lA!~)cCwkvyrLm!#e6(A*5xpiSeu>8tQs~cAd7P8PX*YBMZ6A- zc5ZLR)AIZ(_cXo6&;37$Z^z&S4i{~_p8=aEOZ?X!XPgg=dG5IoF7`|sOKcDyAU*b% z@)BwT=4BEXysg(-%XOGyx5_Y!?S;wn?0lk#TuT}G^Xi&@mem)^jnS>^u1e!E#CUgZ zktz)*1~95z%zv|~Xu~}t@v^>*{*j+)Vnvv^g)!kcBeEUi*I~9)|I|2HPo-q&0<-o1{-CT(HRSw z8|SivO{m|x*!?4KnO$}yA&4hSc^1(q5yfFimRMC)|o`9G=)to>eT2PeI`DRTWBS{-)Xg= z0q(HY7to~_Ejq4Cvg@0}KSZhM0=CG^!9(^L2&$LSIBZeY)4-uFe&|k?-*}K{mes^V z-6JjF@TI|pAboi!f|rH!Kx%x3wtii@mLYC7rZ_CEKFIcc%e%}sA_%0#Xzg@hEyJn9 z5j7Fz?~5^8M;h9gN?mTJYRfd`rPs9ZsjQTm|4DckXM18pC=c<3!gzBwvDxA4vIGoK zXV(YEsz)zPnraE^dLc1T=&AkYPT5W3D$Ci?l4b$}Lxb>Xh``(&hhnh zW1OkSB(9mr{%bsvxD^!tp z>P}+#9gdfkPsf@M3daeuo?c5 zVx~LOsrRk8s$53W$(N|E{#?NHEh5M8Gkv6__)~qGaZa1W;6isQAr6Zt2CkiPA5q34 zyxFyYUbUDR?C3uR#Wr4=%)r^6nMxkt(|h3B$4a+yOBvK0lb^C{_Eh|vMY}p-o_SfI zvC}0#(x=IfM5jIt+)DPyGUPmnC#4XpWfM?fiq2iL(lvkX@Xp8SlG<5JF+ zID>>5^M9&W&ST*xKGKi&Yd9bI6v1!DJ6>6h7cFRA3DmB`eaW8oHt=vW-lbIfBonqB z8l&flOcWOjN9@?=@v~&~N{~T=z^XK!!aAd&VEs^EBL89?t;r94BX;H;QE;d)p`}|# zQ{u2-er8PMyLh0JH^x+cy0IcA@H{~@0AvhVH#xcYzyLvA?Wt*29i=wrOOa3Tr3)2_GAInuZXiYB^t^xLY9kzWRgTs-`6hd)U?z;& zUzc&_8PHzU=rfi$>Nl6gj?17JBmpAN*>^Ns?dCZJekR?N-D>Ke=M#kMPV{8hkTzP< zN>@E_oN3|BA~{S=3KU}BTNOIJ`iynJ_2z8M!tVAfx0VC(Jg9T+cvGleF|UX*QmMF1 zV`C+%{25?mzcjD#SR{Z`GJ%@in6!km&@jVf+;~2vDcqaqF9{5U<9T=#VDz(!%9>zH zO3(-=Sov_B#V)W}?n=VU`gX9)0gVGE`v3(AJO%MLE_{A06=&l^LHOG=P=K2U0rBhG z)B3D1p*MSSCE8`zbG|IKnYKMtkXv7`?uUhC&w;eUCWS5Re?TOa)Iw##sVJnJ-h7}5 zj}5el$vv(+6UT)Q`}1-fO}C?^^>MrcsDwrJ?x)2E?EAGuka;rd_9cfvgKVf>(hTR! z_lD-qTFI1CCTp7o@&&^qKR&0FALspoHz-hbL&Bz@z)QCm#Ry8+WJVb}Q+mRn zZ!HWvnCpf$cOUQBdGo3DhvN|3T&^uu$=$wJ$+sU^@Y*qqh{Q-^BoX z1oIu98qxc6xMrLAf~3NIpql`RVDD6AWC6TSa+bDMt~WlV;2x11W%jSv8CDp8mC{lj zJ4N;+c%BXr3HB;ls5H=zb%@Pp0Km!@2N60>w0-fBN{rZ#jrEdqA~e5L#Zi!4`c#7Nj>TMZm^xzd?N`V?QljsDa0!`D=YSBbi14;Q= z#r*pqIgsNfVFnD9jZCrb5@mSrS$Ino(OuX=0g3VG6Q1b3B8b1sGa{;QB6O~uzAdF~ zh3g!Jn6aQS1g+^9T_a8qSch?7;mYc)#17hYJi8gt#n#M1d7|uFUoPJH?dNRsxn=~F zS9-CALhvF8+-}3CQ@x|8dQ26tKU29ZzEr{hHQan)9p~0x>CTx!^*vQalZB)6F44Zr z5}!w0LgVckgf^Me)M`SRx%#A&EEntfX&N#ivyQ}=kSOLvm#99@JQ#E$)qLjHx7~Dl z#5R6&o*z5-nJQCyWJ3CWOXNW9XV>mZip$nDxPWz#?P;a#>Be%IlYp>gGXNsR za-Gw0zZ|T8#My7(U&*l)1Y(}GOu?gdOsP>9w&lgKH89dbWtSrlUlM>@ zR)8|JGeDW9$~-+)bzvf>jio?8vF28Cztl$jGoIbQ#>yC^_tc38L9}5b4z!e zDam9n2lc_;$E)@2bw|Vfdyv_$isLo6CF*m{C!PWIX8tx029}i)$Z7VB*CXWj zt@GQRmzy}78+le0QuC%bv$A%?QS6c1w&fpoVbrtA9cYYa1SmG)!k^wQgTk$Z-kcI1 zp1s%kbDZ5KU4RjAljMf%zArzQPPDkAJKuM*B=;eDWIZbQI8TrD7d#SW7@V?p<9S7h zc=FY0vXv_6=Y)Z`%42RDKcRlqu}26Qb|hyE!hpQVnWFOc!nJWw_xS@2@dooZ1JZi0 z7&kA=N_+zG24M<3nn+j&I)-j-2F|)rdl}IB*>n%%*5MOWb9<15e$t!o6}*Q(P!%W! z`weq5gY{24HU>i5fE(IZ^ujQ|EnUqdw8xIJgL!(0^P<_Og1SplWk~L=z0#B}1KG4v zHQ8FtOP&Uw0Vo{Ir0%7v&1Z_C_I`y+I^Nffjwg{a`2HW!3K1UYzo+x2Z0s~0#FG!f zHD7VXa+A~SHEeNh1+9)=Ss#g~Vc=&t@;?Y(MbW7!QhY&Wl0##(9` z8u6{qX=NOs`AExQwUr`NM-ZzFy?-MCV3I1%Mv^3GM-cL`x0y45C9p$Z z2$uLyr#rlpGiD$2v-Cl!kAjve%SCs-j~<2CwD!)=8o=4zc=r+2C(3}Xw}t1Mn~>Wq zDtUs)LDSlNV!82wv5NE#H2VI9;9djFU=KR)+d@Vz=cz1)Nd66l=>e1ZJC}S%wn_?n zl*7()qa#meRt!}E`#uAb>8|r{jIzV*Z4cq!(n$-fwla51h^A2!i#WjjK??Ukv-%*( zFLI<;3;5T^eR7UfavVMNIgRUmHFM^AD{?y&PdZsGzV&fGGd1an3NQJ5u%yH0Rqx+p zye*VU{LZKBp|Mlw_9hOW(baCmIDD#l(f$g%t5uYHmRhMHdx&ecETsMvvu6o-r5XnHEA>8L&O;O#^ColNLH* zyZAkur`c0Cj1tbl!fg+G9MqWMr^32`WJT8Qr#e8hP@zBPp*YJ+tHU>5xQ3nBiIX=2 z87m^C{(g5@5>?XT%`X3$*etUzsnuLXT99sBR1R!aZ+=w`zk|Vvijd}PF4t6jSzhtr zomOCjP{lF+{F}KG5{ob>FCLw6{M^OyPK$2ft%C zkisO?7o8c~%cojwrWaI~=Y7pQCp5LAjE0md^vJOTs<#U5fvll*4SJ5Lr+yh4Pj4ZI~9K!;r z+-JUQjG;msi)2Ey#0=@HviroQ2v(1?q?_=*$eX!!$07V|l%X!3&T{0zeL)n++UwK> z$jmit@U$~FK=Z4KGeqd7vYh~Hac5pujgTOy%#q-yBcH>?R-f9HkkOfD^t@}KwyzG3 zQ<)FnMjM>PAD^}yx11eBl^8Ug!x!x8gp0*9BpB z9-)~E3uE`9&4@4CqlwpdvC-Pc_T1sVu(fu5Knm2uO~x;Egr;qw2)1viDAmWmdDWB` zm)ML$u^+Odn0xDk?iFNU#n}zBi zV1AMsCdeFOMGaV%9h7!11#K6nT+B6i4{iaBi*YWrD?{!XNKeP5)ayU)u}5A_;Fh-# zH<%}R>z<-CG+T1t@g0BC=~Qa-GM^_&X!#M8ki`SqTtf>cZ}CWySD1?U-6{eh2s&1< zKuk3kv_3WNzAh`YCH7~$fP;E?*RcATC*M=JX9Cu8j;kAqkT|S}e*tlFHz7`tU3w}n zKqFl4M#>7x7Nr#iLN?%5O)tyEXClbCHnV}%Z}07oVFN@VEW!fGZ#d1vGBF3V zOnbEWMv#h57IYF#sD#uBN48FbS=q~XGX$8B@PpYf(2<|R0M&5^7Em2vne1^;WFua_ zcF3Te@gw5u0jBPiy)AHGFOQd2TaC?b$a8BV&(C>Mcl7gb9lw$df}U`OuFI@P64Urt zs(}@`?wqT3P@iIA40uDq1B#>5k;UHKD{Gy$Rr=^la@smWYXarw@KSQ#@`?o^wNY>T zwMDyKdTSd9=7izPnJl@>5D+J^4a=jBY`peck) zir`}=JrlRog38L~qW}={r;hqTlQa1tDtx0lK5bz#tw>h#^U!J?q)n6xc)rJz%EF9$ z^g4U;s}m}V1$fZ@H-15YNB;`2CIoZMxgelI^PIPM>9Xaus{_YPQc^90iYR7yUF4{U z1^`p$h!*M`v*)@w?)n0}DATt8^tSO#D{V~)pl5})W{pAe=0GIEF3D6c=hKwj;iwPm zhvcF2pB7h6EwV0^3-@af5x)!E6$O^F^V?vyd-=>2iXhN@cnp z!a60%$tRtAB;6&)O7R=8>j~AbOVl|Fyfs5j+ZRROI+qz46xKa0Hfxr;#@NOeX<|Vo zaE!MalL%fagqn`BMuEel*t&pcF5~iznedFMk|gCWa3N98U7mzMW}_vG^`{Q;_YmCI zCx+SP0nE8deh&0Twtcir#Y8xF1V=aoC`|UOIe*G*wD;x6T`i;quwNu;Xi@=T;9*^) zKl_9ArXRdF_i4dNWSiH9oFIkNbS|5L756m!#uup)!FvFk%o>ykX?)hH@-qO$gQY8( zwcc@LrkDm*E#qzAhR)4aJjjS_{-`V%I^x5Nebo6d4vM;0_XdKRH;CnQKrv_LALa^X z8onj9&zShJN}Wb4!tdW|bQ5)|fyB>B`#NBrsP~=$SZ$<2%VSI@V;W|i2`n0$G>-+8 zUf?D1NV;H7A+=hVkh>pxOS{KWM=STnAgs-ao^QfDAku-304)o#&OvYQF6_L&5S}+*+%A1r}#^JAEQxZ$kcO!kNL4Mtd zQN>nT)m;RTA7v=vvmt&p0E+OM`QMtVqOW9OJT3k{ReuH`xx04T!#}{xGq@;x{4l_I zX=l<{kGHjjQp4p5a2%kiKJHnkGf0(6`_``}L))5_g#~KWpXa=NP$;ufo$vuVOn>;$ zYML=LMDrlXQ~42nJ0c3TUdfU^OYLbS>s0e(srK6Qo;s8}-1O{CfDNRd$zhot4mwFp zE%Dhipi^5TJyB}k?Wh_&ai01Z-(dk)bJ`fj#N&}^yO;l zd^t4fC&_N@x%XsW0fB^MQHRd}EWgk5&-~*q59+IV>#zWAj51 ztUfOGgqNNOcy9j4w+><-Cnx1&kQkfDRw`idtTCz$?Q~u=u1^^KL9fUn)yCkExt_n^ zE9(&wiBi?jbvD{JVM`?tbJkJPsY}t+(;G|Oq)7W5+j0i{`g*vb|?&Rd!d zr3a!P_aauOBbKMrYkprjxY)dta3eUEzdsTO?iN{zc-!8;fBM}~uXOyav>>ZL>)Tys zj`8lFAbF|ta@(`4W=umVlEBnoXwYY_Wj9N4BSd*{U+AYT)*wJy@~Tz%2<&zj7~@i& zmXt6##p$2oroP7gLJ}f6`yJ7SR{RXG0x|a!6vjCWFbX9V%h>fs!phsQ50snoVVm2T z*dj|<`5_7Fb^Sh7{=JObmFl<1A-qK2yWB75)8hUI`(Y99LM3!_<|*Ox`2)jhf0llq zA8V}_SSKGI+w6?BD}*@9zLDNsB9Ztuea*Y)Mp@V|O5Vts8EOZ|unga2+(EyM^Jqcb z_q9;x7%Gn`UynZ2%B$(6#QAke`q?5agmv^UHz~sZwk^`l1Ngvy3sNv`Qom+#KT>mR z9s>nkcRiK~NOo~XEeZFlzRxz|m^TfT6kZH3F3$_>rYe(h|D~SP>+nQ&b`mb2t9#hz z%Qox6O}X{^fNgC4@tQ+`5wEomZ@k{J(&N`qnAjiU8tFd@{CeUkL%&)PXq%ygW>pfx z7?*$HHTMHg)L{dE4gL(JaH?o4fr}AMxubdpKo5c0m_8sy;5ZZx0FQGu9(PLD7ZAns zK?&GnE`^e?&`zi|-TZ!-&iHsZ6RN0s_*ta}XhJOBOrYvqJS5Mx7io9^Pz(FO!`x;1NYt4L$N@Hfr!j z(m-Wk7IfXstPqp8=A-~Wwq;X_v%dISmR5SQ*&OiQLN*_1wjrvt2L|h^Oef?CfZI@qy~JGPsS{Y%8QNY_Z~x zGSS73tYcPgWP&0xS~z&Ea9M6Ms-IC;L3|^)cSY-C3$SUZSihFRJ!Y7Q<>GLIr$*lnWD0DblY`?g#Asfm zvDhzmh-Kj?j({ZMiTk$A65|*mUMF$fW$V70G0?w!-h7|bv7(aKTA<6 zAPR1B5=!2@nFA2GBD8lRf~Kv(qR}}~U$DKwMe6x=1TXeV!}ZqkG?uS@Rlj1(Q-sB)Y^tMD^B0WrEA z+usZ6>sgYbbDEr;1RG08*39ci^hyiwCUoA;Y}VQlITx6~tr)<9H&FigT}{&~NX>ON z;vU>}vvnMcBCdF^PIebcMj3M@DnEHgx(;_dc2Di?+@deMo;C0T@@fBUdr`^B*3A2k za$U|Bzql4^?rDGbP#QsE5{eM4^e5{lMsLkCx8ByX4Zk<;4fpEJZ3b*!X|1~n1<_X{ ztV89oZtOf19y?sn`Je7wDnbg3#V&Ej>=6v9(aJUax9hzs`PNsG8^=8}>ma0r5|VK* z2OstmnNQGZAqPS@sUjCF9eH|n;3A8D0D!^HaTu`x;S7KxdQcNdLiQW-Bnm^eo4ph4S$Nx%WU|tK-MsT3~RL5=62UEuh8pUkSxI2XAiR11ULqe5b%ID z^GAYXRmAn>J=EdwUyXgVXZ(^soTCQn+`2Q%Mjk5SNq8uI{C3O=oI}7P-h=gX-X&%k zQHDFj?K)W+xpoE}ukjm%{6=kOwou!je_ydYrbwu>7H#b8)JI=R5gs0H94$(=<1d^h z?#OQGx;5y#54D_nSi}A{WP3mLjTxn$KN>Vq7@%vm87v1ar50K!y`Eu|9%1M3s=G;8 z-!|c?eBOga4hTuq83@a!kSZd71psP}e!Qy<+MqJ@5O|V>5xg=3Uhg$I7D35|-viH@ zMS}Y&2;`Kz)czzZXjA?aQ77QVU+vXRJG>{CWSBi=~mG5z51EPtl-#w#$p1x z1U*FKH0RNQk)Utc+r@O@6Kbe;&y8B3XF(7Aj8t{$p_9swf1cX%P9h>a+3e613lIXA z{T}=NEE2Xp_g5NDfnYc{l-#pcr=OKbX3-4%>Ra8R?<=2T7r&U?=n|4~8T=9IdhVDV zc)wj}(wTB7u$MW|uefY-eZ#Tv&K(|bdGv0*=*I)@HV@^vDI0l?yo^jrU8EX3U*IyK z@pODylvf^(%$re?4o-wJBr#cz=msWB>)PTCrv!W%>pZEL^q-ke60^~DaJ^sZ5O@i8 z;ihsmr%X8L9PP2?f6~Ky5f^^)X0xPb!YtF8({jAu=4)I|n9s$`WiKYgUBM0t_1dLT zR}{;eqOtT7q%xIB(ot>KH5GSC4WYbc9`X<|;jLdDc(?QE!t3%=a`s0SoirKxJ2cWl z>WmUc$yv2Q_1cc5vHif{p&9SIVRboD+d@y7F#)2Ot6WD524yT5vYp-(?2HO(J;FRK zlLpT$PvQE*b2be8CZ^Le+c?~eJRuuNY##?KlNwQ{`H;gqth)rRrlm)WjJ}0Xqy6o1 zg$nWYZ^YlJ_{DBVe(N8@SDYr|UXrgh&On-AwKdV%kOL75AZD(W@jo1!x&7!IkukSh z7(KD3Pw1OzzZuCE9rS_jo5@toQkzA?tVI>z9{yg_``hI93^=W9DQK*b^}g}w%&_9u zS z+i(cq{|xuiunSiEAKeBRcZMRhv8taWD5!d5Cbsd}K7F7@BJVLV*H3Y2YPuqV3cx0u z%tFuc`O?k_Ko$)+1ZY>xd87yV{|;5|iGo?4%u!Z%w5-CHkfw!YRVJfFT$*JHDaGYy zuE5Keudhn^d1}`Fe%?wNBvvff#1@Eux^MoN(Gj_e`8cdbHF+w zbXr)4& zxo=TA^Xqe9ir%oh@8icX8SI`3d4-QNx^#310b)>1?HsbVs?s1}Qz_nZ)rXHXA-BT# zcek777k^(!IY3mV<~S)#Y!Hx%lMy$Rw9OfYVdM+3xU&r`_L4K29QtncZ3@GnKtas^ zdWO<2O3ccjmBt;wa?=DWgUw!>3oFeOOmYutMJB%);Oe3$X zifN&;;6zMH?*}nFq&JOdHU-fd)!kg0vJZ-L8e(D8x8?*(vD5{3$@laDR7hMZA}-&F z;CC-G*{xW|r!^|$%8okr((sxCq@tpO-P$A5$JdBWt48wt#&n|>cvV5FXQ75 z2u?w?Y@fY{HjNI99iHeCKEI{uEeX*ie?Jh&*y3r4y2=F`KiVt39$~pD>6_Uk51CGh zgK8&_;`G$A`JPGcYf|Q?KvFX~)By_l?sa&PykAVW?|QdnOc)G*)aqnFv^CfXwLnx|dy}#!EyPV}ihB>_XD%{&P`bg9Pb2Q9MX6 zp^{R$nGvqzf{J3p3n4O<`<%VP$utHDIb>VON~fffB6C&m%ZKt|kf`6qMIBvKr?qXb zt+UD+g2pr zRzWdl8T5HVmrX*Btiiw0ZPjFs_g>cefic_I-@bZG$Zsd56cEe#=m=LK4I$E~vSe~V zd>NoU`FpgMqpN6g#(KO+pq@g^M#1O@4HtDYLbc0r=uFNpdm_#fqoD%s$B6fSDjk00 z5dHX59D?+aMmZ3Wcrzsz71?F=h!8$+YV+wn#}L$9Sw&3S!ZN&tx@+k3=A|5+5?Gu3 zZ5C;q#@oKydqz;YjGfRcySh6QUSkA+^O6JX9gq$Kbf)e!J}Q)CrNAJD?Z6GP_tSBU zRS(0x+1^<9^Su%_@T>MaEN}e1+5voCS?L3|c03oY1fi`8Lbr*lEyv0K7(U>_X{yc+ z>Y*K@x>X)Yb)}kTjxXSh=IhNs9K=oXPi+IOtqk0pL1^Ti2(0LPGhjbV-Z+0e$?|Qc z@97b|3o`S%bGj+*Xa-$9?fa>y#E7x%L0LUtqDlLfN3-TRvg*tawnVe0%y2c$4BB(B ziF9^V#~4$T=1cpOwvF+{Jq=FyY3xB@;f5?uru<<~N#E_7J`k^KGp(B=|I*SsTY*`i z9Sx}f`s5K!CdT)tEUBebi&UkO%8{LJV%FMN#Xbg;Ma`jDa^-V}!C=UKS2ilaZLK_4 ze13m%E9)w=iS9Am+9qrq=^G#XbCck~pL=~%@T30Z6VyIa$x>zeE{!WiE3TRnW=@N` z%h-%^pwRe9mpGvhwHR*@g%-4T@jzkcRcmdzGC3hv(Fpr(RK+%VMttlX`V}9?MAe&& z8vKR>jrTqU2Byq>sMmI-C4~Ac=^H)7vC(WH-Z)|Z%?Dk-4k~L$@|p+JGK<0H^rJS4+Q+L#HNsIOK~q}hwP z&YR8!e{b@+tcECtNMn#236_T)&zlpnJcOrp8x`tCXsqaCxu*sb{zR3BiU*--tl5p$U3iqHeX%OrvDbaO*7anWE2d z<)mD@9CVT_yZhIUIOvD(88+W+cJ3>F^C_ac>{qm&a9$#v9p^`hQSIN%;ROte9!@7e zTtf!z> zO(K$GR8`Jbtd-2aX|7;h6);D!k-{#k+WZvaWLe!=L7S8t7Jr{MMbp`WSZgjh`CU@P zu-dr}h?8x`veRa;!6+o}@hx_IJ;m%Nq}i5UxeoeX} z;y6I zln0Jpk;|HMz@yGNY!2&0(Ii-O8O!=+=Ni=6;o)qsRd!+Yz?};8`>GEO7iDYblsnH^ z>@VQl=qRXE=kcAXOUU^}D6J;{kxfbnf7gnm^F)(ScIL=RvNc&Mj~Z-$S4ksvEKAW~ zs7q{tA@B)i%V9y_Pm{F&2_Lcx zzOhb0Iu|_UdRnTh@MazmI-t(ZGR9^sS@~4P;>6&mAr?+y)`ij)+YzoXgl24oImP;* zt!ZWrt-GjD^{#afFe$stcK)O^{M3R8>sn|-U1I!(ta!772R+{JBDtQjX5BJIz&`NZ zvdTH8@Ec>vZ;%4V82K6A%rHs#yZ@sb_VYgbHmPdyYsl1G$g2EWlu1xg+p<+m(dmK8Q z$@nJKKiO^fWn;eoX&jQ%)WUxDFR+Novt3KEkzU=@rgZQ8tP@g{YIZGPgN`9@8(kCQ zQ}w|5@w$7hcn#7NrIuuxDL^_c>$B4-6m_67U;4e`2r384Cz};mMW05GW8$&O(=Jhh zB3lxrsqi|On8Y;@|13XqQ}NXOB9z8)+X$LXcfrz);0<{~rZq)N+AvMh`IrKG$*&-B zo>CT^xw@^z`V4bnz+qtaoQEZ26dX+Db3KX>d_5Oq7~YXE zWNp1~WNp%`X@>@6hc~R| zQPlR1q+L{r6x2irrY()kYu;ZNoeV1P0(5Dzn<$48*9FS>%t7)+OZtp&+yw7WnG1@e z64g0niHg8Y$!-lsekU+y-xINFml1=TVgoWJl*xJr<2!FbV8OUT@`)VVE~1f@l|g%+ zDs&q{d#&s0qpt_*e_AigweBu&#ay^=t$3ddUmoUvaEBW(f4ub#A!*Ig8Pyj+vSt!M zprTsl#-nxZqAGw{c$yhEbO+X3EILccz{A%=y3?Vg2M9R^f{ zH(5bauJJwL8r|!I-#0rG_;%3Ety!?EW|8sLbD=f+W_F{YWyu)5N|Mmnn&i zdBlzk?c+XkGOp^CIiIJ4Y1c2wWyx$|sG?J0P$8+(snrhfWzi#6vVT(&Nmk}SBfb5g zOq%=oDAnPx0{Z%?f*ylftn_Vm%ag>K3;(TAHEv=Dh7v^o#qJ;EA(vFHwj z`CKD8EZz21{mAke(R0kX<{RJ6X|pQb{_*cpCrMbtbtlm~hE2adm|rj-CLEP5UD{u}YhC#4sQjfu$!oTIT2klh678`_8ejFFMmLQ;eH>4%FTPRVC(mkDU2*P4 zS|QIX{M+csI^tlq-1TpdAkP!{?mrK!b;ey*rY8{)6bSy11U@E2o#h_K%s5mDunw;N zAGN&&SXA5hK29hgA_$UFqaY|b49pDO-AH$LN(zdA3MvB9NJ~n0N{doTmxxk=lyr#- z{Lc(}uLJiZ_xIfIf1XF2S#!=iJJwoz?S1xsm)V{ulEkIO zyTM9cHr=0$kj)%kO*E*jGhtM_k5Tz2lpo^v~N1W@?M76ff|hgqA>S9gq^pZs)(qKc~RqM+NT`+H2;m!@W^#;R5>iheB%01D~ zmOfMtvJ2Rn)vhLYm&k7UHklUkV{v&;)vgZ4NqEVly?#8HYwvS?ROj(n$Fycn&b?B< zod@Gzt(V-ymDpX~o*sy>p0it@VjW1%ZjBmitm=(AE*6MbV#F%(L*n2yi$c-J1FN~B}q>x(+$ym#r}lr@2Fs}bbY2; zqaO5u3_SHUTX`SAHmK*+Q_W8Y#0E+BJj5~`OVgBUfz&=PAM9h+fq8^79=X1}2=pROPuc;wd3UR1Fghb`uhKwPSZf6yHw3R~3nFCGtKj@EahA{wmZw zm&O+>NxrlNf81M%7Ju&@ZPxM~+x!T11IJKo`Sj$#uNTYq^H|?#TfUkU!+gkp&Jw## z(5R%KQE-@uKmSqEZd>c3FL$UJX-4#TkKj@)rX3Bri?`j6@1OHY=gvQqbf6q7b5p79 z7-pzU)!=0%2=BmGF?=F~<%3C1QRc8%$&DLlwG>FuAyr@Vs9VQTxEJjQ*3?Jac?@x! z8>aF?xO!3%I5(aSqiJS%q7Mm+1+sn|q;Hs1iCM%DG+61H2*X6rs7y6=z^N)2c3Uvw zPP7l@HU~d+Gce=2P2lSwusoEFS;c+LZ*TOyR?7K+?!t>f8bSq1uCD3&avtN?W%ou$ zANQ82sgjydM`WeiXa?XvcF}siTzorYL%f@>KrQKvQAnb%Nb4v6SWo_?urA$%nRT4< zW|kzw8us?27Qc74WHC~NS9rMxipNGD;op(88tA`32nl8XWJ{ z@mz1_q&6GZF@S?8u{jKMG`f2C#DAz_T^G}mMN@BlvCQpL=l0U~L7Q=NQj!S@}zb*o24cIs=GI}R!LX|{ynb`i@YE*g%DH@^04Yzg9@;>m~a468$KPB%7U zR%2ICl+jS^Q)LAC-kRIlZ6tTToy8b{w+Wf+Yb?g%_0ftYSJpCb*(l>K+V|aQoE%DY zUw!4b)*xdj*lA6h7oikk*7L@X{@&0^@?BZXp$5nKhSOACgBl)K(i@YWYoTbRUh;e& z#&XlpZ(LWx=Ev&YSa>h&c~cLMn(w~(CQW4PkDg@j&joEvAv93p;qE~jsdIH*+IK6r zCloTIXUlX2uYVr=`RAU2lqf zcLKKQ*p_hn;k+$p!IRLZ{)!s&8+TM~qf4kh5N6BQXT27a?Ik`vdt9MGf?07e z-1gkPC+C`}!lFgI<0=kL;4GzNre|M-TBKw`F}Ualr#|ljrAUG;>hzN4)djuTYjfN-qHAp?7%@TQH$1iWUfsGt zmn`vPcee9Y*%_tk;Lo(`LL$-_Bn}G%*#U-~{6)_2OVS?&WAYc^Dk`aV`5g)KKvB#S?gxf;cE0L%;O2a)qM{-LAq7yn{Uz<&4Tbcu;UyL{f5kvIayy3tB9>LWL}rRvtW>f` zYB>Cp-=E87riBN8H0hJ&QEs7>jO~o`s(S!a;OM@>LlFpmeX4y`ZJME~(8c2t8JXX% zqsePtx+f&jPbTBT`x%+O)b=#ri-;UoR2kU)`XjhyMSX~y{OZJ9t;Q=uFGbDRrhBsHVv$rOa^{Nuy)6x!L>! z8>hnIr5|Snod6xawZnzsr2Lqid$gYkg~+E>yrddly7tq4_FF3$Su*^boo4rJEv#a6 z&_E$Lh$rb&ImAGwhq57=oMemp6xH`@KKvmg*h3?tMNrXb`+ zr`l64mgO>hm}~+mOGxm!ur!t1Kpwck{+O4PtxJS{vI7?v6SwK3;P~}X=~-}Dok1FH zR*Pt&yF1@EbO|M)kJ8vpA|)!f-%n?eQH5R7;w=^WJg(Kk(G{KSQ@%hi2XOW;Cc^INpKHZL8o_h!SNUiCQIrQd(;qP&TVIo&^ZcSwX#2#?U`T+Eqp z>K46Jx;d*bk($!45}&0O(!_cd7gr82>VN3I|EFh52m+^H4~Y&L+Kv!<0c>SRGOxqO zOYF*)pr6m25VT(ZL_vj0)CE0}kO~)tuM33A*L6r%1wy6m`bk}d!rq1Z2lg%yDtp&Y z%Bz1O@xuMdgY}ck3-*)Q3(0Z?g8wA=I;;`=Cqvhv5dJ$+7w#dA7U+<#3v|fWg+i%? zXtzJMx}>$Gn=?RMr3^ZxP6OWk-te3Nz1(k4`VbEU{}UV>1rAZcKf*}^td42`#i2RC zvt@7XU~a|&axr(dc64)L0U5iwIyyMo1Mfk`4rU-zM+X;EYk-*x@h!;M#L>+a|*#%62)A)>_pB^XLeK~SrP(BeN=4T7win3AHJh?tt{VcCBBgaQslX*Pti z{1N+vPUQmF@BZ#oB(>dtg5yAeL#XS2f`g#IA@uz}!EvI%{r;@_pWP5rNnjuoYZnl} zISCT80u;^I*^GsQiv`BX0Y}hkqVx@FaZh%0NPI9H1c!qFc0hnpkdxymBo|7NPqblW zB%~NqBH<1`oFYkei#f6fpNej zB;deb9ylk!g$m{rLHvb5U_3A};2#_g1-=u5fVqI{U~oY8*Oh-=3xkOPS3zMCa4vu{ zQv&q=4=zf5IZ^ffWJ^D6PE|P>dHJ7h`PX|?U{qB)(aaC~T}=&O7t{p2+|h35MA3XC z_v9Z9=@1SWmCapTK=#HC0HrB{VDlI(igqGL!+!zmY;Ec2d<+W3uOay`{|F_0=rfhC zD@n@817LtR|LZ+UOF~eFEhNL{AAx^X9l?^zCa-i|LQzcE+|`ZE&D5C9;&`clw@xH& z=O3}9Igr+bO2LaL`Vk3A1yEEB8CCrGHx3&{TtY)aUP)O3!DWmX>3;i&f)3$Eslv$) z;SgR@>AHf5nv9a-A^h(jQQ%QVLS*#w=fcB~4Fs4z7b}7h8N>^+uy%HF1$mkqJA)i8 zK%(kuAZrJZj2eg)Bm=xR1H7^w5D)--xvY}r&H&q{*sRtQ0V*j_Gs8vO^!xJ6PPdgM-QczY`lei9&Q&iHFmk^hdI4tcy z%29q0MgNd7@Ez|KykjtVLQ)0pU|n zF;P4+l4|!~U>KqBWqhYn9#`4}XMrXneTPl5!>26#@X z>mmvYGKx~i08#V-NhW*}AkdTuH*y_WMzLdnDE=5pOZ+bYk@KHJKxXD+kSJaTNpXA< zB*G<%sELS*s3Kz;)NVml$rG&|P)VT5h|3PEtg3Qcd3b*JvPjzHlS&9cB4>h!J?-e? zYUynL56BRdkPFG=d=fHHcU5gwH3@}d3JF268zdj}Nnpw#ZscqfSxi+cb341Ey#qlp z93;E+zW_zfbdjL))(&nrkAb3?4w9?-kDx!@l#C+aqa;*+&9Q#}h@t{0I*Oc9{}~;6 zIIb%zUH=8G`s+OkE{Yl;=jeaNJ)HBpxY^qS{BNv?h6C8@eMXo&kCpeUz zMRL9Wf-^M+a!s&{DuCD(0TOj%yWbWokUa3et~;E+|CM3^mmRnfNQ&_L<-gCJe{M~O z@Bs5MMG)}k7k~Tz+@9_oS|{6#M(p1(aQAB9J$z~^2zQlLM5gt1C+o|k!x|~ss^OU; zUzDU(H_=^PoZOh%>V4--uj1fOP0&4jR+=tyJ@h89?_{#EZb!HPEi~qt(8HIKAJ6M* z=qC6`2^%quQlB=H^IeId|6aSL#3px^+Ho3#R+zXV4~9c+)T#89#e#A2%~Pc`5QZ_4 z%gr9JNEIe*kHX#J-MN?C2UuS=Z<)gD;;%S5y*s7T$mw>CeilHPu%^&N39SY;$l z@(cwDg+J59nfZaxt7)oDjg7Cwr9{L;jLD*GK3JAG-^Bbz_EtY5$>kgYnet7Ay5KW; z3C(+^3mMed?p8|q{Gp5PlN+SbtXkf8U#E?maNZ#~_`y`tjTU1sE-T%pb_dPBQ?BkG zmU@xL22lG5k=o)nCVoW6fq@1865f%MfNCwvJxsd@9aN-ORCxLj7K?Cp`e+?RcV}>&=XfAkAWil8N~CeiT?@o#C1t| zQAaaRMDrfDDKfzha*}iX_b3y7;`-y?I6oszpqmbJh@jy7?l}K(o%Ao9!(Kfs53==8 za83*W{>J$k{UOSOY%mm@6PFeL#z88?VR?SG_-|@<+`^8k*{^oyIrJZhL`H|1Q&7rt zvMKz9^K&|gz(F?o?>NXf`p;_r7tW!#K$Pb&X$uO@$(sHb4zf{@?Q@v*1qJ80avypi z#9xHhb+&dwB)Q`GIXC+^F8r?qEMhX^2pEJq0SijNCpAYY8F2+;r@x&$QmpFf;%aV> zOw+}KbRa;|7DUn>T_`fu4j5Q82WA2wAV-ca3>k;O03C#bxj-;5HwX&&eK_(-9|W=V zgbM?V1PZJGa)V*OY#;azm@dJPX?bA4Q#Tm!WD!_C#)X4{_kffK3WOzyBW}7tmLni;UoZj?4QpaJZ!&im6Qc-aQKAQ@Npg zW$J$JR~;5*LT*vGvl@6r@~*8s0sW_hjRXsG?PwnKwEY=^cZ2ThH8)atyR2KPCw65o zpNSNgKHVqx?3Bx`w^weZlg~elyqp*o($u8S?0r=z7?hkrW2zjgTE4EO&oNgr_D%p<^-NLgAt>pE*B8%LxAOPE+7RG1R174 z5fX0T+$BOkfhTk@FccTiM&N`d7vPtm$Rtz1l?W?<0$K?;1mM6Wpyxb*?gN?(I4me~ z1`FK715^{Z7YyP8tOE|{CJYP#{^tQufUAMVLg+XY&V|c`T!;fKi5p>EfDHil0fmDB z+dxk1hoHbes$L9!RMKND%iTEd{wO0ayx_^vjeu0q=2Q?5-dFCgdI%Phw{m zVM-D=qclXNSy_o5ds;ocgQkFY!5T+Jnr!boA%2M z`I^)F&D(C*;-P2b;>#NVW6~>1oxtTKjdaZScEp}Q&$PEW-D2xAuGjIIWX-#>k#0Kl zMOfP1_6j0BTQ8&P^P~pu6%|i?dX4|mYwYy7hml`G zr!cR_U9x9RcL`vVtJ_QamK)0%;D4!_s@k#!qtT#j0G?;IIvm^1MCe7 zfIxw35yk_cB0^Wdz_@^`cz^_aFu?HO2vb33Z9|$S@azrB#f=LC##;my;wr$TVSf!Z zP+%ZI?E27!0^2({ktPHzOao>O1Immr-NRqu28<6OgCbY0!ML20u zPWu>6%3R1k8yXV(soLUgPK878cBFTew)@2VvtZ|Uz_{cGj7ufyxL7Z9 zhR5o+E+~_hiRCulTpDh!UZ5c{%stJ7A@x+U3zu|M&Z&;Vk2t}_pfA-rE|cD9pkakV zCr0GX4x5_P6;^JtTD;A>YS@8En6IA;PZ3{j$9ye)?Ruc=Te0rZN9iK811Np%DA2M^42pL<14H{V6o2=7C;!z3zVG9Jnx`iWioWl$vC+ zlU9|8+g-djVE=XJQG2e7(e0{B#%dloO{5h@Z4 zVNHlNbs)^;075pzyz%hK!td2YPWt{u$xy(MAuD3r#nEaa8uQLKUbAcWO?6}YV=aT(Be?pAS zh-w0U=4hM!?n@3!hB`w4Mra_^S2VT<()IrD)g2%ZwsZjj3*I7#^&B9nA|fl};o^=f zh!w&Cd{PCb0vdp;1!e}uPCpYi0#QFMy9|&6*xFRY!4g>b2ChT=oG3E!C@bI|5%&V2 z1>kT2NWd8)z6C-Ca|j?jtl!^rLgXCdSN{VGPu4E3&YqyFB0$1l#8w(5XER{S86r*a zuN5djsOskA1Y{ybl==7dMntT2M3w$`v;3QA^JoL{Kv5b9@#(OEcz{Oyt%10KFaCD} z0ih-<1X!--0cJ?th~WaIeGccnf49$J)cSwZK!*XrFRYUk=fqgyUpEg295LhkTY>)E zKESxn3IS%8Jb;<=K!LawrG1co^0#r71Bh<_?)CqsK!=_kwSA6Ssfpe1%RnNgu5QM5 z$TYlg-qwSruJ;`W#kY#R8jgijbqg0>dPw-VHybH_WXv7L zrFDAw2HS;2?$$zfq`r%e)5g_Vd-9VH9kJjD}Mi26fdJ z)LHow#`IO3arklL(F2DP`X@o(o@5(fc;*z|9?mLeeT9Xig-!RvO6+{%oWv=WSKvSy z`N``{86B%>XGGfObTV6RM5?L|A2bJz5hWMmZyZ>`o}o*vs_He#y?UquGgqZpO84ec zblId5kfJTRuF;HNME7NX^sVJc=@--OV&&AXZ4yp4J&jq;m;Ace{UtNQ^)00b%|`89 zCL<(T?>2BsFWuLseE9{MrPVBjle@VBdb^2p*5dw1JWgpt^UF-mvd1{3gygZV}Cl!LRfB#A{x!si|Tw7JQeuP3OX3 z_sZ(?+t9kVbkA_yVoNPfcQX+`<8~R!@p{P}K%NN>P9qmP^{FW3EJx4;c?)5a$|fiv z?deN$2Eqq~QAKGOBu;F}Ov<+?c?_eSnd{C(NKf4V=5s3TX#ioy!&E#;ZWTXSwU;>> zLtqAQ00nt(UdP0bwQk!d8ymO!rJrHpb35rJx{F7z;Q7o4P^-wBVBo92xe;W1F%6tk zp_qMV%%42KSUh)uwes419ES7v)?k9~(DSCModx-ew^kbOO^yWtcx(9M2h#Ng1K@9)sx!mM*L&T(!aOda8_jAH@tUDCw43zF zOn2zZefcp~wC;M7-Ja&1Pq#p~PQ=1m6|4L@yYl0Eqof`6Zwzu zudf-EweU@xjkG6FRKn(Kya_F$Eu|l7LJQ>_4=wEOH;*tQYS*6Gs$%`@Ok`aKt50k2 zk*d|$4PBSqt8w3z@@WmPSZ_K@hV{mtrTXjRknKm0wnJWfIzVHzJHxfkPA@3TUyIu; zja2UH%`1s@DC*H|s>EcWXmjGz3Lj4DV3lQBdAR;e-m$pnyU0vo0>_15IXip{qqLa# z7Z5Zyhk|L2N8wVr{iN}%7Efvx!eaX|KMP#Zmw3=1WM<=F!w2i3`iiYy{v{|X;ps?k ze`^cBf4tsD1H+N+?d*9YsbI${?P}LNOWWvH!PPVuF$za;{4x)ljB95H#HTuaY2V=e z8z_C4BKsq@Fg;gacf6~Qg+k3`sZvWjxV94aIpvrLRL1-A)mhrdZ&qL4agT0^{K!&$ z^Gahl#kcY@HKHpwSPk`bAL>U4?Z$lg-ur;cz^-N;W00-BDZJycS}FaO9d7`=>;g5> z$cTZt_;LpJAYaI9p`z(2+qW&nZFIXt@y%X#GurTJM=dN32Zp8VH?Xu?+3~h_HpDl! z3XE)RSJ{B4u)UXN5>u>P9|no_zD{;4Q&K4RNY^wAg=Tq$=Sp@>PrvJn?zeE}sdFgh zV(t$q_8M<5t~?-G_<~n#rl2rAK`arqSkwK*AlxbZO4z+lX8O6Z7kcfNJqPaBbk1-w zN3eh12)1LrUAxlveTAB-bKd%U=#|{u0L76Z+bE^Tik8l3eGwW)Q=24cDUX(4@cY`! z!8U{*AEr8H&#zZ4U3|i)s%P=ITI<$|mzP?9B%-v9(^nNSX1lauoxKHtyoO|_byrojEkK}O3MzSA|^Sh}yWGyV^ zI~d8#B-OAR*2gPewZtE;)+_(yN;J>T>wf=Aih^kb=G;T)QmN{Zt+8877sDTSa|q4q zVd5y|Y!O7zS5-I}#DLD2E!}bJrqlE);4hgSTsAD3o?3jHvyacg+^ulKCdoei^t2JB za%xM@r-F6fb2Kqmwd(^@VirQ4z~L}h!(znDgJ%5rPQqnZUaGFHJ;(~Bv!Rx@rsmR_ z2LglhB$j%?9>Qr%4B1-7mr%Q8=I&R^%=*}M1TK!;~51=x$DwZ$LnLpn#J^w zNY!M%6~>6e#VT=9;|)7O=CZc!-*sOIi=>uwEV-K6UQQHo%Q(#gj@`Zq0WqI5lr?F2 z|19Tp`fOiCIQ@&wF{Z-DcWqx5;A)QzSWlV!*b;E;>5NDTKlj5x#U|;F*x9S6+w}6f znfvnc)Sk!0??~kLNe=~gY>#bsd~I~f*SyeIPEwWk4R=e0%em2XP=%lP>icL$hYjAl z)QYycZ!!np4_0s6Gt_BKSHRy45sf#X*SWvV`-k-&4&>_JuMq6lIvh6y*pTuoYywU| z{F|^TQR}Re?qKYGS9L{tTl7rsaC!cNEBbOJc82=eB`mG(d6o_dZQPGA{pdre`Pdob zH8*e#l!Jw&eo`+*akuM~QfNAQ;qR9_*U?8@7M!h-KgZ;kK2B$P%| zEOi6x?@Ty8L$AU4Y^b-U@ip^X=W8DpXH^jx=-SHOkJkAH2^<#bM~vfTtM*0 zmTA@z*3*=XWRhA2@YpUSYq9cJNly4Y1 z?qr5|u+z+JudB~^L?390aixA{j{6SnwodA=E%4N(>?;@?O9_!GPoBqnQN)(FIB4Iq z)R4NyE1YBDuQHg->9H)K*!*ON@X}6`5>u$@iWNEG^(QzV15XWJk{xb-n0jw%TCB>7 z;C+~x-RMPZ?jSOVpAQa)!MjRjKK$E9QpckPAz5O7W)^m;+c(}nwJz3s+eXci^U zdraC`U-P)=Uj0Yh{s25A4nZAgjo=Iw}{W+2q&FKP1)aO&dU!QS3&w3f# zmmo%4uO1hZf;k-Zd1f`Wj%)ZCbtBQ2MjV(4rDPGNT=CiXqI0@Mr{jys;)~Bx7E=&m z6;bHk5Y8BTJh-qR2$k|^3f8!PUXuC4!>pZm{PoLkoZY)W=}o_qB=ZWBz^dupBD3My znU{r{5baEWw@oN3Oz^%>O47kDbHCw*OWq)NNH44tOKNczRF+0?YbVyhChQ2pxH z8|TGwzdK#T*47VpN!{H{%Ivzgd+jBOXToLdRmO_X8?X4Mh4*ii{1^~DKaD%P#$QpA zM^cOKlgBzn6O04PmB`)I^@Fe7RtSCskKMdo4qCkpWgk%6V5y_?SCUB*eB{-Jw)WT{ zKa)F;v`K@iSGrbUjK=ot*J{s%_H~^nm6_3Sbu}v{?wnpVji(p_)acpaF1Wh*9+egD zw1Tx)sSL!2$#a9CP_~%d<`oa##l=LnOQdpN+_i=aB9mZ={CX`fup!mMphH-pfX$-Ifmg(I_UI5JN6`iQXSx5j}e(?b(F?(0D1 zI!Z=*Q(nhzK1ffri@Yu)6Igadl8kwNbM@P%4|9-ZnN!k_un;=5uUx6{34*VfYdo2c z4eUW|E&Mv$I_2IjszvRKZY(+N>rF=BIoJ2op$Uo)Oxf!c-0LPUDwuORBxa|+BzlWe z^3gb}EFk8A*q34|0lYSEPTmC6| z%uPMc=+nI<8t>I*29vz$((pX@lrjxb78?@FT#;IJ z#RtVX9dk|^6vtf{=lW9N%r1#_T9qZe(n?>rCD`(c}j!NZc@FO=xy^d+unE4H8J!TCW{M} z!#Zi|6jlpAe2^7wKpSR*Ivsc;d%J zmfM9yN_Ktd_FVb5RKBHMhUT+emy!_dxb^ia`+8DZpr}b;_yGlVcZ2w4)!{I(Y^`I; zryhuqZu~V`0k7qRt4x8Sts^h$R~a-F$Bk}GWKW3mNhN>0^X;{L9YKP?t)L$k3#K}; z9zF2P{U|2YPNs&J-PvLFEnj0j!x(Qz3gv{x6R*qE->rvj*{-jtJ(PH=_BE)!Py=ts z-(o#wF4~&-v0L?Yb2yp(-QYWpMn(tqe!$E7J2n<^jTk;-L|xsZbgBwIs_mi#`OR&H z2;&iB#$5KEb9i4?6uLs`Db8$&^fF2)gv7dX{;`;y9Q=f?{@sd7(f7T2+F*C&~p zNu^qT6zI^ky>Oh+3 z`|kcgZ^d!lzWqS(-EEnT$PwXC^`OkL3gJp+p_sh;%7mw)XfoOcv$x;Rz8~!EI!`+Gvf)1am^#xy>^}`t7c3MC|VvB4z95 z&WW=Rh^5}T5~2P5f?@JZNUtx)A`NAPDsyT4n6;MqersKLJ6(j@*U#sScas)*?UU}u zRE`RysOy@tK3SF?fWb$!w{?ZvZ+!D6&Hb!JRu0)>CAdZ)kltgTJupz`YRi%8(-GCL zNv`gBI{1C{)sJ4=Uoh)N4fyN4WfBUWenS_ChpUVZV4IbYXV11DgsOs5(N{ZNdgb?$ z*m^}-WEIP#=UpGum#6n%f1GN?^~i0}i{Y=WB}=fyx4t5S(nmh=WIDlU|v$f6?`qR)m8eIg8N1E zbKG?aBQ>I;42DM^`H-MlPrCt>Z<7X1bmQQF)B(j_1jZ^?6R$e}KnTBzm zK9{zXPQ6ImGc0+ejY^$3zEUJQQBf|XAM=2h9plm&HH9SCZbT}UaFV9+=UjCyv7*lC4x`Pk>efmt zf6Jk0OR}5gmKoT6*O$ftHZ(lCG#KZc!BuKQ{Ca9VKotLhc42AN<5Dcyx7w{35$!6* zJ*-AX#L2gp8W=7F4(sTe=Veb(o^p?I*(G=$#>hyqo}?|^t=`fRL76$3G=o86n^Y-P zkOaEm%_-QJC$Hl1Y9o!+A(ql?T1H#(xq0>1Tr*OFbLQHCc$Siq4+f;CRyslih2xM?OyT4?}z&C1jy%co+~<#{o?O34d(H` zdcIPEuDHU4FOlR&znk4>Y1>3WDhd0_VW_>=n=SJGv5ac_O{038AHf`hCx*>0^!DQf__=T2s06&6oJ``sL~r zH&<;{<>IFq=!Kdp&YG1K+k`Ir%@&&8x~@)_$8+6F$mV=PV=Ubu>$@L4>W6&Z=zDzZ z8yA6nUSafU6Oyc$JqXD&sT#(ZHio1u(_!jx&^*Ltxh8#3pl`ce;~4zydmG)sRx+bv z0*~sK$cyVh0dDb#aJi_I@_Y-nU5?edF{`j=7|Jygad5@>9L@DRvP&R=m=%zY{Wba# zS&)P2Xp*mCZg0!pfroAJP@J@V@Q9j_b6GLwCS)r;;$v{7b=*jMS(5vKb;6c~ z2SZI)TmfYaL%MXl%N6ibSbv>V9}n*=-}uIk_pCGsZD{J66WDHi-j(s|D|KIS^e@zc z=Y5{uQsFoiO6;rI!ay@R{57+ISQ-5)*B9F0CssiRTxUZ~(8l(@OMS{2O`vH!xGm#2 z=3}&AOHh~l?NZ}4GzbR=50#L>!R>Rxl^9=p{k{&)59?0CKm$dtem03Bqs1_ z-|&CH_(a|uzxmvR;XB@^1(*-tOkMKP-E|saik&K z6n9rY1YaIDQu(x^+_*=kTeZDb9g%minl@_58Pm7%foGW(ZTcQtM`qM!tMcXKq!e#7 z-ckY2^A6zzv98rL9?3~vWA-I(PkKj!a95lijqZd6{CJpY)TXWILTc04J`Po$IPLiy z9k;qL0COv}$JgEU8D-tOd#4y~5I-@8KqN@0oL&ZF-S73wf9EIg&=lhVg~aFahMYY@ zpTaw3xp8E5)v&vSR84pmtCvQkYw3#z>g!XzlW$8u&KBpJ2h~Zl_i0YU#KxZ=G(|a! zu(bu>h^eZqBBFr%j{#R&zb((LNLpLM=XPtlgmd@!YJZ z;X(NO9%-QfVOlA=3@iHNlrZM5saWFF8;`nu(!y>L%6{X&$b;(_Z9Y7`_e5B!Q@PK@ z37iz9Xz+d8`TRcNuIc$X@{86{AI_E$Vo*FVpczgLv-7o-xpV1aH5*rn=X=*-_GuZe z@a~jL1j1ta%p0K}!uP@++zBvxeG%=+1g(qdT_(M^!PnN;L>=BorJ zhz-AB_4OYPK~vz6wueGEn0i@a0t=I(d<^GX!9`MCCd8)b3=L55O<)I0%My&?gt ztE$HIB{Q2MVat@$118>=25mM6t_%#Tv|mUczgSVlN?K|D?h99Zq6IJIo%Jm-)fid= z{}6q_Z*w!I3b{OU*&3>C+^4dqv(rQ!Y(oeW?RnjId(&c`_=`R(CUhX|ik*VjIKRy$_r9$m=%PRns*U|cW%bAD&B5qQXMW^k}` zuPie&qaWlNkel;TSH7idD9(R}DzR9kX2uV@vPN%|_I9HQZIBx;T6p!j&_!1)O7yfa zaEeA#ddG#kYOXPnR!}B&gCyyK=g{eT(R*DEB?G;)S==9bAycJaw|aMEXboq2v~3nL zqVMI`hmqc}9O&z=4U45q?xnDZP-3}8_|c$6JJcDoA9BW1o9Ax34XYQAVNS^l0cg{+ zXN5zRxds~d11RGpaFB{q9OS0~wBDQa*qi+S&5^f$M==8J57@(RV! z{YTQXH=mV1ugO^uw9g+|(a1k{ewLGEX!0$UgK8kg99nrR^NUzeli5s6aC7SGFKbU( zr%aR#B3e_Q?pr%F-n@qHB~#(TDs1N|UPQ5R>T-C)XkC2mHnpZ#(-w6qj|g$Yp8Yq1 z=Suy=+!~LpPb*xa{F{%IbA_d8@5# zQ3UO{JVf^8bDw5uk%_Liy}GVg8qtGtLtfr@%_7}uTIr@wJ2niDu0Y-I4;}d0?JNt7 z5egI!&yL=@{C@ZC!{xy~@^aW0dz@F40|slMA=UTtIpQ+c+zaV)DGJ(e1YBL6DmM$y zjJC}?C2lY+VQ;#QufY1@DVDLz2c9^SY7=7akh+0X9aiUAgC)VOzU*a9r7r%14|u!k z@4LphqDb4esFYsNEuKzmT*F|`@eEs*9+PKqWRPL{D5W|t7#_YjO0@^)y?5E2^g?&w zyIbDO{3*}NnuS1~CU<<^(w+MnvHx{#yX{fcIIR$&wGhot1dVkgyXq+njvKpyLU;Hd zJj93-O$oxuZ*)wpW@2!H)L(hBrL!J-WzrP19_8*qiRq^#lyPlbxyrsxOjKy2DuKv3 zK|BtlTXBOVVcqqvf;W3<+{3*E-SLn035L(Q4Z#QVm*p_LKl@nICi%h*~>bWdCo)OtQk z!(~>ni+|_G+jbVB5jJN5)*dy|$J3g2j)KD7mgW?miUYgiA&ei$3L7^277asTkRR=g z^9`~MkErmMrkMhb!kNcqsn+jC3f!fC5));TD9#qix8-H&xy>2NGM|4Y-5sAb&UjSW{dh&mTzTpZD)bLp$1h}g9Fc{`18c197M$g8WD*&l21nik{}s}+Bw zxrl!%Kx~`lBd&-m%)3dC#v(k9S^lxQ`?+eSWF3$EwMW`GGxF`xF}M-I>=kE3>!v6@ zo4oUN2^?(VzC2`zt2+Birb0Wt?|Pwjp@)6p*(CyhqD#e6Tv}vx6;^NR3{(r(FCNT# z1@n>(vAa-Gbhk5I(JUq<-6hqKI<0z1-9}C4Q>rm@den~%rN{-Q2;~foaGLNt3YLXg zIdtP{LLV#Lm_G29XSkI_t!4!DT^Gw1Czc+i6{7}GKAbw327fU@ z_d|uwC1nbZ`BLAjx_O(ic><*Qp><_eE0;se!m&i0u0*_meNQUb-SyOUd$)#uPu(Bf z?tFhQ@SD;u6^o9ikjmNGIqljfKkOkgH7>&u{)XYqTD-R`Vv+?)t3A7f3rZfcSx2hN z#7oGtkwg!*&9*~qvn3Mc7w$&KWp(w;SkINwzsV!{JVgm#Ca)zep2l>3t$Rr;Z;;{O zo*$nFp20oab}whQ@~!uUMFtkoYpokQWkI#Um!lPOr##{MGic!*Iq$a?bmBWx3|6vi z_-d=Soamj?-8RDZ7_w_Wm_j@|-dwpb??`U@IB0jzG_0aHAR$1iKK7^gO-Eko3F=T=h4?f!%(mY`4OilajwR@?VB~!>vgIPOeLbmcK8}S z&+X|L_G?sEt_&?WNmadv4^Sy`F|(1|JbuHn{#Fdz>j{xc;h;@m;1KbGx1v&!-W={l z=JmlvH_D;>{y}y75C;oq^gfYKUjov*W*%gblqVYkJ0*G)-cQ#`XJnS_(5&-0`;W{; zh}&y<{JJIosr8`a}y8_iOmq~b=Vg$}qjo-eN z&b8%y`3476NU0#*M--MZdO%Rr!}9DOCQdh<%`Jcv3&8$ZT<~8n;NSujINV@y?k^dF zbrbOdIs7H#M4Y!fBIDu!_PQOBK@kr*kIE2-{Ex^u5PTR%WB|+FQ5mqs64;xEdL0LH zFX<5(6hYv5REF3djUwaVgdtAR9+4rAcc97u<~iVy;ZYekVm}_ry$~=raIE8~j0ce^ z5A`|@4&Y4JQ5gim`EuksVB_2|85iO_Y3U;}IAX{D5g9k) z)YuUj590VMstm$$yuJ_!f)3}%b({#wjw3QI#F@$?GUzcKfH#iZNaa0CFFlQdQ4sii{;)V=_2`;Nr-2+{gP8#si!H zJ#rl!jM(#wdN0sz$8;Qi+!sUOfKea27jnG5aL(g>1m`;LPvO9N+%Y_E#Bn^-@^M3s z+aNdWc$s;?i0$U6_wpPc1Ar1A(?3q|@pb`Z$NT{&m;-jS%$xvK;nDu!1altqVSwzI zEpP%VbhPa`!GNM3sRwZU@L1aehsckOjhsLe9JM##%l4} z;*>OsZg6rV&p7{*xjGvIM}nMj`T23#uRA)rf&e=~96dua4*>Tf-;0BE`6YQ^P!Ul{ z2?;ScH#e6!k0e-xOI%Wf2MpzcLqs7ELD0#U0Eb9at-Z{VK^Jhg#s%OMc16ZvTpZjG NDDIUj5=xS|{~t)6twR6+ literal 0 HcmV?d00001 diff --git a/html/about.html b/html/about.html index 6545342..d4a0a20 100644 --- a/html/about.html +++ b/html/about.html @@ -101,174 +101,7 @@ - + + diff --git a/html/accueil.html b/html/accueil.html index 5cce0c9..3940eb6 100644 --- a/html/accueil.html +++ b/html/accueil.html @@ -116,213 +116,7 @@ - + + diff --git a/html/contacts.html b/html/contacts.html index 7f2be51..3f44730 100644 --- a/html/contacts.html +++ b/html/contacts.html @@ -105,217 +105,8 @@ - + + + diff --git a/html/projet.html b/html/projet.html index 2ae10aa..0c629a1 100644 --- a/html/projet.html +++ b/html/projet.html @@ -87,181 +87,8 @@ - + + diff --git a/html/skills.html b/html/skills.html index 14dce99..e736d96 100644 --- a/html/skills.html +++ b/html/skills.html @@ -130,210 +130,8 @@ - + + diff --git a/js/common.js b/js/common.js new file mode 100644 index 0000000..1791c19 --- /dev/null +++ b/js/common.js @@ -0,0 +1,106 @@ +// Scroll to top functionality +const scrollToTop = document.getElementById("scroll-to-top"); + +const scrollFunction = () => { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + scrollToTop.style.display = "block"; + } else { + scrollToTop.style.display = "none"; + } +}; + +window.addEventListener('scroll', scrollFunction); + +scrollToTop.addEventListener('click', () => { + const scrollToTop = () => { + const c = document.documentElement.scrollTop || document.body.scrollTop; + if (c > 0) { + window.requestAnimationFrame(scrollToTop); + window.scrollTo(0, c - c / 8); + } + }; + scrollToTop(); +}); + +// Color theme management +const changeAccentColor = (color) => { + document.documentElement.style.setProperty('--accent-color', color); + localStorage.setItem('accentColor', color); + + const notification = document.createElement('div'); + notification.className = 'color-change-notification'; + document.body.appendChild(notification); + + setTimeout(() => { + notification.remove(); + }, 2000); +}; + +const applyStoredColor = () => { + const storedColor = localStorage.getItem('accentColor'); + if (storedColor) { + document.documentElement.style.setProperty('--accent-color', storedColor); + const radioButton = document.querySelector(`input[name="accent-color"][value="${storedColor}"]`); + if (radioButton) radioButton.checked = true; + } +}; + +// Settings and color picker initialization +document.addEventListener('DOMContentLoaded', () => { + applyStoredColor(); + + const settingsIcon = document.getElementById('settings-icon'); + const colorPicker = document.getElementById('color-picker'); + const languageSelector = document.getElementById('language-selector'); + + document.querySelectorAll('input[name="accent-color"]').forEach(radio => { + radio.addEventListener('change', () => changeAccentColor(radio.value)); + }); + + if (settingsIcon && colorPicker) { + settingsIcon.addEventListener('click', () => { + const isExpanded = colorPicker.style.display !== 'none'; + colorPicker.style.display = isExpanded ? 'none' : 'block'; + settingsIcon.setAttribute('aria-expanded', !isExpanded); + }); + + document.addEventListener('click', (e) => { + if (!colorPicker.contains(e.target) && !settingsIcon.contains(e.target)) { + colorPicker.style.display = 'none'; + settingsIcon.setAttribute('aria-expanded', 'false'); + } + }); + } + + // Language management + const savedLanguage = localStorage.getItem('language') || 'fr'; + if (languageSelector) { + languageSelector.value = savedLanguage; + updateLanguage(savedLanguage); + + languageSelector.addEventListener('change', (e) => { + const language = e.target.value; + localStorage.setItem('language', language); + updateLanguage(language); + }); + } +}); + +function updateLanguage(language) { + document.documentElement.lang = language; + const cvButton = document.getElementById('cv-download-btn'); + if (cvButton) { + cvButton.href = `../documents/Cv_${language}.pdf`; + } + + document.querySelectorAll('[data-translate]').forEach(element => { + const key = element.getAttribute('data-translate'); + if (translations[language] && translations[language][key]) { + if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') { + element.placeholder = translations[language][key]; + } else { + element.textContent = translations[language][key]; + } + } + }); +} \ No newline at end of file diff --git a/js/contact.js b/js/contact.js new file mode 100644 index 0000000..b1a5cbc --- /dev/null +++ b/js/contact.js @@ -0,0 +1,46 @@ +document.addEventListener('DOMContentLoaded', function() { + // Character counter management + const messageTextarea = document.getElementById('message'); + const charCount = document.getElementById('charCount'); + + if (messageTextarea && charCount) { + messageTextarea.addEventListener('input', function() { + charCount.textContent = this.value.length; + }); + } + + // Form validation and submission via Email.js + const contactForm = document.getElementById('contactForm'); + + if (contactForm) { + contactForm.addEventListener('submit', function(e) { + e.preventDefault(); + + if (this.checkValidity()) { + const submitBtn = this.querySelector('button[type="submit"]'); + submitBtn.classList.add('sending'); + + emailjs.init("pBMgXiG4tpfVkCxhY"); + + const templateParams = { + name: document.getElementById('name').value, + email: document.getElementById('email').value, + subject: document.getElementById('subject').value, + message: document.getElementById('message').value + }; + + emailjs.send('service_s1wv65t', 'template_391zlnl', templateParams) + .then(function(response) { + alert('Message sent successfully!'); + contactForm.reset(); + charCount.textContent = '0'; + submitBtn.classList.remove('sending'); + }, function(error) { + alert('An error occurred. Please try again.'); + submitBtn.classList.remove('sending'); + console.error('Error:', error); + }); + } + }); + } +}); \ No newline at end of file diff --git a/js/translations.js b/js/translations.js new file mode 100644 index 0000000..a0ab4d5 --- /dev/null +++ b/js/translations.js @@ -0,0 +1,343 @@ +const translations = { + // French translations + fr: { + // Navigation + "nav-home": "Accueil", + "nav-about": "À propos", + "nav-projects": "Projets", + "nav-skills": "Compétences", + "nav-contact": "Contact", + + // Theme colors + "accent-color": "Couleur d'accentuation :", + "default": "Défaut", + "red": "Rouge", + "orange": "Orange", + "green": "Vert", + "pink": "Rose", + + // Hero section + "hero-subtitle": "Développeur Web & Étudiant en BUT Informatique", + "view-projects": "Voir mes projets", + "contact-me": "Me contacter", + + // Services section + "services-title": "Ce que je peux faire pour vous", + "web-dev-title": "Développement Web", + "web-dev-desc": "Création de sites web responsifs et modernes utilisant les dernières technologies.", + "app-dev-title": "Applications", + "app-dev-desc": "Développement d'applications performantes en C, C++ et autres langages.", + "ui-design-title": "UI/UX Design", + "ui-design-desc": "Conception d'interfaces utilisateur intuitives et esthétiques.", + + // Expertise section + "technical-expertise": "Expertise Technique", + "years-experience": "Année d'expérience en programmation", + "completed-projects": "Projets réalisés", + "technologies-mastered": "Technologies maîtrisées", + "view-all-skills": "Voir toutes mes compétences", + "lets-work": "Travaillons ensemble", + "project-idea": "Vous avez un projet en tête ? Je serais ravi d'en discuter !", + "download-cv": "Télécharger mon CV", + + // Contact form + "contact-title": "Contactez-moi", + "contact-desc": "N'hésitez pas à me contacter pour toute question ou collaboration. Je serai ravi d'échanger avec vous !", + "name": "Nom", + "name-placeholder": "Votre nom complet", + "email-placeholder": "exemple@email.com", + "subject": "Sujet", + "select-subject": "Sélectionnez un sujet", + "collaboration": "Proposition de collaboration", + "general-question": "Question générale", + "project-discussion": "Discussion de projet", + "other": "Autre", + "message": "Message", + "message-placeholder": "Votre message ici (10-1000 caractères)", + "privacy-policy": "J'accepte que mes données soient utilisées pour être recontacté(e)", + "send": "Envoyer", + + // Footer + "follow-me": "Suivez-moi :", + "copyright": "© 2024 Sasha Lorenc. Tous droits réservés.", + "rights-reserved": "Tous droits réservés.", + + // About page + "about-title": "À propos de moi", + "about-description": "Je m'appelle Sasha Lorenc, développeur passionné par l'informatique et le design. Je cherche constamment à apprendre et à m'améliorer. En tant qu'étudiant en Première année de BUT Informatique passionné par le développement web, je maîtrise les langages HTML, CSS, me permettant la création d'applications web. J'apprécie également le développement d'applications bureau avec des langages tels que le C,C++. Mon adaptabilité me permet de relever les défis techniques en combinant mes compétences techniques, incluant des connaissances en frameworks, je suis capable de transformer des concepts en applications web de manière professionnelle. Pour la rentrée 2025, je suis à la recherche d'une alternance dans le domaine du développement web ou autre.", + "education-title": "Mon parcours", + "education-description": "Je suis actuellement étudiant en BUT Informatique à l'IUT de Clermont-Ferrand. Avant cela, j'ai obtenu mon baccalauréat avec les spécialités NSI (Numérique et Sciences Informatiques) et Mathématiques au lycée Albert Londres à Cusset. Durant mon parcours lycéen, j'ai eu l'opportunité exceptionnelle de participer à un projet innovant en partenariat avec Samsung dans le cadre du programme \"Solve for Tomorrow\". Notre équipe a fait partie des 5 groupes sélectionnés parmi plus d'un millier de groupes en France pour présenter notre projet devant un jury à Paris, une expérience enrichissante qui a renforcé mes compétences en gestion de projet ainsi qu'en expression orale.", + "motivation-title": "Ce qui me motive", + "motivation-description": "J'aime créer des interfaces intuitives et esthétiques, et je cherche à rendre chaque projet innovant et unique pour permettre aux sites que je crée d'être facilement identifiables par leurs utilisateurs.", + "contact-btn": "Me contacter", + "scroll-top": "↑", + + // Skills page + "skills-title": "Mes Compétences", + "technical-skills": "Compétences Techniques", + "general-skills": "Compétences Générales", + "html-css": "HTML & CSS", + "javascript": "JavaScript", + "php-mysql": "PHP & MySQL", + "react-nodejs": "React & Node.js", + "frameworks-tools": "Frameworks & Outils", + "project-management": "Gestion de projet", + "communication": "Communication", + "problem-solving": "Résolution de problèmes", + "adaptability": "Adaptabilité", + "creativity": "Créativité", + "organization": "Organisation", + "analysis": "Esprit d'analyse", + + // Skill descriptions + "project-management-desc": "Leadership naturel avec expérience dans la coordination d'équipes. Excellente capacité à établir des plannings réalistes et à gérer les ressources efficacement. Compétences avérées en gestion des risques et résolution de conflits.", + "communication-desc": "Communication claire et persuasive en français et en anglais. Capacité à vulgariser des concepts techniques complexes. Excellente aptitude à la rédaction de documentation technique et rapports professionnels. Fort esprit d'équipe avec capacité à fédérer autour d'objectifs communs.", + "problem-solving-desc": "Capacité à décomposer des problèmes complexes en éléments gérables. Maîtrise des techniques de debugging et d'optimisation. Expérience en analyse de données pour la prise de décision. Capacité à anticiper les problèmes potentiels et à mettre en place des solutions préventives.", + "adaptability-desc": "Excellente capacité d'adaptation aux changements technologiques et organisationnels. Apprentissage rapide des nouveaux outils et frameworks.Capacité à travailler efficacement dans des environnements multiculturels. Résilience face aux situations stressantes et aux deadlines serrées.", + "creativity-desc": "Approche innovante dans la résolution de problèmes techniques. Capacité à concevoir des solutions efficaces. Expérience en design thinking et brainstorming créatif. Aptitude à sortir des sentiers battus pour proposer des solutions originales. Passion pour l'innovation technologique et l'amélioration continue.", + "organization-desc": "Excellence dans la gestion du temps et des priorités. Maîtrise des outils de gestion de projet et de productivité. Capacité à gérer plusieurs projets simultanément. Rigueur dans le suivi des tâches et le respect des délais.", + "analysis-desc": "Capacité à analyser des situations complexes et à en tirer des conclusions pertinentes. Compétences en analyse de données et en prise de décision basée sur les faits. Approche critique et objective des problèmes.", + + // Projects page + "page-title": "Projets - Portfolio de Sasha Lorenc", + "projects-title": "Mes Projets", + "project1-title": "Projet 1 : Jeux vidéo", + "project1-desc": "Un jeux vidéo médieval en tour par tour basé sur le pierre feuille cisceau.", + "project2-title": "Projet 2 : Application de Gestion", + "project2-desc": "Une application pour gérer stages au sein du département informatique de l'IUT de Clermont-Ferrand.", + "project3-title": "Projet 3 : Portfolio Interactif", + "project3-desc": "Un portfolio interactif pour présenter mes compétences et projets de manière visuelle.", + "project4-title": "Projet 4 : TaskShade", + "project4-desc": "Une To Do List en ligne permettant d'organiser vos tâches par importance et date d'échéance.", + "view-project": "Voir le projet", + "technologies": "Technologies :" + }, + + // English translations + en: { + // Navigation + "nav-home": "Home", + "nav-about": "About", + "nav-projects": "Projects", + "nav-skills": "Skills", + "nav-contact": "Contact", + + // Theme colors + "accent-color": "Accent color:", + "default": "Default", + "red": "Red", + "orange": "Orange", + "green": "Green", + "pink": "Pink", + + // Hero section + "hero-subtitle": "Web Developer & Computer Science Student", + "view-projects": "View my projects", + "contact-me": "Contact me", + + // Services section + "services-title": "What I can do for you", + "web-dev-title": "Web Development", + "web-dev-desc": "Creation of responsive and modern websites using the latest technologies.", + "app-dev-title": "Applications", + "app-dev-desc": "Development of high-performance applications in C, C++ and other languages.", + "ui-design-title": "UI/UX Design", + "ui-design-desc": "Design of intuitive and aesthetic user interfaces.", + + // Expertise section + "technical-expertise": "Technical Expertise", + "years-experience": "Year of programming experience", + "completed-projects": "Completed projects", + "technologies-mastered": "Technologies mastered", + "view-all-skills": "View all my skills", + "lets-work": "Let's work together", + "project-idea": "Have a project in mind? I'd love to discuss it!", + "download-cv": "Download my CV", + + // Contact form + "contact-title": "Contact Me", + "contact-desc": "Don't hesitate to contact me for any questions or collaboration. I would be happy to discuss with you!", + "name": "Name", + "name-placeholder": "Your full name", + "email-placeholder": "example@email.com", + "subject": "Subject", + "select-subject": "Select a subject", + "collaboration": "Collaboration proposal", + "general-question": "General question", + "project-discussion": "Project discussion", + "other": "Other", + "message": "Message", + "message-placeholder": "Your message here (10-1000 characters)", + "privacy-policy": "I agree that my data will be used to be contacted", + "send": "Send", + + // Footer + "follow-me": "Follow me:", + "copyright": "© 2024 Sasha Lorenc. All rights reserved.", + "rights-reserved": "All rights reserved.", + + // About page + "about-title": "About Me", + "about-description": "My name is Sasha Lorenc, a developer passionate about computer science and design. I constantly seek to learn and improve. As a first-year student in Computer Science passionate about web development, I master HTML and CSS languages, allowing me to create web applications. I also enjoy developing desktop applications using languages such as C,C++. My adaptability allows me to meet technical challenges by combining my technical skills, including knowledge of frameworks, I am able to transform concepts into web applications in a professional manner. For the 2025 academic year, I am looking for an apprenticeship in web development or related fields.", + "education-title": "My Journey", + "education-description": "I am currently a student in Computer Science at the IUT of Clermont-Ferrand. Before that, I obtained my baccalaureate with specializations in NSI (Digital and Computer Sciences) and Mathematics at Albert Londres High School in Cusset. During my high school years, I had the exceptional opportunity to participate in an innovative project in partnership with Samsung as part of the \"Solve for Tomorrow\" program. Our team was among the 5 groups selected from over a thousand groups in France to present our project to a jury in Paris, an enriching experience that strengthened my project management and public speaking skills.", + "motivation-title": "What Drives Me", + "motivation-description": "I love creating intuitive and aesthetic interfaces, and I seek to make each project innovative and unique to allow the sites I create to be easily identifiable by their users.", + "contact-btn": "Contact Me", + "scroll-top": "↑", + + // Skills page + "skills-title": "My Skills", + "technical-skills": "Technical Skills", + "general-skills": "General Skills", + "html-css": "HTML & CSS", + "javascript": "JavaScript", + "php-mysql": "PHP & MySQL", + "react-nodejs": "React & Node.js", + "frameworks-tools": "Frameworks & Tools", + "project-management": "Project Management", + "communication": "Communication", + "problem-solving": "Problem Solving", + "adaptability": "Adaptability", + "creativity": "Creativity", + "organization": "Organization", + "analysis": "Analysis", + + // Skill descriptions + "project-management-desc": "Natural leadership with team coordination experience. Excellent ability to establish realistic schedules and efficiently manage resources. Proven skills in risk management and conflict resolution.", + "communication-desc": "Clear and persuasive communication in both French and English. Ability to explain complex technical concepts. Excellent technical documentation and professional report writing skills. Strong team spirit with ability to unite around common goals.", + "problem-solving-desc": "Ability to break down complex problems into manageable elements. Mastery of debugging and optimization techniques. Experience in data analysis for decision making. Ability to anticipate potential problems and implement preventive solutions.", + "adaptability-desc": "Excellent adaptability to technological and organizational changes. Quick learning of new tools and frameworks. Ability to work effectively in multicultural environments. Resilience in stressful situations and tight deadlines.", + "creativity-desc": "Innovative approach to technical problem solving. Ability to design effective solutions. Experience in design thinking and creative brainstorming. Aptitude for thinking outside the box to propose original solutions. Passion for technological innovation and continuous improvement.", + "organization-desc": "Excellence in time and priority management. Mastery of project management and productivity tools. Ability to manage multiple projects simultaneously. Rigorous in task tracking and meeting deadlines.", + "analysis-desc": "Ability to analyze complex situations and draw relevant conclusions. Skills in data analysis and fact-based decision making. Critical and objective approach to problems.", + + // Projects page + "page-title": "Projects - Sasha Lorenc's Portfolio", + "projects-title": "My Projects", + "project1-title": "Project 1: Video Game", + "project1-desc": "A medieval turn-based video game based on rock paper scissors.", + "project2-title": "Project 2: Management Application", + "project2-desc": "An application to manage internships within the IT department of the IUT of Clermont-Ferrand.", + "project3-title": "Project 3: Interactive Portfolio", + "project3-desc": "An interactive portfolio to showcase my skills and projects visually.", + "project4-title": "Project 4: TaskShade", + "project4-desc": "An online To Do List allowing you to organize your tasks by importance and due date.", + "view-project": "View project", + "technologies": "Technologies:" + }, + + // Spanish translations + esp: { + // Navigation + "nav-home": "Inicio", + "nav-about": "Acerca de", + "nav-projects": "Proyectos", + "nav-skills": "Habilidades", + "nav-contact": "Contacto", + + // Theme colors + "accent-color": "Color de acento:", + "default": "Predeterminado", + "red": "Rojo", + "orange": "Naranja", + "green": "Verde", + "pink": "Rosa", + + // Hero section + "hero-subtitle": "Desarrollador Web & Estudiante de Informática en BUT", + "view-projects": "Ver mis proyectos", + "contact-me": "Contactame", + + // Services section + "services-title": "Lo que puedo hacer para ti", + "web-dev-title": "Desarrollo Web", + "web-dev-desc": "Creación de sitios web responsivos y modernos utilizando las últimas tecnologías.", + "app-dev-title": "Aplicaciones", + "app-dev-desc": "Desarrollo de aplicaciones de alto rendimiento en C, C++ y otros lenguajes.", + "ui-design-title": "Diseño UI/UX", + "ui-design-desc": "Diseño de interfaces de usuario intuitivas y estéticas.", + + // Expertise section + "technical-expertise": "Habilidades técnicas", + "years-experience": "Año de experiencia en programación", + "completed-projects": "Proyectos completados", + "technologies-mastered": "Tecnologías dominadas", + "view-all-skills": "Ver todas mis habilidades", + "lets-work": "Trabajemos juntos", + "project-idea": "¿Tienes un proyecto en mente? ¡Estoy encantado de discutirlo!", + "download-cv": "Descargar mi CV", + + // Contact form + "contact-title": "Contactame", + "contact-desc": "No dudes en contactarme para cualquier pregunta o colaboración. ¡Estoy feliz de discutir contigo!", + "name": "Nombre", + "name-placeholder": "Tu nombre completo", + "email-placeholder": "ejemplo@email.com", + "subject": "Asunto", + "select-subject": "Selecciona un asunto", + "collaboration": "Propuesta de colaboración", + "general-question": "Pregunta general", + "project-discussion": "Discusión de proyecto", + "other": "Otro", + "message": "Mensaje", + "message-placeholder": "Tu mensaje aquí (10-1000 caracteres)", + "privacy-policy": "Acepto que mis datos se utilicen para ser contactado(a)", + "send": "Enviar", + + // Footer + "follow-me": "Sígueme:", + "copyright": "© 2024 Sasha Lorenc. Todos los derechos reservados.", + "rights-reserved": "Todos los derechos reservados.", + + // About page + "about-title": "Acerca de mí", + "about-description": "Mi nombre es Sasha Lorenc, desarrollador apasionado por la informática y el diseño. Siempre busco aprender y mejorar. Como estudiante de primer año en Informática, estoy apasionado por el desarrollo web y domino los lenguajes HTML y CSS, lo que me permite crear aplicaciones web. También disfruto desarrollando aplicaciones de escritorio utilizando lenguajes como C,C++. Mi adaptabilidad me permite enfrentar desafíos técnicos combinando mis habilidades técnicas, incluyendo conocimientos en frameworks, lo que me permite transformar conceptos en aplicaciones web de manera profesional. Para el año académico 2025, estoy buscando una pasantía en desarrollo web o campos relacionados.", + "education-title": "Mi viaje", + "education-description": "Actualmente soy estudiante de Informática en el IUT de Clermont-Ferrand. Antes de eso, obtuve mi baccalauréat con las especialidades NSI (Ciencias y Tecnologías de la Información) y Matemáticas en el instituto Albert Londres de Cusset. Durante mi tiempo en el instituto, tuve la oportunidad excepcional de participar en un proyecto innovador en colaboración con Samsung como parte del programa \"Solve for Tomorrow\". Nuestro equipo fue uno de los 5 seleccionados entre más de mil equipos en Francia para presentar nuestro proyecto ante un jurado en París, una experiencia enriquecedora que fortaleció mis habilidades en gestión de proyectos y oratoria.", + "motivation-title": "Qué me motiva", + "motivation-description": "Me encanta crear interfaces intuitivas y estéticas, y busco hacer cada proyecto innovador y único para permitir que los sitios que creo sean fácilmente identificables por sus usuarios.", + "contact-btn": "Contactame", + "scroll-top": "↑", + + // Skills page + "skills-title": "Mis Habilidades", + "technical-skills": "Habilidades Técnicas", + "general-skills": "Habilidades Generales", + "html-css": "HTML & CSS", + "javascript": "JavaScript", + "php-mysql": "PHP & MySQL", + "react-nodejs": "React & Node.js", + "frameworks-tools": "Frameworks & Herramientas", + "project-management": "Gestión de proyectos", + "communication": "Comunicación", + "problem-solving": "Resolución de problemas", + "adaptability": "Adaptabilidad", + "creativity": "Creatividad", + "organization": "Organización", + "analysis": "Espíritu analítico", + + // Skill descriptions + "project-management-desc": "Liderazgo natural con experiencia en la coordinación de equipos. Excelente capacidad para establecer programas realistas y gestionar recursos de manera eficiente. Habilidades probadas en la gestión de riesgos y resolución de conflictos.", + "communication-desc": "Comunicación clara y persuasiva en ambos idiomas. Capacidad para explicar conceptos técnicos complejos. Excelentes habilidades en la redacción de documentación técnica y reportes profesionales. Espíritu de equipo fuerte con capacidad para unirse a objetivos comunes.", + "problem-solving-desc": "Capacidad para descomponer problemas complejos en elementos manejables. Maestría en técnicas de depuración y optimización. Experiencia en análisis de datos para la toma de decisiones. Capacidad para anticipar problemas potenciales y implementar soluciones preventivas.", + "adaptability-desc": "Excelente capacidad de adaptación a cambios tecnológicos y organizativos. Aprendizaje rápido de nuevas herramientas y frameworks. Capacidad para trabajar efectivamente en entornos multicultural", + "creativity-desc": "Enfoque innovador en la resolución de problemas técnicos. Capacidad para diseñar soluciones efectivas. Experiencia en pensamiento de diseño y brainstorming creativo. Aptitud para salir de los caminos convencionales para proponer soluciones originales. Pasión por la innovación tecnológica y la mejora continua.", + "organization-desc": "Excelencia en la gestión del tiempo y las prioridades. Maestría en herramientas de gestión de proyectos y productividad. Capacidad para administrar varios proyectos simultáneamente. Rigor en el seguimiento de tareas y cumplimiento de plazos.", + "analysis-desc": "Capacidad para analizar situaciones complejas y extraer conclusiones relevantes. Habilidades en análisis de datos y toma de decisiones basadas en hechos. Enfoque crítico y objetivo en los problemas.", + + // Projects page + "page-title": "Proyectos - Portafolio de Sasha Lorenc", + "projects-title": "Mis Proyectos", + "project1-title": "Proyecto 1: Juego de Video", + "project1-desc": "Un juego de video medieval en turnos basado en piedra, papel y tijera.", + "project2-title": "Proyecto 2: Aplicación de Gestión", + "project2-desc": "Una aplicación para gestionar pasantías en el departamento de informática del IUT de Clermont-Ferrand.", + "project3-title": "Proyecto 3: Portafolio Interactivo", + "project3-desc": "Un portafolio interactivo para mostrar mis habilidades y proyectos de manera visual.", + "project4-title": "Proyecto 4: TaskShade", + "project4-desc": "Una lista de tareas en línea para organizar tus tareas por importancia y fecha de vencimiento.", + "view-project": "Ver proyecto", + "technologies": "Tecnologías:" + } +}; \ No newline at end of file