diff --git a/public/images/Modern Metallic Home Symbol.png b/public/images/Modern Metallic Home Symbol.png new file mode 100644 index 0000000..8074c28 Binary files /dev/null and b/public/images/Modern Metallic Home Symbol.png differ diff --git a/public/images/pod1.png b/public/images/pod1.png new file mode 100644 index 0000000..8074c28 Binary files /dev/null and b/public/images/pod1.png differ diff --git a/src/pages/agents/CallToAction.tsx b/src/pages/agents/CallToAction.tsx index 113387f..c4f179a 100644 --- a/src/pages/agents/CallToAction.tsx +++ b/src/pages/agents/CallToAction.tsx @@ -15,6 +15,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} +

diff --git a/src/pages/cloud/CalltoAction.tsx b/src/pages/cloud/CalltoAction.tsx index 599d542..570fb63 100644 --- a/src/pages/cloud/CalltoAction.tsx +++ b/src/pages/cloud/CalltoAction.tsx @@ -15,6 +15,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} + diff --git a/src/pages/compute/CallToAction.tsx b/src/pages/compute/CallToAction.tsx index e55c15f..3a59f0d 100644 --- a/src/pages/compute/CallToAction.tsx +++ b/src/pages/compute/CallToAction.tsx @@ -15,6 +15,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} + diff --git a/src/pages/gpu/CallToAction.tsx b/src/pages/gpu/CallToAction.tsx index b4f01b7..f82e665 100644 --- a/src/pages/gpu/CallToAction.tsx +++ b/src/pages/gpu/CallToAction.tsx @@ -15,6 +15,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} + diff --git a/src/pages/home/HomeArchitecture.tsx b/src/pages/home/HomeArchitecture.tsx index 96db657..01c5cc3 100644 --- a/src/pages/home/HomeArchitecture.tsx +++ b/src/pages/home/HomeArchitecture.tsx @@ -4,6 +4,7 @@ import { Eyebrow, H3, P } from "@/components/Texts"; import NoExtraction from "./animations/NoExtraction"; import NoControl from "./animations/NoControl"; import NoCentral from "./animations/NoCentral"; +import NoSinglePoint from "./animations/NoSinglePoint"; const deterministicCards = [ { @@ -45,7 +46,7 @@ const deterministicCards = [ title: "No single point of failure.", description: "No single entity can dictate or censor your online experience.", - animation: , // ✅ NEW + animation: , // ✅ NEW colSpan: "lg:col-span-2", rowSpan: "lg:row-span-1", rounded: "", @@ -76,7 +77,7 @@ export function HomeArchitecture() { {deterministicCards.map((card) => (
{/* ✅ Disable wrapper on first card */} {!card.noBorder && ( @@ -90,8 +91,8 @@ export function HomeArchitecture() { > {/* ✅ SVG Animation instead of images */} {card.animation ? ( -
-
+
+
{card.animation}
diff --git a/src/pages/home/animations/NoSinglePoint.tsx b/src/pages/home/animations/NoSinglePoint.tsx new file mode 100644 index 0000000..8d16498 --- /dev/null +++ b/src/pages/home/animations/NoSinglePoint.tsx @@ -0,0 +1,225 @@ +"use client"; + +import { motion, useReducedMotion } from "framer-motion"; +import clsx from "clsx"; + +type Props = { + className?: string; + accent?: string; // cyan + bg?: string; // solid dark background + gridStroke?: string; +}; + +const W = 720; // 4:3 +const H = 540; // 4:3 + +export default function NoSinglePoint({ + className, + accent = "#00b8db", + bg = "#0b0b0b", + gridStroke = "#2b2a2a", +}: Props) { + const prefers = useReducedMotion(); + + // Nodes (left source, right dest, top hub, bottom hub, plus two relays) + const nodes = { + left: { x: 120, y: H / 2 }, + right: { x: W - 120, y: H / 2 }, + top: { x: W / 2, y: 160 }, + bot: { x: W / 2, y: H - 160 }, + tl: { x: 240, y: 200 }, + br: { x: W - 240, y: H - 200 }, + }; + + // Redundant paths from left → right + const upperPath = `M ${nodes.left.x} ${nodes.left.y} + L ${nodes.tl.x} ${nodes.tl.y} + L ${nodes.top.x} ${nodes.top.y} + L ${nodes.right.x} ${nodes.right.y}`; + + const lowerPath = `M ${nodes.left.x} ${nodes.left.y} + L ${nodes.bot.x} ${nodes.bot.y} + L ${nodes.br.x} ${nodes.br.y} + L ${nodes.right.x} ${nodes.right.y}`; + + return ( + + ); +} diff --git a/src/pages/network/CallToAction.tsx b/src/pages/network/CallToAction.tsx index 2f1076d..6387ece 100644 --- a/src/pages/network/CallToAction.tsx +++ b/src/pages/network/CallToAction.tsx @@ -16,6 +16,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} + diff --git a/src/pages/network/Hero.tsx b/src/pages/network/Hero.tsx index d6354e7..19b7dfd 100644 --- a/src/pages/network/Hero.tsx +++ b/src/pages/network/Hero.tsx @@ -2,7 +2,8 @@ import { useId } from 'react' import { Container } from '@/components/Container' import { Button } from '@/components/Button' import phoneFrame from '../../images/phoneframe.png' -import { H3, P, CT } from "@/components/Texts"; +import { H3, P + , Eyebrow } from "@/components/Texts"; function BackgroundIllustration(props: React.ComponentPropsWithoutRef<'div'>) { let id = useId() @@ -79,12 +80,12 @@ export function Hero() {
-

+ MYCELIUM NETWORK -

- + +

The Network Stack for Private, Autonomous Networking - +

Connect once. Get private networking, censorship-resistant publishing, and on-network AI in one encrypted fabric.

diff --git a/src/pages/nodes/CallToAction.tsx b/src/pages/nodes/CallToAction.tsx index a82ca34..5f93be4 100644 --- a/src/pages/nodes/CallToAction.tsx +++ b/src/pages/nodes/CallToAction.tsx @@ -13,6 +13,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} +

diff --git a/src/pages/nodes/NodeBenefits.tsx b/src/pages/nodes/NodeBenefits.tsx index ca60fca..dc8ac85 100644 --- a/src/pages/nodes/NodeBenefits.tsx +++ b/src/pages/nodes/NodeBenefits.tsx @@ -52,7 +52,7 @@ export function NodeBenefits() {
-
+
{/* Header */} {/* Boxed container */}
{/* Inner padding */}
-
+
MYCELIUM NODES

Host a Node. Power the Network.

-

- The Mycelium Network runs on nodes hosted by people and organizations around the world. Each node adds capacity, resilience, and sovereignty, expanding a global network for private, distributed compute and AI.  -

- -
- -
diff --git a/src/pages/nodes/NodeProducts.tsx b/src/pages/nodes/NodeProducts.tsx index 406826d..bdba6d3 100644 --- a/src/pages/nodes/NodeProducts.tsx +++ b/src/pages/nodes/NodeProducts.tsx @@ -137,7 +137,7 @@ export function NodeProducts() { {/* CONFIG SELECTOR */}
- Configuration + Choose Your Node Type
@@ -160,7 +160,7 @@ export function NodeProducts() {
- + What config should I choose? @@ -194,11 +194,7 @@ export function NodeProducts() {
- {/* Guarantee */} -
- - Lifetime Guarantee -
+ {/* ------------------------------ */} @@ -214,7 +210,7 @@ export function NodeProducts() { {selectedNode.name} diff --git a/src/pages/nodes/NodeSpecs.tsx b/src/pages/nodes/NodeSpecs.tsx index 20ef621..4d58086 100644 --- a/src/pages/nodes/NodeSpecs.tsx +++ b/src/pages/nodes/NodeSpecs.tsx @@ -1,97 +1,115 @@ "use client"; -import { Eyebrow, H3, CT, CP, P } from "@/components/Texts"; +import { Container } from "@/components/Container"; +import { Small } from "@/components/Texts"; + +// Heroicons +import { + ShieldCheckIcon, + BoltIcon, + GlobeAltIcon, + ServerStackIcon, + CheckBadgeIcon, + CpuChipIcon, +} from "@heroicons/react/24/solid"; const nodeSpecs = [ { - id: "autonomous", - eyebrow: "Self-Running", title: "Autonomous Operation", description: "Runs autonomously with no central control.", - colSpan: "lg:col-span-3", - rounded: "max-lg:rounded-t-4xl lg:rounded-tl-4xl", - innerRounded: "max-lg:rounded-t-[calc(2rem+1px)] lg:rounded-tl-[calc(2rem+1px)]", + icon: ServerStackIcon, }, { - id: "encrypted", - eyebrow: "Security", title: "Encrypted by Default", description: "Fully encrypted and identity-based.", - colSpan: "lg:col-span-3", - rounded: "lg:rounded-tr-4xl", - innerRounded: "lg:rounded-tr-[calc(2rem+1px)]", + icon: ShieldCheckIcon, }, { - id: "efficient", - eyebrow: "Performance", title: "Energy Efficient", description: "Energy-efficient and quiet, designed for 24/7 uptime.", - colSpan: "lg:col-span-2", - rounded: "lg:rounded-bl-4xl", - innerRounded: "lg:rounded-bl-[calc(2rem+1px)]", + icon: BoltIcon, }, { - id: "uptime", - eyebrow: "Reliability", title: "Measured Uptime", description: "Automatically measures uptime and contribution.", - colSpan: "lg:col-span-2", - rounded: "", - innerRounded: "", + icon: CheckBadgeIcon, }, { - id: "fullstack", - eyebrow: "Compatibility", title: "Full Mycelium Stack Support", description: "Supports Mycelium Network, Cloud, Pods, and Agents.", - colSpan: "lg:col-span-2", - rounded: "max-lg:rounded-b-4xl lg:rounded-br-4xl", - innerRounded: "max-lg:rounded-b-[calc(2rem+1px)] lg:rounded-br-[calc(2rem+1px)]", + icon: GlobeAltIcon, + }, + + // ✅ NEW 6th card (to complete the grid) + { + title: "Edge & Home Ready", + description: + "Runs seamlessly on compact hardware for edge, home, or micro-datacenter deployments.", + icon: CpuChipIcon, }, ]; export function NodeSpecs() { return ( -
-
- Node Specifications -

Built for Reliability and Control

-

- Each node strengthens the network and helps build a more open, sovereign and - distributed internet. -

+
+ {/* Top horizontal spacing */} +
+
-
- {nodeSpecs.map((item) => ( -
- {/* BG LAYER */} -
+ + {/* Header */} +
+

+ NODE SPECIFICATIONS +

- {/* CONTENT LAYER */} -
-
-

{item.eyebrow}

- - {item.title} - - - {item.description} - -
-
+

+ Built for Reliability and Control +

- {/* OUTLINE OVERLAY */} -
-
- ))} +

+ Each node strengthens the network and helps build a more open, + sovereign and distributed internet. +

-
-
+ + {/* Cards */} +
    + {nodeSpecs.map((item) => { + const Icon = item.icon; + + return ( +
  • + {/* Title + label */} +
    +

    + {item.title} +

    + + +
    + + {/* Short description */} +

    + {item.description} +

    +
  • + ); + })} +
+ + + {/* Bottom spacing */} +
+
+
); } diff --git a/src/pages/pods/CallToAction.tsx b/src/pages/pods/CallToAction.tsx index c029483..eb452bf 100644 --- a/src/pages/pods/CallToAction.tsx +++ b/src/pages/pods/CallToAction.tsx @@ -15,6 +15,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} +

diff --git a/src/pages/pods/Homepod.tsx b/src/pages/pods/Homepod.tsx index 31779e7..3717769 100644 --- a/src/pages/pods/Homepod.tsx +++ b/src/pages/pods/Homepod.tsx @@ -6,7 +6,7 @@ export default function Homepod() { {/* Boxed container */}
{/* Inner padding */}
diff --git a/src/pages/pods/PodsDesign.tsx b/src/pages/pods/PodsDesign.tsx index 76d37cd..551a031 100644 --- a/src/pages/pods/PodsDesign.tsx +++ b/src/pages/pods/PodsDesign.tsx @@ -49,10 +49,10 @@ export function PodsDesign() { return (
{/* TOP LINE */} -
-
+
+
-
+
@@ -61,7 +61,7 @@ export function PodsDesign() {
Mycelium Federation
@@ -114,8 +114,8 @@ export function PodsDesign() {
{/* BOTTOM LINE */} -
-
+
+
) } diff --git a/src/pages/pods/PodsWhat.tsx b/src/pages/pods/PodsWhat.tsx index 36d9ccd..ec97a62 100644 --- a/src/pages/pods/PodsWhat.tsx +++ b/src/pages/pods/PodsWhat.tsx @@ -1,5 +1,12 @@ "use client"; +import { + ServerIcon, + ShieldCheckIcon, + BoltIcon, + GlobeAltIcon, +} from "@heroicons/react/24/solid"; + import { Eyebrow, H3 } from "@/components/Texts"; const podCards = [ @@ -8,53 +15,38 @@ const podCards = [ eyebrow: "Capabilities", title: "What is a Pod?", description: null, - image: null, - colSpan: "lg:col-span-3", - rowSpan: "lg:row-span-1", + icon: null, custom: true, noBorder: true, + colSpan: "lg:col-span-4", }, { id: "home", title: "Your private digital home on the decentralized internet", description: "Your Pod is a private digital home where apps, data, and identity live independently of Big Tech and central servers.", - image: "/images/test.png", - colSpan: "lg:col-span-3", - rowSpan: "lg:row-span-1", - rounded: "lg:rounded-tr-4xl max-lg:rounded-t-4xl", - innerRounded: "lg:rounded-tr-[calc(2rem+1px)] max-lg:rounded-t-[calc(2rem+1px)]", + icon: ServerIcon, }, { id: "control", title: "An always-on space you fully control", description: "A dedicated, always-on environment you fully command — your own sovereign slice of the network that never goes offline.", - image: "/images/test.png", - colSpan: "lg:col-span-2", - rowSpan: "lg:row-span-1", - rounded: "lg:rounded-bl-4xl max-lg:rounded-b-4xl", - innerRounded: "lg:rounded-bl-[calc(2rem+1px)] max-lg:rounded-b-[calc(2rem+1px)]", + icon: ShieldCheckIcon, }, { id: "tools", title: "Runs communication, storage, and collaboration tools", description: "Runs your communication, storage, and collaboration tools in a secure local environment without reliance on outside platforms.", - image: "/images/test.png", - colSpan: "lg:col-span-2", - rowSpan: "lg:row-span-1", + icon: BoltIcon, }, { id: "networking", title: "Fully encrypted, federated peer-to-peer network", description: "Encrypted, federated peer-to-peer networking that links your Pod directly with trusted devices without intermediaries.", - image: "/images/test.png", - colSpan: "lg:col-span-2", - rowSpan: "lg:row-span-1", - rounded: "lg:rounded-br-4xl max-lg:rounded-b-4xl", - innerRounded: "lg:rounded-br-[calc(2rem+1px)] max-lg:rounded-b-[calc(2rem+1px)]", + icon: GlobeAltIcon, }, ]; @@ -62,70 +54,51 @@ export function PodsWhat() { return (
{/* Top horizontal line */} -
+
-
-
- {podCards.map((card) => ( -
- {/* Border wrapper for non-intro */} - {!card.noBorder && ( -
- )} + {/* Content container */} +
+ {/* 4-column grid */} +
+ {podCards.map((card) => { + const Icon = card.icon; + + return (
- {/* Image */} - {card.image ? ( -
- {card.title} -
+ {/* Custom Intro Card */} + {card.custom ? ( + <> + {card.eyebrow} +

{card.title}

+ ) : ( -
+ <> + {/* TITLE WITH ICON (matching the TL example) */} +
+
+ + {/* DESCRIPTION */} +
+ {card.description} +
+ )} - - {/* Text */} -
- {card.custom ? ( - <> - {card.eyebrow} -

{card.title}

- - ) : ( - <> -

- {card.title} -

-

- {card.description} -

- - )} -
- - {/* Outer shadow */} - {!card.noBorder && ( -
- )} -
- ))} + ); + })}
+ {/* Bottom border */}
diff --git a/src/pages/storage/CallToAction.tsx b/src/pages/storage/CallToAction.tsx index 18f0039..d959c06 100644 --- a/src/pages/storage/CallToAction.tsx +++ b/src/pages/storage/CallToAction.tsx @@ -15,6 +15,26 @@ export function CallToAction() { id="get-started" className="relative py-18 max-w-7xl mx-auto bg-[#111111] border border-t-0 border-b-0 border-gray-800" > + {/* ✅ Cyan Radial Glow */} +