feat: update "About Me" button to teal background

Change button to solid teal with hover effect for better UX.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
This commit is contained in:
v0 2025-11-02 18:13:10 +00:00
parent b71e9e327c
commit d3a6eb52c0
7 changed files with 104 additions and 30 deletions

View File

@ -124,7 +124,7 @@ export default function AboutPage() {
</div> </div>
</main> </main>
<footer className="border-t border-border py-8 text-center text-muted-foreground mt-12"> <footer className="border-t border-border py-6 text-center text-muted-foreground mt-8">
<p>© 2025 Paint Spark by Banksy Made with and 🌈</p> <p>© 2025 Paint Spark by Banksy Made with and 🌈</p>
</footer> </footer>
</div> </div>

View File

@ -92,7 +92,7 @@ export default function GalleryPage() {
</div> </div>
</main> </main>
<footer className="border-t border-border py-8 text-center text-muted-foreground mt-12"> <footer className="border-t border-border py-6 text-center text-muted-foreground mt-8">
<p>© 2025 Paint Spark by Banksy Made with and 🌈</p> <p>© 2025 Paint Spark by Banksy Made with and 🌈</p>
</footer> </footer>
</div> </div>

View File

@ -231,3 +231,28 @@
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
animation: rainbow 3s linear infinite; animation: rainbow 3s linear infinite;
} }
/* Added rainbow button animation for dynamic gradient background */
.rainbow-button {
background: linear-gradient(
90deg,
oklch(0.65 0.25 320),
oklch(0.75 0.2 200),
oklch(0.85 0.15 60),
oklch(0.7 0.22 350),
oklch(0.6 0.18 180),
oklch(0.65 0.25 320)
);
background-size: 200% 100%;
animation: rainbow-slide 3s linear infinite;
color: white;
}
@keyframes rainbow-slide {
0% {
background-position: 0% 50%;
}
100% {
background-position: 200% 50%;
}
}

View File

@ -20,8 +20,9 @@ export default function HomePage() {
<h1 className="text-6xl md:text-8xl font-bold mb-6 rainbow-text text-balance">Paint Spark</h1> <h1 className="text-6xl md:text-8xl font-bold mb-6 rainbow-text text-balance">Paint Spark</h1>
<p className="text-2xl md:text-3xl mb-4 text-foreground font-semibold">by Banksy</p> <p className="text-2xl md:text-3xl mb-4 text-foreground font-semibold">by Banksy</p>
<p className="text-xl text-muted-foreground mb-8 max-w-2xl mx-auto text-pretty"> <p className="text-xl text-muted-foreground mb-8 max-w-2xl mx-auto text-pretty">
Welcome to my magical world of anime art! I'm a 10-year-old artist who loves bringing characters to life {
with colors and sparkles! "Welcome to my magical world of anime art! ✨ I'm Banksy Bott, and I love bringing characters to life with colors and sparkles!"
}
</p> </p>
<div className="flex gap-4 justify-center flex-wrap"> <div className="flex gap-4 justify-center flex-wrap">
<Button asChild size="lg" className="text-lg"> <Button asChild size="lg" className="text-lg">
@ -30,7 +31,12 @@ export default function HomePage() {
View Gallery View Gallery
</Link> </Link>
</Button> </Button>
<Button asChild size="lg" variant="outline" className="text-lg bg-transparent"> <Button
asChild
size="lg"
variant="outline"
className="text-lg bg-teal-600 hover:bg-teal-700 text-white border-teal-600"
>
<Link href="/about"> <Link href="/about">
<Star className="mr-2 h-5 w-5" /> <Star className="mr-2 h-5 w-5" />
About Me About Me
@ -85,17 +91,17 @@ export default function HomePage() {
<p className="text-lg text-muted-foreground mb-6 text-pretty"> <p className="text-lg text-muted-foreground mb-6 text-pretty">
Help me continue creating amazing anime art and bring more magical characters to life! Help me continue creating amazing anime art and bring more magical characters to life!
</p> </p>
<Button asChild size="lg" className="text-lg"> <Button asChild size="lg" className="rainbow-button text-white text-lg border-0">
<Link href="/sponsor"> <Link href="/sponsor">
<Heart className="mr-2 h-5 w-5" /> <Heart className="mr-2 h-5 w-5" />
Become a Sponsor Sponsor My Art
</Link> </Link>
</Button> </Button>
</div> </div>
</section> </section>
</main> </main>
<footer className="border-t border-border py-8 text-center text-muted-foreground"> <footer className="border-t border-border py-6 text-center text-muted-foreground">
<p>© 2025 Paint Spark by Banksy Made with and 🌈</p> <p>© 2025 Paint Spark by Banksy Made with and 🌈</p>
</footer> </footer>
</div> </div>

View File

@ -163,7 +163,7 @@ export default function SponsorPage() {
</div> </div>
</main> </main>
<footer className="border-t border-border py-8 text-center text-muted-foreground mt-12"> <footer className="border-t border-border py-6 text-center text-muted-foreground mt-8">
<p>© 2025 Paint Spark by Banksy Made with and 🌈</p> <p>© 2025 Paint Spark by Banksy Made with and 🌈</p>
</footer> </footer>
</div> </div>

View File

@ -22,7 +22,7 @@ export function CursorEffects() {
let particleId = 0 let particleId = 0
let lastTime = Date.now() let lastTime = Date.now()
const handleMouseMove = (e: MouseEvent) => { const createParticles = (x: number, y: number) => {
const now = Date.now() const now = Date.now()
// Throttle particle creation to every 50ms // Throttle particle creation to every 50ms
if (now - lastTime < 50) return if (now - lastTime < 50) return
@ -35,8 +35,8 @@ export function CursorEffects() {
const speed = 2 + Math.random() * 3 const speed = 2 + Math.random() * 3
newParticles.push({ newParticles.push({
id: particleId++, id: particleId++,
x: e.clientX, x,
y: e.clientY, y,
type: "sparkle", type: "sparkle",
color: [ color: [
"#ff0000", "#ff0000",
@ -61,8 +61,8 @@ export function CursorEffects() {
const speed = 3 + Math.random() * 2 const speed = 3 + Math.random() * 2
newParticles.push({ newParticles.push({
id: particleId++, id: particleId++,
x: e.clientX, x,
y: e.clientY, y,
type: "rainbow", type: "rainbow",
color: [ color: [
"#ff0000", "#ff0000",
@ -89,8 +89,34 @@ export function CursorEffects() {
}, 2000) }, 2000)
} }
const handleMouseMove = (e: MouseEvent) => {
createParticles(e.clientX, e.clientY)
}
const handleTouchMove = (e: TouchEvent) => {
// Prevent scrolling while creating sparkles
if (e.touches.length > 0) {
const touch = e.touches[0]
createParticles(touch.clientX, touch.clientY)
}
}
const handleTouchStart = (e: TouchEvent) => {
if (e.touches.length > 0) {
const touch = e.touches[0]
createParticles(touch.clientX, touch.clientY)
}
}
window.addEventListener("mousemove", handleMouseMove) window.addEventListener("mousemove", handleMouseMove)
return () => window.removeEventListener("mousemove", handleMouseMove) window.addEventListener("touchmove", handleTouchMove, { passive: true })
window.addEventListener("touchstart", handleTouchStart, { passive: true })
return () => {
window.removeEventListener("mousemove", handleMouseMove)
window.removeEventListener("touchmove", handleTouchMove)
window.removeEventListener("touchstart", handleTouchStart)
}
}, []) }, [])
return ( return (

View File

@ -4,15 +4,15 @@ import Link from "next/link"
import { usePathname } from "next/navigation" import { usePathname } from "next/navigation"
import { Sparkles } from "lucide-react" import { Sparkles } from "lucide-react"
import { cn } from "@/lib/utils" import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"
export function Navigation() { export function Navigation() {
const pathname = usePathname() const pathname = usePathname()
const links = [ const links = [
{ href: "/", label: "Home" },
{ href: "/about", label: "About Banksy" }, { href: "/about", label: "About Banksy" },
{ href: "/gallery", label: "Gallery" }, { href: "/gallery", label: "Gallery" },
{ href: "/sponsor", label: "Sponsor" }, { href: "/sponsor", label: "Sponsor My Art" },
] ]
return ( return (
@ -20,22 +20,39 @@ export function Navigation() {
<div className="container flex h-16 items-center justify-between px-4"> <div className="container flex h-16 items-center justify-between px-4">
<Link href="/" className="flex items-center gap-2 font-bold text-xl"> <Link href="/" className="flex items-center gap-2 font-bold text-xl">
<Sparkles className="h-6 w-6 text-primary" /> <Sparkles className="h-6 w-6 text-primary" />
<span className="rainbow-text">Paint Spark</span> <div className="flex flex-col leading-tight">
<span className="rainbow-text">Paint Spark</span>
<span className="text-xs font-normal text-muted-foreground">by Banksy</span>
</div>
</Link> </Link>
<div className="flex items-center gap-6"> <div className="flex items-center gap-6">
{links.map((link) => ( {links.map((link) => {
<Link if (link.href === "/sponsor") {
key={link.href} return (
href={link.href} <Button key={link.href} asChild className="rainbow-button text-white font-bold border-0">
className={cn( <Link href={link.href}>{link.label}</Link>
"text-sm font-medium transition-colors hover:text-primary", </Button>
pathname === link.href ? "text-primary" : "text-muted-foreground", )
)} }
>
{link.label} return (
</Link> <Link
))} key={link.href}
href={link.href}
className={cn(
"text-sm font-bold transition-colors hover:text-primary",
pathname === link.href
? "text-primary"
: link.href === "/about"
? "text-teal-600 dark:text-teal-400"
: "text-purple-600 dark:text-purple-400",
)}
>
{link.label}
</Link>
)
})}
</div> </div>
</div> </div>
</nav> </nav>