diff --git a/public/images/app/lasybridge/celestia_lazybridging_bg.png b/public/images/app/lasybridge/celestia_lazybridging_bg.png
new file mode 100644
index 000000000..f17d24106
Binary files /dev/null and b/public/images/app/lasybridge/celestia_lazybridging_bg.png differ
diff --git a/public/images/celestia-logo-invert.svg b/public/images/celestia-logo-invert.svg
new file mode 100644
index 000000000..408180400
--- /dev/null
+++ b/public/images/celestia-logo-invert.svg
@@ -0,0 +1,90 @@
+
+
+
\ No newline at end of file
diff --git a/public/images/celestia-logo.svg b/public/images/celestia-logo.svg
index 432c41221..2adced20e 100644
--- a/public/images/celestia-logo.svg
+++ b/public/images/celestia-logo.svg
@@ -1,23 +1,30 @@
+
\ No newline at end of file
diff --git a/src/app/layout.js b/src/app/layout.js
index 98cfb1426..faa5002fb 100644
--- a/src/app/layout.js
+++ b/src/app/layout.js
@@ -1,14 +1,14 @@
-import Nav from "@/components/Nav/Nav";
import Footer from "@/components/Footer/Footer";
+import LoadingScreen from "@/components/Loading/LoadingScreen";
+import meta from "@/components/Meta/Meta";
+import Nav from "@/components/Nav/Nav";
+import { BannerProvider } from "@/context/BannerContext";
import ScrollPositionProvider from "@/utils/scrollLock";
+import PlausibleProvider from "next-plausible";
+import { Suspense } from "react";
import "./styles/fonts.css";
import "./styles/globals.scss";
import "./styles/text-link.scss";
-import { Suspense } from "react";
-import meta from "@/components/Meta/Meta";
-import LoadingScreen from "@/components/Loading/LoadingScreen";
-import { BannerProvider } from "@/context/BannerContext";
-import PlausibleProvider from "next-plausible";
export const metadata = meta();
diff --git a/src/app/lazybridge/layout.js b/src/app/lazybridge/layout.js
new file mode 100644
index 000000000..e2e9c0917
--- /dev/null
+++ b/src/app/lazybridge/layout.js
@@ -0,0 +1,22 @@
+import LoadingScreen from "@/components/Loading/LoadingScreen";
+import Nav from "@/components/Nav/Nav";
+import { Suspense } from "react";
+
+export const metadata = {
+ title: "LazyBridge | Celestia",
+ description:
+ "LazyBridge: A unified blockchain solution enabling seamless cross-chain transactions, developer flexibility, and instant access to multi-chain assets and users.",
+};
+
+const LazyBridgeLayout = ({ children }) => {
+ return (
+ <>
+
+
+ }>{children}
+
+ >
+ );
+};
+
+export default LazyBridgeLayout;
diff --git a/src/app/lazybridge/page.js b/src/app/lazybridge/page.js
new file mode 100644
index 000000000..2546ef62d
--- /dev/null
+++ b/src/app/lazybridge/page.js
@@ -0,0 +1,48 @@
+import Container from "@/components/Container/Container";
+import PrimaryHeroDark from "@/components/Heroes/PrimaryHeroDark";
+import PrimaryButton from "@/macros/Buttons/PrimaryButton";
+import { Body, Display } from "@/macros/Copy";
+export default async function Home() {
+ return (
+ <>
+ Hangout with the Celestia community IRL or online.>}
+ buttons={[
+ { text: "try 1-click interaction", url: "/build" },
+ { text: "Build with lazybridging", url: "#explore-celestia" },
+ ]}
+ backgroundImage='/images/app/lasybridge/celestia_lazybridging_bg.png'
+ />
+
+
+
+
+ Build whatever with instant access to users and assets
+
+
+ Today, buildings apps on rollups often means trading off access to users and liquidity on other chains due to fragmentation.
+
+
+ Lazybridging aims to eliminate this tradeoff, enabling a unified onchain experience for end-users while giving developers the
+ best of all worlds: the freedom to build whatever and instant access to users and assets on all other major blockchains.
+
+
+ Continue
+
+
+
+
+ >
+ );
+}
diff --git a/src/app/page.js b/src/app/page.js
index 094e7641e..58cb98ade 100644
--- a/src/app/page.js
+++ b/src/app/page.js
@@ -1,12 +1,12 @@
-import PrimaryHero from "@/components/Heroes/PrimaryHero";
-import Blog from "@/components/Resources/Blog/Blog";
import AlternatingMediaRows from "@/components/AlternatingMediaRows/AlternatingMediaRows";
-import { Link } from "@/micros/TertiaryPageMicors/TertiaryPageMicors";
-import HomepageScrollText from "@/components/ScrollText/views/HomepageScrollText";
-import ExploreCardsContainer from "@/components/Cards/ExploreCards/ExploreCardsContainer";
import ExploreCard from "@/components/Cards/ExploreCards/ExploreCard";
+import ExploreCardsContainer from "@/components/Cards/ExploreCards/ExploreCardsContainer";
import EcosytemExplorer from "@/components/Ecosystem/EcosytemExplorer/EcosytemExplorer";
+import PrimaryHero from "@/components/Heroes/PrimaryHero";
+import Blog from "@/components/Resources/Blog/Blog";
+import HomepageScrollText from "@/components/ScrollText/views/HomepageScrollText";
import { ANALYTICS_EVENTS } from "@/constants/analytics";
+import { Link } from "@/micros/TertiaryPageMicors/TertiaryPageMicors";
export default async function Home() {
const posts = await getPosts();
diff --git a/src/app/styles/globals.scss b/src/app/styles/globals.scss
index 1c4ea9777..7b087e020 100644
--- a/src/app/styles/globals.scss
+++ b/src/app/styles/globals.scss
@@ -7,10 +7,20 @@
-moz-osx-font-smoothing: grayscale;
}
+:root {
+ --scrollbar-width: calc(100vw - 100%);
+}
+html {
+ margin-right: calc(-1 * var(--scrollbar-width));
+ width: 100%;
+ height: -webkit-fill-available;
+ overflow-x: hidden;
+ overflow-y: scroll;
+}
+
html,
body {
width: 100vw;
- overflow-x: hidden;
scroll-behavior: smooth;
}
@@ -18,3 +28,38 @@ body {
font-family: "UntitledSans", sans-serif;
font-weight: 400;
}
+
+/* Banner-adjusted components */
+.banner-adjusted {
+ transition: min-height var(--transition-duration, 0.3s) ease-out, padding var(--transition-duration, 0.3s) ease-out,
+ margin var(--transition-duration, 0.3s) ease-out;
+ will-change: min-height, padding, margin;
+}
+
+/* Ensure smooth header transitions */
+header {
+ will-change: transform;
+}
+
+/* Smooth banner animations */
+.banner-animation-enter {
+ opacity: 0;
+ transform: translateY(-100%);
+}
+
+.banner-animation-enter-active {
+ opacity: 1;
+ transform: translateY(0);
+ transition: opacity 300ms, transform 300ms;
+}
+
+.banner-animation-exit {
+ opacity: 1;
+ transform: translateY(0);
+}
+
+.banner-animation-exit-active {
+ opacity: 0;
+ transform: translateY(-100%);
+ transition: opacity 300ms, transform 300ms;
+}
diff --git a/src/app/what-is-celestia/page.js b/src/app/what-is-celestia/page.js
index b4acf32e1..11bb78fb5 100644
--- a/src/app/what-is-celestia/page.js
+++ b/src/app/what-is-celestia/page.js
@@ -1,22 +1,22 @@
+import VerticalTitleCard from "@/components/Cards/VerticalTitleCards/VerticalTitleCard";
import SecondaryHero from "@/components/Heroes/SecondaryHero";
-import WhatIsCelestiaScrollText from "@/components/ScrollText/views/WhatIsCelestiaScrollText";
import Introduction from "@/components/Introduction/Introduction";
-import { Heading, Display, Body } from "@/macros/Copy";
-import SecondaryButton from "@/macros/Buttons/SecondaryButton";
import ListSection from "@/components/List/Layout/ListSection";
import ListItem from "@/components/List/ListItem";
-import Icon from "@/macros/Icons/Icon";
-import ArrowLongSVG from "@/macros/SVGs/ArrowLongSVG";
import ScrollNavigation from "@/components/ScrollNavigation/ScrollNavigation";
import ScrollSection from "@/components/ScrollNavigation/ScrollSection";
+import WhatIsCelestiaScrollText from "@/components/ScrollText/views/WhatIsCelestiaScrollText";
+import SecondaryButton from "@/macros/Buttons/SecondaryButton";
+import { Body, Display, Heading } from "@/macros/Copy";
+import { Col, Row } from "@/macros/Grids";
+import Icon from "@/macros/Icons/Icon";
+import ArrowLongSVG from "@/macros/SVGs/ArrowLongSVG";
import HeadingWithSuperscript from "@/micros/HeadingWithSuperscript/HeadingWithSuperscript";
-import { Row, Col } from "@/macros/Grids";
import Image from "next/image";
-import VerticalTitleCard from "@/components/Cards/VerticalTitleCards/VerticalTitleCard";
+import Container from "@/components/Container/Container";
import meta from "@/components/Meta/Meta";
import seo from "@/data/what-is-celestia/seo";
-import Container from "@/components/Container/Container";
export const metadata = meta(seo);
diff --git a/src/components/AlternatingMediaRows/MediaRow.js b/src/components/AlternatingMediaRows/MediaRow.js
index 7b29e7a9b..029983df5 100644
--- a/src/components/AlternatingMediaRows/MediaRow.js
+++ b/src/components/AlternatingMediaRows/MediaRow.js
@@ -1,9 +1,10 @@
"use client";
-import { Body, Heading } from "@/macros/Copy";
+import VideoPlayer from "@/components/VideoPlayer/VideoPlayer";
import PrimaryButton from "@/macros/Buttons/PrimaryButton";
import SecondaryButton from "@/macros/Buttons/SecondaryButton";
-import VideoPlayer from "@/components/VideoPlayer/VideoPlayer";
+import { Body, Heading } from "@/macros/Copy";
import { usePlausible } from "next-plausible";
+import React from "react";
const MediaRow = ({ title, body, buttons, videoSrc, className, index, totalRows }) => {
const videoRight = index % 2 === 0 ? true : false;
@@ -51,10 +52,9 @@ const MediaRow = ({ title, body, buttons, videoSrc, className, index, totalRows
{buttons.map((button, index) => {
return (
- <>
+
{button.type === "primary" ? (
) : (
)}
- >
+
);
})}
diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js
index bf22de577..eefb70742 100644
--- a/src/components/Footer/Footer.js
+++ b/src/components/Footer/Footer.js
@@ -1,20 +1,20 @@
"use client";
-import "./Footer.scss";
-import { Body, Heading } from "@/macros/Copy";
-import footerData from "@/data/global/footer";
import Container from "@/components/Container/Container";
+import Newsletter from "@/components/Newsletter/Newsletter";
import VideoPlayer from "@/components/VideoPlayer/VideoPlayer";
-import Link from "@/macros/Link/Link";
+import footerData from "@/data/global/footer";
+import { Body, Heading } from "@/macros/Copy";
import Icon from "@/macros/Icons/Icon";
+import Link from "@/macros/Link/Link";
import ArrowLongSVG from "@/macros/SVGs/ArrowLongSVG";
import { isInternalLink } from "@/utils/isInternalLink";
-import Newsletter from "@/components/Newsletter/Newsletter";
+import "./Footer.scss";
const Footer = () => {
const columns = footerData();
const copywriteYear = new Date().getFullYear();
return (
-