Files
Kordant/web/src/components/landing/HeroSection.tsx
Michael Freno c9a82fc6de feat: add landing page hero section with animated background
- Create ColorWaveBackground canvas component with animated gradient blobs
- Create HeroSection with ShieldAI branding, headline, CTAs, and trust signals
- Compose landing page in index.tsx route with background + hero
- Add unit tests for HeroSection (13 tests) and ColorWaveBackground (8 tests)
- Background respects prefers-reduced-motion accessibility preference
- Responsive layout with mobile-first text sizing and stacked buttons
2026-05-25 14:43:09 -04:00

116 lines
3.5 KiB
TypeScript

import { onMount } from "solid-js";
import { A } from "@solidjs/router";
import { cn } from "~/lib/utils";
import { Button } from "~/components/ui";
import PageContainer from "~/components/layout/PageContainer";
function ShieldIcon() {
return (
<svg
width="48"
height="48"
viewBox="0 0 48 48"
fill="none"
xmlns="http://www.w3.org/2000/svg"
class="w-12 h-12 md:w-16 md:h-16"
>
<circle cx="24" cy="24" r="24" class="gradient-primary" />
<path
d="M24 8L14 12V20C14 28.4 19.2 36 24 38C28.8 36 34 28.4 34 20V12L24 8Z"
fill="white"
fill-opacity="0.9"
/>
</svg>
);
}
interface HeroSectionProps {
class?: string;
}
export default function HeroSection(props: HeroSectionProps) {
let heroRef: HTMLDivElement | undefined;
onMount(() => {
if (heroRef) {
heroRef.style.opacity = "1";
heroRef.style.transform = "translateY(0)";
}
});
return (
<section class={cn("relative", props.class)}>
<PageContainer>
<div
ref={heroRef}
class="flex flex-col items-center text-center py-20 md:py-32 transition-all duration-700 ease-out"
style="opacity: 0; transform: translateY(20px);"
>
<div class="mb-6 shadow-glow-primary rounded-full p-3">
<ShieldIcon />
</div>
<h1 class="text-4xl md:text-6xl lg:text-7xl font-bold tracking-tight mb-6 max-w-4xl">
<span class="text-[var(--color-text-primary)]">AI-Powered </span>
<span class="text-gradient-primary">Identity Protection</span>
<br />
<span class="text-[var(--color-text-primary)]">for Everyone</span>
</h1>
<p class="text-xl md:text-2xl text-[var(--color-text-secondary)] max-w-2xl mb-10 leading-relaxed">
ShieldAI uses advanced AI to monitor, detect, and prevent identity
threats in real-time. Your digital identity, protected by
intelligence.
</p>
<div class="flex flex-col sm:flex-row gap-4 mb-8">
<A href="/signup">
<Button variant="primary" size="lg">
Get Started
</Button>
</A>
<A href="#features">
<Button variant="ghost" size="lg">
Learn More
</Button>
</A>
</div>
<div class="flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-sm text-[var(--color-text-tertiary)]">
<span class="flex items-center gap-1.5">
<svg
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M6.5 11.5L3 8L4.1 6.9L6.5 9.3L12.4 3.4L13.5 4.5L6.5 11.5Z"
fill="var(--color-success)"
/>
</svg>
No credit card required
</span>
<span class="flex items-center gap-1.5">
<svg
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M6.5 11.5L3 8L4.1 6.9L6.5 9.3L12.4 3.4L13.5 4.5L6.5 11.5Z"
fill="var(--color-success)"
/>
</svg>
Free tier available
</span>
</div>
</div>
</PageContainer>
</section>
);
}