From ddf5fd2e641f684ab4056109d4648d775bb50b27 Mon Sep 17 00:00:00 2001 From: Maurice Date: Thu, 5 Nov 2026 22:24:53 +0100 Subject: [PATCH] =?UTF-8?q?feat(native):=20richer=20onboarding=20=E2=80=94?= =?UTF-8?q?=20Poppins=20display=20type,=20a=20masked=20grid=20backdrop=20a?= =?UTF-8?q?nd=20depth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fonts/poppins-latin-500.woff2 | Bin 0 -> 7748 bytes .../fonts/poppins-latin-600.woff2 | Bin 0 -> 8000 bytes .../fonts/poppins-latin-700.woff2 | Bin 0 -> 7816 bytes client/native-shell/main.ts | 12 +- client/native-shell/shell.css | 103 +++++++++++++++--- 5 files changed, 100 insertions(+), 15 deletions(-) create mode 100644 client/native-shell/fonts/poppins-latin-500.woff2 create mode 100644 client/native-shell/fonts/poppins-latin-600.woff2 create mode 100644 client/native-shell/fonts/poppins-latin-700.woff2 diff --git a/client/native-shell/fonts/poppins-latin-500.woff2 b/client/native-shell/fonts/poppins-latin-500.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c6603368bf147d85b919d0ce9766bff0a73959d0 GIT binary patch literal 7748 zcmV-K9=qXpPew8T0RR9103JjD3;+NC06%a503GoF0RR9100000000000000000000 z0000R9vm(PU;u$s3g2NC$)q8#ppWM(!7>1rtT7q6ESJ zmjn%tu<%!~i4kImh_DFNV!QinuiyAlV=n@|3Inu9G!tD?W19Cv|IEcXN&v3%1wL1n z9YO4>BN(!Nge0>q(ewN9o3rPA1(Jw|u9nCoEs>%-<6zj_a$w-j_l8E3a%X zYSHTh>(HeZS69ufsr5J8R7&ZoB4 zucCn5j|p&om{eEbO9Jh)zOc=Ci_TsaD8W0xj@6OrOV3nK-n483@Bkota|5tVBp`qW ztP&xNiIM7Ihs0jVd4Lsy{$Hh~%}B=cWgcuxM5H6K5IG1Wf`;HBCKfR{@i|Gz@lq|q z(PGVs35ZlgCX@Q7Y7OJzcyDYQTMDnue)F;+|8dnN=k2#m(YMz={tfzTc174;V!Gc?~WtIdc4lo-BSQocu8M#pn~CJ3zTnh{jMtjJVdYG9$FzW-t4Nl#S1%WX(&S}0t zzw?lq1R2PV&Z)i_(KSRf3)nvY3tw-9Fik5paY^H3bCj}gs|*)0c9|i1cn7pp{G(#h zcg?vv1evhzq~UrbpWB@Ub04304vG18%mMIa=O&F?v~gk)P>kJ%M|8>--0DQCGxsha z)!A45US1%AiNcx0_g;339fjQwsW zyEG{<$k~QX<1dDL0zaIv+%)kn-pjP&S=hUUFUYu+z`=;N<&qTX`}2JGe5E+(F_+X# z3?=YGDZ#?Mw+DZ|rco+Tq4YvaY^jS|(7{3+y-?>Z4VPXi!IHtpmh3YfPJPH%aPkyK z34AX9QHha0s_ncF)7uJ8^Z8CUkCD&1G!(+`5g;QY<=%Y;rrSBw9yYB8g-5^noUWxk zOyyx*TQW6eVKnQS-d^t6I%`IJ_Cv60n=J8T`h!Gr=mXeh3p zROxO&^u6a9Ry1#g*OIHT1R2@mK`%B)mMr@Y>))&*IciNce5Kvdc9q5TIP*z0nLNHj z2I~JenNd6VFJ~W;mAk#-O#$X0vMbRa}}a2Ekbz-MYlM1?V5#|cT&cF3~+fr(pZB@)@$=|a0#-3I}1xQ zBxTFjtdd?3ON)I#51z1GCpHQ?d`N=_rBY^lbBk~&zg+YS9U`JsMu;w@QC%G`j5azZ z0B5c$m-#~Ez-qGFE#d9ZoElh5@pus32*NkfrQJwRF--8`I+9ga+iHOvl9IUDVi~z@ zCQ3rEnsdsKy{#wr{5TA-c?(_iOzL7+*1fM}Sy00I znn!lx^wp*BFws$H4ReeTi@UWwt=zNS=)W&{`f^VA0F9DC ze5I^6-fA3EfkCO!$${~Q`hA;R`sPn6*GlTWH|k`E4(K*do_aXR_J#Pe&_s*Rglu`m zXmn>yrk0PRUqs#A=lLJxv>~YAa=)+xwjPaZoM8Dfo)TH=T}zmLtSq&ItrZ!sxQyt_E%p* zUTZQs$_7?d$BagWkAmzSIHQBkj#5Kvdu&UUrVDv>^#jf#Z4OP!(Y7>h+<}-e#^Z=? zZrH5_pK}%#K$UR3^XA{4KAwx7KA2iiFz@yUpwO?=aJd{2i*;I!*NQ7PZw~qHdH0qX zO{}aqjFI*FWYW&DaypF$V<@or!vL!F`o(QHvBXbcy4WJMPlb4|Cm)Ly8VhN34Z1+i zf+I~!m#)stm~n@O1g+iXeQQsjTBa4sLf6}{PJ)!j2t{FF##+DhbhFEg;s;&(otkEkxP```aG7+r zB&#{xzr3TSsjIzOBwATrFXv4#osYGE)xW&1R!~z)(38s{<2R85kV8TzS=~fQr8_cIKu4h9KBrPXH+unQk3sq0^`F?Q?0bECBj11FdI=T>loL`- zeu=JLh;Cv^D6kLGG_7cuXYyW@lBq(0UMLdE1f?9@v&IwG!FBr~qEg-ww&6fk35`=t zp)^PZbV9>s zQk4QePa&i*R1gPzv;!hggphZQ-;hUu+(bsbw7GA&e=YpR&Hkc6x7N|n;*Hk1htKdN z<$RHh#S$slOo2iKgsUF?Z?D<<_&o@_{&>D7EtH|4GtpdWq`X_b_L2j_AWaTUT z3Zb#6zp8Xe-lBAI29hL6ZzA^YShXoI>~+82(YI&SCZ`~0fz*QZHw~)IyQ{aXeDPxK zE-8_RL#ePh8LpU3%+X>?J}m*SHszLXYX38|^3PC*`niwe=YZcW@``d2SyzYSCx_+; zYf1p=|o-U#JXE;L~Zlzt|7*-g68bvs8G`HzKRnoph2|{01hY zMJ{KwG?epMPSVMB$g1-V-pT=sW1tos96G799QJrD2Tp3d4?_<-&HXDnI{Vjj`DguL z#B%FL`;VV2u=ic>vxA32cGT_1_QyCl1fcH+okRyQzf{VAb?1D0OWizEl(p9!r?Rct zsj|A!)nZBnZ9^d#Cp;wqE)o`j5!WyT#)f{g`xuaqBu^#Bfa|AP1#0an9?=ot7qY>0}60W$iS#c|BF zzmjG9fLCHamRiZHY$#{6hN7Lx4~wPsR~g{0mfD+WhG04z`cc(PCfjLm`2Hrt{lSMp zP`#{k#VvA$>B%n5ei8QMW$Pwgx%oCyz#B)BjLDiUW&b32ie`1fx$K}X$Y!(1n zAyMp&6bYC+WWQm7EyH$jbLgg0qm)QBO65)XhF;v(O_fT!sKPe=4KOeiIkYlrsOvU# z2Len^==M_oSm{u*P}M1@2yqA9eaz1;~v;| zD)4e)H9uMdqG**DTdR}ipAc9=@F;xqyMKfMSU<=zsyye>W$XKnk z7>$+|VKr1LRxd*j@vUI2jtai`w;EqAZsT+Nv|8@+fJnryEFD+DGw?#isufvQboI-s zpk4Lr6a%m0GeoMpSEjF%udH6~NH%sqg)n%5rqXQIR0*oG4c#f)6_u6BP64k^@0p>P zT#tPm*D}+h4OMPuLlpRIaKk7kA|a!aZOfN+r%IQ*DwI6}L7!gF>+9jG6`fpemnx9E zz$k_2T1hV`ovNK~nTG5T%2{n_bP{*tP_>}Gq!NEk)q<0;0v%kPZ%6$cvwvDgr1N!J zm2JF|$nu72!*+w-`kzk+_+&{XiQ<;>{X~ga!DdSo5+XbU&%S5MCxII8{2%WmX<#Ba6FbY?7drW%MiVhB?PgfkPYrmm1a-p3Y-?XTBt6C?9jTFb*t@wiA2HBfB{(w z1@#b~pRkt%kX>`&ozDBnwfB%+0RJ=UEV83{H$AP6bI4YBxOKSQd)kdv<@_Xmc( z!|hiVTuI@~0nm_1xkUl*+|QTv?jJll2rk+Fwg>HhH~u5f2UvFW*Ai4-j5F3u7HX6{ zZWS8w5|J9E1hG~c0ne3$OR7wu4gFvyq$Ym8p{uw&jZ#RCHODyfP$j>DFMaTK80h)h z_Q?S7kXluqIdEn3?f5hoQ@cQ`8M|$};+Tz3k7~eM-eu zH#zmOM#$JaC$Poi32aqvhyxtr#K+S!^fy_kH7gWalMrAm_Pfl3C=(}<->lRt=v-<= z4UyZ>)E;K5CkN?dHj}gD+R^uv=LCrr90B-%@%(K3gBuL$^_w~Sry1qXhjYH3q);cn zjz9a7vCC7BCzy~(3W0z^f-CETn$uy=vnDl@8{v&2XFVUsYnB}-?meQRJbfT~$5MDD z?4N)8y$+^m56~Eb)P;uZtp){*n#JJA$dsdO1UtDR$FAp+%eB`|zZ`2yVyGuUtBAp% z^XX``h~D`HIs%{@a?;Y?^*eY*;K#QQS&Rd9b;e_MSZ(cL3x|?{!zLEYYN=?W-7ea& zT5h#4HqPFs8&^rKEM*miQpe*_>nkZtS(7Rrs=xbF0f{9OiC9t+5;{^J&u@?^Ko%dZ zl3}pLvnZU|Va7)Pd&J4HXf4r794Rb1MS=aQg zY3|(T+2{R5g2Gdx`J4vDoVn>K>l5O&i!Ip#YI)(^h^)L*OGQ|awnWJ7VOhD^e1j4;uoacc5X!nwl2^<-kF7!4D^R;1%%lkK9dwr5@Bw1TCk zp4>h9vQT3%G}?;cnz_UH-7k6`V^$1Q4paeSH(9WA%m`Q9-|%mIK{*QxVwHw%p$1&e zMd#OqaZTn%oR~OVKPez~eDs6qhp*pt9Sh1w{?5E zh7!r%Jv(=bL_4vEdFt*xV7u%vrb}>m%)@NXefO}ns^JJWAhuNSnF?J>ohXQH~+vINPfQ z^W)EdEJ@|6n34vI!|HQJ8(PzU#OR@=wK#RUsJt|n%bEQ=t?*@;kO4utFdjht(Ug#* zlq<-|FB24g*pn&^x@-(LK2}?)O|8Z=4iV4|JymIk(4cTC4mk^$(l#E{C2z|BY>Sdt zZd1--|1i@Cb5k4Sw*z(=vJKryQlCo~Qy7g$rSfgzH zFQ~A;i!UveW@Kiti@Q)vMOwD66(aN$FjeW^GFdTJ$6#P|(jqikTvY7U6zN5`1oS^M z>%sqZxL&*dtGF=)B!0+|!M(<mnLuQmTPut$oHOD@DW&$_e%1SCIp>gT*8f^WgVU zK?=I(SP%I8*Gd}HV|zeGT>hgT(DHi@bADc1?Fy{3bd|(8l1? zB}yhSfd|w1`ChuPr+grt%KabEv{%Z9fNNAiOsz7C2lftb)|)qLXp9*=*~_NmO1PvH zUs8gb8~%@*Nr^X8l1CDgMv}qeeZ!c9oAhVm`HQRb*quZ72N~%F^A^__f~I}06c-?> z_q)FTG~GGbQ~yc@Y(wSHYX0gq1Fyzh^T$^sn}2>Wcz60(QC^u;N~W;COs^%ORF3q` zEe_yAn?wG-5D?*V5C_*GtIjoe+pYz3-8O|JW6`1viNfY#Kit;5-2H=DQ&^zhKK-!S%ImTxNhhZj?RgGTY-_=Y+?$0yfub zW`I4e$?4&-q1jxK%m90Qyl{HPQ>hf8ZN!GZCAVUM8DNk5fj#Lfr^ibhh0XN^Gr%7A zj??2!iE*}FvhYSXu8#m<2H4|<*^^GPJwnb24{Rbf*EMEW1r={djxmlohraG z{-wbw1Y5i1&u z)m}M3p7sTBY;e>%+U9MF6sR|S!LcE}%>uv|cp*5zzcN=kvaCVUhPmCf^2cAv#Oxb< zP}@d=+?l|!A+^myAeYRn5UBMIv1i2w60n&~F`57b4JfH}| zNAH$atV)DVr-w#@4MVuE!lIm@g(U%XL}EkBzcHv>CCQM4ej*_|;bXTjSonHmXKp)Q zGy1YwUS|nJG+~`7K}dBF4_2QhCc{*# z%*@;bVT)_3xcWt01mfy5=tP2G@wl&C|e96$=)W{@?O)&zy8*gh+1cR+^rYbOr#a<8qWt^UA)LOiYrJ9B#;r zqrXRfIx@1ZQ!GkSqG14#IvA3a8kfnRkn;TuQFuF<@5NMgY?QGN^5K4#Rv+OrQFT%p z_DXA0zB{TDgsVarY#bjcLgz^DVyUTmXTkwf7~s9F=4lfxOt>u3fUAHO4wzRfLfAA1 z0MER`TwyXDcZFMEw<`jTO&=-hiV{cTik68iEO@HGO|9ha(}JdiQ?&}r9SE&nEmn)r zXsQ>iE;n9DKt{!TIo`*u`PT?Tu0}PtHcg1IaBzskbOe;>5Q+>0uykd$5{2gZ=+|k} zr~+()a^Gktc3L;9#Rzz~@0=s(g4{JI;7x!{@MLI}Vi%-MY5iSLd%_rfddc(^ra(x}-{UVgrmlJtHa0@^*-p-ZQ3%k;QzK(C-a{a*Usu+Lm}r8%Gb z+83_+k0BwW-f+#BHO_g<+eVtV(GP{`l3peY=W1fwn%y`Ygd5s<2R0o6$8|pDd2Xfdr0LZr7OGMS? zxa|Kbfg3WwK1`7i5s?s%6EFgXW2k8V$)yu{Unz6MP5iHioyd4FH!(FP^J~)q@kidKi^%cn(b1c z=0RsV#87mG9BR0zbM5MIM-U+IA!a`aQ3+I{BFImm^y2~OM8b)344uD|zp^tvXG%^X zR<2x>As3zd`YVUds-_mo%Ia8xLZEhr;p+0eV>#<4X;&><6D)zkAQ9y5rH@enYb8nI zbI~P=0uW>kz??X75EhnSe*8n#ZX$?wFp`rtLbqj9wunE_r?@xZ%7Wa37zJ##ij(Ct z#N{`M)Zk6vz>YNu|IY!_;;d^Q0M7yRv|a}6>*Rm}M&EXReCqHTmV`4-J(KGI8?;*u zA^E-3rQYoAebLYa=td|EiiBoC1<+$DFjyokMp;bghuS?U@1Q7XJT!^R_)RtQ**r7f zo@2BAf5=NOzI*X-<-*F@l`|_RSB|ahS{Ylx+&h1F>F&G0$BXZTSl$Nw#BO+t-FD^&v>sQd;pOYVdzI?D^0)o4W?|Zu+-#LjJK{k$$wN`wuPOcC5T0bj%NG}>A1y?21 z0AHdwEElW|KILD-uiAIM5Qb7v>f|j9KhkSASQ{83f{I^L8Z#_P0O99pZ}a$>u0!-%$xyxVy{{J-h?j zO7gfj3|woWZs>4i!n%X^wdZrYizWN`#B)T<_Y)3*7hi{yCN0{W*zhP1H{7GEHr`c{ z>LxsXIH}Ho>W`8+3ZaCrlhbup2o8K`3nOh@v1AV~A)V~G`3!S^3izK8t^~}}U60Wqg@l~q792UwBy0L8?Rxviw zU1$lX(ma(!+3;MOlP|w82Tk(9ssJm?pjyhMX&#j}L><#mB$+YKxI2-j*$6p%Z?Vor zCxuwrrr%#%G=KiMh!S4c1g5HqghjiTaBZULiF)v1)Y6y4@zYitq(mMY6Kz{7e?n-G zp{a+h;&ehdx6L8a`Q5T!ueYfSdWZPE%&Y^xA>7BrL(b7jvo`)MwN~nQ=02cY(e#zf z?f~WEp8}eS@}!hj3M^pqXGn(%$14cZ=ER}k2w|B0E-aIDQ!RUs0_!riF&tZ<)*(D` z4WGuB_~J`V&C(Rg_v&QP<*BxNVOWSohNqHrQ@K`>joA#k+n=MJNkLPY;z{`Dc6VTt zkbx$(MTd!NjS~SO+80Kf4v&~}ZrK_s$v3qB=R}4By`y3V+rGQDTCVaF)uOFYEFFh` zS2by%uRi?>t4q|b53i_UrP8?nO-?IiDjm|0V~N4GaD-a8ac<(?s@XE3+`*6zAjaNT zn!W&KFuUI||h%kz$w2M!e53e0y7%9jU{JetTv5`D&4A`O>|&5OOR@_#;daaiHdv|rly z9bI}8aw1ZdC(u1zgFc10h}VNHb$kj*d&KA1JB#2)+R$gY?p}Ep%haZM)yRfgHqQ`;Yw&m z)ior!I!>KlJNdDtQw%i3Sv+(Uba(kEA+;-3u|+;^KT6D zitoShoKH2m|J>Wb^>SkN-N{0TLSzw98dIDTN;K3%P!7$-a6b)3usjpL*3`# zM{N7hK%dAkmp7f!n3gC%=Wx3~6YZw_m`4}1hx$Cig=497$NIu)cfM8-gLuCYgZ_*& z=%ND~Bd4T|ufcuz?mI4p0jR~oqMu#Scpf4%-TWCK?BBeEYe$YA9w`it1@?x=vrAGB z=NrY+?r0Z-1*GzzeaZOS zXrnl}$#8SX`Ow(q{O)&6G`KN~_@0=l*BAH;cl_OL#~I$1Z%2E4k0;cmFvg0xgk6bjE^8ZvjYUhK5>$q+vyDoSzrM)ZDX=mmv#zG+zkY+%XV3>`{jz{P_>|QVZbZJZ_>@Xfo2}Vu?#!8XQsN#7;n7q0Kl3xGOFE-_~b z*W_~Ys)Aa~K84f%Vt(iw;)p_cj#^mQR#zFA%gNOTHdF-^&R{Ximt~PUSdL2QjNDvy zocs#n?Dmtel$qL-Aho_oD-soH70RYIW#`nu;z0l6m{_HzC0$Ojkn(K;(ubPQv=n zqfQ==i1MLVj0-)~%0mZ+Ex#T;Y`~~-{A{`jY6IVx?eK#~omjhmD5TEXfOvIBZGy=X zIs~Bah7#rIj#u}n77ZC{p?37>!I;@l4u+2tiaRsj?xeDsqS!%e%%Hu5sxQ~814}G* z6vl3|#ccy>ACCmxgqI3YjrowMOTSO@L!fDCJUXKbwf_=&dn z=(?7PWqQfr0^gEe$9QY z)`phNRjT}<8mmr_m~CCPHBt+atfS>{bf2ynJVnFa;h>`*6FvbO^@5{PB^0Zv7UF8zuCDDZ z4gK{&r33wc5SUCUi=EA3Vp`7h9eWq-Q$R9=90zD?F2z#0RWzDiE~Y!`SPHAVG-F@O z#Vrd1HdlR6LD#PHViuFhLhAKz6>4N-c7bH5x(kp`_9% zc}o^nX^uc(YNp8LZi>Jp$YGV4SA+XW#Qj9vdwBd++<^~73@TB;W-|FX1d1?=0q*V| z#Cx;|j}hEG!(Gk%H}6 zN6}j;V)Jzuf2ckgIjk*t#hgbUt0|U||Lb2W#gY`-61AMwS*H@}o_9B8guue%Y4NFe zetb2lWum9wHSe%qX=)qq?KetcQKc2A#!UwcN?)-|4E*tUa7L9e4-=+gzCt6~Hj2~G zThqXwJ+Zi+iT@V%etIVJpPJyhr3S$zay^?)EwE&YaSKqf8Ar|~vpBh$)!C9*hQX8* zJKnfDg2kO7ZM!rCVDFaA?JhAjoot5L_SEYL3|0l5Y!L~`)(Sd{p(EDsf!R;E-KO0o zWqT~(!2AJi$*j#*^6CMtq;WOX1!3|(YdoG1Nonh-tfYEQv}!4v~8$bh}2`Z8ji8R$8Hdzft8#MCvd^Dg-0*3;-l_WPzr zyt%>okrOC9w)TaLN^v90RXg~Zub&l9&^zbw{igzs?+oLGdlv$7>*;huwovU*MIT7m zvbl-jCg2+xP2gcbBY|HYHjOdj3GK+_!oCgsr~+iRipOS^I`NX)K5IbvuBhQmG$bua zVBW}&(xO;uE}fxw(v={2zJ5XKl`hnSPv=jGr82%iDifa?I$5mnbgELNB20uc~q~w7yNO~^rN)_K<&KF2BDZ;MmVn?!VKje zs35XM4PsuG_ADMH;UiHfE+S1rB&NxDs6v>{5)ya-DhMp`i6UNyR?F*Z5T7*TFQ~mg zc!N_%Vo@GqYUd%-q;XkF1at<;Ge-hYyRf5Gq_OmwW6NgF4q&o{I*nSW%hs-!&%_q@ z+sv9)k+4Ij3b}J5bV7xedF~^mYWOnHrece!3W}Fd}63g)i)I%9c*5+1G zk$buhQn7u%1WRVgB{JQC3KB~KT7c9wx^Q2P2`&At&L!*tVE+_H>W{&B=vd0(BgxK=iK(s-@ouA=2;Z@ z{QF{qegKp+#J09gLNAfa6)+e)0hf5iWUURx%bzPik+{{=GbhcAY;cp%@}or(d~%J1 zXLV_0a6f3PNYbg*$~rqm8jXcyc?}hvU7}n>3ojKVrKs}?va>Y>YPE{9g9odNL~DQB zSY?Fw3cWvGSXXnF)a%||d&(ZO zR#EA8nb1qX1h`v30!Z)JerW1r^pTIy(}0|Z*@K=jb(y+$%%O*k`)&ItE&Gi7Ky&?3 z)6wa3F&Cm{Hyx=yGJQVkVhqrsV_f*D=BPV~uMKyNc7b;r{&r2*KN3E2jn{*^Jx_uW zm>?CTJY7|$QwrS}HZv(O9}-xWN+AiQzA}=43JWX?4$MzXz6HfJ3zcO$6&6w+q(UQt zpMaIkLwklmIX)PHW@oU5W(@RJa$*m`ZZIlIAoG=ygp||{Abm+pHpUHg=^o5l)d4)G zv{bm!_jFxIWI|?+HQZ2E?*83dL%&UhSDC?8y5~`(7uLf1)gAWT3~)Gl#<~LJja7w# zT8`EMX&I`mHAJC6J5)hcb62dWm@QTch4#^617_`}A7jKHp-TjT$xcIl6rU!@sl&Vl93L0)ts-1E4mzmLYSU4j&6B&^gh0vJ6AM-z2O+UIp2^uq`eWfTf3;SL4cH(vd zmnUQ}ctS1#sGC(>)#lhpx7%HsMXa#VH9YVIMnMV6fCF)Cohha^a4 zpV%Ws`$FH=g$FGdZY}pp*5r>e{7`Jlgn(6X?w8tMt^_zIx}OQU zcDfcGJI2e+i`C$gJNLZL8}-wT)oal->>k*rB8ay_y;E<=UPpnG+3J(>ELr3cr988U zn_C@@W=~z!v4ft2$E(0S&)C@LXi3TFnAhv9*Xt>rb!;3=sb+C4;(~BF*$()dTZ~n8 zuV;8fX8q0r>tLVP7=PIXf;qs&;UU+_z zgq4{B5Bqq3TeHE6^%ipp%S2et>&W{>Phb`X&w!TK z(Ik{M@^q?pRdzX=C2J6H+SH@aAT>Xmrs3^;{&|7mOe!3{8PMlgFQ19lY^pARpiKWj zxcCsWjJ{c^E1#AF68W4XWmegEr!-&F5yxwmbhHW;%G>U47n~!CZTYG1L$edc;YGJX zxv3}_m1>A>2;@`bJhn!oWrEZ{0%+{#O3zErE&I;2AolC0Fe4*7C^krl#ac!Fvy=@f z9OhXiA=$MT#Ic`!C&T9pBNFkkpMDpgfh-}$2Oh2t3EAQ%F~1`}pWoFa7H1bzKCSjX z^oFNydn8klX`hnH0U;Np$w=TTIx||Ahtm&g9$bbvr^?lp<39S?(z3Z6SE+8Av$^?F6Pp(0heMx_-+n|81sMTm(hq4c@TH4ws&F>HL_V6I9_o>-GGwa zkNUWs`DC)@xsl<6iK}iPdhTA_Q~mVw{qa8k%n(1fMh=>mzj&%Xf>J*<11D9DLaI{* zDk4}%uVn$kM+1w4{fpqq6E_n^b{juoF0pCzxei#3HeVRGE;R1qd|mz&o!i>nbfOt% z+dZPiGguY0@i+5t#D%VlJD&g6xSqiR@t;HTt_!sZx&FW0`;0!f@3<{4`QgV3!}fx2 zOTPubzv4dR2B5A34u}A(5&`68C=u3Y7hhp}feJq?Sm=3(Ngd+*-q;4$&0n(2Uv`9V zcX_Ax-DlGHd;?rJe@X35c9jg4&lkjX^OxptJK5*ILQsl1#}IGGPXKV;{3ZAK%Rbr3 zZiS)q`EGFC{3TZud&f#P5wqwK%slXY2~=D+f5`>@vYmXpW6Jw(Wh6sZGF~41(zdr6iD8jAAmy1wx<%#U_~(9`3e(hhxBBv0MT4hcZt8kd{;o%OEzu5L)M0eQ^@<>B0xB;tL?a?{h}iTxziY((#V{W$zPtYV!BDYmo<(rWRr}OXx7l zVCA{31#s^`huq}k^l+5-}w}Y^$;O&;x z2HXS!Yy{AiQ1?5A(iArVY)K^U#}e92H~=`XvAW@#{(k3 zYw$!t=Sx~6Qn{d=$M5?>7XWtl1Z3L;mxGu``uo)J{K?TnQbw$rgn_j^AjLFcOF#hF zvMCm`qElVVROy)CSE7c##1kIMwjGQG4#YCa{1mA4SYIC>r-jxIg}^2WYB~RW51IdS zgrWe0xz&K;KF`jebr`Ay*=kNG6>JqrO`f$Q0w$kIDg@wq7#g7Ki_5sRxg@dsV}3#J*>M=8f@mA;omi2+`S;+% zUKQwqlF;5+m89`*uvQqbyYyZ|#_R%XcA=2k!3KK=Cf+w+3_fnV6c?0+!U58H#MCyx zfZc_gaRf%b;K7$9DT$I6mbLyBlr6}=LOoumu7#5i=XowPcQV{rYL$^`#OIi`Re;;Dk}@Gz#Fu*G2(=hX8{wU^O#8J_`f@ulu+<#0S)|Lwtpr zJ;V>2p?uBhL;S6!J0t)UH57Ww0jF9U--qAi%E}a&t7@?ALXFv<;R@AC&e>pT6{|%G zjdMI;lg;r{h0Cw5v+^-RK1~+eW4fvGmaB5sRq$2X?1a%_ zYG^^JZnEu)=IiBj=R1hbe*#E-{D9wI0sU_v2*g^!)(H_ROt=VTvXP)}YoZ~+5z7r}{8D;X3YRf+KnU8(qQ@=9%%ICgtlEt6KT=lhYSUvEYL3TDZ z>eO=B&8gldHxieA7TlWMx0y$aR$H|BpFOr}*P+uxzguw4DW?+%uDj!gGtRo;qIaEh z-h28Tb;TPlB?x%^5y%?V%?gDt|AxS(hi!N~7vFdVTk|M7k;h;2zl-sjP9zd20001Q CEPT=c literal 0 HcmV?d00001 diff --git a/client/native-shell/fonts/poppins-latin-700.woff2 b/client/native-shell/fonts/poppins-latin-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bf022fc77e764ee16a6d45fae8ed5016110ca2fc GIT binary patch literal 7816 zcmV;39(Un)Pew8T0RR9103L_{3;+NC06tIv03I{|0RR9100000000000000000000 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 a#rF!vrZP-gD&O<}^};ukMx!zS00029z2{T_ literal 0 HcmV?d00001 diff --git a/client/native-shell/main.ts b/client/native-shell/main.ts index fd8cf0413..c68e7db1d 100644 --- a/client/native-shell/main.ts +++ b/client/native-shell/main.ts @@ -782,7 +782,17 @@ async function start(): Promise { iap.isAvailable().then((ok) => { iapAvailable = ok; }); - const { url } = await TrekShell.getServer(); + let url: string | null = null; + try { + ({ url } = await TrekShell.getServer()); + } catch { + // No native shell under us (a web preview, or a simulator without the + // plugin): there is no remembered server, so start at the welcome screen + // rather than leaving a blank page. + showWelcome(); + await SplashScreen.hide().catch(() => {}); + return; + } if (!url) { showWelcome(); } else { diff --git a/client/native-shell/shell.css b/client/native-shell/shell.css index 2946ffd45..93579e982 100644 --- a/client/native-shell/shell.css +++ b/client/native-shell/shell.css @@ -4,6 +4,34 @@ * background and never flashes. Everything past this screen is the UI the * chosen server delivers. */ + +/* + * TREK's own type, self-hosted (latin subset, bundled — the shell loads offline + * and hotlinks nothing). Poppins is the display face across the app and + * liketrek.com; MuseoModerno draws the "cloud" of the TREK Cloud wordmark. + */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('./fonts/poppins-latin-500.woff2') format('woff2'); +} +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('./fonts/poppins-latin-600.woff2') format('woff2'); +} +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('./fonts/poppins-latin-700.woff2') format('woff2'); +} + :root { --bg: #09090b; --bg-2: #101013; @@ -18,6 +46,11 @@ --accent-ink: #09090b; --danger: #f87171; --ok: #4ade80; + /* The hairline the ambient grid is drawn in, and a travel-dusk wash for depth. */ + --grid: rgba(255, 255, 255, 0.055); + --wash-1: rgba(129, 140, 248, 0.12); + --wash-2: rgba(244, 114, 182, 0.08); + --font: 'Poppins', -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, system-ui, sans-serif; --radius: 16px; --ease: cubic-bezier(0.22, 1, 0.36, 1); --ease-in: cubic-bezier(0.4, 0, 1, 1); @@ -39,6 +72,9 @@ --accent-ink: #ffffff; --danger: #dc2626; --ok: #16a34a; + --grid: rgba(0, 0, 0, 0.045); + --wash-1: rgba(79, 70, 229, 0.07); + --wash-2: rgba(219, 39, 119, 0.05); color-scheme: light; } .shell-logo, @@ -58,7 +94,7 @@ body { min-height: 100%; background: var(--bg); color: var(--ink); - font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, system-ui, sans-serif; + font-family: var(--font); -webkit-text-size-adjust: 100%; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; @@ -66,14 +102,33 @@ body { -webkit-user-select: none; } -/* An ambient glow behind the content, so the flat dark gains a little depth. */ +/* + * The backdrop, in two fixed layers behind the content. First a soft dusk wash + * at top and bottom — a trace of the colour the app's photos carry, never loud + * enough to read as decoration. Then a quiet grid that fades out through a + * radial mask: depth, the way liketrek.com's hero carries it. + */ body::before { content: ''; position: fixed; inset: 0; background: - radial-gradient(60% 50% at 50% -5%, color-mix(in srgb, var(--ink) 7%, transparent), transparent 70%), - radial-gradient(50% 40% at 50% 110%, color-mix(in srgb, var(--ink) 4%, transparent), transparent 70%); + radial-gradient(90% 55% at 50% -12%, var(--wash-1), transparent 62%), + radial-gradient(80% 50% at 50% 112%, var(--wash-2), transparent 64%), + radial-gradient(60% 45% at 50% -4%, color-mix(in srgb, var(--ink) 6%, transparent), transparent 70%); + pointer-events: none; + z-index: 0; +} +body::after { + content: ''; + position: fixed; + inset: 0 0 auto; + height: 640px; + background-image: + linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px); + background-size: 54px 54px; + -webkit-mask-image: radial-gradient(ellipse 78% 52% at 50% -2%, #000 26%, transparent 72%); + mask-image: radial-gradient(ellipse 78% 52% at 50% -2%, #000 26%, transparent 72%); pointer-events: none; z-index: 0; } @@ -213,11 +268,12 @@ body::before { /* The big hero mark on the welcome screen, with a gentle breathing float. */ .hero-mark { - width: 76px; - height: 76px; - margin-bottom: 18px; + width: 80px; + height: 80px; + margin-bottom: 20px; animation: floaty 6s ease-in-out infinite; - filter: drop-shadow(0 10px 30px color-mix(in srgb, var(--ink) 18%, transparent)); + filter: drop-shadow(0 14px 36px color-mix(in srgb, var(--wash-1) 90%, transparent)) + drop-shadow(0 6px 16px color-mix(in srgb, var(--ink) 22%, transparent)); } @keyframes floaty { 0%, @@ -231,17 +287,17 @@ body::before { /* ── Type ────────────────────────────────────────────────────────────────── */ .title { - font-size: 1.9rem; - line-height: 1.12; + font-size: 2.05rem; + line-height: 1.1; font-weight: 700; - letter-spacing: -0.02em; + letter-spacing: -0.03em; margin: 0; } .title-sm { - font-size: 1.45rem; - line-height: 1.2; + font-size: 1.5rem; + line-height: 1.18; font-weight: 700; - letter-spacing: -0.015em; + letter-spacing: -0.025em; margin: 0; } .sub { @@ -263,10 +319,14 @@ body::before { background: var(--accent); color: var(--accent-ink); cursor: pointer; + box-shadow: + 0 6px 20px -8px color-mix(in srgb, var(--accent) 60%, transparent), + 0 1px 2px rgba(0, 0, 0, 0.25); transition: transform 0.14s var(--ease), opacity 0.2s, background 0.2s, + box-shadow 0.2s, border-color 0.2s; display: inline-flex; align-items: center; @@ -284,6 +344,9 @@ body::before { background: var(--surface); color: var(--ink); border-color: var(--edge); + box-shadow: + 0 1px 2px rgba(0, 0, 0, 0.22), + inset 0 0 0 1px color-mix(in srgb, var(--ink) 4%, transparent); } .btn-ghost:active { background: var(--surface-2); @@ -358,6 +421,9 @@ a.linkbtn { background: var(--surface); color: var(--ink); outline: none; + box-shadow: + 0 1px 2px rgba(0, 0, 0, 0.18), + inset 0 1px 0 color-mix(in srgb, var(--ink) 4%, transparent); transition: border-color 0.2s, box-shadow 0.25s; @@ -574,10 +640,19 @@ a.linkbtn { border-radius: var(--radius); padding: 16px; background: var(--surface); + box-shadow: + 0 2px 10px -4px rgba(0, 0, 0, 0.3), + inset 0 0 0 1px color-mix(in srgb, var(--ink) 3%, transparent); transition: border-color 0.2s, + box-shadow 0.2s, transform 0.14s var(--ease); } +.plan.featured { + box-shadow: + 0 10px 30px -10px color-mix(in srgb, var(--wash-1) 85%, transparent), + 0 2px 8px -3px rgba(0, 0, 0, 0.35); +} .plan:active { transform: scale(0.99); }