Compare commits
	
		
			16 Commits
		
	
	
		
			1e55b58298
			...
			developmen
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 777447b2cf | |||
| df60aaa7a1 | |||
| 10ca28b2ec | |||
| 2988ce5335 | |||
| 4934dc7f35 | |||
| acd46171c8 | |||
| 1494a83812 | |||
| ae277d33b5 | |||
| 794605117a | |||
| 39e19a95d0 | |||
| e598e2ffb1 | |||
| 5d37cb4b3b | |||
| 607a31e96d | |||
| 50f8ae3d69 | |||
| 4056d31743 | |||
| 4b5d1c7f00 | 
							
								
								
									
										1
									
								
								out/404.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/9CTII6WCOU_fzVMYD874d/_buildManifest.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/_error":["static/chunks/pages/_error-1be831200e60c5c0.js"],sortedPages:["/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
 | 
			
		||||
							
								
								
									
										1
									
								
								out/_next/static/9CTII6WCOU_fzVMYD874d/_ssgManifest.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
 | 
			
		||||
							
								
								
									
										1
									
								
								out/_next/static/chunks/184-6dfed14c5696a3c3.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2
									
								
								out/_next/static/chunks/23-5fc4fcecc19f6f9b.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/chunks/285-10ccc2d4f959b077.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/chunks/39-cd616f8af8994b16.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										12
									
								
								out/_next/static/chunks/480-6897ccadf6c522b3.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/chunks/557-8c7520bef98ba5d9.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[698],{4631:function(e,t,i){Promise.resolve().then(i.bind(i,264)),Promise.resolve().then(i.bind(i,6365))},264:function(e,t,i){"use strict";i.d(t,{AnimatedSection:function(){return s}});var n=i(7437),r=i(2265),o=i(8733),a=i(4915);function s(e){let{children:t}=e,i=(0,r.useRef)(null),s=(0,o.Y)(i,{once:!0,margin:"-20% 0px -20% 0px"});return(0,n.jsx)(a.E.section,{ref:i,initial:{opacity:0,y:50},animate:{opacity:s?1:0,y:s?0:50},transition:{duration:.5},children:t})}},6365:function(e,t,i){"use strict";i.d(t,{default:function(){return s}});var n=i(7437),r=i(6648),o=i(4915);let a=[{name:"Download for iOS & MacOS",description:"Download Mycelium App from the Apple Store.",href:"https://apps.apple.com/us/app/mycelium-network/id6504277565",icon:{src:"/_next/static/media/apple.2d4c25bd.svg",height:80,width:80,blurWidth:0,blurHeight:0}},{name:"Download for Windows",description:"Download the Mycelium App for Windows directly from its Github repository.",href:"https://github.com/threefoldtech/myceliumflut/releases",icon:{src:"/_next/static/media/windows.6f805c4f.svg",height:80,width:80,blurWidth:0,blurHeight:0}},{name:"Download for Android",description:"Download Mycelium from the Google Play Store.",href:"https://play.google.com/store/apps/details?id=tech.threefold.mycelium&pli=1",icon:{src:"/_next/static/media/android.de815da5.svg",height:80,width:80,blurWidth:0,blurHeight:0}},{name:"Download for Linux",description:"Download the Mycelium binary for Linux directly from its Github repository.",href:"https://github.com/threefoldtech/mycelium/releases",icon:{src:"/_next/static/media/linux.2d41869b.svg",height:312,width:266,blurWidth:0,blurHeight:0}}];function s(){return(0,n.jsx)("div",{className:" py-16 sm:py-32",children:(0,n.jsxs)("div",{className:"mx-auto max-w-7xl px-6 lg:px-8",children:[(0,n.jsxs)("div",{className:"mx-auto max-w-2xl lg:mx-0",children:[(0,n.jsx)(o.E.h2,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5},className:"text-5xl lg:text-6xl font-medium tracking-tight text-gray-900",children:"Download Mycelium"}),(0,n.jsxs)(o.E.p,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.2},className:"mt-6 text-lg/8 text-gray-600",children:["Get Mycelium for Android, Windows, macOS, and iOS to securely connect, store, and interact with the decentralized network—seamlessly and efficiently. Not sure how it works?"," ",(0,n.jsx)("a",{href:"https://threefold.info/mycelium_network/docs/",className:"text-gray-900 hover:text-cyan-500 transition-colors font-semibold underline",children:"Read the manual."})]})]}),(0,n.jsx)("div",{className:"mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-none",children:(0,n.jsx)("dl",{className:"grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none md:grid-cols-2 lg:grid-cols-4",children:a.map(e=>(0,n.jsxs)("div",{className:"flex flex-col rounded-lg border border-gray-200 p-8 shadow-sm transition-all duration-300 ease-in-out hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20",children:[(0,n.jsxs)("dt",{className:"text-base/7 font-semibold text-gray-900",children:[(0,n.jsx)("div",{className:"mb-6 flex h-10 w-10 items-center justify-center",children:(0,n.jsx)(r.default,{src:e.icon,alt:"",className:"h-10 w-10"})}),e.name]}),(0,n.jsxs)("dd",{className:"mt-1 flex flex-auto flex-col text-base/7 text-gray-600",children:[(0,n.jsx)("p",{className:"flex-auto",children:e.description}),(0,n.jsx)("p",{className:"mt-6",children:(0,n.jsxs)("a",{href:e.href,className:"text-sm/6 font-semibold text-cyan-500 hover:text-cyan-500",children:["Download Now ",(0,n.jsx)("span",{"aria-hidden":"true",children:"→"})]})})]})]},e.name))})})]})})}},8733:function(e,t,i){"use strict";i.d(t,{Y:function(){return o}});var n=i(2265);i(9047);let r={some:0,all:1};function o(e,{root:t,margin:i,amount:o,once:a=!1}={}){let[s,l]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{if(!e.current||a&&s)return;let n={root:t&&t.current||void 0,margin:i,amount:o};return function(e,t,{root:i,margin:n,amount:o="some"}={}){var a;let s=("string"==typeof(a=e)?a=document.querySelectorAll(a):a instanceof Element&&(a=[a]),Array.from(a||[])),l=new WeakMap,c=new IntersectionObserver(e=>{e.forEach(e=>{let i=l.get(e.target);if(!!i!==e.isIntersecting){if(e.isIntersecting){let i=t(e);"function"==typeof i?l.set(e.target,i):c.unobserve(e.target)}else i&&(i(e),l.delete(e.target))}})},{root:i,rootMargin:n,threshold:"number"==typeof o?o:r[o]});return s.forEach(e=>c.observe(e)),()=>c.disconnect()}(e.current,()=>(l(!0),a?void 0:()=>l(!1)),n)},[t,e,i,a,o]),s}}},function(e){e.O(0,[184,971,23,744],function(){return e(e.s=4631)}),_N_E=e.O()}]);
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[95],{5352:function(e,n,s){Promise.resolve().then(s.bind(s,7582)),Promise.resolve().then(s.bind(s,2664))}},function(e){e.O(0,[501,184,480,39,557,971,23,744],function(){return e(e.s=5352)}),_N_E=e.O()}]);
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[409],{3521:function(){}},function(n){n.O(0,[971,23,744],function(){return n(n.s=3521)}),_N_E=n.O()}]);
 | 
			
		||||
							
								
								
									
										1
									
								
								out/_next/static/chunks/app/layout-0993ad388fd7ffe6.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{7499:function(e,n,_){Promise.resolve().then(_.t.bind(_,7856,23)),Promise.resolve().then(_.t.bind(_,1983,23))},1983:function(){},7856:function(e){e.exports={style:{fontFamily:"'__Inter_f367f3', '__Inter_Fallback_f367f3'",fontStyle:"normal"},className:"__className_f367f3",variable:"__variable_f367f3"}}},function(e){e.O(0,[348,971,23,744],function(){return e(e.s=7499)}),_N_E=e.O()}]);
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[160],{49:function(e,n,s){Promise.resolve().then(s.t.bind(s,231,23)),Promise.resolve().then(s.bind(s,7582)),Promise.resolve().then(s.bind(s,2664))}},function(e){e.O(0,[501,184,480,39,557,971,23,744],function(){return e(e.s=49)}),_N_E=e.O()}]);
 | 
			
		||||
							
								
								
									
										1
									
								
								out/_next/static/chunks/c16f53c3-20e5b90e9b99d9c6.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/chunks/fd9d1056-db7d16aae0f5f544.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										33
									
								
								out/_next/static/chunks/framework-aec844d2ccbe7592.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/chunks/main-app-a5f9143445897a46.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[744],{4025:function(e,n,t){Promise.resolve().then(t.t.bind(t,5751,23)),Promise.resolve().then(t.t.bind(t,6513,23)),Promise.resolve().then(t.t.bind(t,6130,23)),Promise.resolve().then(t.t.bind(t,9275,23)),Promise.resolve().then(t.t.bind(t,5324,23)),Promise.resolve().then(t.t.bind(t,1343,23))}},function(e){var n=function(n){return e(e.s=n)};e.O(0,[971,23],function(){return n(1028),n(4025)}),_N_E=e.O()}]);
 | 
			
		||||
							
								
								
									
										1
									
								
								out/_next/static/chunks/main-ded2f379822009d3.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/chunks/pages/_app-6a626577ffa902a4.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[888],{1597:function(n,_,u){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_app",function(){return u(2239)}])}},function(n){var _=function(_){return n(n.s=_)};n.O(0,[774,179],function(){return _(1597),_(6036)}),_N_E=n.O()}]);
 | 
			
		||||
							
								
								
									
										1
									
								
								out/_next/static/chunks/pages/_error-1be831200e60c5c0.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[820],{1981:function(n,_,u){(window.__NEXT_P=window.__NEXT_P||[]).push(["/_error",function(){return u(3387)}])}},function(n){n.O(0,[888,774,179],function(){return n(n.s=1981)}),_N_E=n.O()}]);
 | 
			
		||||
							
								
								
									
										1
									
								
								out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/chunks/webpack-e9b1c69035dfef44.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
!function(){"use strict";var e,t,n,r,o,u,i,c,f,a={},l={};function d(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete l[e]}return n.exports}d.m=a,e=[],d.O=function(t,n,r,o){if(n){o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u<e.length;u++){for(var n=e[u][0],r=e[u][1],o=e[u][2],c=!0,f=0;f<n.length;f++)i>=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o<i&&(i=o));if(c){e.splice(u--,1);var a=r();void 0!==a&&(t=a)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var o=Object.create(null);d.r(o);var u={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;"object"==typeof i&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(function(t){u[t]=function(){return e[t]}});return u.default=function(){return e},d.d(o,u),o},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){},d.miniCssF=function(e){},d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="_N_E:",d.l=function(e,t,n,u){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var i,c,f=document.getElementsByTagName("script"),a=0;a<f.length;a++){var l=f[a];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+n){i=l;break}}i||(c=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,d.nc&&i.setAttribute("nonce",d.nc),i.setAttribute("data-webpack",o+n),i.src=d.tu(e)),r[e]=[t];var s=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=s.bind(null,i.onerror),i.onload=s.bind(null,i.onload),c&&document.head.appendChild(i)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===u&&(u={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(u=trustedTypes.createPolicy("nextjs#bundler",u))),u},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/_next/",i={272:0,348:0},d.f.j=function(e,t){var n=d.o(i,e)?i[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(/^(272|348)$/.test(e))i[e]=0;else{var r=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=r);var o=d.p+d.u(e),u=Error();d.l(o,function(t){if(d.o(i,e)&&(0!==(n=i[e])&&(i[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;u.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",u.name="ChunkLoadError",u.type=r,u.request=o,n[1](u)}},"chunk-"+e,e)}}},d.O.j=function(e){return 0===i[e]},c=function(e,t){var n,r,o=t[0],u=t[1],c=t[2],f=0;if(o.some(function(e){return 0!==i[e]})){for(n in u)d.o(u,n)&&(d.m[n]=u[n]);if(c)var a=c(d)}for(e&&e(t);f<o.length;f++)r=o[f],d.o(i,r)&&i[r]&&i[r][0](),i[r]=0;return d.O(a)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(c.bind(null,0)),f.push=c.bind(null,f.push.bind(f))}();
 | 
			
		||||
							
								
								
									
										3
									
								
								out/_next/static/css/188b5c5417cfb897.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/19cfc7226ec3afaa-s.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/21350d82a1f187e9-s.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/8e9860b6e62d6359-s.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								out/_next/static/media/android.de815da5.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" width="80" height="80"><defs><clipPath clipPathUnits="userSpaceOnUse" id="cp1"><path d="m2.09 33.33h8.58v24h-8.58z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="cp2"><path d="m13.33 33.33h32v38.19h-32z"/></clipPath></defs><style>.a{fill:#00b8db}</style><g clip-path="url(#cp1)"><path class="a" d="m5.9 33.7c-2.1 0-3.8 1.7-3.8 3.9v15.2c0 2.2 1.7 3.9 3.8 3.9 2.1 0 3.9-1.7 3.9-3.9v-15.2c0-2.2-1.8-3.9-3.9-3.9z"/></g><path class="a" d="m52 33.7c-2.1 0-3.8 1.7-3.8 3.9v15.2c0 2.2 1.7 3.9 3.8 3.9 2.1 0 3.9-1.7 3.9-3.9v-15.2c0-2.2-1.8-3.9-3.9-3.9z"/><g clip-path="url(#cp2)"><path class="a" d="m13.6 56.9c0 2.1 1.7 3.8 3.8 3.8v7.4c0 2.2 1.8 3.9 3.9 3.9 2.1 0 3.8-1.7 3.8-3.9v-7.4h7.7v7.4c0 2.2 1.7 3.9 3.9 3.9 2.1 0 3.8-1.7 3.8-3.9v-7.4c2.1 0 3.8-1.7 3.8-3.8v-22.9h-30.7z"/></g><path class="a" d="m38.6 18l3.4-4.1c0.7-0.8 0.5-2-0.3-2.7-0.8-0.6-2-0.5-2.7 0.3l-3.7 4.5c-1.9-0.9-4.1-1.4-6.3-1.4-2.3 0-4.5 0.5-6.4 1.4l-3.6-4.5c-0.7-0.8-1.9-1-2.8-0.3-0.8 0.7-0.9 1.9-0.2 2.7l3.3 4.2c-3.4 2.8-5.7 7-5.7 11.8h30.7c0-4.8-2.2-9.1-5.7-11.9zm-13.5 6.2c-1 0-1.9-0.9-1.9-1.9 0-1.1 0.9-2 1.9-2 1.1 0 2 0.9 2 2 0 1-0.9 1.9-2 1.9zm7.7 0c-1 0-1.9-0.9-1.9-1.9 0-1.1 0.9-2 1.9-2 1.1 0 1.9 0.9 1.9 2 0 1-0.8 1.9-1.9 1.9z"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.3 KiB  | 
							
								
								
									
										1
									
								
								out/_next/static/media/apple.2d4c25bd.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" width="80" height="80"><defs><clipPath clipPathUnits="userSpaceOnUse" id="cp1"><path d="m1.33 25.33h50.59v46.27h-50.59z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="cp2"><path d="m28 7.6h13.33v13.73h-13.33z"/></clipPath></defs><style>.a{fill:#00b8db}</style><g clip-path="url(#cp1)"><path fill-rule="evenodd" class="a" d="m12.8 27c-4.8 1.5-8.5 5.4-10 10.3-1.1 3.8-1.9 10.2 1.3 18.8 0 0.1 3.1 8.6 10.8 13.2 3.7 2.2 8.5 2.1 12-0.3l0.1-0.1q0.2-0.1 0.4-0.3 0.3-0.2 0.7-0.2 0.3 0 0.6 0.2 0.3 0.2 0.5 0.4h0.1c3.5 2.4 8.2 2.5 11.9 0.2 6.9-4.1 10.1-11.2 10.7-12.8q-0.2 0-0.4 0c-3.7 0-7.1-1.4-9.7-3.9-2.6-2.6-4-6-4-9.6 0-6.4 4.5-11.8 10.6-13.2-1.5-1.2-3.2-2.2-5-2.8-8.1-2.6-13.9 3-14.6 3.6v0.1c-0.4 0.4-1 0.4-1.4 0l-0.1-0.1c-0.6-0.6-6.4-6.2-14.5-3.5z"/></g><g clip-path="url(#cp2)"><path fill-rule="evenodd" class="a" d="m31.3 10.9c-2.2 2.2-3.3 5.4-3.1 9.1 3.8 0.2 7.1-0.9 9.2-3.1 2.2-2.1 3.3-5.3 3.1-9-3.8-0.2-7 0.8-9.2 3z"/></g></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1014 B  | 
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/ba9851c3c22cd980-s.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/c5fe6dc8356a8c31-s.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/connector.2c84d527.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 112 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/df0a9ae256c0569c-s.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/e4af272ccee01ff0-s.p.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										4
									
								
								out/_next/static/media/github.2990a0ae.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
<svg xmlns="http://www.w3.org/2000/svg" aria-label="GitHub" viewBox="0 0 512 512" id="github">
 | 
			
		||||
  <rect width="512" height="512" fill="#1B1817" rx="15%"></rect>
 | 
			
		||||
  <path fill="#fff" d="M335 499c14 0 12 17 12 17H165s-2-17 12-17c13 0 16-6 16-12l-1-50c-71 16-86-28-86-28-12-30-28-37-28-37-24-16 1-16 1-16 26 2 40 26 40 26 22 39 59 28 74 22 2-17 9-28 16-35-57-6-116-28-116-126 0-28 10-51 26-69-3-6-11-32 3-67 0 0 21-7 70 26 42-12 86-12 128 0 49-33 70-26 70-26 14 35 6 61 3 67 16 18 26 41 26 69 0 98-60 120-117 126 10 8 18 24 18 48l-1 70c0 6 3 12 16 12z"></path>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 563 B  | 
							
								
								
									
										1
									
								
								out/_next/static/media/linux.2d41869b.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 266 312" width="266" height="312"><style>.a{fill:#00b8db}</style><path class="a" d="m132.6 291.6q-19.5 0-30 5.3v-0.3c-5 6-10.6 9.1-18.4 9.1-4.9 0-12.6-1.9-23-5.7-10.5-3.6-19.8-6.4-27.9-8.2-0.8-0.2-2.6-0.6-5.5-1-2.8-0.5-5.4-0.9-7.7-1.4-2.1-0.5-4.5-1.1-7.1-2.1q-3.8-1.1-6-3-2.1-1.9-2.1-4.3 0-2.4 1-5.1c0.7-1.1 1.4-2.2 2.1-3.2 0.7-1.1 1.3-2.1 1.7-3.1 0.6-0.9 1-1.8 1.4-2.8 0.4-0.9 0.8-1.8 1-2.9 0.2-1 0.4-2 0.4-3 0-1-0.4-4-1.2-9.3q-1.2-7.8-1.2-9.9c0-4.4 1-7.9 3.2-10.4 2.2-2.5 4.3-3.8 6.5-3.8h11.5c0.9 0 2.3-0.5 4.4-1.7 0.7-1.6 1.3-2.9 1.7-4.1 0.5-1.2 0.7-2.1 0.9-2.5 0.2-0.6 0.4-1.2 0.6-1.7 0.4-0.7 0.9-1.5 1.6-2.3q-1.2-1.5-1.2-3.9c0-1.1 0-2.1 0.2-2.7 0-3.6 1.7-8.7 5.3-15.4l3.5-6.3c2.9-5.4 5.1-9.4 6.7-13.4 1.7-4 3.5-10 5.5-18q2.4-10.5 11.4-21l7.5-9c5.2-6 8.6-11 10.5-15 1.9-4 2.9-9 2.9-13 0-2-0.5-8-1.6-18-1-10-1.5-20-1.5-29 0-7 0.6-12 1.9-17 1.3-5 3.6-10 7-14 3-4 7-8 13-10q9-3 21-3c3 0 6 0 9 1q4.5 0 12 3c4 2 8 4 11 7 4 3 7 8 10 13 2 6 4 12 5 20 1 5 1 10 2 17 0 6 1 10 1 13 1 3 1 7 2 12 1 4 2 8 4 11 2 4 4 8 7 12 3 5 7 10 11 16 9 10 16 21 20 32 5 10 8 23 8 36.9q0 10.3-3 20.1c2 0 3 0.8 4 2.2 1 1.4 2 4.4 3 9.1l1 7.4c1 2.2 2 4.3 5 6.1 2 1.8 4 3.3 7 4.5 2 1 5 2.4 7 4.2q3 3 3 6.3c0 3.4-1 5.9-3 7.7-2 2-4 3.4-7 4.3-2 1-6 3-12 5.8q-7.5 4.4-15 10.8l-10 8.5c-4 3.9-8 6.7-11 8.4-3 1.8-7 2.7-11 2.7l-7-0.8c-8-2.1-13-6.1-16-12.2-16-1.9-29-2.9-37-2.9m-27.9-212.3c-4-2-5-5-5-10 0-3 0-5 2-7 1-2 3-3 5-3 2 0 3 1 5 3 1 3 2 6 2 9v2h1v-1c1 0 1-2 1-6 0-3 0-6-2-9-2-3-4-5-8-5-3 0-6 2-7 5-2 4-2.4 7-2.4 12 0 4 1.4 8 5.4 12 1-1 2-1 3-2zm33-4c-1-1-1-3-1-5 0-4 0-6 2-9q3-3 6-3c3 0 5 2 7 4 1 3 2 5 2 8q0 7.5-6 9c0 0 1 1 2 1 2 0 3 1 5 2 1-6 2-10 2-15 0-6-1-10-3-13-3-3-6-4-10-4q-4.5 0-9 3c-2 3-3 5-3 8 0 5 1 9 3 13 1 0 2 1 3 1zm12 16c-13 9-23 13-31 13-7 0-14-3-20-8 1 2 2 4 3 5l6 6c4 4 9 6 14 6 7 0 15-4 25-11l9-6c2-2 4-4 4-7 0-1 0-2-1-2-1-2-6-5-16-8-9-4-16-6-20-6q-4.5 0-15 6c-6 4-10 8-10 12 0 0 1 1 2 3 6 5 12 8 18 8 8 0 18-4 31-14v2c1 0 1 1 1 1zm-39-22c0-5-2-8-5-8 0 0 0 1-1 1v2h3c0 2 1 3 1 5zm119 151c1 0 1-0.4 1-1.3 0-2.2-1-4.8-4-7.7-3-3-8-4.9-14-5.7-1-0.1-2-0.1-2-0.1-1-0.2-1-0.2-2-0.2-1-0.1-3-0.3-4-0.5 3-9.3 4-17.5 4-24.7 0-10-2-17-6-23-4-6-8-9-13-10-1 1-1 1-1 2 5 2 10 6 13 12 3 7 4 13 4 20 0 5.6-1 13.9-5 24.5-4 1.6-8 5.3-11 11.1 0 0.9 0 1.4 1 1.4 0 0 1-0.9 2-2.6 2-1.7 3-3.4 5-5.1 3-1.7 5-2.6 8-2.6 5 0 10 0.7 13 2.1 4 1.3 6 2.7 7 4.3q1.5 2.2 3 4.2c0 1.3 1 1.9 1 1.9zm-84-156c2 0 3 2 4 5h2c-1-1-1-2-1-3 0-1 0-2-1-3-1-1-2-2-3-2 0 0-1 1-2 1 0 1 1 1 1 2zm-17 15c0 1-1 1-1 1h-1c-1 0-1-1-2-2 0 0-1-1-1-2 0-1 0-1 1-1l2 1c1 1 2 2 2 3zm44 214c4 7.5 11 11.3 19 11.3q3 0 6-0.9c2-0.4 4-1.1 5-1.9 1-0.7 2-1.4 3-2.2 2-0.7 2-1.2 3-1.7l17-14.7c4-3.2 8-6 13-8.4 4-2.4 8-4 10-4.9 3-0.8 5-2 7-3.6 1-1.5 2-3.4 2-5.8 0-2.9-2-5.1-4-6.7-2-1.6-4-2.7-6-3.4-2-0.7-4-2.3-7-5-2-2.6-4-6.2-5-10.9l-1-5.8c-1-2.7-1-4.7-2-5.8 0-0.3 0-0.4-1-0.4-1 0-3 0.9-4 2.6-2 1.7-4 3.6-6 5.6-1 2-4 3.8-6 5.5-3 1.7-6 2.6-8 2.6-8 0-12-2.2-15-6.5-2-3.2-3-6.9-4-11.1-2-1.7-3-2.6-5-2.6-5 0-7 5.2-7 15.7v31.1c0 0.9-1 2.9-1 6-1 3.1-1 6.6-1 10.6l-2 11.1v0.1m-145-5.2q13.9 2 32.1 8.7c12.1 4.4 19.5 6.7 22.2 6.7 7 0 12.8-3.1 17.6-9.1 1-2 1-4.2 1-6.9q0-14.1-17.1-35.9l-6.8-9.1c-1.4-1.9-3.1-4.8-5.3-8.7-2.1-3.9-4-6.9-5.5-9-1.3-2.3-3.4-4.6-6.1-6.9-2.6-2.3-5.6-3.8-8.9-4.6-4.2 0.8-7.1 2.2-8.5 4.1-1.4 1.9-2.2 4-2.4 6.2-0.3 2.1-0.9 3.5-1.9 4.2-1 0.6-2.7 1.1-5 1.6-0.5 0-1.4 0-2.7 0.1h-2.7c-5.3 0-8.9 0.6-10.8 1.6-2.5 2.9-3.8 6.2-3.8 9.7q0 2.4 1.2 8.1c0.8 3.7 1.2 6.7 1.2 8.8 0 4.1-1.2 8.2-3.7 12.3-2.5 4.3-3.8 7.5-3.8 9.8 1 3.9 7.6 6.6 19.7 8.2m33.3-90.9c0-6.9 1.8-14.5 5.5-23.5 3.6-9 7.2-15 10.7-19-0.2-1-0.7-1-1.5-1l-1-1c-2.9 3-6.4 10-10.6 20-4.2 9-6.4 17.3-6.4 23.4 0 4.5 1.1 8.4 3.1 11.8 2.2 3.3 7.5 8.1 15.9 14.2l10.6 6.9c11.3 9.8 17.3 16.6 17.3 20.6 0 2.1-1 4.2-4 6.5-2 2.4-4.7 3.6-7 3.6-0.2 0-0.3 0.2-0.3 0.7 0 0.1 1 2.1 3.1 6 4.2 5.7 13.2 8.5 25.2 8.5 22 0 39-9 52-27 0-5 0-8.1-1-9.4v-3.7c0-6.5 1-11.4 3-14.6 2-3.2 4-4.7 7-4.7 2 0 4 0.7 6 2.2 1-7.7 1-14.4 1-20.4 0-9.1 0-16.6-2-23.6-1-6-3-11-5-15l-6-9c-2-3-3-6-5-9-1-4-2-7-2-12-3-5-5-10-8-15-2-5-4-10-6-14l-9 7c-10 7-18 10-25 10-6 0-11-1-14-5l-6-5c0 3-1 7-3 11l-6.3 12c-2.8 7-4.3 11-4.6 14-0.4 2-0.7 4-0.9 4l-7.5 15c-8.1 15-12.2 28.9-12.2 40.4 0 2.3 0.2 4.7 0.6 7.1-4.5-3.1-6.7-7.4-6.7-13zm54.7-116.7c-1 0-1 0-1-1 0-1 0-2 1-3 2 0 3-1 3-1 1 0 1 1 1 1 0 1-1 2-3 4z"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 4.2 KiB  | 
							
								
								
									
										1
									
								
								out/_next/static/media/logomark.48d31787.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 110 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/peers.62f91961.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 118 KiB  | 
							
								
								
									
										231
									
								
								out/_next/static/media/phone-frame.d4b6b62a.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,231 @@
 | 
			
		||||
<svg width="366" height="729" fill="none" xmlns="http://www.w3.org/2000/svg">
 | 
			
		||||
  <g mask="url(#mask)">
 | 
			
		||||
    <g filter="url(#a)">
 | 
			
		||||
      <path
 | 
			
		||||
        d="M363.315 64.213C363.315 22.99 341.312 1 300.092 1H66.751C25.53 1 3.528 22.99 3.528 64.213v44.68l-.857.143A2 2 0 0 0 1 111.009v24.611a2 2 0 0 0 1.671 1.973l.95.158a2.26 2.26 0 0 1-.093.236v26.173c.212.1.398.296.541.643l-1.398.233A2 2 0 0 0 1 167.009v47.611a2 2 0 0 0 1.671 1.973l1.368.228c-.139.319-.314.533-.511.653v16.637c.221.104.414.313.56.689l-1.417.236A2 2 0 0 0 1 237.009v47.611a2 2 0 0 0 1.671 1.973l1.347.225c-.135.294-.302.493-.49.607v377.681c0 41.213 22 63.208 63.223 63.208h95.074c.947-.504 2.717-.843 4.745-.843l.141.001h.194l.086-.001 33.704.005c1.849.043 3.442.37 4.323.838h95.074c41.222 0 63.223-21.999 63.223-63.212v-394.63c-.259-.275-.48-.796-.63-1.47l-.011-.133 1.655-.276A2 2 0 0 0 366 266.62v-77.611a2 2 0 0 0-1.671-1.973l-1.712-.285c.148-.839.396-1.491.698-1.811V64.213Z"
 | 
			
		||||
        fill="url(#b)" />
 | 
			
		||||
      <path
 | 
			
		||||
        d="M363.315 64.213C363.315 22.99 341.312 1 300.092 1H66.751C25.53 1 3.528 22.99 3.528 64.213v44.68l-.857.143A2 2 0 0 0 1 111.009v24.611a2 2 0 0 0 1.671 1.973l.95.158a2.26 2.26 0 0 1-.093.236v26.173c.212.1.398.296.541.643l-1.398.233A2 2 0 0 0 1 167.009v47.611a2 2 0 0 0 1.671 1.973l1.368.228c-.139.319-.314.533-.511.653v16.637c.221.104.414.313.56.689l-1.417.236A2 2 0 0 0 1 237.009v47.611a2 2 0 0 0 1.671 1.973l1.347.225c-.135.294-.302.493-.49.607v377.681c0 41.213 22 63.208 63.223 63.208h95.074c.947-.504 2.717-.843 4.745-.843l.141.001h.194l.086-.001 33.704.005c1.849.043 3.442.37 4.323.838h95.074c41.222 0 63.223-21.999 63.223-63.212v-394.63c-.259-.275-.48-.796-.63-1.47l-.011-.133 1.655-.276A2 2 0 0 0 366 266.62v-77.611a2 2 0 0 0-1.671-1.973l-1.712-.285c.148-.839.396-1.491.698-1.811V64.213Z"
 | 
			
		||||
        fill="url(#c)" />
 | 
			
		||||
    </g>
 | 
			
		||||
    <g filter="url(#d)">
 | 
			
		||||
      <path
 | 
			
		||||
        d="M5 133.772v-21.15c0-1.359-.54-2.661-1.5-3.622-.844-.073-2.496.257-2.496 2.157v24.562c.406 2.023 2.605 2.023 2.605 2.023A6.363 6.363 0 0 0 5 133.772Z"
 | 
			
		||||
        fill="url(#e)" />
 | 
			
		||||
      <path
 | 
			
		||||
        d="M5 133.772v-21.15c0-1.359-.54-2.661-1.5-3.622-.844-.073-2.496.257-2.496 2.157v24.562c.406 2.023 2.605 2.023 2.605 2.023A6.363 6.363 0 0 0 5 133.772Z"
 | 
			
		||||
        fill="url(#f)" fill-opacity=".1" />
 | 
			
		||||
    </g>
 | 
			
		||||
    <g filter="url(#g)">
 | 
			
		||||
      <path
 | 
			
		||||
        d="M5 213.772v-46.15c0-1.359-.54-2.661-1.5-3.622-.844-.073-2.496.257-2.496 2.157v49.562c.406 2.023 2.605 2.023 2.605 2.023A6.363 6.363 0 0 0 5 213.772Z"
 | 
			
		||||
        fill="url(#h)" />
 | 
			
		||||
      <path
 | 
			
		||||
        d="M5 213.772v-46.15c0-1.359-.54-2.661-1.5-3.622-.844-.073-2.496.257-2.496 2.157v49.562c.406 2.023 2.605 2.023 2.605 2.023A6.363 6.363 0 0 0 5 213.772Z"
 | 
			
		||||
        fill="url(#i)" fill-opacity=".1" />
 | 
			
		||||
    </g>
 | 
			
		||||
    <g filter="url(#j)">
 | 
			
		||||
      <path
 | 
			
		||||
        d="M5 283.772v-46.15c0-1.359-.54-2.661-1.5-3.622-.844-.073-2.496.257-2.496 2.157v49.562c.406 2.023 2.605 2.023 2.605 2.023A6.363 6.363 0 0 0 5 283.772Z"
 | 
			
		||||
        fill="url(#k)" />
 | 
			
		||||
      <path
 | 
			
		||||
        d="M5 283.772v-46.15c0-1.359-.54-2.661-1.5-3.622-.844-.073-2.496.257-2.496 2.157v49.562c.406 2.023 2.605 2.023 2.605 2.023A6.363 6.363 0 0 0 5 283.772Z"
 | 
			
		||||
        fill="url(#l)" fill-opacity=".1" />
 | 
			
		||||
    </g>
 | 
			
		||||
    <g filter="url(#m)">
 | 
			
		||||
      <path
 | 
			
		||||
        d="M362.004 266.772v-78.15a5.12 5.12 0 0 1 1.5-3.622c.844-.073 2.496.257 2.496 2.157v81.562c-.406 2.023-2.605 2.023-2.605 2.023a6.359 6.359 0 0 1-1.391-3.97Z"
 | 
			
		||||
        fill="url(#n)" />
 | 
			
		||||
      <path
 | 
			
		||||
        d="M362.004 266.772v-78.15a5.12 5.12 0 0 1 1.5-3.622c.844-.073 2.496.257 2.496 2.157v81.562c-.406 2.023-2.605 2.023-2.605 2.023a6.359 6.359 0 0 1-1.391-3.97Z"
 | 
			
		||||
        fill="url(#o)" fill-opacity=".1" />
 | 
			
		||||
    </g>
 | 
			
		||||
    <path
 | 
			
		||||
      d="M305 14.5H59c-24.577 0-44.5 19.923-44.5 44.5v615c0 23.472 19.028 42.5 42.5 42.5h250c23.472 0 42.5-19.028 42.5-42.5V59c0-24.577-19.923-44.5-44.5-44.5Z"
 | 
			
		||||
      stroke="url(#p)" stroke-opacity=".5" />
 | 
			
		||||
    <g filter="url(#q)" shape-rendering="crispEdges">
 | 
			
		||||
      <path
 | 
			
		||||
        d="M16 59c0-23.748 19.252-43 43-43h246c23.748 0 43 19.252 43 43v615c0 23.196-18.804 42-42 42H58c-23.196 0-42-18.804-42-42V59Z"
 | 
			
		||||
        fill="url(#r)" fill-opacity=".3" />
 | 
			
		||||
      <path
 | 
			
		||||
        d="M305 15.5H59c-24.024 0-43.5 19.476-43.5 43.5v615c0 23.472 19.028 42.5 42.5 42.5h248c23.472 0 42.5-19.028 42.5-42.5V59c0-24.024-19.476-43.5-43.5-43.5Z"
 | 
			
		||||
        stroke="#000" stroke-opacity=".07" />
 | 
			
		||||
    </g>
 | 
			
		||||
    <g filter="url(#s)">
 | 
			
		||||
      <rect x="154" y="29" width="56" height="5" rx="2.5" fill="#D4D4D4" />
 | 
			
		||||
    </g>
 | 
			
		||||
  </g>
 | 
			
		||||
  <defs>
 | 
			
		||||
    <mask id="mask">
 | 
			
		||||
      <rect width="366" height="729" fill="#fff" />
 | 
			
		||||
      <path fill-rule="evenodd" clip-rule="evenodd"
 | 
			
		||||
        d="M89.728 24a4.213 4.213 0 0 1 4.213 4.212v2.527c0 10.235 8.3 18.532 18.539 18.532h139.04c10.239 0 18.539-8.297 18.539-18.532v-2.527A4.212 4.212 0 0 1 274.272 24h32.864C325.286 24 340 38.71 340 56.853v618.295c0 18.144-14.714 32.853-32.864 32.853H56.864c-18.15 0-32.864-14.709-32.864-32.853V56.853C24 38.709 38.714 24 56.864 24h32.864Z"
 | 
			
		||||
        fill="#000" />
 | 
			
		||||
    </mask>
 | 
			
		||||
    <linearGradient id="e" x1="1.004" y1="123.367" x2="5" y2="123.367" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#D4D4D4" />
 | 
			
		||||
      <stop offset="1" stop-color="#E6E6E6" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="f" x1="3.002" y1="108.991" x2="3.002" y2="116.75" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#171717" />
 | 
			
		||||
      <stop offset=".783" stop-color="#171717" stop-opacity="0" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="h" x1="1.004" y1="190.867" x2="5" y2="190.867" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#D4D4D4" />
 | 
			
		||||
      <stop offset="1" stop-color="#E6E6E6" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="i" x1="3.002" y1="163.991" x2="3.002" y2="178.497" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#171717" />
 | 
			
		||||
      <stop offset=".783" stop-color="#171717" stop-opacity="0" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="k" x1="1.004" y1="260.867" x2="5" y2="260.867" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#D4D4D4" />
 | 
			
		||||
      <stop offset="1" stop-color="#E6E6E6" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="l" x1="3.002" y1="233.991" x2="3.002" y2="248.497" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#171717" />
 | 
			
		||||
      <stop offset=".783" stop-color="#171717" stop-opacity="0" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="n" x1="362.004" y1="226.25" x2="366" y2="226.25" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop offset=".124" stop-color="#E6E6E6" />
 | 
			
		||||
      <stop offset="1" stop-color="#D4D4D4" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="o" x1="364.002" y1="184.991" x2="364.002" y2="208.134" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#171717" />
 | 
			
		||||
      <stop offset=".783" stop-color="#171717" stop-opacity="0" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <linearGradient id="p" x1="182" y1="15" x2="182" y2="716" gradientUnits="userSpaceOnUse">
 | 
			
		||||
      <stop stop-color="#fff" />
 | 
			
		||||
      <stop offset=".381" stop-color="#fff" stop-opacity="0" />
 | 
			
		||||
    </linearGradient>
 | 
			
		||||
    <filter id="a" x="-1" y="-1" width="367" height="730.314" filterUnits="userSpaceOnUse"
 | 
			
		||||
      color-interpolation-filters="sRGB">
 | 
			
		||||
      <feFlood flood-opacity="0" result="BackgroundImageFix" />
 | 
			
		||||
      <feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dy="-2" />
 | 
			
		||||
      <feGaussianBlur stdDeviation="1.5" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" />
 | 
			
		||||
      <feBlend in2="shape" result="effect1_innerShadow_104_2007" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="-2" />
 | 
			
		||||
      <feGaussianBlur stdDeviation="2" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0.0901961 0 0 0 0 0.0901961 0 0 0 0 0.0901961 0 0 0 0.17 0" />
 | 
			
		||||
      <feBlend in2="effect1_innerShadow_104_2007" result="effect2_innerShadow_104_2007" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dy="2" />
 | 
			
		||||
      <feGaussianBlur stdDeviation=".5" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.6 0" />
 | 
			
		||||
      <feBlend in2="effect2_innerShadow_104_2007" result="effect3_innerShadow_104_2007" />
 | 
			
		||||
    </filter>
 | 
			
		||||
    <filter id="d" x="1.004" y="108.991" width="4.996" height="28.751" filterUnits="userSpaceOnUse"
 | 
			
		||||
      color-interpolation-filters="sRGB">
 | 
			
		||||
      <feFlood flood-opacity="0" result="BackgroundImageFix" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="out" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0" />
 | 
			
		||||
      <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_104_2007" />
 | 
			
		||||
      <feBlend in="SourceGraphic" in2="effect1_dropShadow_104_2007" result="shape" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="-1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
 | 
			
		||||
      <feBlend in2="shape" result="effect2_innerShadow_104_2007" />
 | 
			
		||||
    </filter>
 | 
			
		||||
    <filter id="g" x="1.004" y="163.991" width="4.996" height="53.751" filterUnits="userSpaceOnUse"
 | 
			
		||||
      color-interpolation-filters="sRGB">
 | 
			
		||||
      <feFlood flood-opacity="0" result="BackgroundImageFix" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="out" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0" />
 | 
			
		||||
      <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_104_2007" />
 | 
			
		||||
      <feBlend in="SourceGraphic" in2="effect1_dropShadow_104_2007" result="shape" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="-1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
 | 
			
		||||
      <feBlend in2="shape" result="effect2_innerShadow_104_2007" />
 | 
			
		||||
    </filter>
 | 
			
		||||
    <filter id="j" x="1.004" y="233.991" width="4.996" height="53.751" filterUnits="userSpaceOnUse"
 | 
			
		||||
      color-interpolation-filters="sRGB">
 | 
			
		||||
      <feFlood flood-opacity="0" result="BackgroundImageFix" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="out" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0" />
 | 
			
		||||
      <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_104_2007" />
 | 
			
		||||
      <feBlend in="SourceGraphic" in2="effect1_dropShadow_104_2007" result="shape" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="-1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
 | 
			
		||||
      <feBlend in2="shape" result="effect2_innerShadow_104_2007" />
 | 
			
		||||
    </filter>
 | 
			
		||||
    <filter id="m" x="361.004" y="184.991" width="4.996" height="85.751" filterUnits="userSpaceOnUse"
 | 
			
		||||
      color-interpolation-filters="sRGB">
 | 
			
		||||
      <feFlood flood-opacity="0" result="BackgroundImageFix" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="-1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="out" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0" />
 | 
			
		||||
      <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_104_2007" />
 | 
			
		||||
      <feBlend in="SourceGraphic" in2="effect1_dropShadow_104_2007" result="shape" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dx="1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" />
 | 
			
		||||
      <feBlend in2="shape" result="effect2_innerShadow_104_2007" />
 | 
			
		||||
    </filter>
 | 
			
		||||
    <filter id="q" x="15" y="15" width="334" height="703" filterUnits="userSpaceOnUse"
 | 
			
		||||
      color-interpolation-filters="sRGB">
 | 
			
		||||
      <feFlood flood-opacity="0" result="BackgroundImageFix" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dy="1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="out" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0" />
 | 
			
		||||
      <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_104_2007" />
 | 
			
		||||
      <feBlend in="SourceGraphic" in2="effect1_dropShadow_104_2007" result="shape" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dy="1" />
 | 
			
		||||
      <feGaussianBlur stdDeviation="2.5" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0" />
 | 
			
		||||
      <feBlend in2="shape" result="effect2_innerShadow_104_2007" />
 | 
			
		||||
    </filter>
 | 
			
		||||
    <filter id="s" x="154" y="29" width="56" height="6" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
 | 
			
		||||
      <feFlood flood-opacity="0" result="BackgroundImageFix" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dy="1" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="out" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.3 0" />
 | 
			
		||||
      <feBlend in2="BackgroundImageFix" result="effect1_dropShadow_104_2007" />
 | 
			
		||||
      <feBlend in="SourceGraphic" in2="effect1_dropShadow_104_2007" result="shape" />
 | 
			
		||||
      <feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha" />
 | 
			
		||||
      <feOffset dy="1" />
 | 
			
		||||
      <feGaussianBlur stdDeviation=".5" />
 | 
			
		||||
      <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1" />
 | 
			
		||||
      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
 | 
			
		||||
      <feBlend in2="shape" result="effect2_innerShadow_104_2007" />
 | 
			
		||||
    </filter>
 | 
			
		||||
    <radialGradient id="b" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse"
 | 
			
		||||
      gradientTransform="matrix(0 727 -642 0 184 1)">
 | 
			
		||||
      <stop stop-color="#FAFAFA" />
 | 
			
		||||
      <stop offset="1" stop-color="#E6E6E6" />
 | 
			
		||||
    </radialGradient>
 | 
			
		||||
    <radialGradient id="c" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse"
 | 
			
		||||
      gradientTransform="matrix(0 319 -295.5 0 183.5 1)">
 | 
			
		||||
      <stop stop-color="#fff" />
 | 
			
		||||
      <stop offset=".533" stop-color="#fff" stop-opacity="0" />
 | 
			
		||||
    </radialGradient>
 | 
			
		||||
    <radialGradient id="r" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse"
 | 
			
		||||
      gradientTransform="matrix(0 689 -326.783 0 182 27)">
 | 
			
		||||
      <stop offset=".319" stop-color="#D4D4D4" />
 | 
			
		||||
      <stop offset="1" stop-color="#E6E6E6" />
 | 
			
		||||
    </radialGradient>
 | 
			
		||||
  </defs>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/phoneframe.752ae4b9.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 537 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								out/_next/static/media/setting.d924421e.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 107 KiB  | 
							
								
								
									
										1
									
								
								out/_next/static/media/windows.6f805c4f.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
			
		||||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" width="80" height="80"><defs><clipPath clipPathUnits="userSpaceOnUse" id="cp1"><path d="m2.92 11.31h25.08v26.02h-25.08z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="cp2"><path d="m34.67 11.31h25.25v26.02h-25.25z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="cp3"><path d="m2.92 42.67h25.08v25.64h-25.08z"/></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="cp4"><path d="m34.67 42.67h25.25v25.64h-25.25z"/></clipPath></defs><style>.a{fill:#00b8db}</style><g clip-path="url(#cp1)"><path class="a" d="m26.9 11.3h-22.8c-0.7 0-1.2 0.5-1.2 1.2v22.8c0 0.6 0.5 1.1 1.2 1.1h22.8c0.6 0 1.1-0.5 1.1-1.1v-22.8c0-0.7-0.5-1.2-1.1-1.2z"/></g><g clip-path="url(#cp2)"><path class="a" d="m58.8 11.3h-22.8c-0.6 0-1.2 0.5-1.2 1.2v22.8c0 0.6 0.6 1.1 1.2 1.1h22.8c0.6 0 1.1-0.5 1.1-1.1v-22.8c0-0.7-0.5-1.2-1.1-1.2z"/></g><g clip-path="url(#cp3)"><path class="a" d="m26.9 43.2h-22.8c-0.7 0-1.2 0.5-1.2 1.2v22.8c0 0.6 0.5 1.1 1.2 1.1h22.8c0.6 0 1.1-0.5 1.1-1.1v-22.8c0-0.7-0.5-1.2-1.1-1.2z"/></g><g clip-path="url(#cp4)"><path class="a" d="m58.8 43.2h-22.8c-0.6 0-1.2 0.5-1.2 1.2v22.8c0 0.6 0.6 1.1 1.2 1.1h22.8c0.6 0 1.1-0.5 1.1-1.1v-22.8c0-0.7-0.5-1.2-1.1-1.2z"/></g></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
							
								
								
									
										1
									
								
								out/download.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										10
									
								
								out/download.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								out/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										1
									
								
								out/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										16
									
								
								out/index.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										48
									
								
								src/app/api/subscribe/route.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,48 @@
 | 
			
		||||
import { NextRequest, NextResponse } from 'next/server';
 | 
			
		||||
 | 
			
		||||
export async function POST(req: NextRequest) {
 | 
			
		||||
  const { email } = await req.json();
 | 
			
		||||
 | 
			
		||||
  if (!email) {
 | 
			
		||||
    return NextResponse.json({ error: 'Email is required' }, { status: 400 });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const MAILERLITE_API_KEY = process.env.MAILERLITE_API_KEY;
 | 
			
		||||
  const MAILERLITE_GROUP_ID = process.env.MAILERLITE_GROUP_ID;
 | 
			
		||||
 | 
			
		||||
  if (!MAILERLITE_API_KEY || !MAILERLITE_GROUP_ID) {
 | 
			
		||||
    return NextResponse.json(
 | 
			
		||||
      { error: 'MailerLite API key or Group ID are not configured' },
 | 
			
		||||
      { status: 500 },
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    const response = await fetch(
 | 
			
		||||
      `https://api.mailerlite.com/api/v2/groups/${MAILERLITE_GROUP_ID}/subscribers`,
 | 
			
		||||
      {
 | 
			
		||||
        method: 'POST',
 | 
			
		||||
        headers: {
 | 
			
		||||
          'Content-Type': 'application/json',
 | 
			
		||||
          'X-MailerLite-ApiKey': MAILERLITE_API_KEY,
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify({ email }),
 | 
			
		||||
      },
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (!response.ok) {
 | 
			
		||||
      const errorData = await response.json();
 | 
			
		||||
      return NextResponse.json(
 | 
			
		||||
        { error: errorData.error.message || 'Something went wrong' },
 | 
			
		||||
        { status: response.status },
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return NextResponse.json({ success: true }, { status: 200 });
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    return NextResponse.json(
 | 
			
		||||
      { error: 'An unexpected error occurred' },
 | 
			
		||||
      { status: 500 },
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB  | 
@@ -17,6 +17,9 @@ export const metadata: Metadata = {
 | 
			
		||||
  },
 | 
			
		||||
  description:
 | 
			
		||||
    'Discover Mycelium, an end-to-end encrypted IPv6 overlay network. The future of secure, efficient, and scalable networking.',
 | 
			
		||||
  icons: {
 | 
			
		||||
    icon: '/favicon.ico',
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default function RootLayout({
 | 
			
		||||
@@ -25,7 +28,7 @@ export default function RootLayout({
 | 
			
		||||
  children: React.ReactNode
 | 
			
		||||
}) {
 | 
			
		||||
  return (
 | 
			
		||||
    <html lang="en" className={clsx('bg-gray-50 antialiased', inter.variable)}>
 | 
			
		||||
    <html lang="en" className={clsx('bg-gray-900 antialiased', inter.variable)}>
 | 
			
		||||
      <body>{children}</body>
 | 
			
		||||
    </html>
 | 
			
		||||
  )
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ export function About() {
 | 
			
		||||
      className="relative overflow-hidden bg-gray-900 py-20 lg:py-32 lg:top-0 top-0"
 | 
			
		||||
    >
 | 
			
		||||
      <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
 | 
			
		||||
        <CircleBackground color="#fff" className="animate-spin-slower" />
 | 
			
		||||
        <CircleBackground color="#06b6d4" className="animate-spin-slower" />
 | 
			
		||||
      </div>
 | 
			
		||||
      <Container className="relative">
 | 
			
		||||
        <div className="mx-auto max-w-3xl text-center">
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ export function AndroidLink({
 | 
			
		||||
      href="#"
 | 
			
		||||
      aria-label="Download for Android"
 | 
			
		||||
      className={clsx(
 | 
			
		||||
        'flex items-center rounded-lg transition-colors px-4 py-2',
 | 
			
		||||
        'flex items-center rounded-lg px-4 py-2 transition-all hover:scale-105',
 | 
			
		||||
        color === 'black'
 | 
			
		||||
          ? 'bg-gray-800 text-white hover:bg-gray-900'
 | 
			
		||||
          : 'bg-white text-gray-900 hover:bg-gray-50',
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ export function AppStoreLink({
 | 
			
		||||
      href="https://apps.apple.com/us/app/mycelium-network/id6504277565"
 | 
			
		||||
      aria-label="Download on the App Store"
 | 
			
		||||
      className={clsx(
 | 
			
		||||
        'rounded-lg transition-colors',
 | 
			
		||||
        'rounded-lg transition-all hover:scale-105',
 | 
			
		||||
        color === 'black'
 | 
			
		||||
          ? 'bg-gray-800 text-white hover:bg-gray-900'
 | 
			
		||||
          : 'bg-white text-gray-900 hover:bg-gray-50',
 | 
			
		||||
 
 | 
			
		||||
@@ -14,10 +14,11 @@ const variantStyles = {
 | 
			
		||||
    white:
 | 
			
		||||
      'bg-white text-cyan-900 hover:bg-white/90 active:bg-white/90 active:text-cyan-900/70',
 | 
			
		||||
    gray: 'bg-gray-800 text-white hover:bg-gray-900 active:bg-gray-800 active:text-white/80',
 | 
			
		||||
    green: 'bg-green-500 text-white hover:bg-green-600',
 | 
			
		||||
  },
 | 
			
		||||
  outline: {
 | 
			
		||||
    gray: 'border-gray-300 text-gray-700 hover:text-gray-500 hover:border-gray-400 active:bg-gray-100 active:text-gray-700/80',
 | 
			
		||||
    white: 'border-gray-300 text-white hover:text-gray-200 hover:border-gray-400 active:bg-gray-100 active:text-gray-700/80', 
 | 
			
		||||
    gray: 'border-gray-300 text-gray-700 hover:border-cyan-500 active:border-cyan-500',
 | 
			
		||||
    white: 'border-gray-300 text-white hover:border-cyan-500 active:border-cyan-500',
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -12,17 +12,17 @@ export function CallToAction() {
 | 
			
		||||
      className="relative overflow-hidden bg-gray-900 py-20 sm:py-28"
 | 
			
		||||
    >
 | 
			
		||||
      <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
 | 
			
		||||
        <CircleBackground color="#fff" className="animate-spin-slower" />
 | 
			
		||||
        <CircleBackground color="#06b6d4" className="animate-spin-slower" />
 | 
			
		||||
      </div>
 | 
			
		||||
      <Container className="relative">
 | 
			
		||||
        <div className="mx-auto max-w-2xl sm:text-center">
 | 
			
		||||
        <div className="mx-auto max-w-2xl text-center">
 | 
			
		||||
          <h2 className="text-3xl lg:text-4xl font-medium tracking-tight text-white sm:text-4xl">
 | 
			
		||||
            Get Started Today
 | 
			
		||||
          </h2>
 | 
			
		||||
          <p className="mt-6 text-lg text-gray-300">
 | 
			
		||||
            Download the Mycelium app and step into the future of secure, peer-to-peer networking; fast, private, and decentralized.
 | 
			
		||||
          </p>
 | 
			
		||||
          <div className="mt-8 grid grid-cols-2 justify-items-center gap-4 sm:flex sm:justify-center">
 | 
			
		||||
          <div className="mt-10 flex flex-wrap justify-center gap-x-6 gap-y-4">
 | 
			
		||||
            <AppStoreLink color="white" />
 | 
			
		||||
            <WindowsLink color="white" />
 | 
			
		||||
            <AndroidLink color="white" />
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,36 @@
 | 
			
		||||
import { CheckIcon } from '@heroicons/react/20/solid'
 | 
			
		||||
import {
 | 
			
		||||
  BookOpenIcon,
 | 
			
		||||
  LifebuoyIcon,
 | 
			
		||||
  ChatBubbleOvalLeftEllipsisIcon,
 | 
			
		||||
  UserGroupIcon,
 | 
			
		||||
} from '@heroicons/react/24/outline';
 | 
			
		||||
 | 
			
		||||
const features = [
 | 
			
		||||
  {
 | 
			
		||||
    name: 'Documentation',
 | 
			
		||||
    description: 'Documentation for Mycelium.',
 | 
			
		||||
    href: 'https://threefold.info/mycelium_network/docs/',
 | 
			
		||||
    icon: BookOpenIcon,
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    name: 'Support',
 | 
			
		||||
    description: 'Talk to an expert.',
 | 
			
		||||
    href: 'https://threefoldfaq.crisp.help/en/',
 | 
			
		||||
    icon: LifebuoyIcon,
 | 
			
		||||
  },
 | 
			
		||||
  { name: 'Support', description: 'Talk to an expert.' },
 | 
			
		||||
  {
 | 
			
		||||
    name: 'Forum',
 | 
			
		||||
    description: 'Forum for all your questions.',
 | 
			
		||||
    href: 'https://forum.threefold.io/',
 | 
			
		||||
    icon: ChatBubbleOvalLeftEllipsisIcon,
 | 
			
		||||
  },
 | 
			
		||||
  { name: 'Community', description: 'Join our Developers community on telegram.' },
 | 
			
		||||
 | 
			
		||||
]
 | 
			
		||||
  {
 | 
			
		||||
    name: 'Community',
 | 
			
		||||
    description: 'Join our Developers community on telegram.',
 | 
			
		||||
    href: 'https://t.me/threefoldtesting',
 | 
			
		||||
    icon: UserGroupIcon,
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export function DevHub() {
 | 
			
		||||
  return (
 | 
			
		||||
@@ -21,26 +39,35 @@ export function DevHub() {
 | 
			
		||||
        <div className="mx-auto grid max-w-2xl grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:mx-0 lg:max-w-none lg:grid-cols-5">
 | 
			
		||||
          <div className="col-span-2">
 | 
			
		||||
            <h2 className="text-base/7 font-semibold text-cyan-500 mb-2">Get Started</h2>
 | 
			
		||||
            <p className="text-4xl font-semibold tracking-tight text-pretty text-white sm:text-5xl">
 | 
			
		||||
            <p className="text-3xl lg:text-4xl font-medium tracking-tight text-white">
 | 
			
		||||
              Developer Hub
 | 
			
		||||
            </p>
 | 
			
		||||
            <p className="mt-6 text-base/7 text-gray-300">
 | 
			
		||||
               Our Developer Hub is a resource center for developers looking to build on top of Mycelium. Join our Developers community on telegram to get started.
 | 
			
		||||
            <p className="mt-6 text-lg text-gray-300">
 | 
			
		||||
              Our Developer Hub is a resource center for developers looking to build on top of Mycelium. Join our Developers community on telegram to get started.
 | 
			
		||||
            </p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <dl className="col-span-3 grid grid-cols-1 gap-x-8 gap-y-10 text-base/7 text-gray-400 sm:grid-cols-2 lg:gap-y-16">
 | 
			
		||||
          <dl className="col-span-3 grid grid-cols-1 gap-8 sm:grid-cols-2">
 | 
			
		||||
            {features.map((feature) => (
 | 
			
		||||
              <div key={feature.name} className="relative pl-9">
 | 
			
		||||
              <a
 | 
			
		||||
                key={feature.name}
 | 
			
		||||
                href={feature.href}
 | 
			
		||||
                target="_blank"
 | 
			
		||||
                rel="noopener noreferrer"
 | 
			
		||||
                className="block rounded-2xl border border-gray-700 p-6 shadow-sm transition-all duration-300 ease-in-out hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20 hover:bg-gray-800"
 | 
			
		||||
              >
 | 
			
		||||
                <feature.icon
 | 
			
		||||
                  aria-hidden="true"
 | 
			
		||||
                  className="h-6 w-6 flex-none text-cyan-500 mb-4"
 | 
			
		||||
                />
 | 
			
		||||
                <dt className="font-semibold text-white">
 | 
			
		||||
                  <CheckIcon aria-hidden="true" className="absolute top-1 left-0 size-5 text-indigo-400" />
 | 
			
		||||
                  {feature.name}
 | 
			
		||||
                </dt>
 | 
			
		||||
                <dd className="mt-2">{feature.description}</dd>
 | 
			
		||||
              </div>
 | 
			
		||||
                <dd className="mt-2 text-gray-400">{feature.description}</dd>
 | 
			
		||||
              </a>
 | 
			
		||||
            ))}
 | 
			
		||||
          </dl>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  )
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,7 @@
 | 
			
		||||
'use client'
 | 
			
		||||
 | 
			
		||||
import Image from 'next/image';
 | 
			
		||||
import { motion } from 'framer-motion';
 | 
			
		||||
import appleIcon from '@/images/apple.svg';
 | 
			
		||||
import windowsIcon from '@/images/windows.svg';
 | 
			
		||||
import androidIcon from '@/images/android.svg';
 | 
			
		||||
@@ -36,30 +39,40 @@ export default function DownloadHero() {
 | 
			
		||||
    <div className=" py-16 sm:py-32">
 | 
			
		||||
      <div className="mx-auto max-w-7xl px-6 lg:px-8">
 | 
			
		||||
        <div className="mx-auto max-w-2xl lg:mx-0">
 | 
			
		||||
          <h2 className="text-5xl lg:text-6xl font-medium tracking-tight text-gray-900">
 | 
			
		||||
          <motion.h2
 | 
			
		||||
            initial={{ opacity: 0, y: 20 }}
 | 
			
		||||
            animate={{ opacity: 1, y: 0 }}
 | 
			
		||||
            transition={{ duration: 0.5 }}
 | 
			
		||||
            className="text-5xl lg:text-6xl font-medium tracking-tight text-gray-100"
 | 
			
		||||
          >
 | 
			
		||||
            Download Mycelium
 | 
			
		||||
          </h2>
 | 
			
		||||
          <p className="mt-6 text-lg/8 text-gray-600">
 | 
			
		||||
          </motion.h2>
 | 
			
		||||
          <motion.p
 | 
			
		||||
            initial={{ opacity: 0, y: 20 }}
 | 
			
		||||
            animate={{ opacity: 1, y: 0 }}
 | 
			
		||||
            transition={{ duration: 0.5, delay: 0.2 }}
 | 
			
		||||
            className="mt-6 text-lg/8 text-gray-300"
 | 
			
		||||
          >
 | 
			
		||||
            Get Mycelium for Android, Windows, macOS, and iOS to securely connect, store, and interact with the decentralized network—seamlessly and efficiently. Not sure how it works?{' '}
 | 
			
		||||
            <a href="https://threefold.info/mycelium_network/docs/" className="text-cyan-500 hover:text-cyan-600 font-semibold underline">
 | 
			
		||||
            <a href="https://threefold.info/mycelium_network/docs/" className="text-gray-200 hover:text-cyan-500 transition-colors font-semibold underline">
 | 
			
		||||
              Read the manual.
 | 
			
		||||
            </a>
 | 
			
		||||
          </p>
 | 
			
		||||
          </motion.p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div className="mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-none">
 | 
			
		||||
          <dl className="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none md:grid-cols-2 lg:grid-cols-4">
 | 
			
		||||
            {features.map((feature) => (
 | 
			
		||||
              <div
 | 
			
		||||
                key={feature.name}
 | 
			
		||||
                className="flex flex-col rounded-lg border border-gray-200 p-8 shadow-sm transition-all duration-300 ease-in-out hover:bg-gray-50 hover:shadow-md hover:scale-105"
 | 
			
		||||
                className="flex flex-col rounded-lg border border-gray-700 p-8 shadow-sm transition-all duration-300 ease-in-out hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20"
 | 
			
		||||
              >
 | 
			
		||||
                <dt className="text-base/7 font-semibold text-gray-900">
 | 
			
		||||
                <dt className="text-base/7 font-semibold text-gray-100">
 | 
			
		||||
                  <div className="mb-6 flex h-10 w-10 items-center justify-center">
 | 
			
		||||
                    <Image src={feature.icon} alt="" className="h-10 w-10" />
 | 
			
		||||
                  </div>
 | 
			
		||||
                  {feature.name}
 | 
			
		||||
                </dt>
 | 
			
		||||
                <dd className="mt-1 flex flex-auto flex-col text-base/7 text-gray-600">
 | 
			
		||||
                <dd className="mt-1 flex flex-auto flex-col text-base/7 text-gray-400">
 | 
			
		||||
                  <p className="flex-auto">{feature.description}</p>
 | 
			
		||||
                  <p className="mt-6">
 | 
			
		||||
                    <a href={feature.href} className="text-sm/6 font-semibold text-cyan-500 hover:text-cyan-500">
 | 
			
		||||
 
 | 
			
		||||
@@ -4,10 +4,8 @@ import { ArrowDownTrayIcon } from '@heroicons/react/24/solid'
 | 
			
		||||
export function DownloadLink() {
 | 
			
		||||
  return (
 | 
			
		||||
    <Link
 | 
			
		||||
      href="https://github.com/threefoldtech/mycelium/releases"
 | 
			
		||||
      href="/download"
 | 
			
		||||
      aria-label="Download Mycelium"
 | 
			
		||||
      target="_blank"
 | 
			
		||||
      rel="noopener noreferrer"
 | 
			
		||||
      className="inline-flex items-center rounded-lg bg-cyan-500 px-4 py-2 text-sm font-semibold text-white hover:bg-cyan-600 transition-colors"
 | 
			
		||||
    >
 | 
			
		||||
      <ArrowDownTrayIcon className="h-5 w-5 mr-2" />
 | 
			
		||||
 
 | 
			
		||||
@@ -67,8 +67,8 @@ export function Faqs() {
 | 
			
		||||
          <p className="mt-2 text-lg text-gray-600">
 | 
			
		||||
            If you have anything else you want to ask,{' '}
 | 
			
		||||
            <a
 | 
			
		||||
              href="https://t.me/threefold"
 | 
			
		||||
              className="text-gray-900 underline"
 | 
			
		||||
              href="https://threefoldfaq.crisp.help/en/"
 | 
			
		||||
              className="text-gray-900 hover:text-cyan-500 transition-colors font-semibold underline"
 | 
			
		||||
            >
 | 
			
		||||
              reach out to us
 | 
			
		||||
            </a>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,17 +9,17 @@ export function Features() {
 | 
			
		||||
    <section id="features" className=" py-24">
 | 
			
		||||
      <div className="mx-auto max-w-2xl px-6 lg:max-w-7xl lg:px-8">
 | 
			
		||||
        <h2 className="text-base/7 font-semibold text-cyan-500">Core Components</h2>
 | 
			
		||||
        <p className="mt-2 max-w-4xl text-3xl lg:text-4xl font-medium tracking-tight  text-pretty text-gray-950">
 | 
			
		||||
        <p className="mt-2 max-w-2xl text-3xl lg:text-4xl font-medium tracking-tight  text-pretty text-gray-950">
 | 
			
		||||
          Network Capabilities
 | 
			
		||||
        </p>
 | 
			
		||||
        <p className="mt-4 max-w-xl text-lg text-gray-600">
 | 
			
		||||
        <p className="mt-4 max-w-4xl text-lg text-gray-600">
 | 
			
		||||
            Built for resilience and autonomy, the Mycelium Network dynamically connects nodes through intelligent routing, proxy discovery, and decentralized delivery.
 | 
			
		||||
        </p>
 | 
			
		||||
        <p className="mt-2 max-w-xl text-lg text-gray-600">
 | 
			
		||||
        <p className="mt-2 max-w-4xl text-lg text-gray-600">
 | 
			
		||||
Each component — from message passing to content distribution — works in harmony to create a fully self-healing, self-optimizing data mesh.
 | 
			
		||||
        </p>  
 | 
			
		||||
        <div className="mt-10 grid grid-cols-1 gap-x-4 gap-y-8 sm:mt-16 lg:grid-cols-6 lg:grid-rows-2">
 | 
			
		||||
          <div className="relative lg:col-span-3 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
          <div className="group relative lg:col-span-3 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
            <div className="absolute inset-0 rounded-lg bg-white max-lg:rounded-t-4xl lg:rounded-tl-4xl" />
 | 
			
		||||
            <div className="relative flex h-full flex-col overflow-hidden rounded-[calc(var(--radius-lg)+1px)] max-lg:rounded-t-[calc(2rem+1px)] lg:rounded-tl-[calc(2rem+1px)]">
 | 
			
		||||
              <Pathfinding />
 | 
			
		||||
@@ -34,9 +34,9 @@ Each component — from message passing to content distribution — works in har
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 max-lg:rounded-t-4xl lg:rounded-tl-4xl" />
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 max-lg:rounded-t-4xl lg:rounded-tl-4xl group-hover:outline-cyan-500 group-hover:shadow-lg group-hover:shadow-cyan-500/20" />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div className="relative lg:col-span-3 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
          <div className="group relative lg:col-span-3 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
            <div className="absolute inset-0 rounded-lg bg-white lg:rounded-tr-4xl" />
 | 
			
		||||
            <div className="relative flex h-full flex-col overflow-hidden rounded-[calc(var(--radius-lg)+1px)] lg:rounded-tr-[calc(2rem+1px)]">
 | 
			
		||||
              <MessageBus />
 | 
			
		||||
@@ -51,9 +51,9 @@ Each component — from message passing to content distribution — works in har
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 lg:rounded-tr-4xl" />
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 lg:rounded-tr-4xl group-hover:outline-cyan-500 group-hover:shadow-lg group-hover:shadow-cyan-500/20" />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div className="relative lg:col-span-2 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
          <div className="group relative lg:col-span-2 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
            <div className="absolute inset-0 rounded-lg bg-white lg:rounded-bl-4xl" />
 | 
			
		||||
            <div className="relative flex h-full flex-col overflow-hidden rounded-[calc(var(--radius-lg)+1px)] lg:rounded-bl-[calc(2rem+1px)]">
 | 
			
		||||
              <ProxyDetection className="h-80" />
 | 
			
		||||
@@ -68,9 +68,9 @@ Each component — from message passing to content distribution — works in har
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 lg:rounded-bl-4xl" />
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 lg:rounded-bl-4xl group-hover:outline-cyan-500 group-hover:shadow-lg group-hover:shadow-cyan-500/20" />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div className="relative lg:col-span-2 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
          <div className="group relative lg:col-span-2 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
            <div className="absolute inset-0 rounded-lg bg-white" />
 | 
			
		||||
            <div className="relative flex h-full flex-col overflow-hidden rounded-[calc(var(--radius-lg)+1px)]">
 | 
			
		||||
              <ProxyForwarding className="h-80" />
 | 
			
		||||
@@ -85,9 +85,9 @@ Each component — from message passing to content distribution — works in har
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5" />
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 group-hover:outline-cyan-500 group-hover:shadow-lg group-hover:shadow-cyan-500/20" />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div className="relative lg:col-span-2 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
          <div className="group relative lg:col-span-2 transition-all duration-300 ease-in-out hover:scale-105">
 | 
			
		||||
            <div className="absolute inset-0 rounded-lg bg-white max-lg:rounded-b-4xl lg:rounded-br-4xl" />
 | 
			
		||||
            <div className="relative flex h-full flex-col overflow-hidden rounded-[calc(var(--radius-lg)+1px)] max-lg:rounded-b-[calc(2rem+1px)] lg:rounded-br-[calc(2rem+1px)]">
 | 
			
		||||
              <ContentDistribution className="h-80" />
 | 
			
		||||
@@ -102,7 +102,7 @@ Each component — from message passing to content distribution — works in har
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 max-lg:rounded-b-4xl lg:rounded-br-4xl" />
 | 
			
		||||
            <div className="pointer-events-none absolute inset-0 rounded-lg shadow-sm outline outline-black/5 max-lg:rounded-b-4xl lg:rounded-br-4xl group-hover:outline-cyan-500 group-hover:shadow-lg group-hover:shadow-cyan-500/20" />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,26 +1,66 @@
 | 
			
		||||
'use client'
 | 
			
		||||
 | 
			
		||||
import Image from 'next/image'
 | 
			
		||||
import Link from 'next/link'
 | 
			
		||||
import { useState } from 'react'
 | 
			
		||||
 | 
			
		||||
import { Button } from '@/components/Button'
 | 
			
		||||
import { Container } from '@/components/Container'
 | 
			
		||||
import { TextField } from '@/components/Fields'
 | 
			
		||||
import { NavLinks } from '@/components/NavLinks'
 | 
			
		||||
import github from '@/images/github.svg'
 | 
			
		||||
import logomark from '@/images/logomark.svg'
 | 
			
		||||
 | 
			
		||||
export function Footer() {
 | 
			
		||||
  const [email, setEmail] = useState('');
 | 
			
		||||
  const [loading, setLoading] = useState(false);
 | 
			
		||||
  const [success, setSuccess] = useState(false);
 | 
			
		||||
  const [message, setMessage] = useState('');
 | 
			
		||||
 | 
			
		||||
  const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
 | 
			
		||||
    e.preventDefault();
 | 
			
		||||
    setLoading(true);
 | 
			
		||||
    setSuccess(false);
 | 
			
		||||
    setMessage('');
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      const response = await fetch('/api/subscribe', {
 | 
			
		||||
        method: 'POST',
 | 
			
		||||
        headers: {
 | 
			
		||||
          'Content-Type': 'application/json',
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify({ email }),
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      const data = await response.json();
 | 
			
		||||
 | 
			
		||||
      if (!response.ok) {
 | 
			
		||||
        throw new Error(data.error || 'Something went wrong');
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      setSuccess(true);
 | 
			
		||||
      setMessage('Thanks for subscribing!');
 | 
			
		||||
      setEmail('');
 | 
			
		||||
    } catch (error: any) {
 | 
			
		||||
      setMessage(error.message);
 | 
			
		||||
    } finally {
 | 
			
		||||
      setLoading(false);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <footer className="border-t border-gray-200">
 | 
			
		||||
      <Container>
 | 
			
		||||
        <div className="flex flex-col items-start justify-between gap-y-12 pt-16 pb-6 lg:flex-row lg:items-center lg:py-8">
 | 
			
		||||
          <div>
 | 
			
		||||
            <div className="flex items-center text-gray-900">
 | 
			
		||||
              <Image src="/images/logo.svg" alt="Mycelium Logomark" width={60} height={60} className="h-20 w-20 flex-none" />
 | 
			
		||||
              <Image src={logomark} alt="Mycelium Logomark" width={60} height={60} className="h-20 w-20 flex-none" />
 | 
			
		||||
              <div className="ml-4">
 | 
			
		||||
                <p className="text-base font-semibold">Mycelium</p>
 | 
			
		||||
                <p className="mt-1 text-sm">Unleash the Power of Decentralized Networks</p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <nav className="mt-11 flex gap-8">
 | 
			
		||||
            <nav className="mt-10 flex gap-8">
 | 
			
		||||
              <NavLinks />
 | 
			
		||||
            </nav>
 | 
			
		||||
          </div>
 | 
			
		||||
@@ -42,22 +82,35 @@ export function Footer() {
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div className="flex flex-col items-center border-t border-gray-200 pt-8 pb-12 md:flex-row-reverse md:justify-between md:pt-6">
 | 
			
		||||
          <form className="flex w-full justify-center md:w-auto">
 | 
			
		||||
            <TextField
 | 
			
		||||
              type="email"
 | 
			
		||||
              aria-label="Email address"
 | 
			
		||||
              placeholder="Email address"
 | 
			
		||||
              autoComplete="email"
 | 
			
		||||
              required
 | 
			
		||||
              className="w-60 min-w-0 shrink"
 | 
			
		||||
            />
 | 
			
		||||
            <Button type="submit" color="cyan" className="ml-4 flex-none">
 | 
			
		||||
              <span className="hidden lg:inline">Join our newsletter</span>
 | 
			
		||||
              <span className="lg:hidden">Join newsletter</span>
 | 
			
		||||
            </Button>
 | 
			
		||||
          </form>
 | 
			
		||||
          <div>
 | 
			
		||||
            <form className="flex w-full justify-center md:w-auto" onSubmit={handleSubmit}>
 | 
			
		||||
              <TextField
 | 
			
		||||
                type="email"
 | 
			
		||||
                aria-label="Email address"
 | 
			
		||||
                placeholder="Email address"
 | 
			
		||||
                autoComplete="email"
 | 
			
		||||
                required
 | 
			
		||||
                className="w-60 min-w-0 shrink"
 | 
			
		||||
                value={email}
 | 
			
		||||
                onChange={(e) => setEmail(e.target.value)}
 | 
			
		||||
              />
 | 
			
		||||
              <Button
 | 
			
		||||
                type="submit"
 | 
			
		||||
                color={success ? 'green' : 'cyan'}
 | 
			
		||||
                className="ml-4 flex-none"
 | 
			
		||||
                disabled={loading || success}
 | 
			
		||||
              >
 | 
			
		||||
                {loading ? 'Joining...' : success ? 'Sent!' : <><span className="hidden lg:inline">Join our newsletter</span><span className="lg:hidden">Join newsletter</span></>}
 | 
			
		||||
              </Button>
 | 
			
		||||
            </form>
 | 
			
		||||
            {message && <p className="mt-2 text-sm text-gray-600">{message}</p>}
 | 
			
		||||
          </div>
 | 
			
		||||
          <p className="mt-6 text-sm text-gray-500 md:mt-0">
 | 
			
		||||
            © Copyright ThreeFold {new Date().getFullYear()}. All rights reserved.
 | 
			
		||||
            © Copyright{' '}
 | 
			
		||||
            <a href="https://www.threefold.io" target="_blank" rel="noopener noreferrer" className="hover:text-cyan-500 transition-colors">
 | 
			
		||||
              ThreeFold
 | 
			
		||||
            </a>{' '}
 | 
			
		||||
            {new Date().getFullYear()}. All rights reserved.
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </Container>
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,7 @@ export function Header() {
 | 
			
		||||
  return (
 | 
			
		||||
    <header>
 | 
			
		||||
      <nav>
 | 
			
		||||
        <Container className="relative z-50 flex justify-between py-8">
 | 
			
		||||
        <Container className="relative z-50 flex justify-between py-8 bg-gray-900">
 | 
			
		||||
          <div className="relative z-10 flex items-center gap-16">
 | 
			
		||||
            <Link href="/" aria-label="Home">
 | 
			
		||||
              <Logo className="h-10 w-auto" />
 | 
			
		||||
@@ -105,7 +105,7 @@ export function Header() {
 | 
			
		||||
                            y: -32,
 | 
			
		||||
                            transition: { duration: 0.2 },
 | 
			
		||||
                          }}
 | 
			
		||||
                          className="absolute inset-x-0 top-0 z-0 origin-top rounded-b-2xl bg-gray-50 px-6 pt-32 pb-6 shadow-2xl shadow-gray-900/20"
 | 
			
		||||
                          className="absolute inset-x-0 top-0 z-0 origin-top rounded-b-2xl bg-gray-900 px-6 pt-32 pb-6 shadow-2xl shadow-gray-900/20"
 | 
			
		||||
                        >
 | 
			
		||||
                          <div className="mt-6 flex flex-col gap-4">
 | 
			
		||||
                            <Button href="https://threefold.info/mycelium_network/docs/" variant="outline" target="_blank" rel="noopener noreferrer">
 | 
			
		||||
 
 | 
			
		||||
@@ -103,27 +103,27 @@ export function Hero() {
 | 
			
		||||
      <Container>
 | 
			
		||||
        <div className="flex flex-col-reverse gap-y-16 lg:grid lg:grid-cols-12 lg:gap-x-8 lg:gap-y-20">
 | 
			
		||||
          <div className="relative z-10 mx-auto max-w-2xl lg:col-span-7 lg:max-w-none lg:pt-6 xl:col-span-6">
 | 
			
		||||
            <h1 className="text-4xl lg:text-6xl font-medium tracking-tight text-gray-900">
 | 
			
		||||
            <h1 className="text-4xl lg:text-6xl font-medium tracking-tight text-gray-100">
 | 
			
		||||
              Mycelium
 | 
			
		||||
            </h1>
 | 
			
		||||
              <h2 className="mt-6 lg:text-2xl text-xl tracking-tight leading-normal text-gray-600">
 | 
			
		||||
              <h2 className="mt-6 lg:text-2xl text-xl tracking-tight leading-normal text-gray-300">
 | 
			
		||||
                Unleashing the Power of Decentralized Networks
 | 
			
		||||
            </h2>
 | 
			
		||||
            <p className="mt-6 lg:text-xl text-lg text-gray-600 lg:leading-normal leading-tight">
 | 
			
		||||
            <p className="mt-6 lg:text-xl text-lg text-gray-400 lg:leading-normal leading-tight">
 | 
			
		||||
              Discover Mycelium, an end-to-end encrypted IPv6 overlay network. The future of secure, efficient, and scalable networking.
 | 
			
		||||
            </p>
 | 
			
		||||
            <p className="mt-6 text-lg text-gray-600 ">
 | 
			
		||||
            <p className="mt-6 text-lg text-gray-400 ">
 | 
			
		||||
              Coming Soon: New Decentralized Features
 | 
			
		||||
            </p>
 | 
			
		||||
            <div className="mt-8 flex flex-wrap gap-x-6 gap-y-4">
 | 
			
		||||
              <DownloadLink />
 | 
			
		||||
              <Button
 | 
			
		||||
              {/* <Button
 | 
			
		||||
                href="https://youtu.be/4oq15lxvkts?si=Heh_8DHqHaNpy3_F"
 | 
			
		||||
                variant="outline"
 | 
			
		||||
              >
 | 
			
		||||
                <PlayIcon className="h-6 w-6 flex-none" />
 | 
			
		||||
                <span className="ml-2.5">Watch the Demo</span>
 | 
			
		||||
              </Button>
 | 
			
		||||
              </Button> */}
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div className="relative lg:mt-10 mt-0  lg:col-span-5 lg:row-span-2 xl:col-span-6">
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ export function LinuxLink({
 | 
			
		||||
      href="https://github.com/threefoldtech/mycelium/releases"
 | 
			
		||||
      aria-label="Download for Linux"
 | 
			
		||||
      className={clsx(
 | 
			
		||||
        'flex items-center rounded-lg transition-colors px-4 py-2',
 | 
			
		||||
        'flex items-center rounded-lg px-4 py-2 transition-all hover:scale-105',
 | 
			
		||||
        color === 'black'
 | 
			
		||||
          ? 'bg-gray-800 text-white hover:bg-gray-900'
 | 
			
		||||
          : 'bg-white text-gray-900 hover:bg-gray-50',
 | 
			
		||||
 
 | 
			
		||||
@@ -14,11 +14,12 @@ export function NavLinks() {
 | 
			
		||||
    ['How it Works', '/#howitworks'],
 | 
			
		||||
    ['Coming Soon', '/#comingsoon'],
 | 
			
		||||
    ['FAQs', '/#faqs'],
 | 
			
		||||
    ['Docs', 'https://threefold.info/mycelium_network/docs/'],
 | 
			
		||||
  ].map(([label, href], index) => (
 | 
			
		||||
    <Link
 | 
			
		||||
      key={label}
 | 
			
		||||
      href={href}
 | 
			
		||||
      className="relative -mx-3 -my-2 rounded-lg px-3 py-2 text-sm text-gray-700 transition-colors delay-150 hover:text-gray-900 hover:delay-0"
 | 
			
		||||
      className="relative -mx-3 -my-2 rounded-lg px-3 py-2 text-sm leading-tight text-gray-700 transition-colors delay-150 hover:text-gray-900 hover:delay-0"
 | 
			
		||||
      onMouseEnter={() => {
 | 
			
		||||
        if (timeoutRef.current) {
 | 
			
		||||
          window.clearTimeout(timeoutRef.current)
 | 
			
		||||
@@ -31,13 +32,17 @@ export function NavLinks() {
 | 
			
		||||
        }, 50)
 | 
			
		||||
      }}
 | 
			
		||||
      onClick={(e) => {
 | 
			
		||||
        e.preventDefault()
 | 
			
		||||
        const targetId = href.substring(2)
 | 
			
		||||
        const targetElement = document.getElementById(targetId)
 | 
			
		||||
        if (targetElement) {
 | 
			
		||||
          targetElement.scrollIntoView({ behavior: 'smooth' })
 | 
			
		||||
        if (href.startsWith('/#')) {
 | 
			
		||||
          e.preventDefault();
 | 
			
		||||
          const targetId = href.substring(2);
 | 
			
		||||
          const targetElement = document.getElementById(targetId);
 | 
			
		||||
          if (targetElement) {
 | 
			
		||||
            targetElement.scrollIntoView({ behavior: 'smooth' });
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }}
 | 
			
		||||
      target={href.startsWith('http') ? '_blank' : undefined}
 | 
			
		||||
      rel={href.startsWith('http') ? 'noopener noreferrer' : undefined}
 | 
			
		||||
    >
 | 
			
		||||
      <AnimatePresence>
 | 
			
		||||
        {hoveredIndex === index && (
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
import Image from 'next/image'
 | 
			
		||||
import clsx from 'clsx'
 | 
			
		||||
 | 
			
		||||
import phoneFrame from '@/images/phone-frame.svg'
 | 
			
		||||
 | 
			
		||||
export function PhoneFrame({
 | 
			
		||||
  className,
 | 
			
		||||
  children,
 | 
			
		||||
@@ -10,7 +12,7 @@ export function PhoneFrame({
 | 
			
		||||
  return (
 | 
			
		||||
    <div className={clsx('relative aspect-[366/729]', className)} {...props}>
 | 
			
		||||
      <Image
 | 
			
		||||
        src="/images/phone-frame.svg"
 | 
			
		||||
        src={phoneFrame}
 | 
			
		||||
        alt=""
 | 
			
		||||
        className="pointer-events-none absolute inset-0"
 | 
			
		||||
        fill
 | 
			
		||||
 
 | 
			
		||||
@@ -255,7 +255,12 @@ function FeaturesDesktop() {
 | 
			
		||||
        {features.map((feature, featureIndex) => (
 | 
			
		||||
          <div
 | 
			
		||||
            key={feature.name}
 | 
			
		||||
            className="relative rounded-2xl transition-all duration-300 ease-in-out hover:scale-105 hover:bg-gray-800/30"
 | 
			
		||||
            className={clsx(
 | 
			
		||||
              'relative rounded-2xl outline-2 transition-all duration-300 ease-in-out hover:scale-105 hover:bg-gray-800/30',
 | 
			
		||||
              selectedIndex === featureIndex
 | 
			
		||||
                ? 'outline-cyan-500'
 | 
			
		||||
                : 'outline-transparent hover:outline-cyan-500',
 | 
			
		||||
            )}
 | 
			
		||||
          >
 | 
			
		||||
            {featureIndex === selectedIndex && (
 | 
			
		||||
              <motion.div
 | 
			
		||||
@@ -355,7 +360,14 @@ function FeaturesMobile() {
 | 
			
		||||
            ref={(ref) => ref && (slideRefs.current[featureIndex] = ref)}
 | 
			
		||||
            className="w-full flex-none snap-center px-4 sm:px-6 transition-all duration-300 ease-in-out hover:scale-105"
 | 
			
		||||
          >
 | 
			
		||||
            <div className="relative transform overflow-hidden rounded-2xl bg-gray-800 px-5 py-6">
 | 
			
		||||
            <div
 | 
			
		||||
              className={clsx(
 | 
			
		||||
                'relative transform overflow-hidden rounded-2xl bg-gray-800 px-5 py-6 outline-2 transition-colors',
 | 
			
		||||
                activeIndex === featureIndex
 | 
			
		||||
                  ? 'outline-transparent' // Remove outline for active mobile slide
 | 
			
		||||
                  : 'outline-transparent hover:outline-cyan-500',
 | 
			
		||||
              )}
 | 
			
		||||
            >
 | 
			
		||||
              <div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
 | 
			
		||||
                <CircleBackground
 | 
			
		||||
                  color="#13B5C8"
 | 
			
		||||
 
 | 
			
		||||
@@ -210,7 +210,7 @@ export function SecondaryFeatures() {
 | 
			
		||||
          {features.map((feature) => (
 | 
			
		||||
            <li
 | 
			
		||||
              key={feature.name}
 | 
			
		||||
              className="rounded-2xl border border-gray-200 p-8 transition-all duration-300 ease-in-out hover:scale-105"
 | 
			
		||||
              className="rounded-2xl border border-gray-200 p-8 transition-all duration-300 ease-in-out hover:scale-105 hover:border-cyan-500 hover:shadow-lg hover:shadow-cyan-500/20"
 | 
			
		||||
            >
 | 
			
		||||
              <feature.icon className="h-8 w-8" />
 | 
			
		||||
              <h3 className="mt-6 font-semibold text-gray-900">
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,10 @@ export function WindowsLink({
 | 
			
		||||
}) {
 | 
			
		||||
  return (
 | 
			
		||||
    <Link
 | 
			
		||||
      href="#"
 | 
			
		||||
      href="https://github.com/threefoldtech/myceliumflut/releases"
 | 
			
		||||
      aria-label="Download for Windows"
 | 
			
		||||
      className={clsx(
 | 
			
		||||
        'flex items-center rounded-lg transition-colors px-4 py-2',
 | 
			
		||||
        'flex items-center rounded-lg px-4 py-2 transition-all hover:scale-105',
 | 
			
		||||
        color === 'black'
 | 
			
		||||
          ? 'bg-gray-800 text-white hover:bg-gray-900'
 | 
			
		||||
          : 'bg-white text-gray-900 hover:bg-gray-50',
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 83 KiB  | 
							
								
								
									
										1
									
								
								src/images/logomark.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 110 KiB  |