From ad252e8c7c624a8b19b628bb0af60f699d6e2cb0 Mon Sep 17 00:00:00 2001 From: kudinDmitriyUp Date: Mon, 20 Apr 2026 13:58:40 +0000 Subject: [PATCH 1/2] Bob AI: fix build errors (attempt 1) --- src/components/ui/FloatingNav.tsx | 84 +++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/components/ui/FloatingNav.tsx diff --git a/src/components/ui/FloatingNav.tsx b/src/components/ui/FloatingNav.tsx new file mode 100644 index 0000000..45c798f --- /dev/null +++ b/src/components/ui/FloatingNav.tsx @@ -0,0 +1,84 @@ +import { useState, useEffect } from 'react'; +import { useButtonClick } from '@/hooks/useButtonClick'; +import { motion } from 'motion/react'; + +type NavItem = { + name: string; + href: string; +}; + +type CtaButton = { + text: string; + href: string; +}; + +type FloatingNavProps = { + logo: string; + navItems: NavItem[]; + ctaButton: CtaButton; +}; + +const NavLink = ({ name, href }: { name: string; href: string }) => { + const handleClick = useButtonClick(href); + return ( + + ); +}; + +export default function FloatingNav({ logo, navItems, ctaButton }: FloatingNavProps) { + const [visible, setVisible] = useState(true); + const [lastScrollY, setLastScrollY] = useState(0); + + const controlNavbar = () => { + if (typeof window !== 'undefined') { + if (window.scrollY > lastScrollY && window.scrollY > 100) { + setVisible(false); + } else { + setVisible(true); + } + setLastScrollY(window.scrollY); + } + }; + + useEffect(() => { + window.addEventListener('scroll', controlNavbar); + return () => { + window.removeEventListener('scroll', controlNavbar); + }; + }, [lastScrollY]); + + const CtaButtonHandler = useButtonClick(ctaButton.href); + + return ( + <> + {visible && ( + +
+ {logo} +
+ {navItems.map((item) => ( + + ))} +
+ +
+
+ )} + + ); +} \ No newline at end of file From af6945074485c2e378c46b4e42110a19c1f4f280 Mon Sep 17 00:00:00 2001 From: kudinDmitriyUp Date: Mon, 20 Apr 2026 14:00:00 +0000 Subject: [PATCH 2/2] Bob AI: change the border radius to be less round, add special butto --- src/components/ui/HeroTrustedBy.tsx | 19 +++++++------------ src/index.css | 25 ++++++++++++++++--------- src/styles/animations.css | 4 ++-- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/components/ui/HeroTrustedBy.tsx b/src/components/ui/HeroTrustedBy.tsx index e2e2e37..8d58bfb 100644 --- a/src/components/ui/HeroTrustedBy.tsx +++ b/src/components/ui/HeroTrustedBy.tsx @@ -1,20 +1,15 @@ -const avatars = [ - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AM9hp4M6eDzEwMxDU5gYArbELf/professional-headshot-of-a-japanese-male-1776690846328-d57aee35.png", - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AM9hp4M6eDzEwMxDU5gYArbELf/professional-headshot-of-a-female-busine-1776690854791-b9f5ea1f.png", - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AM9hp4M6eDzEwMxDU5gYArbELf/professional-headshot-of-a-young-japanes-1776690864881-b5f3321c.png", -]; - const HeroTrustedBy = () => { + const avatars = [ + "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AM9hp4M6eDzEwMxDU5gYArbELf/professional-headshot-of-a-japanese-male-1776690846328-d57aee35.png", + "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AM9hp4M6eDzEwMxDU5gYArbELf/professional-headshot-of-a-female-busine-1776690854791-b9f5ea1f.png", + "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AM9hp4M6eDzEwMxDU5gYArbELf/professional-headshot-of-a-young-japanes-1776690864881-b5f3321c.png", + ]; + return (
{avatars.map((src, index) => ( - {`Trusted + {`avatar ))}
Trusted by over 2000 agencies diff --git a/src/index.css b/src/index.css index d658447..b0fe0dd 100644 --- a/src/index.css +++ b/src/index.css @@ -16,7 +16,7 @@ --background-accent: #222222; /* @layout/border-radius/rounded */ - --radius: 0.25rem; + --radius: 0.5rem; /* @layout/content-width/medium */ --width-content-width: clamp(40rem, 80vw, 100rem); @@ -141,15 +141,22 @@ body { min-height: 100vh; overscroll-behavior: none; overscroll-behavior-y: none; - padding-top: 5rem; + padding-top: 6rem; } #nav { position: fixed; - top: 0; - width: 100%; + top: 1rem; + left: 1rem; + right: 1rem; z-index: 1000; - background-color: var(--background); + background-color: rgba(18, 18, 18, 0.75); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border-radius: var(--radius); + border: 1px solid var(--accent); + margin: 0 auto; + max-width: 1200px; } h1, @@ -196,16 +203,16 @@ h6 { box-shadow: color-mix(in srgb, var(--color-background) 15%, transparent) 0px 4px 10px 0px inset, color-mix(in srgb, var(--color-background) 15%, transparent) 0px -4px 8px 0px inset, - 0 8px 15px -3px color-mix(in srgb, var(--primary-cta) 30%, transparent), - 0 0 8px var(--primary-cta); + 0 0 25px -3px var(--primary-cta), + 0 0 10px var(--primary-cta); } .secondary-button:hover { animation: button-hover-effect 0.3s ease-out forwards; box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05), - 0 8px 15px -3px color-mix(in srgb, var(--secondary-cta-text) 30%, transparent), - 0 0 8px var(--secondary-cta-text); + 0 0 25px -3px var(--secondary-cta-text), + 0 0 10px var(--secondary-cta-text); } .glassmorphic-tag { diff --git a/src/styles/animations.css b/src/styles/animations.css index e700ade..7fe5ac9 100644 --- a/src/styles/animations.css +++ b/src/styles/animations.css @@ -194,9 +194,9 @@ transform: translateY(0) scale(1); } 50% { - transform: translateY(-4px) scale(1.05); + transform: translateY(-8px) scale(1.1); } 100% { - transform: translateY(-2px) scale(1.02); + transform: translateY(-4px) scale(1.05); } }