Merge version_3_1776787968033 into main #2

Merged
bender merged 2 commits from version_3_1776787968033 into main 2026-04-21 16:15:36 +00:00
3 changed files with 87 additions and 9 deletions

View File

@@ -4,7 +4,7 @@ import FeaturesLabeledList from '@/components/sections/features/FeaturesLabeledL
import FooterBasic from '@/components/sections/footer/FooterBasic';
import HeroSplitTestimonial from '@/components/sections/hero/HeroSplitTestimonial';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import NavbarCentered from '@/components/ui/NavbarCentered';
import Navbar from '@/components/Navbar';
import ProductVariantCards from '@/components/sections/product/ProductVariantCards';
import TestimonialSplitCards from '@/components/sections/testimonial/TestimonialSplitCards';
@@ -12,7 +12,7 @@ export default function App() {
return (
<>
<div id="nav" data-section="nav">
<NavbarCentered
<Navbar
logo="TechNova"
navItems={[
{
@@ -39,6 +39,7 @@ export default function App() {
/>
</div>
<main className="pt-24">
<div id="hero" data-section="hero">
<HeroSplitTestimonial
tag="Next-Gen IT Solutions"
@@ -379,6 +380,7 @@ export default function App() {
rightText="All rights reserved."
/>
</div>
</main>
</>
);
}
}

77
src/components/Navbar.tsx Normal file
View File

@@ -0,0 +1,77 @@
import { useButtonClick } from "@/hooks/useButtonClick";
type NavItem = {
name: string;
href: string;
};
type CtaButton = {
text: string;
href: string;
};
type NavbarProps = {
logo: string;
navItems: NavItem[];
ctaButton: CtaButton;
};
const NavLink = ({ href, children }: { href: string; children: React.ReactNode }) => {
const handleClick = useButtonClick(href);
return (
<a
href={href}
onClick={(e) => {
e.preventDefault();
handleClick();
}}
className="text-sm text-foreground hover:text-primary-cta transition-colors"
>
{children}
</a>
);
};
export default function Navbar({ logo, navItems, ctaButton }: NavbarProps) {
const handleLogoClick = useButtonClick("/");
const handleCtaClick = useButtonClick(ctaButton.href);
return (
<header className="fixed top-4 left-1/2 -translate-x-1/2 z-50">
<nav className="flex items-center gap-8 rounded-full shadow-lg px-8 py-3 backdrop-blur-xl bg-white/70 border border-white/40">
{/* Logo */}
<a
href="/"
onClick={(e) => {
e.preventDefault();
handleLogoClick();
}}
className="text-lg font-bold text-foreground mr-auto"
>
{logo}
</a>
{/* Nav Links */}
<div className="hidden md:flex items-center gap-8">
{navItems.map((item) => (
<NavLink key={item.name} href={item.href}>
{item.name}
</NavLink>
))}
</div>
{/* CTA Button */}
<a
href={ctaButton.href}
onClick={(e) => {
e.preventDefault();
handleCtaClick();
}}
className="primary-button text-primary-cta-text px-4 py-2 text-sm rounded-full ml-auto whitespace-nowrap"
>
{ctaButton.text}
</a>
</nav>
</header>
);
}

View File

@@ -16,7 +16,7 @@
--background-accent: #106EFB;
/* @layout/border-radius/rounded */
--radius: 0rem;
--radius: 0px;
/* @layout/content-width/medium */
--width-content-width: clamp(40rem, 80vw, 100rem);
@@ -155,9 +155,9 @@ h6 {
/* WEBILD_CARD_STYLE */
/* @cards/glass-elevated */
.card {
backdrop-filter: blur(8px);
backdrop-filter: none;
background: linear-gradient(to bottom right, color-mix(in srgb, var(--color-card) 80%, transparent), color-mix(in srgb, var(--color-card) 40%, transparent));
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
box-shadow: none;
border: 1px solid var(--color-card);
}
@@ -165,7 +165,7 @@ h6 {
/* @primaryButtons/primary-glow */
.primary-button {
background: var(--color-primary-cta);
box-shadow: color-mix(in srgb, var(--color-background) 20%, transparent) 0px 3px 1px 0px inset, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 0.839802px 0.503881px -0.3125px, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 1.99048px 1.19429px -0.625px, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 3.63084px 2.1785px -0.9375px, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 6.03627px 3.62176px -1.25px, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 9.74808px 5.84885px -1.5625px, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 15.9566px 9.57398px -1.875px, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 27.4762px 16.4857px -2.1875px, color-mix(in srgb, var(--color-primary-cta) 13%, transparent) 0px 50px 30px -2.5px;
box-shadow: none;
}
/* WEBILD_SECONDARY_BUTTON */
@@ -178,7 +178,6 @@ h6 {
linear-gradient(color-mix(in srgb, var(--color-accent) 5%, transparent) 0%, transparent 59.26%),
linear-gradient(color-mix(in srgb, var(--color-secondary-cta) 60%, transparent), color-mix(in srgb, var(--color-secondary-cta) 60%, transparent)),
var(--color-secondary-cta);
box-shadow:
2.10837px 3.16256px 9.48767px color-mix(in srgb, var(--color-accent) 10%, transparent);
box-shadow: none;
border: 1px solid var(--color-secondary-cta);
}