"use client" import { useEffect, useMemo, useRef, useState } from "react" import Link from "next/link" import { useFeatureFlag } from "@/components/feature-flags-provider" import { Button } from "@/components/ui/button" import { artists } from "@/data/artists" export function ArtistsSection() { // Minimal animation: fade-in only (no parallax) const [visibleCards, setVisibleCards] = useState([]) const sectionRef = useRef(null) const advancedNavAnimations = useFeatureFlag("ADVANCED_NAV_SCROLL_ANIMATIONS_ENABLED") const allArtistIndices = useMemo(() => Array.from({ length: artists.length }, (_, idx) => idx), []) useEffect(() => { if (!advancedNavAnimations) { setVisibleCards(allArtistIndices) return } setVisibleCards([]) }, [advancedNavAnimations, allArtistIndices]) useEffect(() => { if (!advancedNavAnimations) return const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const cardIndex = Number.parseInt(entry.target.getAttribute("data-index") || "0") setVisibleCards((prev) => [...new Set([...prev, cardIndex])]) } }) }, { threshold: 0.2, rootMargin: "0px 0px -10% 0px" }, ) const cards = sectionRef.current?.querySelectorAll("[data-index]") cards?.forEach((card) => observer.observe(card)) return () => observer.disconnect() }, [advancedNavAnimations]) const cardVisibilityClass = (index: number) => { if (!advancedNavAnimations) return "opacity-100 translate-y-0" return visibleCards.includes(index) ? "opacity-100 translate-y-0" : "opacity-0 translate-y-6" } const cardTransitionDelay = (index: number) => { if (!advancedNavAnimations) return undefined return `${index * 40}ms` } // Vary aspect ratio to create a subtle masonry rhythm const aspectFor = (i: number) => { const variants = ["aspect-[3/4]", "aspect-[4/5]", "aspect-square"] return variants[i % variants.length] } return (
{/* Faint logo texture */}
{/* Header */}

ARTISTS

Our exceptional team of tattoo artists, each bringing unique expertise and artistic vision to create your perfect tattoo.

{/* Masonry grid */}
{/* columns-based masonry; tighter spacing and wider section */}
{artists.map((artist, i) => { const transitionDelay = cardTransitionDelay(i) return (
{/* Imagery */}
{`${artist.name}
{/* Portrait with feathered mask */}
{`${artist.name}
{/* Softer hover wash (replaces heavy overlay) */}
{/* Top-left experience pill */}
{artist.experience}
{/* Minimal footer */}

{artist.name}

{artist.specialty}

) })}
{/* CTA Footer */}

READY?

Choose your artist and start your tattoo journey with United Tattoo.

) }