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
+128 -91
View File
@@ -1,4 +1,5 @@
import Link from "next/link";
"use client";
import {
Award,
CheckCircle,
@@ -11,12 +12,8 @@ import {
GraduationCap,
BadgeCheck,
} from "lucide-react";
export const metadata = {
title: "About Us | AB Group LLC",
description:
"Learn about AB Group LLC, Florida's trusted QuickBooks consulting firm since 2000. Meet our team and discover our certifications.",
};
import AnimatedBackground from "../components/AnimatedBackground";
import Button from "../components/Button";
const timeline = [
{
@@ -91,21 +88,28 @@ export default function AboutPage() {
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">About Us</p>
<h1 className="text-4xl font-bold tracking-tight sm:text-5xl">
Your Trusted <span className="text-red-500">QuickBooks</span>{" "}
<p className="text-red-400 font-semibold mb-4 animate-fade-in">
About Us
</p>
<h1 className="text-4xl font-bold tracking-tight sm:text-5xl animate-slide-up">
Your Trusted{" "}
<span className="text-transparent bg-gradient-to-r from-red-400 via-red-500 to-red-600 bg-clip-text">
QuickBooks
</span>{" "}
Partner Since 2000
</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">
We are a Florida-based consulting group dedicated to supporting
small and mid-sized businesses with expert accounting and business
solutions.
</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>
{/* Mission Section */}
@@ -126,30 +130,39 @@ export default function AboutPage() {
consultants, our primary task is to give you an array of tools
that will help you grow your business.
</p>
<div className="mt-8 flex items-center gap-4">
<div className="flex items-center gap-2 text-sm text-zinc-600">
<MapPin className="h-5 w-5 text-red-600" />
<div className="mt-8 flex items-center gap-6">
<div className="flex items-center gap-2 text-sm text-zinc-600 group">
<div className="w-8 h-8 bg-red-100 rounded-lg flex items-center justify-center group-hover:bg-red-600 transition-colors duration-300">
<MapPin className="h-4 w-4 text-red-600 group-hover:text-white transition-colors duration-300" />
</div>
<span>Florida, USA</span>
</div>
<div className="flex items-center gap-2 text-sm text-zinc-600">
<Calendar className="h-5 w-5 text-red-600" />
<div className="flex items-center gap-2 text-sm text-zinc-600 group">
<div className="w-8 h-8 bg-red-100 rounded-lg flex items-center justify-center group-hover:bg-red-600 transition-colors duration-300">
<Calendar className="h-4 w-4 text-red-600 group-hover:text-white transition-colors duration-300" />
</div>
<span>Est. 2000</span>
</div>
</div>
</div>
<div className="bg-red-600 rounded-2xl p-8 text-white">
<blockquote className="text-xl italic">
&ldquo;There is a right way to do business. To succeed
you&apos;ll need a solid idea, a great team, and ultimately the
right execution.&rdquo;
</blockquote>
<div className="mt-6 flex items-center gap-4">
<div className="w-12 h-12 bg-white/20 rounded-full flex items-center justify-center">
<span className="text-lg font-bold">NA</span>
</div>
<div>
<p className="font-semibold">Nicolle Alcazar, MSF</p>
<p className="text-red-200 text-sm">President, AB Group LLC</p>
<div className="relative group">
<div className="absolute -inset-4 bg-gradient-to-r from-red-500 to-red-700 rounded-3xl opacity-20 blur-xl group-hover:opacity-30 transition-opacity duration-300" />
<div className="relative bg-gradient-to-br from-red-600 to-red-700 rounded-2xl p-8 text-white">
<blockquote className="text-xl italic">
&ldquo;There is a right way to do business. To succeed
you&apos;ll need a solid idea, a great team, and ultimately
the right execution.&rdquo;
</blockquote>
<div className="mt-6 flex items-center gap-4">
<div className="w-12 h-12 bg-white/20 rounded-full flex items-center justify-center backdrop-blur-sm">
<span className="text-lg font-bold">NA</span>
</div>
<div>
<p className="font-semibold">Nicolle Alcazar, MSF</p>
<p className="text-red-200 text-sm">
President, AB Group LLC
</p>
</div>
</div>
</div>
</div>
@@ -170,15 +183,16 @@ export default function AboutPage() {
</div>
<div className="grid grid-cols-1 gap-8 md:grid-cols-3">
{values.map((value) => (
{values.map((value, index) => (
<div
key={value.title}
className="bg-white rounded-xl p-8 text-center shadow-sm"
className="group bg-white rounded-xl p-8 text-center shadow-sm hover:shadow-xl hover:shadow-red-500/5 hover:-translate-y-2 transition-all duration-300"
style={{ animationDelay: `${index * 100}ms` }}
>
<div className="w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto mb-4">
<value.icon className="h-8 w-8 text-red-600" />
<div className="w-20 h-20 bg-gradient-to-br from-red-100 to-red-50 rounded-full flex items-center justify-center mx-auto mb-4 group-hover:bg-gradient-to-br group-hover:from-red-500 group-hover:to-red-700 transition-all duration-300">
<value.icon className="h-10 w-10 text-red-600 group-hover:text-white transition-colors duration-300" />
</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">
{value.title}
</h3>
<p className="mt-2 text-zinc-600">{value.description}</p>
@@ -202,17 +216,17 @@ export default function AboutPage() {
<div className="max-w-3xl mx-auto">
{timeline.map((item, index) => (
<div key={item.year} className="flex gap-6 mb-8 last:mb-0">
<div key={item.year} className="flex gap-6 mb-8 last:mb-0 group">
<div className="flex flex-col items-center">
<div className="w-12 h-12 bg-red-600 rounded-full flex items-center justify-center text-white font-bold text-sm">
<div className="w-14 h-14 bg-gradient-to-br from-red-500 to-red-700 rounded-full flex items-center justify-center text-white font-bold text-sm shadow-lg shadow-red-500/20 group-hover:scale-110 transition-transform duration-300">
{item.year}
</div>
{index < timeline.length - 1 && (
<div className="w-0.5 h-full bg-zinc-200 mt-2" />
<div className="w-0.5 h-full bg-gradient-to-b from-red-500 to-red-100 mt-2" />
)}
</div>
<div className="pb-8">
<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">
{item.title}
</h3>
<p className="mt-1 text-zinc-600">{item.description}</p>
@@ -224,10 +238,13 @@ export default function AboutPage() {
</section>
{/* Credentials 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">
<Award className="h-12 w-12 text-red-500 mx-auto mb-4" />
<div className="w-16 h-16 bg-gradient-to-br from-red-500 to-red-700 rounded-xl flex items-center justify-center mx-auto mb-4 shadow-lg shadow-red-500/20 animate-pulse-slow">
<Award className="h-8 w-8 text-white" />
</div>
<h2 className="text-3xl font-semibold sm:text-4xl">
Professional Credentials
</h2>
@@ -238,25 +255,35 @@ export default function AboutPage() {
</div>
<div className="grid grid-cols-1 gap-8 md:grid-cols-3">
{credentials.map((group) => (
<div key={group.category}>
<h3 className="text-lg font-semibold text-red-500 mb-4 flex items-center gap-2">
{credentials.map((group, groupIndex) => (
<div
key={group.category}
className="bg-white/5 backdrop-blur-sm rounded-xl p-6 border border-white/10 hover:border-red-500/30 transition-all duration-300"
style={{ animationDelay: `${groupIndex * 100}ms` }}
>
<h3 className="text-lg font-semibold text-transparent bg-gradient-to-r from-red-400 to-red-600 bg-clip-text mb-4 flex items-center gap-2">
{group.category === "Professional Degrees" && (
<GraduationCap className="h-5 w-5" />
<GraduationCap className="h-5 w-5 text-red-500" />
)}
{group.category === "Intuit Certifications" && (
<BadgeCheck className="h-5 w-5" />
<BadgeCheck className="h-5 w-5 text-red-500" />
)}
{group.category === "Other Certifications" && (
<Award className="h-5 w-5" />
<Award className="h-5 w-5 text-red-500" />
)}
{group.category}
</h3>
<ul className="space-y-3">
{group.items.map((item) => (
<li key={item} className="flex items-center gap-2">
<CheckCircle className="h-4 w-4 text-red-500 flex-shrink-0" />
<span className="text-zinc-300">{item}</span>
{group.items.map((item, idx) => (
<li
key={item}
className="flex items-center gap-2 group/item"
style={{ animationDelay: `${idx * 50}ms` }}
>
<CheckCircle className="h-4 w-4 text-red-500 flex-shrink-0 group-hover/item:scale-110 transition-transform duration-300" />
<span className="text-zinc-300 group-hover/item:text-white transition-colors duration-300">
{item}
</span>
</li>
))}
</ul>
@@ -276,36 +303,40 @@ export default function AboutPage() {
</div>
<div className="max-w-2xl mx-auto">
<div className="bg-zinc-50 rounded-2xl p-8 text-center">
<div className="w-24 h-24 bg-red-600 rounded-full flex items-center justify-center mx-auto mb-6">
<span className="text-3xl font-bold text-white">NA</span>
</div>
<h3 className="text-2xl font-semibold text-zinc-900">
Nicolle Alcazar, MSF
</h3>
<p className="text-red-600 font-medium">
President & Lead Consultant
</p>
<p className="mt-4 text-zinc-600 max-w-lg mx-auto">
With a Master of Science in Finance and extensive certifications
as an Intuit Solution Provider and Advanced ProAdvisor, Nicolle
brings over 20 years of experience helping businesses optimize
their accounting and financial systems.
</p>
<div className="mt-6 flex flex-wrap justify-center gap-2">
{[
"MSF",
"ISP",
"Advanced ProAdvisor",
"Enterprise Certified",
].map((badge) => (
<span
key={badge}
className="px-3 py-1 bg-red-100 text-red-700 text-sm font-medium rounded-full"
>
{badge}
</span>
))}
<div className="relative group">
<div className="absolute -inset-4 bg-gradient-to-r from-red-500 to-red-700 rounded-3xl opacity-10 blur-xl group-hover:opacity-20 transition-opacity duration-300" />
<div className="relative bg-gradient-to-br from-zinc-100 to-zinc-50 rounded-2xl p-8 text-center border border-zinc-200">
<div className="w-28 h-28 bg-gradient-to-br from-red-500 to-red-700 rounded-full flex items-center justify-center mx-auto mb-6 shadow-lg shadow-red-500/20 group-hover:scale-105 transition-transform duration-300">
<span className="text-4xl font-bold text-white">NA</span>
</div>
<h3 className="text-2xl font-semibold text-zinc-900">
Nicolle Alcazar, MSF
</h3>
<p className="text-transparent bg-gradient-to-r from-red-500 to-red-700 bg-clip-text font-medium">
President & Lead Consultant
</p>
<p className="mt-4 text-zinc-600 max-w-lg mx-auto">
With a Master of Science in Finance and extensive
certifications as an Intuit Solution Provider and Advanced
ProAdvisor, Nicolle brings over 20 years of experience helping
businesses optimize their accounting and financial systems.
</p>
<div className="mt-6 flex flex-wrap justify-center gap-2">
{[
"MSF",
"ISP",
"Advanced ProAdvisor",
"Enterprise Certified",
].map((badge, index) => (
<span
key={badge}
className="px-3 py-1 bg-gradient-to-r from-red-100 to-red-50 text-red-700 text-sm font-medium rounded-full hover:from-red-500 hover:to-red-600 hover:text-white transition-all duration-300 cursor-default"
style={{ animationDelay: `${index * 50}ms` }}
>
{badge}
</span>
))}
</div>
</div>
</div>
</div>
@@ -313,9 +344,13 @@ export default function AboutPage() {
</section>
{/* Se Habla Espanol */}
<section className="bg-zinc-50 py-12">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 text-center">
<p className="text-2xl font-semibold text-red-600">
<section className="bg-zinc-50 py-12 relative overflow-hidden">
<div className="absolute inset-0 opacity-5">
<div className="absolute top-0 left-1/4 w-64 h-64 bg-red-500 rounded-full blur-3xl" />
<div className="absolute bottom-0 right-1/4 w-64 h-64 bg-red-500 rounded-full blur-3xl" />
</div>
<div className="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 text-center">
<p className="text-3xl font-semibold text-transparent bg-gradient-to-r from-red-500 to-red-700 bg-clip-text">
Se Habla Espanol
</p>
<p className="mt-2 text-zinc-600">
@@ -326,8 +361,9 @@ export default function AboutPage() {
</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">
@@ -337,13 +373,14 @@ export default function AboutPage() {
Let&apos;s discuss how we can help your business succeed.
</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"
>
Contact Us
<ArrowRight className="ml-2 h-5 w-5" />
</Link>
</Button>
</div>
</div>
</section>