From 0aaabe12543508df111a53da7ba78568655c0936 Mon Sep 17 00:00:00 2001 From: yash-pouranik Date: Thu, 23 Jul 2026 22:19:00 +0530 Subject: [PATCH 1/6] feat: migrate landing page to Astro --- apps/landing/.gitignore | 24 + apps/landing/.vscode/extensions.json | 4 + apps/landing/.vscode/launch.json | 11 + apps/landing/AGENTS.md | 22 + apps/landing/CLAUDE.md | 22 + apps/landing/README.md | 43 + apps/landing/astro.config.mjs | 11 + apps/landing/package.json | 26 + apps/landing/public/LOGO_SQ.png | Bin 0 -> 140849 bytes apps/landing/public/favicon.ico | Bin 0 -> 655 bytes apps/landing/public/favicon.svg | 1 + apps/landing/public/logo.png | Bin 0 -> 248870 bytes apps/landing/public/robots.txt | 4 + .../src/components/BorderGlow/BorderGlow.css | 106 + .../src/components/BorderGlow/BorderGlow.jsx | 170 + apps/landing/src/components/Footer.astro | 246 + .../src/components/Hyperspeed/Hyperspeed.css | 17 + .../src/components/Hyperspeed/Hyperspeed.jsx | 1235 +++++ .../src/components/MagicBento/MagicBento.css | 297 ++ .../src/components/MagicBento/MagicBento.jsx | 556 +++ apps/landing/src/components/Navbar.astro | 103 + apps/landing/src/components/OrbitSection.jsx | 415 ++ apps/landing/src/components/StudioReplay.jsx | 127 + apps/landing/src/data/services.jsx | 205 + apps/landing/src/layouts/Base.astro | 54 + apps/landing/src/pages/index.astro | 448 ++ apps/landing/src/pages/pricing.astro | 94 + apps/landing/src/styles/landing.css | 4269 +++++++++++++++++ apps/landing/tsconfig.json | 5 + 29 files changed, 8515 insertions(+) create mode 100644 apps/landing/.gitignore create mode 100644 apps/landing/.vscode/extensions.json create mode 100644 apps/landing/.vscode/launch.json create mode 100644 apps/landing/AGENTS.md create mode 100644 apps/landing/CLAUDE.md create mode 100644 apps/landing/README.md create mode 100644 apps/landing/astro.config.mjs create mode 100644 apps/landing/package.json create mode 100644 apps/landing/public/LOGO_SQ.png create mode 100644 apps/landing/public/favicon.ico create mode 100644 apps/landing/public/favicon.svg create mode 100644 apps/landing/public/logo.png create mode 100644 apps/landing/public/robots.txt create mode 100644 apps/landing/src/components/BorderGlow/BorderGlow.css create mode 100644 apps/landing/src/components/BorderGlow/BorderGlow.jsx create mode 100644 apps/landing/src/components/Footer.astro create mode 100644 apps/landing/src/components/Hyperspeed/Hyperspeed.css create mode 100644 apps/landing/src/components/Hyperspeed/Hyperspeed.jsx create mode 100644 apps/landing/src/components/MagicBento/MagicBento.css create mode 100644 apps/landing/src/components/MagicBento/MagicBento.jsx create mode 100644 apps/landing/src/components/Navbar.astro create mode 100644 apps/landing/src/components/OrbitSection.jsx create mode 100644 apps/landing/src/components/StudioReplay.jsx create mode 100644 apps/landing/src/data/services.jsx create mode 100644 apps/landing/src/layouts/Base.astro create mode 100644 apps/landing/src/pages/index.astro create mode 100644 apps/landing/src/pages/pricing.astro create mode 100644 apps/landing/src/styles/landing.css create mode 100644 apps/landing/tsconfig.json diff --git a/apps/landing/.gitignore b/apps/landing/.gitignore new file mode 100644 index 000000000..16d54bb13 --- /dev/null +++ b/apps/landing/.gitignore @@ -0,0 +1,24 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ diff --git a/apps/landing/.vscode/extensions.json b/apps/landing/.vscode/extensions.json new file mode 100644 index 000000000..22a15055d --- /dev/null +++ b/apps/landing/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/apps/landing/.vscode/launch.json b/apps/landing/.vscode/launch.json new file mode 100644 index 000000000..d64220976 --- /dev/null +++ b/apps/landing/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/apps/landing/AGENTS.md b/apps/landing/AGENTS.md new file mode 100644 index 000000000..c5ff42975 --- /dev/null +++ b/apps/landing/AGENTS.md @@ -0,0 +1,22 @@ +## Development + +When starting the dev server, use background mode: + +``` +astro dev --background +``` + +Manage the background server with `astro dev stop`, `astro dev status`, and `astro dev logs`. + +## Documentation + +Full documentation: https://docs.astro.build + +Consult these guides before working on related tasks: + +- [Adding pages, dynamic routes, or middleware](https://docs.astro.build/en/guides/routing/) +- [Working with Astro components](https://docs.astro.build/en/basics/astro-components/) +- [Using React, Vue, Svelte, or other framework components](https://docs.astro.build/en/guides/framework-components/) +- [Adding or managing content](https://docs.astro.build/en/guides/content-collections/) +- [Adding styles or using Tailwind](https://docs.astro.build/en/guides/styling/) +- [Supporting multiple languages](https://docs.astro.build/en/guides/internationalization/) diff --git a/apps/landing/CLAUDE.md b/apps/landing/CLAUDE.md new file mode 100644 index 000000000..c5ff42975 --- /dev/null +++ b/apps/landing/CLAUDE.md @@ -0,0 +1,22 @@ +## Development + +When starting the dev server, use background mode: + +``` +astro dev --background +``` + +Manage the background server with `astro dev stop`, `astro dev status`, and `astro dev logs`. + +## Documentation + +Full documentation: https://docs.astro.build + +Consult these guides before working on related tasks: + +- [Adding pages, dynamic routes, or middleware](https://docs.astro.build/en/guides/routing/) +- [Working with Astro components](https://docs.astro.build/en/basics/astro-components/) +- [Using React, Vue, Svelte, or other framework components](https://docs.astro.build/en/guides/framework-components/) +- [Adding or managing content](https://docs.astro.build/en/guides/content-collections/) +- [Adding styles or using Tailwind](https://docs.astro.build/en/guides/styling/) +- [Supporting multiple languages](https://docs.astro.build/en/guides/internationalization/) diff --git a/apps/landing/README.md b/apps/landing/README.md new file mode 100644 index 000000000..87b813ae7 --- /dev/null +++ b/apps/landing/README.md @@ -0,0 +1,43 @@ +# Astro Starter Kit: Minimal + +```sh +npm create astro@latest -- --template minimal +``` + +> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! + +## 🚀 Project Structure + +Inside of your Astro project, you'll see the following folders and files: + +```text +/ +├── public/ +├── src/ +│ └── pages/ +│ └── index.astro +└── package.json +``` + +Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. + +There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. + +Any static assets, like images, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | + +## 👀 Want to learn more? + +Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). diff --git a/apps/landing/astro.config.mjs b/apps/landing/astro.config.mjs new file mode 100644 index 000000000..28e824439 --- /dev/null +++ b/apps/landing/astro.config.mjs @@ -0,0 +1,11 @@ +// @ts-check +import { defineConfig } from 'astro/config'; + +import react from '@astrojs/react'; +import sitemap from '@astrojs/sitemap'; + +// https://astro.build/config +export default defineConfig({ + site: 'https://urbackend.bitbros.in', + integrations: [react(), sitemap()] +}); diff --git a/apps/landing/package.json b/apps/landing/package.json new file mode 100644 index 000000000..7ad6290ec --- /dev/null +++ b/apps/landing/package.json @@ -0,0 +1,26 @@ +{ + "name": "landing", + "type": "module", + "version": "0.0.1", + "engines": { + "node": ">=22.12.0" + }, + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/react": "^4.x", + "@astrojs/sitemap": "^3.x", + "astro": "^5.0.0", + "framer-motion": "^11.0.0", + "gsap": "^3.12.0", + "lucide-react": "^0.470.0", + "postprocessing": "^6.36.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "three": "^0.170.0" + } +} \ No newline at end of file diff --git a/apps/landing/public/LOGO_SQ.png b/apps/landing/public/LOGO_SQ.png new file mode 100644 index 0000000000000000000000000000000000000000..2463cf78476b07d3f6300bd5dfc9601e0409262a GIT binary patch literal 140849 zcmeFXbx@p5(>IC}0)YStzCc27cUasV65MTZm&H9;2$lr5;1GhldvI7B7I#=|(ctot z`+mOreV(u0Q+4W`I)9yax2_udO<&z}b@xoqOvHO-nHSGVo+BV2ypWTXR7F5QhW&Y- zAwSi4`@NfaN-&&cbzBh;&`tk5hGznC|KxfN3|c|mGAc|)Q@U);5BOdr#DvT8<`ox>?m-PM8x`go0;xcgBqQax|d7<5WG>X<(t7;x&B_QLSrnk2&>6K zz3zS$9zUH*TRfRGyT)-1m8PiaeuKuycm2&ujhf-J8k^Xm83P6&19jVJ(A7gsY|H>G&ye4T`lAEG1Tl!dq0>? zuEJ*2^?!^C^^oy5o5~{-!2dRg6|D zhVw;c>s0`0PSevCfe35yR1f}0YwfcJM%xcmdg8__<$_W6v?j7bvGyYIu1p|VtMd-v zS0}^uN;(S#v(py7FiZ8WWc9%eu^b=WsRCwuHMyT5!~%>T;MMH@#wNQp+WS>n6FJH~ zNqUp{oWW*nLB<;GiA20K^5vgs^rQsioMm$SK)+iA6J6y?!_6-{#4s;C9#`wbYjp;{Tc5TYPZcT@2CE#D zY8=(eW(KM3Req?7(Kx78+pkss2^2s;KsB;f*9L1VDFQ)`_ADl5j;7`;p7u^p#({t! zDB|g40g517@nm*zrFx?9oboRklIE@;7i%Z5wW9;& zADSknj&5KfTH5E7{~|302D@0B{zKitmBr+*8n-`PSe}GtH8FE#WoKdg!xkl_;NN(l zn3?OJ;@>Y(Gk5;0@OR11`mZ-RnYg%`t9v<_3(=~YyE?kLfXx4*@Tb$ih)B4Yn}E&D zggMwac$nEZnb~*+S^tlwKkxXj4w5Ed6JZ}3XE#T%fSDuc?+ozoL{dyv@`I75hpDH| z-xW-MCvL9hF8=}45R=w5l~8ohaOC3096a3o>|E@;{M>wO|8)4P@jvnEj&2~UKcgi)tCvi?y7JL|u{-(Q7)eZYTu{QY(R2L77{{omIrGtfU8<>cmK_m{SsfmqG$%0K{a^ZI1_FYu!FJ~VrA=aX;Q!R7Co=)snK)Pq(RwnQnOm5+*@0<=6;)(ZjMP3* zGE=huHv;{Oh9K*|k^g@oj?=%{-yaM4%MJXoji-huSvdbC%Toy`<_5NMbP<+QQ;<+m zrj%2bR8f_plyd(gwcsE4{{}qS=U+qr|7duh9LPW8`yc#xnmGNNtv*co3T*-F%Y4DGYZPT3_3K;pLy@hO)V~oQ0AS0>e}O83GC-2?FX<4)N&`MkM_wFO5j|v_kn) zkMuOB8$^d1*CGHND^C_#+wWw}%^0WP&a7vI|(qP|bgqW3b<1l;d5S2m46 zZ;6ytL6tY1dkb8gJ197QU1^We@5Vc zM&SQvBXF#c*umJo8BRFL^8cyi$FJnGMAFV3?_Q_gwC4z@=e4__EEF{>EawV^*pHKU zLB7P=Tu-i|1P_gSp`~FdkCoNk0e&8hFPl2vlqJF=Fu!ikALlNMZaeFV%cc6VHoU?$Z{z)h8%=9DkM;-URZAlM7;GM>nbSx2>D8{m zpWrt3ig*yPA*;1#nd^67GoD&?r2OS)oI{NH;2NLk^q)eCOc)q+c&l5oI`(yxNq$Qk z+Wc`IvZ3mR(>t2=C_^%`L<6Cnn#QOlCS zm9h57U;MPKbNO3(TB5Ul%7@CjHtuCm%6G<+NOa!Pb$brqFbm;43??-Og~{U#A|dV* zc|J&bnlZ+<^AgbU`Du%t0n(aTGfS9}@&npZA3L8|GlS9ivD)p+Fdv}3fzPaQM(cKz zVXBacLTph>Q`C0`p63|P{@cHxJzn6zELNPtK0d&dtrEXxL09CFexcZpiRriHl2OKK z^EW?$mbwH90Ran3!>n@4oU)gx^H*94q*jArW`OVF-JPBFsSgu`TO0iU& zmfusYCEtVZrj5j^*T^p;g&xgU9a6v<>tMPvTcESE90$>=JL!UR3i=Lj^i z62zlt@Vg%*L;Q$X>gq<1wXN@=mD)|)DY%^JfCGWt)A5t=*IJ(6-i<8`Pf!i|MFd>c zd`sa}kT0+*0kmuZxW5{1O z1Tq9Iw;nE8q!$e<^VNGC^(5WR1-RWF@{4sa3BQ%N6(9qLpc*}wli@W#s*M70E!SVV ztHbkKcNk2O?MlB_h|@UiR4Qb793_>$HN|HsEpO5>47c9w$0THlYGHFRE4quFxw=8M zo4W2^4^^#;qYxkR-s*z?vbFl9C zDA6&|aq@dkbBMx(Mznzruq3`r`-ZCEG^4uAK~QTKZf89%HfE51m!2D=q2H*Es*@x? zI+U4KDrhWydAre1u@5VNs$b?_MBQHQ!yi2#Wfu1nK5Ki36mJXn#kS@}kb0KjQI1)v zA7p4eY}{ws;ESE!t%GQwX9AR-8!7P9|fwBuAeGE{lQEL(^Qrx;@J!8JDpS=aav5 z6%YKaf@l_Bj$Dc8ngk>hGgWe4(@%KS)}o(;?-o)xmaU`#;P5wGH=xixxx3S4*7k!} zU40tI2ifSIzqS>f96W$kcMg3NWv!!TuQ;S(s0rp zJtAV9@Zi|{T-bUG?J#R3t+IdiD)c%CjnJYQws*5ao6#v!<9cD=5F@z8bU|AlAc1Lz zzchd&vRHg?y>oMoVfl7gVDFPD9M`YJOjy$IXt`keZvB8%H*@JK?3byp>E#Xby`7PN zL?-s7cfd|>h`fi0LiTv3B$Rwd=(qn|Pv`w$35D&^^6gqC#obw^QQIw?_h?TEdJ0b( z3^BhO7g1cP044YtotD}qadp$&nV8a6Zp^LOX#jC=6CA%JIm+GEP&8y!y$wL-8QYqp z5K(ImZxiDWc6`7S9DCfx%eQ{cpP>w!s84?W)!vA)48FZ2<)=d(Q;265gEFZdO% z|FTp^${WWxk3axWZ_gyD#rP;?n%bqZnGD8zxVg6onBTl&)y-tf$9lY8X+Byf+Eod| zrcD?xx=M#AcktK5DyOhXdGn8bcIgV?$FH#LYQ9Sa`V=@7?3(#Y?Y=tHn)n9i3POB@ zH}~a7pA$^BX+dwp+wrdS)|N1g*0Ff*&lJ=h;Rb0}8zaR#3`xVs)v!Q%NYsJThqWS7 z*UQC$2FBf0g0-22AkqoFS)&v-MAjfZlpCDl50_WYYx$q45pjhH#B)V*Tk38r5rAAb z-bj9DNff@xoItd=Sw1SY&s9o>pU+M|lP2Ye^hA@&JgTl2tUmIUI~y8mo2V@|baaR| zq0L<7=N+oSw0XG4u~~KPY}WNQ`P&NnBM;>|*XaAyoZQ^;Zh^kkGtM0MmMf69%$S^r zi%Mch9xr}oP2`;e8!IDY_nJAqC%ahq!&w^O5^k~B-uT@aZZ;mo!icE=T}ymtm#N{; zMRl|s<`_fK7im8jzi|~yh`(%gUX{(8y&TVh>cN>`Vu$p{i7xwis;p7Vs?CM)Hy90f z0!5AdqMiNWP%Q8@=4gXE@=3|}e(swa3Ql-IIpF@X-f$ADbLwa(GXM?(lc?y~TZQHO z-`|)}Pkp#{b$ju`{81ty0&oP|`!qsR6E)BqW{{xr3J0Y=(ljpf z_i-zW&9{@W0_BEc2GG$7ecmeR1qI~TMw26aTqmYmRSkpQr8vgfs(S1tX}V?2Z2D|x zPh_+hir8DFY#;1+hp)n_P`^n9X0BJ^R#wkzdo#;xx$&E8%a79e^R~u+HF&u>_OKf} zSev|?kXdllA-iUh7e(^h+!VRnr3emqTzK?%=m>n$uZ7DVLZgE@-!9GhMWy-4de&0o zn+*yh(|~}3i;ow1goa--frf84Pfk?fOc5$>YfPouh9Sc%Cm7j5eXv z)V8^|C(rA!ZX=IB<9!ZWZbf%UIDFht$ZiNwj%HyqVYF_EV)c5v>cCN}pD3#y(OaCt|85Bd??c0{Cep%IV@GL^3!r+QuEVluV ztRlGk+Fy<$oJTF9a1mm5A4&P1ov|-{0PRj=whSG;@lQN$@jC%}!THnh*`-$OfS&#; zEb)2hT<;3pUw_hS0I)oFZ|Fa*_7W&ip(nlXC5;I{fq@K3pt=)YJcT-!@be!H zok7UWmmP?#l>tJ>{-#IB_+<10ccFy-OC!C`$E42R<1`&p4S=>(iWrbP!v&A(LvL~C z3AHytJi!pT_o6$C$Sj61FyS+yxNy50e8JUqeN-!Tb{&~~a<1MpV+ zR;_nNtt}jPHwbD`+#8m9a<`X~g<0}l;j;V@7uFZz zqbA#DvINUFo*x;X_r6*PXin6>-RPpisOY{d<^616yy%gf z%tSy6*xlScrwAPPqj6s)?+x)53NVE-49jFQkWCuf2hVH9R+JTg#Hl&HYax6+($V7Z zIR);P$p8|2{n<`U1sL<<0;dt2b?)oCKG^F_A4Eb#uGox2@~Jtn7e0<$>o&DKmu_K~ z1}_oN*qTGhm2DSpu-v+C3f1ja)VhLfu9r5FO2mvmn~qtu6`=T#e(_4Sg9tVyt3?yW zGn)Xtc*|-b8V(Sp#wM!%*tcsj+}gpIR8Zji0y>F=-m1mg_Q4_z#0vN!q`1s{WSn>U z+Lu(%7zog!xvG3IZLswn`a+IVlzBQtF57jCf3Gz)I3{c;P*^F~wV*_h%VvbOvH8@} z^NQb1R&M^54_$F&CBWEBn&ZI9ke(zO!)E6|8Y~u$tCk8To;9L@u#c+*Vy>R(1Gwoo z3R=>He_qA?KC1>;yG&I(%3|9yl_HR6+f|M8BXo$h8 zd#&E%lgV^Av-Pab!e)1{be#5*6rYE)*bA*FCyx5n(&dW>u5AYswZa!e3>khlzu%1} z7j%-u!GqCGE~7)(ky~D5xeiBw4O7r}vV%4X6aze#exLFZZsiuYx1*vi^Q1!ZTkBaN zKGN?*v(Ue?!!tzgB_uRGocx_djn;#Zvv9mcX5POeAQr@`tb>@1&82mys|*a;7>bef z$up7q${H0kYpm%vQe)Rm)on4J>Jy&BmtKhVQC;qPuoqPN%bd=QKHk`W3V1cSeaQ8z z6Wj91m-D=RT&%LU{igN!e)F}J5Hw7bf=lve6#hO;butCYoRUnZmsj5zflvGNK7uJU zMe)*7lW<$8x?YnL=%UifQh{r9;i&a8>Xp?AQ7?6%81qdQ4iTrZqER5rK7XKct*v!J zFl2AwTVq3M^3b*!!mzS60L<0zrZc0%^UgpwNz9_yF4Xf&{a%2)64;IlWogqg+Tsq1 z8aatS>hFJ3JawFfO;NUi?#Gp9&@mFIa z7>E={0B&2(ZH}O+C>nM>8IY*$L1&@9>c*xGt0H3EFlBsajBwNbfS$EKvpCLRS!xyG zMhwO%55HNhS$m~f9)JKtM&Iiwt+%=pppL&*)?E{nP0N4&siwf!iL>rbzPoT_bv7)K zdP!Kl`7Ulz>b3PaMA!mAM@^6@Om3o9eaXsX5cl<}Ub?(P)aii1uX$$Af(%UT_CU6( zKLPUv7#yX>7gS+jZbt(}s%(6I2E#J)i*piKFdCYKerz77%S;H4f{bDU0zr0MoY_5mqzb zitdc)!hRJ@E3zdCATEbtG$ zQj0fZ{Ann_g`VcgS7zicVn`XJ5OZVzZ(C*3bGMW;IXzGkb{tOyoc?19E@*SVr~rb1 z_)6M+C@nACOhpP1&Xam#XgJAh$--LNl=^c2u!Do5?r7&|X{D#D>rI!C;94;<6;4^1 zh;Z4!rAG|UbC{|YNpmoPSfAm;s~cCrv4ur*^oqa)s5?V-ASNfod?GK@{fDg{AwXAQP_c}ktqu497D>|4Y22E6l z=(AfbAf@7231pe1E%n(=KR-(kO)*b!NM=QMEoq?9V1%@oC90Bz_{5Il3uLgJ10(G7 z+yS-F1pAoe$8^7bT~yEG}(P zc^JOn->{p8+r4no6}#R&T0O`}yw{k{7*;AS1|2LPhh`238osonXq+37we-kBHE4R1 zfkTyreA_Y3U;i-YX|n)m76i)i+s83VvL@Ca2#Fp#Af49a4RarVxd)Jb=R67`|S zC(=vjjxnHI02#cJsJ~Y6`y|O-dq9&OAIKU(8-KzaROUKGS@^CS+M0gVBYQ2dpJ zO`A;Y8;Kw2tt(gYRTyzLr_z9>v+cXVEILbcjkj$Vbrmj7uGoA$oNM}0SKk7SlbKLp zv7hBM+6tqyNc%$H$DtM3;EWYDR{v}srqY+D&Xi3Dn}lRe%{39`}Lbw#$~<+1?5v(vY?}R zu9l)PU5;eXhtra9@!6l}+ZrBrCfY-}lM*Vj>D>|7?kM`XD#n8$tXh^az?*@zv+5}e+ar+!iFJ7Z^-se);WuU-*B3%7ov3YiLwunsN=22woAZdN3+d7;w z^-@bzz3vP!_>-(Z`YWS>zJ>aYS#z?(Y!#$#H+ZORMWgNeDQXkufkV_HaKVA<@QWDw z&ZDn~8pr$&X*IGh@V%|2h;D#_ols)?!J;bxf{o)X|W#&Xa9$wYlzQf+s52 z5Ru5Lgl2g@iDbEC+)W$p=55WvRpfWMI3DWEr6zwLanEEmbWz#>J|BghEa-tjA?q+C z9h_T9he{6jZ6LXf@ye2>o#Eg1MD93AP|kXe$ajQ0FXP%(?ah5~=(F7NEx;};n4u@n zBY>08wY{R|_{)9u#i9(^;%}L(DP%$4^b(-zkuvMMgaPW#s!~~)Akldu`no(4(lPWw0;92LViAZ z1FGVv1Ql)FhYG6w`sGZ|V><&cjZNQo-l=N`mew=yGOA^U( zkopu%Q3l_W3|uzWNFQSj&dtK%61TA>X=ToeE22op$xu~tZzwH{HKV}%?6m*MzPPFA6j7NQ5BX_g>T&5_WD5q%+R(BP|v-YAvYY-fb!(Lsuv+pOYa)-#G*>?sf3 zJL$>|T-hvQ7&0-eL_#m)r-0f72Mllf+equ{vDd5up;wyxj>xcIUaU@STSL=l>#>R5 zN8BCVBLj;i$l^ziaAc8`Fa1kBwc$3;Nz+u3e6Tt_xz(HKQS#pGOvSP|j~>rJvc|8A z1A~=s$S&t;Up_dIa&UeY8Pbgx`RH9Q;8M;kOhdeA-`zD@$||I?>(e&pn{qmRkP>65^P8ez0X`)fG+q*Y{S-Bgkhs;7b_h&1kH+Q$crl+Hw zl^n0aT*iW!uN`}@+p|AIZUODsSQ z37~mt7>xE3)?b$w2ywPWYdU!-)f7#7Ps^<=Q~7kXVt`|4ZAIuA3w^s- zRDk@Y$$2mzg_V48lSz2-KyW73v;x&C&Me$0SAdOM#S zxl!B^t*MJ=pDsy^c85r4EJ&pGIQ*Qb+?u4B(r?+|r%zrl8tQG$t+JlL*E_?EkHMyD zm+g&~*GoeJ{>d@FhL4nG>IOC=WE5~D-!7R2R>w9*Rt(hA^w7FcAm1;hF+DFaivn4A zZ2Pc$=yJBjZepJ>uSgxIJzAZ1v$B|z$;d4W=hAyK@w;yQIf4OAhVOxH+U61G#Q@os z0r#gB;oVk=li@I-w?JsA#D?ks_6{KJW#i#Ax9d(Pw#+raz(7aeQg!Br#6TuuKNx%B zw;1|%axwtox+M@d>X@(X{()S059MPB0D|G(;Ho2_FiKPS_}+*D|132rNy~3yZ)hK` z+!7mvuwxPP$?5GxX8#0}!%ry;*vGP<=?vc`TABE~3z| zj5U4#wM0?c33Cg8cJU zKt;D#NWOVMv;Av4ZYJ`DcvHY&mndHTh-i`x%q|=e_H4aG&&@KKs@2~3`GHfRG=N#8 zwS7H`^S71ARpPvJNMvK2N<~0de%hraMTuN0{C8&ZqkhX(W-^f{iTV+r+i_v3hSp`6 zOtXpI%Ftm$6WMDA-3x`UKIbog6w-+mD_>rzEb11bQ_L zFnvNC`ABKWdvhZSutWx=BxHinHPWQsp+rTuk=Y>&M4zgd>LPq+thPKGj$?gWI=(#D+YhMD=>>3oT@(+3d0F44sqJk?39w0*fSEY4dcJ6&V?0e!N3q{+;fH-Z)9JDaOHtlwD1QR zg>U1H;o$-BSE3FQ>MXM^ zWhBflkOBb7*A>bbno|qR{n@0h!xloeUz6lmK&^-eo7e@eP-c{TDQ(a4&FDnhSsb6A zb+9wJ5!?o8A}$czt<8^k5uS#hJ?pwUYxl3SaZqxbfbv~+zX=p5*}^jYm;@@rX(DhS zdjqgW0H$w$oLJ~w#T;6He*SIZbS$l z{hWuTxBynei{~S0W!W;V47ML^8hlW?=Ap$dR5pU?4K(IX61V(J%!H# zT2>yrwna)$+TtoxOmDH+-<5i8*&?(!Ma(uhG1!6aQDn29dX*|S{T&4Ik7?|u3G_Gh zHI^R^t9@~t(dg>BHjT1b5!4;Spn-{)55%*=25zMD_L@&%ByMNn#EV+$P9R8hFzPM5 z%V0r9PtD&J87k}NRrsN>8*PIA&X)2ifIbgLGkB=7$h6|eA~7?KPKAZJxhBny%oA0G z^m@C?@}>wtrK5gaU7Y{?Ktanwo`y%{{V{ds^XFdir+~S*H`)sP>{aj0dt0Xm6TcCC z=vtjt-W!wGX3Ds&Y;`Ia(RD^{`xN z^rHWr?24Yc)6(R)ML>4=_>iWDvuxXd%WJtyIwSNH{7xiX@Y%Yb4K`Q3um>v+E{M)4 zW0piKk7Ci1?vY-thTF!C3#-U(xHk|43|$&0+#+`<9r`5PYFsCrJ}ilHHotmZ1MnCq&4~P zX1zPc`MA}utiO$RZG`14!?zmi)?Aj|&NIV*dEXYP>cE#4hKGCJyj_LXL>DSp8Z|F| zQLh8nY@^T>Za0eGd>Jd?FIRz%IUUVQO2X)#shml(kYW-(eD@R#)$+AnpnlquJd;e` z+-C`fc#SiFN}l}1>^usk(g7PVgJMN<%uD7wn5(#~n(r(4P3qIS4)xIEcpp>-{^>e) z&Fx7M_`OvW7=-n(G@w#obvUS&QoW||w9Q36j@viOVzHg5ER48TwDNErxBh{9nzXl9 zN6+>pHPUl~a`@9!cikgMbWWb#Kl#3fQV8FjuV(aqoQ22s7H8ptN{3Pw=kj<;s(Nsi zY;o%SAwRsf;Dj=r?}#=|*rFd}Kc1f+B5soBgBsN0lzk9p928i8`simq+>an*zfGZ_)&>p7__Z4C- z$QYPNNL`V(-Iwo~Z7rn2IrCW@smBt;Y@l>cc3>IZD(izX(J++|abkO{{8RSKU6bBP z&ymoTv9RJegsR#&Tu&?7DRF~)0|VUKC=RrZ{MFOy2T}!=kor^+XejnLwa29Jk}IS< zO8FNp#42VIoH!1n@67OTLk#|LXYnnwY%Hw zekLk7W%s)|+piNkT;1SiNuFFXPU3TN&o^A?88JCj$Iq@-ko|Oz!_#~&szn@C0Ehv6 z2?tKYtK=`M?mPOoj+Zky%=H!9$zLJrr9AUWH71LSj8sT*$wdoZzubhU5}-{8ylXdl z=Nh|}?IyJGBf1P3Sl-C^0~Vy*t+*wJmR7p2S=soVdKr;32QV3g*K?rV%MpZKm;Zue zvsajSmutgFF$sjPNj>)4+8CSAS&NI;xX1|h~L4(`5pL{ z_rBsd8hy{kBs}eOcVD8kXg50&xZ~UZGOF=KsFZ{9MvPKnVn8A{(~I4#e$?zGabG6$ z2g2+8DrwqLKBT8(I3vjr;-b*9zzIBl4F} zliFh5p7MF(6yRZ0Jt>xpY1B~M<0&O5eTFk8co{!yUvIrb7BdTf2Q3TPtv9Jmy6_Ga zoK^C37ok-8Xj&{9ax)M0I8A{ADw#{>jh{;_LTe+R;sHI+yeu=x5F9M{p{8_67wK!# zDiN2Jp92w_COO0U$6!h@C-BxW`vmgj-~aJwo1iHj!{g-Kng(&GMGu9ABmBX&L=H z7x|oU;TdqeIQ(@HxY2!tXhXx}`PYvS&J3cxT4PSM7en@c^V3#vHp}?2kd42o&BNI3+5ZsHyR` zH8%56xuQ27+4NF9;+GdQ{ut8muqjj{G}Z@ggr#nl@4H(Z4#rBqXEgD4{LrN`jJ=U1 za;d){YMHzr1YtOGF>3m?g!xRRhlUxJu54%4a+>HTAX-<59? zRia!Q#yEdaSMgt+CW-}bQtzrYMg6LDG0~U2*HY-3+Ax-P4{Nuw@gxlRPRfIv2Fe==G^efv-*!bxzb*ZRNUv)h1Hjn6VRUjS} z%#8%(S(6@^f@tT|e=HinDBqpr&0Y5Q4!Ed%_FG?RtpG=0v7$XDJz1;z<|>>&x37DZ z2W{JJnFSqIvZ4}1h6xp+sj-IbPdav--QSIvbLMsnl1(*tU&LEG$KYZRq2EjC#VPHrco?NN6nX>FgG}g+tDt+YEiEZAuR(x$M<->UH z(jmFR`H5`Zt{=Pph6PPmwQ4N}x@MT|T(s@K+$aCM4XP#RF}YX!-LSh9;~cRfu^z#j z4n0GB{yB zyAvEakivqQWQ2Sj6Qbh%Y%tL-$KXT^fyfmxw6yhIq7%lh+nbF3%RTj16+ya(TynS1 zT=mg{C4B$v0_cCJKbvSwQRwmouC6WjV11n?>naFi`n-rHu!s#^TQ6B_o(H6R6#jrn za{<8uD!o}>o~C*rgkMESypK1Uy#8sG8CCie1Yqx2%dlfz4YIRP&nYNHzgX|Ze=XzNfCUg6A(;!zhx)6VsD?X5Y z>{fN&Y>ZjL9-+yQ5I9(e(kf2dt!C;RbshmXH~(s%Ly|QvCv5WN;bhRlT5L|?9RHD7 zsm3;|m+--{Y_x>mLY>Eo@K}Rb z;v5i~iU`i*)6+djv7^^d*66-kqdQC=@642`<)9T-fZilw#}m$eSDatvC(!1s*MhfV zmgNg1V$5Dk(grL-b9%kC1?B6ReIB(@n2vH{l^7Rko#c=*1UKS&fN13=SGt&4YCUTH z$WGBL!DUiPriMtw3$+Rdl(`}Mc2fdDjhxp=YtI$e$-3w^l|~6%K}-xIy`Hdk~~_@*zqk9YX9Bw zaKH&6`fXnzUny4mYl7Bzd--S6R&628+M5PI432j92rlf7+zmmCpf8Fam)GGr9v|&! zn~_`IJCbd2#3qJzHA{mjI+${}Sv%t{SX*yk~|sYKQ&yoLp2m!#0+Bo>h)jnZ6V zr!){xX4sy;09re3WL2LsjVRjLkpa9uJI24Vrpox~Co)Eoxj7Ni#5#p)lzU|H9dw`% z#NPMDZ*_)#fXYwfDEf+A=l9E;Mve=A#;K>m@BFZ;=-r!(d^n&**Nvze-K3&$zgJ$o z&dOV2uc)(U`(o_GTcR~%CFUZfLULgq3mEqE`>~>KtF-|dDF(@AiL$okl|R~n8@i5~u!U+p{`al&KrN`1b4@#Hzm zM;+6lqwk9Nc_L2=*jF7-SVkTUXPkJWT|J1q-K(kjfsOjn?7?ZdkD+a3$%PSo^(2LR+UxQ+}cntYOC#M|+Q~r#*T5ksu~pFC{K6 z?riNO%xeH&M$>>HndGI(Lbm9aPYs*f>~ATk>Laztbmz2RNt~?deZRdc?{+is7G~_bUl1p?9;>S;rwb@WH^O=66gO(q*RG)F6wJFp z5P2HJ0>l|+D3B9kp6FUS;39};cG)vJG z{{8Uv?g0PePB3&WrVE>JKS=P!VNLgm(cnixMbnkoMPT#A*kE3EE;~yCKN@?nz_0O= zXb4KLsO1>lDQFh}jZ{MfI4b;d4De7}p2O4_5|5GM>wH=GS%i$g4Jb)f=DM325$>)S zsI`It@c&J)>;IbvR%RTfuo%zkXg{b|?Y8#y4z~{Jyf4Oeh!nc(!`MzHcRmo z-xsYa^WBdwG@G!)6t=Y?*7ikTkM(gE=voeLP6G&8?JE&K6Z2;A&uR}9d-+pc8(t`y zdqa>Sr-XhW3jDc7XQHH=?%F7=;=~t`zuj|AGJjTp(Au?PK^R&d zqh(S@tAz^T@*m*JboHe@#A$gk;0y#8UtaEAwQb+4&S)R}*?1N~LQKZO6b9CUM1^wb zqy>i4n1WVIw^*SV^D0?Z?mH4hz}5##I$(^+K*GsPz%9iio&H^Y`~6|7yGnh6+zwv7 zTVfjX`T`7dccWG5yl=+M0rB#z{!)2KFUc3YAJl)TAPw#~sm1Kg@1lUr_}C2G4%Gq5 zS{Eyf?Z~1Pq^_*?v^M~|&*@8i%%e?fT8y@Ty zVD{DCgll-E9KG&k>QOt-f@-;Vkiau$;$wKQn;i0F=SR{_(0jQ@uFtOun(+e|+EbmF zh<;OR%#+x&jI4JMP>&Q$vw8_U4Y(lpLR|_%`x_Ze6@$wO#_er`n6DX9aXAHyiqt>mRe3&MbYc# zsye`fuyfyhUS)P$@YgS)O7`eWzw%;*ckiCld@|QctZ`WuyE?bS5@Ql@J8*LHl`=Iu z0`To@{7MHG|KREI=$V#F1;euDxY#Ny)weYZrDN zW&!Gb-cZw%*8=klh@dPGQ*a)*fnB+*2_MF>aiE5_wD~JJ;BFU(B0$jQbhDg-&+qZ~ z?8=#(PS*7Pl?R~O0zYP^kwz1i2}ykI>(w*MSP{ZsD!_EAe92Pf?0Iua?cI4wyeZv_gu>s`C)$I8@+eC8|63w4|8qy z0e)lWJM9m@N3TGfx>uY^z7T?Zw?hIT5xzj;Nd60)o450iOLgrJ{EYh(%in6A6+SI9 z`x$0d7Fqd#%qDa2+)uuSLfFiDgGtXP?9Ikr`#}ehP=@$uuQ@ub!!Sd7y}XoG(o;To ztWGoz(oG41{c|At;L6jJXUYOewL5k$>olV(N%9X)Ei6cu9=kKOX4Nm|HFgouZj#Ai z&VkAS^yZM#0EblVdVAstjd|VV-$$%`N5d;6u4U#=^GBKa{M0j;y6_xs-uP|$C!brD zIGm%~eVL)Qt35qMqqU>#!h0^i=Eu$*VgZyD8Kc3+O~=R21^1E5tUt6ly1RcOAG+E= z=WiwRL&JSfmWt!(kxjCeoNS?Mbdl*VcF#4TGYebKC$95Q0rb=*X}vUuQ1FWzGWN37 z)n)$n(oPMSoB0;O7M#MxZ6_mQcA1e(pbwII+f9s^LAr4@f+Q-}%FKRkAK-ISok^{U(`Z(AiTm0;@h)!1oSRu;mRitx|r?%!m;$VJV1UwDx>Ns>+1?Ia~4DV{{}p(`9kB~Q%_ z07<n$9vT%C_y=NHXu-FX8KiGzrb97*Wn%IotJf3o zzvK{9<0|V0I#Dgi=W2&Ei>O~XErhqAz1e#kwVFuMv>rK{5ex-B9pir?E;>(f zzWJJnafR7RC{38!9UiH3&S|a8kEQyC^mx8`_056E=_%2G7-1$_Q6W6oWB;s8n{zhS znL74VOvfXbaT$b#424I^Gj^z7OGS|z2-#1z`(IPQt96`5vT#4$zA>4gM2-l?3Xgnq zv!76k`p%u85G*^6Oaughq|OnI;8$C7G(Yv1@;-T6FIO1-G*0X}aIqbh=0*@EE7;H^&BGs5WYVt+0wmrg%3xHTdbXKTD~@$m;YSPI z>%2b9(mgnHz%{G$(+z#8c4v#U*2@JI-yuY0_?=7m@`OYE>i?BzvF{=KQ4w^d| zRU8x;i7!)W{($^#v?p5GYGg!M-daaFKT(QNQ^!+8bm!V)OS?&nt!$iM-*KTO`d^l_ zc}9A7Z7oBL9n-6d=BN z5Q1D|I}wK%@o=)#kAQX3PirTGsvBLxV3ukfEobcaWhZ20*aCBsZEFMF zm7FA#6xDPY6J&cI+}#U)`TGm|RUZvxpn;c=lw))RsgB17@C74xu89vU^2(w&NzL$h>^TPXv<{O?Qfy8WC&dWR?i#$MUT)GClqM#e_QaMvv0t(?xXf8 zLVou$3}G*)07>;p_OYn7VYn$Tke<$|T#HQih=?Nlr9s2x!Eekh`zY{>`f=;OG!%3t zP$Ehp%v_?;)3Ox^@A+H#i7E*}*nAgizTpCkvwJL*gpUv!gYKuELQDRRX4x@ma6}_t zdNG$}y2R{a4Xast_N%NXHwvldQ}O2ktQt|@s< zO}ODOzi#e!{T^?=qt(UtGc1*1Tj)#POzdgH2mjV~>UQwN=L>3SknQlro`3q_we4YL zW~eEe=hDTr^%{k{CkA92bvVYIHEIMd1R5w(0JPI&>t9N$-iCR*=~KuN!kviF(sfv^ zg3Xd-L%!YczE`*^n|hMf`&3S3!CIjRl#7Y7;l`9z%$M`NAb-B3`sgImKNVFr<*1Fi zwm^=*%8nAk~g5 z{h-t)7C6(O+?&NqN(2}q4MxOnpu@S!&XA%m0~1{$*FvNKVo)$vce!qP9rZrCeteXV zZ<&XzzcY_ovS1lDMKkX}^bgvDa?k&HX1nCCATm>1@SP zDcK43w(RCVChTo?_;Y|*99rULHdh(|j8(ySzUexA_4N^Dl#=LB+|X`WG~!QmZxS67fJcclICT$pVdtE zM$0ZZLBjIaU-6%dS>A=|93r9%ubs8gCpS<{%r)YqLRCGeDU8)dz(&~(qS7J@^Gf7I z-YN0D;%p*T_Z4Ttk@0-wPi`}0IZ!$iq+c!(mB34>GrpeQ*G%o_UFV|2Z~+mNO?NIG zhhPbt_t{^nMKS%P=MQ+2^@>sr(b`M0D~`xnvgr`Sw@d6B`U6*G6TNG2Pa$0#vF5M;cn+J_enwMA_KyOEA+Mp3h_LkZ(It zfs92nN91ZNgT+>S<vBe~l2&P2@kC5Y+N4jwt=u z_2NnJdS`{J?|n5!42)e9ZP&we;Y}eAMc@}JoQstAJGm@W)|0&j7#R+KeUJL4PV5#5 z(JP$_DgP4gY`mfkWc7c#liVRw~Q+v&q;w?jlD$dNuuu(U(?kiDnxFVQLwg_hSCq*94KoLQcY)9 zik*hH<2Rm(W%lM}rUA`fT53|B?_*pJ!NqK)>z}s|D(k$GZ?G`#=e&gsQ`f5*XTS!i zw2+=?%ijeBLy;kBnjt%}mwHXK2(rJj6O56Qg{P0kF{>X4?g(y-% z^k{G(O2Hno8Z=p|pa9MvD*4w`k{98fQ?svmd9#FrZITQ}J))K0F}{zik7vO;8i6kg zJ%)38Xz^$*u~i`qKI@^=A!pTb?r|*xXx`$l>=Vyj+!brHnsj*89Q}QmGnZcpNa^G9 z5-?XE`WGEWINf7xQ}AEew8j#%Vnz;dy{!dKMZ6QUB%_XpqtdUhfw6U(%~)ZcQf=OZ zZ2qSa+A^OV7Q@^O+8~WukI>9)PMKt<=ggH(ux$Z@u3SdAhrd=FO$oA}jP?#+n?iL>O{Xi*a-!s*-==2?;a}-^EFvo75`q0%%gyChDms+M zgXgkDmVD4*mkKLO>*cTecMP2D1MR-`jW(07)oWpwlmahToJM7Kq5utLwA*cP+UtzZ zpeF6Wt!}&cE7omGS}B^JYfsE~wG7Pa4q>av^SlR5BngY1`z$n9bko>7p8Ier44&$j ziA@j<@KBq5Z42jxct1b(E%qzTts8Fdf195qLE_u@iI#upAV%zx4&G zDiykQM$J`o=tmrrS!A2#UKzqNUm$h7`~9_o_=hZ~m|(KY_xeN(xZtHWD?n?3Ul4tF z6VUEus>18GzQMTBGxj|vb&32DN_P|?Uoj#+iF`<(qwgq@YpjAY1r71;E$KU6P-Xs4k3l9JBlt(g>XT8`AAd$R|`m>&ZcrHOe>C- z%_Qi=>N3eaRHqJO$j~3W)253km9oOVdx?KZokx{*Zt++&vT*MI**iHxvqmR*@37sh z5jR$KE(m(zclPh@PQmAr9mO(~6Oy*Q^-Zp#vuJAS637-bC;b-Jb`dh}xYEA8YyV^0 zmX%dvmbIjH02bRQ_|1gVNW>qL738y_LkhG(Fy-s+euTCX)= zbH+@np{~zOxZa2jO(N%gPX0RYc+{O&K1v0O6ZqRMxOx;#$dE{H9NA6a}Y-O5kHZAq9pgRq}%=@#q8$959}dQ~7Po zDecJuZbyJ-f~xls*(WpGYZ}Ch42>lpx-)F&5#M}*mt#CNx~O%pt)S|wFKoY(*$H$c zv*@d*z(ch|0e!S*V0oNJd9*I^=qwRT#!+OOMh;;(y|+cmr10s^AO&^=U@GWDn1P6R z`rn(v?lrKVkvMfQrk7j8Wp=W2fXS*DkrOWLKK1+hmCwI9VS6Ynt)yPca2$ya#czBt zjh~%=TXA72DZ11gaB>jWT5VcN3xEyk)Nt-qb>&>a2?JRX3?!|GeG-Uja~^YnfNph1 zp4c^CdK9L^E|V!Yl`s|4(i*3h+2mKbGbiI{C;7dXS#Ozqgxq>`>s$t*$<8+(O;4@u z13ooB9j!1~w_kxL`6^)`+%-KGktb7+E&q0iy8UMb3G*FIS~r=j+>B+-1o(RaBN7n zreA<%VLBGk%0K-4`tv)ZLra5X-z-w3tj3KQ2THJR%M(ceA=Dpg9y1EImj2D}3k=1L zd|x7U?vK%e#j2ABxZ2)&6W77g%Vore$Z5?g!-`p*o&_Hkc~?)IqQRl5_D;*Pv^%(f6-(OwqI41B01D_)z z@%Oi7hE{`?4f?W41-+FQk7S5s)qqec()E{mDT3CpB7bk&V+k$dh*O6v?i7wco8J;c zG-Fn(8Io}e5w*KX%B(~of z1M=>_B7E%L>i1eVBlwXY>Kuuv)1Wx?th$OMpMb!^a|<=b3j^x_^GGm|THNYU?Ux>* zg3A_1#v`nAIVp#Y<}tr~=3-N1bM|tQpD?c8yV#1ZGhz=UBdNtkOy7{}LW};0_?h|0 z=9^TJS+e9NGG$+#qZ4XL-)S3q_TP9=a1tHAA=hK}rq62S2@JJm?2XKS9d!{!^a82^ zMFnXbkM}Q#!t3}Rr)0O3m(A80)_%v*#rhEhur2oFEmf`t;|DjV)v~IVls>%V4y$VJ zYQ(+!rZM{Mk7eRZtk0t}W#t&jvh*jB9-5^p--pW>fm^^arze9_il}6an#n%d+ZeIb zFgdAqXUI+a0{9DeX$W1F%hVu1w8St}xEHvWlI(DQT(+0ap;WB>3lZyo&l_U`Z*JI4 z9~^ew<{6SEt<0u7vYuOiu!wB+6`?v^m$1|l3N(*QH2o;)7jFwj{bZqa(ZJc4JP8SF z1m@`xH_88mVQ4>IGV*wM-Buj#bSuh>r7aqzm1@xUzR^vPDbH1Y)6}96NlJhh^*)mn z`A)r#pAgfVvngcAq;BYk;I?X*v~h`A-M@7qklro{5;=*=@>^A$L2aI&h(%_G_ZOAC zFSSl-V`4_MZcqC6!zi2dw%U$A*uWmUXPKG*5nv8wR*Kab)ckRP+rG6e(jT$TJXRk=>HA~iPt`OMKZ9QKj_FL?H;vJ3 zukhtFz>f4JYW|B9@~$Bu{MEwNba8*v)6JeUfi%Q`_`PvQ@N2!&;Pmun$#o=79V~wP z?Z>xtQRR}ZEM|3E^q-=xq)ec-maZXsZ=t$H>uskP`2Fv7#oLZ-{5kd-go9&ef=jtHIYPX3+ z_nD54Sdk*X%zc(+1%!Pw^*gESGE-k}SFc^a+9sBb1j9`&|9fBF(DuOVvN%^3b-COu zS2ikAex=NC$SbQbM~Fc&Acd!%2gzhMjH#pd3AxDpml6%eN->d5A!K;%pi%lF&yb&j zB1J~jEp2zU+A{|JiS_5;_q%b=@*{ORq_e6BXKV-kI2M_(-x_>$#9i@0i<#9 ze)x)9@jb0{C#s+McM8m0Gq{n*xt4>EVOkD3?S}m5qrJbU1PbJ1pYNcJhhZc?JVIhq zUmYZ|`5KX`N%P2#w%kj5y8eJy`yqAKhKJ{Vc-10u^HCGiX}{uwUxIV!xBqO3%&hMD zX(I3=*sYuPcz3v~7kzQO#4f<);fld{TXFx<_byfLY`Xd@5iwonc)&e_WM&kw)}kR7 zRb5CPs?FEVJh~Sx?y*9C#^wgZBrL0sr4pR4xkn6uiL;m>v-mJ5Mt7OriShB^b7zg3 z`0wrtjCKkkC=YT)ofL@(Z_j#Q&U?hG`dC>i3Gwejc6MHVWvP`DwbXMBCq!C(pITJp z1a^wNZI{gEnEU$)QQARO8%AMi%7z5I>I+Vi ztu)G+sTjC;s?nj_W!6QG#!Fn9CJ-)Q#KB59dxhOz3iKFFs3-($lyK@WG2xDR*&^AVrRZZd7+E zyIhtHSd6kmNekG2D>P>Q56hZGUMwBqGON^zvQ75zf`RDm)++8Qy{lrM{Dv{EtrD)` z4%U{gH(Z>qi)|JoOBXHezs@KW_t4OH@1xsXKAnyZykq*a;*wM%n}s=`tu&?$nN*NH z9>y$Y@6{{LM2G+}(G8W$gLl+)+3xD;3dfHEj`K&O+$MtjfBZgt81k8W)#`a){d~vU z@*lwH(bRJ2jw;~>bpKEbW`<)COw4gVLb?lnwM9eG7CAN7b-9@Z78n|pYx$o7Mwh6o zDXULoMJ`f4ZI0o%16F^C-y^bKkJ;ou244=o7G`=@dkA_Mmt)(Xd?we?qk#kcYd#9{g7q}@ z=Y|$7KkfT!?V-r*DNH&*Fd*o|I%3DHq41DTL-e^sv{TE}vDN*e%UM3b*VCxvhi>ho zTnCli9Nzzq3`m1(@3glx>n&I@vt&pM8m*1MFRIJisg@6Bk^urp<~(3zQ4UpmsOWX& zS83zjI}`2p@W%@DO&bm#4lyWO}jJvMcR8B9VN(_yXad zpn!#~&VXEdu#V)rJ~>dv`e18T&IG149yCtROZlJ05Yee%5~;UDp5KZO>P_>2Tr|)R zEBO63JN(c~GPiDgSB?fvHqwdzpGK^kPq=J)AP#A6z|55^2C(v(LLR*t0KOja|4T?g zstsua2|fkv?y}&lTLej^bQ50d2*6#SmAQ$WnL-L#$?iJKIFJb+l;!1Eo`f2sjc@J(J`)03-r1emi4^CzLX`{<7o69xcfe8xSP^;jBgw$ zcXZ7pF)J=-z-ELql2%YN(I)?rBV8vr+c2 zS}zLQC6mX05lKl>TNrAIF(WOU`^>2_v+J28h6s*Xxrw}gHUO5lbQuzu>zwQ83DQ+JHtS}PLb{{eF*XloVmoo1mv#QR zJv%#FGMOy$^RIC)*wdGvVAy<0i0ThYv<58zcM;V~+tsz;-WU9;Co z@!1mRI$2b&N>(0%!QGK1mf**dug_H5US~ksB-!^pdF9-5Q(?dVY^)WraZ9)1nR({6 zNn9^c=y0=u60Is?D#Y;&-Hn%xMp|TI6ly7a?53n@A*HO9390i$j$l8Dm~|(-(_ZHb zj~W1c(-+t`AOV(RD+^+R-GV=hpRpZrAeek;%kl1wF0>HiuNyF7HE4!AL$=kt?b1tP z13CnEMSuiz>=&*@ubcZg*SCT3f}oc`z96DP1S%-lI2b_lBI~-CJ#!N82fq8;jkZ4W zL;X}ef3KZd)MqwZQRNqR`TuEU9rL3+`cA3*Zoe!)8kND?6+j{a)G3fPFmZ7#ruv17 z%Gq%<}Fq80G{mi#!eF+j1 z`uc7SVPD_ZAQYGlC+s(xaAQjg!e)#c@FUc^ zj^1FH(ds9MYF;?@GZPjl5k=HnaJy`m16y->EzKlSa<1+i%c?_4j*W=Lljukc(vf*^ zC<|9h*?tw5%k{llLlgB7eL2DrvXLp1^E9QiyngGz(6(g^ctUmOBJIjAHhidxH>#Sk ziIH1)Q<<*TKVBfC&t;3S(bG3ub`3xGjSgHt!Zg-(M^{#QN5NimwZ}YG#`nKF+z)U_ z#p=diQz6KQ{`?j8%aG}B#U1sK55t!)c_JWapim2@*o!?1ZMwQea4px?H->fvFR?{F z^Z*n6?`5n%~hN5~7kfeDOr{T%U@9^O!8v;C{?=_wz z(_XqkeTx3$uVmhSsZ6rY&n4Z%zgU&YX9%X2v3+tQmR)C}v2BMkpKfh5@XG~O(g7#Z zS;bH{%noAr-`sjY#;1f=LKPX^! zv>9?hC?NM(DKtHyG0X2|uE7D1)5``hj&M7PSWq>mt~?9RLIOHOX7=GJICv-OjQh5) z9uvADg%zTf>$cl#AxpoRrjjCMW z;WnA-0)*rE;i!D)1AIio6~&L@g8Jo-kwv7DikDc-w@*B-ISTzS;+-~MwZn6|$dAT1 zF7s7G_2z)25tZGLg7p2~=qPIjNGRp(>93!uKEJfgrQk=bOJBZ@Okf6Qo~Iuu>lWIc zQ?n)&qF-5D?A6qh;KNCa|!>s7Ay37ynxI|G`Udg={(E9x;BnGIMOiThX5smhsa^hHG)oG zg{{Qt2bakl1EnCygm+j9JUMvaC9{-;d6^&WC#ZF70uctJ?^+#b9Um)ox{jqnB$m)J zKC|kW!83dyI}ZtVR*X8u3$YTwy|hr53lxKn1WVo6!rfx7zLK$ItfQWP6C+6`Ne0Tx;TI?h8aA*wA2%EpfAO8RP~KaZukfpEkdQl2mv|hB^#zdQCckD83w#n6L8EG9%SUB1Z zMP!n}VzI*0$lpzXGFY)fB$`fI10$#F)J$y4b1^%5N~kyQDFzI?lyP6^6(!o^JC#aD z2x*9#V*G#4(~~dmhFt_7>YA!oJ%oHoB?i}sY%S#;y!LG@ zOA5`vh>5AtWKvv5myL*N)(&LoS<9j?1o{^_f;aEZ>eAn*ff`E(K{~t7v)7T9xpgV` zXfpkz<9x3!%D!Owk<(SL{uKAs)!oX&om!lxi9d(%pQ$WyV?BnMO8e2si0(#yQX>?k zz1X#i_7BVd+uikO9Y;*=Pm#h<`48X_H))B?yB||_Z!HdOa*1*hC!04v z+c=v{=h*`_?=SCY6FGWe0(<(sRhKzg>K%Vx;An@ojEFlr(oDhM;F;`G1BbmZ@snGq zs%if|kg%439{&hS*M=<}90F#dZctDEXH7Z;)-$lKm36PPc{^^FJfNVMUz-#1|1xQ9 zZX&{iE;%QVZlRA`I9_QMr|V1SJJr=jQr;$#%EI4&npP~p#b&eI6FeDmTrE7PIQ^vK zvGpsj<;{T_;_}&lqaE6w_BJ7v8HMc}HV#|%HMJLFuWC>8$HvA~pLe+H#~RWyDEX>% zk$j9umAgo#I5}Q)d>JB@c|HIPYC9LL)3OZzd&?PDDD$0HR}ob~Hu%T@m2PO7-m96h zfOS!@RfNC&=l{6sSW^RF$r6GNy9;1q4AZQ?WiL@0$9j4+!{rIGYhYQ+ertOzmKIWK zANL>m0^(Z8?SgGk@-5rXzb6OS_k_d1B?<}Y~MgnwIbog|7UKU|hAx7^oFc1ygR zH?X_t?XY$4<0dUV3|2o)mxIGFK#AG)5Xdc;mHl8hvrCvnADqM&z5Z(&0 zybCpH5TgM-BIOI#cyXdttnIC}+P?4Y6IF_}dCXVgKJ$sbRZiZpF42nWeaFD{0tfP) zY6lO|szqbMaB)-_PM9UOGVDmwFrM>%Of2MRqwzKRsa48bvkp(rw{OT`jfKC&%YV_t zyF`hZiK1kc2F=y5Ni7xkTSN|1wgesjVY6bb(-_8|?G@+-cnL*dp)5!QLiLR8*wV2J zuFyxE4I3|0@#!Nk%j;Ok;8>obe;PBwQQT=n`ey^Lb%UHVY6{bT%yaJPlQI}H_Y#-A zN6Ez^@ITi@4fIjY&G(9Q;K6;xX{ZBHAu9*#2E70Y_NiVf^e1q5&p-XR>eJvAbp?tN zx(P*hd2_b$cXG9*UaesE`|v6i?#p&9G#N8(h=stj&0J;#4%ZuS3zb4yRk3vN z-l48nFRVp^E^ttrd9$;%Q&7Xfzjo+eWMP$sfMb;G%-5RP6VkOvter0f*26yti#Wq^7omjLKRXzLHpe?I~-#^2o#9!f!ixW`W5?Ry_E+i0-(<3 zWW!5r>3yqADg+eVLC;F9$|ycm@o=-R`~P$CU!*e&Q6BC8Yj(a~z(i=)XqG@^70VxY zQRrf;iT{++tS>U3hF56MzJA6W5Qk@rs^%@ zZnq1!k}dw6{5<5usX9XgpIr9oGTPa$yU$uv*QY7ot9KnG%j^idqh0G29beKb8ve}r z9!N-yE=sk(ZWXy0@B4T@Y4%2ihFJD=UB}m`p;F>|zD|NnhD@BHMCf#du)^fd~oq0uctzpj$B(Fh*SdZJtsucIpV=KJNeG z&uI~AiaGE!qjD(>x-JegR$D5V6a5%#jOL^5x*FIXV2b?op&t{cPbu zKha^sB9$3#5Uj#MF5*7l|2DKS1U~egV063&X8a;cFk~%Wy@0=}=?l>Qqr!oyjY9}a({>Dm)-LYZ? z!r^i2(&I{m?IoyJ$ktsxwlp-fv_uPA{32{dPArYg!^{<=(0@D;#lgZlM zAcZlz5^^6Ty3r$d@r(=X=RN@sk88ghIFe z3IOpr9V$BU!L+DD5sEMdHM)L1LC&|*JGluKE%$`MqX%xP=pfN_@0XA%mjMQsyMkX^ znzO?IlVNUL1~i&>esbB}+_Bi-*-;1zC*nx>)JY9A#kFIMiJ6``pD=|JTGF1U$ibO4 z%+IVGE>=F$uRH-Mn5&9(yx`_Ps$SSH6_=<(Vq*nnvUpA_ALHKx9Y0Hp>~QoLWjgvz zar?`nt&NO<{;*Srq)-j=7{cRaq$T;ihjb_XbL2H^O!%rJn}d$l2)0}dPs7wM{MN%R zwSMf&8z*}C^>sUA2g^X!vtO0EKQWSz;FQ%xxL+T$oLEqo!clGHF<8j6GusA|6&IPlKacuKnX8OV44)G)MD6x1h zdKKkdk7S-@Q5Tceg6ohe$B>$anT{x;CSQ-UakRyGHos|L^PvaOyw_G^714!ooELYN zK3za(mwXyOZP5_!x0t-~-zY!*38ob={hHnqUpyu83Uf6wUMFslezZN&YBnD4jr8Zh zqfw(Pt?tJy5$S)9hzV`terG;!bk<@Z%%X2N7U{NL)2A*7^9Vq$^HFI$R2=5>uxjj+KRUX^&BxY10^*)DSz~JO-du4(vF> zb8TB=hhYD=qH!fB9(oiYy#~+DjVHI0MX(y1#a8YG6z&`-=A+alt!RVQEEVF)U521DV&1)lzys zD6(B1wYQ%*bCr2t&?wTpV&r+;JeIEhzNEW*v|gM-2Ok=n2Snb&FVZWkg8O?dz?(u# zI)APu3B9t*j)hRN-nz+fv42Ik!39XIluV2az?0Ji<cnjw3VTR$3U3Pwa`=bB#aIaYD_bN2xb|?5iGQ9{EEbV0M5Or2y0*q; zK&9-PwFe}_Q++K$Pz}v8@4{nX#&f$6ld>su1@T zer1+fD$pLRJ3emv1(@iBYJn+g^xB+Pwt*id99GX4A{tD-Sw(>h)O^i8c6X=7UtLcz?ILL;(ILGnkpyGOu-KJ8{f zx*=7lFlT51P+N*yp;fX)0;7eIAv8UYl^QHS2ZN}~BZDl=xt}Q)cJfzRvV^dJNzRw2 zbpIpq4!H0wE205SzbmS=oW)p$nnrYr*4WgL-1p5AO;Gh7`lnsjqfKIBoj+{etK);m zZISM!QAEYSgHh8VG=AUS+mgDb4>)oM43*Klmj8AC(vh@8qnLknPGdhA(!3R5Lg;fB2%ZP?BK*e%%>Dg2J_r#8}+{^1Ae^XPwNI0h2*6wrQ z1_t+Eg{sAIs$1=D(~SZDmZeOtzPlAHJ0F&&&m%XvjoeIWpCcE)084E~PZD8p_yBan zO#+$09sE4}z1ZK_FTEw`PS?FY89V%ntc(LPbRVVca(066$8CF0(+L3atXhYQSoc~@ zq1idrkpXE1d{@>7-+-AiLAGahjW`+O=OSTs3A^$A6^>&HU-CEt(*#cVbNnZJ|67^< zcr~%KIiSVF&GnPX^aHL>f+psFKzx)(YDJq9uOu+Y-+FzKeMUk(+;}*zIb|yJ3Xuy_ z{fh5Cv(^^0TmozDq)d?(#^2PME=|dGd6$orzB_nW@+6RcIL~mDPTod^{2pIauzAZ+ zNCf(^?~=FA$3ju%QnB|`H>IE_^L8R9tqhE|EJ1yFH5S{q+Htv?@>}aXQ&OHrR#xQtP_ETE?sj}Mo~2myMKeI`%BW<#!DjuZ2&uaJV-}rVwy5|gEAHi#2c!4j zvb%2a(&h*RW8lB`or(gLl;XmPw2+K+rvhx6Fd|Y<{(Ul4 zW#NHTKf$vllAHFj#I%b4)qB#*QpVI(`kb}x8HtxP!dBEonSS!X2x6+ZCI}`ZKXYas z@WRNY!MdOj1JeFiMb)kTPl**K+Qgzm#smj*Ylb-`_3u3MGbf3Mm;(>bxEY`KmsU+-;6 zSG-0@rx7A-omEhf4sC{0H|*J^j*TxMRX0|MbVG}5_rM$>1UCRMDVuz}-1{!~RIj@BV_W5>0^_uIIT^lJEPmbSiY>aJ_5j>*IrL+q(uX#Cc{XC*I+CGG3aV8Jqix z2!g#|TyTEg}hry~P23y-I zqn5ReVAJ9GGw-zLBOMdfsF;`3kFq*tH4M4n79yju4d`&TyE96=QPU3gMMvNpL=OI# z*m;!OMGi%OPTBL?@(-xX<9(RU9(^dGvARV~^O#>HSFMLq=regq{dd9f23~BxXuahrTQ?&?o5?v$8tGJ?F1pfPNA9a@Aj5vdFJ}I)sEIpz-j9d>AaQQp>{@?!fHtcj-sqh7ITP>*T z#k$bb!@YMiotns(v!PZiwKa3nR;PrI-)z-D&WQP5e$n1V4(ksSLvp9XW{=24+=8*s zg2xA<2OI{TaAkDuW^Z7r4@M;A75f#21BNi2}~w1zQ$nL?zI0I+YS={?Stp zARv*t7uBv!9D(x%CMn+b5-=Rt!G3@|X>u{Eob$s?eFadVI+eD%-XVmajDecpFHy?H zfUMu zRsOH%7q$CT(`#8y_hGFb-v87IygWYF2EU6zcdUVZiIIujn>f!;m@F?Q-ObT!1jq*%QTTCADXnU-(Y1#!Ke(Y7~%g0|PeH z>enPjR-OpK9$|2^xb-_4*2)f}HV>-49L0HPb8}khx;ZM?n6j_@-BDY1Q*EeqMm$zO zP{6pTNMXj6Z^Im;@&=()yzj=-PJ&4w+uH+rV-3hm83}ra(M!S}4wNH@S2ksK5arIA zkP{07(O_sR58c&O&hvRr@bkUdv*F!!+OL~@(Yh)f1-|>fP4>giHP>k@lhf!#NYqrf z^}A^OP}@u%B&&L~f+$h8Va-7+UjEE<@QDT7jez*CBYm`oPKTUa`oEa$h`*_#?T&lO%qoOV@0wbc#oK(A1`sESr8>3iUyU4jc?5&Q;tmuOTSc5l-wtAs%fE&B= zD;d@$!R#69N{+C!^uYX>QWk5`kM`t3GZ~-m+D_BvZ2dq-)CVgzBo~9`Ul&cNzhTOI z+l+?X#GimQ7_<~0>hnFRD6gPrREXy5=^@(hbPPATrMzr zb`0fl6@jege!Rbsp3d$}$Fs}?p*sEXiK0_MB_aUnB`s&mE#Z&}3G}i5E|_Rzz(PL$ zEM{U8Ss#Ey$vxCxy^U6>ROxsgA6);C zx$PoBG(ejQ#(hH*grPd6SjhTE9F(j(Cm3mLX4P zvi>slzn^1{4tj_1W#B1`L&X;x^jy?-$GAfLkBoU8*^(U{$3e ztoSO49I`KA)rsG-xYtXS&b1rGH)vh%&NqHskAM;axo~f_z>B{I=7kl#Y+c(by%YYdE&#Uy0;P+M z%SCJNvH*AAiOt)w20BIQ=oq+`iqBQuU_!ugWopMbDM4o$q*TJ zx!3z9IMYrpC#HDmD|MrJ3$d=gZQoxtk&R4Jv;r(fi(P9S`AoM@imlz@%nw`!)=eIc zZSB5aDWqMW4_wvF2Iek~TD3Kt728d~0x{Cqt=3n3cbzzvhQ18vffFLAfl)oTtr-sc zGrVOdaat_6>hJ}7{HF51)c@UYNX;z&^Pd@ud{|7bePs3_aEjnYUfAvqu*AR(aC zz#t(Kf}k`=Nq09$$IvO#E#2K944p%FgEMq@efRUN_5Sw z>`OjAdOl4&<4n86^_jb0Ut`3d$ewxXXR#BYgt8WQ*i#Y=2{e#*W6cR=nU@4h9T^x? zzeM5kErtQngEE@bIRE3R(w*@LCoG}KoiFMz8-sg&L4=X70H62~FhJamcdW4eP`R&N zDgcB^;`^4-bkg)m&vFmp&nJML+`y8v^Y9<9*kz^AiMx2Cz0RqpcqO;$JO8@*P+jGfx+=-*_S~HyVn<&w4T_mSv=_ z!p(9G&#BHLNFIU)(jMqh`83@7y@<~D4?$nPr`U>&H0>zZ{ zrPq5q_RD0UbZ8IiNnqqN49%Gkv6wn%?DD`C=zKLUm;Z!w)YNv#`H`*3zm1pAX{(=F zV3Y;zX@B?a^35_j{(cI-GZA31=U9GY>nYG6d7OKEjPKOzPA8uQ1esTJFWu{Xe5qW( zZi-iZTNpl#=8K&-yB1?fcoEd z9o$&UCmA(R9^a|iw}^Gx?E`t{@K9mNEdykPI;x^{W@RAFHCvd#W@R07@#+5NB3hlH zg-7n_p4jKvWxIz4e13VeK_8~|v9BOPrv>~#)iuK@@$vUFY}KDAW=>^!HJ)z$<&#>8 zbPKK7<8o&U9a!vH@lpuYtLt1lzn-k$(i*Kj>I1~U3H*(D1i2Dvv$az_sAt#S&*m_A z%Zr|R*5}geKKs0v24AdTramx)c6}mDWXZ$w6UpM=uMPIyjZ+kVsLI-O!%!{F=9>kJ z452j*=Z;ZAYIa-a2-8gxyrDrQw3Fu(JZtE#3JuI1R`c&oO8?pHzqo0tg%bL;fow|> z&f<7>>m>=#h@PEQ^2YmIj@}32RY&VN8F$8BXw7zKF2N~C3Mqx>dZmh+;$irj%MIP7 zjPNm4p%UV#Y92bIW~-XqvZbtkJT7_Ib97Kp)KSj3<(qFP59-m7b^P{!3vht5YcDaGSnE@I819~1bI}I^S0;e(i!mO3}7nzB%pu;t0~K?3(sO^lt-KKb?j zQIC#nCJ(hhcK8-7eia%ezwDEBzSkna&-*fnVfqbe*04K|C*M2$zx9vBX`Vn9UfBlP zQYGlZflRwD~La^GwNV~&?r4W90Yn`2dO*CN~JAbM`TsYSaGxkkWB^?rF<{qMZ zx>^ebxlA*k`w4S!MG?ZJ%K;ZM>}Sj5^y{c>ThjVcU}0#UwbS?Ogdj#suA@R5nuhbb zPOn=+3g4{PQ?Op4IhkCp2b6c4hapM!U-^-rnzi@c%-_?)PYkJ4mgxxogD7OQos4{q ziW)R(`ofF*-(>g$)sWa+$nUot8tQlxtpUrW&(1m1t)PZLIHWb2$!d7H&BSKpd}kA& z%9kS-0>WEJ1KKg+lpFk3oMXqAaV4lUPPl8deFt`n>^B|%HC zzj|$`U1;R&qXJVIH{AoNR6mV;u#^IM*jiH(?EEx?uX{@6>KG+(vPxj&Rn|v^o0lp? zh(b>PPU|PEElIzH&TduqS z?pNFShiKpK-7sMT&#A2Ow_nfzs&~-U;;H@nPc2pXP{qiD)i78#TxO5}pKhN}A)n!ztRdT&wvLJL2(~0CpT2P$Fc^1SS zqepFDRHqrJQzzi{@@s0z;p(uRy>GQrU66YHV?u5Dsb4%Xgkja;T-R0NY>6|k|ExFv zdgH5uYfv}Vyi!iEf=S>k!Sj*#02boX+L>gXDDhWZ&ictBjtZ3q`v(kZ9c-tYY^yEI z+dsK~?5eitZ4GkA|NN2%i*R|5sQvjO*0wDF)(0$y5pwo5a!C`wTeW_yu=g{9?oC1u zp}Plbt*g&9mgn8hZ{6d4guOl)S?pK^F1oa>a7`lX{sHDY+b{N(;-+Mu*fhC_5g~g~ z@2~s$nk6)>`g62*YueT|NlnXeg6N}|)h-ujqy%%l0Sf3l^nVuPR@J&A ztjIh0dp2xfw7*B@=$(W^eZ?B8=to(m5N}sKJPa)W;mOka@PdOWkyk_$$&#zwCG6`z zn-Txsyo$E`9hij=KmU7#or`IPz1HI)4%}TfANojT{}IXrw}B^rOe6+Z7T>iS+i@ti zMG}&{+_yUv`}AP)Ng z7a3c2byG2*-zE+2Oc#LXIoN*56+lmyfu2Da!*q$$oTv%D*B{4!9tD4QX6+Om)J%`n zZPSS<=wt!%XOBzEB^HxSpixDvw$u`N_N=pdY}(|Pq!TyPezX{MRI;t4$k4!|fs*>{ zMUPKOnQZ8P$Inn9X;*P!jBkhaQ5A?gjaZh={o_)+# z6;$rtQ>`Db+q&?4J1p$9CgS^v#y1K^CqM6Iejr=&Doq`1#UwQ z-V~+_ILyS|d_801+IgCq3Z3uRv(7K}QWDcCfBNn+Z!JdaG432%AsXGPRMq|Uy4m&8 zc072m4%6w4Ey^Ekp{9XYS;Xg;bo9vIwBwI5gq6-W%kIDzHDyLo9~cnWq!gQwkQo8= zSFzEo^(T-HY^2n7BEn4h-VzcHCnHP1U=2M@6)65@wJ3htiVSf`Olv%~cB1-5;h|Rc zBW*Iiw!fh|mlA1|^ViZJJSG@*ZI!254N@Re=RLPykXmCc_7;Y)kv!TB6JGH+hD>5U zAOPsp-;#LZhWK#e0jWFV$^I3_&6Wt$|b*dB>cO-gxOT1!CV6G0yRmUh19FTcf8NH0}{u zyu(x~Y*KDCorzY+f)-jjH;DagT&oR}^m#0GbJ!r1wa?Q3_r`ZH>qn9RcDi4wv=DZ> zv*BkhTwW_aKfg^X@-c~_dJDt;Deh07)bfOLjKgDfk0+kaSbB0N)~^<}?pn$Vf5Y#> zuwV^1wg=*FCZo*+o*${HE%*NZ>0u%2f$?E}k!%ExyaA##y`(qFtJ3xk=rnrh2k@#H z+mL$d-*+AU&J#$lr?WFlEs?^f^8hB)Fl9a3IB`;Q*MTRSESf!w5D6%VY?vYjpBBD)2Tewa3A&b)^2T)fgjA<&AD zE2|Kp)YJAx!I{Z1Z%xrm#kh{ap4T#PD)ZUxy~vYhp#w7Eb&OzXW4g*DBlF-*h^8X<~>x6I8xnepLY7?8k?!{j;5tR$1))!z7Zqsh}axnO)p zP;g*LEFIfRQUm?{`|+InIWtq1!AbZ4->|xFHeKJujAwVPPLpSOX0vu9Kb8wP)n=<^ z@H@??W`|Xxn!mv%FOX|LKR&eL&#jLRxHKxzhQn}^@SKS@SOhvwMQ-Si3KN1x5xuCBpnspv4SvJ#PBv-7Ur94 zE9rZf9HbXZGKsG!1trGMYj$A0Paprrbxx?p;o&%Tvvqr$V?Sg2?JOIIh_-S>uro!0`^Je>MhYOR>aI zAgZNI)m-_+Ss*m0RUBdWR?}gwxU98Qd+syn6k`2>Lz&$nB8Uj5;HZ6kyfcWDlSe0^ zfUEm5|7Ep!tK_EP1U@3NyDPk(mHXSyWHnetXI zv#H{A08bENr_9u&=|c`gxdK2o8Z(Egx%_117hl|AHkFaA;6Cun;&yZ=5-+&9?~o;l zu9o1_>1D#F>Y!%`?UxU6eK>SZ#iG@g<&cfL36%3XJ!Cz%V$FZH)90X;DW2y zDTHPAcV{4(EXE$v0t=^wZ*1f*V^vhezhCLsUN1aH+54pL~d&Oe@2iHXYG-ON!Ry_ z&jQt+^w)7xrpC__T=P5$?3aQ5`IT{-CCZ0y#_$nE^)xJq_6a2P=!TrMDrZK>2<=%zx~r*PB#JEPexuyN?@)IZ{=)Glg=v2MJt1>@gV?EO z0)2s2T;e=BJeXhJ4SN%VszS|0_`}T|AX%&cT!F#_CKjX&JdUrW2n**ryvI@oj+TPQ zCUB@*OU=H3Y&J~qp?&!O9O}|V?(VH}DW7T*XEWO$x5CZEpUp8w*jwDcCu+>Mhrc)u zCylgnp0rQWU#WbL@ERCFU$!g`up#4j{#O|-((*VeF!}D^d~6G>3i9h+FD_lKzfwMA zp28r?xp(XgaNmto?NQr)>zW#(B!9g3zE-i-a@1HC^3-N~A~>#35jt3$tT5RZgZ@ec z^_Enzm`U+;JeZ_v&Hbf-i6pJJ-=oemuPkL!QEyAscVpk59xNUh1Xb2OhMPpDC21-H z3vs5~rsMDi&8p667A4)Y7x-|-Bd)?io4mYM)y;Cwp4}YWx!9|` zpK}eoq=zW0H@7|^E@e{cT;-4+?P|%6h4(<@*k*aqy!y9P2`UMx-4gX2lhJh{mrF(2 zm<9}F`%bpszq?=Fki1me^?0G zdSvrGhP389QlQ!8jt}6WNqGIo%4rfoUe!qDhBmp4pAlKsdqENy9E-+Z{Lnr$C}BWd zi7p3j*eF7Xdr5`|(Q_WzENJnZ)KPS{E-flhq-`imxgT8>3CxV3$?|)(js?aNdS6mE z+R#eQGH`*Sj1dC3apDKq5BDQzr1Ibsk_7N%C{B*?{+K_=hSq{9gouSeOq%iIKg~lO zLjgA1pMMLw-6xTMdiX*~PDp|61Xw20ILga8Q6n7J28d$Cf|swX%0LTzE7pY7qDHM-O3iNeDKVn>pJv8HKZ zSz2KCPndy6VM`4br+qAVj)QN!A!~81>LcTpQkIv{B*&8YafQ-$ z{W(oKza!-I4Xsd?K(R74@n zU^49Fzi%9192qf-Y*_B$&c7hg>ETX;|EgF4}BY=+0-AV z7iXlehlGEtM{^=)nzL#e_;Php%*Bs-sdlajRI$=IH0(y-xIcw=l&AcxriD$HvaS#- zMGi(#yw4(Pbg8J-nHOVyrfE|B2b8M7M7P|=;bS3InF>5-p8{Ovt5A*iXAj1irJq;q zmn>=a?cDGO6T?cQc*m`ig|BE{^_{ntA`?;*UOLswbv#4IPoH7=0bNuaT133Ch>+V> zJbYfyZ)VZ2o|!f#$MpqJQkY`H#hd?3-~jOVJ3Q{uyA*uy5u5YHprety+ZwKqT}wYp zwQ1!5^o@@>L`>R&*~FEFNWwofTuT^S#QMG{`xDdl0L%rg$^bSLji8p(et4bF^kR>u;u z32;=%%9ZDgEuTVeOUH@WH&#pHHJ9LgS;z>te18_^YI=a%2iAA)&1?SaIs4Y?)9231 zNhps3|0|yN;0F3g1ujqicN6dGrS3?+ErYyy1N1yCohAlFAJ%W%xlRMT(n^QDcZNUw zM$BTT7s#8mAIerFs1!G|Ql(c{zSuzu=P?5rqc)YIW-YLrTXbP-+#L>wMgv~k^A4SN zjk&z6J?#W|%~`H{Gx5Qhxkq%~?^!m-^uS&_53+-a7I|TvAj)UyxiJO$^zS2cj8pyB z)I*4*Kl~*A_a%4oEJoH8OURI@+Z)pzdLA$K7)8|`nZj#(IO`g7QKwXQ4Y->$Zv*Aa z=C1!8!s1ErKJ@iQ7W^#gr^~Y&#hQ^3Tx7Bbw*275x1i=r+hjTzQe*@+u#&Oe=FSoH zka(Ymi~M<>GSP;0#r%u0=+lW3Gv%g6DdnH;ycgE@C}C*q)SE&Dk)zZ>|GY!Gm3*m= zI^BKP&tFUMboFZlH6mFEtyp-W06~Lu-$M)TyK^P7byfhvUjYlYZ z_OIusf%2fdns~&6we=Sglul)t1eej~d+?b3XkCidozZ>gc-3F#_F(OZa;m-RG_9b4 zA?ZUbgm@*ah-749m^PFOjjdvMq1og#yTjcBGpbJmo%;UKgJj3a9G#>Qru)-6Jstb`*iK$1sB0X?%W97crg|_4Tki@HzGi!AG?hOU1xzuS9XARda;Q| zyy5g&((mJG*B)%@-4~wU5*@K_C1T3)gd&^jfT9}vnUL<2#6j^<``{H3ZZN;V-qN@Q zX-B#@nrB1Ei*?LcEz=4uon;Chngd5_iwyQ%8ax^&VM68en4<2QONm?1mds4;ZJ(%8 ztA)Jse+Gpv@NXHnBagy=MA&`m9U(O+7Y=x1Y|OFO?6Mk_54Zld;GDN*N2U6*Uv z;t)gVnICfd(0O{213}GT69la>iqKGgn1$fQAL=*&x0Fvqb0e9RO4k-IR*5zmYZzs;pO~i|;EDlD zYt#IRUif*11Tc0?rVKPfH>lU!z+>1jkT@u8qywk?v|!q|v(5G*40L{%*m4`;Yl98P zd&h70RjpG6&?D)Y9EqyhsA|_5<4~w9JB!&$0XKBa4;z3_$vKYWW3H>x8crA!4UI}@ zRSdMlho$YsrHf_pNp9LPMibqN?G0kNjq7c_b#~OJDuL^1)0j^=s zwfP2Ts<$(n9y~qbMbk2`rsCL#igiJCQ9)&1)|I)T^(mtO#Z$+l;&Ly%L7WR1@NH*D z}RC!uuMvNXX;(yS%>AtMeuTpE8-A^g-es z;Y`m%LEb+1X;AEv&jowwuD?x4V=bou@JaYQpv$t?m_C#z9~SpO_aen&yvIYX!h~9lOk0K2`9Dlz$Xt{EC zl(jGIyb0sBXd!o7Q=KhWwaCdS!dI_<9%cEx*<5Ocg4DFv@zIldakHGlLHGNh&t9Qq zoIp8NP{7!JiyKBr6)iGqNi3PP^Q-YNgvc}q1Gx_S?d7_D=YFB5;3rChDFVDG*=%Wd zX(92Q+82Z<26c;}_`H1Myq#wr+eO3MEsS^u=nVIzh3=1Gnuy004v{o1(oL5Y5fB*>1t; z`T5?8s)_0~Zc4-7=GMPp{q@nHbL?&H{_>S~?=BVkaRDM7bFQ?}TC(`dq zJ`Abz;5O4D;ENtv%JM7E&wsH_J3{cBBGSbedItUbt%2cr0c=gd@6`@uC)^pxr!Nu; zjRFmn#;NMMqc$Fk8#RsMSc-XZf&kCNM>oxzPie`5__|(0JS_5DxcD>?z+*S6&`Rs_ zH})#nqQ%PcHega5JWV+&eUuRr=e&gn9@c?!$|nEuw3d7==jjX<2@!w*#fOGaxiSiUYd zKj;OLaNSjV9A-pWI+9Sit~H@CK}(frt|xXqy!!B55NHgI}NV5C=|Z` z%KLRZ3it?w-2oJa#o$w=?Ip8>Dp^S4P>6rLcfO^wo5s?QhI^@ZcBpTnqDYr zSJl~ z_W{Y@Ydd75hV@pBK@c24zeq%*u;ND=C=VMjCe6be(Fn9yV{Ef>^Y;}29=ig;UYas@$7ppBvM&dTE?=x_5-~<52BGe~~>S|`5Pal7&6TehcxV=0OCs7e91wYdg%=VZHiY|Y39;s&vVJbSF z8rx-x^j!&O_>#4v;AY7(H}Bci0|J7UEPJn+=(tkDGp48cM7^%8jm7Mw{qX~w8ey6S zt>1Um3x>v+Z8Ai>()hmD1C?p~xfUr0rb!z7NTC{FOjKCDjng$b{WPa7R zL?jXAbqx`AL}M$2*jGcT0=)Ti^Qh;Cw^^ILPOtuj50W6?xGPrPh9H8*SXiU+{l`q}WfHD1hN?mR0`@*JfTl!5RrP@Jqk zmjesy-??fV&h(kHrgGqG{uVrZC=AQzs;l}e$kDs@BUH18U^ujk1L_bVt~lqn6> z3rKkg&P5e+%z6LVy9prZ7fagMTTEC{!(DL0FsPS=7cp^_xKcX&bQr}Z%GV7@8J=e( zvKl6IRWJJfF_bDTO*#e*jWV@SN}8-%y}~8{x~N}i|F3h~Gb#|n z`PCKb9y)(+n(iac;@4R(I$#fH+&0X<CG@upY7uDHI0o-7w zZp!w?dV+5>>UgeDu@t_&;C93#1WS3<5A1zY4-}=@Q=f#Uh1dp2VIy#nT;I+p7?qXt zzqnmFSfAAQ>&%5Kuzlw_vpTuRbEf)-dBi<=pzTuR^vA*0@s+>I?T{Rij zDo>V5^v35M(|fA)SYF!B!)t&xPByBj(&mKYp@|E9{XpJyHyXC39RHkC0_SOSCA3B=NN8h>#ji$w9p#ee`h%h(L!79c^SZRnb{uGxo_95v)zyI*i9>S zAmZ(Kfq0JuG>fnvjLS=|agpes9Yz)y4X`4`_))l<= z%j;Cw<*XoBEoLke8wiJVlaL~bT?`v^qX5qedAA`k?GwBVPyx{xuwgS*R4&9dg zG)etm`tsQdY$YL?vgY3ED4Zx4b9KR8W_}$Xgy#tzyXDG_m8MK>Kwgtv>fj%+3?|MS zDjl?k8{GgDp-r0g=6B;nZ{(|`q;uY;tg)I-9OWQ_gC&Ll2`Tvg4+T$!bM?aGd z7SWPx@STg1e0H5Od|=02Q?oH5Xj(yzzNMu-jR`U)0T4%g`*w-5#u37mh25fJAR-cB zph!uJ`gn8nVHkY6|E3Bsli#wAyr^exX|Evz_5?oKy$%5z+VpJ&Zn_$;G zPFjOpw#2Rxw1yyDe);;JX-_Wk0AWEaW9C^gq(Z7zroNNV3*MADyl_4oQ29e=Fr!#) z==Z*zg7^43&RNai?65o(#0j4zk7e%v1Rp-1VTQZ&WdOo&{s6B7v{_DtOzhDLW|gj! z1a}H&m*fNMe+ITYG$5@icFVDpt&|>_Bnts;2ueD;<-<5qO6-Ww=$k<(>c*j}9`TJ^gq-rFNqlO+_B2un(*`|iS8A}XVtDk-P2o`%(d!jgpy zDhNZ@*hB=js`;7g8Tx!nC;nTlqZdVs`kNqUWLpktw;Fm&YrE|8hHTC9Az4A9y_8 ztUgDefW~Jvz(Ybnil*6xqE2=KT5FOjniu;qK;>>VULdAfi zL}V1h`yXO-k;@a+m?37a;5{!N)9&Bq6;y8h#7u+&45%RZyTUv^cqrf0il?){0cJ<& zJLVaQhAovXAWcEUV82T#uhQ{%1LR?3UmI3Ug|djJMi-kbGk} z(4EE1wUT%J)#1Z)oqpT3LkL_oER30Z2Xgn6Am4i~Lh%&j*n)8QZLqgKHPr$DW(9s#py zdA4oq*L!-CYu_1Nzy}g`@SW$B`zD#lOXLbD%jY(6Gnul)MNjrP8aaZsTz6dq=%fWI z8~>j0ar{)DP7ihEQvZ7WYu_$_o4XGC?nP}c`1^Lw?4yvI%8EFQ^fpOEUP3gj((UkK ztV2tMI4gtNpe5si+%=96`DgrT%onw?=Y(I#@((+g&CKRZ{L1!{u|a=N?=9$!%OW=} z$3nqF_TPU0pdVd|kMk`IqJkcFlP5cyDL?F7_oehr2!@m#3sHk=71?Yjs1gL#b~XMn zRl`O&KeTz}`}o#SF}87M#owR|YvS9{{IKAV4aYqBIA4P1e`h4%>|3cGmr=Lxv`u9_nBT`+9c_{c+!fx1y$e29>md2whDL))}S-6E*~A ze&IrE<0=`Y!~{`q`+v-e7y4m+UabXSgPv}74(8<;rrbJ2?nxdE#=eyv3LkfOJVw(Z zU+LUFh`rczgmHybqEqdyOT?>X45vP@Ma(^l>w^Yk%uRM)zG!=WN8BqsCa<0R>!Tm@ zGu<3JJlNf&{hlL{9l5n!Z@qZ3>!pW)3H&P1F+ijB9n-gECwmKoat%K(~xd zM;T&^I=_BQF(vw@#^QQ_4rW(!*i4AfISA&AWc`u`NnJoZj(2+R{(v3WRTW8_9I$41 zdRkA+fi3ZAc~KiVf*1nkDUh}DHnr%0fKGW;#80_>$*#c-QGEpqNGtQMiumw?XobdU zS1PgiaH^+QoFzm9N^LLFKkZ>Q`g<1u|Ndu}|Hiy@>Csptm7N?feV!aAi6_nAzPeFo z4;!bKtg|8Xcd?mz-lt6BkPf^Y+K&olc$KAc>z2{CU&m|Dt+%cdnXa~%KVsj1uY_gy zriykHb28o-=`)_cqLZw^D}Q|N`Tjv3%Q8&FC!;sh=X))&OJn+)aF=`;VCfSbWGpi< zobEp(`C6VHM@)fR!d#*eON6PuC?(eC>5K2wTF4FGInH3-L@#J<5p>@weYlZpoi393 zu%`Z^g$#$n_i^zF+twhzd7JXV1D}5PyAP_a3Cc2txWr?%q3-?72TfSl2l$5t1qh9R ze)7#HULWME>w_Ly&h3H5r{KN0Q#)r<| zH-#Yc%J8gp~GSy#^i!@~+ys5)`4+!5>C!T{8^kz18Wa@fBs~8~{9DPkKwy zC`$m5cHH}^bdp8+9QRrV^>pc}YDd5Y_HU@hm3BuX%b)O3Xv2vU6=X=$JnOwEgtQBU zW)2^R&@uyz0)=(4!PahJJ*`|VpG>O`6DpnA z0jU6RjPYk5Pt&RS34tq9y0cy+tE#s%I0-zD)eU3|o(9sJ_@=3Qv2MFo2uFf1rBlUc zXC}#}1d%#ESG`)Swu}dR`>{1KC?DQ*^+`q+yz&7%B2b>fB%AIIU(c3mbJy>@Z7DC$ zCpATj%kyYy7h!3BH(*usQ2HV|5}EUG)A7W2y|EaScto3C$Nmz1c44tuc~jFTcJ`Ne z;?HG(JbpWwEJeo~(qziVDdJw}Vl-Wi=5zH%%W>t!3g>#VCOz>`^8O9B?3lurFJGz1 z`|sD!-#;Iu*n?SHMT+&gw2l^`CO5hb80gFemWBJ@4~pqs7Bu_!sOe0J zO+wD-rShYYm8bwGz+jQDd8U_BR2X~ts;uM5cyLex7|qImc)5-+GVWZQT*$0c{tf&x z?5q2SJ-OKk*)(3zqg`cJwwnLIG#N0epD*S$yw#pT&h?5z6^=xV`jhA%c%MA>>Z*cR zh>U;Pjz#yHeJ58vY*wayNVI<;0at{~@()#Y%TlAKFRqvBzbw`R*u_SN3CC~FE)l(3 zSgsiU_+NGEJujQ-+LJT|(!0jOgj^mET+=`xU|{4Z`-!MGdNhA(c) zmcF|!1(_rLJC8;e5QS!*i$kMR>$2S}Q6uN5Z+mrV_g+~7PD(dQa|6spfq>BY;qK?p zy0F#LgWX%SU>kuwaZ}-M74!&=MC;&2R0NpD7DsPHW2`PHIey#+$k+TRQAh|x>lPIB zY`N1LxHXbrX-=>l($%v-$YhZ$@Y?wHdGKPS&;Dy#NEBy@TmcbI6y8KW_O&Wnij2u8 zS;(dRmj^(#y5lp3H&xu(`UIUI0dwcKgitX$;8b|k1s+%@kAGQEL4CotR3p2VF&(=a zeZL-K;WU2xRjo{B=^gNu;$Ku}&tYOwJKCIKA@YSYAi|M?dt^(DwxNw5)N3&VrsaWqyuahTAY?h^s1x$C2))h)*t!;M) z@64rOrW8T@Ud`A+r|K4K!Rxwr6R~yvnksQurWrkks^03edPC_rllR*G;Bi(Q!XlS4 z+P*0MUk~|_px5he(LwacPpV?l9;TwvO!NS9@4N6#dKZHY6t))(wncSn?M?9;Z7@Sj z@c5nO=?1aHt4~?Cq}bu_^~x-~?wVf$u*x<^Dfj?0R=xO6ko!Ao za=I`*U0Qd}rBp2EhNIa{(dN9j44ec*%{R&`b-;#pZr_ z?OHX{w!)3e=Un!|`wp{>mMuo?Trb_)Q@GK2X69M+@tNWfp)|U3ne9Qgp(M;lw08HSDM!3SB1y>u~p_Tk#^zqdbXyOC}L)lRni(<@Qz8~-EcLo@tiQ!d_}x49YI zaRPA?h6x0mHwl}IEAo0clC&4qdrd$6au}rvv3k-%oNIBQLC2` zcVlY!d08YMPn8TJd=cv>w4yShY)1Fdv!M2MUx-0_J2=FiGnNx%Zur3i8Mxa`=1dVu zLhEPqB_Rxow*kZax}0!#GfP*&F8l~Ua%LoY@u_^TwI%{_Wi8`d6WMh3!KBIb4{QG( zVasQ$UI|pRYuOn%icF!x;fdQ>L-Q&?#TO0qXV0Hd9unAyI;s8w>Jyabet?7p_tHZGTXaL^#c#gxbhM96$Ztx9~bS_#CwMlX~Bd zQFuYq%c5;KN7g!6MB(Vw(^RQfk4%IxtH}_2oeEz}nyUhh8dslsz z#y4~846YR^X)>{6UdgEZiHXm=CLVX1wFAQZ9|dTYR1jP*o*cG6wnD7B+K2h&Jy+pa1|R(TvPmr>gA} zEK(Zi!q#HJ>|-`>c?X~OmNo41FH_`rIa`4maT9qaB;r4RH0@)#G>0M^ADYUll{`H7BBKwa~i|4BD z6YcR)d&=x@Z;g)AZ}%4;nsEBktRdhp#Ba4+pLA>uS{Js1Eh?Dt#g3#dbe^*(a!@*f zhWHlqJbizb;tN@VatGyZl&Iszd|oz{pq;G$2uFZ?PLVSs1`sV1(diHht|d`hkivm{lUin zd^IHJV+F=mAF>|-U*s>pW6VG`!@q;)4ndJkgRoKHyL4mbu&uP84`EGc7=AJ~bsJyg^mM*$@!&JRWvDa@l;du|X~~F4HrE zViE)>AcPWA*Dt2LvkL-2oQN3#Qo2J6@oW5xg~kvf1mYbZeZx<{_Zf8IGjAZ!xLDy6 z`3ggYpzpP4pyJ=ESjyEDzsFVER=)FtgycGet1d24O|^r2le_^Lb`d+OX0BY;lc?8I zBz^EO6*ipJ8znyzxL1{Dko%a9l^ztCk8WKrtXQ-<+O+&H3jq1ZsVOAMk$m&0zDQ`Q z4b&FUy2Z0o-$yI{a%nQF!)?BNvtyT3DK2w$XqKtPczSa%9HCA`GjK%|^5fAi9bZUS z%><~*hksX!vom)+Spw|e1}T5t)sc?Yh^Et58ZkvPs5%=dqTFiDr#AfBD5}5~qTp7p z6M2F_s+Z8bC{>^)XZ$t7@zCWTl}9_T^Yi%IE!y1rezObXD1jKF*D1(lMMt3oxPTXc zG2Eq6%60mL;gHFd>KvQSr#u}U>~kOS+&w>q1)3yFEWIz^Q6Nj>00UYXHb6MLB159n z%uPgc6{Zub3hhu($UNkW3ew&P{PC*!x6{I>_>UMb=dccm%ZFZMV~D{E@uztsFTV@g z9)_ux{NAaxf~aQa`o2QXj+dCDbW2is2cco$99Vz<%f>#PT7~u_Uh`!U5?o4uL~I>E zhjLHkb&%2vtWvyDR*|&KaH=5UOP6YxKIuaqx^p~Ynv}W6*Rgx+HMVOxoGEf8!m-D> z_ZboxvQpkJ!0p*rHBq(9x}N=eDDFK7w-osUXax$EEIqPv-J|?^0`#;N8ectpvp#9( z!Zna~Tm0_QO*gtUz{r;6@E>%&4mvUWn;tV8s|P17r`9k8iY8>3V)FgX9h|tmgYYB*;7IRnlK+bDH0d5lf=yCfk#k&eG_@u0tF;c%`wRP$M?u!2R{_G#%F+3 ziMx}p`4G#clmM4Wl~Mlo9H-l@?zVL=GjoNGnEC*y_LqIQgB|US;a|V}Z8NIB4pWF8 z{yzXzL94zv{44#;1Ot*Wl|)C-m~Xm#D}|8m^b^* zO^V-6SzjOiKHG4HWQW@|3*%DfO(HuSlCdz#nJ^jYbpKqs3g&z`s5wsspHP8`xq0tEWG^)SZ0hit09hejvP(MHFtC;2iCAv;|4$%AKKJ-u-n zCCY1elZ#x*Fi6ThHh<&pqsf~$)Q=ne7J`POs~+fD7*N=x6^1_3{QS`8nfuw# ztSEwW&G?w2`uf$Q4uAJmNNj+I3VhHbkUt#a!=;5>DxbaX@+4-5>)MSn5X!fSyCp*S z#O_%hfeO+kFIVm3JG6a0!wfs2)coAcC!W#zNy zW)@DzxKv-$L4(++JKTkQ_su!i1DywsWbXtPG>*B&o`~_9UY%ULZ9j}8A|zxp;2zfo zrqOfB>i+h>6wqOEXMtc}?As4^IM3>Jhy!{0NW#=$D|7pH+u_i%wR8%0FDckQYvhW| zAL@(7HL+Bqh(`1v&^hXi8E8jR{Y?3D&{;X7Nb{N)iVv5(YTL4cSobhDGZjQiQSQhN zH)2}qR|nt^hlXtv1%m805I)~FdfxfQK!@F3hj3|;&iWN;bVRy*-f^(z#MrevF4tl> z$fB8NREmZUhq#w5{UV~Lrhf5V@xjEJwc|cr`UdQ9G%%G(xfReE>5@h_1fBdE2g8AK z(y0|&a})gC!$e3(6$)YdF3B|dM?doM=(0v9(9ySsU+p!-{ld7^JG+++tMK>sBYS&$ zji~U4vkg9zzcKe_-Q>KLEIwRUxP*gK6f14{m&#bP4Xh5#YQZ|7Lv?b_Z8VzEWr%zp zznn6M$3`O*iz;q1@ZNRu!6QR#5-u=PIFf&+XT$*F7~$3Q}cIaZ95!K@!iE3qB(N?1XNyu9WLWg&7?BQm#VGe%B5bZ^lfe|j&T$SQl<*%u*3OyV07&)j7uduTnc&b@`S0)K*zoFCOSgZ z(u1@xNpA=0oCD`ehpv4uIinc))ncQa{nP=4?Cn;;Y5BX}#JJRX)$rcc;ALfl5kXwW ztybMxgb5=Wy*ncQBhZ-L(j*FGS)O&yoqhzfUp!z>iU4$~?$kzCK=0Z2-!Kco4p+D? zdG^-zi&%WP_W3vgbgBhdxglX{!qq)L-Gz%u(a_<82is7fDy}@V5NI_zHCwTr4k5LT z$}u-<>1lKr+)*V!z*m?O>eqdJ;k#uC;b4_FPtJ#=*?Rp0C3pj%Ay` z_z&DS{Nc3E!IyYFqz#}`YGi=E^wXRL^C*yZL2Q(drE23+F{;QLV}!RJ%{VkECug+v zV0^jm)S5=8y1OyZ5%Avz5AgRSL=?PVwLL$gBL*E+e!O4wMS0a-X`}z^KZ-{0`64<* zk&p#(4-Rb4j&AqQ2F%HX1v^|c>~IV3CvVVwt0C%e-Ijmn!(nAUek~7$fNeTYUzLIg=OyJ95o{QNY(PpdkwI|{r!#KJ&*1v z%KgMA`M!*N(tC>=*QIKUbPRi(-(aQN^T>3yWqSI-;yvrCa#1X4v89&oC7aZiFNi9(7RRsRV1#Beb8Z;KtF-*3)Qe-UhUcP+;g#h9T^Vs zfF}^UA6f$1HhPkx(O-P=fBxsc|NCDUf|N8Va}?AIvX+rQTs!?_dZQ=D3i(o(%!G%@ z$c%N&4)@03!MwYSH_xd^$=aP2FL}H+*{HCA3KKpU8#Y&BG|Is){xc;0r|sOc|^JUzrSqTs^rY~7L5D*(zky1JPQIUH8gl7 zOOiOdQyUv&jMFwciuG=i!F^z8;OLy3n)o&4xqI_RP+XbT?nLZ+q!M6NcjoKPtnQ@I z(ZBXT|NXDuzBSqti5if#?9E--u>r8dx%6-E4@drR&Ld`CfgNsn-sR)uVlsFz%hP~D z#fm%16R8uaSm8qlbnQkXpyL&wX&OFs%7WYQFd@(Ipa@%a@+h)^$WcowcIECo{BPbdEXeO$YR@uAvCvH6d}ug#+_LVrMuB&|Cc_9_>z+ zlIa{D)FNwip#DFDfBV+okuY`Lq4Rs*TojH$#ZG2s?dF^!p9e>W4~v8yF1cpXlyUHf zWAtimRJuis@1mM6n{?>c2b~v66C0}VvdHJVkvTj-wPXR5R>sdA@m|Y|S0t}2iiu&- zEZI%4ca@PAI#=1!9Qqv3gBjM@BWm}eecsjXt))3hD-$Q4--G^hWOr8QZPkSmHTb2? z+!eX|@YnC)ZH4%7=&Jk`t6kAuwFJ6R(mCj0oMMI$=P^aczez^=)a>w}V39uc(W2b? zw=vL%8EACq^nW33K+b}iyosf!H|9q<`#H4F4u_Op^!;erdjJ3Iy$M{FRr>!gOHHF@ z*cTF+3ggQTG8iEHCZ>Q5ga!g4i^ytGa&a;<>ly@tpfU?{l4Vooiup!roie(8EpF zFCf(#$CfvDE=uG~vz%%ibOwd+huzGF?u;-<9|-j6Ss%Q)udQP{GLyL)>1pc>af)&0 zCpAJ#&(z4mCC~3#G9s~b&qBgf4Jf5h3~_P%&H|kl3#dYJ^FJBrq=%#Ua33^oY3{6B zyv)bnQK~!*BVhQdXMq@A$VJ~$npH9#+0XH>qbT^x9d zefQAr3*QHy{^&eXX*)lV1?64dh3fMCJ^>CoGniqPain#}&>aitld^2LAW!d#s?0=F z1Xmo|I1+j|WFXYB^0f~0+F#p|^F6nRGceSEnT%)|N(~;(i#D-karHVMzRP$JcL;QT zJH7xr8Th4c?Luf;*j9VkNFzr`nW*jTi&cYld&;+*%il_RI0IxL#ER5F)^1`^6+b!W z1Uk2Y6RQ6#Y-k|l4dUZxUpU-WeywuZW(oChEIwRfp5OcBsWGLtr>-wGHk=^12#e2N z`0NY1!exzzw_0eJW;M{U(pu^LP;=}p6)xbw;eeosI!%a7KFfinK8sr=Z;EJv3ZlKFJ zM?#i(Te8q7Z@|pQqAOxyJlQYO%n8Qq{W3aRsdp%po8;CB_VIMOf7H7K3`+Kz($(*WaLF} zY7vop{>=6n-^O8P8_M)>s0FGaj@%V$GvF>?T*L5P33OEaF}1+Jr4-H*y;bFTScn@* zkpX?gh|w>;Xld%17!_Ur&FQaNlJZ{Pq7{c;D??^#$PxC~Mt+`sx3B%J8S9Yp2_;LMWiJ%Bsu*uAWwwT0@`p>X=(u z`1|BttZm(pnzno{`K6M`K>Jp-dliP_vLIy&61_h(7`ij}b5LgHFez*9s+g%a8?u+x zc#s^C#O885(#km77oGRpwehRC8%z&J_HeAbQXjy4y?>c;hUVu?>!1iap2N7u=8>66 zXLQ;oOi%5i?uF zhg)mxK;Do{p7#e`9*s~A`T)$(Vi060Hg$bt=;4yu*3@2{T!gq$2oEQT;j5N5%=8l{ zXOtD^Y*}S{VlABR$o+$NSoZCTPd zMG6ENF*)Nna?x*^J!^^6G)lU}#!~c@g(186akn|T40DPUH({J1I6rl+Z4Iq_csNTl z^|*8OR9El#1eio8Tlc^I3v=|>etH^H^yyi#NzJ!!?yC1nv@zE+(YoUg41N&`EK418 zUssof^-WV!HZ^W7gkS1U(8D2*qIy4LQ8YDmiX_e(8rM`o04jsd7495#ihUjqHSeal z&IZ5pxvMQC(ZjK96WWfRL5aERcCBfK^{(A@20G%mE6zQX%Q?^yljg!7s;q1?bdR4q zdtd6Y^(*SVRx`h$!Jp{^T!B5DvxW8Mb=#qDPultcx+^ovmn!H4`++V3FZ<+uEB`A{ z{-g%!Zl8KeQ*)#Sl!<41i_0qC&0Xy+opbF2)c-gBRW8xVd+l|sqrdjD!Kbk5Kqpkv?O>m?|_-@ zzMRgoN(uxijqfwp!}%sgdF}mX#)kCj<+ko?ml~@X!vB02Ku5e-HG@|JVwZQNc9yNE zf|6&CKBfl3i_x~Pr+%;;NyVU#+|`r zEPcS$!hGy_(bLFXR$!Uv9%N@=iH_hTPdy3e)Np8Tx0GM=%R@*` zXGz9Z!~ax%Q@<#e=oq^Hf^psvn4&8bC3^W za-K$>hS-4cX|V3mRDT9fQdVHGu!DUL2s+aE{OPFzMO=%k0c00+S}E2?rmOyME;AP;=-`jO$QO@x=JioB)VYeF$}0N~gL$`|M+8`tftmcEuHUut1QA-y==3 z1DZtHcr4soyKzHvQtS_;heOH?nxM-CxA;g^#z3|0MK3AKU%-x&q=YboZ2=&v~gc*@p{A)_p!HnfUcSA;V>s$ znNijmR}DQ}JaQIMs!^!0IOxhWbI9qh5*G>x@%wQDIiO>H9$v93=~8hW&1^j+Qn+K$ z0Qz=UpUjon>%WRgS{`eMnXQ_kz&Q$ZXVB&7$g9CYXPiS1H*Z=%Y{;gTV|7h_aJ#d4 zki?Y=ue8rD*TdN-BH7*gdkTBJ#WBt`$zLtY_AQJRk7qC2Y`wrjniz!SMsIH6R)d*s z-G(=Gz_pz zI8SSzy!}VYHnb!`4~LkXW)pcv$~#DOf?0;Sl0&*W3k32smPtpU&oyughl%^9xSM;B zelyWq<%Rx`fZewkNFwIip8Xk`z=ikTo4<2kT=8d>=Zhi`b9`2>S z^?I;lHui)b&fLo0ClA@3i*u4}?cAqLLn&kcpmYxa`hkczdn~f=jU&}EV4&jzaiQx z3n>oFjr={LR@VO5yaj%#ON^cLHC|xx+o>JNKvy7L4!XSMDeejFj}IUV9I`%mZ)Y4v zyvs6=TIi5L-0-GZa8@u(l4O2PoSWDrW>)Q*QXB_8T$V$DCJXr{JaPF$79KJGV4M#CI{OygqVe=o zqn>+V6a|l(8QXO${a8~~5&5i1W4(Ld&06(^eouf&^z|F!_BEb8+tr)$^R9Jyi8e@P zWH~e;Ne-QsI=VLY(8Fb{PrkM3?SnJfnr$D@8SU~`CNmUMfL|U2Ql{AA;^br4!(F&k zjO1PkVGA6oM#IZFyy(dw&cxKl+d67xWk*|jQbp*j>j)dgKxZf@6rE|%2h<>PXk=Bw zxShWCELB!>8tmcDcC|ncml5sa4Sk3Nb~1P}S_qe6i^NFrM^4Xm9(&e_H z#)0$9)RDAElgc3$QTSvf?{kh0=~jiCIq1)-KW3(;W*i<+k$*1kSOW}`!h(z>;T-+d zXl*NB*VSHCi_7N3rIj*!I73Zveh1JMNH;X(MMfnQI5)$)5;}q>U$wJ42=l5AN-GnD za2Z2xHV+95|H;Jw=#@Vwx5cI3%DD|U$<1LNHs&S}=tG=rF%d#@!rHp>wnHHY3&W9v z(9lc+Dy)G)7sIC#=?n}3BlvI2WjgByaJ2w>IE1)@9&SB2U%kLWsz8u%qqp#g%40Lz z(ni?BIn6_=Q8Fb{NXR0xJqYN$Hu7G9QGhgKL13|^(6A6uqQ*_E-f zDA7~3g#Ix16EA5a_u9`XZEbPA$v+>d@=3J!bcDWr$OB1=Vd8z%tA5wb zm?(ps+I}C2&OwI(jmSA~eH3&_PCB7P*TMO$4;l|a54VEm=TiBlj;3LWcNp@YcNC{4 z+0I0EXCBKEW#GxulmKC6Q#!*AsIu5(7YG{CxSPQ*^+aesoVTYm?aj4@0U{jGhuE*) zscDfS&e1+Bp=w20c`E7QreW;^dN}k}>|rVuj+c_amXVI4vqKu0$j0py8V^4)3hA8< zjN?NuTzxy|*e<^vxk&G9qBHdPp?9i>>e{e80X^6A06ir*IQYk1`!_Q^+=EPcb#y5Z zK@tCM#D{E#j89h~48k5qx=i+8- zD^sZkycB7|*?RM`#ZxY)?wh?W%h*iw8A^&QJWJ)m@lrCd1=4X{ekjh*saqa{k$bp5OMBItSsykbFUmZ-Fzu&x!rZjqd0bg=;_r**DiKLR7`PW zC#dXQehw{-|1*$zGn8~1g z!n2ky9pD^`jzMsXZ-Rp^doALu1-its8pw`QVw-
&!DWmFKt)~Xcl!`~K%?-#MW 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
  • )t7i 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 I?RMOM0Jq#G82|tP literal 0 HcmV?d00001 diff --git a/apps/landing/public/robots.txt b/apps/landing/public/robots.txt new file mode 100644 index 000000000..d824c96fb --- /dev/null +++ b/apps/landing/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://urbackend.bitbros.in/sitemap-index.xml diff --git a/apps/landing/src/components/BorderGlow/BorderGlow.css b/apps/landing/src/components/BorderGlow/BorderGlow.css new file mode 100644 index 000000000..9ef6848f4 --- /dev/null +++ b/apps/landing/src/components/BorderGlow/BorderGlow.css @@ -0,0 +1,106 @@ +.border-glow-card { + --edge-proximity: 0; + --cursor-angle: 45deg; + --edge-sensitivity: 30; + --color-sensitivity: calc(var(--edge-sensitivity) + 20); + --border-radius: 28px; + --glow-padding: 40px; + --cone-spread: 25; + + position: relative; + border-radius: var(--border-radius); + isolation: isolate; + transform: translate3d(0, 0, 0.01px); + display: flex; + flex-direction: column; + border: 1px solid rgba(255, 255, 255, 0.08); + background: var(--card-bg, rgba(255, 255, 255, 0.02)); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + overflow: visible; + box-shadow: + rgba(0, 0, 0, 0.1) 0px 1px 2px, + rgba(0, 0, 0, 0.1) 0px 2px 4px, + rgba(0, 0, 0, 0.1) 0px 4px 8px, + rgba(0, 0, 0, 0.1) 0px 8px 16px, + rgba(0, 0, 0, 0.1) 0px 16px 32px, + rgba(0, 0, 0, 0.1) 0px 32px 64px; +} + +.border-glow-card::before, +.border-glow-card > .edge-light { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + transition: opacity 0.25s ease-out; + z-index: -1; +} + +.border-glow-card:not(:hover):not(.sweep-active)::before, +.border-glow-card:not(:hover):not(.sweep-active) > .edge-light { + opacity: 0; + transition: opacity 0.75s ease-in-out; +} + +/* colored mesh-gradient border */ +.border-glow-card::before { + border: 1px solid transparent; + background: + linear-gradient(#0c0a0f 0 100%) padding-box, + linear-gradient(rgba(255, 255, 255, 0) 0% 100%) border-box, + var(--gradient-one, radial-gradient(at 80% 55%, hsla(268, 100%, 76%, 1) 0px, transparent 50%)) border-box, + var(--gradient-two, radial-gradient(at 69% 34%, hsla(349, 100%, 74%, 1) 0px, transparent 50%)) border-box, + var(--gradient-three, radial-gradient(at 8% 6%, hsla(136, 100%, 78%, 1) 0px, transparent 50%)) border-box, + var(--gradient-four, radial-gradient(at 41% 38%, hsla(192, 100%, 64%, 1) 0px, transparent 50%)) border-box, + var(--gradient-five, radial-gradient(at 86% 85%, hsla(186, 100%, 74%, 1) 0px, transparent 50%)) border-box, + var(--gradient-six, radial-gradient(at 82% 18%, hsla(52, 100%, 65%, 1) 0px, transparent 50%)) border-box, + var(--gradient-seven, radial-gradient(at 51% 4%, hsla(12, 100%, 72%, 1) 0px, transparent 50%)) border-box, + var(--gradient-base, linear-gradient(#c299ff 0 100%)) border-box; + opacity: calc((var(--edge-proximity) - var(--color-sensitivity)) / (100 - var(--color-sensitivity))); + mask-image: + conic-gradient( + from var(--cursor-angle) at center, + black calc(var(--cone-spread) * 1%), + transparent calc((var(--cone-spread) + 15) * 1%), + transparent calc((100 - var(--cone-spread) - 15) * 1%), + black calc((100 - var(--cone-spread)) * 1%) + ); +} + +/* outer glow layer */ +.border-glow-card > .edge-light { + inset: calc(var(--glow-padding) * -1); + pointer-events: none; + z-index: 1; + mask-image: + conic-gradient( + from var(--cursor-angle) at center, black 2.5%, transparent 10%, transparent 90%, black 97.5% + ); + opacity: calc((var(--edge-proximity) - var(--edge-sensitivity)) / (100 - var(--edge-sensitivity))); + mix-blend-mode: plus-lighter; +} + +.border-glow-card > .edge-light::before { + content: ""; + position: absolute; + inset: var(--glow-padding); + border-radius: inherit; + box-shadow: + 0 0 1px 0 var(--glow-color-60, hsl(40deg 80% 80% / 60%)), + 0 0 3px 0 var(--glow-color-50, hsl(40deg 80% 80% / 50%)), + 0 0 6px 0 var(--glow-color-40, hsl(40deg 80% 80% / 40%)), + 0 0 15px 0 var(--glow-color-30, hsl(40deg 80% 80% / 30%)), + 0 0 25px 2px var(--glow-color-20, hsl(40deg 80% 80% / 20%)), + 0 0 50px 2px var(--glow-color-10, hsl(40deg 80% 80% / 10%)); +} + +.border-glow-inner { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; + width: 100%; + position: relative; + z-index: 1; +} diff --git a/apps/landing/src/components/BorderGlow/BorderGlow.jsx b/apps/landing/src/components/BorderGlow/BorderGlow.jsx new file mode 100644 index 000000000..f901ccd3c --- /dev/null +++ b/apps/landing/src/components/BorderGlow/BorderGlow.jsx @@ -0,0 +1,170 @@ +import { useRef, useCallback, useEffect } from 'react'; +import './BorderGlow.css'; + +function parseHSL(hslStr) { + const match = hslStr.match(/([\d.]+)\s*([\d.]+)%?\s*([\d.]+)%?/); + if (!match) return { h: 40, s: 80, l: 80 }; + return { h: parseFloat(match[1]), s: parseFloat(match[2]), l: parseFloat(match[3]) }; +} + +function buildGlowVars(glowColor, intensity) { + const { h, s, l } = parseHSL(glowColor); + const base = `${h}deg ${s}% ${l}%`; + const opacities = [100, 60, 50, 40, 30, 20, 10]; + const keys = ['', '-60', '-50', '-40', '-30', '-20', '-10']; + const vars = {}; + for (let i = 0; i < opacities.length; i++) { + vars[`--glow-color${keys[i]}`] = `hsl(${base} / ${Math.min(opacities[i] * intensity, 100)}%)`; + } + return vars; +} + +const GRADIENT_POSITIONS = ['80% 55%', '69% 34%', '8% 6%', '41% 38%', '86% 85%', '82% 18%', '51% 4%']; +const GRADIENT_KEYS = ['--gradient-one', '--gradient-two', '--gradient-three', '--gradient-four', '--gradient-five', '--gradient-six', '--gradient-seven']; +const COLOR_MAP = [0, 1, 2, 0, 1, 2, 1]; + +function buildGradientVars(colors) { + const vars = {}; + for (let i = 0; i < 7; i++) { + const c = colors[Math.min(COLOR_MAP[i], colors.length - 1)]; + vars[GRADIENT_KEYS[i]] = `radial-gradient(at ${GRADIENT_POSITIONS[i]}, ${c} 0px, transparent 50%)`; + } + vars['--gradient-base'] = `linear-gradient(${colors[0]} 0 100%)`; + return vars; +} + +function easeOutCubic(x) { return 1 - Math.pow(1 - x, 3); } +function easeInCubic(x) { return x * x * x; } + +function animateValue({ start = 0, end = 100, duration = 1000, delay = 0, ease = easeOutCubic, onUpdate, onEnd }) { + const t0 = performance.now() + delay; + let rafId = null; + function tick() { + const elapsed = performance.now() - t0; + const t = Math.min(elapsed / duration, 1); + onUpdate(start + (end - start) * ease(t)); + if (t < 1) rafId = requestAnimationFrame(tick); + else if (onEnd) onEnd(); + } + const timeoutId = setTimeout(() => { + rafId = requestAnimationFrame(tick); + }, delay); + + return () => { + clearTimeout(timeoutId); + if (rafId != null) cancelAnimationFrame(rafId); + }; +} + +const BorderGlow = ({ + children, + className = '', + edgeSensitivity = 30, + glowColor = '40 80 80', + backgroundColor = 'rgba(255, 255, 255, 0.02)', + borderRadius = 16, + glowRadius = 40, + glowIntensity = 1.0, + coneSpread = 25, + animated = false, + colors = ['#00f5d4', '#00b4ab', '#00ffd8'], + fillOpacity = 0.5, +}) => { + const cardRef = useRef(null); + + const getCenterOfElement = useCallback((el) => { + const { width, height } = el.getBoundingClientRect(); + return [width / 2, height / 2]; + }, []); + + const getEdgeProximity = useCallback((el, x, y) => { + const [cx, cy] = getCenterOfElement(el); + const dx = x - cx; + const dy = y - cy; + let kx = Infinity; + let ky = Infinity; + if (dx !== 0) kx = cx / Math.abs(dx); + if (dy !== 0) ky = cy / Math.abs(dy); + return Math.min(Math.max(1 / Math.min(kx, ky), 0), 1); + }, [getCenterOfElement]); + + const getCursorAngle = useCallback((el, x, y) => { + const [cx, cy] = getCenterOfElement(el); + const dx = x - cx; + const dy = y - cy; + if (dx === 0 && dy === 0) return 0; + const radians = Math.atan2(dy, dx); + let degrees = radians * (180 / Math.PI) + 90; + if (degrees < 0) degrees += 360; + return degrees; + }, [getCenterOfElement]); + + const handlePointerMove = useCallback((e) => { + const card = cardRef.current; + if (!card) return; + + const rect = card.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + const edge = getEdgeProximity(card, x, y); + const angle = getCursorAngle(card, x, y); + + card.style.setProperty('--edge-proximity', `${(edge * 100).toFixed(3)}`); + card.style.setProperty('--cursor-angle', `${angle.toFixed(3)}deg`); + }, [getEdgeProximity, getCursorAngle]); + + useEffect(() => { + if (!animated || !cardRef.current) return; + const card = cardRef.current; + const angleStart = 110; + const angleEnd = 465; + card.classList.add('sweep-active'); + card.style.setProperty('--cursor-angle', `${angleStart}deg`); + + const stops = []; + stops.push(animateValue({ duration: 500, onUpdate: v => card.style.setProperty('--edge-proximity', v) })); + stops.push(animateValue({ ease: easeInCubic, duration: 1500, end: 50, onUpdate: v => { + card.style.setProperty('--cursor-angle', `${(angleEnd - angleStart) * (v / 100) + angleStart}deg`); + }})); + stops.push(animateValue({ ease: easeOutCubic, delay: 1500, duration: 2250, start: 50, end: 100, onUpdate: v => { + card.style.setProperty('--cursor-angle', `${(angleEnd - angleStart) * (v / 100) + angleStart}deg`); + }})); + stops.push(animateValue({ ease: easeInCubic, delay: 2500, duration: 1500, start: 100, end: 0, + onUpdate: v => card.style.setProperty('--edge-proximity', v), + onEnd: () => card.classList.remove('sweep-active'), + })); + + return () => { + stops.forEach(stop => stop?.()); + card.classList.remove('sweep-active'); + }; + }, [animated]); + + const glowVars = buildGlowVars(glowColor, glowIntensity); + + return ( +
    + +
    + {children} +
    +
    + ); +}; + +export default BorderGlow; diff --git a/apps/landing/src/components/Footer.astro b/apps/landing/src/components/Footer.astro new file mode 100644 index 000000000..794396af0 --- /dev/null +++ b/apps/landing/src/components/Footer.astro @@ -0,0 +1,246 @@ +--- +import { Github, ArrowRight } from 'lucide-react'; +const ADMIN_EMAIL = 'yashpouranik@gmail.com'; // Hardcoding since this is static site +--- + +
    + + diff --git a/apps/landing/src/components/Hyperspeed/Hyperspeed.css b/apps/landing/src/components/Hyperspeed/Hyperspeed.css new file mode 100644 index 000000000..b76bf9b0f --- /dev/null +++ b/apps/landing/src/components/Hyperspeed/Hyperspeed.css @@ -0,0 +1,17 @@ +#lights { + width: 100%; + height: 100%; + overflow: hidden; + position: absolute; + top: 0; + left: 0; + z-index: 0; /* Behind all content in the hero section! */ + pointer-events: none; /* Make sure users can click elements over it */ + opacity: 0.45; /* Soften the light beams for better foreground text readability */ +} + +#lights canvas { + width: 100%; + height: 100%; + display: block; +} diff --git a/apps/landing/src/components/Hyperspeed/Hyperspeed.jsx b/apps/landing/src/components/Hyperspeed/Hyperspeed.jsx new file mode 100644 index 000000000..9a399d064 --- /dev/null +++ b/apps/landing/src/components/Hyperspeed/Hyperspeed.jsx @@ -0,0 +1,1235 @@ +import { BloomEffect, EffectComposer, EffectPass, RenderPass, SMAAEffect, SMAAPreset } from 'postprocessing'; +import { useEffect, useRef } from 'react'; +import * as THREE from 'three'; + +import './Hyperspeed.css'; + +const DEFAULT_EFFECT_OPTIONS = { + onSpeedUp: () => {}, + onSlowDown: () => {}, + distortion: 'turbulentDistortion', + length: 400, + roadWidth: 10, + islandWidth: 2, + lanesPerRoad: 4, + fov: 90, + fovSpeedUp: 150, + speedUp: 2, + carLightsFade: 0.4, + totalSideLightSticks: 20, + lightPairsPerRoadWay: 40, + shoulderLinesWidthPercentage: 0.05, + brokenLinesWidthPercentage: 0.1, + brokenLinesLengthPercentage: 0.5, + lightStickWidth: [0.12, 0.5], + lightStickHeight: [1.3, 1.7], + movingAwaySpeed: [60, 80], + movingCloserSpeed: [-120, -160], + carLightsLength: [400 * 0.03, 400 * 0.2], + carLightsRadius: [0.05, 0.14], + carWidthPercentage: [0.3, 0.5], + carShiftX: [-0.8, 0.8], + carFloorSeparation: [0, 5], + colors: { + roadColor: 0x080808, + islandColor: 0x0a0a0a, + background: 0x000000, + shoulderLines: 0xffffff, + brokenLines: 0xffffff, + leftCars: [0xd856bf, 0x6750a2, 0xc247ac], + rightCars: [0x03b3c3, 0x0e5ea5, 0x324555], + sticks: 0x03b3c3 + } +}; + +const Hyperspeed = ({ effectOptions = DEFAULT_EFFECT_OPTIONS }) => { + const hyperspeed = useRef(null); + const appRef = useRef(null); + + useEffect(() => { + if (appRef.current) { + appRef.current.dispose(); + appRef.current = null; + const container = hyperspeed.current; + if (container) { + while (container.firstChild) { + container.removeChild(container.firstChild); + } + } + } + const mountainUniforms = { + uFreq: { value: new THREE.Vector3(3, 6, 10) }, + uAmp: { value: new THREE.Vector3(30, 30, 20) } + }; + + const xyUniforms = { + uFreq: { value: new THREE.Vector2(5, 2) }, + uAmp: { value: new THREE.Vector2(25, 15) } + }; + + const LongRaceUniforms = { + uFreq: { value: new THREE.Vector2(2, 3) }, + uAmp: { value: new THREE.Vector2(35, 10) } + }; + + const turbulentUniforms = { + uFreq: { value: new THREE.Vector4(4, 8, 8, 1) }, + uAmp: { value: new THREE.Vector4(25, 5, 10, 10) } + }; + + const deepUniforms = { + uFreq: { value: new THREE.Vector2(4, 8) }, + uAmp: { value: new THREE.Vector2(10, 20) }, + uPowY: { value: new THREE.Vector2(20, 2) } + }; + + let nsin = val => Math.sin(val) * 0.5 + 0.5; + + const distortions = { + mountainDistortion: { + uniforms: mountainUniforms, + getDistortion: ` + uniform vec3 uAmp; + uniform vec3 uFreq; + #define PI 3.14159265358979 + float nsin(float val){ + return sin(val) * 0.5 + 0.5; + } + vec3 getDistortion(float progress){ + float movementProgressFix = 0.02; + return vec3( + cos(progress * PI * uFreq.x + uTime) * uAmp.x - cos(movementProgressFix * PI * uFreq.x + uTime) * uAmp.x, + nsin(progress * PI * uFreq.y + uTime) * uAmp.y - nsin(movementProgressFix * PI * uFreq.y + uTime) * uAmp.y, + nsin(progress * PI * uFreq.z + uTime) * uAmp.z - nsin(movementProgressFix * PI * uFreq.z + uTime) * uAmp.z + ); + } + `, + getJS: (progress, time) => { + let movementProgressFix = 0.02; + let uFreq = mountainUniforms.uFreq.value; + let uAmp = mountainUniforms.uAmp.value; + let distortion = new THREE.Vector3( + Math.cos(progress * Math.PI * uFreq.x + time) * uAmp.x - + Math.cos(movementProgressFix * Math.PI * uFreq.x + time) * uAmp.x, + nsin(progress * Math.PI * uFreq.y + time) * uAmp.y - + nsin(movementProgressFix * Math.PI * uFreq.y + time) * uAmp.y, + nsin(progress * Math.PI * uFreq.z + time) * uAmp.z - + nsin(movementProgressFix * Math.PI * uFreq.z + time) * uAmp.z + ); + let lookAtAmp = new THREE.Vector3(2, 2, 2); + let lookAtOffset = new THREE.Vector3(0, 0, -5); + return distortion.multiply(lookAtAmp).add(lookAtOffset); + } + }, + xyDistortion: { + uniforms: xyUniforms, + getDistortion: ` + uniform vec2 uFreq; + uniform vec2 uAmp; + #define PI 3.14159265358979 + vec3 getDistortion(float progress){ + float movementProgressFix = 0.02; + return vec3( + cos(progress * PI * uFreq.x + uTime) * uAmp.x - cos(movementProgressFix * PI * uFreq.x + uTime) * uAmp.x, + sin(progress * PI * uFreq.y + PI/2. + uTime) * uAmp.y - sin(movementProgressFix * PI * uFreq.y + PI/2. + uTime) * uAmp.y, + 0. + ); + } + `, + getJS: (progress, time) => { + let movementProgressFix = 0.02; + let uFreq = xyUniforms.uFreq.value; + let uAmp = xyUniforms.uAmp.value; + let distortion = new THREE.Vector3( + Math.cos(progress * Math.PI * uFreq.x + time) * uAmp.x - + Math.cos(movementProgressFix * Math.PI * uFreq.x + time) * uAmp.x, + Math.sin(progress * Math.PI * uFreq.y + time + Math.PI / 2) * uAmp.y - + Math.sin(movementProgressFix * Math.PI * uFreq.y + time + Math.PI / 2) * uAmp.y, + 0 + ); + let lookAtAmp = new THREE.Vector3(2, 0.4, 1); + let lookAtOffset = new THREE.Vector3(0, 0, -3); + return distortion.multiply(lookAtAmp).add(lookAtOffset); + } + }, + LongRaceDistortion: { + uniforms: LongRaceUniforms, + getDistortion: ` + uniform vec2 uFreq; + uniform vec2 uAmp; + #define PI 3.14159265358979 + vec3 getDistortion(float progress){ + float camProgress = 0.0125; + return vec3( + sin(progress * PI * uFreq.x + uTime) * uAmp.x - sin(camProgress * PI * uFreq.x + uTime) * uAmp.x, + sin(progress * PI * uFreq.y + uTime) * uAmp.y - sin(camProgress * PI * uFreq.y + uTime) * uAmp.y, + 0. + ); + } + `, + getJS: (progress, time) => { + let camProgress = 0.0125; + let uFreq = LongRaceUniforms.uFreq.value; + let uAmp = LongRaceUniforms.uAmp.value; + let distortion = new THREE.Vector3( + Math.sin(progress * Math.PI * uFreq.x + time) * uAmp.x - + Math.sin(camProgress * Math.PI * uFreq.x + time) * uAmp.x, + Math.sin(progress * Math.PI * uFreq.y + time) * uAmp.y - + Math.sin(camProgress * Math.PI * uFreq.y + time) * uAmp.y, + 0 + ); + let lookAtAmp = new THREE.Vector3(1, 1, 0); + let lookAtOffset = new THREE.Vector3(0, 0, -5); + return distortion.multiply(lookAtAmp).add(lookAtOffset); + } + }, + turbulentDistortion: { + uniforms: turbulentUniforms, + getDistortion: ` + uniform vec4 uFreq; + uniform vec4 uAmp; + float nsin(float val){ + return sin(val) * 0.5 + 0.5; + } + #define PI 3.14159265358979 + float getDistortionX(float progress){ + return ( + cos(PI * progress * uFreq.r + uTime) * uAmp.r + + pow(cos(PI * progress * uFreq.g + uTime * (uFreq.g / uFreq.r)), 2. ) * uAmp.g + ); + } + float getDistortionY(float progress){ + return ( + -nsin(PI * progress * uFreq.b + uTime) * uAmp.b + + -pow(nsin(PI * progress * uFreq.a + uTime / (uFreq.b / uFreq.a)), 5.) * uAmp.a + ); + } + vec3 getDistortion(float progress){ + return vec3( + getDistortionX(progress) - getDistortionX(0.0125), + getDistortionY(progress) - getDistortionY(0.0125), + 0. + ); + } + `, + getJS: (progress, time) => { + const uFreq = turbulentUniforms.uFreq.value; + const uAmp = turbulentUniforms.uAmp.value; + + const getX = p => + Math.cos(Math.PI * p * uFreq.x + time) * uAmp.x + + Math.pow(Math.cos(Math.PI * p * uFreq.y + time * (uFreq.y / uFreq.x)), 2) * uAmp.y; + + const getY = p => + -nsin(Math.PI * p * uFreq.z + time) * uAmp.z - + Math.pow(nsin(Math.PI * p * uFreq.w + time / (uFreq.z / uFreq.w)), 5) * uAmp.w; + + let distortion = new THREE.Vector3( + getX(progress) - getX(progress + 0.007), + getY(progress) - getY(progress + 0.007), + 0 + ); + let lookAtAmp = new THREE.Vector3(-2, -5, 0); + let lookAtOffset = new THREE.Vector3(0, 0, -10); + return distortion.multiply(lookAtAmp).add(lookAtOffset); + } + }, + turbulentDistortionStill: { + uniforms: turbulentUniforms, + getDistortion: ` + uniform vec4 uFreq; + uniform vec4 uAmp; + float nsin(float val){ + return sin(val) * 0.5 + 0.5; + } + #define PI 3.14159265358979 + float getDistortionX(float progress){ + return ( + cos(PI * progress * uFreq.r) * uAmp.r + + pow(cos(PI * progress * uFreq.g * (uFreq.g / uFreq.r)), 2. ) * uAmp.g + ); + } + float getDistortionY(float progress){ + return ( + -nsin(PI * progress * uFreq.b) * uAmp.b + + -pow(nsin(PI * progress * uFreq.a / (uFreq.b / uFreq.a)), 5.) * uAmp.a + ); + } + vec3 getDistortion(float progress){ + return vec3( + getDistortionX(progress) - getDistortionX(0.02), + getDistortionY(progress) - getDistortionY(0.02), + 0. + ); + } + ` + }, + deepDistortionStill: { + uniforms: deepUniforms, + getDistortion: ` + uniform vec4 uFreq; + uniform vec4 uAmp; + uniform vec2 uPowY; + float nsin(float val){ + return sin(val) * 0.5 + 0.5; + } + #define PI 3.14159265358979 + float getDistortionX(float progress){ + return ( + sin(progress * PI * uFreq.x) * uAmp.x * 2. + ); + } + float getDistortionY(float progress){ + return ( + pow(abs(progress * uPowY.x), uPowY.y) + sin(progress * PI * uFreq.y) * uAmp.y + ); + } + vec3 getDistortion(float progress){ + return vec3( + getDistortionX(progress) - getDistortionX(0.02), + getDistortionY(progress) - getDistortionY(0.05), + 0. + ); + } + ` + }, + deepDistortion: { + uniforms: deepUniforms, + getDistortion: ` + uniform vec4 uFreq; + uniform vec4 uAmp; + uniform vec2 uPowY; + float nsin(float val){ + return sin(val) * 0.5 + 0.5; + } + #define PI 3.14159265358979 + float getDistortionX(float progress){ + return ( + sin(progress * PI * uFreq.x + uTime) * uAmp.x + ); + } + float getDistortionY(float progress){ + return ( + pow(abs(progress * uPowY.x), uPowY.y) + sin(progress * PI * uFreq.y + uTime) * uAmp.y + ); + } + vec3 getDistortion(float progress){ + return vec3( + getDistortionX(progress) - getDistortionX(0.02), + getDistortionY(progress) - getDistortionY(0.02), + 0. + ); + } + `, + getJS: (progress, time) => { + const uFreq = deepUniforms.uFreq.value; + const uAmp = deepUniforms.uAmp.value; + const uPowY = deepUniforms.uPowY.value; + + const getX = p => Math.sin(p * Math.PI * uFreq.x + time) * uAmp.x; + const getY = p => Math.pow(p * uPowY.x, uPowY.y) + Math.sin(p * Math.PI * uFreq.y + time) * uAmp.y; + + let distortion = new THREE.Vector3( + getX(progress) - getX(progress + 0.01), + getY(progress) - getY(progress + 0.01), + 0 + ); + let lookAtAmp = new THREE.Vector3(-2, -4, 0); + let lookAtOffset = new THREE.Vector3(0, 0, -10); + return distortion.multiply(lookAtAmp).add(lookAtOffset); + } + } + }; + + class App { + constructor(container, options = {}) { + this.options = options; + if (this.options.distortion == null) { + this.options.distortion = { + uniforms: distortion_uniforms, + getDistortion: distortion_vertex + }; + } + this.container = container; + this.hasValidSize = false; + + const initW = Math.max(1, container.offsetWidth); + const initH = Math.max(1, container.offsetHeight); + + this.renderer = new THREE.WebGLRenderer({ + antialias: false, + alpha: true + }); + this.renderer.setSize(initW, initH, false); + this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5)); + this.composer = new EffectComposer(this.renderer); + container.append(this.renderer.domElement); + + this.camera = new THREE.PerspectiveCamera(options.fov, initW / initH, 0.1, 10000); + this.camera.position.z = -5; + this.camera.position.y = 8; + this.camera.position.x = 0; + this.scene = new THREE.Scene(); + this.scene.background = null; + + let fog = new THREE.Fog(options.colors.background, options.length * 0.2, options.length * 500); + this.scene.fog = fog; + this.fogUniforms = { + fogColor: { value: fog.color }, + fogNear: { value: fog.near }, + fogFar: { value: fog.far } + }; + this.clock = new THREE.Clock(); + this.assets = {}; + this.disposed = false; + this.paused = false; + + this.road = new Road(this, options); + this.leftCarLights = new CarLights( + this, + options, + options.colors.leftCars, + options.movingAwaySpeed, + new THREE.Vector2(0, 1 - options.carLightsFade) + ); + this.rightCarLights = new CarLights( + this, + options, + options.colors.rightCars, + options.movingCloserSpeed, + new THREE.Vector2(1, 0 + options.carLightsFade) + ); + this.leftSticks = new LightsSticks(this, options); + + this.fovTarget = options.fov; + this.speedUpTarget = 0; + this.speedUp = 0; + this.timeOffset = 0; + + this.tick = this.tick.bind(this); + this.init = this.init.bind(this); + this.setSize = this.setSize.bind(this); + this.onMouseDown = this.onMouseDown.bind(this); + this.onMouseUp = this.onMouseUp.bind(this); + + this.onTouchStart = this.onTouchStart.bind(this); + this.onTouchEnd = this.onTouchEnd.bind(this); + this.onContextMenu = this.onContextMenu.bind(this); + + this.onWindowResize = this.onWindowResize.bind(this); + window.addEventListener('resize', this.onWindowResize); + + if (container.offsetWidth > 0 && container.offsetHeight > 0) { + this.hasValidSize = true; + } + } + + onWindowResize() { + const width = this.container.offsetWidth; + const height = this.container.offsetHeight; + + if (width <= 0 || height <= 0) { + this.hasValidSize = false; + return; + } + + this.renderer.setSize(width, height); + this.camera.aspect = width / height; + this.camera.updateProjectionMatrix(); + this.composer.setSize(width, height); + this.hasValidSize = true; + } + + initPasses() { + this.renderPass = new RenderPass(this.scene, this.camera); + this.bloomPass = new EffectPass( + this.camera, + new BloomEffect({ + luminanceThreshold: 0.2, + luminanceSmoothing: 0, + resolutionScale: 1 + }) + ); + + const smaaPass = new EffectPass( + this.camera, + new SMAAEffect({ + preset: SMAAPreset.MEDIUM, + searchImage: SMAAEffect.searchImageDataURL, + areaImage: SMAAEffect.areaImageDataURL + }) + ); + this.renderPass.renderToScreen = false; + this.bloomPass.renderToScreen = false; + smaaPass.renderToScreen = true; + this.composer.addPass(this.renderPass); + this.composer.addPass(this.bloomPass); + this.composer.addPass(smaaPass); + } + + loadAssets() { + const assets = this.assets; + return new Promise(resolve => { + const manager = new THREE.LoadingManager(resolve); + + const searchImage = new Image(); + const areaImage = new Image(); + assets.smaa = {}; + searchImage.addEventListener('load', function () { + assets.smaa.search = this; + manager.itemEnd('smaa-search'); + }); + + areaImage.addEventListener('load', function () { + assets.smaa.area = this; + manager.itemEnd('smaa-area'); + }); + manager.itemStart('smaa-search'); + manager.itemStart('smaa-area'); + + searchImage.src = SMAAEffect.searchImageDataURL; + areaImage.src = SMAAEffect.areaImageDataURL; + }); + } + + init() { + this.initPasses(); + const options = this.options; + this.road.init(); + this.leftCarLights.init(); + + this.leftCarLights.mesh.position.setX(-options.roadWidth / 2 - options.islandWidth / 2); + this.rightCarLights.init(); + this.rightCarLights.mesh.position.setX(options.roadWidth / 2 + options.islandWidth / 2); + this.leftSticks.init(); + this.leftSticks.mesh.position.setX(-(options.roadWidth + options.islandWidth / 2)); + + this.container.addEventListener('mousedown', this.onMouseDown); + this.container.addEventListener('mouseup', this.onMouseUp); + this.container.addEventListener('mouseout', this.onMouseUp); + + this.container.addEventListener('touchstart', this.onTouchStart, { passive: true }); + this.container.addEventListener('touchend', this.onTouchEnd, { passive: true }); + this.container.addEventListener('touchcancel', this.onTouchEnd, { passive: true }); + + this.container.addEventListener('contextmenu', this.onContextMenu); + + this.tick(); + } + + onMouseDown(ev) { + if (this.options.onSpeedUp) this.options.onSpeedUp(ev); + this.fovTarget = this.options.fovSpeedUp; + this.speedUpTarget = this.options.speedUp; + } + + onMouseUp(ev) { + if (this.options.onSlowDown) this.options.onSlowDown(ev); + this.fovTarget = this.options.fov; + this.speedUpTarget = 0; + } + + onTouchStart(ev) { + if (this.options.onSpeedUp) this.options.onSpeedUp(ev); + this.fovTarget = this.options.fovSpeedUp; + this.speedUpTarget = this.options.speedUp; + } + + onTouchEnd(ev) { + if (this.options.onSlowDown) this.options.onSlowDown(ev); + this.fovTarget = this.options.fov; + this.speedUpTarget = 0; + } + + onContextMenu(ev) { + ev.preventDefault(); + } + + update(delta) { + let lerpPercentage = Math.exp(-(-60 * Math.log2(1 - 0.1)) * delta); + this.speedUp += lerp(this.speedUp, this.speedUpTarget, lerpPercentage, 0.00001); + this.timeOffset += this.speedUp * delta; + + let time = this.clock.elapsedTime + this.timeOffset; + + this.rightCarLights.update(time); + this.leftCarLights.update(time); + this.leftSticks.update(time); + this.road.update(time); + + let updateCamera = false; + let fovChange = lerp(this.camera.fov, this.fovTarget, lerpPercentage); + if (fovChange !== 0) { + this.camera.fov += fovChange * delta * 6; + updateCamera = true; + } + + if (this.options.distortion.getJS) { + const distortion = this.options.distortion.getJS(0.025, time); + + this.camera.lookAt( + new THREE.Vector3( + this.camera.position.x + distortion.x, + this.camera.position.y + distortion.y, + this.camera.position.z + distortion.z + ) + ); + updateCamera = true; + } + if (updateCamera) { + this.camera.updateProjectionMatrix(); + } + } + + render(delta) { + this.composer.render(delta); + } + + pause() { + this.paused = true; + } + + resume() { + if (this.disposed || !this.paused) return; + this.paused = false; + this.clock.getDelta(); + requestAnimationFrame(this.tick); + } + + dispose() { + this.disposed = true; + this.paused = true; + + if (this.scene) { + this.scene.traverse(object => { + const obj = object; + if (!obj.isMesh) return; + + if (obj.geometry) obj.geometry.dispose(); + + if (obj.material) { + if (Array.isArray(obj.material)) { + obj.material.forEach(material => material.dispose()); + } else { + obj.material.dispose(); + } + } + }); + this.scene.clear(); + } + + if (this.renderer) { + this.renderer.dispose(); + this.renderer.forceContextLoss(); + if (this.renderer.domElement && this.renderer.domElement.parentNode) { + this.renderer.domElement.parentNode.removeChild(this.renderer.domElement); + } + } + if (this.composer) { + this.composer.dispose(); + } + + window.removeEventListener('resize', this.onWindowResize); + if (this.container) { + this.container.removeEventListener('mousedown', this.onMouseDown); + this.container.removeEventListener('mouseup', this.onMouseUp); + this.container.removeEventListener('mouseout', this.onMouseUp); + + this.container.removeEventListener('touchstart', this.onTouchStart); + this.container.removeEventListener('touchend', this.onTouchEnd); + this.container.removeEventListener('touchcancel', this.onTouchEnd); + this.container.removeEventListener('contextmenu', this.onContextMenu); + } + } + + setSize(width, height, updateStyles) { + if (width <= 0 || height <= 0) { + this.hasValidSize = false; + return; + } + this.composer.setSize(width, height, updateStyles); + this.hasValidSize = true; + } + + tick() { + if (this.disposed || this.paused) return; + + if (!this.hasValidSize) { + const w = this.container.offsetWidth; + const h = this.container.offsetHeight; + if (w > 0 && h > 0) { + this.renderer.setSize(w, h, false); + this.camera.aspect = w / h; + this.camera.updateProjectionMatrix(); + this.composer.setSize(w, h); + this.hasValidSize = true; + } else { + requestAnimationFrame(this.tick); + return; + } + } + + if (resizeRendererToDisplaySize(this.renderer, this.setSize)) { + const canvas = this.renderer.domElement; + if (this.hasValidSize) { + this.camera.aspect = canvas.clientWidth / canvas.clientHeight; + this.camera.updateProjectionMatrix(); + } + } + + if (this.hasValidSize) { + const delta = this.clock.getDelta(); + this.render(delta); + this.update(delta); + } + + requestAnimationFrame(this.tick); + } + } + + const distortion_uniforms = { + uDistortionX: { value: new THREE.Vector2(80, 3) }, + uDistortionY: { value: new THREE.Vector2(-40, 2.5) } + }; + + const distortion_vertex = ` + #define PI 3.14159265358979 + uniform vec2 uDistortionX; + uniform vec2 uDistortionY; + float nsin(float val){ + return sin(val) * 0.5 + 0.5; + } + vec3 getDistortion(float progress){ + progress = clamp(progress, 0., 1.); + float xAmp = uDistortionX.r; + float xFreq = uDistortionX.g; + float yAmp = uDistortionY.r; + float yFreq = uDistortionY.g; + return vec3( + xAmp * nsin(progress * PI * xFreq - PI / 2.), + yAmp * nsin(progress * PI * yFreq - PI / 2.), + 0. + ); + } + `; + + const random = base => { + if (Array.isArray(base)) return Math.random() * (base[1] - base[0]) + base[0]; + return Math.random() * base; + }; + + const pickRandom = arr => { + if (Array.isArray(arr)) return arr[Math.floor(Math.random() * arr.length)]; + return arr; + }; + + function lerp(current, target, speed = 0.1, limit = 0.001) { + let change = (target - current) * speed; + if (Math.abs(change) < limit) { + change = target - current; + } + return change; + } + + class CarLights { + constructor(webgl, options, colors, speed, fade) { + this.webgl = webgl; + this.options = options; + this.colors = colors; + this.speed = speed; + this.fade = fade; + } + + init() { + const options = this.options; + let curve = new THREE.LineCurve3(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, -1)); + let geometry = new THREE.TubeGeometry(curve, 40, 1, 8, false); + + let instanced = new THREE.InstancedBufferGeometry().copy(geometry); + instanced.instanceCount = options.lightPairsPerRoadWay * 2; + + let laneWidth = options.roadWidth / options.lanesPerRoad; + + let aOffset = []; + let aMetrics = []; + let aColor = []; + + let colors = this.colors; + if (Array.isArray(colors)) { + colors = colors.map(c => new THREE.Color(c)); + } else { + colors = new THREE.Color(colors); + } + + for (let i = 0; i < options.lightPairsPerRoadWay; i++) { + let radius = random(options.carLightsRadius); + let length = random(options.carLightsLength); + let speed = random(this.speed); + + let carLane = i % options.lanesPerRoad; + let laneX = carLane * laneWidth - options.roadWidth / 2 + laneWidth / 2; + + let carWidth = random(options.carWidthPercentage) * laneWidth; + let carShiftX = random(options.carShiftX) * laneWidth; + laneX += carShiftX; + + let offsetY = random(options.carFloorSeparation) + radius * 1.3; + + let offsetZ = -random(options.length); + + aOffset.push(laneX - carWidth / 2); + aOffset.push(offsetY); + aOffset.push(offsetZ); + + aOffset.push(laneX + carWidth / 2); + aOffset.push(offsetY); + aOffset.push(offsetZ); + + aMetrics.push(radius); + aMetrics.push(length); + aMetrics.push(speed); + + aMetrics.push(radius); + aMetrics.push(length); + aMetrics.push(speed); + + let color = pickRandom(colors); + aColor.push(color.r); + aColor.push(color.g); + aColor.push(color.b); + + aColor.push(color.r); + aColor.push(color.g); + aColor.push(color.b); + } + + instanced.setAttribute('aOffset', new THREE.InstancedBufferAttribute(new Float32Array(aOffset), 3, false)); + instanced.setAttribute('aMetrics', new THREE.InstancedBufferAttribute(new Float32Array(aMetrics), 3, false)); + instanced.setAttribute('aColor', new THREE.InstancedBufferAttribute(new Float32Array(aColor), 3, false)); + + let material = new THREE.ShaderMaterial({ + fragmentShader: carLightsFragment, + vertexShader: carLightsVertex, + transparent: true, + uniforms: Object.assign( + { + uTime: { value: 0 }, + uTravelLength: { value: options.length }, + uFade: { value: this.fade } + }, + this.webgl.fogUniforms, + options.distortion.uniforms + ) + }); + + material.onBeforeCompile = shader => { + shader.vertexShader = shader.vertexShader.replace( + '#include ', + options.distortion.getDistortion + ); + }; + + let mesh = new THREE.Mesh(instanced, material); + mesh.frustumCulled = false; + this.webgl.scene.add(mesh); + this.mesh = mesh; + } + + update(time) { + this.mesh.material.uniforms.uTime.value = time; + } + } + + const carLightsFragment = ` + #define USE_FOG; + ${THREE.ShaderChunk['fog_pars_fragment']} + varying vec3 vColor; + varying vec2 vUv; + uniform vec2 uFade; + void main() { + vec3 color = vec3(vColor); + float alpha = smoothstep(uFade.x, uFade.y, vUv.x); + gl_FragColor = vec4(color, alpha); + if (gl_FragColor.a < 0.0001) discard; + ${THREE.ShaderChunk['fog_fragment']} + } + `; + + const carLightsVertex = ` + #define USE_FOG; + ${THREE.ShaderChunk['fog_pars_vertex']} + attribute vec3 aOffset; + attribute vec3 aMetrics; + attribute vec3 aColor; + uniform float uTravelLength; + uniform float uTime; + varying vec2 vUv; + varying vec3 vColor; + #include + void main() { + vec3 transformed = position.xyz; + float radius = aMetrics.r; + float myLength = aMetrics.g; + float speed = aMetrics.b; + + transformed.xy *= radius; + transformed.z *= myLength; + + transformed.z += myLength - mod(uTime * speed + aOffset.z, uTravelLength); + transformed.xy += aOffset.xy; + + float progress = abs(transformed.z / uTravelLength); + transformed.xyz += getDistortion(progress); + + vec4 mvPosition = modelViewMatrix * vec4(transformed, 1.); + gl_Position = projectionMatrix * mvPosition; + vUv = uv; + vColor = aColor; + ${THREE.ShaderChunk['fog_vertex']} + } + `; + + class LightsSticks { + constructor(webgl, options) { + this.webgl = webgl; + this.options = options; + } + + init() { + const options = this.options; + const geometry = new THREE.PlaneGeometry(1, 1); + let instanced = new THREE.InstancedBufferGeometry().copy(geometry); + let totalSticks = options.totalSideLightSticks; + instanced.instanceCount = totalSticks; + + let stickoffset = options.length / (totalSticks - 1); + const aOffset = []; + const aColor = []; + const aMetrics = []; + + let colors = options.colors.sticks; + if (Array.isArray(colors)) { + colors = colors.map(c => new THREE.Color(c)); + } else { + colors = new THREE.Color(colors); + } + + for (let i = 0; i < totalSticks; i++) { + let width = random(options.lightStickWidth); + let height = random(options.lightStickHeight); + aOffset.push((i - 1) * stickoffset * 2 + stickoffset * Math.random()); + + let color = pickRandom(colors); + aColor.push(color.r); + aColor.push(color.g); + aColor.push(color.b); + + aMetrics.push(width); + aMetrics.push(height); + } + + instanced.setAttribute('aOffset', new THREE.InstancedBufferAttribute(new Float32Array(aOffset), 1, false)); + instanced.setAttribute('aColor', new THREE.InstancedBufferAttribute(new Float32Array(aColor), 3, false)); + instanced.setAttribute('aMetrics', new THREE.InstancedBufferAttribute(new Float32Array(aMetrics), 2, false)); + + const material = new THREE.ShaderMaterial({ + fragmentShader: sideSticksFragment, + vertexShader: sideSticksVertex, + side: THREE.DoubleSide, + uniforms: Object.assign( + { + uTravelLength: { value: options.length }, + uTime: { value: 0 } + }, + this.webgl.fogUniforms, + options.distortion.uniforms + ) + }); + + material.onBeforeCompile = shader => { + shader.vertexShader = shader.vertexShader.replace( + '#include ', + options.distortion.getDistortion + ); + }; + + const mesh = new THREE.Mesh(instanced, material); + mesh.frustumCulled = false; + this.webgl.scene.add(mesh); + this.mesh = mesh; + } + + update(time) { + this.mesh.material.uniforms.uTime.value = time; + } + } + + const sideSticksVertex = ` + #define USE_FOG; + ${THREE.ShaderChunk['fog_pars_vertex']} + attribute float aOffset; + attribute vec3 aColor; + attribute vec2 aMetrics; + uniform float uTravelLength; + uniform float uTime; + varying vec3 vColor; + mat4 rotationY( in float angle ) { + return mat4( cos(angle), 0, sin(angle), 0, + 0, 1.0, 0, 0, + -sin(angle), 0, cos(angle), 0, + 0, 0, 0, 1); + } + #include + void main(){ + vec3 transformed = position.xyz; + float width = aMetrics.x; + float height = aMetrics.y; + + transformed.xy *= vec2(width, height); + float time = mod(uTime * 60. * 2. + aOffset, uTravelLength); + + transformed = (rotationY(3.14/2.) * vec4(transformed,1.)).xyz; + + transformed.z += - uTravelLength + time; + + float progress = abs(transformed.z / uTravelLength); + transformed.xyz += getDistortion(progress); + + transformed.y += height / 2.; + transformed.x += -width / 2.; + vec4 mvPosition = modelViewMatrix * vec4(transformed, 1.); + gl_Position = projectionMatrix * mvPosition; + vColor = aColor; + ${THREE.ShaderChunk['fog_vertex']} + } + `; + + const sideSticksFragment = ` + #define USE_FOG; + ${THREE.ShaderChunk['fog_pars_fragment']} + varying vec3 vColor; + void main(){ + vec3 color = vec3(vColor); + gl_FragColor = vec4(color,1.); + ${THREE.ShaderChunk['fog_fragment']} + } + `; + + class Road { + constructor(webgl, options) { + this.webgl = webgl; + this.options = options; + this.uTime = { value: 0 }; + } + + createPlane(side, width, isRoad) { + const options = this.options; + let segments = 100; + const geometry = new THREE.PlaneGeometry( + isRoad ? options.roadWidth : options.islandWidth, + options.length, + 20, + segments + ); + let uniforms = { + uTravelLength: { value: options.length }, + uColor: { value: new THREE.Color(isRoad ? options.colors.roadColor : options.colors.islandColor) }, + uTime: this.uTime + }; + + if (isRoad) { + uniforms = Object.assign(uniforms, { + uLanes: { value: options.lanesPerRoad }, + uBrokenLinesColor: { value: new THREE.Color(options.colors.brokenLines) }, + uShoulderLinesColor: { value: new THREE.Color(options.colors.shoulderLines) }, + uShoulderLinesWidthPercentage: { value: options.shoulderLinesWidthPercentage }, + uBrokenLinesLengthPercentage: { value: options.brokenLinesLengthPercentage }, + uBrokenLinesWidthPercentage: { value: options.brokenLinesWidthPercentage } + }); + } + + const material = new THREE.ShaderMaterial({ + fragmentShader: isRoad ? roadFragment : islandFragment, + vertexShader: roadVertex, + side: THREE.DoubleSide, + uniforms: Object.assign(uniforms, this.webgl.fogUniforms, options.distortion.uniforms) + }); + + material.onBeforeCompile = shader => { + shader.vertexShader = shader.vertexShader.replace( + '#include ', + options.distortion.getDistortion + ); + }; + + const mesh = new THREE.Mesh(geometry, material); + mesh.rotation.x = -Math.PI / 2; + mesh.position.z = -options.length / 2; + mesh.position.x += (this.options.islandWidth / 2 + options.roadWidth / 2) * side; + this.webgl.scene.add(mesh); + + return mesh; + } + + init() { + this.leftRoadWay = this.createPlane(-1, this.options.roadWidth, true); + this.rightRoadWay = this.createPlane(1, this.options.roadWidth, true); + this.island = this.createPlane(0, this.options.islandWidth, false); + } + + update(time) { + this.uTime.value = time; + } + } + + const roadBaseFragment = ` + #define USE_FOG; + varying vec2 vUv; + uniform vec3 uColor; + uniform float uTime; + #include + ${THREE.ShaderChunk['fog_pars_fragment']} + void main() { + vec2 uv = vUv; + vec3 color = vec3(uColor); + #include + gl_FragColor = vec4(color, 1.); + ${THREE.ShaderChunk['fog_fragment']} + } + `; + + const islandFragment = roadBaseFragment + .replace('#include ', '') + .replace('#include ', ''); + + const roadMarkings_vars = ` + uniform float uLanes; + uniform vec3 uBrokenLinesColor; + uniform vec3 uShoulderLinesColor; + uniform float uShoulderLinesWidthPercentage; + uniform float uBrokenLinesWidthPercentage; + uniform float uBrokenLinesLengthPercentage; + highp float random(vec2 co) { + highp float a = 12.9898; + highp float b = 78.233; + highp float c = 43758.5453; + highp float dt = dot(co.xy, vec2(a, b)); + highp float sn = mod(dt, 3.14); + return fract(sin(sn) * c); + } + `; + + const roadMarkings_fragment = ` + uv.y = mod(uv.y + uTime * 0.05, 1.); + float laneWidth = 1.0 / uLanes; + float brokenLineWidth = laneWidth * uBrokenLinesWidthPercentage; + float laneEmptySpace = 1. - uBrokenLinesLengthPercentage; + + float brokenLines = step(1.0 - brokenLineWidth, fract(uv.x * 2.0)) * step(laneEmptySpace, fract(uv.y * 10.0)); + float sideLines = step(1.0 - brokenLineWidth, fract((uv.x - laneWidth * (uLanes - 1.0)) * 2.0)) + step(brokenLineWidth, uv.x); + + brokenLines = mix(brokenLines, sideLines, uv.x); + `; + + const roadFragment = roadBaseFragment + .replace('#include ', roadMarkings_fragment) + .replace('#include ', roadMarkings_vars); + + const roadVertex = ` + #define USE_FOG; + uniform float uTime; + ${THREE.ShaderChunk['fog_pars_vertex']} + uniform float uTravelLength; + varying vec2 vUv; + #include + void main() { + vec3 transformed = position.xyz; + vec3 distortion = getDistortion((transformed.y + uTravelLength / 2.) / uTravelLength); + transformed.x += distortion.x; + transformed.z += distortion.y; + transformed.y += -1. * distortion.z; + + vec4 mvPosition = modelViewMatrix * vec4(transformed, 1.); + gl_Position = projectionMatrix * mvPosition; + vUv = uv; + ${THREE.ShaderChunk['fog_vertex']} + } + `; + + function resizeRendererToDisplaySize(renderer, setSize) { + const canvas = renderer.domElement; + const width = canvas.clientWidth; + const height = canvas.clientHeight; + if (width <= 0 || height <= 0) return false; + const needResize = canvas.width !== width || canvas.height !== height; + if (needResize) { + setSize(width, height, false); + } + return needResize; + } + + const container = hyperspeed.current; + if (!container) return; + + const options = { + ...DEFAULT_EFFECT_OPTIONS, + ...effectOptions, + colors: { ...DEFAULT_EFFECT_OPTIONS.colors, ...effectOptions.colors } + }; + options.distortion = distortions[options.distortion]; + + const myApp = new App(container, options); + appRef.current = myApp; + let cancelled = false; + myApp.loadAssets().then(() => { + if (!cancelled && !myApp.disposed) { + myApp.init(); + } + }); + + return () => { + cancelled = true; + if (appRef.current) { + appRef.current.dispose(); + appRef.current = null; + } + }; + }, [effectOptions]); + + useEffect(() => { + const el = hyperspeed.current; + if (!el) return; + + const syncPauseState = (shouldPause) => { + if (!appRef.current) return; + if (shouldPause) appRef.current.pause(); + else appRef.current.resume(); + }; + + const observer = new IntersectionObserver( + ([entry]) => syncPauseState(!entry.isIntersecting), + { rootMargin: '80px', threshold: 0 } + ); + observer.observe(el); + + const onVisibilityChange = () => { + if (document.hidden) { + syncPauseState(true); + return; + } + const rect = el.getBoundingClientRect(); + const inView = rect.bottom > 0 && rect.top < window.innerHeight; + syncPauseState(!inView); + }; + document.addEventListener('visibilitychange', onVisibilityChange); + + return () => { + observer.disconnect(); + document.removeEventListener('visibilitychange', onVisibilityChange); + }; + }, []); + + return
    ; +}; + +export default Hyperspeed; diff --git a/apps/landing/src/components/MagicBento/MagicBento.css b/apps/landing/src/components/MagicBento/MagicBento.css new file mode 100644 index 000000000..88a7b8b85 --- /dev/null +++ b/apps/landing/src/components/MagicBento/MagicBento.css @@ -0,0 +1,297 @@ +.bento-section { + --hue: 27; + --sat: 69%; + --white: hsl(0, 0%, 100%); + --purple-primary: rgba(0, 245, 212, 1); + --purple-glow: rgba(0, 245, 212, 0.2); + --purple-border: rgba(0, 245, 212, 0.8); + --border-color: #2F293A; + --background-dark: #120F17; +} + +.card-grid { + display: grid; + gap: 0.75em; + padding: 1em; + max-width: 72em; + font-size: clamp(1rem, 0.9rem + 0.5vw, 1.5rem); +} + +.magic-bento-card { + display: flex; + flex-direction: column; + justify-content: space-between; + position: relative; + min-height: 230px; + width: 100%; + max-width: 100%; + padding: 1.4em; + border-radius: 16px; + border: 1px solid rgba(255, 255, 255, 0.08); + background: rgba(255, 255, 255, 0.02); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + font-weight: 300; + overflow: visible; + transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); + + --glow-x: 50%; + --glow-y: 50%; + --glow-intensity: 0; + --glow-radius: 200px; +} + +.magic-bento-card:hover { + transform: translateY(-4px); + border-color: rgba(0, 245, 212, 0.3); + background: rgba(0, 245, 212, 0.04); + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.3), 0 0 20px rgba(0, 245, 212, 0.08); +} + +.magic-bento-card__header, +.magic-bento-card__content { + display: flex; + position: relative; + color: var(--white); +} + +.magic-bento-card__header { + gap: 0.75em; + justify-content: space-between; + align-items: center; +} + +.magic-bento-card__content { + flex-direction: column; +} + +.magic-bento-card__label { + font-size: 10px; + font-weight: 600; + letter-spacing: 0.1em; + text-transform: uppercase; + color: rgba(0, 245, 212, 0.6); + padding: 0.2em 0.6em; + border-radius: 4px; + background: rgba(0, 245, 212, 0.06); + border: 1px solid rgba(0, 245, 212, 0.1); + transition: all 0.4s ease; + transform: translateY(0); + opacity: 0.7; +} + +.magic-bento-card:hover .magic-bento-card__label { + color: rgba(0, 245, 212, 0.9); + background: rgba(0, 245, 212, 0.1); + border-color: rgba(0, 245, 212, 0.25); + opacity: 1; + transform: translateY(-1px); +} + +.magic-bento-card__title, +.magic-bento-card__description { + --clamp-title: 1; + --clamp-desc: 2; +} + +.magic-bento-card__title { + font-weight: 500; + font-size: 15px; + margin: 0 0 0.35em; + color: #f0f0f0; + letter-spacing: -0.01em; + transition: all 0.35s ease 0.05s; + transform: translateY(0); +} + +.magic-bento-card:hover .magic-bento-card__title { + color: #ffffff; + transform: translateY(-2px); +} + +.magic-bento-card__description { + font-size: 12px; + line-height: 1.45; + color: rgba(255, 255, 255, 0.45); + transition: all 0.4s ease 0.1s; + transform: translateY(0); +} + +.magic-bento-card:hover .magic-bento-card__description { + color: rgba(255, 255, 255, 0.7); + transform: translateY(-2px); +} + +.magic-bento-card--text-autohide .magic-bento-card__title, +.magic-bento-card--text-autohide .magic-bento-card__description { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.magic-bento-card--text-autohide .magic-bento-card__title { + -webkit-line-clamp: var(--clamp-title); + line-clamp: var(--clamp-title); +} + +.magic-bento-card--text-autohide .magic-bento-card__description { + -webkit-line-clamp: var(--clamp-desc); + line-clamp: var(--clamp-desc); +} + +@media (max-width: 599px) { + .card-grid { + grid-template-columns: 1fr; + width: 92%; + margin: 0 auto; + padding: 0.5em; + } + + .magic-bento-card { + width: 100%; + min-height: 200px; + } +} + +@media (min-width: 600px) { + .card-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (min-width: 1024px) { + .card-grid { + grid-template-columns: repeat(4, 1fr); + } + + .magic-bento-card:nth-child(3) { + grid-column: span 2; + grid-row: span 2; + } + + .magic-bento-card:nth-child(4) { + grid-column: 1 / span 2; + grid-row: 2 / span 2; + } + + .magic-bento-card:nth-child(6) { + grid-column: 4; + grid-row: 3; + } +} + +.magic-bento-card--border-glow::after { + content: ''; + position: absolute; + inset: 0; + padding: 6px; + background: radial-gradient( + var(--glow-radius) circle at var(--glow-x) var(--glow-y), + rgba(0, 245, 212, calc(var(--glow-intensity) * 0.8)) 0%, + rgba(0, 245, 212, calc(var(--glow-intensity) * 0.4)) 30%, + transparent 60% + ); + border-radius: inherit; + -webkit-mask: + linear-gradient(#fff 0 0) content-box, + linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask: + linear-gradient(#fff 0 0) content-box, + linear-gradient(#fff 0 0); + mask-composite: exclude; + pointer-events: none; + opacity: 1; + transition: opacity 0.3s ease; + z-index: 1; +} + +.magic-bento-card--border-glow:hover::after { + opacity: 1; +} + +.magic-bento-card--border-glow:hover { + box-shadow: + 0 4px 20px rgba(0, 245, 212, 0.4), + 0 0 30px var(--purple-glow); +} + +.particle-container { + position: relative; + overflow: hidden; +} + +.particle::before { + content: ''; + position: absolute; + top: -2px; + left: -2px; + right: -2px; + bottom: -2px; + background: rgba(0, 245, 212, 0.2); + border-radius: 50%; + z-index: -1; +} + +.particle-container:hover { + box-shadow: + 0 4px 20px rgba(0, 245, 212, 0.2), + 0 0 30px var(--purple-glow); +} + +.global-spotlight { + mix-blend-mode: screen; + will-change: transform, opacity; + z-index: 200 !important; + pointer-events: none; +} + +.bento-section { + position: relative; + user-select: none; +} + +.magic-bento-card__visual { + display: flex; + align-items: center; + justify-content: center; + flex: 1; + width: 100%; + height: 100%; + min-height: 110px; + overflow: hidden; + position: relative; + z-index: 2; + margin: 0.35em 0; + opacity: 0.85; + transition: opacity 0.4s ease; +} + +.magic-bento-card:hover .magic-bento-card__visual { + opacity: 1; +} + +/* Default mockup scaling for 1x1 cards to fit comfortably */ +.magic-bento-card__visual > * { + transform: scale(0.88); + transform-origin: center; + transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1); +} + +.magic-bento-card:hover .magic-bento-card__visual > * { + transform: scale(0.94); +} + +/* Larger mockup scale for 2x2 double-width cards on desktop */ +@media (min-width: 1024px) { + .magic-bento-card:nth-child(3) .magic-bento-card__visual > *, + .magic-bento-card:nth-child(4) .magic-bento-card__visual > * { + transform: scale(1.1); + } + + .magic-bento-card:nth-child(3):hover .magic-bento-card__visual > *, + .magic-bento-card:nth-child(4):hover .magic-bento-card__visual > * { + transform: scale(1.15); + } +} diff --git a/apps/landing/src/components/MagicBento/MagicBento.jsx b/apps/landing/src/components/MagicBento/MagicBento.jsx new file mode 100644 index 000000000..2d35c8f9f --- /dev/null +++ b/apps/landing/src/components/MagicBento/MagicBento.jsx @@ -0,0 +1,556 @@ +import { useRef, useEffect, useCallback, useState } from 'react'; +import { gsap } from 'gsap'; +import './MagicBento.css'; +import BorderGlow from '../BorderGlow/BorderGlow'; + +const DEFAULT_PARTICLE_COUNT = 12; +const DEFAULT_SPOTLIGHT_RADIUS = 300; +const DEFAULT_GLOW_COLOR = '0, 245, 212'; +const MOBILE_BREAKPOINT = 768; + +const cardData = [ + { + color: '#120F17', + title: 'User Authentication', + description: 'Pre-configured secure login/signup flows, session handling with JWTs, and third-party login providers with zero setup.', + label: 'IDENTITY' + }, + { + color: '#120F17', + title: 'JSON Document Database', + description: 'Direct database mutations and queries from your client app. Automated validation schemas protect integrity at high speed.', + label: 'DATABASE' + }, + { + color: '#120F17', + title: 'Secure File Storage', + description: 'Upload, manage, and deliver media assets like avatars and documents. Integrated with bucket systems and global delivery networks.', + label: 'STORAGE' + }, + { + color: '#120F17', + title: 'Transactional Mailer', + description: 'Pre-wired email dispatchers for user verification, password recovery, and system notifications with customizable templates.', + label: 'COMMUNICATION' + }, + { + color: '#120F17', + title: 'Row-Level Security', + description: 'Fine-grained read/write security with RLS. Restrict access based on document ownership and user authentication tokens.', + label: 'SECURITY' + }, + { + color: '#120F17', + title: 'Realtime Broadcast', + description: 'Listen to database mutations instantly or broadcast custom events across clients using low-latency WebSocket connections.', + label: 'REALTIME' + } +]; + + +const createParticleElement = (x, y, color = DEFAULT_GLOW_COLOR) => { + const el = document.createElement('div'); + el.className = 'particle'; + el.style.cssText = ` + position: absolute; + width: 4px; + height: 4px; + border-radius: 50%; + background: rgba(${color}, 1); + box-shadow: 0 0 6px rgba(${color}, 0.6); + pointer-events: none; + z-index: 100; + left: ${x}px; + top: ${y}px; + `; + return el; +}; + +const calculateSpotlightValues = radius => ({ + proximity: radius * 0.5, + fadeDistance: radius * 0.75 +}); + +const updateCardGlowProperties = (card, mouseX, mouseY, glow, radius) => { + const rect = card.getBoundingClientRect(); + const relativeX = ((mouseX - rect.left) / rect.width) * 100; + const relativeY = ((mouseY - rect.top) / rect.height) * 100; + + card.style.setProperty('--glow-x', `${relativeX}%`); + card.style.setProperty('--glow-y', `${relativeY}%`); + card.style.setProperty('--glow-intensity', glow.toString()); + card.style.setProperty('--glow-radius', `${radius}px`); +}; + +const ParticleCard = ({ + children, + className = '', + disableAnimations = false, + style, + particleCount = DEFAULT_PARTICLE_COUNT, + glowColor = DEFAULT_GLOW_COLOR, + enableTilt = true, + clickEffect = false, + enableMagnetism = false +}) => { + const cardRef = useRef(null); + const particlesRef = useRef([]); + const timeoutsRef = useRef([]); + const isHoveredRef = useRef(false); + const memoizedParticles = useRef([]); + const particlesInitialized = useRef(false); + const magnetismAnimationRef = useRef(null); + + const initializeParticles = useCallback(() => { + if (particlesInitialized.current || !cardRef.current) return; + + const { width, height } = cardRef.current.getBoundingClientRect(); + memoizedParticles.current = Array.from({ length: particleCount }, () => + createParticleElement(Math.random() * width, Math.random() * height, glowColor) + ); + particlesInitialized.current = true; + }, [particleCount, glowColor]); + + const clearAllParticles = useCallback(() => { + timeoutsRef.current.forEach(clearTimeout); + timeoutsRef.current = []; + magnetismAnimationRef.current?.kill(); + + particlesRef.current.forEach(particle => { + gsap.to(particle, { + scale: 0, + opacity: 0, + duration: 0.3, + ease: 'back.in(1.7)', + onComplete: () => { + particle.parentNode?.removeChild(particle); + } + }); + }); + particlesRef.current = []; + }, []); + + const animateParticles = useCallback(() => { + if (!cardRef.current || !isHoveredRef.current) return; + + if (!particlesInitialized.current) { + initializeParticles(); + } + + memoizedParticles.current.forEach((particle, index) => { + const timeoutId = setTimeout(() => { + if (!isHoveredRef.current || !cardRef.current) return; + + const clone = particle.cloneNode(true); + cardRef.current.appendChild(clone); + particlesRef.current.push(clone); + + gsap.fromTo(clone, { scale: 0, opacity: 0 }, { scale: 1, opacity: 1, duration: 0.3, ease: 'back.out(1.7)' }); + + gsap.to(clone, { + x: (Math.random() - 0.5) * 100, + y: (Math.random() - 0.5) * 100, + rotation: Math.random() * 360, + duration: 2 + Math.random() * 2, + ease: 'none', + repeat: -1, + yoyo: true + }); + + gsap.to(clone, { + opacity: 0.3, + duration: 1.5, + ease: 'power2.inOut', + repeat: -1, + yoyo: true + }); + }, index * 100); + + timeoutsRef.current.push(timeoutId); + }); + }, [initializeParticles]); + + useEffect(() => { + if (disableAnimations || !cardRef.current) return; + + const element = cardRef.current; + + const handleMouseEnter = () => { + isHoveredRef.current = true; + animateParticles(); + + if (enableTilt) { + gsap.to(element, { + rotateX: 5, + rotateY: 5, + duration: 0.3, + ease: 'power2.out', + transformPerspective: 1000 + }); + } + }; + + const handleMouseLeave = () => { + isHoveredRef.current = false; + clearAllParticles(); + + if (enableTilt) { + gsap.to(element, { + rotateX: 0, + rotateY: 0, + duration: 0.3, + ease: 'power2.out' + }); + } + + if (enableMagnetism) { + gsap.to(element, { + x: 0, + y: 0, + duration: 0.3, + ease: 'power2.out' + }); + } + }; + + const handleMouseMove = e => { + if (!enableTilt && !enableMagnetism) return; + + const rect = element.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + const centerX = rect.width / 2; + const centerY = rect.height / 2; + + if (enableTilt) { + const rotateX = ((y - centerY) / centerY) * -10; + const rotateY = ((x - centerX) / centerX) * 10; + + gsap.to(element, { + rotateX, + rotateY, + duration: 0.1, + ease: 'power2.out', + transformPerspective: 1000 + }); + } + + if (enableMagnetism) { + const magnetX = (x - centerX) * 0.05; + const magnetY = (y - centerY) * 0.05; + + magnetismAnimationRef.current = gsap.to(element, { + x: magnetX, + y: magnetY, + duration: 0.3, + ease: 'power2.out' + }); + } + }; + + const handleClick = e => { + if (!clickEffect) return; + + const rect = element.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + const maxDistance = Math.max( + Math.hypot(x, y), + Math.hypot(x - rect.width, y), + Math.hypot(x, y - rect.height), + Math.hypot(x - rect.width, y - rect.height) + ); + + const ripple = document.createElement('div'); + ripple.style.cssText = ` + position: absolute; + width: ${maxDistance * 2}px; + height: ${maxDistance * 2}px; + border-radius: 50%; + background: radial-gradient(circle, rgba(${glowColor}, 0.4) 0%, rgba(${glowColor}, 0.2) 30%, transparent 70%); + left: ${x - maxDistance}px; + top: ${y - maxDistance}px; + pointer-events: none; + z-index: 1000; + `; + + element.appendChild(ripple); + + gsap.fromTo( + ripple, + { + scale: 0, + opacity: 1 + }, + { + scale: 1, + opacity: 0, + duration: 0.8, + ease: 'power2.out', + onComplete: () => ripple.remove() + } + ); + }; + + element.addEventListener('mouseenter', handleMouseEnter); + element.addEventListener('mouseleave', handleMouseLeave); + element.addEventListener('mousemove', handleMouseMove); + element.addEventListener('click', handleClick); + + return () => { + isHoveredRef.current = false; + element.removeEventListener('mouseenter', handleMouseEnter); + element.removeEventListener('mouseleave', handleMouseLeave); + element.removeEventListener('mousemove', handleMouseMove); + element.removeEventListener('click', handleClick); + clearAllParticles(); + }; + }, [animateParticles, clearAllParticles, disableAnimations, enableTilt, enableMagnetism, clickEffect, glowColor]); + + return ( +
    + {children} +
    + ); +}; + +const GlobalSpotlight = ({ + gridRef, + disableAnimations = false, + enabled = true, + spotlightRadius = DEFAULT_SPOTLIGHT_RADIUS, + glowColor = DEFAULT_GLOW_COLOR +}) => { + const spotlightRef = useRef(null); + const isInsideSection = useRef(false); + + useEffect(() => { + if (disableAnimations || !gridRef?.current || !enabled) return; + + const spotlight = document.createElement('div'); + spotlight.className = 'global-spotlight'; + spotlight.style.cssText = ` + position: fixed; + width: 800px; + height: 800px; + border-radius: 50%; + pointer-events: none; + background: radial-gradient(circle, + rgba(${glowColor}, 0.15) 0%, + rgba(${glowColor}, 0.08) 15%, + rgba(${glowColor}, 0.04) 25%, + rgba(${glowColor}, 0.02) 40%, + rgba(${glowColor}, 0.01) 65%, + transparent 70% + ); + z-index: 200; + opacity: 0; + transform: translate(-50%, -50%); + mix-blend-mode: screen; + `; + document.body.appendChild(spotlight); + spotlightRef.current = spotlight; + + const handleMouseMove = e => { + if (!spotlightRef.current || !gridRef.current) return; + + const section = gridRef.current.closest('.bento-section'); + const rect = section?.getBoundingClientRect(); + const mouseInside = + rect && e.clientX >= rect.left && e.clientX <= rect.right && e.clientY >= rect.top && e.clientY <= rect.bottom; + + isInsideSection.current = mouseInside || false; + const cards = gridRef.current.querySelectorAll('.magic-bento-card'); + + if (!mouseInside) { + gsap.to(spotlightRef.current, { + opacity: 0, + duration: 0.3, + ease: 'power2.out' + }); + cards.forEach(card => { + card.style.setProperty('--glow-intensity', '0'); + }); + return; + } + + const { proximity, fadeDistance } = calculateSpotlightValues(spotlightRadius); + let minDistance = Infinity; + + cards.forEach(card => { + const cardElement = card; + const cardRect = cardElement.getBoundingClientRect(); + const centerX = cardRect.left + cardRect.width / 2; + const centerY = cardRect.top + cardRect.height / 2; + const distance = + Math.hypot(e.clientX - centerX, e.clientY - centerY) - Math.max(cardRect.width, cardRect.height) / 2; + const effectiveDistance = Math.max(0, distance); + + minDistance = Math.min(minDistance, effectiveDistance); + + let glowIntensity = 0; + if (effectiveDistance <= proximity) { + glowIntensity = 1; + } else if (effectiveDistance <= fadeDistance) { + glowIntensity = (fadeDistance - effectiveDistance) / (fadeDistance - proximity); + } + + updateCardGlowProperties(cardElement, e.clientX, e.clientY, glowIntensity, spotlightRadius); + }); + + gsap.to(spotlightRef.current, { + left: e.clientX, + top: e.clientY, + duration: 0.1, + ease: 'power2.out' + }); + + const targetOpacity = + minDistance <= proximity + ? 0.8 + : minDistance <= fadeDistance + ? ((fadeDistance - minDistance) / (fadeDistance - proximity)) * 0.8 + : 0; + + gsap.to(spotlightRef.current, { + opacity: targetOpacity, + duration: targetOpacity > 0 ? 0.2 : 0.5, + ease: 'power2.out' + }); + }; + + const handleMouseLeave = () => { + isInsideSection.current = false; + gridRef.current?.querySelectorAll('.magic-bento-card').forEach(card => { + card.style.setProperty('--glow-intensity', '0'); + }); + if (spotlightRef.current) { + gsap.to(spotlightRef.current, { + opacity: 0, + duration: 0.3, + ease: 'power2.out' + }); + } + }; + + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseleave', handleMouseLeave); + + return () => { + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseleave', handleMouseLeave); + spotlightRef.current?.parentNode?.removeChild(spotlightRef.current); + }; + }, [gridRef, disableAnimations, enabled, spotlightRadius, glowColor]); + + return null; +}; + +const BentoCardGrid = ({ children, gridRef }) => ( +
    + {children} +
    +); + +const useMobileDetection = () => { + const [isMobile, setIsMobile] = useState(false); + + useEffect(() => { + const checkMobile = () => setIsMobile(window.innerWidth <= MOBILE_BREAKPOINT); + + checkMobile(); + window.addEventListener('resize', checkMobile); + + return () => window.removeEventListener('resize', checkMobile); + }, []); + + return isMobile; +}; + +const MagicBento = ({ + cards, + textAutoHide = true, + enableSpotlight = true, + disableAnimations = false, + spotlightRadius = DEFAULT_SPOTLIGHT_RADIUS, + particleCount = DEFAULT_PARTICLE_COUNT, + enableTilt = false, + glowColor = DEFAULT_GLOW_COLOR, + clickEffect = true, + enableMagnetism = true +}) => { + const gridRef = useRef(null); + const isMobile = useMobileDetection(); + const shouldDisableAnimations = disableAnimations || isMobile; + + return ( + <> + {enableSpotlight && ( + + )} + + + {(cards || cardData).map((card, index) => { + const title = card.title; + const description = card.description || card.desc; + const label = card.label || card.badge; + const visual = card.visual; + + const baseClassName = `magic-bento-card ${textAutoHide ? 'magic-bento-card--text-autohide' : ''}`; + + return ( + + +
    +
    {label}
    +
    + {visual && ( +
    + {visual} +
    + )} +
    +

    {title}

    +

    {description}

    +
    +
    +
    + ); + })} +
    + + ); +}; + +export default MagicBento; diff --git a/apps/landing/src/components/Navbar.astro b/apps/landing/src/components/Navbar.astro new file mode 100644 index 000000000..3be2718b2 --- /dev/null +++ b/apps/landing/src/components/Navbar.astro @@ -0,0 +1,103 @@ +--- +import { Zap, Box, Check, Terminal, Menu, X, ArrowRight } from 'lucide-react'; + +const NAV_ITEMS = [ + { label: 'Features', href: '/#client-services', icon: Zap }, + { label: 'Use Cases', href: '/#use-cases', icon: Box }, + { label: 'Pricing', href: '/pricing', icon: Check }, + { label: 'Docs', href: 'https://docs.ub.bitbros.in', icon: Terminal, external: true } +]; +--- + + + + + + diff --git a/apps/landing/src/components/OrbitSection.jsx b/apps/landing/src/components/OrbitSection.jsx new file mode 100644 index 000000000..15c85cc15 --- /dev/null +++ b/apps/landing/src/components/OrbitSection.jsx @@ -0,0 +1,415 @@ +import React from 'react'; +import { motion as Motion } from 'framer-motion'; + +const COMPATIBLE_TECHNOLOGIES = [ + // React + { + id: 'react', + label: 'React', + ring: 'inner', + cls: 'int-react', + type: 'Official SDK', + badge: '@urbackend/react', + desc: 'Connect your React applications seamlessly with our official React SDK. Equip your components with hooks, authentication providers, and state utilities.', + color: '#61DAFB', + svg: ( + + + + + + + + + ), + code: `import { UrProvider, useUrCollection } from '@urbackend/react';\n\n// 1. Wrap your app\nfunction App() {\n return (\n \n \n \n );\n}\n\n// 2. Use reactive database hooks!\nfunction TodoList() {\n const { documents, loading } = useUrCollection('todos');\n return (\n
      \n {documents.map(todo =>
    • {todo.title}
    • )}\n
    \n );\n}` + }, + // Next.js + { + id: 'nextjs', + label: 'Next.js', + ring: 'inner', + cls: 'int-next', + type: 'React Framework', + badge: 'SDK + Server Actions', + desc: 'Build server-rendered React applications. Works beautifully with Next.js Server Components, Middleware auth checks, and Server Actions.', + color: '#ffffff', + svg: ( + + + + + + + + + + + + + + + + ), + code: `// Get server-side data in Server Components\nimport { createServerClient } from '@urbackend/sdk/server';\n\nexport default async function DashboardPage() {\n const ur = createServerClient({\n endpoint: 'https://api.ub.bitbros.in',\n apiKey: process.env.UR_PRIVATE_KEY\n });\n\n const { data: posts } = await ur.db('posts').find();\n\n return (\n
    \n {posts.map(post =>

    {post.title}

    )}\n
    \n );\n}` + }, + // Flutter + { + id: 'flutter', + label: 'Flutter', + ring: 'inner', + cls: 'int-flutter', + type: 'Mobile Framework', + badge: 'urbackend_sdk (Dart)', + desc: 'Build gorgeous, high-performance mobile apps. Sync local collections, authenticate users, and manage media uploads natively in Dart.', + color: '#02569B', + svg: ( + + + + + ), + code: `import 'package:urbackend_sdk/urbackend_sdk.dart';\n\nvoid main() async {\n // Initialize urBackend client\n final client = UrClient(\n endpoint: 'https://api.ub.bitbros.in',\n projectId: 'proj_123',\n );\n\n // Authenticate user\n final session = await client.auth.signIn(\n email: 'user@example.com', \n password: 'secure_password'\n );\n\n print('Access Token: \${session.accessToken}');\n}` + }, + // Vue + { + id: 'vue', + label: 'Vue.js', + ring: 'inner', + cls: 'int-vue', + type: 'Frontend Framework', + badge: '@urbackend/sdk (ESM)', + desc: 'Create highly responsive web experiences. Integrates natively with Vue 3 composition APIs, reactive ref/computed state, and Pinia stores.', + color: '#42B883', + svg: ( + + + + + ), + code: `\n\n` + }, + // Webflow + { + id: 'webflow', + label: 'Webflow', + ring: 'inner', + cls: 'int-webflow', + type: 'Low-Code Web', + badge: 'Custom Script CDN', + desc: 'Add custom dynamic databases, member logic, and contact forms to Webflow designs without writing a single line of backend server code.', + color: '#4353FF', + svg: ( + + + + ), + code: `\n\n\n` + }, + // React Native + { + id: 'react-native', + label: 'React Native', + ring: 'mid', + cls: 'int-react-native', + type: 'Mobile Framework', + badge: '@urbackend/react-native', + desc: 'Write beautiful native iOS and Android apps using React and Javascript. Supports secure AsyncStorage token persistence out-of-the-box.', + color: '#61DAFB', + svg: ( + + + + + + + + + ), + code: `import { UrProvider } from '@urbackend/react';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\n// Initialize with Native Storage for sessions\nfunction App() {\n return (\n \n \n \n );\n}` + }, + // Dart + { + id: 'dart', + label: 'Dart', + ring: 'mid', + cls: 'int-dart', + type: 'Programming Language', + badge: 'REST API Wrapper', + desc: 'Build CLI utilities, server-side tools, or Flutter extensions using raw Dart. Fast JSON processing and asynchronous networking.', + color: '#00D2B8', + svg: ( + + + + + + ), + code: `import 'package:http/http.dart' as http;\nimport 'dart:convert';\n\nvoid main() async {\n final url = Uri.parse('https://api.ub.bitbros.in/v1/db/analytics');\n final response = await http.post(\n url,\n headers: { 'x-api-key': 'ur_sec_dart' },\n body: jsonEncode({ 'metric': 'system_boot', 'value': 1 }),\n );\n print(jsonDecode(response.body));\n}` + }, + // Nuxt + { + id: 'nuxt', + label: 'Nuxt', + ring: 'mid', + cls: 'int-nuxt', + type: 'Vue Framework', + badge: 'Nuxt Module', + desc: 'Build fullstack server-rendered Vue 3 applications. Fully integrated with Nuxt server routes and asyncData fetching.', + color: '#00DC82', + svg: ( + + + + ), + code: `// server/api/users.ts\nimport { createClient } from '@urbackend/sdk';\n\nexport default defineEventHandler(async (event) => {\n const ur = createClient({\n endpoint: 'https://api.ub.bitbros.in',\n apiKey: process.env.UR_API_KEY\n });\n \n const users = await ur.collection('users').find();\n return { success: true, users };\n});` + }, + // Python + { + id: 'python', + label: 'Python', + ring: 'mid', + cls: 'int-python', + type: 'Official SDK', + badge: 'urbackend-python', + desc: 'For script automation, machine learning pipelines, and backend processing. A simple, robust requests-based client wrapper.', + color: '#FFD43B', + svg: ( + + + + + ), + code: `from urbackend import UrClient\n\n# Initialize Python Client\nclient = UrClient(\n endpoint="https://api.ub.bitbros.in",\n api_key="ur_sec_python_999"\n)\n\n# Insert documents in MongoDB\nnew_item = client.db("inventory").insert({\n "sku": "ITEM_XYZ",\n "quantity": 150,\n "location": "Warehouse A"\n})\n\nprint(f"Created doc with ID: {new_item['_id']}")` + }, + // TypeScript + { + id: 'typescript', + label: 'TypeScript', + ring: 'mid', + cls: 'int-typescript', + type: 'Official SDK', + badge: '@urbackend/sdk (Typed)', + desc: 'Lightweight core package compiled for JS/TS. Enjoy autocomplete, model schema inference, and full compiler support.', + color: '#3178C6', + svg: ( + + + + + ), + code: `import { UrClient, Document } from '@urbackend/sdk';\n\ninterface Order extends Document {\n item: string;\n total: number;\n}\n\nconst client = new UrClient({ endpoint: 'https://api.ub.bitbros.in' });\n\n// Auto-inferred typing on query responses\nconst { data } = await client.db('orders').findById('ord_999');\nconsole.log(data.item.toUpperCase());` + }, + // Swift + { + id: 'swift', + label: 'Swift', + ring: 'mid', + cls: 'int-swift', + type: 'Native iOS', + badge: 'REST API Endpoint', + desc: 'Integrate native Apple ecosystems. Fast and optimized REST routing designed for modern iOS, macOS, watchOS, or visionOS Apps.', + color: '#F05138', + svg: ( + + + + + ), + code: `import Foundation\n\nstruct User: Codable {\n let email: String\n}\n\nfunc fetchUser(userId: String) {\n let url = URL(string: "https://api.ub.bitbros.in/v1/db/users/\\(userId)")!\n var request = URLRequest(url: url)\n request.setValue("ur_sec_swift_key", forHTTPHeaderField: "x-api-key")\n \n URLSession.shared.dataTask(with: request) { data, _, _ in\n if let data = data {\n let user = try? JSONDecoder().decode(User.self, from: data)\n print("User: \\(user?.email ?? "")")\n }\n }.resume()\n}` + }, + // Kotlin + { + id: 'kotlin', + label: 'Kotlin', + ring: 'outer', + cls: 'int-kotlin', + type: 'Native Android', + badge: 'REST API Client', + desc: 'Build powerful Android applications. Fetch collections, authorize users, and write logs natively inside Kotlin-based repositories.', + color: '#7F52FF', + svg: ( + + + + ), + code: `import okhttp3.OkHttpClient\nimport okhttp3.Request\n\nval client = OkHttpClient()\n\nfun loadData() {\n val request = Request.Builder()\n .url("https://api.ub.bitbros.in/v1/db/products")\n .addHeader("x-api-key", "ur_sec_kotlin")\n .build()\n\n client.newCall(request).execute().use { response ->\n println(response.body?.string())\n }\n}` + }, + // Go + { + id: 'go', + label: 'Go', + ring: 'outer', + cls: 'int-go', + type: 'Backend Language', + badge: 'Net/HTTP API Calls', + desc: 'Connect performant microservices. urBackend gives Go services immediate read/write access to MongoDB instances over SSL endpoints.', + color: '#00ADD8', + svg: ( + + + + + ), + code: `package main\n\nimport (\n "bytes"\n "fmt"\n "net/http"\n)\n\nfunc main() {\n jsonData := []byte(\`{"device_id": "sensor_01", "temp": 24.5}\`)\n req, _ := http.NewRequest("POST", "https://api.ub.bitbros.in/v1/db/telemetry", bytes.NewBuffer(jsonData))\n req.Header.Set("x-api-key", "ur_sec_golang")\n req.Header.Set("Content-Type", "application/json")\n\n client := &http.Client{}\n resp, _ := client.Do(req)\n fmt.Println("Status Code:", resp.StatusCode)\n}` + }, + // Rust + { + id: 'rust', + label: 'Rust', + ring: 'outer', + cls: 'int-rust', + type: 'Systems Language', + badge: 'Async REST Crates', + desc: 'Integrate memory-safe microservices with urBackend. Fully asynchronous request bodies with low connection latency.', + color: '#FF6F30', + svg: ( + + + + + + ), + code: `use serde_json::json;\n\n#[tokio::main]\nasync fn main() -> Result<(), reqwest::Error> {\n let client = reqwest::Client::new();\n let body = json!({ "user_id": "usr_99", "status": "active" });\n\n let res = client.post("https://api.ub.bitbros.in/v1/db/sessions")\n .header("x-api-key", "ur_sec_rust")\n .json(&body)\n .send()\n .await?;\n\n println!("Response status: {}", res.status());\n Ok(())\n}` + }, + // FastAPI + { + id: 'fastapi', + label: 'FastAPI', + ring: 'outer', + cls: 'int-fastapi', + type: 'Python Framework', + badge: 'HTTP Client Callouts', + desc: 'Combine local python microservices with urBackend datastores. Offload authentication and file storage flows with ease.', + color: '#009485', + svg: ( + + + + ), + code: `from fastapi import FastAPI, Depends\nimport httpx\n\napp = FastAPI()\n\n@app.get("/sync-data")\nasync def sync_data():\n async with httpx.AsyncClient() as client:\n res = await client.post(\n "https://api.ub.bitbros.in/v1/db/syncs",\n headers={"x-api-key": "ur_sec_fastapi"},\n json={"status": "completed"}\n )\n return res.json()` + }, + // Node.js + { + id: 'node', + label: 'Node.js', + ring: 'outer', + cls: 'int-node', + type: 'Core SDK', + badge: '@urbackend/sdk (ESM/CJS)', + desc: 'Perform server-side orchestration. Manage document indexing, trigger email deliveries, and query buckets directly from Node.js scripts.', + color: '#339933', + svg: ( + + + + ), + code: `const { UrClient } = require('@urbackend/sdk');\n\n// Initialize with admin privileges\nconst ur = new UrClient({\n endpoint: 'https://api.ub.bitbros.in',\n apiKey: process.env.UR_ADMIN_KEY\n});\n\nasync function sendNewsletter() {\n const result = await ur.mail.send({\n template: 'newsletter',\n to: 'subscribers@domain.com',\n data: { week: '24' }\n });\n console.log('Emails dispatched:', result.success);\n}` + } +]; + +const ORBIT_INNER_TECH = COMPATIBLE_TECHNOLOGIES.filter((t) => t.ring === 'inner'); +const ORBIT_MID_TECH = COMPATIBLE_TECHNOLOGIES.filter((t) => t.ring === 'mid'); +const ORBIT_OUTER_TECH = COMPATIBLE_TECHNOLOGIES.filter((t) => t.ring === 'outer'); + +export default function OrbitSection() { + return ( +
    +
    + + Ecosystem +

    Compatible with your favorite stack

    +

    Connect from any framework or platform. Enjoy official client SDKs, clean typed models, or direct REST connections.

    +
    + +
    +
    +
    +
    +
    + urBackend +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    + {ORBIT_INNER_TECH.map((item, i, arr) => ( +
    +
    +
    + {item.svg} + {item.label} +
    +
    + ))} + +
    + {ORBIT_MID_TECH.map((item, i, arr) => ( +
    +
    +
    + {item.svg} + {item.label} +
    +
    + ))} + +
    + {ORBIT_OUTER_TECH.map((item, i, arr) => ( +
    +
    +
    + {item.svg} + {item.label} +
    +
    + ))} +
    +
    +
    +
    +
    + ); +} diff --git a/apps/landing/src/components/StudioReplay.jsx b/apps/landing/src/components/StudioReplay.jsx new file mode 100644 index 000000000..27f058630 --- /dev/null +++ b/apps/landing/src/components/StudioReplay.jsx @@ -0,0 +1,127 @@ +import React, { useState, useEffect } from 'react'; +import { Database, Terminal, Code, Plus, Check, Cpu } from 'lucide-react'; + +export default function StudioReplay() { + const [studioStep, setStudioStep] = useState(6); + const [replayKey, setReplayKey] = useState(1); // Start animating on mount + + useEffect(() => { + let active = true; + const runAnimation = async () => { + setStudioStep(0); + const delays = [600, 600, 600, 700, 900, 800]; + for (let i = 0; i < delays.length; i++) { + await new Promise((resolve) => setTimeout(resolve, delays[i])); + if (!active) return; + setStudioStep(i + 1); + } + }; + runAnimation(); + return () => { + active = false; + }; + }, [replayKey]); + + const triggerStudioReplay = () => { + setReplayKey((prev) => prev + 1); + }; + + return ( +
    +
    +
    + + + +
    +
    + + urBackend Studio +
    + +
    +
    +
    +
    + + Collection Builder + UI Mode +
    +
    +
    + +
    users
    +
    +
    + NAME + TYPE + REQ +
    +
    +
    = 1 ? 'visible' : ''}`}> + name + String + +
    +
    = 2 ? 'visible' : ''}`}> + email + String + +
    +
    = 3 ? 'visible' : ''}`}> + role + String + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + Generated APIs + endpoints +
    +
    = 5 ? 'visible' : ''}`}> +
    + GET + /api/users + 200 OK +
    +
    + POST + /api/users + 201 Created +
    +
    + GET + /api/users/:id + 200 OK +
    +
    + PUT + /api/users/:id + 200 OK +
    +
    + DELETE + /api/users/:id + 200 OK +
    +
    +
    +
    +
    + ); +} diff --git a/apps/landing/src/data/services.jsx b/apps/landing/src/data/services.jsx new file mode 100644 index 000000000..8caf99c50 --- /dev/null +++ b/apps/landing/src/data/services.jsx @@ -0,0 +1,205 @@ +import React from 'react'; +import { + Database, + HardDrive, + CheckCircle, + Lock, + Activity, + Smartphone, + Mail, + UserRound, + Github +} from 'lucide-react'; + +export const APP_SERVICES = [ + { + id: 'auth', + title: 'User Authentication', + badge: 'IDENTITY', + desc: 'Pre-configured secure login/signup flows, session handling with JWTs, and third-party login providers (GitHub, Google) with zero setup.', + icon: UserRound, + color: '#00f5d4', + visual: ( +
    +
    +
    +
    +
    +
    +
    +
    + Sign in to App +
    +
    + user@domain.com +
    +
    + +
    +
    +
    +
    G
    +
    +
    +
    + + + +
    +
    +
    + ) + }, + { + id: 'db', + title: 'JSON Document Database', + badge: 'DATABASE', + desc: 'Direct database mutations and queries right from your client application. Automated validation schemas protect integrity at high speed.', + icon: Database, + color: '#FFBD2E', + visual: ( +
    +
    + const user = await db.find('users'); +
    + {"{"} +
    + "id": "usr_9x", + "active": true, + "role": "member" +
    + {"}"} +
    +
    +
    + ) + }, + { + id: 'storage', + title: 'Secure File Storage', + badge: 'STORAGE', + desc: 'Upload, manage, and deliver media assets like avatars, documents, and videos directly. Integrated with bucket systems and global delivery networks.', + icon: HardDrive, + color: '#409EFF', + visual: ( +
    +
    +
    + + media-uploads + 3 files +
    +
    +
    +
    IMG
    +
    + avatar.png + 1.4 MB +
    + +
    +
    +
    DOC
    +
    + invoice_q4.pdf + 340 KB +
    + +
    +
    +
    VID
    +
    + demo_clip.mp4 + + Uploading… + Done • 12 MB + +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    + ) + }, + { + id: 'mail', + title: 'Transactional Mailer', + badge: 'COMMUNICATION', + desc: 'Pre-wired email dispatchers for user verification, password recovery, and system notifications. Customize layouts using pre-made email templates.', + icon: Mail, + color: '#00e676', + visual: ( +
    +
    +
    + + verify@urbackend.com +
    +
    +
    Welcome! Please verify email
    +
    Verify Account
    +
    +
    + ● Sending... + ✔ Sent successfully +
    +
    +
    + ) + }, + { + id: 'security', + title: 'Row-Level Security', + badge: 'SECURITY', + desc: 'Fine-grained read/write security configurations. Restrict access directly inside public-api based on document ownership and user authentication tokens.', + icon: Lock, + color: '#a855f7', + visual: ( +
    +
    RLS ENFORCED
    +
    +
    policy "owner-write-only"
    +
    allow write: if owner == auth.id
    +
    allow read: if public
    +
    +
    + ) + }, + { + id: 'realtime', + title: 'Realtime Broadcast', + badge: 'REALTIME', + desc: 'Listen to database mutations instantly or broadcast custom events across clients using low-latency WebSocket connections.', + icon: Activity, + color: '#FF5F56', + visual: ( +
    +
    +
    + + Client A +
    +
    +
    +
    +
    + + Client B +
    +
    CONNECTED
    +
    +
    + ) + } +]; diff --git a/apps/landing/src/layouts/Base.astro b/apps/landing/src/layouts/Base.astro new file mode 100644 index 000000000..ffeb50088 --- /dev/null +++ b/apps/landing/src/layouts/Base.astro @@ -0,0 +1,54 @@ +--- +interface Props { + title: string; + description: string; + canonicalUrl?: string; + ogImage?: string; +} +const { title, description, canonicalUrl, ogImage } = Astro.props; +import '../styles/landing.css'; +--- + + + + + + {title} + + + + + + + + + + + + + + + + + {canonicalUrl && } + + + + + + + + + + + + + diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro new file mode 100644 index 000000000..98f858813 --- /dev/null +++ b/apps/landing/src/pages/index.astro @@ -0,0 +1,448 @@ +--- +import BaseLayout from '../layouts/Base.astro'; +import Navbar from '../components/Navbar.astro'; +import Footer from '../components/Footer.astro'; +import Hyperspeed from '../components/Hyperspeed/Hyperspeed.jsx'; +import MagicBento from '../components/MagicBento/MagicBento.jsx'; +import StudioReplay from '../components/StudioReplay.jsx'; +import OrbitSection from '../components/OrbitSection.jsx'; +import { APP_SERVICES } from '../data/services.jsx'; +import { ArrowRight, Terminal, Database, HardDrive, Zap, Layers, Smartphone, Globe as GlobeIcon, Code, ChevronDown, ChevronUp } from 'lucide-react'; + +const HYPERSPEED_OPTIONS = { + distortion: 'turbulentDistortion', + length: 400, + roadWidth: 10, + islandWidth: 2, + lanesPerRoad: 3, + fov: 90, + fovSpeedUp: 150, + speedUp: 2, + carLightsFade: 0.4, + totalSideLightSticks: 20, + lightPairsPerRoadWay: 40, + shoulderLinesWidthPercentage: 0.05, + brokenLinesWidthPercentage: 0.1, + brokenLinesLengthPercentage: 0.5, + lightStickWidth: [0.12, 0.5], + lightStickHeight: [1.3, 1.7], + movingAwaySpeed: [60, 80], + movingCloserSpeed: [-120, -160], + carLightsLength: [12, 80], + carLightsRadius: [0.05, 0.14], + carWidthPercentage: [0.3, 0.5], + carShiftX: [-0.8, 0.8], + carFloorSeparation: [0, 5], + colors: { + roadColor: 0x080808, + islandColor: 0x0a0a0a, + background: 0x000000, + shoulderLines: 0x00f5d4, + brokenLines: 0x00f5d4, + leftCars: [0x00f5d4, 0x00ffd8, 0x00b4ab], + rightCars: [0x00f5d4, 0x028090, 0x00ffd8], + sticks: 0x00f5d4 + } +}; + +const FAQ_ITEMS = [ + { q: 'Is it really free?', a: 'Yes. The Developer Beta tier is permanently free — create a project, connect your MongoDB cluster, and ship APIs with no credit card required.' }, + { q: 'Is urBackend production-ready?', a: 'We are currently in Public Beta and actively testing with real-world use cases. While the core architecture is built on battle-tested technologies like Express.js and MongoDB, we recommend using it for side projects, MVPs, and internal tools as we continue to refine the platform.' }, + { q: 'Can I use this with React or Next.js?', a: 'Yes. urBackend outputs standard REST APIs that work with any frontend or mobile framework. For Next.js, call the API from server-side routes to keep your API key secure.' }, + { q: 'How does it handle security?', a: 'Industry-standard encryption at rest, automatic API key validation, JWT-based user sessions with refresh token rotation, and row-level security enforced on every read and write.' }, + { q: 'Can I export my data?', a: 'Your data is yours. Since you connect your own MongoDB cluster, you always have direct access. Export at any time — no lock-in.' }, + { q: 'What is BYOM?', a: 'Bring Your Own MongoDB. Instead of using our managed cluster, you point urBackend at your existing Atlas or self-hosted MongoDB instance. You keep full ownership of the data while we provide the API layer, auth, and schema validation on top.' } +]; +--- + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    + v0.10.1 — Now in Public Beta +
    + +

    + Supabase for NoSQL. +
    + Bring your MongoDB, get instant APIs. +

    + +

    + urBackend is an open-source BaaS that turns your MongoDB into a production-ready backend + with REST APIs, authentication, file storage, and email — zero backend code. +

    + + +
    +
    +
    + + +
    +
    +
    +
    +
    + Client SDK Services +

    Built-in Powers for Your App Users

    +

    + Don't waste time rebuilding boilerplate. urBackend provides premium, secure client-facing services out of the box. +

    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + Infrastructure +

    Bring Your Own Infrastructure

    +

    Connect your existing MongoDB or buckets and get instant APIs without vendor lock-in.

    +
    + +
    +
    +
    + +
    +
    Your Database
    +
    MongoDB Atlas / Self-Hosted
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    urBackend Engine
    +
    BaaS Middleware Layer
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    Instant APIs
    +
    REST · Auth · Storage · Email
    +
    +
    +
    + + + + +
    +
    +
    +
    + +
    +

    BYO Database

    +

    + Connect your self-hosted MongoDB or Atlas cluster. We provide the instant API layer, auth, and validation schema, while you keep full ownership of the data. +

    +
    + MongoDB Atlas + Self-Hosted +
    +
    + +
    +
    +
    + +
    +

    BYO Storage

    +

    + Link your Supabase Storage, AWS S3, or Cloudflare R2 buckets. We handle upload tokens, permissions, and CDN delivery automatically. +

    +
    + Supabase + AWS S3 + Cloudflare R2 +
    +
    +
    +
    +
    + + + + + +
    +
    +
    +
    +

    Backend Architecture, Simplified.

    +

    We handle the complex infrastructure so you can ship professional apps faster.

    +
    + +
    +
    +
    1
    +

    Init Project

    +

    + Instantly provision a dedicated, isolated backend environment. + We set up your MongoDB cluster, Storage buckets, and API Gateway automatically. +

    +
    +
    +
    2
    +

    Design Schema

    +

    + Use our Visual Builder to model your data. + We strictly validate your JSON Schema and handle complex relationships behind the scenes. +

    +
    +
    +
    3
    +

    Connect API

    +

    + Your secure REST endpoints are live instantly. + Connect from React, Vue, or Mobile apps using standard HTTP methods with low latency. +

    +
    +
    +
    +
    + + +
    +
    +
    +

    Build Anything.

    +

    Scalable infrastructure for every type of application.

    +
    + +
    +
    + +

    SaaS Platforms

    +

    Handle complex data relationships, multi-tenant auth, and subscriptions securely.

    +
    +
    + +

    Mobile Backends

    +

    Serve data to Flutter or React Native apps with lightweight, fast JSON responses.

    +
    +
    + +

    Content Sites

    +

    Power blogs, portfolios, and e-commerce catalogs without CMS bloat.

    +
    +
    +
    +
    + + +
    +
    + + + Open Source Core + + +
    + Backed by NSoC 2026 +
    + +
    + MIT Licensed +
    + +
    + No Vendor Lock-in +
    +
    +
    + + +
    +
    +
    +
    +

    Common Questions

    +
    + +
    + {FAQ_ITEMS.map((faq, index) => ( +
    + + +
    + ))} +
    +
    +
    + + +
    +
    +
    + + Start Building Today +
    + +

    Ship faster. Scale smarter.

    + +

    + Your MongoDB. Instant REST APIs. Built-in Auth. Zero backend hassle. +

    + + +
    +
    + +
    +
    +
    + + + + diff --git a/apps/landing/src/pages/pricing.astro b/apps/landing/src/pages/pricing.astro new file mode 100644 index 000000000..b43335f39 --- /dev/null +++ b/apps/landing/src/pages/pricing.astro @@ -0,0 +1,94 @@ +--- +import BaseLayout from '../layouts/Base.astro'; +import Navbar from '../components/Navbar.astro'; +import Footer from '../components/Footer.astro'; +import { Check } from 'lucide-react'; + +const FREE_FEATURES = [ + '1 Project', + '5 Collections per project', + '2,000 API requests / day', + '10MB File Storage', + '200 Auth Users', + '25 Emails / month', + 'Global email templates', + 'Community support', +]; + +const PRO_FEATURES = [ + '10 Projects', + 'Unlimited collections', + 'Unlimited API requests', + 'Unlimited Auth Users', + 'Unlimited Webhooks', + 'External Database (BYOM)', + 'Bring your own Storage (S3/R2)', + '1,000 Emails / month', + 'Custom HTML email templates', + 'BYOK — own API keys', + 'Analytics Pro', + 'AI integrations (OpenAI, Groq)', + 'Priority support', +]; +--- + + +
    + + +
    +
    +

    Simple pricing for every stage

    +
    + +
    +
    +
    Free
    +

    Developer Beta

    +
    + $0 + /mo +
    +

    Perfect for side projects, MVPs, and learning.

    +
      + {FREE_FEATURES.map((feature) => ( +
    • + + {feature} +
    • + ))} +
    + + Start for Free + +
    + +
    +
    Pro (Beta)
    +

    Pro

    +
    + $9 + /mo +
    +

    Try now free for a month

    +
      + {PRO_FEATURES.map((feature) => ( +
    • + + {feature} +
    • + ))} +
    + + Get 1 month Pro for free + +
    +
    +
    + +
    +
    +
    diff --git a/apps/landing/src/styles/landing.css b/apps/landing/src/styles/landing.css new file mode 100644 index 000000000..4d5233cc9 --- /dev/null +++ b/apps/landing/src/styles/landing.css @@ -0,0 +1,4269 @@ +/* --- LANDING SPECIFIC STYLES --- */ +.landing-page { + --nav-height: 70px; + background-color: #030303; + color: #fcfcfc; + font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + -webkit-font-smoothing: antialiased; + overflow-x: hidden; + letter-spacing: -0.01em; + line-height: 1.6; + position: relative; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.landing-page::-webkit-scrollbar { + display: none; +} + +html:has(.landing-page), +body:has(.landing-page) { + scrollbar-width: none; + -ms-overflow-style: none; +} + +html:has(.landing-page)::-webkit-scrollbar, +body:has(.landing-page)::-webkit-scrollbar { + display: none; +} + +/* Text Selection Color */ +::selection { + background: #00f5d4; + color: #000; +} + +::-moz-selection { + background: #00f5d4; + color: #000; +} + +/* GRID & GLOWS */ +.grid-bg { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 100vh; + z-index: 0; + pointer-events: none; + overflow: hidden; +} + +/* Static dot pattern */ +.hero-lines { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: radial-gradient(circle, rgba(255, 255, 255, 0.05) 1px, transparent 1px); + background-size: 40px 40px; + opacity: 0.4; + mask-image: radial-gradient(ellipse 80% 60% at 50% 40%, black 20%, transparent 80%); +} + +/* Hide particles */ +.hero-particles { + display: none; +} + +.hero-glow { + position: absolute; + top: -15%; + left: 50%; + transform: translateX(-50%); + width: 900px; + height: 900px; + background: radial-gradient(circle, rgba(0, 245, 212, 0.06) 0%, rgba(0, 200, 180, 0.03) 40%, transparent 70%); + border-radius: 50%; + filter: blur(120px); + z-index: 0; + pointer-events: none; + animation: pulseGlow 10s ease-in-out infinite alternate; +} + +.section-glow { + position: absolute; + width: 800px; + height: 800px; + background: radial-gradient(circle, rgba(0, 245, 212, 0.08) 0%, transparent 70%); + border-radius: 50%; + filter: blur(100px); + z-index: 0; + pointer-events: none; +} + +@keyframes pulseGlow { + 0% { transform: translateX(-50%) scale(1); opacity: 0.8; } + 100% { transform: translateX(-50%) scale(1.1); opacity: 1; } +} + +/* NAVBAR */ +.nav-glass { + background: rgba(10, 8, 15, 0.5); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + border: 1px solid rgba(255, 255, 255, 0.08); + position: fixed; + top: 1.5rem; + left: 50%; + transform: translateX(-50%); + z-index: 100; + transition: all 0.5s cubic-bezier(0.16, 1, 0.3, 1); + width: calc(100% - 3rem); + max-width: 1200px; + border-radius: 99px; + box-shadow: + 0 10px 40px rgba(0, 0, 0, 0.5), + inset 0 1px 0 rgba(255, 255, 255, 0.15), + inset 0 -1px 0 rgba(0, 0, 0, 0.3); +} + +.nav-scrolled { + background: rgba(8, 6, 12, 0.82); + border: 1px solid rgba(0, 245, 212, 0.2); + box-shadow: + 0 15px 50px rgba(0, 0, 0, 0.7), + inset 0 1px 0 rgba(255, 255, 255, 0.1), + 0 0 15px rgba(0, 245, 212, 0.05); + top: 0.75rem; + width: calc(100% - 2rem); +} + +.nav-hidden { + transform: translate(-50%, -150%); +} + +.nav-container { + max-width: 100%; + margin: 0; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.5rem 1.5rem 0.5rem 2rem; + gap: 1.5rem; +} + +@media (min-width: 1201px) { + .nav-container { + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: center; + } + + .nav-logo { + justify-self: start; + } + + .nav-links { + justify-self: center; + } + + .nav-actions { + justify-self: end; + } +} + +.nav-logo { + display: flex; + align-items: center; + gap: 0.75rem; + flex-shrink: 0; +} + +.nav-logo img { + height: 32px; + width: auto; +} + +.nav-logo-text { + font-size: 1.2rem; + font-weight: 800; + background: linear-gradient(135deg, #ffffff 40%, #a3a1a8 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + letter-spacing: -0.025em; + text-shadow: 0 2px 10px rgba(0,0,0,0.3); +} + +.nav-links { + display: flex; + align-items: center; + gap: 0.25rem; +} + +.nav-link { + display: flex; + align-items: center; + gap: 0.45rem; + padding: 0.5rem 1.25rem; + color: #9e9ba5; + text-decoration: none; + font-size: 0.88rem; + font-weight: 500; + border-radius: 99px; + border: 1px solid transparent; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +.nav-link:hover { + color: #00f5d4; + background: rgba(0, 245, 212, 0.06); + border-color: rgba(0, 245, 212, 0.1); + box-shadow: 0 0 12px rgba(0, 245, 212, 0.05); +} + +.nav-link svg { + opacity: 0.75; + transition: all 0.3s ease; +} + +.nav-link:hover svg { + transform: translateY(-1px); + color: #00f5d4; + opacity: 1; +} + +.nav-link.active { + color: #00f5d4 !important; + background: transparent !important; + border-color: transparent !important; + font-weight: 600; + box-shadow: none !important; +} + +.nav-link.active svg { + color: #00f5d4 !important; + opacity: 1; +} + +.nav-actions { + display: flex; + align-items: center; + gap: 0.5rem; + flex-shrink: 0; +} + +.nav-btn-ghost { + padding: 0.45rem 1.25rem; + color: #9e9ba5; + text-decoration: none; + font-size: 0.88rem; + font-weight: 500; + border-radius: 99px; + border: 1px solid transparent; + transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1); +} + +.nav-btn-ghost:hover { + color: #fff; + background: rgba(255, 255, 255, 0.06); + border-color: rgba(255, 255, 255, 0.05); +} + +.nav-btn-primary { + display: flex; + align-items: center; + gap: 0.4rem; + padding: 0.5rem 1.35rem; + background: linear-gradient(135deg, #00f5d4 0%, #00ffd8 100%); + color: #0c0a0f !important; + text-decoration: none; + font-size: 0.88rem; + font-weight: 600; + border-radius: 99px; + border: none; + cursor: pointer; + transition: all 0.25s cubic-bezier(0.16, 1, 0.3, 1); + box-shadow: 0 4px 12px rgba(0, 245, 212, 0.2); +} + +.nav-btn-primary:hover { + transform: translateY(-1px); + box-shadow: 0 6px 16px rgba(0, 245, 212, 0.35); + background: linear-gradient(135deg, #00ffd8 0%, #00ffd8 100%); + color: #0c0a0f !important; +} + +.nav-btn-primary svg, +.nav-btn-primary:hover svg { + color: #0c0a0f !important; +} + +.mobile-menu-btn { + display: none; + background: none; + border: none; + color: #fff; + cursor: pointer; + padding: 0.5rem; +} + +@media (max-width: 1200px) { + .nav-links { + display: none !important; + } + + .mobile-menu-btn { + display: flex; + align-items: center; + justify-content: center; + } + + .nav-btn-ghost { + display: none; + } + + .nav-container { + display: flex; + justify-content: space-between; + padding: 0.6rem 1rem; + } +} + +@media (max-width: 640px) { + .nav-actions .nav-btn-primary { + display: none; + } + + .nav-glass { + width: calc(100% - 1.5rem); + top: 1rem; + } + + .nav-scrolled { + width: calc(100% - 1rem); + top: 0.5rem; + } + + .nav-logo img { + height: 32px; + } +} + +/* TEXT GRADIENTS & UTILS */ +.text-gradient { + background: linear-gradient(to bottom right, #ffffff 0%, #a1a1aa 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} + +.text-gradient-primary { + background: linear-gradient(to bottom right, #00f5d4 0%, #00d9b4 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + filter: drop-shadow(0 0 10px rgba(0, 245, 212, 0.3)); +} + +.section-badge { + display: inline-block; + padding: 0.35rem 0.9rem; + background: rgba(0,245,212,0.06); + border: 1px solid rgba(0,245,212,0.12); + border-radius: 20px; + font-size: 0.72rem; + font-weight: 600; + color: #00f5d4; + letter-spacing: 0.08em; + text-transform: uppercase; + margin-bottom: 1rem; +} + +.section-title { + font-size: 2.5rem; + font-weight: 700; + margin-bottom: 1rem; + letter-spacing: -0.03em; + background: linear-gradient(to bottom right, #fff 0%, #a1a1aa 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} + +.section-desc { + font-size: 1.125rem; + color: #a1a1aa; + line-height: 1.6; + max-width: 600px; + margin: 0 auto; + font-weight: 400; +} + +/* HERO BUTTONS */ +.btn-hero-primary { + background: linear-gradient(135deg, #00f5d4 0%, #00c9a7 100%); + color: #000; + padding: 0.85rem 2.5rem; + font-size: 1.05rem; + border-radius: 99px; + font-weight: 600; + text-decoration: none; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + box-shadow: 0 4px 24px rgba(0, 245, 212, 0.25), inset 0 1px 2px rgba(255,255,255,0.3); + transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); + border: none; +} + +.btn-hero-primary:hover { + transform: translateY(-2px); + box-shadow: 0 8px 32px rgba(0, 245, 212, 0.4), inset 0 1px 2px rgba(255,255,255,0.4); + background: linear-gradient(135deg, #00ffdd 0%, #00d9b4 100%); +} + +.btn-hero-secondary { + background: rgba(255,255,255,0.04); + color: #fff; + padding: 0.85rem 2.5rem; + font-size: 1.05rem; + border-radius: 99px; + font-weight: 600; + text-decoration: none; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid rgba(255,255,255,0.1); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.05); +} + +.btn-hero-secondary:hover { + background: rgba(255,255,255,0.08); + border-color: rgba(255,255,255,0.25); + transform: translateY(-2px); +} + +.hero-ctas { + display: flex; + gap: 1rem; + flex-wrap: wrap; + justify-content: center; + z-index: 10; + position: relative; +} + +.btn-hero-login { + padding: 0.85rem 2rem; + font-size: 1.05rem; + border-radius: 99px; + font-weight: 600; + text-decoration: none; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid rgba(255,255,255,0.15); + color: #fff; + background: rgba(255,255,255,0.05); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.05); +} + +.btn-hero-login:hover { + background: rgba(255,255,255,0.1); + border-color: rgba(255,255,255,0.3); + transform: translateY(-2px); +} + +.btn-hero-ghost { + padding: 0.85rem 1.5rem; + font-size: 1rem; + border-radius: 99px; + font-weight: 500; + text-decoration: none; + display: flex; + align-items: center; + justify-content: center; + color: #888; + transition: all 0.3s ease; +} + +.btn-hero-ghost:hover { + color: #fff; + transform: translateY(-2px); +} + +/* HERO SPLIT LAYOUT */ +.hero-section { + --hero-nav-offset: calc(1.5rem + var(--nav-height, 70px) + 0.5rem); + position: relative; + min-height: 100svh; + box-sizing: border-box; + padding: var(--hero-nav-offset) 1.5rem 2.5rem; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + margin-top: 0; +} + +@media (max-width: 1200px) { + .hero-section { + --hero-nav-offset: calc(1rem + var(--nav-height, 70px) + 0.5rem); + padding-bottom: 2rem; + } +} + +@media (max-width: 768px) { + .hero-section { + --hero-nav-offset: calc(1rem + var(--nav-height, 70px) + 0.25rem); + min-height: calc(100svh - 1rem); + padding-bottom: 1.5rem; + } +} + +.hero-split { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 2rem; + max-width: 900px; + width: 100%; + position: relative; + z-index: 1; +} + +.hero-split-left { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + width: 100%; +} + +.hero-split-left .status-pill { + margin-left: auto; + margin-right: auto; +} + +.hero-split-left .hero-heading { + margin-left: auto; + margin-right: auto; + text-align: center; + font-size: clamp(2.5rem, 5.5vw, 4.25rem); + line-height: 1.15; + max-width: 850px; +} + +.hero-split-left .hero-sub { + margin-left: auto; + margin-right: auto; + text-align: center; + max-width: 620px; + font-size: 1.15rem; +} + +.hero-split-left .hero-flow { + margin-top: 2.5rem; + justify-content: center; + max-width: 700px; + padding: 0; +} + +/* HERO AUTH CARD */ +.hero-split-right { + width: 100%; +} + +.hero-auth-card { + background: rgba(255,255,255,0.03); + border: 1px solid rgba(255,255,255,0.08); + border-radius: 16px; + padding: 1.75rem; + box-shadow: 0 24px 48px -12px rgba(0,0,0,0.5), inset 0 1px 0 rgba(255,255,255,0.05); + backdrop-filter: blur(12px); +} + +.hero-auth-tabs { + display: flex; + background: rgba(255,255,255,0.04); + border-radius: 10px; + padding: 3px; + margin-bottom: 1.5rem; + border: 1px solid rgba(255,255,255,0.06); +} + +.hero-auth-tab { + flex: 1; + padding: 0.6rem 1rem; + border: none; + border-radius: 8px; + background: transparent; + color: #888; + font-size: 0.9rem; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; +} + +.hero-auth-tab.active { + background: rgba(0, 245, 212, 0.1); + color: #00f5d4; + box-shadow: 0 0 12px rgba(0, 245, 212, 0.08); +} + +.hero-auth-form { + display: flex; + flex-direction: column; + gap: 0.9rem; +} + +.hero-auth-github { + width: 100%; + padding: 0.7rem 1rem; + border-radius: 10px; + border: 1px solid rgba(255,255,255,0.12); + background: rgba(255,255,255,0.04); + color: #fff; + font-size: 0.9rem; + font-weight: 600; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + transition: all 0.2s ease; +} + +.hero-auth-github:hover { + background: rgba(255,255,255,0.08); + border-color: rgba(255,255,255,0.25); +} + +.hero-auth-divider { + position: relative; + text-align: center; + color: #555; + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.15em; + margin: 0.1rem 0; +} + +.hero-auth-divider::before, +.hero-auth-divider::after { + content: ''; + position: absolute; + top: 50%; + width: calc(50% - 1.5rem); + height: 1px; + background: rgba(255,255,255,0.08); +} + +.hero-auth-divider::before { left: 0; } +.hero-auth-divider::after { right: 0; } + +.hero-auth-field { + display: flex; + flex-direction: column; + gap: 0.35rem; +} + +.hero-auth-field label { + font-size: 0.8rem; + color: #aaa; + font-weight: 600; +} + +.hero-auth-input-wrap { + position: relative; + display: flex; + align-items: center; +} + +.hero-auth-input-wrap > svg { + position: absolute; + left: 12px; + color: #666; + pointer-events: none; +} + +.hero-auth-input-wrap input { + width: 100%; + padding: 0.7rem 2.4rem 0.7rem 2.3rem; + border-radius: 10px; + border: 1px solid rgba(255,255,255,0.1); + background: rgba(0,0,0,0.3); + color: #fff; + font-size: 0.9rem; + outline: none; + transition: all 0.2s ease; +} + +.hero-auth-input-wrap input:focus { + border-color: rgba(0, 245, 212, 0.4); + box-shadow: 0 0 0 3px rgba(0, 245, 212, 0.06); +} + +.hero-auth-input-wrap input::placeholder { + color: #555; +} + +.hero-auth-toggle { + position: absolute; + right: 8px; + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + border: none; + border-radius: 6px; + background: transparent; + color: #666; + cursor: pointer; + transition: all 0.2s ease; +} + +.hero-auth-toggle:hover { + background: rgba(255,255,255,0.05); + color: #fff; +} + +.hero-auth-forgot { + font-size: 0.8rem; + color: #00f5d4; + text-decoration: none; + font-weight: 500; + align-self: flex-end; + margin-top: -0.3rem; +} + +.hero-auth-forgot:hover { + text-decoration: underline; +} + +.hero-auth-submit { + width: 100%; + padding: 0.75rem 1rem; + border-radius: 10px; + border: none; + background: linear-gradient(135deg, #00f5d4 0%, #00c9a7 100%); + color: #000; + font-size: 0.95rem; + font-weight: 700; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 4px 20px rgba(0, 245, 212, 0.2); + margin-top: 0.2rem; +} + +.hero-auth-submit:hover { + transform: translateY(-1px); + box-shadow: 0 6px 24px rgba(0, 245, 212, 0.3); +} + +.hero-auth-submit:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none; +} + +@media(max-width: 1024px) { + .hero-split { + grid-template-columns: 1fr; + gap: 2rem; + } + + .hero-split-left { + align-items: center; + text-align: center; + } + + .hero-split-left .status-pill { + margin-left: auto; + } + + .hero-split-left .hero-heading { + text-align: center; + } + + .hero-split-left .hero-sub { + text-align: center; + margin-left: auto; + margin-right: auto; + } + + .hero-split-left .hero-flow { + justify-content: center; + } + + .hero-split-right { + max-width: 420px; + margin: 0 auto; + width: 100%; + } +} + +/* HERO */ + +.status-pill { + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.12); + padding: 8px 18px; + border-radius: 9999px; + font-family: inherit; + font-size: 0.75rem; + color: #999; + margin-bottom: 1rem; + display: flex; + align-items: center; + gap: 10px; + letter-spacing: 0.05em; + backdrop-filter: blur(8px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); +} + +.status-dot { + width: 8px; + height: 8px; + background: #4ade80; + border-radius: 50%; + box-shadow: 0 0 10px #4ade80; + animation: pulse-dot 2s infinite; +} + +@keyframes pulse-dot { + 0% { transform: scale(1); opacity: 1; } + 50% { transform: scale(1.2); opacity: 0.5; } + 100% { transform: scale(1); opacity: 1; } +} + +.hero-heading { + font-size: clamp(2rem, 4.7vw, 3.6rem); + font-weight: 800; + line-height: 1.1; + letter-spacing: -0.04em; + margin-bottom: 1.2rem; + color: #fff; + max-width: 800px; + margin-left: auto; + margin-right: auto; + text-shadow: 0 2px 40px rgba(255, 255, 255, 0.1); +} + +.shine-text { + background: linear-gradient(110deg, #fff 0%, #fff 40%, #00f5d4 48%, #00d9b4 50%, #00f5d4 52%, #fff 60%, #fff 100%); + background-size: 200% 100%; + -webkit-background-clip: text; + background-clip: text; + color: transparent; + animation: shine 6s linear infinite; + filter: drop-shadow(0 0 20px rgba(0, 245, 212, 0.3)); +} + +@keyframes shine { + to { background-position: 200% center; } +} + +.hero-sub { + font-size: 1.05rem; + color: #999; + max-width: 550px; + line-height: 1.6; + margin-bottom: 2rem; + font-weight: 400; + letter-spacing: -0.01em; + margin-left: auto; + margin-right: auto; +} + +/* HERO FLOW DIAGRAM */ +.hero-flow { + margin-top: 2.5rem; + display: flex; + align-items: center; + justify-content: center; + gap: 0; + z-index: 10; + position: relative; + width: 100%; + max-width: 700px; + padding: 0 1rem; +} + +.hf-step { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.5rem; + padding: 1.25rem 1.5rem; + background: rgba(255,255,255,0.02); + border: 1px solid rgba(255,255,255,0.08); + border-radius: 14px; + transition: all 0.4s ease; + flex: 1; + min-width: 0; +} + +.hf-step:hover { + transform: translateY(-3px); + border-color: rgba(255,255,255,0.2); + background: rgba(255,255,255,0.04); + box-shadow: 0 12px 32px rgba(0,0,0,0.3); +} + +.hf-highlight { + border-color: rgba(0, 245, 212, 0.25); + background: rgba(0, 245, 212, 0.04); + box-shadow: 0 0 20px rgba(0, 245, 212, 0.06); +} + +.hf-highlight:hover { + border-color: rgba(0, 245, 212, 0.4); + background: rgba(0, 245, 212, 0.06); + box-shadow: 0 12px 32px rgba(0, 245, 212, 0.1); +} + +.hf-icon { + width: 48px; + height: 48px; + display: flex; + align-items: center; + justify-content: center; + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.1); + border-radius: 12px; + color: #00f5d4; +} + +.hf-highlight .hf-icon { + background: rgba(0, 245, 212, 0.1); + border-color: rgba(0, 245, 212, 0.25); + color: #00f5d4; + box-shadow: 0 0 15px rgba(0, 245, 212, 0.15); +} + +.hf-label { + font-size: 0.9rem; + font-weight: 600; + color: #fff; + white-space: nowrap; +} + +.hf-desc { + font-size: 0.75rem; + color: #666; + white-space: nowrap; +} + +.hf-connector { + width: 60px; + height: 2px; + background: rgba(255,255,255,0.08); + position: relative; + flex-shrink: 0; +} + +.hf-dot { + position: absolute; + left: 0; + top: 50%; + width: 8px; + height: 8px; + background: #00f5d4; + border-radius: 50%; + transform: translateY(-50%); + box-shadow: 0 0 10px rgba(0, 245, 212, 0.6); + animation: hfDotMove 2s ease-in-out infinite; +} + +@keyframes hfDotMove { + 0% { left: 0; opacity: 0; } + 10% { opacity: 1; } + 90% { opacity: 1; } + 100% { left: calc(100% - 8px); opacity: 0; } +} + +/* SIMPLE FLOW DIAGRAM */ +.stack-container { + margin-top: 2rem; + position: relative; + width: 100%; + max-width: 900px; + display: flex; + flex-direction: column; + align-items: center; + gap: 2rem; + margin-left: auto; + margin-right: auto; +} + +.simple-flow { + display: flex; + align-items: center; + justify-content: center; + gap: 1.5rem; + flex-wrap: wrap; +} + +.flow-step { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.75rem; + padding: 1.5rem 2rem; + background: rgba(255, 255, 255, 0.02); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 12px; + transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); + min-width: 140px; +} + +.flow-step:hover { + transform: translateY(-4px); + border-color: rgba(255, 255, 255, 0.25); + background: rgba(255, 255, 255, 0.04); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); +} + +.flow-highlight { + background: rgba(255, 255, 255, 0.03); + border-color: rgba(255, 255, 255, 0.15); +} + +.flow-highlight:hover { + background: rgba(255, 255, 255, 0.05); + border-color: rgba(255, 255, 255, 0.3); +} + +.flow-icon { + width: 56px; + height: 56px; + display: flex; + align-items: center; + justify-content: center; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 12px; + color: #fff; +} + +.flow-highlight .flow-icon { + background: rgba(255, 255, 255, 0.05); + border-color: rgba(255, 255, 255, 0.15); + color: #fff; +} + +.flow-label { + font-size: 0.95rem; + font-weight: 600; + color: #fff; + letter-spacing: -0.01em; +} + +.flow-arrow { + color: #555; + display: flex; + align-items: center; + position: relative; + min-width: 80px; +} + +.flow-arrow svg { + display: none; +} + +/* Animated wire/connection */ +.flow-arrow::before { + content: ''; + position: absolute; + left: 0; + top: 50%; + width: 100%; + height: 2px; + background: linear-gradient(90deg, transparent 0%, #00f5d4 50%, transparent 100%); + background-size: 200% 100%; + animation: flowWire 2s linear infinite; + opacity: 0.6; +} + +.flow-arrow::after { + content: ''; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 8px; + height: 8px; + background: #00f5d4; + border-radius: 50%; + box-shadow: 0 0 10px rgba(0, 245, 212, 0.8); + animation: flowDot 2s linear infinite; +} + +@keyframes flowWire { + 0% { + background-position: 0% 0%; + } + 100% { + background-position: 200% 0%; + } +} + +@keyframes flowDot { + 0% { + left: 0%; + opacity: 0; + } + 10% { + opacity: 1; + } + 90% { + opacity: 1; + } + 100% { + left: 100%; + opacity: 0; + } +} + +.flow-features { + display: flex; + gap: 2rem; + flex-wrap: wrap; + justify-content: center; + padding-top: 1rem; +} + +.mini-feature { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 999px; + font-size: 0.875rem; + color: #a1a1aa; + transition: all 0.3s ease; +} + +.mini-feature:hover { + border-color: rgba(0, 245, 212, 0.35); + color: #00f5d4; + background: rgba(0, 245, 212, 0.05); +} + +.mini-feature svg { + color: #00f5d4; + flex-shrink: 0; +} + +/* LANDING HERO INTERACTIVE WINDOW */ +/* DEMO CONSOLE */ +.demo-wrapper { + width: 100%; + background: #000; + border: 1px solid rgba(255, 255, 255, 0.05); + border-radius: 16px; + box-shadow: 0 40px 80px -20px rgba(0, 0, 0, 0.9), 0 0 0 1px rgba(255,255,255,0.01) inset; + overflow: hidden; + animation: fadeInUp 1.2s cubic-bezier(0.2, 0.8, 0.2, 1); + position: relative; +} + +.demo-header { + background: #09090b; + padding: 12px 16px; + display: flex; + align-items: center; + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + gap: 1rem; +} + +.url-bar { + flex: 1; + background: #000; + color: #a1a1aa; + font-family: 'JetBrains Mono', monospace; + padding: 6px 12px; + border-radius: 6px; + font-size: 0.8125rem; + display: flex; + justify-content: space-between; + align-items: center; + border: 1px solid rgba(255, 255, 255, 0.08); +} + +.demo-content { + padding: 0; + display: flex; + flex-direction: column; + background: #000; +} + +@media(min-width: 768px) { + .demo-content { + flex-direction: row; + min-height: 420px; + } + + .demo-sidebar { + width: 240px; + border-right: 1px solid rgba(255, 255, 255, 0.08); + } + + .demo-main { + flex: 1; + padding: 1.5rem; + } +} + +.run-btn { + position: absolute; + top: 1.5rem; + right: 1.5rem; + background: #00f5d4; + color: #000; + border: none; + padding: 8px 16px; + border-radius: 6px; + font-weight: 600; + font-size: 0.85rem; + cursor: pointer; + display: flex; + align-items: center; + gap: 6px; + z-index: 10; + box-shadow: 0 0 15px rgba(0, 245, 212, 0.4), inset 0 1px 1px rgba(255, 255, 255, 0.4); + transition: all 0.3s; +} + +.run-btn:hover { + box-shadow: 0 0 25px rgba(0, 245, 212, 0.7), inset 0 1px 1px rgba(255, 255, 255, 0.5); + transform: translateY(-1px); +} + +.demo-sidebar { + background: linear-gradient(to right, rgba(255, 255, 255, 0.02) 0%, transparent 100%); + border-right: 1px solid rgba(255, 255, 255, 0.05); +} + +.demo-nav-item { + padding: 0.75rem 1rem; + display: flex; + align-items: center; + gap: 0.75rem; + color: #888; + cursor: pointer; + transition: all 0.2s ease; + border-radius: 6px; + margin-bottom: 4px; + font-size: 0.9rem; + font-weight: 500; +} + +.demo-nav-item:hover { + background: rgba(255, 255, 255, 0.03); + color: #fff; +} + +.demo-nav-item.active { + color: #00f5d4; + background: rgba(0, 245, 212, 0.08); + border-left: 2px solid #00f5d4; + padding-left: 14px; +} + +/* Loading Spinner */ +.loading-spinner { + width: 16px; + height: 16px; + border: 2px solid rgba(0, 245, 212, 0.2); + border-top-color: #00f5d4; + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +.dot { + width: 12px; + height: 12px; + border-radius: 50%; + box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.3), 0 0 4px rgba(0,0,0,0.5); +} + +/* HOW IT WORKS */ +.step-card { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + padding: 2.5rem; + background: linear-gradient(145deg, rgba(255, 255, 255, 0.03) 0%, rgba(255, 255, 255, 0.01) 100%); + border: 1px solid rgba(255, 255, 255, 0.06); + border-radius: 16px; + position: relative; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 10px 30px -10px rgba(0,0,0,0.5); + transition: transform 0.3s, border-color 0.3s, box-shadow 0.3s; +} + +.step-card:hover { + transform: translateY(-4px); + border-color: rgba(0, 245, 212, 0.3); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 20px 40px -15px rgba(0, 245, 212, 0.1); +} + +.step-number { + width: 48px; + height: 48px; + background: linear-gradient(145deg, rgba(0, 245, 212, 0.2) 0%, rgba(0, 245, 212, 0.05) 100%); + border: 1px solid rgba(0, 245, 212, 0.3); + box-shadow: 0 0 15px rgba(0, 245, 212, 0.2); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-weight: 700; + font-size: 1.2rem; + margin-bottom: 1.5rem; + color: #fff; +} + + + +.bento-icon { + width: 48px; + height: 48px; + background: rgba(255, 255, 255, 0.03); + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 1.25rem; + color: #fff; + border: 1px solid rgba(255, 255, 255, 0.08); +} + +.bento-title { + font-size: 1.375rem; + font-weight: 600; + margin-bottom: 0.75rem; + letter-spacing: -0.015em; + color: #fff; +} + +.bento-desc { + color: #a1a1aa; + font-size: 1.05rem; + line-height: 1.6; +} + +/* USE CASES & EXTRA CARDS */ +.use-case-card, .glass-card { + background: linear-gradient(145deg, rgba(255, 255, 255, 0.03) 0%, rgba(255, 255, 255, 0.01) 100%); + border: 1px solid rgba(255, 255, 255, 0.06); + padding: 2.5rem; + border-radius: 16px; + text-align: left; + transition: all 0.3s; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03), 0 10px 30px -10px rgba(0,0,0,0.5); + position: relative; + overflow: hidden; +} + +.use-case-card:hover, .glass-card:hover, .pricing-card:hover { + border-color: rgba(255, 255, 255, 0.15); + transform: translateY(-4px); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 20px 40px -15px rgba(0,0,0,0.6); +} + +.pricing-card { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Integration - 3D Globe Section */ +.integration-section { + padding: 3rem 0 4rem; + background: #030303; + text-align: center; + position: relative; + overflow: hidden; + border-top: 1px solid rgba(255,255,255,0.04); +} +.integration-section::before { + content: ''; + position: absolute; + inset: 0; + background: radial-gradient(ellipse 60% 50% at 50% 50%, rgba(0,245,212,0.03) 0%, transparent 70%); + pointer-events: none; +} + +.integration-inner { + max-width: 1200px; + margin: 0 auto; + padding: 0 1.5rem; + margin-bottom: 2rem; + position: relative; + z-index: 1; +} + +.integration-heading { + color: #888; + font-size: 0.9rem; + font-weight: 500; + letter-spacing: 0.1em; + text-transform: uppercase; + margin-top: 0.5rem; +} + +/* Orbit Stage - Solar System */ +.orbit-stage-wrapper { + position: relative; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + padding: 3rem 0; +} + +.orbit-stage { + position: relative; + width: 940px; + height: 450px; + display: flex; + align-items: center; + justify-content: center; + perspective: 1200px; + overflow: visible; + --radius-inner: 175px; + --radius-mid: 285px; + --radius-outer: 395px; +} + +@media (max-width: 768px) { + .orbit-stage { + width: 100%; + max-width: 500px; + height: 240px; + --radius-inner: 100px; + --radius-mid: 165px; + --radius-outer: 230px; + } +} + +@media (max-width: 480px) { + .orbit-stage { + height: 180px; + --radius-inner: 70px; + --radius-mid: 115px; + --radius-outer: 160px; + } +} + +.orbit-container { + position: absolute; + width: 940px; + height: 940px; + display: flex; + align-items: center; + justify-content: center; + transform: rotateX(65deg) rotateY(-10deg); + transform-style: preserve-3d; +} + +@media (max-width: 768px) { + .orbit-container { + width: 500px; + height: 500px; + } +} + +@media (max-width: 480px) { + .orbit-container { + width: 360px; + height: 360px; + } +} + + +.orbit-sun { + position: absolute; + width: 130px; + height: 130px; + display: flex; + align-items: center; + justify-content: center; + z-index: 10; + pointer-events: none; + transform-style: preserve-3d; + transform: rotateY(10deg) rotateX(-65deg); +} + +.orbit-sun-logo { + width: 80px; + height: 80px; + border-radius: 50%; + border: 2px solid rgba(0, 245, 212, 0.4); + box-shadow: 0 0 30px rgba(0, 245, 212, 0.4); + z-index: 2; + background: #09090b; + padding: 10px; +} + +.orbit-sun-glow { + position: absolute; + width: 120px; + height: 120px; + border-radius: 50%; + background: radial-gradient(circle, rgba(0, 245, 212, 0.35) 0%, transparent 70%); + filter: blur(10px); + z-index: 1; + animation: sun-pulse 4s ease-in-out infinite alternate; +} + +@keyframes sun-pulse { + 0% { transform: scale(0.9); opacity: 0.7; } + 100% { transform: scale(1.15); opacity: 1; } +} + +.orbit-sun-ring-dec { + position: absolute; + border-radius: 50%; + border: 1px solid rgba(0, 245, 212, 0.15); + transform: rotateX(65deg) rotateY(-10deg); + pointer-events: none; +} + +.orbit-sun-ring-1 { + width: 140px; + height: 140px; + border: 1px dashed rgba(0, 245, 212, 0.2); + animation: spin-clockwise 20s linear infinite; +} + +.orbit-sun-ring-2 { + width: 185px; + height: 185px; + border: 1px dashed rgba(0, 245, 212, 0.09); + animation: spin-counter-clockwise 30s linear infinite; +} + +@keyframes spin-clockwise { + 0% { transform: rotateX(65deg) rotateY(-10deg) rotateZ(0deg); } + 100% { transform: rotateX(65deg) rotateY(-10deg) rotateZ(360deg); } +} + +@keyframes spin-counter-clockwise { + 0% { transform: rotateX(65deg) rotateY(-10deg) rotateZ(0deg); } + 100% { transform: rotateX(65deg) rotateY(-10deg) rotateZ(-360deg); } +} + +.orbit-ring { + position: absolute; + border-radius: 50%; + border: 1.5px dashed rgba(255, 255, 255, 0.15); + pointer-events: none; + transform-style: preserve-3d; + width: calc(2 * var(--orbit-radius)); + height: calc(2 * var(--orbit-radius)); + box-shadow: inset 0 0 25px rgba(255, 255, 255, 0.02), 0 0 25px rgba(255, 255, 255, 0.02); +} + +.orbit-ring-inner { + --orbit-radius: var(--radius-inner); +} + +.orbit-ring-mid { + --orbit-radius: var(--radius-mid); +} + +.orbit-ring-outer { + --orbit-radius: var(--radius-outer); +} + +/* Cosmic Orbit Dust */ +.orbit-dust { + position: absolute; + left: 50%; + top: 50%; + width: 3px; + height: 3px; + background: var(--dust-color, #00f5d4); + border-radius: 50%; + box-shadow: 0 0 6px var(--dust-color, #00f5d4); + opacity: 0.35; + pointer-events: none; + transform-style: preserve-3d; + animation: orbitMove 24s linear infinite; +} + +.orbit-item-wrapper { + position: absolute; + left: 50%; + top: 50%; + width: 0; + height: 0; + transform-style: preserve-3d; + pointer-events: none; +} + +.orbit-logo-card { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + display: flex; + align-items: center; + gap: 8px; + padding: 0.45rem 0.95rem; + background: rgba(10, 10, 12, 0.65); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 100px; + font-weight: 600; + color: #a1a1aa; + white-space: nowrap; + user-select: none; + cursor: pointer; + pointer-events: auto; + transition: border-color 0.3s, color 0.3s, background 0.3s, box-shadow 0.3s, scale 0.3s; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.05); +} + +.orbit-logo-card svg { + display: block; + width: 16px; + height: 16px; + transition: transform 0.3s; +} + +.orbit-logo-text { + font-size: 0.78rem; + letter-spacing: -0.01em; +} + +/* Hover highlights */ +.orbit-logo-card:hover { + color: #fff; + scale: 1.05; + background: rgba(15, 15, 20, 0.85); + border-color: var(--hover-color, #00f5d4); + box-shadow: 0 0 20px rgba(0, 0, 0, 0.6), 0 0 15px var(--hover-color, rgba(0, 245, 212, 0.2)); +} + +.orbit-logo-card:hover svg { + transform: scale(1.1); +} + +.orbit-inner-wrapper { + --orbit-radius: var(--radius-inner); + animation: orbitMove 20s linear infinite; +} +.orbit-inner-wrapper .orbit-logo-card { + animation: billboardCancel 20s linear infinite; + animation-delay: inherit; +} + +.orbit-mid-wrapper { + --orbit-radius: var(--radius-mid); + animation: orbitMove 32s linear infinite; +} +.orbit-mid-wrapper .orbit-logo-card { + animation: billboardCancel 32s linear infinite; + animation-delay: inherit; +} + +.orbit-outer-wrapper { + --orbit-radius: var(--radius-outer); + animation: orbitMove 48s linear infinite; +} +.orbit-outer-wrapper .orbit-logo-card { + animation: billboardCancel 48s linear infinite; + animation-delay: inherit; +} + +@keyframes orbitMove { + 0% { + transform: translate(-50%, -50%) rotateZ(0deg) translateX(var(--orbit-radius)); + } + 100% { + transform: translate(-50%, -50%) rotateZ(-360deg) translateX(var(--orbit-radius)); + } +} + +@keyframes billboardCancel { + 0% { + transform: translate(-50%, -50%) rotateZ(0deg) rotateY(10deg) rotateX(-65deg); + } + 100% { + transform: translate(-50%, -50%) rotateZ(360deg) rotateY(10deg) rotateX(-65deg); + } +} + +/* Laser connect beam */ +.orbit-connect-line { + position: absolute; + right: 0; + top: 50%; + height: 2px; + width: var(--orbit-radius); + transform: translateY(-50%); + background: linear-gradient(90deg, + rgba(0, 0, 0, 0) 0%, + rgba(255, 255, 255, 0.1) 20%, + var(--hover-color, #00f5d4) 80%, + var(--hover-color, #00f5d4) 100% + ); + box-shadow: 0 0 8px var(--hover-color, #00f5d4), 0 0 16px rgba(0, 245, 212, 0.2); + transform-origin: right center; + opacity: 0; + pointer-events: none; + transition: opacity 0.3s ease; + z-index: 1; +} + +/* Active connection line when hovered */ +.orbit-item-wrapper:has(.orbit-logo-card:hover) .orbit-connect-line { + opacity: 1; +} + +.orbit-item-wrapper.active .orbit-connect-line { + opacity: 1; +} + +/* Data pulse animation on the connection line */ +.orbit-connect-line::after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 100%; + width: 40px; + background: linear-gradient(90deg, transparent, var(--hover-color, #00f5d4), #fff, var(--hover-color, #00f5d4), transparent); + filter: drop-shadow(0 0 4px var(--hover-color, #00f5d4)); + animation: beam-pulse 1.2s infinite linear; +} + +@keyframes beam-pulse { + 0% { transform: translateX(0); } + 100% { transform: translateX(calc(-1 * var(--orbit-radius))); } +} + + + + +.demo-main pre { + scrollbar-width: thin; + scrollbar-color: #333 transparent; +} + +.demo-main pre::-webkit-scrollbar { + height: 6px; + width: 6px; +} + +.demo-main pre::-webkit-scrollbar-thumb { + background: #333; + border-radius: 10px; +} + +.demo-main pre::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.02); +} + +/* FAQ */ +.faq-item { + border-bottom: 1px solid rgba(255, 255, 255, 0.08); + margin-bottom: 1rem; +} + +.faq-question { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1.5rem 0; + cursor: pointer; + font-size: 1.1rem; + font-weight: 500; +} + +.faq-answer { + padding-bottom: 1.5rem; + color: #888; + line-height: 1.6; +} + +/* ANIMATIONS */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(20px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + transform: translateY(-20px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +/* MOBILE ADJUSTMENTS */ +@media(max-width: 768px) { + .hero-heading { + font-size: 2rem; + } + + .hero-flow { + flex-direction: column; + gap: 0; + max-width: 280px; + } + + .hf-connector { + width: 2px; + height: 30px; + } + + .hf-dot { + top: 0; + left: 50%; + transform: translateX(-50%); + animation: hfDotMoveVertical 2s ease-in-out infinite; + } + + @keyframes hfDotMoveVertical { + 0% { top: 0; opacity: 0; } + 10% { opacity: 1; } + 90% { opacity: 1; } + 100% { top: calc(100% - 8px); opacity: 0; } + } + + .hf-step { + width: 100%; + } + + .cta-stats { + flex-direction: column; + gap: 2rem; + } + + .stat-divider { + display: none; + } +} + +/* CTA SECTION */ +.cta-section { + padding: 10rem 0; + background: #030303; + position: relative; + overflow: hidden; + border-top: 1px solid rgba(255, 255, 255, 0.05); + border-bottom: 1px solid rgba(255, 255, 255, 0.05); +} + +.cta-section::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 600px; + height: 600px; + background: radial-gradient(circle, rgba(0, 245, 212, 0.08) 0%, transparent 70%); + filter: blur(100px); + pointer-events: none; +} + +.cta-container { + max-width: 900px; + margin: 0 auto; + padding: 0 1.5rem; + text-align: center; + position: relative; + z-index: 1; +} + +.cta-badge { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1.25rem; + background: rgba(0, 245, 212, 0.08); + border: 1px solid rgba(0, 245, 212, 0.2); + border-radius: 999px; + color: #00f5d4; + font-size: 0.875rem; + font-weight: 600; + margin-bottom: 2rem; + animation: fadeInDown 0.6s ease; +} + +.cta-heading { + font-size: 4rem; + font-weight: 800; + line-height: 1.1; + letter-spacing: -0.04em; + margin-bottom: 1.5rem; + background: linear-gradient(to bottom, #fff 0%, #a1a1aa 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + animation: fadeInUp 0.6s ease 0.2s backwards; +} + +.cta-description { + font-size: 1.25rem; + color: #888; + line-height: 1.6; + margin-bottom: 3rem; + max-width: 700px; + margin-left: auto; + margin-right: auto; + animation: fadeInUp 0.6s ease 0.3s backwards; +} + +.cta-buttons { + display: flex; + gap: 1rem; + justify-content: center; + flex-wrap: wrap; + margin-bottom: 5rem; + animation: fadeInUp 0.6s ease 0.4s backwards; +} + +.cta-btn-primary { + display: inline-flex; + align-items: center; + gap: 0.75rem; + padding: 1.1rem 3rem; + background: linear-gradient(135deg, #00f5d4 0%, #00c9a7 100%); + color: #000; + font-size: 1.1rem; + font-weight: 700; + border-radius: 99px; + text-decoration: none; + transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); + box-shadow: 0 4px 24px rgba(0, 245, 212, 0.3), inset 0 1px 2px rgba(255, 255, 255, 0.3); + position: relative; + overflow: hidden; +} + +.cta-btn-primary::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); + transition: left 0.5s; +} + +.cta-btn-primary:hover::before { + left: 100%; +} + +.cta-btn-primary:hover { + transform: translateY(-2px); + box-shadow: 0 8px 32px rgba(0, 245, 212, 0.5), inset 0 1px 2px rgba(255, 255, 255, 0.4); +} + +.cta-btn-secondary { + display: inline-flex; + align-items: center; + gap: 0.75rem; + padding: 1.1rem 3rem; + background: rgba(255, 255, 255, 0.04); + color: #fff; + font-size: 1.1rem; + font-weight: 600; + border-radius: 99px; + border: 1px solid rgba(255, 255, 255, 0.1); + text-decoration: none; + transition: all 0.3s ease; +} + +.cta-btn-secondary:hover { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.25); + transform: translateY(-2px); +} + +.cta-stats { + display: flex; + justify-content: center; + align-items: center; + gap: 4rem; + padding-top: 3rem; + border-top: 1px solid rgba(255, 255, 255, 0.05); + animation: fadeInUp 0.6s ease 0.5s backwards; +} + +.stat-item { + text-align: center; +} + +.stat-number { + font-size: 2.5rem; + font-weight: 800; + color: #00f5d4; + margin-bottom: 0.5rem; + letter-spacing: -0.02em; + font-family: 'JetBrains Mono', monospace; +} + +.stat-label { + font-size: 0.875rem; + color: #666; + text-transform: uppercase; + letter-spacing: 0.1em; + font-weight: 600; +} + +.stat-divider { + width: 1px; + height: 60px; + background: rgba(255, 255, 255, 0.08); +} + +.mobile-menu-overlay { + position: fixed; + inset: 0; + background: rgba(8, 6, 12, 0.92); + backdrop-filter: blur(30px); + -webkit-backdrop-filter: blur(30px); + z-index: 99; + padding: calc(var(--nav-height, 70px) + 2.5rem) 1.5rem 2rem; + display: flex; + flex-direction: column; + align-items: center; + gap: 1.5rem; + overflow-y: auto; + scrollbar-width: none; + -ms-overflow-style: none; + opacity: 0; + visibility: hidden; + pointer-events: none; + transition: opacity 0.3s ease, visibility 0.3s ease; +} + +.mobile-menu-overlay::-webkit-scrollbar { + display: none; +} + +.mobile-menu-overlay.open { + opacity: 1; + visibility: visible; + pointer-events: auto; +} + +.mobile-menu-link { + display: flex; + align-items: center; + gap: 0.75rem; + font-size: 1.35rem; + font-weight: 700; + color: #fff; + text-decoration: none; + padding: 0.35rem 0.5rem; + border-radius: 8px; + transition: color 0.2s ease; +} + +.mobile-menu-link:hover { + color: #00f5d4; +} + +.mobile-menu-link svg { + color: #00f5d4; + flex-shrink: 0; +} + +.mobile-menu-divider { + height: 1px; + width: 60px; + background: #333; + margin: 0.5rem 0; +} + +.mobile-menu-auth { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; + margin-top: 0.5rem; +} + +.mobile-menu-login { + font-size: 1.1rem; + font-weight: 500; + color: #aaa; + text-decoration: none; +} + +.mobile-menu-login:hover { + color: #fff; +} + +/* BYOM Callout Section */ +.byom-callout-section { + padding: 7rem 0; + background: #000; + border-top: 1px solid rgba(255, 255, 255, 0.08); + position: relative; + overflow: hidden; +} + +.byom-grid-bg { + position: absolute; + inset: 0; + background-image: + linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px), + linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px); + background-size: 60px 60px; + -webkit-mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, black 30%, transparent 70%); + mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, black 30%, transparent 70%); + pointer-events: none; +} + +/* Pipeline */ +.byom-pipeline { + display: flex; + align-items: center; + justify-content: center; + gap: 0; + margin-bottom: 4.5rem; + padding: 2rem 0; +} + +@media(max-width: 768px) { + .byom-pipeline { + flex-direction: column; + gap: 0.5rem; + padding: 1rem 0; + } +} + +.byom-pipe-node { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + gap: 0.45rem; + padding: 1.6rem 2rem; + background: rgba(255,255,255,0.02); + border: 1px solid rgba(255,255,255,0.06); + border-radius: 16px; + min-width: 170px; + z-index: 2; + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); +} + +.byom-pipe-node:hover { + border-color: rgba(255,255,255,0.15); + background: rgba(255,255,255,0.04); + transform: translateY(-3px); +} + +.byom-pipe-icon { + width: 52px; + height: 52px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 14px; + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.08); + color: #00f5d4; + transition: all 0.3s ease; +} + +.byom-pipe-node:hover .byom-pipe-icon { + background: rgba(0,245,212,0.08); + border-color: rgba(0,245,212,0.2); + box-shadow: 0 0 20px rgba(0,245,212,0.1); +} + +.byom-pipe-label { + font-size: 0.9rem; + font-weight: 700; + color: #fff; + letter-spacing: -0.01em; +} + +.byom-pipe-sub { + font-size: 0.7rem; + color: #666; + font-weight: 500; + text-align: center; + line-height: 1.3; +} + +.byom-pipe-glow { + position: absolute; + inset: -1px; + border-radius: 16px; + background: linear-gradient(135deg, rgba(0,245,212,0.06), transparent 50%, rgba(0,245,212,0.02)); + pointer-events: none; + opacity: 0; + transition: opacity 0.4s ease; +} + +.byom-pipe-node:hover .byom-pipe-glow { + opacity: 1; +} + +.byom-pipe-center { + border-color: rgba(0,245,212,0.15); + background: rgba(0,245,212,0.03); + box-shadow: 0 0 40px rgba(0,245,212,0.05), inset 0 1px 0 rgba(0,245,212,0.08); + animation: byomCenterPulse 3s ease-in-out infinite; +} + +@keyframes byomCenterPulse { + 0%, 100% { box-shadow: 0 0 40px rgba(0,245,212,0.05), inset 0 1px 0 rgba(0,245,212,0.08); } + 50% { box-shadow: 0 0 60px rgba(0,245,212,0.1), inset 0 1px 0 rgba(0,245,212,0.12); } +} + +.byom-center-icon { + background: rgba(0,245,212,0.1); + border-color: rgba(0,245,212,0.25); + color: #00f5d4; + box-shadow: 0 0 20px rgba(0,245,212,0.15); +} + +.byom-pipe-ring { + position: absolute; + inset: -3px; + border-radius: 18px; + border: 1px solid transparent; + background: linear-gradient(135deg, rgba(0,245,212,0.3), transparent 40%, transparent 60%, rgba(0,245,212,0.15)) border-box; + -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask-composite: exclude; + pointer-events: none; + animation: byomRingRotate 4s linear infinite; +} + +@keyframes byomRingRotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.byom-pipe-connector { + flex: 1; + min-width: 80px; + max-width: 140px; + height: 2px; + background: linear-gradient(90deg, rgba(255,255,255,0.05), rgba(255,255,255,0.12), rgba(255,255,255,0.05)); + position: relative; + z-index: 1; + overflow: hidden; +} + +@media(max-width: 768px) { + .byom-pipe-connector { + min-width: 2px; + min-height: 40px; + max-width: 2px; + max-height: 60px; + background: linear-gradient(180deg, rgba(255,255,255,0.05), rgba(255,255,255,0.12), rgba(255,255,255,0.05)); + } +} + +.byom-pipe-track { + position: absolute; + inset: 0; +} + +.byom-pipe-particle { + position: absolute; + top: 50%; + left: -4px; + width: 4px; + height: 4px; + background: #00f5d4; + border-radius: 50%; + box-shadow: 0 0 6px #00f5d4, 0 0 12px rgba(0,245,212,0.3); + transform: translateY(-50%); + animation: byomParticle 2.4s ease-in-out infinite; +} + +@media(max-width: 768px) { + .byom-pipe-particle { + top: -4px; + left: 50%; + transform: translateX(-50%); + animation: byomParticleVertical 2.4s ease-in-out infinite; + } +} + +@keyframes byomParticle { + 0% { left: -4px; opacity: 0; } + 15% { opacity: 1; } + 85% { opacity: 1; } + 100% { left: calc(100% + 4px); opacity: 0; } +} + +@keyframes byomParticleVertical { + 0% { top: -4px; opacity: 0; } + 15% { opacity: 1; } + 85% { opacity: 1; } + 100% { top: calc(100% + 4px); opacity: 0; } +} + +/* BYOM Cards */ +.byom-cards { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); + gap: 1.5rem; +} + +.byom-card { + position: relative; + padding: 2.5rem; + background: rgba(255,255,255,0.02); + border: 1px solid rgba(255,255,255,0.06); + border-radius: 16px; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); +} + +.byom-card:hover { + background: rgba(255,255,255,0.035); + border-color: rgba(255,255,255,0.12); + transform: translateY(-4px); + box-shadow: 0 24px 48px -12px rgba(0,0,0,0.6); +} + +.byom-card-border { + position: absolute; + inset: -1px; + border-radius: 16px; + background: linear-gradient(135deg, rgba(255,255,255,0.08), transparent 30%, transparent 70%, rgba(255,255,255,0.04)); + opacity: 0; + transition: opacity 0.5s ease; + pointer-events: none; +} + +.byom-card:hover .byom-card-border { + opacity: 1; +} + +.byom-card-icon { + width: 52px; + height: 52px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 14px; + margin-bottom: 1.25rem; + position: relative; + transition: all 0.3s ease; +} + +.byom-card-icon-db { + background: rgba(0,245,212,0.08); + color: #00f5d4; + border: 1px solid rgba(0,245,212,0.15); + box-shadow: 0 0 15px rgba(0,245,212,0.08); +} + +.byom-card:hover .byom-card-icon-db { + background: rgba(0,245,212,0.12); + box-shadow: 0 0 25px rgba(0,245,212,0.2); + transform: scale(1.05); +} + +.byom-card-icon-storage { + background: rgba(64,158,255,0.08); + color: #409EFF; + border: 1px solid rgba(64,158,255,0.15); + box-shadow: 0 0 15px rgba(64,158,255,0.08); +} + +.byom-card:hover .byom-card-icon-storage { + background: rgba(64,158,255,0.12); + box-shadow: 0 0 25px rgba(64,158,255,0.2); + transform: scale(1.05); +} + +.byom-card-title { + font-size: 1.35rem; + font-weight: 700; + color: #fff; + margin-bottom: 0.75rem; + letter-spacing: -0.01em; +} + +.byom-card-desc { + color: #a1a1aa; + line-height: 1.7; + font-size: 0.92rem; + margin-bottom: 1.5rem; +} + +.byom-card-tags { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.byom-card-tags span { + padding: 0.35rem 0.75rem; + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.06); + border-radius: 20px; + font-size: 0.78rem; + font-weight: 500; + color: #999; + transition: all 0.3s ease; +} + +.byom-card:hover .byom-card-tags span { + background: rgba(255,255,255,0.06); + border-color: rgba(255,255,255,0.1); + color: #ccc; +} + +@media(max-width: 768px) { + .byom-cards { + grid-template-columns: 1fr; + } + + .byom-card { + padding: 2rem; + } + + .byom-pipe-node { + padding: 1.2rem 1.5rem; + min-width: 140px; + } +} + +/* OSS Strip */ +.oss-badge { + transition: all 0.3s ease; +} + +.oss-badge:hover { + background: rgba(255,255,255,0.1) !important; + border-color: rgba(255,255,255,0.2) !important; + transform: translateY(-1px); +} + +/* TIMELINE SECTION */ +.timeline-container { + position: relative; + max-width: 1200px; + margin: 4rem auto 0 auto; + padding: 0 1.5rem; + min-height: 400px; +} + +/* Central vertical track */ +.timeline-track { + position: absolute; + top: 0; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 2px; + background: rgba(255, 255, 255, 0.06); + z-index: 1; + pointer-events: none; +} + +.timeline-track-fill { + width: 100%; + height: 100%; + /* Driven dynamically in index.jsx inline styles to avoid rainbow override */ +} + +.timeline-items { + display: flex; + flex-direction: column; + position: relative; + z-index: 2; +} + +.timeline-item { + display: grid; + grid-template-columns: 1fr 100px 1fr; + align-items: center; + margin-bottom: 6rem; + width: 100%; + position: relative; +} + +.timeline-item-node { + grid-column: 2; + display: flex; + justify-content: center; + align-items: center; + position: relative; + z-index: 10; +} + +.timeline-node-dot { + width: 16px; + height: 16px; + border-radius: 50%; + background: #030303; + border: 3px solid rgba(255, 255, 255, 0.15); + transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); + cursor: pointer; +} + +/* Connect card on left/right symmetrically */ +.timeline-item-odd .timeline-card-wrapper { + grid-column: 1; + display: flex; + justify-content: flex-end; +} + +.timeline-item-even .timeline-card-wrapper { + grid-column: 3; + display: flex; + justify-content: flex-start; +} + +.timeline-item-odd .timeline-metadata-wrapper { + grid-column: 3; + display: flex; + justify-content: flex-start; + padding-left: 2rem; +} + +.timeline-item-even .timeline-metadata-wrapper { + grid-column: 1; + display: flex; + justify-content: flex-end; + padding-right: 2rem; +} + +/* Premium Card Layout */ +.timeline-card { + background: linear-gradient(145deg, rgba(255, 255, 255, 0.03) 0%, rgba(255, 255, 255, 0.005) 100%); + border: 1px solid rgba(255, 255, 255, 0.06); + border-radius: 16px; + padding: 2.5rem; + width: 100%; + max-width: 480px; + display: flex; + flex-direction: column; + justify-content: space-between; + transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03), 0 10px 30px -10px rgba(0,0,0,0.5); + position: relative; + overflow: hidden; + cursor: default; +} + +.timeline-card::before { + content: ''; + position: absolute; + top: 0; left: 0; right: 0; bottom: 0; + background: radial-gradient(circle at 50% 0%, rgba(255, 255, 255, 0.03) 0%, transparent 70%); + opacity: 0; + transition: opacity 0.4s; + pointer-events: none; +} + +.timeline-card:hover, .timeline-card.hovered { + transform: translateY(-4px) scale(1.02); + box-shadow: 0 25px 50px -20px rgba(0, 0, 0, 0.8), inset 0 1px 0 rgba(255, 255, 255, 0.08); +} + +.timeline-card:hover::before, .timeline-card.hovered::before { + opacity: 1; +} + +/* Glowing Accent Borders & Inner glows */ +.card-accent-teal:hover, .card-accent-teal.hovered { + border-color: rgba(0, 245, 212, 0.35); + background: linear-gradient(145deg, rgba(0, 245, 212, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} +.card-accent-amber:hover, .card-accent-amber.hovered { + border-color: rgba(255, 189, 46, 0.35); + background: linear-gradient(145deg, rgba(255, 189, 46, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} +.card-accent-blue:hover, .card-accent-blue.hovered { + border-color: rgba(64, 158, 255, 0.35); + background: linear-gradient(145deg, rgba(64, 158, 255, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} +.card-accent-red:hover, .card-accent-red.hovered { + border-color: rgba(255, 95, 86, 0.35); + background: linear-gradient(145deg, rgba(255, 95, 86, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} +.card-accent-purple:hover, .card-accent-purple.hovered { + border-color: rgba(168, 85, 247, 0.35); + background: linear-gradient(145deg, rgba(168, 85, 247, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} +.card-accent-pink:hover, .card-accent-pink.hovered { + border-color: rgba(236, 72, 153, 0.35); + background: linear-gradient(145deg, rgba(236, 72, 153, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} +.card-accent-green:hover, .card-accent-green.hovered { + border-color: rgba(34, 197, 94, 0.35); + background: linear-gradient(145deg, rgba(34, 197, 94, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} +.card-accent-orange:hover, .card-accent-orange.hovered { + border-color: rgba(249, 115, 22, 0.35); + background: linear-gradient(145deg, rgba(249, 115, 22, 0.02) 0%, rgba(255, 255, 255, 0.005) 100%); +} + +/* Symmetrical opposite Metadata block styling */ +.timeline-metadata { + display: flex; + flex-direction: column; + justify-content: center; + transition: all 0.3s ease; +} + +.timeline-item-odd .timeline-metadata { + align-items: flex-start; +} + +.timeline-item-even .timeline-metadata { + align-items: flex-end; +} + +.metadata-tag { + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.15em; + color: #666; + margin-bottom: 0.5rem; + transition: color 0.4s ease; +} + +.metadata-number { + font-size: 3rem; + font-weight: 900; + color: #fff; + opacity: 0.04; + line-height: 0.9; + font-family: monospace; + transition: opacity 0.4s ease; +} + +/* Connect active metadata color states */ +.timeline-card.hovered ~ .timeline-metadata-wrapper .metadata-tag, +.timeline-card:hover ~ .timeline-metadata-wrapper .metadata-tag, +.timeline-item-active .timeline-metadata-wrapper .metadata-tag { + opacity: 1; +} + +.timeline-item:hover .timeline-metadata-teal .metadata-tag, +.timeline-item-active .timeline-metadata-teal .metadata-tag { color: #00f5d4; } +.timeline-item:hover .timeline-metadata-teal .metadata-number, +.timeline-item-active .timeline-metadata-teal .metadata-number { opacity: 0.15; } + +.timeline-item:hover .timeline-metadata-amber .metadata-tag, +.timeline-item-active .timeline-metadata-amber .metadata-tag { color: #FFBD2E; } +.timeline-item:hover .timeline-metadata-amber .metadata-number, +.timeline-item-active .timeline-metadata-amber .metadata-number { opacity: 0.15; } + +.timeline-item:hover .timeline-metadata-blue .metadata-tag, +.timeline-item-active .timeline-metadata-blue .metadata-tag { color: #409EFF; } +.timeline-item:hover .timeline-metadata-blue .metadata-number, +.timeline-item-active .timeline-metadata-blue .metadata-number { opacity: 0.15; } + +.timeline-item:hover .timeline-metadata-red .metadata-tag, +.timeline-item-active .timeline-metadata-red .metadata-tag { color: #FF5F56; } +.timeline-item:hover .timeline-metadata-red .metadata-number, +.timeline-item-active .timeline-metadata-red .metadata-number { opacity: 0.15; } + +.timeline-item:hover .timeline-metadata-purple .metadata-tag, +.timeline-item-active .timeline-metadata-purple .metadata-tag { color: #a855f7; } +.timeline-item:hover .timeline-metadata-purple .metadata-number, +.timeline-item-active .timeline-metadata-purple .metadata-number { opacity: 0.15; } + +.timeline-item:hover .timeline-metadata-pink .metadata-tag, +.timeline-item-active .timeline-metadata-pink .metadata-tag { color: #ec4899; } +.timeline-item:hover .timeline-metadata-pink .metadata-number, +.timeline-item-active .timeline-metadata-pink .metadata-number { opacity: 0.15; } + +.timeline-item:hover .timeline-metadata-green .metadata-tag, +.timeline-item-active .timeline-metadata-green .metadata-tag { color: #22c55e; } +.timeline-item:hover .timeline-metadata-green .metadata-number, +.timeline-item-active .timeline-metadata-green .metadata-number { opacity: 0.15; } + +.timeline-item:hover .timeline-metadata-orange .metadata-tag, +.timeline-item-active .timeline-metadata-orange .metadata-tag { color: #f97316; } +.timeline-item:hover .timeline-metadata-orange .metadata-number, +.timeline-item-active .timeline-metadata-orange .metadata-number { opacity: 0.15; } + +/* Timeline Mobile Tag (inside card, hidden on desktop) */ +.timeline-mobile-tag { + display: none; +} + +/* Simulated infinite loader */ +.timeline-trigger-container { + display: flex; + justify-content: center; + align-items: center; + padding: 3rem 0; + width: 100%; + position: relative; + z-index: 5; + margin-top: 2rem; +} + +.timeline-loader { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; + padding: 2rem; + border-radius: 12px; + background: rgba(255, 255, 255, 0.02); + border: 1px solid rgba(255, 255, 255, 0.06); +} + +.loader-dots { + display: flex; + gap: 8px; +} + +.loader-dot { + width: 10px; + height: 10px; + border-radius: 50%; + animation: loaderDotBounce 1.2s infinite ease-in-out; +} + +.dot-teal { background: #00f5d4; animation-delay: 0s; } +.dot-blue { background: #409EFF; animation-delay: 0.2s; } +.dot-purple { background: #a855f7; animation-delay: 0.4s; } + +@keyframes loaderDotBounce { + 0%, 80%, 100% { transform: scale(0); opacity: 0.3; } + 40% { transform: scale(1); opacity: 1; } +} + +.loader-text { + font-size: 0.85rem; + color: #888; + letter-spacing: 0.05em; +} + +.timeline-end-pill { + position: relative; + z-index: 5; + padding: 10px 24px; + border-radius: 9999px; + background: #030303; /* Solid background to mask spine line */ + border: 1px solid rgba(255, 255, 255, 0.08); + font-size: 0.85rem; + color: #666; + letter-spacing: 0.05em; + font-weight: 500; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.8); +} + +/* RESPONSIVE TIMELINE */ +@media (max-width: 992px) { + .timeline-item { + grid-template-columns: 1fr 80px 1fr; + } + .timeline-item-odd .timeline-metadata-wrapper { + padding-left: 1rem; + } + .timeline-item-even .timeline-metadata-wrapper { + padding-right: 1rem; + } + .timeline-card { + padding: 2rem; + } +} + +@media (max-width: 768px) { + .timeline-track { + left: 20px; + transform: none; + } + .timeline-item { + grid-template-columns: 40px 1fr; + gap: 1rem; + margin-bottom: 4rem; + } + .timeline-item-node { + grid-column: 1; + justify-content: flex-start; + } + .timeline-node-dot { + margin-left: -7px; /* center perfectly on the 2px line */ + } + .timeline-item-odd .timeline-card-wrapper, + .timeline-item-even .timeline-card-wrapper { + grid-column: 2; + justify-content: flex-start; + } + .timeline-metadata-wrapper { + display: none !important; + } + .timeline-card { + max-width: 100%; + } + .timeline-mobile-tag { + display: block; + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.12em; + margin-bottom: 0.75rem; + color: #888; + } + .card-accent-teal .timeline-mobile-tag { color: #00f5d4; } + .card-accent-amber .timeline-mobile-tag { color: #FFBD2E; } + .card-accent-blue .timeline-mobile-tag { color: #409EFF; } + .card-accent-red .timeline-mobile-tag { color: #FF5F56; } + .card-accent-purple .timeline-mobile-tag { color: #a855f7; } + .card-accent-pink .timeline-mobile-tag { color: #ec4899; } + .card-accent-green .timeline-mobile-tag { color: #22c55e; } + .card-accent-orange .timeline-mobile-tag { color: #f97316; } +} + +/* Client App Services Showcase Section */ +.services-showcase-section { + padding: 7rem 0; + background: #000; + border-top: 1px solid rgba(255, 255, 255, 0.08); + position: relative; + overflow: hidden; +} + +.services-grid-bg { + position: absolute; + inset: 0; + background-image: + linear-gradient(rgba(255,255,255,0.01) 1px, transparent 1px), + linear-gradient(90deg, rgba(255,255,255,0.01) 1px, transparent 1px); + background-size: 80px 80px; + -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black 40%, transparent 80%); + mask-image: radial-gradient(ellipse 70% 60% at 50% 50%, black 40%, transparent 80%); + pointer-events: none; +} + +.services-container { + max-width: 1200px; + margin: 0 auto; + padding: 0 1.5rem; + position: relative; + z-index: 2; +} + +.services-header { + text-align: center; + margin-bottom: 4.5rem; +} + +.services-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); + gap: 2.5rem; + justify-content: center; +} + +.service-card { + position: relative; + display: flex; + flex-direction: column; + background: rgba(255, 255, 255, 0.015); + border: 1px solid rgba(255, 255, 255, 0.05); + border-radius: 20px; + padding: 2.25rem; + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); + overflow: hidden; +} + +.service-card-glow { + position: absolute; + inset: 0; + background: radial-gradient(circle at 50% 100%, var(--accent-glow) 0%, transparent 60%); + opacity: 0; + transition: opacity 0.4s ease; + pointer-events: none; +} + +.magic-bento-card:hover .service-card-glow { + opacity: 1; +} + +.magic-bento-card:hover { + border-color: rgba(0, 245, 212, 0.3); + background: rgba(0, 245, 212, 0.04); +} + +.service-card-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1.5rem; +} + +.service-icon-wrap { + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 12px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.08); + color: var(--accent-color); + transition: all 0.3s ease; +} + +.magic-bento-card:hover .service-icon-wrap { + background: var(--accent-glow); + border-color: var(--accent-color); + transform: scale(1.08); +} + +.service-card-body { + flex-grow: 1; + margin-bottom: 1.5rem; +} + +.service-card-title { + font-size: 1.3rem; + font-weight: 600; + color: #fff; + margin-bottom: 0.75rem; + letter-spacing: -0.02em; +} + +.service-card-desc { + font-size: 0.925rem; + color: #a1a1aa; + line-height: 1.6; +} + +.service-card-visual-container { + height: 150px; + background: rgba(0, 0, 0, 0.45); + border-radius: 14px; + border: 1px solid rgba(255, 255, 255, 0.03); + overflow: hidden; + position: relative; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.4s ease; +} + +.magic-bento-card:hover .service-card-visual-container { + border-color: rgba(255, 255, 255, 0.08); + background: rgba(0, 0, 0, 0.6); +} + +/* Mini Visuals Inside Cards */ +.mini-visual { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; +} + +/* Authentication Visual */ +.auth-visual { + position: relative; +} + +.auth-visual .mini-auth-box { + width: 170px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 10px; + padding: 0.6rem 0.8rem; + box-shadow: 0 10px 25px -5px rgba(0,0,0,0.5); + transition: all 0.3s ease; + position: relative; +} + +.magic-bento-card:hover .auth-visual .mini-auth-box { + transform: translateY(-3px) scale(1.02); + border-color: rgba(0, 245, 212, 0.3); +} + +.mini-auth-header { + display: flex; + gap: 4px; + margin-bottom: 0.5rem; +} + +.mini-circle { + width: 6px; + height: 6px; + border-radius: 50%; +} + +.mini-circle.red { background: #ff5f56; } +.mini-circle.yellow { background: #ffbd2e; } +.mini-circle.green { background: #27c93f; } + +.mini-auth-body { + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.mini-auth-label { + font-size: 10px; + color: #fff; + font-weight: 500; +} + +.mini-auth-input { + height: 20px; + background: rgba(255,255,255,0.03); + border: 1px solid rgba(255,255,255,0.08); + border-radius: 4px; + display: flex; + align-items: center; + padding: 0 0.4rem; + gap: 0.3rem; +} + +.mini-dot { + width: 4px; + height: 4px; + border-radius: 50%; + background: #00f5d4; +} + +.placeholder { + font-size: 8px; + color: #666; +} + +.mini-auth-btn-row { + margin-top: 0.1rem; +} + +.mini-auth-btn-primary { + width: 100%; + height: 20px; + border-radius: 4px; + background: #00f5d4; + border: none; + font-size: 9px; + color: #000; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; +} + +.magic-bento-card:hover .mini-auth-btn-primary { + animation: auth-btn-click 1.6s ease forwards; +} + +@keyframes auth-btn-click { + 0% { + background: #00f5d4; + transform: scale(1); + } + 45% { + background: #00f5d4; + transform: scale(1); + } + 50% { + background: #00f5d4; + transform: scale(0.92); + box-shadow: 0 0 5px rgba(0, 245, 212, 0.4); + } + 58% { + background: #00f5d4; transform: scale(1.02); box-shadow: 0 0 15px rgba(0, 245, 212, 0.6); + } + 100% { + background: #00f5d4; transform: scale(1); box-shadow: 0 0 15px rgba(0, 245, 212, 0.6); + } +} + +.mini-auth-providers { + display: flex; + justify-content: center; + gap: 0.5rem; + margin-top: 0.2rem; +} + +.mini-provider-btn { + width: 20px; + height: 20px; + border-radius: 4px; + background: rgba(255,255,255,0.05); + border: 1px solid rgba(255,255,255,0.08); + display: flex; + align-items: center; + justify-content: center; + color: #aaa; +} + +.magic-bento-card:hover .mini-provider-btn { + border-color: rgba(255, 255, 255, 0.15); + color: #fff; +} + +.mini-cursor { + position: absolute; + bottom: 2px; + right: 15px; + opacity: 0; + transform: translate(0, 0); + transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94); + pointer-events: none; + z-index: 10; +} + +.magic-bento-card:hover .mini-cursor { + opacity: 1; + transform: translate(-30px, -28px); +} + +/* Database Visual */ +.db-visual .mini-db-code { + font-family: 'Courier New', Courier, monospace; + font-size: 11px; + color: #a1a1aa; + line-height: 1.45; + text-align: left; + width: 90%; + background: rgba(0,0,0,0.3); + border: 1px solid rgba(255,255,255,0.04); + border-radius: 8px; + padding: 0.8rem; + transition: all 0.3s ease; +} + +.magic-bento-card:hover .db-visual .mini-db-code { + border-color: rgba(0, 245, 212, 0.4); + box-shadow: 0 0 15px rgba(0, 245, 212, 0.15); +} + +.code-key { color: #c792ea; } +.code-var { color: #82b1ff; } +.code-func { color: #82b1ff; } +.code-str { color: #ecc48d; } +.code-json { + margin-top: 0.2rem; + opacity: 0.15; + transition: opacity 0.4s ease; +} + +.magic-bento-card:hover .code-json { + opacity: 1; + transition-delay: 0.3s; +} + +.json-bracket { color: #ffd700; } +.json-key { color: #80cbc4; } +.json-val { color: #f78c6c; } +.json-bool { color: #ff5370; } +.json-str { color: #c3e88d; } + +/* Storage Visual - Mini File Manager Panel */ +.storage-visual .mini-storage-panel { + width: 200px; + background: rgba(255, 255, 255, 0.02); + border: 1px solid rgba(255, 255, 255, 0.07); + border-radius: 10px; + overflow: hidden; + box-shadow: 0 8px 20px -5px rgba(0,0,0,0.5); + transition: all 0.4s ease; +} + +.magic-bento-card:hover .mini-storage-panel { + border-color: rgba(0, 245, 212, 0.2); + box-shadow: 0 8px 25px -5px rgba(0,0,0,0.6), 0 0 10px rgba(0,245,212,0.06); +} + +.storage-panel-header { + display: flex; + align-items: center; + gap: 5px; + padding: 0.4rem 0.6rem; + background: rgba(255, 255, 255, 0.025); + border-bottom: 1px solid rgba(255, 255, 255, 0.05); +} + +.storage-header-icon { color: #00f5d4; flex-shrink: 0; } + +.storage-bucket-name { + font-size: 9px; + font-weight: 600; + color: #ddd; + font-family: 'Courier New', Courier, monospace; +} + +.storage-file-count { + margin-left: auto; + font-size: 7px; + color: #666; + background: rgba(255,255,255,0.04); + padding: 1px 5px; + border-radius: 3px; +} + +.storage-file-list { + display: flex; + flex-direction: column; + padding: 0.35rem 0; +} + +.storage-file-row { + display: flex; + align-items: center; + gap: 6px; + padding: 0.3rem 0.6rem; + transition: all 0.3s ease; + opacity: 0.6; + transform: translateX(-4px); +} + +.magic-bento-card:hover .storage-file-row { + opacity: 1; + transform: translateX(0); +} + +.magic-bento-card:hover .storage-file-row:nth-child(1) { transition-delay: 0.05s; } +.magic-bento-card:hover .storage-file-row:nth-child(2) { transition-delay: 0.15s; } +.magic-bento-card:hover .storage-file-row:nth-child(3) { transition-delay: 0.25s; } + +.storage-file-row:not(:last-child) { + border-bottom: 1px solid rgba(255, 255, 255, 0.03); +} + +.storage-file-type { + font-size: 6px; + font-weight: 700; + letter-spacing: 0.04em; + padding: 2px 4px; + border-radius: 3px; + flex-shrink: 0; + text-align: center; + min-width: 22px; +} + +.storage-file-type.img { + background: rgba(100, 210, 255, 0.12); + color: #64d2ff; + border: 1px solid rgba(100, 210, 255, 0.15); +} + +.storage-file-type.doc { + background: rgba(255, 189, 46, 0.12); + color: #ffbd2e; + border: 1px solid rgba(255, 189, 46, 0.15); +} + +.storage-file-type.vid { + background: rgba(0, 245, 212, 0.1); + color: #00f5d4; + border: 1px solid rgba(0, 245, 212, 0.15); +} + +.storage-file-info { + display: flex; + flex-direction: column; + flex: 1; + min-width: 0; +} + +.storage-fname { + font-size: 9px; + font-weight: 500; + color: #ccc; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.storage-fsize { font-size: 7px; color: #555; } + +.storage-check { + color: rgba(0, 245, 212, 0.35); + flex-shrink: 0; + transition: color 0.3s ease; +} + +.magic-bento-card:hover .storage-check { + color: rgba(0, 245, 212, 0.8); +} + +.storage-upload-status { + position: relative; + height: 10px; + display: flex; + align-items: center; + overflow: hidden; +} + +.storage-uploading-text { + font-size: 7px; + color: #888; + position: absolute; + left: 0; + opacity: 1; + transition: opacity 0.3s ease, transform 0.3s ease; +} + +.storage-done-text { + font-size: 7px; + color: #00f5d4; + position: absolute; + left: 0; + opacity: 0; + transform: translateY(8px); + transition: opacity 0.3s ease, transform 0.3s ease; +} + +.magic-bento-card:hover .storage-uploading-text { + opacity: 0; + transform: translateY(-8px); + transition-delay: 1.4s; +} + +.magic-bento-card:hover .storage-done-text { + opacity: 1; + transform: translateY(0); + transition-delay: 1.4s; +} + +.storage-upload-ring { + flex-shrink: 0; + opacity: 0.3; + transition: opacity 0.3s ease; +} + +.magic-bento-card:hover .storage-upload-ring { opacity: 1; } + +.storage-ring-progress { + transition: stroke-dashoffset 1.5s cubic-bezier(0.4, 0, 0.2, 1) 0.3s; + transform: rotate(-90deg); + transform-origin: center; +} + +.magic-bento-card:hover .storage-ring-progress { stroke-dashoffset: 0; } + +.storage-bar-track { + height: 3px; + background: rgba(255, 255, 255, 0.04); +} + +.storage-bar-fill { + height: 100%; + width: 0%; + background: linear-gradient(90deg, rgba(0, 245, 212, 0.2), #00f5d4); + transition: width 1.6s cubic-bezier(0.4, 0, 0.2, 1) 0.2s; +} + +.magic-bento-card:hover .storage-bar-fill { width: 72%; } + +/* Mail Visual */ +.mail-visual .mini-mail-envelope { + width: 180px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 10px; + overflow: hidden; + box-shadow: 0 10px 25px -5px rgba(0,0,0,0.5); + transition: all 0.3s ease; +} + +.magic-bento-card:hover .mini-mail-envelope { + border-color: rgba(0, 245, 212, 0.3); + transform: translateY(-3px); +} + +.mail-header { + background: rgba(255, 255, 255, 0.03); + border-bottom: 1px solid rgba(255, 255, 255, 0.06); + padding: 0.4rem 0.6rem; + display: flex; + align-items: center; + gap: 0.4rem; + font-size: 8px; + color: #888; +} + +.mail-badge-icon { + color: #00f5d4; +} + +.mail-content { + padding: 0.6rem 0.8rem; + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.mail-title { + font-size: 10px; + font-weight: 500; + color: #fff; +} + +.mail-bar-btn { + height: 18px; + border-radius: 4px; + background: rgba(0, 245, 212, 0.15); + border: 1px solid rgba(0, 245, 212, 0.3); + font-size: 8px; + color: #00f5d4; + font-weight: 600; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.3s ease; +} + +.magic-bento-card:hover .mail-bar-btn { + background: #00f5d4; + color: #000; + border-color: #00f5d4; + transition-delay: 0.8s; +} + +.mail-status-bar { + display: flex; + align-items: center; + padding: 0.3rem 0.6rem; + background: rgba(0, 0, 0, 0.25); + border-top: 1px solid rgba(255, 255, 255, 0.04); + height: 18px; + position: relative; +} + +.mail-status-sending { + font-size: 8px; + color: #ffbd2e; + position: absolute; + left: 8px; + opacity: 1; + transition: opacity 0.3s ease, transform 0.3s ease; +} + +.mail-status-sent { + font-size: 8px; + color: #00f5d4; + position: absolute; + left: 8px; + opacity: 0; + transform: translateY(10px); + transition: opacity 0.3s ease, transform 0.3s ease; +} + +.magic-bento-card:hover .mail-status-sending { + opacity: 0; + transform: translateY(-10px); + transition-delay: 0.8s; +} + +.magic-bento-card:hover .mail-status-sent { + opacity: 1; + transform: translateY(0); + transition-delay: 0.8s; +} + +/* Security Visual */ +.security-visual .policy-badge { + position: absolute; + top: 8px; + right: 8px; + padding: 0.2rem 0.4rem; + border-radius: 4px; + font-size: 7px; + font-weight: 700; + color: #00f5d4; + background: rgba(0, 245, 212, 0.15); + border: 1px solid rgba(0, 245, 212, 0.3); + letter-spacing: 0.05em; +} + +.security-visual .policy-editor { + width: 90%; + font-family: 'Courier New', Courier, monospace; + font-size: 9.5px; + color: #888; + text-align: left; + line-height: 1.5; + transition: all 0.3s ease; +} + +.magic-bento-card:hover .policy-editor { + color: #b4b4b4; +} + +.policy-line { + white-space: nowrap; + transition: background-color 0.3s ease; +} + +.policy-line.indent { + padding-left: 10px; +} + +.magic-bento-card:hover .policy-line.indent { + background: rgba(0, 245, 212, 0.06); + border-radius: 2px; +} + +.policy-keyword { color: #e57373; } +.policy-action { color: #81c784; } + +/* Realtime Visual */ +.realtime-visual .mini-realtime-stage { + width: 190px; + display: flex; + align-items: center; + justify-content: space-between; + background: rgba(255, 255, 255, 0.02); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 10px; + padding: 0.6rem 0.75rem; + position: relative; + overflow: hidden; + height: 55px; + box-shadow: 0 10px 25px -5px rgba(0,0,0,0.5); + transition: all 0.3s ease; +} + +.magic-bento-card:hover .mini-realtime-stage { + border-color: rgba(0, 245, 212, 0.3); + box-shadow: 0 0 15px rgba(0, 245, 212, 0.15); +} + +.realtime-node { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.2rem; + font-size: 8px; + color: #666; + z-index: 2; + transition: color 0.3s ease; +} + +.realtime-node span { + font-size: 7px; +} + +.magic-bento-card:hover .realtime-node { + color: #fff; +} + +.realtime-pipe { + flex-grow: 1; + height: 2px; + background: rgba(255, 255, 255, 0.08); + margin: 0 0.5rem; + position: relative; + border-radius: 1px; +} + +.realtime-pulse { + position: absolute; + top: 0; + left: 0; + width: 25px; + height: 2px; + background: linear-gradient(90deg, transparent, #00f5d4, transparent); + opacity: 0; +} + +.magic-bento-card:hover .realtime-pulse { + opacity: 1; + animation: realtime-packet-pulse 1.2s infinite linear; +} + +@keyframes realtime-packet-pulse { + 0% { left: -30%; } + 100% { left: 110%; } +} + +.realtime-status-badge { + position: absolute; + bottom: 2px; + left: 50%; + transform: translateX(-50%); + font-size: 6px; + font-weight: 700; + color: #444; + letter-spacing: 0.05em; + transition: all 0.3s ease; +} + +.magic-bento-card:hover .realtime-status-badge { + color: #00f5d4; + text-shadow: 0 0 4px rgba(0, 245, 212, 0.6); +} + +/* urBackend Studio Interactive Window in Infrastructure */ +.hero-interactive-window { + max-width: 860px; + margin: 3.5rem auto 4.5rem auto; + background: rgba(10, 10, 10, 0.4); + border: 1px solid rgba(255, 255, 255, 0.06); + border-radius: 14px; + overflow: hidden; + box-shadow: 0 30px 60px -15px rgba(0, 0, 0, 0.9), inset 0 1px 0 rgba(255, 255, 255, 0.05); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); +} + +.lh-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.65rem 1.25rem; + background: rgba(255, 255, 255, 0.02); + border-bottom: 1px solid rgba(255, 255, 255, 0.06); +} + +.lh-dots { + display: flex; + gap: 6px; +} + +.lh-dot { + width: 9px; + height: 9px; + border-radius: 50%; +} + +.lh-dot-red { background: #ff5f56; } +.lh-dot-yellow { background: #ffbd2e; } +.lh-dot-green { background: #27c93f; } + +.lh-title { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.75rem; + color: #888; + font-weight: 500; +} + +.lh-title svg { + color: #00f5d4; +} + +.lh-replay { + background: transparent; + border: none; + color: #00f5d4; + cursor: pointer; + font-size: 0.72rem; + font-weight: 600; + display: flex; + align-items: center; + gap: 4px; + padding: 0.2rem 0.5rem; + border-radius: 4px; + transition: all 0.2s ease; +} + +.lh-replay:hover { + background: rgba(0, 245, 212, 0.08); + color: #fff; +} + +.lh-content { + display: grid; + grid-template-columns: 1.2fr 0.3fr 1.2fr; + background: rgba(0, 0, 0, 0.2); +} + +@media (max-width: 768px) { + .lh-content { + grid-template-columns: 1fr; + } + .lh-middle { + height: 50px; + padding: 0.5rem 0; + } + .lh-line { + width: 2px !important; + height: 100% !important; + } + .lh-pulse { + width: 2px !important; + height: 20px !important; + top: 0 !important; + left: 0 !important; + background: linear-gradient(180deg, transparent, #00f5d4, transparent) !important; + } + .lh-pulse.active { + animation: pulse-travel-vert 1.2s infinite linear !important; + } +} + +@keyframes pulse-travel-vert { + 0% { top: -20%; } + 100% { top: 110%; } +} + +.lh-pane { + padding: 1.5rem; + display: flex; + flex-direction: column; + gap: 1rem; +} + +.lh-pane-header { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.8rem; + color: #fff; + font-weight: 600; + border-bottom: 1px solid rgba(255,255,255,0.04); + padding-bottom: 0.45rem; +} + +.lh-pane-header svg { + color: #00f5d4; +} + +.lh-pane-label { + margin-left: auto; + font-size: 0.6rem; + color: #666; + text-transform: uppercase; + letter-spacing: 0.05em; + background: rgba(255,255,255,0.03); + padding: 0.1rem 0.35rem; + border-radius: 4px; +} + +.lh-builder { + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.lh-group { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.lh-group label { + font-size: 0.65rem; + color: #666; + font-weight: 600; + text-transform: uppercase; +} + +.lh-input { + background: rgba(255,255,255,0.02); + border: 1px solid rgba(255,255,255,0.08); + border-radius: 6px; + padding: 0.35rem 0.6rem; + font-size: 0.8rem; + color: #fff; + font-family: monospace; +} + +.lh-head-row { + display: grid; + grid-template-columns: 1fr 1fr 60px; + font-size: 0.6rem; + color: #444; + font-weight: 700; + letter-spacing: 0.05em; + padding: 0 0.4rem; +} + +.lh-table { + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.lh-row { + display: grid; + grid-template-columns: 1fr 1fr 60px; + background: rgba(255, 255, 255, 0.01); + border: 1px solid rgba(255, 255, 255, 0.04); + border-radius: 6px; + padding: 0.35rem 0.4rem; + font-size: 0.75rem; + align-items: center; + opacity: 0; + transform: translateY(5px); + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +.lh-row.visible { + opacity: 1; + transform: translateY(0); +} + +.lh-name { + color: #00f5d4; + font-family: monospace; +} + +.lh-type { + color: #888; +} + +.lh-req { + color: #444; +} + +.lh-req.on { + color: #27c93f; + display: flex; + align-items: center; +} + +.lh-actions { + margin-top: 0.2rem; +} + +.lh-add-btn { + background: rgba(255,255,255,0.02); + border: 1px solid rgba(255,255,255,0.06); + border-radius: 6px; + color: #666; + font-size: 0.7rem; + padding: 0.35rem 0.6rem; + display: flex; + align-items: center; + gap: 5px; + cursor: pointer; + transition: all 0.2s ease; +} + +.lh-add-btn:hover { + border-color: rgba(255,255,255,0.12); + color: #ccc; + background: rgba(255,255,255,0.04); +} + +.lh-middle { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: relative; + padding: 0 0.5rem; +} + +.lh-line { + width: 100%; + height: 2px; + background: rgba(255, 255, 255, 0.04); + position: relative; + border-radius: 1px; +} + +.lh-pulse { + position: absolute; + top: 0; + left: 0; + width: 25px; + height: 2px; + background: linear-gradient(90deg, transparent, #00f5d4, transparent); + opacity: 0; +} + +.lh-pulse.active { + opacity: 1; + animation: lh-pulse-travel 1.2s infinite linear; +} + +@keyframes lh-pulse-travel { + 0% { left: -30%; } + 100% { left: 110%; } +} + +.lh-engine { + width: 34px; + height: 34px; + border-radius: 50%; + background: rgba(0, 0, 0, 0.5); + border: 1.5px solid rgba(255,255,255,0.06); + display: flex; + align-items: center; + justify-content: center; + color: #555; + margin-top: 1rem; + transition: all 0.3s ease; +} + +.lh-engine.pulsing { + color: #00f5d4; + border-color: #00f5d4; + box-shadow: 0 0 12px rgba(0, 245, 212, 0.3); + animation: spin-slow 3s infinite linear; +} + +@keyframes spin-slow { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.lh-pane-right { + border-left: 1px solid rgba(255, 255, 255, 0.04); +} + +@media (max-width: 768px) { + .lh-pane-right { + border-left: none; + border-top: 1px solid rgba(255, 255, 255, 0.04); + } +} + +.lh-endpoints { + display: flex; + flex-direction: column; + gap: 0.45rem; + opacity: 0.2; + transition: opacity 0.3s ease; +} + +.lh-endpoints.visible { + opacity: 1; +} + +.lh-endpoint { + display: flex; + align-items: center; + gap: 6px; + background: rgba(255,255,255,0.01); + border: 1px solid rgba(255,255,255,0.03); + border-radius: 6px; + padding: 0.35rem 0.5rem; + opacity: 0; + transform: translateX(10px); + transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); +} + +.lh-endpoints.visible .lh-endpoint { + opacity: 1; + transform: translateX(0); +} + +.lh-endpoint code { + font-size: 0.7rem; + color: #bbb; + font-family: monospace; + flex-grow: 1; +} + +.lh-method { + font-size: 0.6rem; + font-weight: 700; + padding: 0.1rem 0.3rem; + border-radius: 4px; + min-width: 44px; + text-align: center; +} + +.lh-method.get { background: rgba(0, 245, 212, 0.08); color: #00f5d4; } +.lh-method.post { background: rgba(255, 189, 46, 0.08); color: #FFBD2E; } +.lh-method.put { background: rgba(64, 158, 255, 0.08); color: #409EFF; } +.lh-method.delete { background: rgba(255, 95, 86, 0.08); color: #FF5F56; } + +.lh-status { + font-size: 0.65rem; + color: #27c93f; + display: flex; + align-items: center; + gap: 3px; + background: rgba(39, 201, 63, 0.08); + padding: 0.1rem 0.35rem; + border-radius: 4px; +} + +.services-bento-placeholder { + min-height: 520px; +} + +@media (prefers-reduced-motion: reduce) { + .orbit-inner-wrapper, + .orbit-mid-wrapper, + .orbit-outer-wrapper, + .orbit-dust, + .orbit-sun-glow, + .orbit-sun-ring-1, + .orbit-sun-ring-2, + .orbit-connect-line::after, + .hero-glow, + .byom-pipe-particle { + animation: none !important; + } +} + + +/* PRICING CSS */ + + +.pricing-page { + --nav-height: 70px; + min-height: 100svh; + background: #000; + color: #fff; + display: flex; + flex-direction: column; + box-sizing: border-box; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.pricing-page::-webkit-scrollbar { + display: none; +} + +html:has(.pricing-page), +body:has(.pricing-page) { + scrollbar-width: none; + -ms-overflow-style: none; +} + +html:has(.pricing-page)::-webkit-scrollbar, +body:has(.pricing-page)::-webkit-scrollbar { + display: none; +} + +.pricing-header { + border-bottom: 1px solid #1a1a1a; + background: #000; + position: sticky; + top: 0; + z-index: 5; +} + +.pricing-header-inner { + max-width: 1100px; + margin: 0 auto; + padding: 1.25rem 1.5rem; + display: flex; + align-items: center; + justify-content: space-between; +} + +.pricing-logo { + font-weight: 700; + font-size: 1.1rem; + color: #fff; + text-decoration: none; +} + +.pricing-header-links { + display: flex; + gap: 1rem; + align-items: center; +} + +.pricing-link { + color: #fff; + text-decoration: none; + font-size: 0.9rem; +} + +.pricing-cta { + color: #000; + background: #00f5d4; + padding: 0.5rem 1rem; + border-radius: 999px; + text-decoration: none; + font-weight: 600; + font-size: 0.85rem; +} + +.pricing-main { + flex: 1; + max-width: 1100px; + margin: 0 auto; + width: 100%; + box-sizing: border-box; + padding: calc(1.5rem + var(--nav-height) + 2rem) 1.5rem 4rem; +} + +@media (max-width: 900px) { + .pricing-main { + padding-top: calc(1rem + var(--nav-height) + 1.25rem); + padding-bottom: 3rem; + } +} + +.pricing-hero { + text-align: center; + margin-bottom: 3rem; +} + +.pricing-hero h1 { + font-size: clamp(2rem, 3.2vw, 3rem); + margin-bottom: 0.75rem; +} + +.pricing-hero p { + color: #c7c7c7; + font-size: 1rem; +} + +.pricing-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 2rem; +} + +.pricing-card { + border: 1px solid #1f1f1f; + border-radius: 16px; + padding: 2.5rem; + background: #0b0b0b; + display: flex; + flex-direction: column; + gap: 1.25rem; +} + +.pricing-card-highlight { + border-color: #00f5d4; +} + +.pricing-badge { + display: inline-flex; + align-self: flex-start; + padding: 0.3rem 0.75rem; + border-radius: 999px; + background: #0f0f0f; + color: #00f5d4; + font-size: 0.75rem; + font-weight: 600; + border: 1px solid #00f5d4; +} + +.pricing-price { + display: flex; + align-items: baseline; + gap: 0.35rem; +} + +.pricing-amount { + font-size: 2.8rem; + font-weight: 800; +} + +.pricing-amount-strike { + text-decoration: line-through; + text-decoration-thickness: 3px; +} + +.pricing-free-trial { + color: #00f5d4; + font-weight: 600; +} + +.pricing-term { + color: #9a9a9a; +} + +.pricing-subtext { + color: #b0b0b0; + font-size: 0.95rem; +} + +.pricing-list { + list-style: none; + padding: 0; + margin: 0; + display: grid; + gap: 0.65rem; +} + +.pricing-list li { + display: flex; + align-items: center; + gap: 0.6rem; + color: #e5e5e5; + font-size: 0.9rem; +} + +.pricing-list svg { + color: #00f5d4; +} + +.pricing-button { + margin-top: auto; + display: inline-flex; + align-items: center; + justify-content: center; + border: 1px solid #00f5d4; + color: #00f5d4; + padding: 0.7rem 1.2rem; + border-radius: 10px; + text-decoration: none; + font-weight: 600; + background: transparent; +} + +.pricing-button-green { + background: #00f5d4; + color: #000; +} + +@media (max-width: 720px) { + .pricing-header-inner { + flex-direction: column; + gap: 1rem; + } +} + +.mobile-menu-link { + font-size: 1.5rem; + font-weight: 700; + color: #fff; + text-decoration: none; +} + +.mobile-menu-sub-link { + font-size: 1.2rem; + font-weight: 500; + color: #aaa; + text-decoration: none; +} + +.mobile-menu-divider { + height: 1px; + width: 60px; + background: #333; + margin: 10px 0; +} + +.mobile-menu-action { + font-weight: 600; + width: 200px; + padding: 12px; +} + +.mobile-menu-action.btn-primary { + text-align: center; + padding: 12px 30px; +} diff --git a/apps/landing/tsconfig.json b/apps/landing/tsconfig.json new file mode 100644 index 000000000..8bf91d3bb --- /dev/null +++ b/apps/landing/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"] +} From b84e06cf44bad37ce4f391c622c9345c5d5ade4f Mon Sep 17 00:00:00 2001 From: yash-pouranik Date: Thu, 23 Jul 2026 22:43:20 +0530 Subject: [PATCH 2/6] fix: resolve font issue on pricing page and bento boxes rendering double blur --- .../src/components/MagicBento/MagicBento.css | 16 ++++++++++------ apps/landing/src/styles/landing.css | 9 ++++++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/apps/landing/src/components/MagicBento/MagicBento.css b/apps/landing/src/components/MagicBento/MagicBento.css index 88a7b8b85..4277113c7 100644 --- a/apps/landing/src/components/MagicBento/MagicBento.css +++ b/apps/landing/src/components/MagicBento/MagicBento.css @@ -25,22 +25,26 @@ min-height: 230px; width: 100%; max-width: 100%; - padding: 1.4em; + padding: 0; /* Remove padding since BorderGlow handles inner content */ border-radius: 16px; - border: 1px solid rgba(255, 255, 255, 0.08); - background: rgba(255, 255, 255, 0.02); - backdrop-filter: blur(12px); - -webkit-backdrop-filter: blur(12px); + background: transparent; font-weight: 300; overflow: visible; transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); - --glow-x: 50%; --glow-y: 50%; --glow-intensity: 0; --glow-radius: 200px; } +.magic-bento-card .border-glow-inner { + padding: 1.4em; + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; +} + .magic-bento-card:hover { transform: translateY(-4px); border-color: rgba(0, 245, 212, 0.3); diff --git a/apps/landing/src/styles/landing.css b/apps/landing/src/styles/landing.css index 4d5233cc9..10770abf9 100644 --- a/apps/landing/src/styles/landing.css +++ b/apps/landing/src/styles/landing.css @@ -1,10 +1,13 @@ -/* --- LANDING SPECIFIC STYLES --- */ +/* --- GLOBAL & LANDING STYLES --- */ +body, .landing-page, .pricing-page { + font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + -webkit-font-smoothing: antialiased; +} + .landing-page { --nav-height: 70px; background-color: #030303; color: #fcfcfc; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; - -webkit-font-smoothing: antialiased; overflow-x: hidden; letter-spacing: -0.01em; line-height: 1.6; From a5e39f0f732a1b9f9a103b91f7d7c00a63327804 Mon Sep 17 00:00:00 2001 From: yash-pouranik Date: Thu, 23 Jul 2026 22:54:26 +0530 Subject: [PATCH 3/6] fix: resolve SVG path error in OrbitSection and react element serialization error in MagicBento --- apps/landing/src/components/MagicBento/MagicBento.jsx | 3 ++- apps/landing/src/components/OrbitSection.jsx | 2 +- apps/landing/src/pages/index.astro | 2 -- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/landing/src/components/MagicBento/MagicBento.jsx b/apps/landing/src/components/MagicBento/MagicBento.jsx index 2d35c8f9f..02397462d 100644 --- a/apps/landing/src/components/MagicBento/MagicBento.jsx +++ b/apps/landing/src/components/MagicBento/MagicBento.jsx @@ -2,6 +2,7 @@ import { useRef, useEffect, useCallback, useState } from 'react'; import { gsap } from 'gsap'; import './MagicBento.css'; import BorderGlow from '../BorderGlow/BorderGlow'; +import { APP_SERVICES } from '../../data/services.jsx'; const DEFAULT_PARTICLE_COUNT = 12; const DEFAULT_SPOTLIGHT_RADIUS = 300; @@ -501,7 +502,7 @@ const MagicBento = ({ )} - {(cards || cardData).map((card, index) => { + {(cards || APP_SERVICES).map((card, index) => { const title = card.title; const description = card.description || card.desc; const label = card.label || card.badge; diff --git a/apps/landing/src/components/OrbitSection.jsx b/apps/landing/src/components/OrbitSection.jsx index 15c85cc15..818df5aea 100644 --- a/apps/landing/src/components/OrbitSection.jsx +++ b/apps/landing/src/components/OrbitSection.jsx @@ -101,7 +101,7 @@ const COMPATIBLE_TECHNOLOGIES = [ color: '#4353FF', svg: ( - + ), code: `\n\n\n` diff --git a/apps/landing/src/pages/index.astro b/apps/landing/src/pages/index.astro index 98f858813..8f2088e68 100644 --- a/apps/landing/src/pages/index.astro +++ b/apps/landing/src/pages/index.astro @@ -6,7 +6,6 @@ import Hyperspeed from '../components/Hyperspeed/Hyperspeed.jsx'; import MagicBento from '../components/MagicBento/MagicBento.jsx'; import StudioReplay from '../components/StudioReplay.jsx'; import OrbitSection from '../components/OrbitSection.jsx'; -import { APP_SERVICES } from '../data/services.jsx'; import { ArrowRight, Terminal, Database, HardDrive, Zap, Layers, Smartphone, Globe as GlobeIcon, Code, ChevronDown, ChevronUp } from 'lucide-react'; const HYPERSPEED_OPTIONS = { @@ -131,7 +130,6 @@ const FAQ_ITEMS = [ Date: Fri, 24 Jul 2026 01:28:48 +0530 Subject: [PATCH 4/6] fix: resolve body margins and replace default Astro favicon with urBackend logo --- apps/landing/src/layouts/Base.astro | 1 + apps/landing/src/styles/landing.css | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/apps/landing/src/layouts/Base.astro b/apps/landing/src/layouts/Base.astro index ffeb50088..62bb3326d 100644 --- a/apps/landing/src/layouts/Base.astro +++ b/apps/landing/src/layouts/Base.astro @@ -13,6 +13,7 @@ import '../styles/landing.css'; + {title} diff --git a/apps/landing/src/styles/landing.css b/apps/landing/src/styles/landing.css index 10770abf9..978d1e6ab 100644 --- a/apps/landing/src/styles/landing.css +++ b/apps/landing/src/styles/landing.css @@ -1,4 +1,10 @@ /* --- GLOBAL & LANDING STYLES --- */ +body { + margin: 0; + padding: 0; + background-color: #030303; +} + body, .landing-page, .pricing-page { font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; -webkit-font-smoothing: antialiased; From 9c23675503ba13367490cf32ce2da47ac4776c5d Mon Sep 17 00:00:00 2001 From: yash-pouranik Date: Fri, 24 Jul 2026 02:14:48 +0530 Subject: [PATCH 5/6] fix: address CodeRabbit suggestions on Astro components capitalization, newsletter interactiveness, and documentation --- apps/landing/AGENTS.md | 8 ++-- apps/landing/CLAUDE.md | 8 ++-- apps/landing/README.md | 52 ++++++++++-------------- apps/landing/package.json | 2 +- apps/landing/src/components/Footer.astro | 15 +++++++ apps/landing/src/components/Navbar.astro | 13 +++--- apps/landing/src/pages/index.astro | 4 +- 7 files changed, 54 insertions(+), 48 deletions(-) diff --git a/apps/landing/AGENTS.md b/apps/landing/AGENTS.md index c5ff42975..09557271a 100644 --- a/apps/landing/AGENTS.md +++ b/apps/landing/AGENTS.md @@ -1,12 +1,12 @@ ## Development -When starting the dev server, use background mode: +To start the local development server: -``` -astro dev --background +```bash +npm run dev ``` -Manage the background server with `astro dev stop`, `astro dev status`, and `astro dev logs`. +The server will run in the foreground at `http://localhost:4321`. ## Documentation diff --git a/apps/landing/CLAUDE.md b/apps/landing/CLAUDE.md index c5ff42975..09557271a 100644 --- a/apps/landing/CLAUDE.md +++ b/apps/landing/CLAUDE.md @@ -1,12 +1,12 @@ ## Development -When starting the dev server, use background mode: +To start the local development server: -``` -astro dev --background +```bash +npm run dev ``` -Manage the background server with `astro dev stop`, `astro dev status`, and `astro dev logs`. +The server will run in the foreground at `http://localhost:4321`. ## Documentation diff --git a/apps/landing/README.md b/apps/landing/README.md index 87b813ae7..8dc3b27e9 100644 --- a/apps/landing/README.md +++ b/apps/landing/README.md @@ -1,43 +1,33 @@ -# Astro Starter Kit: Minimal +# urBackend Landing Page (Astro) -```sh -npm create astro@latest -- --template minimal -``` - -> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! +This is the static, SEO-optimized landing page for **urBackend** built using **Astro**, **React**, and **framer-motion**. -## 🚀 Project Structure +## 🚀 Getting Started -Inside of your Astro project, you'll see the following folders and files: +To run the development server locally: -```text -/ -├── public/ -├── src/ -│ └── pages/ -│ └── index.astro -└── package.json +```bash +npm run dev ``` -Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. +The server will start at `http://localhost:4321/`. -There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. +## 📦 Project Structure -Any static assets, like images, can be placed in the `public/` directory. +- `src/layouts/Base.astro`: Base layout file containing universal SEO settings, Meta tags, JSON-LD structured schemas, and Google Fonts. +- `src/pages/index.astro`: Main landing page built using mixed static markup and hydrated React islands. +- `src/pages/pricing.astro`: Pricing tier page. +- `src/components/`: Layout components (Navbar, Footer, StudioReplay, OrbitSection) and external graphic libraries like MagicBento and Hyperspeed. +- `src/styles/landing.css`: Bundled stylesheet representing the landing page design. +- `public/`: Public domain verification files, logos, and favicons. -## 🧞 Commands +## 🛠️ Build and Deploy -All commands are run from the root of the project, from a terminal: +To test compiling the landing page locally: -| Command | Action | -| :------------------------ | :----------------------------------------------- | -| `npm install` | Installs dependencies | -| `npm run dev` | Starts local dev server at `localhost:4321` | -| `npm run build` | Build your production site to `./dist/` | -| `npm run preview` | Preview your build locally, before deploying | -| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | -| `npm run astro -- --help` | Get help using the Astro CLI | - -## 👀 Want to learn more? +```bash +npm run build +``` -Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). +This compiles static production files directly to `./dist/`. +For deployment, refer to the project's root deployment plan mapping to Vercel subdomains. diff --git a/apps/landing/package.json b/apps/landing/package.json index 7ad6290ec..ff78fe9bd 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -3,7 +3,7 @@ "type": "module", "version": "0.0.1", "engines": { - "node": ">=22.12.0" + "node": ">=20.0.0" }, "scripts": { "dev": "astro dev", diff --git a/apps/landing/src/components/Footer.astro b/apps/landing/src/components/Footer.astro index 794396af0..d1669e31d 100644 --- a/apps/landing/src/components/Footer.astro +++ b/apps/landing/src/components/Footer.astro @@ -244,3 +244,18 @@ const ADMIN_EMAIL = 'yashpouranik@gmail.com'; // Hardcoding since this is static } } + + diff --git a/apps/landing/src/components/Navbar.astro b/apps/landing/src/components/Navbar.astro index 3be2718b2..094376866 100644 --- a/apps/landing/src/components/Navbar.astro +++ b/apps/landing/src/components/Navbar.astro @@ -19,19 +19,20 @@ const NAV_ITEMS = [