diff --git a/src/components/BentoReviews.tsx b/src/components/BentoReviews.tsx index 7995a33..bb45ba0 100644 --- a/src/components/BentoReviews.tsx +++ b/src/components/BentoReviews.tsx @@ -1,10 +1,10 @@ "use client"; import { cn } from "@/lib/utils"; -import { H1, H2, H3, H4, P, CT, CP, NL } from "@/components/Texts"; -import React, { useRef } from "react"; -import { BentoGrid, BentoGridItem } from "@/components/ui/bento-grid"; -import { motion, AnimatePresence, useInView } from 'framer-motion' +import { H2, P } from "@/components/Texts"; +import React from "react"; +import { BentoGrid, MotionBentoGridItem } from "@/components/ui/bento-grid"; +import { FadeIn } from "./FadeIn"; const items = [ { @@ -53,44 +53,39 @@ const items = [ ]; export function BentoReviews() { - const ref = useRef(null); - const isInView = useInView(ref, { once: true }); - return ( -
+
- -

Mycelium Technologies

-
- -

- A robust infrastructure layer for autonomous AI agents, our technology stack - delivers a secure, efficient, and intuitive platform for deploying and managing AI agents at scale. -

-
+ +
+

Mycelium Technologies

+
+
+ +
+

+ A robust infrastructure layer for autonomous AI agents, our technology stack + delivers a secure, efficient, and intuitive platform for deploying and managing AI agents at scale. +

+
+
- {items.map((item, i) => ( - - ))} - + {items.map((item, i) => ( + + ))} +
); } diff --git a/src/components/CallToAction.tsx b/src/components/CallToAction.tsx index 9e775df..6389ae1 100644 --- a/src/components/CallToAction.tsx +++ b/src/components/CallToAction.tsx @@ -1,6 +1,7 @@ import { CircleBackground } from '@/components/CircleBackground' import { Container } from '@/components/Container' import { Button } from '@/components/Button' +import { FadeIn } from '@/components/FadeIn' export function CallToAction() { return ( @@ -22,6 +23,7 @@ export function CallToAction() {
+

Decentralized AI Agents that are Truly Yours @@ -39,6 +41,7 @@ export function CallToAction() {

+
) diff --git a/src/components/ClickableGallery.tsx b/src/components/ClickableGallery.tsx index 61b0bd3..35e4365 100644 --- a/src/components/ClickableGallery.tsx +++ b/src/components/ClickableGallery.tsx @@ -2,11 +2,12 @@ import { useEffect, useMemo, useState, useRef } from 'react' import Image from 'next/image' -import { motion, AnimatePresence, useInView } from 'framer-motion' +import { motion, AnimatePresence } from 'framer-motion' import { wrap } from 'popmotion' import { Button } from '@/components/Button'; -import { H2, P, H4, CT, CP } from '@/components/Texts'; +import { H2, P, CT } from '@/components/Texts'; import { TypeAnimation } from 'react-type-animation' +import { FadeIn } from './FadeIn'; const galleryItems = [ { text: 'Navigate and interact with any web interface', image: '/images/gallery/interface.jpg', width: 448, height: 277 }, @@ -33,8 +34,6 @@ const AUTOPLAY_MS = 3200 export function ClickableGallery() { const [active, setActive] = useState(0) const [hovering, setHovering] = useState(false) - const ref = useRef(null); - const isInView = useInView(ref, { once: true }); // autoplay useEffect(() => { @@ -52,113 +51,112 @@ export function ClickableGallery() { const prev = () => setActive((i) => wrap(0, galleryItems.length, i - 1)) return ( -
-
- -

One Agent, Endless Possibilities.

-
- -

- The future isn’t about more tools. It’s about one intelligent partner that can do it all. This is your gateway to creativity, automation, and discovery. -

-
-
- setHovering(true)} - onMouseLeave={() => setHovering(false)} - > - - -
-
- - {indices.map((idx, i) => { - const distance = i - VISIBLE - const item = galleryItems[idx] - - const x = distance * GAP - const z = -Math.abs(distance) * DEPTH - const r = distance * ROT_Y - const s = 1 - Math.abs(distance) * SCALE_DROP - const o = distance === 0 ? 1 : 0.80 - const zIndex = 100 - Math.abs(distance) - - return ( - setActive(idx)} - > -
- {item.text} -
-
- ) - })} -
-
- - {/* Arrows */} -
- -
-
- -
- - {/* Foreground pill */} -
-
- - - - +
+
+ +
+

One Agent, Endless Possibilities.

-
+ + +
+

+ The future isn’t about more tools. It’s about one intelligent partner that can do it all. This is your gateway to creativity, automation, and discovery. +

+
+
- + +
setHovering(true)} + onMouseLeave={() => setHovering(false)} + > +
+
+ + {indices.map((idx, i) => { + const distance = i - VISIBLE; + const item = galleryItems[idx]; + + const x = distance * GAP; + const z = -Math.abs(distance) * DEPTH; + const r = distance * ROT_Y; + const s = 1 - Math.abs(distance) * SCALE_DROP; + const o = distance === 0 ? 1 : 0.80; + const zIndex = 100 - Math.abs(distance); + + return ( + setActive(idx)} + > +
+ {item.text} +
+
+ ); + })} +
+
+
+ + {/* Arrows */} +
+ +
+
+ +
+ + {/* Foreground pill */} +
+
+ + + + +
+
+
+
- ) + ); } diff --git a/src/components/FadeIn.tsx b/src/components/FadeIn.tsx new file mode 100644 index 0000000..06c3794 --- /dev/null +++ b/src/components/FadeIn.tsx @@ -0,0 +1,24 @@ +'use client' + +import { motion, Transition } from 'framer-motion' +import React from 'react' + +type FadeInProps = { + children: React.ReactNode + transition?: Transition + className?: string +} + +export function FadeIn({ children, transition, className }: FadeInProps) { + return ( + + {children} + + ) +} diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index dfa79bc..345deea 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -6,6 +6,7 @@ import { Container } from '@/components/Container' import { TextField } from '@/components/Fields' import { Logomark } from '@/components/Logo' import { NavLinks } from '@/components/NavLinks' +import { FadeIn } from '@/components/FadeIn' import qrCode from '@/images/qr-code.svg' function QrCodeBorder(props: React.ComponentPropsWithoutRef<'svg'>) { @@ -23,6 +24,7 @@ function QrCodeBorder(props: React.ComponentPropsWithoutRef<'svg'>) { export function Footer() { return (
+
@@ -76,6 +78,7 @@ export function Footer() {

+
) } diff --git a/src/components/StackSection.tsx b/src/components/StackSection.tsx index c8857e3..fb3ca02 100644 --- a/src/components/StackSection.tsx +++ b/src/components/StackSection.tsx @@ -1,63 +1,41 @@ "use client"; import { StackedCubes } from "@/components/ui/StackedCubes"; -import { Button } from "@/components/Button"; -import { motion, useInView } from 'framer-motion'; import { H2, P } from '@/components/Texts'; -import { useRef } from "react"; +import { FadeIn } from "./FadeIn"; export function StackSectionPreview() { - const ref = useRef(null); - const isInView = useInView(ref); return ( -
+
{/* Gradient Blob Component */} - -
{/* Left Column - Text (1/3 width) */}
- +

The Mycelium Stack

-
+ - +

Built with Mycelium technology, our AI infrastructure ensures unbreakable networks, complete data sovereignty, ultra-secure agent-human communication, and unhackable data storage systems.

-
+
{/* Right Column - Stacked Cubes (2/3 width) */}
- + - +
diff --git a/src/components/Texts.tsx b/src/components/Texts.tsx index 7f8ca78..0e75aac 100644 --- a/src/components/Texts.tsx +++ b/src/components/Texts.tsx @@ -7,7 +7,7 @@ const colorVariants = { primary: 'text-[#fffff]', secondary: 'text-gray-200', custom: 'text-[#015eff]', - light: 'text-white', + light: '[#fcfcfc]', } as const type TextOwnProps = { diff --git a/src/components/ui/bento-grid.tsx b/src/components/ui/bento-grid.tsx index fefd5fb..f4c1bb8 100644 --- a/src/components/ui/bento-grid.tsx +++ b/src/components/ui/bento-grid.tsx @@ -1,6 +1,8 @@ import { cn } from "@/lib/utils"; -import { H1, H2, H3, H4, P, CT, CP, NL } from "@/components/Texts"; +import { CT, CP } from "@/components/Texts"; import Image from 'next/image'; +import React from 'react'; +import { motion } from 'framer-motion'; export const BentoGrid = ({ className, @@ -21,23 +23,17 @@ export const BentoGrid = ({ ); }; -export const BentoGridItem = ({ - className, - title, - subtitle, - description, - img, - video, -}: { +export const BentoGridItem = React.forwardRef { +}>(({ className, title, subtitle, description, img, video }, ref) => { return (
); -}; +}); + +BentoGridItem.displayName = 'BentoGridItem'; + +export const MotionBentoGridItem = motion(BentoGridItem);