8F(5
zp>)G%2oLlNwI5~9*(5jlM&+kYxAMjol%!HAn_G&_{yF(#|Z<;mr^1ai6?+X1>}p&ip)x
z%1CtnBt>(qFX$6+TD>=4;EDlbO1z7`W{YuK;-M^Pe^PdO1Ee{YzGkXcAVv
z-iz+c&Lh|)?^&NlV-U%51e)^3vjV``Rfij9#|&4&G`em5`15-pL0-JHn}Gw5|K
zJo>*4QW%?1zvg6l)6zKA`o)&s&xPaJ@g_D3WN^B&Cf=yKL)pHB^5=K7Uwb!t;%RxG
z-}flQR2o>~*LPm8n@F`0TvoJgu$^^REbOzT^{VxWS57p=-WO5Pp<;+(
zI)qS=L`byQch~r^rl;@iy~?AUEg3lS;+ng#O<9;uZ9Mjrp`r!6AxDUA+vI|hHV1?)T^Go9fRr5teqKS$)p
z`bpZy<4ty{qFQY-rrIvb$}N`T(b3ti8pmnE47j)2D`q9c?2gz<3#bFwx`@qJ`P4}!~I;vGl
z7ng3p=rD%QKG1;v{e+GntC5JDUYHUq`zCiOpia%ha3TxL16Gu4i|R
z(=%j>e5Mgqa*9IY4bn$+k9-O+Z%)LIQ~!{A??}YySI4>NUYsOgM#rRi`zW{FIuMVV
z0a{^vxe__aRkO}F
zRW8Z$TW`6lt#V0%N`r;#6+(cz)JwFEC_=wzyf`lZy-lVv8XGe&)hANkAH_Iq|6OCa4M>bLZgboQT9
z&d$v9s(N}=)5?b{D-Ks2c^z9Yyx&Yk^Kl1_?fqKdf`dml`k^9Ne8Gz-kd{_f`77Vg
zz|J<3K~-7w!d~VOSsFj_5SJ~5k0;SSv6E%qY)Oa?1>f8!=zRoFYJheN_6%OByW9Qk
zrL-$Ad>a1va;83XBvMafZ(->~OZD}uZwDQfxdhEIWn8I`fl+7|FM}4U2eaS2kTH9=
zU72noi{CH0s^0^(?oH=ky;-=K&FXLcZIC65A@i69CD+rtRCcW8rA4$uN9z(w^nc{v
z{&3)~^jO0}%M(1N%&q3JiJ{}2o7pv$R`iFdTNcYluFnbld>tmBpCbO+$G~i+Z6Y9i
zYVXk#DK1)>m-}k|91~!*@$=#jjm$ZTqq~@6FcQ(rn~v`qlrwwz_NpH3M~}<68)r!M
zYNI!lCsUd`nTT>b*zL62X%}Pp(dPvo#3px}74+O|@E>#=kHm%i`YDu-ijfPAWck|pMh(`I=29>ww
z-e{B`cKU?5{<_Vt-rf;_Wpyb=GY)I()eTLC2zH|g``n}JbNzU+
zi6F`J#Ia!%MN~A;$uMX>03+~S3ADGtl!V+eLVpUaIPW$Y?Twm};8}97SQ6++8OT)b
z^$0qsTnZW6hXQ2tZOV_czjSwO>s34EN>Wkj8*h8{jt$K^U4na^S?0Tpc#2vIbVTn%
z{kc%IjBrCO?b530FGwxgp_nFZo-*usHIYSjbXFO!M+b%%v1P<(45A
zmS>#9MSXd+D2uUs(0oRtC`!PoqzCOi@kr}aNL`KPqwkn1W39V&+R8^`=4!7zWSN!8
zZYuc0VX55{#aY*Lr(~K@%%kXy1;HoKj;A5LFXw4tS=W->1$;{?{!&j^VJz;K<$Vd=
zr+345mRfr*Bl6J739df_J~*_TaFmmr9J9d4$HyG3)3>Z0fbgW@jem0&NB5Y-#44LA
zrYk@9>vzU)M9&$w;29~jc$ei6cF$m)C4sT|r4V&QG$*p#_Ivb?Li3OJb#)(G4V-^^
zv5!sp7WG!Gx;{L{QaNlqh_J6eF#5c>j-o*ADZ!yu@3QcubDkE9JoieHNxrRxPih@s
zdZJ}>8m($7`H7WFkmewT7A-!GiVN*()HO!Oa
z>L2FD*)_jNY`16)EAW2%EW&wvAt+6sYc33{cldU~lfUiChy8wAx6{pI?D4N6rm+vb
z4o-EwEM=xA);v$ML;2!g;)d|7v;4TsqjHi9OyB;LUKs~7i|oEv-C*%m
z1~X2lKfJ&YGMDN->1-6|Xck^6?NEspkZgT&$BBl|TmVG*{Iio054RntG)w0|mGEyv
zrd^9oR!FWsheeOct+Gl62ZU+TF1#
z3tF`&vfJd2r76pf2O8H@y7|L)c6qwmb5`byeZf!(rc+5!bf0ASVx3
zyOJ^|(Gv=B2E8AB{-BQ_8?_QIi6%;Mziv2qQGXy*MTd~%BbK)NQBgyGAT=>tC6|u4
z-Bz2;vha97SkL(F2zM%mkMVE!L#rnEBR8F1R8mCiSm1uUUT*Hdg_@VA4?jo0FHj!R
zZcL%Em~uLzs?zkz7j3VH@%1_|qSIfIsQgYl%A+E@-;nfu7L3&?-4hgpQS3Xpu6n*1
zMOT(~iBK;E*J>&2D|u9pDR}%a??Hw36Q#NWnM+>l|L**e$7an_g6jT-rU4b3{1=U(
z9e>8{PyQY_)068V$DNcpIh(Xs9_8vV#XrjK|Foqu+qKGI2l0XEUR^ZioEa5#Insw>9v-WIy5KP|d%Tm(w;t~7tBk1?kv
zW<7TeT*#S8zwf6Z;%J)xa9Cmd%UJ})XEwyxl{fV*$DI#>8k#&6gNE*sVx?lX<;%sS
zv~Gi*;Ed=*Y`4B)kFx)$a~s}m7j3jcrYYjx=S7-^#TD4iSrzo6WY3ryg(&B~sgrS2;96h){=GT4>ii)2
zuOB{$*?X3fYmz#R+d-PTVOv@+n|Ozhk%Hs^dqvIkme}}(Lw!G0owTHCiX%?f=8Ksa
zX6;~-s$cwM*NH`X->#GK2a4cRn^wlmtvmqIeoTM9_0DSwsU%-=W%{
zxY3VHv}S#=4<%Aty_#};T*R*?bwkqb&Ds(?Nkrys%1&lySJzUxXhW8AM_TGKG;VCoo*B;@!}usRmRB|2HG+b
zY)&sDqWnv|JdkAt-#;q*5zO)@pX5;rn~GLM&*}D|s=PEh?xs{|yS`KjdxO~>`#{E1
zWRU9gK{az3g!@2A%|5X0b?)_c>w^bI&hEWD>qufE`L?^a7#f^%(J}}xiI`y?dWvj+
zL5+Joj7pkkoH5DA>FJhB(z3Itiys?2$Fi-^{#c1S-?ZS1FZ$6((;ox4rvtWt9XcvO
zU8M)t>eC$-gP$j!Py9KDy4PRm>R+N&k5BWER!?h*?h|42bs`u=5UymFJ-#6}G4`5{
z;QaK@#Hf~(?MRz+Setj5xJalw=~mY8=_A_jGap=ecmMmZlV7&pJi%U^80*(-mE&aU
zPOiNOMB^}z8cL**5tDnY4d$H&(T{7;F(Y`5h6k@gwN$>I9L0#^(|XV!hIhVhQ+O_T
zW#}8q?MlfcGILG~=;+T63UvKxnr+ssw!iZE-g5WSlVJ_N7N$MpbVmkaNDn0$(##zes*)D3=sH
zVORDgxUnmlZTA&UI@Za)o1hkb%Ttv%UH1#SkbfybpNl{5A!0`_@+;{lyYGxxV@st*
z0>7PY@PML_P!$NHswd#o?{nzH^|%O)k7_Cfb&}M`^JZywyt8)un6aQKYO1;I&zX5P
zx;{M_-n7H2SDpReHAeiz>6v!3rEqX2+}czXbiJ=q1Y+KY=n`krkaR@;rfjK93#+Bb+peu84ymY)F+53QDE~4iyZNAl
z`^B)|zFXc_eNksJ`iwA+7|TaZmgqLkRlA`w)0EGI-a0Q8PPEm}dF^sRW^$O)=++w#
zdt2e^!$fzl{b}E)1^NSrl&%d#aTh)8&!XEhsLxI_Hy7(3yo?ZL-tR<|pexSP;l=Vh
za-VXQcr~sxTmn+4Oz9DDZu$uogQ^;ZS!__&XWmpPgECfHpZ)q4BCZce+83RR{)l^t
z4Tw*CU99vrbGW2p;fs;JeVjxYvt;?^8Ev-SGoRoDzS|hh##v7Z*$<~!1OI5&%?Y*V
z)HDwn^cn0Nsu9urQ;U@&1+snV!qz4qU*zSdUTb6=xmw9rqCNcM
zxnWOEV@|R~4&iIX$42YE+|U`(lV=IE4<_G+s_2LK`Mnq43!IbT^Tx!v@fw^12U~q$
z%kJ;hCKXl@FLjHnX?ABls_A@2^1RX0WkgI%gx?(MK`mA7><(OIyLU~U9KMA~`g#^i
zn5o(Edb9Z0LgQ)g*pPsF3d?F~Vap?(m$K_QZi_XraF@?B#}JjLu!>?`2K#IR2Li_%
z&gh!RYqe4G%pNJ&l@~2#+kI!<5c9NWoL-ywn_4=Rw-EBYg)bGGM`a1ox
zB5H@~IHyF{SN7fplL_GLfdu$pt?D#s!C*2SIYuK@<(W@+AhrNQV(1SC^V3T;i+$)~
z3|=k5bcsqBHQ^n%DC>J?Zc@_DZ%&x})CN3-D4l^QY0i`Iil{6zXF40oa$c;_>T}h3
z(tuQdL%Q!=H2)p#jch$3;hS@>
z*Fg*0PCV3L^dYRbNof8pliv4uV_Jc40^;qDRe(UI`yr)lz0xDEz~#s0gdZ+278wge=amiXMh37(g4Lu*x92+eB|caj9S`l
zInZEmA#52zMTq=qa~D{D=Eq%VXBQNsd4Ugu^YCLNW=m>ioKEZUn+N`g(35KWl&6t_
zcV=yrK3TF|sUM?dWeG0tI+vRAMg2`r#Vgm?x>-g+k^SNV!m=z3gaxM5nxlMRL_=sA
zJQ^i+cBd(}u!!oOMqW4e%1)LaW@Ax4FQTIse)K87P}PER(l)T}v}#@R-CaE*o^B
zQd`8;Enb8=)c-XKqx>UZx*$Jux5=2vl=$T2;$;Bm9Bs_kGb)kq{H{fPzV+nf?-Cp%
zPitaZmg4t9zdIBmqLp_B_v-Z-Dvw?8?IxU)$*otzu_L?WCKt5H!KjcZY{
zi&LC7XcnHHOS>|B)tyBi`J^Y)_J=#6?vi@!vv2WFz;Q73ZO{Bu^#*m~wdQO-T&p=W
z<2au9v!zalHpjeY_YuMKb%k2{9VQOUs~L!DUFxb~tm*dDs*;F*|8l48o^e#ZR5_TK
zeiZpAqjM@~uq<2J(J^;MhLI|vk@-W$^)|)#U-*6H)V^#>#J)8D`YX!o3m8t)DP%MY
z8*gV-+S__M?#{Y^Pq>pyaBGPgDPq2zR(T<|^=0DFfKu4G88+o1-TIQow@Z!J4M93o
zyrrR9b@r;L!s#u!yPbPvAH*^F@hL5R>#fW=lq5aTFjeh(y%p;(Y3n%WVEHmenebfp
zTlh#2b+2B~y~)Q6T&=Us(=DUT1C)aXMcoT6cEzf(SRI`?*}@;k@V~s#IO?zLoF7lR
zUAM7D-rF6)WGB^z?enXx^J28nn%WuZG}tC^Fw3m1&n9^gr86rfq4=)es+83;{v?hd
z`?02R78R&RDaFqn*mph4=%${fIinGe%w$<`j4ZQq=0y*C0gw7qO&Brkwbn$x8L5L|
z`HhBqF$*RvV1@jIlzkpaKf?O)2j;cHL7s%>nBO|Rjl6$a1iZBu>xq}gcv8ge71VDF
zX78_fdbN?snRDs7$kssg3sj_js&VR=-8C?~I0TN(KfEidthh~(v1YjNUc
zLS-3o^z~A&SEPVXQ=y22HAcSSeo%e;tLVi)=s<`1FU`sCPXzK^dOgDE{T5$&wk}7o
zIe|VDUCFEbyz|KrzU7fV*aL{-ex+N`(NuD#=QrXkYLan8H&3p(<0kH6>#Gd&4_($a
z$HwnS+17d;`D7Gc9F-k!K5B$~{4yf3jO%Je!ccrveftL#u8t&DHWI~)yOMnSNMT;o
z0R^uf;qhS7gZm|&5sih7M858Tk{Ipu6D$+cYmqo*TInk%JrWD!FI>yYUqEuht8k;V=!YJ>)fHmP9I!U
z;INGNruC>L$AkOEZ~9>LCvab3SyNSX-|!Khb`DISU!4XM(-=boG5q@r!v5LLQsaM+
z!5oF5V$)iFwdFlydh$cgJfw$~&ELJwu${L06)eM`mFEO@z|K-#%j_X^lJXL#8TC`O
z(dDx_OODF@{3eqbQkbOhaZG|B$5P!)qE>~%uwYrycGLu64gc7ZK!8G&_0
zCAb&3$U(QDq(;8=7&j-{1eZL<1K6-92EdvlhE^FK5inpx*q=Q;gpDC_p}+YiEhF0C
zA>upXAQms&I9}obe)B2gW_lJnU<(fauAE+%Gm@cxO;B~Gm?2>fhs(TsGHdAqM!Z59
zea7h5$x4)0)Eaf=z~JXs$2i64b<$N8S{PQH2MM?LW8F0E$4`z+GIEy5UTr&zN?;^P3WseR0
z^3{F5WCDzJ#ph!9uPhW~mD-!8&~@9Cdd22nuh|VIZbs8*L>Nf*;=`bVp!Ng^fdHQy
zjJj6~a~e)8Or%E}?>X!&U7Xqy?4gYliRhL@S@Mkcl!jkqPa_K89f@)Y4u)ppO$eal(2vo;;T!1J
zc;IJw0*WOitz}7aKeH;6?~%9zyooi84L^zeE!GIjT&vWE!v5*~UOP!*p($!Xqv5C1
z6L(+I6x(^SAzR=jkE7Fl&44_I+Xsy`-0CD!LY<@OJZ?K2c%5jmci)?;c9CVovt90>
zg6U3j92*=SX1OLB{N&s>&gMe(gPO@Wrc9xiOc9PdG4Ewh#`FK&Khyhk1}njQSHq;5
z*(fTF*3`j0J-auJ@D6l1w)(ZoZcYn9?KuISbw*)pJp?kTt;t#^t8;C
zM7zFdjg*=-4f$y%eFPWQ(z;i`|B3P`Eur&tc>0kU#=!{YVkz;e)Yj55PhkT-(O^2P
z(~>}8Zb4>)RsP7QM^-T^^YJ%gJOzB3y#$AtWa1hQg^
zo~QMSn+#i1T4Z+UP8)NZgL|+S1Gn76)BI@4SBf3Hv5YXY*i+U^(teOzL)>bwe^bl=
z>CzsSC71QydgsMmBE20of_Tk2|H+85j)#Qm%HP$EWe?w)w$Gvxj3;Y-vJlRGHEi_R^&BdwiS#Dkzl8l5?g+A!wNhJ`T`BFu@tNLx_@{bf&!Wu}
zKOf5c;P?A*9p~A&nG}xKJ%@Mm$^Q1d*dJaTAjteBkNqK~&M$$>;x(s!EF)eF;VE=y
zLbEHyLtf^;cxg3$m?3O;$5@*8CuL__26|zw;QN^7kAgNm&0)qmf}+fYPi*sv!I;u1
zH2+%%ehsJl{KxEm&WIN`OB%d3yW!t){xCSW`b;HqVu3a~(B(~b@5G)F_YmC@8%lKL
z0h=dAK)pyK^E~Oe)S5o?Is5ip$SnqM
zpI(Ot6SeC?X+0hGx?Bbp$Hn)Nl4(n!=y!5E^<}YQt|C=G;r*=0x#^;Q7i5|nQ(#vb
z<@wg;XWJX-7OYmZ)GTb<;aeZ^37M5h=grO;=YlL1?{EIl@cT3!@x#ZZR2nc0*ayK|m-B{R%lLE&PLaXR69Y@3%hulG6kK@o^Pp9pACXEz0QPSuBUeup7
zNaCDm7|~AEL>=7eIZ(Q_6vcCD|nQwcA-`^=+24%VuR>;~0|Esb+%+>*^QLQiYK53BZT8Bsn~
zwB%^8I!3jCF-qJU$xBde`3AD_?Q~hP
z98N|z7A+=%0V-`C)7X*|x`YjG@fijXx$~&B5&6N1#oxl@6N@bm;M*SZZNAoz{%CMw
z@pLpevFJBVYrC6)l`o)AdefLxVsOqw0g#}(N&xfF*J&P$tLvDLo7XWbQ-g#L_tLFj
z-;>qRW<(HPsXI1%oT(2=?iD!y{jz56M>L+U18Dpxb-4OGt@7*RPX4BaC3}4K_ps5Q
z$9z^Bj4hPCGCmOQ?hlq#suc30^eh;et@X{$kA%MZ`Z^wXZ`-FUL6=U8()lP*!4aEY
z6OrCGJz>pFBBpk}I1&^0F1GNC02k&ev=F+R1^h(N8h@!&6mO&NGi!IlCd2_*>Wl3W
z$0XdS_j>`(tQ=L+(~efZaKd?yoTLyt9|Ke<`@))ZYj68$`J1lbJTncS5kVuYaj)>~
z$&*Rw{9$7h9>+P8_~FxAQ3mGsve6yB^q2};HCKo8joEbGj;^vpg3V2+B1eu=lv;Fs
zYWlsnHu|Nw9$gKo`udYEilnLR-%EUNi+6IGHF~NP-+Ss4k$M#+R?5dTjjjx;|
z&h3r)P
zzH9%s?HF}pn#&i-=1$+433`jYk~*vgR`!osw;3zr>ASQ}@*kY+D+m}CC~L`>&?)zG
z(4*Q>R2XPHM#DCR#BV2k#7Z?u^IPbIb{bF4Mb%}#5_rE55*-^vJ)-G=dWd)ztzTej
zRB^w3b{XMXGeaDybEw{Txz2DZYlPRTC0AzQ<*-`>uB}9cG)<(v)PQ->$7DbYo%Fir
ziv69Pm%~-{+qmfd3}eS&5uJxr>{zgsbkiMFU)qm@13w**VUE{gGm-<61^2z5I-=Oi2T$n_)PuPs{tv^gxYjPH>Ac%7G!
z(NnPRB3`nJNzZzbt%|9r2{Xgk`VN0xI-BiRBKK))*Mhl(q>)qSFIB!6A26Dl;Kp=G
zcrg~md7Qy9Wn{NDYJW!eCDeSk9W79DzZKk_hCF{Z&-3Bc4`-gT*v}eOTQsUyr6q71
zU(R6T2-#CugX4?fR~_i}iJ^4Y7SGKL;iCaMV|EoKo3^BTA=E
zPlXce>E>!?hGx^HL!K23JG{OknIUIvbveeSUfVUy6xR$kfoi>v
zjHXj%bXQx2->IA3vi%ze$YsSz$~IzI)w@eYW%!r=1S`HH?)JPIPiT2a)I{R0SGm7*
z!3^npF|&@S|1m3$G(BbXIM$C&aYm_nzXvL{y*Tq+f_}xmT`8%%&aubz#C&S7$(o9t
z`q9&g?wF3_i+*D{SVN1%zj444X8b`Rjj@<`qrU~@n^%
zdRblMb%(S@ykk$fQiDE%O6jl&XSt}h
zUA=m(^nr!aSkS$KWrTPO-HYT)&tfyKmUgtt`PM0iobuBQx@a7{LsN4{ttyWPoez3ah@RPpuerrC%l(U+Ud6J#Gl+bYt#$IAN9%n=cuC>5&A(`(0>9Y@0JKW`c_3DJO
zhCXUPrRnT2{2u+eCu?Z8I#*A_g)2V>DxI6PSRH5Pv{arCcz+jy!He#=zqR#LM
znr9uQ&c{C8c{^OXNU5Ttkdi_%Lqk-Ue6!8*Drzhsny4g9JQ}?Nc&R$N^Dzn^u`uU1
zt*@mpdkd-cc!rsH6uaS_0bW~rA8MM(U~!rU91=GGV*u%UT!;T~o%BOcYsG+*E;|#K
z7C^Q6aattj^@i*bt=tCdt&?%1w`gQ(kGIq5EMTZvux5BEu;*6Yy^KiA1nbT;`<_XL
z!G;0eV?t~?HxXAT$Hdda
z6yhgPb&L}HCU^TE5*O&5C`cPPQ6drIf&yw2Sas5qOWxIS=kP6BheLXtO4oRC&%}vBv>SS@>t{u^_YdJYCnt8D8Rc9Z=EPef~dHaG+wvr|uTt
zw0xN!Z@<}7t!-tuTozG>5T5VRiUeBTn>qIk?{oQa?N^tfLCkF_^uXI<&&A-=PvzZt
z*0SBuS&CWmzUO$CW46<$y5jEP`#%bd>1yGq>X*`o`=@StU0blJkV8Jf%GOEK
zVV>z(|RqDJQ_#nDWH?V8^)Ns8-IL^9YB7yowpy2!_eC>?@=6uI)b`e8SJ0hrOKiD?VK#8Mg%&wvGYow4jm0a
za6Li%d8%*Ni}KrH({KJ88EpJAEM(Fyc{D1qGr?Y36z}iavt>^6z?j32ho*GkNSI}<
zyO(2$R`$cnw27w0pgeWKRNo4&r;1bGN2ktIN*sJ99p7LUTVR~_x)H2-)X0CR$M0Ed
zt7YZ$v9wt8TVeNOc`LYDWUwy#v?k|Xur1a3$UokB=uyZ`o;NN-ZJY%c-^vQg6kK~1
z;$(VU^C;>MrzP-VkWkKpy4*GNH`x}_Cs4uTtGq>LG%TXejMF8_xuQmX3;(g~kg_Z;
z1gn;B6X5Ke3^CA!#b&YO^t*}9(|!^vau$Sr9|>9|(Njmw4Q7X!Np}T&@ZfwLd!F)=
zL->NA6N%-_WO@jC=!fvqRxNtm1Co?O^n4%bl7W;jI7PSkgVmr^d}7PViLK^5r01Yk
z$1axZ=u8zD-=ZbDz1w@|C-%>p)OXKJ3W2?v>uo?>v2dIwZY=-c%?p^UAHg}bCPi~9
z*A%0(N>9%l+fA!y3>5O?AHN-$&eyE3Fi9NP$zbJUJN(Cy;E;Y+zI)#H#{cQ=%j2Q!
z-iJL(o+Oer6%|=RsV8lgNrez&i7D$-Q6X7cWSt^pi4dYt_H0wx_p+9&C?r2h_zvI4gl4Ua&WUKvmbj>S`%xqh
zZ%*}tsXufS^_|?ezGn1iP&i=8VTLt2Bfr^dry}#Fox>r*AYWRDbsOT*F2bEI-+@^Q
z*7$;)txh&J72kO1p-ey;EX}Xay~it1-6oRX{{)M^0TFnj1Cs541C&(A3C_GD)~sRy
zriWs5@L>kd>8CB7MPBK26WD2NL;uWW$GMpuBU{Jx`p
z7naUt!z;Q!%v_Yv>pa5nifIPX{
z!`HM9Zp6!YDQj!bQsjp)U0?)z%i2vHaPcoB&~&*GmyltGe&H^oO&=c-@U(~sD~5PQ
zU0SbqFLb_yNy(3Ey0?GyNBm+>+~5|YExg4b)!S$0Bik&6T-34nhDk4J*FHgs?YK~!
zd(SMz)zf&?e#X(hDU^P=4M)mjKLuSSgSVfYnvHb}JrOSxte%w|p744R^WlzIWKq?i
zQktfbsO7bQG=`#ZADzLWiF}Li>=k+rN(Wsc{Yx91MUSmpKOu&ajJ!T|_c66k)W!Up
zLE{I6#>A2BsMzAd_L+B`uJ4Y=sNYgQ1&WJWMjZon>`t+LLe!>K)Rznr-sVK+M5EJM
zVCEh3vf?J)nsY9#xDR#>dPM@Pqw
z-pCSc2A!ra1vBOBxJ(Acpd*n3uj@~RU)g@d@*8t^$WT-=W)ftf0zdTc*QTvTITNj)?aU1l;3hXfC-40i~gXB
z$WjOFy_JeH0;zM8>tGP_?g_5oJDox-_O$Ry4^-jRx$^}wt6)BQ`Tijr`2;DDI2mRClFTqhe
z!VJ9$(IMkN$OJ2eS11ErepkZbY~&G4QJyPbf~s)%;iRV(<$So$6G=}zh9GMS8Udv25aD(FrukTS(z%ut6mqs}y#TxIY3%;Z@e6(g1KceOF>UB$R;x^16
zPr6T?3@@i-g}O--ayk~v+v4xlqdWBE-ln{_{Z%)blrwcFjZ?*dW3*+O4SyW
z@G(CoZ|OTOil-=VJs6F?9vdO0YW#h`m&WjfHt9{!;f&SKv)YtJNio8=4$d$qwvvJ~=S#`LcUoxg%cGtj*Toa5wh_r>bGO{M}3z
z#b~)=j1f-u)r_;GznbqskOq2iQY;Z%xv46{=mZQYcm|x}*PT=Vl?+A0f_3K^UP-
z-7m{Ybh$kZ;4s)!TsI_>uzG`}l7;eywU#A%d&$+VrIL)^LP
z+=U+E82cf?jg^jQvu=@?I(H^<UFT7e{{jgvfJi+dHpyWG$>k%guIw7JcDESl1X^
zUwO$?DKug1+MN?}>|gy{(hZy+2Pb#y{6H7KPPie>a~O5^no6ks
z$hOuHDovbvX|j-P7@>miocF=)#`S5`^)>aI+go-(Q6~QCq&C#K$M3Y4Od>q_Ek
z?2cjk30%H$H{|mpcK1|9ab;Rt(X_?VN^mIZG$#DK-IFrem8Ry#?33#K9nCyPSen${@1Y7EW}-R4-0
zXf~PovyQrO82w}WyU}Uj-m73w&EXtr)jmK-PbE0jKF6vQ{>tLGdJ_3HN>+2``+1OJ
zaw_t&Vio@H6=hYhr^ND20zRNE;l9^2zd
z+aq&ksM903p@sG|db-#LxFAPlBNWbb6(H^wAI0kD;kaM-PAET^3hB{d*7<<-n?Wg7
zA0D!^+-va6n(zJ01%g`pSb`=?^q%MgrW$fU4K>JVkn&f6%axeOLSz!+K4xg&GS!BR
za!TCWtiNI}U)DsX<&|aMojNwb8J!^KFT%`U6t1PmFC`1Suu_7z&UhE}Vl$kiRiC^c
z-4l*s#@V*#_FHHRoPQD|?)fW1Y;yh7EJY$dwvoZN=Fl7cOCaL5Cr6jr$#>($e#=_^
zw1YJ&RVaQiRc0z;QkLewuk6zYw%}h@>1f|}SQ!}rdAU(w&BqUy6a(UvKFEyA$j?jB
z?AoK5PW{XH=`f+I(zdrJ59Gk*24CGbVQ%j?7~&VZc!^rS@zom0sTBUM6M5b{f8j2s5x6+zWXzcEiDK
zCY84PTeF(lbUmmZZoRIdm)m2$f4{ye;Wcu|bKJ9gU$F;acX60tppJJRPpI_Qy*uJ_
zajB_>Sed)NUpuZ^T)r6KA=-yj9lME
zUpsmI;ZWY`{^N-IgggCeBa=Zl4PUsu%6}Bp2`UPNV+6rImxz}Xs(N0#T_U_{xg^sA
zJSaHAYsEEDZ!7vaCX~`HT+-Evv!(cDlrMIry=jo~V;%Npa`hjRe^UpDH&0C6X0CV2
zQ_QTsqH+60i&q7%zRmjEWT1(2hn@pi0GgKf2RpRHTRQ6?Rr_S+b!DU<@)i5>-rn^R
zc5=GSS@ep^+oH1+TMRepN9Adk@9%PaYoJDt?2j(e-lbcs7pG8bzymQ3>Zaq-tCc6xM7Nk4vt7p>IG$_TJ&
zOAG8N{?auaEiUfduA|*fzx_Kdvb{v9Zp!e;mDF-UbQU41>1ABDb-@WwmjjP$@##fp
z%nod18(lXw78i3~I1AHwzV4KxfP?|av6mvd-%&$jzzf7LKFvtwH}+$(9%^N-s`TgS-Ib&7r$aR1xRQUqBm
z2DEQpr{<#5q?WSYbId&LadFKNfi5#PtE7D+)eWsd$4_Z}95(WFl;Ckyc`IdnqRaW>
zd+MQMBGva~e%uJWgV*p#6;u)9y{%rk^K<6gD=i%M*>noJ=bR1=_o|-_dy$++->1du
zCc&qnd1~B>Hq_c_y+{QoH~LrC>xrJR_$w}jC@mM3D0M3i*Elx4Ei%!VLpUIC99A+j
zw|yps4DOvS3f#fL^2UCaLfw9QbVZyS|M9YRhw5tPQX6F~oo`%Ik5^ABR{JoLOSZGC
z^P|=sP7QaFjrm&=Tp~8a?Ci=1#A4zhEoV;~c3*Q6cy75XSj3y3DK?DOi8@-O+y;Tb
zo&wA1(%jJ_F)dp}GUKUb5_1x5&ZWA1=*~CN<5V&VG=18aR%{)R^i7`29m|{N*3D}<
zx^=&CL&wQ}mNVn)hw{e~t|BPzMP6KgMLGyM@gfF9;&rk?-;dZ?QYlR`Jxcm;FVjr3
zrVqAy);DI{NqbOlUe0(R+EnVU;LSbW9o{12$y{Mz-u6LvGwMvbg1q{@u5882F2~P$
zz7{X<7O1!yD0+`O(17Jwm`Yi{DHC0IokV=w0JW4$;Gl}by&k4>JIh-U@s{-NcDuE4
zz6wDxA_>ofRS{x2j-FAeBXRB0Is0v@8sr$Ge|-sI!`%ldS18ucUN;dIH=~lSM0I__
z8*OkEXnDxACp2T{Yi>wDz&;#ujoM{lTI4W!e8IJw^~5c39Z{QZ1|piWU*
zcp>b?2c>hAcJoE4C<%v#rUB<6OW;r7JhaMkXQD5tr^4VbR3!~n^c)O2WmYsxk+}t-
z6E%eI(>PDe&Ul(4V}0uuRZwQL)|V%F4no|I?^D-h`4l0Tf(P`f@e-v>yq(s0!e!!H
z?sCl7`R4cK@YH6>AOc=%|Ml|tSybm^3AY)fh>y;9R-wlTtH`*%C}-umlZvw3-bn7?
zQDrGB=aX>Vc({ByTt=T*0F+~7D3x%=+GMJayeva^$fSVi%{z3rTBGaaIbCc-uVu2`
z5imO6FIV^O2IF(GUE>|m815aTcW=Q?hNJ8G5uZB0W^w{s
zbUEep$kFssj`#+WUfM6d0=I9IQT8)Z?Y1aXv~%tsXYLEr3mf@{CpBr-;z(?m|fozJA%gdSFID
zs{A5w<>XLVRGX;h{*oPMqPl``XYke`msI(S_6=V)-g{RsRLon@ELQYwUW~i9Ed}P>
z5GG%k;SN26*ABy@ZVCOEJfb{dXxnd6h)XA5yQ<=uwhkY6rU>Vp1xAS2?)_!G*>n8cGH%U
zoC{IK++IhzJ8nzF6rgB_pCO#2571`()r-k7)8WHvM+HaB=QvVLvHm@3Lm=15&3QqFB95x|9Po;)mFsAl1+A}11Iyk)M`x7?R`oa&j}glil=IY
zDdJx}#U$_X+ny<&c^;P;s?m9S+S;wFzhSs~M2z73p%1|*b~<*02ftt5x}wiFoVdPu
zBK!nALNg8izFu7`@Lc-oWr4p${jUmsF~8^`i_nncOGrEk?E@mt@Rd*QMCSMP86%30
z__N*$7j`t&IqkUqb+O2RL!k!s%!W9`Ake^%ZE9s7XkB>0Wb`>8ao^MP-@cCK;`i!s
zf+$?A^UN%TE;fv?HJ2V;aWfwjgv8+LOWBzIMjahjK>WOlR`
zug$an8Cuv@L%ci^{e!mx(Jcach8y0EMLHL2n*fTvcO(Mh!AJPyJVIR?);uML+=jcl
zd!)}#_hA4*EyN6aAkVM0UFDEhBcFC|gw3>+M#<|tH;gtje#O`w>`|r^OzO*YX!xjp
za7Mv=%D*t%uAeECuK6PO(RyN9&ZE&$uU?
z1wJOV6MP8~%*=X5Mu0fyL1dX&dKg6LpfK~?A9W)B7?#fK(vLrd62=5HE&VQTl+~lL
z6uXmQqi@VivICEE3PEWK-H!6(aq-QN+wjWVF+uI<|$QV
zYVc&Sbg^GZK-Xx(Un;n_ZKBQbn6LdxppGSXbIbEgA=jOpB0>XPGWU~~WIaGcgvzsX{Ait}V7X^koX4)8T!%5D
z#TGh0e%7goq;@U9`L-EvM^)@fsZM6Q8Ogf4q&S#K;8t}r%J;Hg+LZ?n4X5RMFGows
zKLZYwUq>K2Fn?}IC}b2swl$RAP6hv%w-S)0SnY4+b4He!o%y-!{5dKMP0`X0;PXkq
zKNy_lA+42~gRXJg|Fph%CS^pH_Ws{uHzbQ|R1^eLw{GM0?R+wJ?Q-#0q_W&+sB|Mx
z)6j`9QpXvBQlh!1Xef;Lafv>Z5-ez?+Qt(ncm#XPj2}21#o9VRHM1E*$ruHir|;B~
zR6iV?85y(7_1kxIie|>mtlQ;AsKVs|L7(V{n@5gTQX_FJ``%-@tuC{TZW2l4zLXGA
z;FDT0s+*TS;ti&mRzBZdbwH*vOK4|KhfldkO{qu$Mlinin;Ro8(8G0K-E$_G&|q2e
zo04k~7cBi-SQQ^qZNT#rxpKu&QaJ+f0QAtm`kOo2hoo7^8s@+D`E>s9C}
zQtfX~y{Rb9ztVmclEZSLpYor+Ltai|Ay&ZA@OHg_dgK51`|zGs;Hsp6QA3jR{}s$Y
zJySw)>HpVJOx)H>)PVmhnE5A!5HYusNc>M;ljHlt04CXjPKf)%Ht7B}iEg*FrY>?|qkpNeMF%v>$#66uZWyU&}|cMz)!QW`RR@j*{~?7ZPEyT!Yf_WEor3
zB}w|0HbLSWQX4RDLDCF=0iyk1QA10J1EiM>KHzs^7#Zpx26ypbmZNbY&LJ~Gs&@}o
zK>u!fHYYes5ikz)0o?y#k&@aC>&t(5N
z^yM$ZV}sS>BKd<*uvSpOi~pK~mgrqTUzh}tN`~i*uu%Y3Y+iw`6`Fr~Zf=gInM{u=KCOSVRnvRZ?X5JA(a
z#jA@ITApWNX!r{rSgsdV#t)St^Dp;7|$@w
z#HGOX-%O&x#L56j>D(}X*WOyL69o*OOe`_%{}Om|XLHmeiUd)~{C0l7@F8*wODz&n
z!!O_i_yOom*yNI>Xa04PVw)50-*d_8#sk7Lv>Yb={ZGuDR|jA@;A_^cL^3Qu8j*Fu
z1$c$9=4JjedqskYD9P{~;=dzW%gDEg|5nnh@cLpYtruP-wy*)X%PGk;B!6!8gN{81
zNSZUeb2UUmiNXM4A)uDq0`ikzUGpbsom}bRCDmN3JC2p9Y#7C
z_(h*^Yp$d{KwzBUNvMX-(xw4FEP8DYK=Q-jftABL@S9}h0LT2QW1DMs!Fb8n!a;!_
za8d}Y$o}I-$c_Dr&y|NoLJ$#SOQ3~tx(I{6#omG!!y{It)bAr%3%Z6LBEAjp*!%a`
zAyaWF+5e;8D~{tg?6Uv?%SZx67h#56?V&Z^3n%G^)kG9@_IqqEqUV2v77|auTIAp2
zd-+S@Kn{S^LV5_C3j|3l3GK_655BRWL!di=s)AbtAmNDwDwsaO
zgC`OeyaEXz5hRGb@NK{}px`Vl%V3`*A83GNK)~l}oU|5ZS;*RO!wc;Tq-%*-ATlnb
z`A9l?VcW#bn^3fKReJ!vN;FsyHUTz>v2u7ci?t4**b2N&26c7ivXCI~8xZIke23@K
zWfr8)EIA(>9JdT^f{Sw}p+ALlQJCNz8{jN@(l7W6F---!MLs|re3?sN0e3fn;s9{0
zdj5&0P(3}U6>{_$lyrm}ASJzkAD~D0IC3b+O+3kbVN2jH`Caf7lp_P5PYxa>epz^B
X9xgDfWw0y*gB(?d&bz0c{rZ0Z=F=0b
literal 0
HcmV?d00001
diff --git a/public/assets/gdyup-logo.svg b/public/assets/gdyup-logo.svg
new file mode 100644
index 00000000..74d35219
--- /dev/null
+++ b/public/assets/gdyup-logo.svg
@@ -0,0 +1,3246 @@
+
\ No newline at end of file
diff --git a/public/icons/gdyup-icon-192.png b/public/icons/gdyup-icon-192.png
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/public/icons/gdyup-icon-192.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/icons/gdyup-icon-512.png b/public/icons/gdyup-icon-512.png
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/public/icons/gdyup-icon-512.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/manifest.json b/public/manifest.json
new file mode 100644
index 00000000..19ab83eb
--- /dev/null
+++ b/public/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "GDY UP",
+ "short_name": "GDYUP",
+ "description": "Peer-to-peer flight splitting and luxury air travel experiences.",
+ "start_url": "/gdyup",
+ "display": "standalone",
+ "background_color": "#000000",
+ "theme_color": "#CEFF00",
+ "icons": [
+ {
+ "src": "/icons/gdyup-icon-512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "any maskable"
+ },
+ {
+ "src": "/icons/gdyup-icon-192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "any maskable"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/sw.js b/public/sw.js
new file mode 100644
index 00000000..f42554e9
--- /dev/null
+++ b/public/sw.js
@@ -0,0 +1,92 @@
+const CACHE_NAME = 'gdyup-v1';
+const urlsToCache = [
+ '/',
+ '/gdyup',
+ '/gdyup/listings',
+ '/manifest.json',
+ '/icons/gdyup-icon-512.png',
+ '/icons/gdyup-icon-192.png',
+ '/assets/gdyup-logo.svg',
+];
+
+self.addEventListener('install', (event) => {
+ event.waitUntil(
+ caches.open(CACHE_NAME)
+ .then((cache) => {
+ return cache.addAll(urlsToCache);
+ })
+ );
+});
+
+self.addEventListener('fetch', (event) => {
+ event.respondWith(
+ caches.match(event.request)
+ .then((response) => {
+ // Cache hit - return response
+ if (response) {
+ return response;
+ }
+ return fetch(event.request)
+ .then((response) => {
+ // Return the response if it's not valid or isn't a GET request
+ if (!response || response.status !== 200 || response.type !== 'basic' || event.request.method !== 'GET') {
+ return response;
+ }
+
+ // Clone the response
+ const responseToCache = response.clone();
+
+ caches.open(CACHE_NAME)
+ .then((cache) => {
+ cache.put(event.request, responseToCache);
+ });
+
+ return response;
+ });
+ })
+ .catch(() => {
+ // If both the cache and fetch fail, show a fallback page
+ if (event.request.url.indexOf('/gdyup') !== -1) {
+ return caches.match('/gdyup');
+ }
+ })
+ );
+});
+
+self.addEventListener('push', function (event) {
+ if (event.data) {
+ const data = event.data.json();
+ const options = {
+ body: data.body,
+ icon: '/icons/gdyup-icon-512.png',
+ badge: '/icons/gdyup-icon-192.png',
+ vibrate: [100, 50, 100],
+ data: {
+ dateOfArrival: Date.now(),
+ primaryKey: '1',
+ },
+ };
+ event.waitUntil(self.registration.showNotification(data.title, options));
+ }
+});
+
+self.addEventListener('notificationclick', function (event) {
+ event.notification.close();
+ event.waitUntil(clients.openWindow('/gdyup'));
+});
+
+// Service worker activate - clean up old caches
+self.addEventListener('activate', (event) => {
+ const cacheWhitelist = [CACHE_NAME];
+ event.waitUntil(
+ caches.keys().then((cacheNames) => {
+ return Promise.all(
+ cacheNames.map((cacheName) => {
+ if (cacheWhitelist.indexOf(cacheName) === -1) {
+ return caches.delete(cacheName);
+ }
+ })
+ );
+ })
+ );
+});
\ No newline at end of file
diff --git a/stories/Introduction.mdx b/stories/Introduction.mdx
new file mode 100644
index 00000000..8d2af1f3
--- /dev/null
+++ b/stories/Introduction.mdx
@@ -0,0 +1,59 @@
+import { Meta } from '@storybook/blocks';
+
+
+
+# Jetstream Storybook
+
+Welcome to the Jetstream Storybook, a comprehensive collection of components, patterns, and design documentation for the Jetstream platform.
+
+## Platform Overview
+
+Jetstream is a modern private aviation platform with two primary focus areas:
+
+1. **Jetstream Platform** - An intelligent matching engine connecting passengers with customized flight experiences, featuring specialized crew and captains, powered by advanced AI and vector embeddings.
+
+2. **GDY UP Mobile App** - A mobile-first application focused on peer-to-peer jet cost sharing, allowing users to offset private aviation costs by sharing flights with others. This app is our primary launch focus.
+
+## AI Capabilities
+
+Our platform leverages cutting-edge AI technology throughout:
+
+- **Vector Embeddings & Matching** - Powers personalized recommendations and matches between passengers, flights, and experiences
+- **Full-Access AI Agent** - Sophisticated agent with permission-based access to execute tasks across front and backend systems
+- **Context-Aware Assistance** - Adapts behavior based on whether it's used in GDY UP, main platform, or backend contexts
+
+## Documentation Structure
+
+Our Storybook is organized into the following main sections:
+
+- **Jetstream** - Platform components, organized by feature:
+ - Dashboard - The central user hub
+ - Pulse AI - AI-powered flight matching and recommendations
+ - Concierge - Conversational assistant for flight planning
+ - Profiles - User, crew, and captain profiles
+
+- **GDY UP Mobile App** - Our primary launch focus with mobile-optimized components:
+ - Listing management
+ - Seat selection
+ - Booking workflow
+ - Payment processing
+ - Boarding pass generation
+
+- **UI** - Core interface components used across both platforms:
+ - Buttons, forms, cards, and other fundamental elements
+ - Design system primitives
+ - Layout components
+
+## Getting Started
+
+Explore the components using the sidebar navigation. Each component includes:
+
+- Usage documentation
+- Interactive examples
+- Configuration options
+- Best practices
+- Accessibility guidelines
+
+## Implementation Status
+
+All components are fully documented with comprehensive stories showcasing their functionality, states, and integration points
\ No newline at end of file
diff --git a/stories/gdyup/Introduction.mdx b/stories/gdyup/Introduction.mdx
new file mode 100644
index 00000000..dcc14eae
--- /dev/null
+++ b/stories/gdyup/Introduction.mdx
@@ -0,0 +1,122 @@
+import { Meta } from '@storybook/blocks';
+
+
+
+# GDY UP Mobile App
+
+GDY UP is a mobile-first application for peer-to-peer jet cost sharing, allowing users to offset the cost of private aviation by sharing flights with other passengers. As our primary launch focus, GDY UP delivers a premium experience while making private aviation more accessible.
+
+## Mobile-First Design
+
+All GDY UP components are designed with a mobile-first approach, ensuring a seamless experience on smartphones and tablets, while still functioning well on desktop devices.
+
+## Connection to Jetstream Platform
+
+GDY UP leverages the core AI capabilities of the Jetstream platform, including:
+
+- **Vector-Based Matching** - Finding optimal flight sharing opportunities
+- **AI Agent Integration** - Context-aware assistance for booking and flight management
+- **Personalization Engine** - Creating tailored experiences for each user
+
+## Key Components
+
+The GDY UP UI includes several specialized components:
+
+- **GdyupHeader**: Navigation and branding for the GDY UP experience
+- **GdyupOfferDetail**: Displays details of available jet sharing opportunities
+- **GdyupOfferForm**: Complex form for creating new jet share listings
+- **JetSeatVisualizer**: Interactive component for selecting seats on an aircraft
+- **LocationAutocomplete**: Search and select airports with autocomplete
+- **GdyupPaymentForm**: Secure payment processing for booking seats
+- **GdyupDashboard**: User dashboard for managing bookings and listings
+- **BoardingPass**: Digital boarding pass generation and display
+
+## User Journey
+
+GDY UP enables a seamless experience from discovery to boarding:
+
+1. Users browse available jet sharing opportunities
+2. They select a flight and choose their seat
+3. Payment is processed for their share of the flight
+4. Digital boarding passes are generated
+5. Users board and enjoy their premium flight experience
+
+## Responsive Design Guidelines
+
+### Viewport Considerations
+
+GDY UP components are designed to work across the following viewport sizes:
+
+- **Mobile Small**: 320px - 375px
+- **Mobile Large**: 376px - 639px
+- **Tablet**: 640px - 1023px
+- **Desktop**: 1024px and above
+
+### Component-Specific Responsive Patterns
+
+#### JetSeatVisualizer
+
+- Mobile: Zoomed view with panning gesture support
+- Tablet: Visible cabin with touch selection
+- Desktop: Full aircraft view with hover states
+
+#### GdyupOfferForm
+
+- Mobile: Single-field focus, progressive disclosure
+- Tablet: Grouped fields, side-by-side when appropriate
+- Desktop: Multi-column layout with contextual help
+
+#### LocationAutocomplete
+
+- Mobile: Full-screen search experience
+- Tablet/Desktop: Dropdown result list
+- All: Persistent recent searches
+
+## Implementation Status
+
+All components are fully documented with comprehensive stories showcasing their functionality, states, and integration points across mobile viewports.
+
+# GDY UP UI Components
+
+GDY UP is a mobile-first feature of the Jetstream platform that enables users to book and share private jet flights. This documentation covers the UI components specifically built for the GDY UP experience.
+
+## Key Components
+
+The GDY UP UI includes several specialized components:
+
+- **GdyupHeader**: Navigation and branding for the GDY UP experience
+- **GdyupOfferDetail**: Displays details of available jet sharing opportunities
+- **GdyupOfferForm**: Complex form for creating new jet share listings
+- **JetSeatVisualizer**: Interactive component for selecting seats on an aircraft
+- **LocationAutocomplete**: Search and select airports with autocomplete
+- **GdyupPaymentForm**: Secure payment processing for booking seats
+- **GdyupDashboard**: User dashboard for managing bookings and listings
+- **BoardingPass**: Digital boarding pass generation and display
+
+## Implementation Guidelines
+
+When implementing GDY UP components:
+
+1. **Responsiveness**: All components must adapt seamlessly across device sizes
+2. **Performance**: Components should load quickly, even on slower mobile connections
+3. **Accessibility**: Follow WCAG guidelines for mobile accessibility
+4. **Offline Support**: Where possible, components should gracefully handle intermittent connectivity
+
+## Comprehensive Responsive Design Guidelines
+
+### Viewport Considerations
+
+GDY UP components are designed to work across the following viewport sizes:
+
+- **Mobile Small**: 320px - 375px
+- **Mobile Large**: 376px - 639px
+- **Tablet**: 640px - 1023px
+- **Desktop**: 1024px and above
+
+### Responsive Design Techniques
+
+Our responsive approach uses these key techniques:
+- Fluid layouts with percentage-based widths
+- CSS Grid and Flexbox for adaptive layouts
+- Strategic breakpoints for optimal viewing at all sizes
+- Touch-friendly UI elements on mobile
\ No newline at end of file
From 3dd12d0fc41fe9bfeef7c8115eb9bce9341c6bc8 Mon Sep 17 00:00:00 2001
From: "m@" <35651510+BlockSavvy@users.noreply.github.com>
Date: Tue, 15 Apr 2025 14:44:56 -0500
Subject: [PATCH 008/215] Improve accessibility contrast in GDY UP app,
especially for buttons and interactive elements using enhanced brand colors
---
app/gdyup/components/GdyupHeader.tsx | 46 +++++----
app/gdyup/components/JetShareHeader.tsx | 84 ++++++++-------
app/gdyup/gdyup.css | 71 ++++++++++---
app/gdyup/layout.tsx | 4 +-
app/gdyup/listings/page.tsx | 30 +++---
app/gdyup/page.tsx | 36 +++----
app/globals.css | 129 ++++++++++++++++++++++++
7 files changed, 294 insertions(+), 106 deletions(-)
diff --git a/app/gdyup/components/GdyupHeader.tsx b/app/gdyup/components/GdyupHeader.tsx
index 920349d3..6fa1627f 100644
--- a/app/gdyup/components/GdyupHeader.tsx
+++ b/app/gdyup/components/GdyupHeader.tsx
@@ -139,9 +139,9 @@ export default function GdyupHeader() {
router.push(`/auth/login?returnUrl=${encodeURIComponent(currentPath)}&t=${timestamp}`);
};
- // GDY UP brand colors
- const primaryColor = "#CEFF00";
- const secondaryColor = "#FF4B47";
+ // GDY UP brand colors - updated for better contrast
+ const primaryColor = "#DAFF0D"; // Enhanced brightness for better contrast against dark bg
+ const secondaryColor = "#FF4B47"; // Keep the secondary color
return (
@@ -149,12 +149,14 @@ export default function GdyupHeader() {
{/* Logo */}
-
- GDY UP
+
+
@@ -168,7 +170,7 @@ export default function GdyupHeader() {
"flex items-center space-x-1 text-sm font-medium transition-colors",
isActive(item.path)
? { color: primaryColor }
- : "text-gray-300 hover:text-white"
+ : "text-gray-100 hover:text-white" // Improved from gray-300 to gray-100
)}
style={isActive(item.path) ? { color: primaryColor } : {}}
>
@@ -187,7 +189,7 @@ export default function GdyupHeader() {
"flex items-center space-x-1 text-sm font-medium transition-colors",
isActive('/gdyup/profile')
? { color: primaryColor }
- : "text-gray-300 hover:text-white"
+ : "text-gray-100 hover:text-white" // Improved from gray-300 to gray-100
)}
style={isActive('/gdyup/profile') ? { color: primaryColor } : {}}
>
@@ -195,12 +197,12 @@ export default function GdyupHeader() {
Profile
- {/* Move 'Back to JetStream' to a more subtle location - dropdown instead of main nav */}
+ {/* More dropdown */}