From 714dd79c4646a6e8c8db28a5600a613f8fd3b8c7 Mon Sep 17 00:00:00 2001 From: Kentai Radiquum Date: Thu, 13 Feb 2025 01:54:42 +0500 Subject: [PATCH] feat: add Footer --- src/input.css | 20 ++++ src/static/css/tailwind.css | 100 ++++++++++++++++++- src/static/images/GitHub_Invertocat_Dark.png | Bin 0 -> 9316 bytes src/static/images/Unsplash_Symbol.png | Bin 0 -> 3503 bytes src/static/images/avatar_48.jpg | Bin 0 -> 1788 bytes src/static/js/checkstatus.js | 75 ++++++++++++++ src/templates/Base.tsx | 3 +- src/templates/Footer.tsx | 60 ++++++++++- 8 files changed, 253 insertions(+), 5 deletions(-) create mode 100644 src/static/images/GitHub_Invertocat_Dark.png create mode 100644 src/static/images/Unsplash_Symbol.png create mode 100644 src/static/images/avatar_48.jpg create mode 100644 src/static/js/checkstatus.js diff --git a/src/input.css b/src/input.css index a781826..eb5e11e 100644 --- a/src/input.css +++ b/src/input.css @@ -1,5 +1,11 @@ @import "tailwindcss"; +.ubuntu-regular { + font-family: "Ubuntu", serif; + font-weight: 400; + font-style: normal; +} + .ubuntu-mono-regular { font-family: "Ubuntu Mono", serif; font-weight: 400; @@ -11,4 +17,18 @@ font-optical-sizing: auto; font-weight: 400; font-style: normal; +} + +body { + position: relative; + + /* Create the dots */ + background-image: + radial-gradient(circle at 1px 1px, #33333366 1px, transparent 0), + linear-gradient(to right, #33333366 1px, transparent 1px), + linear-gradient(to bottom, #33333366 1px, transparent 1px); + + background-size: 20px 20px; + background-position: 0 0, 0 0, 0 0; + background-attachment: fixed; } \ No newline at end of file diff --git a/src/static/css/tailwind.css b/src/static/css/tailwind.css index 29e16d1..40b6283 100644 --- a/src/static/css/tailwind.css +++ b/src/static/css/tailwind.css @@ -518,6 +518,9 @@ } } @layer utilities { + .invisible { + visibility: hidden; + } .absolute { position: absolute; } @@ -530,6 +533,12 @@ .inset-0 { inset: calc(var(--spacing) * 0); } + .top-0 { + top: calc(var(--spacing) * 0); + } + .left-0 { + left: calc(var(--spacing) * 0); + } .-z-10 { z-index: calc(10 * -1); } @@ -584,6 +593,9 @@ .mx-auto { margin-inline: auto; } + .ml-1 { + margin-left: calc(var(--spacing) * 1); + } .ml-auto { margin-left: auto; } @@ -596,12 +608,21 @@ .grid { display: grid; } + .inline { + display: inline; + } .aspect-square { aspect-ratio: 1 / 1; } .aspect-video { aspect-ratio: var(--aspect-video); } + .h-4 { + height: calc(var(--spacing) * 4); + } + .h-6 { + height: calc(var(--spacing) * 6); + } .h-8 { height: calc(var(--spacing) * 8); } @@ -620,6 +641,12 @@ .min-h-\[438px\] { min-height: 438px; } + .w-4 { + width: calc(var(--spacing) * 4); + } + .w-6 { + width: calc(var(--spacing) * 6); + } .w-\[114px\] { width: 114px; } @@ -641,6 +668,18 @@ .flex-shrink-0 { flex-shrink: 0; } + .scale-80 { + --tw-scale-x: 80%; + --tw-scale-y: 80%; + --tw-scale-z: 80%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + .scale-90 { + --tw-scale-x: 90%; + --tw-scale-y: 90%; + --tw-scale-z: 90%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } .scale-140 { --tw-scale-x: 140%; --tw-scale-y: 140%; @@ -653,6 +692,9 @@ --tw-scale-z: 150%; scale: var(--tw-scale-x) var(--tw-scale-y); } + .animate-ping { + animation: var(--animate-ping); + } .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } @@ -671,12 +713,18 @@ .flex-col-reverse { flex-direction: column-reverse; } + .flex-row { + flex-direction: row; + } .items-center { align-items: center; } .items-end { align-items: flex-end; } + .items-start { + align-items: flex-start; + } .justify-center { justify-content: center; } @@ -689,6 +737,9 @@ .gap-2 { gap: calc(var(--spacing) * 2); } + .gap-3 { + gap: calc(var(--spacing) * 3); + } .gap-4 { gap: calc(var(--spacing) * 4); } @@ -701,6 +752,9 @@ .overflow-x-hidden { overflow-x: hidden; } + .rounded-full { + border-radius: calc(infinity * 1px); + } .rounded-xl { border-radius: var(--radius-xl); } @@ -714,12 +768,18 @@ .bg-\[\#1A0F05\] { background-color: #1A0F05; } - .bg-\[\#3B0D25\] { - background-color: #3B0D25; + .bg-\[\#3b0d25\] { + background-color: #3b0d25; } .bg-\[var\(--color\)\] { background-color: var(--color); } + .bg-\[var\(--ping-color\)\] { + background-color: var(--ping-color); + } + .bg-white { + background-color: var(--color-white); + } .bg-gradient-to-r { --tw-gradient-position: to right in oklab; background-image: linear-gradient(var(--tw-gradient-stops)); @@ -738,6 +798,9 @@ .to-\[75\%\] { --tw-gradient-to-position: 75%; } + .object-contain { + object-fit: contain; + } .object-cover { object-fit: cover; } @@ -792,11 +855,24 @@ .text-white { color: var(--color-white); } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } .transition-colors { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); } + .duration-400 { + --tw-duration: 400ms; + transition-duration: 400ms; + } + .ease-in { + --tw-ease: var(--ease-in); + transition-timing-function: var(--ease-in); + } .hover\:border-\[\#FF851A\] { &:hover { @media (hover: hover) { @@ -883,6 +959,11 @@ } } } +.ubuntu-regular { + font-family: "Ubuntu", serif; + font-weight: 400; + font-style: normal; +} .ubuntu-mono-regular { font-family: "Ubuntu Mono", serif; font-weight: 400; @@ -894,6 +975,13 @@ font-weight: 400; font-style: normal; } +body { + position: relative; + background-image: radial-gradient(circle at 1px 1px, #33333366 1px, transparent 0), linear-gradient(to right, #33333366 1px, transparent 1px), linear-gradient(to bottom, #33333366 1px, transparent 1px); + background-size: 20px 20px; + background-position: 0 0, 0 0, 0 0; + background-attachment: fixed; +} @keyframes spin { to { transform: rotate(360deg); @@ -990,3 +1078,11 @@ syntax: "*"; inherits: false; } +@property --tw-duration { + syntax: "*"; + inherits: false; +} +@property --tw-ease { + syntax: "*"; + inherits: false; +} diff --git a/src/static/images/GitHub_Invertocat_Dark.png b/src/static/images/GitHub_Invertocat_Dark.png new file mode 100644 index 0000000000000000000000000000000000000000..10b895fc85584b3bde007b2a3dd25ddd57c6c759 GIT binary patch literal 9316 zcmZ`L_rIfINGe0=7R3?r0TgKv#t213V!&un=>~z(DGdVykWf(?iP0U>Q$oqn zIHZw=-{t%N?~mQxd+s^sd0zK9&->I9{YXds3e61~006EaG*tBf0D=X7iBuFI#nS3d z75GQ(qG99?0C2v`AH=6X!3zMm0fefOzR$bA(*v%PJ!4(lb|`PrW`BL^$`<1~MpowF z{}?mk(UOd`9IZW!wAU^#*IPASz~P3SKoQj`ypCr?LYRab^JDt(;*0)ya<5h9eCQAJ z!?np8XA-^CrOtxFy6)w$o?CeX@@V)!N^>V_N4-BVb0<8iaqPfkli)wpje zd~vL5s<}fg6X&8Nb}Ba3mrxk4VRHM3PQ9eh=#2rXPZ(6|Fn&?5gb%0xPQ~bhUn2Bv z0cviTfc6N3J|xs9>kS3t56JG*`KLnP6yyt7go-o3S;IE9G!f6v)gx-!lqS$FVNk!6 zB{dHIXSsKydmj#2xOe}N+zWP5vTKqpBwcEB5MTYFiGPn8*6*s~)(e9g|DsOK%!mH4 z6pMI`8Wv%dS78f-#`8X!W0bUyb7?grqlur;FzzAOwlSemR;`^wq{Ez-NR~AFKjh#j z5z?08fENS&^Fa=(FPsJ$;TmItbFy_XrFzK-XRi8DfQq#c-E-y}9}ro!{TS_%$y#@n zwKmP8ofqT4gA#0Wc4=U-^JyK_EJ-mkgoO|o;nce-=67+AEV>^kKQ5K5x9AZu4MT>! z`iwfEk7#1}qAnMy1y1DnVJ&~hrgkRs7;Qp5{JS{+9#0Bgn*bz?hDo`HKg1=P^+QM) zqeK!PidXeBTA3=!P_bO((^t3IfbHb zJWq^ZA$DO%#fpZESl??o&}AzUm0GeE`rtbqN9HYsQpvWoX}|bTwBlqGw9B!mp5abb zUn|oVeH&lbJ8NcSP_eLs(-zTN5X%2UtCS^G3gVhf9)nN0Vwj7QWb7tv@) z*Paeu&a}UF74>k=`A!3azX9;VL!9q}`}K@wW8)Y!L|GAb7vv8Xt05tC7Fdh9X49VI zeqAvg_RQ^eD-{bjYID&b)zk=<%zGcpdGsUJxg)>;Gw~|D-kH`^OP30pCFVe{x~b$; zaWPYucvVbfj5J8(T#pROPzgmKFV5naM{w^j7Gm5+Q%5_hVMuk_P)M(TqKUSF5sZm1 zqVxXNS7bV`Atu$d=Wn!dF*KTyfKOIvTXJ?Cx`w71sYr)#SBt(l z{SOiX9y9A0Boxt#DfCa&XAm7d!!ATs02tc8~8IJn~@A%H&9*%~Hg&-*V7uzoHa(gNI^Dpnv=w!&< zOcx$Qfb|WkMT-|j#R5Pw^jrA3;ABt?MoSQ#Oa}u;#RxKr^+rHjNx0E=$t=QL*HRYg z0xr0`MAxS3SO6cjibzwzaoqYlC#^Do%JlLH2A}t^0$g#49#*ERv&l5DAW8(N=%xJO zL8&!AGkod|tKy=(wXdtAsj7K$#_-UNrQn(<@jj44$yGDzXJOh=m`jfp5iQ|Ab2Oy{ z_V}ayTU9yW>o$ z36!B5Et+@6&R4t!o*TQmj554Vfes0rHXzCpd4EUULY}4zkVLrUo0D<*=Srmd7#>OB|t7?^U&5!N#$9n;e(z=rI~$Ca{2NRdc^U!;xTt3 zuNV0>I5W!Y!35M&$lf+LPszuRJ{4Qh@L94rwkRiEh>{r|D6?+%!%zJ5L6>2n!n(Vl zRBqc?-jvJe0IPEdGaGqQekABczQJ=@@Oq2kAFqkfTWPmBe%-e;DMlg`kjEki+H`R? zd~136uS|;V_{>a2ANplILWOxe2x55OM;6)6zjokQC1vz!qrM|E|AqGLVeyi*{G)1P z(PEm6x#5hfJzE*RD-x}v7F7kK%+6o;$HC#YW2xo8n;MY>;L`T`s*SPft@CQ0^r=}Q zMbJbNDj33Dd-J;`b6Z;Yo}_hpY+~!0)6z1d9VATCF^0g@v6Zn_HlZ5Xo*%&`bmy@5 z0{0PixVjOWPh^nZL8SbCbcDYNji4*vK!wP&*(tV~X^-^ggr`kyjX(X|I)A4aDppbU z%B|96+i@~=5cpm74L-*jWHwTeuWRXfy{YE0jQcHZ5s+(VFhMm#>^jSCcly+eH^t8% zy%>4B6$^Kge7zv)GLbj+r}XnfcEMVcpz*vZrmc~L<(fYzmN&L#8jNOYN24}(5f`I` zANEPrLvGG`kI7^Ck2>!@`P($Kxco?6+HWO!sWUCVSv>$>M&_^T^`vRE>9HS->Jx=s zj1YIxq98HUaC+itIt*EGbn)Zos=v92j#~W2_fK|@gHkk|ZCQU>R7rHhBq$QS!37bcM!XOD&Ffwe!Kujl_{)4N`4 zO1g@t=$SbzC0rB{#j2C)%O`HmDp*DIDHlo6cor3vcSJ1aj~e)Fnkr%nI-eQ6<9a3~@$w^bHPoy}D}Bq|(l*W9I> zFVS(0;XZy#XWS3NP>y} zS_Gx)&zbH^eBbw~rJDj{V5na){^~O&CqHV{7~rM}^%Pa{gzpA(O4}CcLl|<880dfd z*A7>)cW7P%cy8qTU(a>Vq~FQ_Fogb-z!tOi@Dg$$_ox2>-g`x2^Jp6Y7HT(kTm7K0 zY(I}Xk!fS(K+El!lS$jX+@V36nFT8d&?UV|4ECdj1<^+r&I&;Q%Y)Y0{|>DKJmHP; zqY%Z}Q#G-8;?mjaqRY0G$CKs&SLTK?h)E+VNmr4TkjuDXpB`0mAVrB0e}CjCAhgDZ zVr6>qc_@t)Fuq+3jq2&$BnpMc>PnaNyzMK70vHOo&ilOkRqmPZ4-Y;?_`+Ir9849h zb^e&$kA(Im$XX~fmZg}$7&24R1+wutv2nbagDD_p@s1lmQ$#dhzY3QhD5;ZQ3lkTi zU}fF$YKkUKse1fHm2{{E!t9DzNwr)o#s_@Iqt8kR62!xUmSI-(hi`Ch%lCEIF~WRl zLuSur$u~HVk%OmD#>rGlU4$$X?IYu9GUkNAK#n^!CS^+4XOVyK29 zaiidA?cr@8efNEQnpcaD?HD=#T)?E9sG}^_sBfq{@GiKP!drP{urW{m+)*`gg5^TU z2XXY(IHtW%qhHFq2+2$2{wBx&Re}R!GCd*G4xW#vKDrZVa?Ib|rQnu&?T&FNcdaiT zdpAHqTbjCuHdR%&)mGU4LfQDKflD|hO6FfR0dg)iY>zMMMXpnMc;L1Dl9>+OoEo`ds;@& zz0nbr&wr>_#P$*DX}K6}l;We)hL!%h_@12H2Fzshkd zAsqS3{7y>cZv!G5kr!Z>#C|J>^I9&w2+~-Qcn5w9fX>Qi-MVzSz14-V;V5*pDD4EH zngIQZKtOp3pI+(A#(C9X!Fo-6?}Ub>3~f|*m7&~Nw8D*-qHP61E8v<~$B3}jc<2)gZw+_w(3HXF-$b{g-kwy=_jgtYcw$9nA*GK7I z%b=;O4ouZyde-GAY|U5n=uFhz4En2pwXJFBiP;<3N$yM zXe+Q|b0VSOcd!8M{YH4-*OksWStvNIy&=(ILVx+P89ml&Wp{z{l16I_a;XN|Ynpk% z!;tPG3KUGs32v5_%^$D>)CBx=TO9y|E)=yagVFa^E-AkIz}Nj~L)0t+nsPMoieMPP z9YFiKN^j$QUKn*c_)4-8H2D_$RkJs}-a*^T!(4Mu8zwMohQ=_4=-p}a^$6rWCytTd zWty}ZSK)$ezvTk62MgrP>|4SPk47np_j!}X6?jm;O^jgx+5<@>xqSY01(wbu{XfO4 z>0{)o^TO(0?cx5l>@^nD5@LvhOOoSRiZq_!&%Hni3ITCLqVpEbeXhFx0>r_kzrng4 z2ep2XkFlE<6cr6Vx8)+CyLSe*=1D%j03m@NE^r@PO$9^Ofk4Ttw1UU;r5v^7KfP32 zKSNMNYbgIua?;KJL%S_Ma$BwUqMIgdOHP{%^0>d>( zP<~kU|GB)m1V?fL9tv;-0@`q_g!Be-wfv9uYS@j=fw9=j3Ro|k)RUK&Vb%01(H zY`*m5^8t`FnDLWRumA+_hqSStPcCgwk~X|%;XdplHqC-Ze7=)HOa0P$G--OkO)p&= zt64e>n><)VjM5Ugv?lmpl(lawkC);xsGV0IF+^yKDgRdjE|OR+2>(=1ncnvaUk*$Q zx&&@1FqJ`gz(3`U!k*gtw5U;C{V-cZD^#CWxQB<2O;OW;%Ck;GlJS+-WpyI=uoyu!pE33Pi*Xr&&jn zf8l-f*6nqg%6L3i5XHtW1WM9~FG7~{%8Sh6@L zNi13N@c*O-`WkS-#4F(>ElS{kOyyGtZ^Qb^oMhZ-sdUp}%9Oi^xN) z;164edo%N8({GY~+I7ziG8|8;RZG$3MYXx`jJGm~DXPmGo>!Fcxw0v|@zl?A**;LW ztvN5FV$I=eMkJ%J&s3}lN&Q9f*I~s`8g+KbT=s*yGnEK8_RGM8dI)EzMj<&L8s2;2 z`oQU{=LKP&EA^?>!slm614U4XGFSke6cOD}D~od&Sx%YsfHO_^WehG#84nhNZ|Cce z{mYfyUdBpgpZ=(Ep1l!NaiM!wW1}Q94MS8~*&P9eyVIwyW$-pH-#S(ePM(Gvyoa*g z8fbv+ie-o?&{ij!Fg`4cE8YM6bkagRS{7%7OWZ3pcca$o8WdyQz3pY3y{J>$u`(ng zDkDLWGPlBhk!GSs%|@?1$mCz>S$imCRCVURIx34h6Y~()&`XCEm|y974F7k3I_L{> zg?FSeY))&)l-6BbBP81dm$a8)c!ecI-4i7+^}K4LL`1YHCb}x|Rl1~|+I7n%*=?MU zId$*fYU820)6SCju^n01;ZwmvOLJPwl%-BElS`Xogp(l+SxhhHh2KN{&DyGxh?Xqi zl0{nkKK|}`YxCvpR!H$d_4*%ncry6u^cuvJANFv|7@46Ebu614A5MI}`*#--B%ZwL zMmh68m2D3Ex+g>@?RHz9rN6f&Ca5_h)}~Y3Cp9&DC(u=|R^zeOx_55@&_B8V8w=s^r^jO2o!<6*TL1r0>5N2zv7K zuYb%l~Tv zwVlmr))(q8Uf^OS>Qa4*t4He|>?`Te!G!zS{(-=v8=&x!9*-kAsrhHm2a|+`P-q`2 zX7-Y6#&DcpJ^Q`<5goaA4bB5c%HxV>NHQmiV8c+^YB*1Rq6PG$oaQAv|U+@Jd zr>CTIZT=BJ<#S^Nf_@ngzw%^r&mDc_d6o3-XHqz$MnbcX$P$S_{-*2RX8uxl{V^?8 zZ{tBu;@-dT`yD|GcT&AzyZF3U!%=03_zN?*!03mz(_Tr?j`t^1K-4)9u;-h@ zT6)4P|yf>hOL4AM!;PFMz1M2v-suxKS)Y#0n0QWOq2dTZ$O0LQ#W~))t z2j9a79JppISK#lxvsyV{QE$p_w;rMGx6(-5h2%GP!J46u z6>xqg5JVXo-}1m~{pn%O^1}=N2q?S)SnxbmJ>@>7x#grXHFI;SLYM_c@61vb##}(;!O2#O{!5}8n%554eiCWQ2(eP#+NWuIJ8(z~Z0a}xbbCu(}r!lYQVI98*z zL+5pigP%E1^^2ZCwU|8rLQ@UnV{IFi4B^uc%Fu-Qn0o2+0ZSWG$`EP$ao#KJ@W6}( zi=LI$UuejJEbokJkffcB;ij$SIe97D%aQ^qj}_j|8p}Ug?d1K989~4H#k#u23b!o= z#;--bj9{nxdW91nIHdm4@i;TTo+tg*$;Ho%Ivh`@7lHB0#eFMQmXrQ&pJeg-FyTSz zBzGL0ZB(O}c%a;I^&g_n2N`=X=n2^s8~f7#xUG|(ayot+C0Cy)tJD1KT>HPSQuS=m z-{r%T&um%8?P1kcp77)o^-h`I!x_=db(13V1o`2rIJ-+7+cy21^&@SarCL#*$=eA{ z-a99y-3>$CaXnx%QJCZ38vi(Qp?e)=nQgs(CL+syen`ft6|ss?fPpj&bRwV z8NqD4IomWro%gHgt`C*m*#KUQ;51xyZHLY{F8nHs$Gnr}4?r$Iv~*KuxF-op$eExU^=fdTLu!Grg0ihDyBux{*04yIAzW|zF0GkD{r=!kdNF7 za^!?3iFV5UP<%!ukA|lW${gYA01eHR{jf7Bnng0&U6-U>E>5<5|D-HI3#33z}r~TRd^LzYZ$hr_#y07HS@Fe<#D`Sm6 zPvtYrudO`LvM~j+7~l?mkGR_{s?cp}F@8SlT6|=Avkq@>H!ZmPs6f?077E6G7sETB zUAC8F+*xf>3xWbO)-~~>G#A8gNqdOxtgb}%_*n%06T^yR(DA>&Z#}Ol^z6**;lawc z#};v7K`+R zVqgK+9e2dqN2s90T~uC78W3-X2-v52LRQ1qepz&r{lfjMXfV|DvolpkDwxp89WuWy zJ?&03uYWx?lU9&lKiuW-YM4L!>~Lh2Pr&iCyAH!wvRG0v7)P|X5^R6UCM%>fdwA_- z!IW+PaW~w&@AcG0d&PND`N`)yYPB63Qj6#$l1&u9a9^w*USZ7hTiJHIe(R3;6NKMw zm`r`sA79V$aRwn8*Be2CGhAbyIhB+Mo7Ft>*2vhaOVaJ#UuF95_5`;RCMNkWBtc8Xzt zq&yQvi}iy;zMNb}?OF}p6LWdv@sZ)oTDu3BA9CM||HWzQ6L@jjp~+6gMEli%beOoO z3DCxT`n@b57Yajw)rrjc%sF$h2NXGZ3FTUI%~x$|eaf}AvZL$8NbE(wP@iIRuVCL( zpR;Z_yCp4kw$)JqBZo|rWar3{h}b>JR<6ExU6f$xXFsO|;nMh}|C7KgH;ooazh)hD z%(nwUXZukGdN3b~s&T>bKWHipH_%5g2q`+jIz&yAAC>>fzrVXe^++_L2WW7)Mg*so zObuIeh<018IWIozQJqYEoc7AqMH z^3t&)j=5nH$cR47X93qD}a4MsxQht1#MREk#gn)U|)%nAV~{|4$J z9v?|B6-?0-PdM^VBkG`zr0M4SUc$n$vX@2>2bk(%s=3#U&01}>Ug-2Gu%g2Weu*39NE7m-8+j652HR8Y5yF}^Db z{0Jj64YCSQ;;}XDY_^$WTk}a@6 z+peog@yeK5ScuEE7s+z0t1vLX^I0`vK!Kc4VFgy|z|ERAkINGPO!kYTVPoN85iY;l z6EXuY8p`}f@dMP zg*8jyuHNniG@2`a)?RNbfCN2!CTx%ld9r_V?XvMw4(A8!1uC+)doxxkKNe(}<0|3& zU@-t0n0xU|oSsyx6(;UF3s#bXn?r;}H<$Uo zBpKF6efpqZ%SnN@-CFU~z|C9N)ELGj+g3mssGubr(Tm9l09T@SI^O4I7*dy2kTkc7 zu^rvWhw}S&SF7u}1UH>Izo`W6m_nNk5cuD(f~mth3~xYR0sQP%p6r@Xir&Oj?}@;bmD8 z1DtQ?>*K(&Z_Ac5#xM*b&qQ3gHtuDJyEs_)Kv(=pLwnq&pn~zqx{I?f(C@wA^L}uC zZ90adtut}c66|U69$bOUNoFtAU5oFQeh9YTo#!muxK^D6)|$aDGSHMJ#sClAsy|tA zV?L)%gABY}lu~gUN^1eBzT)~_Gpy)lb(~K2Kw|JQ*b1B|<-FB**+6}W&vZ~ylyMRm z$Sk5~dykwueQE^vPLm2R=xgEGZ}=XErsg6r1;0PaK(VhStQqxkL=QD+s#0O2*4fuC zDygpLm(G;xx$y_SqQX)gAucjON}(Afz0zF3EDYH}b)DZs(icuT373QKmBm`U`du3W;|Alp~E0+9@Jr?ZGE|T+9LX?I12u1skdYt#|eOCA1q(q-&Fv?`dSXx63g zS%iJ^PfgvmWy%r}O~0|CY$f2(iu%6C0B26SjNEmWjqyi{y1TvfLp);OnV01A>#GE= z{iy1ISql01x9pc4j`;<3y2fRbsAenAVceMB|Beh1 z8p!~c`7TP5(K~&|-CTW_yM`oM{GZ0({#Mhqt&8o(eA#$wCFTqIs?a@8mE!F+@YoQ5 MP}5N@QAUUSALzZ|wg3PC literal 0 HcmV?d00001 diff --git a/src/static/images/Unsplash_Symbol.png b/src/static/images/Unsplash_Symbol.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e8333f74ac9ae0c273c28ded64d83aa1118b0d GIT binary patch literal 3503 zcmeHKO>f*p7@nmCm5NG5+(4>E&V@?Yp0Rhg@lYouc1Tv>5Tz>-1P8|U?5>ry$F-fT zlYkJMg7^VkxaLYPAXSQ>f(r+t3QoQC3Kv=qNE9RxGy7ozDv*}zT6*R2%ro!D^L|Kv ze{FU7+}Wqk0szjnR@`*}YQIT2^O)E4Y|*>GEM~=fXnk`N`p;SK%aG^#8&Pe-cVo^+RCd94|%D>deO>m#;)wHwu9Zx zzzUW5Ie57wLP5+53d^{kH#rZ@^2I zhMQ*HvYvwm!m~P>)v>AKCaEK07;yY3!dez~$h!OD*p~RRm0nS#MArv{fi^HTo^^F> zS(c6r-7r*vQ1hLnprxARGZPIi%Y!URi-;#sYNS5jDr`k~Itn39E44{Jrb!T{mo(L} zhGa-XU>H=mbSvu*jfa8G`YdKikqa!YuxXDMJn!*;P+cAW#eksJ^C}zn^(Brg6M3<; zEy5TRa$j`b-btCh&T_t$1#D?sxH%)ENr{s&TJWsRd4H0qwTa8nab#jF_^d~RD3Nho zJa&t@v|zR(Q>S92BD0MRVp;?>Ra7Skji4S6qt4E8sG;K7w#YI`5uB`}$v?vM*#i$V&2&v5XFRAr9GgZq+mWpu)&-y}zWsJfV_gx-r z$vT+a4f$Rla31ktlP#JGW z56!?x?V!hm(toLo5iIAOVn8#t&=qW*toU>hfi7Ej6pa4&IEQD)+I#{RvqLVcp(Q@5 zvBwfI>oPIaUi#|B3jmyHwA_Vu`Oy!zzPNfCKXDp=`^$GnAAI@s@~J0}oCEFVow@6V zc>!KLeE!xm-~W1e0f4uhpK5S%DpL+lSOfm{&%392Ey&8LU? zXSL7k=I?LZynez&Oq+H(xF$8=-`?A^9|8B?(cT98=ch8|-~npjUhR{2pSt_{wT;{I Pm#Ve2>VCZV=6intL^wT0 literal 0 HcmV?d00001 diff --git a/src/static/images/avatar_48.jpg b/src/static/images/avatar_48.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4aeeb03a218e21534c391eadda350956a039818 GIT binary patch literal 1788 zcmbW!doBXgp5lu!@t6PofifUboEViBPoc*=!d7t;M_j%v*{hU|!qwF=H=1ied z01yZSILa3wdkK&M2pGKC@`B16rU-*Up)e&lTtN|~ghC;ekVs_}jGD3vS_O$z(^NyN zV>L81P^wzmnpkZNRs*~F2nZs-1BD@AFa%Z^sf_*4C2IxHihvbh1p(mzFd76wgJe$u zeEX5Af9hFbDzxLm``~<nSd>b1VpOBb-HX}3ZT=x0=g3E>MD@Da6*Eu(CR#e`)eTVm;mS0!j zAZUF21EzUcyi1~8&Z)BnEI&t zY1zDRerfH@*JmVzwO_KuAB_7KuW|=@fH`~dJuWxC-erLJuzQ6$7JrYPP)uv{*Pwo;GIf5kS$Ae`I&vgb(pYMPFWxd)@qS72%rg{qm5XdMhuidQXe zv+iCdxHl5Q*!XD)`H1M$jz{5-i?q6NCXGiap#FaiVdOba8kn{HT z^T@dRiDc7tL8T1no7G>MbLWV6GFY@-qj3Q#%_r>;>143$cl@@6{js8eMqe zU~J>bcJn^z!Z5tm(vVx`MGN)|@M&e+`mA?JRljExFZQXCjrajkh$3mO(}?$FpZ6K< zOPyvNOt?_7eJ?EHJCek3?vUDv>5@Ifdat@rUf(438|K0a%aQ`?x4MCWpS&t@8Owag z32RZ_IlM9DB6??Snl^Ok3Ru+$7@s5y;>yzZ#nh$*z{{Kq4Lw~?$3=Xy-%Ii{MA=79 zyXW&)XR1WWi6g6}Eh(=b37YvHfQO`3e4}O_1p_3T3~6z2spR)LktwSAUz038^AE^W{eJm<(u!ohD;A zFolbF;gVxV;;GCvs#eCk#Xj};KF4`b9(7C7Pp_V0s~j)?V3Mn-4T-pzJ7mGi(0lZ0 zuXWbBCjGd|uo45Q&$Hd1z7m%+^Y8WbHd~!6^uIF>&?65VJrY~ZI5l^gobJJ1A4$5J z{j2Xx&^5aB_*BR+CoBaE*r`NQjm!CSqdXBaX4zV|md~c!d zKwxarl5zY)ly;V9smC4LeJ)?Gtsh1&XV0a(7k partialSum + a, 0); + + switch (count) { + case lastHeartbeats.length: { + statusIcon.style.setProperty("--ping-color", serviceUp.color); + statusIconPing.classList.remove("invisible"); + statusText.textContent = serviceUp.text; + break; + } + case 0: { + statusIcon.style.setProperty("--ping-color", serviceDown.color); + statusIconPing.classList.add("invisible"); + statusText.textContent = serviceDown.text; + break; + } + default: { + statusIcon.style.setProperty("--ping-color", serviceDegraded.color); + statusIconPing.classList.remove("invisible"); + statusText.textContent = serviceDegraded.text; + break; + } + } + } catch (error) { + statusIcon.style.setProperty("--ping-color", serviceUnknown.color); + statusIconPing.classList.add("invisible"); + statusText.textContent = serviceUnknown.text; + console.log("Failed to fetch services status: " + error); + return; + } +} + +window.onload = () => { + statusIcon = document.getElementById("status-icon"); + statusIconPing = document.getElementById("status-icon-ping"); + statusText = document.getElementById("status-text"); + + getServicesHealth(); + setInterval(getServicesHealth, 600000); +}; diff --git a/src/templates/Base.tsx b/src/templates/Base.tsx index 9cc55f0..813685d 100644 --- a/src/templates/Base.tsx +++ b/src/templates/Base.tsx @@ -17,6 +17,7 @@ export default function Base({ children, isDev }: BaseProps) { /> WAH.su {isDev ? : ""} + diff --git a/src/templates/Footer.tsx b/src/templates/Footer.tsx index 4e4b69e..10ae147 100644 --- a/src/templates/Footer.tsx +++ b/src/templates/Footer.tsx @@ -5,7 +5,63 @@ interface FooterProps { export default function Footer({ className }: FooterProps) { return (
+ className={`bg-[#3b0d25] w-full h-full ${className} rounded-xl p-8 flex flex-col items-center justify-center ubuntu-regular`} + > + + ); }