united-tattoo/components/hero-section.tsx
Nicholai cd27c7b94e feat(design): enhance UI with new components, styles, and assets
- Introduced new design tokens and color variables in globals.css to align with the United Tattoo 2026 design system.
- Updated tailwind.config.ts to include new brand colors, background images, and box shadows for improved UI aesthetics.
- Replaced existing hero section with a new design featuring enhanced parallax effects and glassmorphism styles.
- Added multiple new images and icons to support the updated design, including navigation and hero section assets.
- Implemented a new layout structure in page.tsx, integrating new sections for immersion and identity, enhancing user engagement.

This commit significantly improves the overall design and user experience, establishing a cohesive visual identity for the application.
2025-11-25 03:02:21 -07:00

133 lines
4.6 KiB
TypeScript

"use client"
import { useEffect, useState } from "react"
import { useFeatureFlag } from "@/components/feature-flags-provider"
import { Button } from "@/components/ui/button"
import { useMultiLayerParallax, useReducedMotion } from "@/hooks/use-parallax"
import { cn } from "@/lib/utils"
export function HeroSection() {
const [isVisible, setIsVisible] = useState(false)
const advancedNavAnimations = useFeatureFlag("ADVANCED_NAV_SCROLL_ANIMATIONS_ENABLED")
const reducedMotion = useReducedMotion()
// Use new parallax system with proper accessibility support
const parallax = useMultiLayerParallax(!advancedNavAnimations || reducedMotion)
useEffect(() => {
const timer = setTimeout(() => setIsVisible(true), 300)
return () => clearTimeout(timer)
}, [])
return (
<section
id="home"
className="min-h-[67vh] flex items-center justify-center relative overflow-hidden bg-sage-concrete"
data-reduced-motion={reducedMotion}
>
{/* Background Layer - New hero image with parallax */}
<div
ref={parallax.background.ref}
className="absolute inset-0 bg-cover bg-no-repeat will-change-transform"
style={{
backgroundImage: "url(/UP1_00010_.png)",
backgroundPosition: "center 35%",
maskImage: "linear-gradient(180deg, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 1) 50%, rgba(0, 0, 0, 0.6) 80%, rgba(0, 0, 0, 0) 100%)",
WebkitMaskImage: "linear-gradient(180deg, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 1) 50%, rgba(0, 0, 0, 0.6) 80%, rgba(0, 0, 0, 0) 100%)",
...parallax.background.style,
}}
aria-hidden="true"
/>
{/* Midground Layer - Gradient overlay with subtle parallax */}
<div
ref={parallax.midground.ref}
className="absolute inset-0 will-change-transform"
style={{
background: "linear-gradient(135deg, rgba(242, 227, 208, 0.3), rgba(255, 247, 236, 0.2))",
...parallax.midground.style,
}}
aria-hidden="true"
/>
{/* Removed fade mask - using maskImage on background layer instead */}
{/* Foreground Layer - Glassmorphism content card with counter-parallax */}
<div
ref={parallax.foreground.ref}
className="relative z-10 text-center will-change-transform"
style={parallax.foreground.style}
>
<div
className={cn(
"max-w-[620px] mx-auto px-8 py-12 lg:px-14 lg:py-16",
"transition-all duration-1000",
isVisible ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8"
)}
style={{
background: "rgba(242, 227, 208, 0.75)",
backdropFilter: "blur(12px) saturate(110%)",
WebkitBackdropFilter: "blur(12px) saturate(110%)",
borderRadius: "24px",
border: "1px solid rgba(36, 27, 22, 0.08)",
boxShadow: "0 20px 40px rgba(36, 27, 22, 0.15)",
}}
>
{/* Hero Title */}
<h1
className="font-playfair mb-4 tracking-tight leading-tight"
style={{
fontSize: "clamp(2.5rem, 5vw, 3.8rem)",
lineHeight: "1.1",
color: "#1c1915", // charcoal
}}
>
UNITED TATTOO
</h1>
{/* Hero Subtitle */}
<p
className="mb-8 font-grotesk leading-loose max-w-[54ch] mx-auto"
style={{
fontSize: "clamp(0.95rem, 2vw, 1.3rem)",
lineHeight: "1.65",
color: "#4a4034", // deep-olive
}}
>
Custom Tattoos in Fountain, Colorado
</p>
{/* CTA Button */}
<Button
size="lg"
className={cn(
"px-8 py-4 text-base font-semibold",
"transition-all duration-200 ease-out",
"uppercase tracking-wider font-grotesk",
"w-full sm:w-auto"
)}
style={{
letterSpacing: "0.2em",
backgroundColor: "#b0471e",
color: "#ffffff",
borderRadius: "12px",
boxShadow: "0 10px 22px rgba(176, 71, 30, 0.25)",
}}
onMouseEnter={(e) => {
e.currentTarget.style.transform = "translateY(-1px) scale(1.03)";
e.currentTarget.style.boxShadow = "0 14px 28px rgba(176, 71, 30, 0.35)";
}}
onMouseLeave={(e) => {
e.currentTarget.style.transform = "none";
e.currentTarget.style.boxShadow = "0 10px 22px rgba(176, 71, 30, 0.25)";
}}
>
Book Consultation
</Button>
</div>
</div>
</section>
)
}