149 lines
5.9 KiB
TypeScript
149 lines
5.9 KiB
TypeScript
'use client';
|
|
import { useEffect, useState } from 'react';
|
|
import Link from 'next/link';
|
|
import Image from 'next/image';
|
|
|
|
const items = [
|
|
{
|
|
title: 'Emergency Repair',
|
|
desc: 'Outages, hot outlets, breakers tripping.',
|
|
href: '/corpus-christi/emergency-electrician',
|
|
icon: '🚨',
|
|
image: '/images/emergency_repair.png',
|
|
bgColor: 'bg-gradient-to-br from-red-500 to-red-600',
|
|
textColor: 'text-red-600',
|
|
hoverColor: 'hover:from-red-600 hover:to-red-700'
|
|
},
|
|
{
|
|
title: 'Panel Upgrades',
|
|
desc: '100A→200A, AFCI/GFCI, permits & inspections.',
|
|
href: '/corpus-christi/panel-upgrades',
|
|
icon: '⚡',
|
|
image: '/images/panel_upgrade.png',
|
|
bgColor: 'bg-gradient-to-br from-blue-500 to-blue-600',
|
|
textColor: 'text-blue-600',
|
|
hoverColor: 'hover:from-blue-600 hover:to-blue-700'
|
|
},
|
|
{
|
|
title: 'Residential Services',
|
|
desc: 'Complete home electrical solutions.',
|
|
href: '/corpus-christi/residential',
|
|
icon: '🏠',
|
|
image: '/images/residential.png',
|
|
bgColor: 'bg-gradient-to-br from-yellow-500 to-orange-500',
|
|
textColor: 'text-orange-600',
|
|
hoverColor: 'hover:from-yellow-600 hover:to-orange-600'
|
|
},
|
|
{
|
|
title: 'EV-Ready Circuits',
|
|
desc: 'Dedicated 240V outlet, load calc.',
|
|
href: '/corpus-christi/ev-charger-install',
|
|
icon: '🔋',
|
|
image: '/images/ev_ready.png',
|
|
bgColor: 'bg-gradient-to-br from-green-500 to-green-600',
|
|
textColor: 'text-green-600',
|
|
hoverColor: 'hover:from-green-600 hover:to-green-700'
|
|
},
|
|
{
|
|
title: 'Commercial Build-Outs',
|
|
desc: 'Data, emergency lighting, distribution.',
|
|
href: '/commercial',
|
|
icon: '🏢',
|
|
image: '/images/comnercial_buildout.png',
|
|
bgColor: 'bg-gradient-to-br from-purple-500 to-purple-600',
|
|
textColor: 'text-purple-600',
|
|
hoverColor: 'hover:from-purple-600 hover:to-purple-700'
|
|
},
|
|
{
|
|
title: 'Commercial Services',
|
|
desc: 'Professional commercial electrical solutions.',
|
|
href: '/commercial',
|
|
icon: '🏢',
|
|
image: '/images/commercial.png',
|
|
bgColor: 'bg-gradient-to-br from-indigo-500 to-indigo-600',
|
|
textColor: 'text-indigo-600',
|
|
hoverColor: 'hover:from-indigo-600 hover:to-indigo-700'
|
|
},
|
|
{
|
|
title: 'Electrical Diagnostics',
|
|
desc: 'Advanced troubleshooting and system analysis.',
|
|
href: '/corpus-christi/diagnostics',
|
|
icon: '🔍',
|
|
image: '/images/diagnostics.png',
|
|
bgColor: 'bg-gradient-to-br from-teal-500 to-teal-600',
|
|
textColor: 'text-teal-600',
|
|
hoverColor: 'hover:from-teal-600 hover:to-teal-700'
|
|
}
|
|
];
|
|
|
|
export default function ServiceCards() {
|
|
const [mounted, setMounted] = useState(false);
|
|
useEffect(() => setMounted(true), []);
|
|
|
|
return (
|
|
<section className="py-32 bg-gradient-to-br from-gray-50 to-white">
|
|
<div className="container-custom">
|
|
<div className="text-center mb-16">
|
|
<h2 className="font-heading font-bold text-4xl md:text-5xl mb-6 text-gradient">
|
|
Services We Offer
|
|
</h2>
|
|
<p className="text-xl text-gray-600 max-w-2xl mx-auto">
|
|
Professional electrical solutions for residential and commercial properties in Corpus Christi
|
|
</p>
|
|
</div>
|
|
|
|
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
|
|
{!mounted
|
|
? Array.from({ length: 6 }).map((_, i) => (
|
|
<div key={i} className="card-elevated overflow-hidden animate-pulse">
|
|
<div className="h-48 bg-gray-200" />
|
|
<div className="p-6 space-y-3">
|
|
<div className="h-6 bg-gray-200 w-1/2 rounded" />
|
|
<div className="h-4 bg-gray-200 w-3/4 rounded" />
|
|
<div className="h-4 bg-gray-200 w-2/3 rounded" />
|
|
</div>
|
|
</div>
|
|
))
|
|
: items.map((it, index) => (
|
|
<Link
|
|
key={it.title}
|
|
href={it.href}
|
|
className="group card-elevated animate-fade-in overflow-hidden"
|
|
style={{ animationDelay: `${index * 0.1}s` }}
|
|
>
|
|
{/* Service Image */}
|
|
<div className="relative h-48 overflow-hidden rounded-t-2xl">
|
|
<Image
|
|
src={it.image}
|
|
alt={`${it.title} services in Corpus Christi`}
|
|
fill
|
|
className="object-cover group-hover:scale-110 transition-transform duration-500"
|
|
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
|
|
/>
|
|
<div className="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent"></div>
|
|
<div className={`absolute top-4 left-4 w-12 h-12 ${it.bgColor} rounded-xl flex items-center justify-center shadow-lg`}>
|
|
<span className="text-xl">{it.icon}</span>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Service Content */}
|
|
<div className="p-6">
|
|
<h3 className="font-heading font-bold text-xl mb-3 group-hover:text-gradient transition-all duration-300">
|
|
{it.title}
|
|
</h3>
|
|
<p className="text-gray-600 text-base mb-4 leading-relaxed">{it.desc}</p>
|
|
<span className={`inline-flex items-center gap-2 ${it.textColor} font-semibold text-sm group-hover:gap-3 transition-all duration-300`}>
|
|
Learn more
|
|
<svg className="w-4 h-4 group-hover:translate-x-1 transition-transform duration-300" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
|
</svg>
|
|
</span>
|
|
</div>
|
|
</Link>
|
|
))}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
);
|
|
}
|