feat(design): enhance UI with animations, gradients, and hover effects

- Add AnimatedBackground component with canvas-based floating orbs
- Add reusable Button component with shimmer effects and variants
- Update globals.css with animation keyframes and utility classes
- Enhance Header with glass effect and animated nav underlines
- Enhance Footer with gradient overlays and hover effects
- Update all pages with animated gradient backgrounds
- Add hover effects on cards, icons, and buttons
- Implement gradient text effects throughout

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Andrés Mora
2025-12-23 19:22:50 -05:00
co-authored by Claude Opus 4.5
parent 9eebabdc7c
commit 238b1c9a87
11 changed files with 1348 additions and 1141 deletions
+56 -37
View File
@@ -1,3 +1,5 @@
"use client";
import Link from "next/link";
import {
Settings,
@@ -18,12 +20,8 @@ import {
Truck,
UtensilsCrossed,
} from "lucide-react";
export const metadata = {
title: "Services | AB Group LLC",
description:
"Expert QuickBooks consulting, setup, training, and support services. On-site, remote, and telephone support available.",
};
import AnimatedBackground from "../components/AnimatedBackground";
import Button from "../components/Button";
const services = [
{
@@ -134,21 +132,27 @@ export default function ServicesPage() {
return (
<>
{/* Hero Section */}
<section className="bg-zinc-900 text-white">
<div className="mx-auto max-w-7xl px-4 py-16 sm:px-6 sm:py-20 lg:px-8 lg:py-24">
<section className="relative animated-gradient-bg text-white overflow-hidden">
<AnimatedBackground variant="dark" orbCount={5} />
<div className="relative mx-auto max-w-7xl px-4 py-16 sm:px-6 sm:py-20 lg:px-8 lg:py-24">
<div className="max-w-3xl">
<p className="text-red-500 font-semibold mb-4">Our Services</p>
<h1 className="text-4xl font-bold tracking-tight sm:text-5xl">
<p className="text-red-400 font-semibold mb-4 animate-fade-in">
Our Services
</p>
<h1 className="text-4xl font-bold tracking-tight sm:text-5xl animate-slide-up">
Expert Solutions for Your{" "}
<span className="text-red-500">Business</span>
<span className="text-transparent bg-gradient-to-r from-red-400 via-red-500 to-red-600 bg-clip-text">
Business
</span>
</h1>
<p className="mt-6 text-lg text-zinc-300">
<p className="mt-6 text-lg text-zinc-300 animate-slide-up animation-delay-100">
As Intuit Solution Providers, we offer a comprehensive range of
services to help your business succeed. From initial setup to
ongoing support, we&apos;re here for you every step of the way.
</p>
</div>
</div>
<div className="absolute right-10 top-1/4 w-64 h-64 bg-red-500/10 rounded-full blur-3xl animate-float" />
</section>
{/* Services Grid */}
@@ -165,15 +169,16 @@ export default function ServicesPage() {
</div>
<div className="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3">
{services.map((service) => (
{services.map((service, index) => (
<div
key={service.title}
className="bg-white rounded-xl p-6 shadow-sm border border-zinc-100 hover:shadow-md transition-shadow"
className="group bg-white rounded-xl p-6 shadow-sm border border-zinc-100 hover:shadow-xl hover:shadow-red-500/5 hover:-translate-y-2 transition-all duration-300"
style={{ animationDelay: `${index * 100}ms` }}
>
<div className="w-12 h-12 bg-red-100 rounded-lg flex items-center justify-center mb-4">
<service.icon className="h-6 w-6 text-red-600" />
<div className="w-12 h-12 bg-gradient-to-br from-red-100 to-red-50 rounded-lg flex items-center justify-center mb-4 group-hover:scale-110 group-hover:bg-gradient-to-br group-hover:from-red-500 group-hover:to-red-700 transition-all duration-300">
<service.icon className="h-6 w-6 text-red-600 group-hover:text-white transition-colors duration-300" />
</div>
<h3 className="text-lg font-semibold text-zinc-900">
<h3 className="text-lg font-semibold text-zinc-900 group-hover:text-red-600 transition-colors duration-300">
{service.title}
</h3>
<p className="mt-2 text-sm text-zinc-600">
@@ -209,12 +214,16 @@ export default function ServicesPage() {
</div>
<div className="grid grid-cols-1 gap-8 md:grid-cols-3">
{supportTypes.map((type) => (
<div key={type.title} className="text-center">
<div className="w-16 h-16 bg-red-600 rounded-full flex items-center justify-center mx-auto mb-4">
<type.icon className="h-8 w-8 text-white" />
{supportTypes.map((type, index) => (
<div
key={type.title}
className="text-center group"
style={{ animationDelay: `${index * 100}ms` }}
>
<div className="w-20 h-20 bg-gradient-to-br from-red-500 to-red-700 rounded-full flex items-center justify-center mx-auto mb-4 shadow-lg shadow-red-500/20 group-hover:shadow-red-500/40 group-hover:scale-110 transition-all duration-300">
<type.icon className="h-10 w-10 text-white" />
</div>
<h3 className="text-xl font-semibold text-zinc-900">
<h3 className="text-xl font-semibold text-zinc-900 group-hover:text-red-600 transition-colors duration-300">
{type.title}
</h3>
<p className="mt-2 text-zinc-600">{type.description}</p>
@@ -238,13 +247,14 @@ export default function ServicesPage() {
</div>
<div className="grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-6">
{industries.map((industry) => (
{industries.map((industry, index) => (
<div
key={industry.name}
className="bg-zinc-50 rounded-xl p-6 text-center hover:bg-zinc-100 transition-colors"
className="group bg-zinc-50 rounded-xl p-6 text-center hover:bg-gradient-to-br hover:from-red-500 hover:to-red-700 hover:shadow-lg hover:shadow-red-500/20 hover:-translate-y-1 transition-all duration-300 cursor-pointer"
style={{ animationDelay: `${index * 50}ms` }}
>
<industry.icon className="h-8 w-8 text-red-600 mx-auto mb-3" />
<p className="text-sm font-medium text-zinc-700">
<industry.icon className="h-8 w-8 text-red-600 mx-auto mb-3 group-hover:text-white transition-colors duration-300" />
<p className="text-sm font-medium text-zinc-700 group-hover:text-white transition-colors duration-300">
{industry.name}
</p>
</div>
@@ -258,8 +268,9 @@ export default function ServicesPage() {
</section>
{/* Process Section */}
<section className="bg-zinc-900 text-white py-16 md:py-24">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<section className="relative animated-gradient-bg text-white py-16 md:py-24 overflow-hidden">
<AnimatedBackground variant="dark" orbCount={4} />
<div className="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="text-center max-w-3xl mx-auto mb-12">
<h2 className="text-3xl font-semibold sm:text-4xl">How We Work</h2>
<p className="mt-4 text-lg text-zinc-400">
@@ -294,12 +305,18 @@ export default function ServicesPage() {
description:
"We train your team and provide ongoing support to ensure long-term success.",
},
].map((item) => (
<div key={item.step} className="text-center">
<div className="text-4xl font-bold text-red-500 mb-4">
].map((item, index) => (
<div
key={item.step}
className="text-center group"
style={{ animationDelay: `${index * 100}ms` }}
>
<div className="text-5xl font-bold text-transparent bg-gradient-to-r from-red-400 to-red-600 bg-clip-text mb-4 group-hover:scale-110 transition-transform duration-300">
{item.step}
</div>
<h3 className="text-xl font-semibold mb-2">{item.title}</h3>
<h3 className="text-xl font-semibold mb-2 group-hover:text-red-400 transition-colors duration-300">
{item.title}
</h3>
<p className="text-zinc-400">{item.description}</p>
</div>
))}
@@ -308,8 +325,9 @@ export default function ServicesPage() {
</section>
{/* CTA Section */}
<section className="bg-red-600 py-12 md:py-16">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<section className="relative overflow-hidden animated-gradient-bg-red py-12 md:py-16">
<AnimatedBackground variant="red" orbCount={4} />
<div className="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="flex flex-col md:flex-row items-center justify-between gap-6">
<div className="text-center md:text-left">
<h2 className="text-2xl font-semibold text-white sm:text-3xl">
@@ -319,13 +337,14 @@ export default function ServicesPage() {
Contact us today for a free consultation and needs analysis.
</p>
</div>
<Link
<Button
href="/contact"
className="inline-flex items-center justify-center px-6 py-3 bg-white text-red-600 font-medium rounded-lg hover:bg-red-50 transition-colors"
variant="secondary"
className="bg-white text-red-600 hover:bg-red-50 border-transparent"
>
Get a Free Quote
<ArrowRight className="ml-2 h-5 w-5" />
</Link>
</Button>
</div>
</div>
</section>