Update hero section background

This commit is contained in:
gpt-engineer-app[bot] 2025-09-10 07:25:49 +00:00
parent 038efb504c
commit b3064b33d9
6 changed files with 185 additions and 101 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 KiB

View File

@ -1,8 +1,16 @@
import { useEffect, useState } from "react";
import { Card, CardContent } from "@/components/ui/card"; import { Card, CardContent } from "@/components/ui/card";
import { Badge } from "@/components/ui/badge"; import { Badge } from "@/components/ui/badge";
import { Award, Target, Users, Lightbulb } from "lucide-react"; import { Award, Target, Users, Lightbulb } from "lucide-react";
const About = () => { const About = () => {
const [scrollY, setScrollY] = useState(0);
useEffect(() => {
const handleScroll = () => setScrollY(window.scrollY);
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const values = [ const values = [
{ {
icon: Award, icon: Award,
@ -36,16 +44,18 @@ const About = () => {
]; ];
return ( return (
<section id="about" className="py-24 bg-background"> <section id="about" className="diagonal-cut-bottom py-24 bg-background">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div
className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 parallax-element"
style={{ transform: `translateY(${scrollY * 0.05}px)` }}
>
{/* Section Header */} {/* Section Header */}
<div className="text-center mb-16"> <div className="text-center mb-16">
<h2 className="text-4xl md:text-5xl font-bold text-foreground mb-6"> <h2 className="text-4xl md:text-5xl font-bold text-foreground mb-6">
About <span className="text-glow">NQS Inspection</span> About <span className="text-glow">NQS Inspection</span>
</h2> </h2>
<p className="text-xl text-muted-foreground max-w-3xl mx-auto"> <p className="text-xl text-muted-foreground max-w-2xl mx-auto">
Your trusted partner for comprehensive industrial inspection services Your trusted partner for industrial inspection services across Texas.
across Texas, ensuring safety and compliance in critical operations.
</p> </p>
</div> </div>
@ -67,16 +77,14 @@ const About = () => {
<div> <div>
<h3 className="text-2xl font-bold text-foreground mb-4">Our Vision</h3> <h3 className="text-2xl font-bold text-foreground mb-4">Our Vision</h3>
<p className="text-muted-foreground leading-relaxed"> <p className="text-muted-foreground leading-relaxed">
To be the leading industrial inspection company in Texas, recognized for our To be the leading industrial inspection company in Texas, recognized for
technical expertise, innovative solutions, and unwavering commitment to safety. technical expertise and commitment to safety.
We strive to set new standards in the industry while building lasting partnerships
with our clients through exceptional service and reliability.
</p> </p>
</div> </div>
{/* Background Image */} {/* Background Image */}
<div <div
className="rounded-lg h-64 bg-cover bg-center relative overflow-hidden" className="rounded-lg h-48 bg-cover bg-center relative overflow-hidden"
style={{ style={{
backgroundImage: `url('/lovable-uploads/0a023c3c-76e5-4475-a0de-b3e0891c9d50.png')`, backgroundImage: `url('/lovable-uploads/0a023c3c-76e5-4475-a0de-b3e0891c9d50.png')`,
}} }}
@ -89,19 +97,18 @@ const About = () => {
<div className="space-y-8"> <div className="space-y-8">
<div> <div>
<h3 className="text-2xl font-bold text-foreground mb-6">Core Values</h3> <h3 className="text-2xl font-bold text-foreground mb-6">Core Values</h3>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
{values.map((value, index) => { {values.map((value, index) => {
const IconComponent = value.icon; const IconComponent = value.icon;
return ( return (
<Card key={index} className="industrial-card"> <Card key={index} className="industrial-card">
<CardContent className="p-4"> <CardContent className="p-4">
<div className="flex items-start space-x-3"> <div className="flex items-center space-x-3">
<div className="w-8 h-8 bg-primary/10 rounded-lg flex items-center justify-center flex-shrink-0 mt-1"> <div className="w-8 h-8 bg-primary/10 rounded-lg flex items-center justify-center flex-shrink-0">
<IconComponent className="w-4 h-4 text-primary" /> <IconComponent className="w-4 h-4 text-primary" />
</div> </div>
<div> <div>
<h4 className="font-semibold text-foreground mb-1">{value.title}</h4> <h4 className="font-semibold text-foreground text-sm">{value.title}</h4>
<p className="text-sm text-muted-foreground">{value.description}</p>
</div> </div>
</div> </div>
</CardContent> </CardContent>
@ -112,25 +119,19 @@ const About = () => {
</div> </div>
<div> <div>
<h3 className="text-2xl font-bold text-foreground mb-6">Certifications & Standards</h3> <h3 className="text-2xl font-bold text-foreground mb-6">Certifications</h3>
<div className="space-y-4"> <div className="flex flex-wrap gap-2 mb-6">
<p className="text-muted-foreground"> {certifications.slice(0, 4).map((cert, index) => (
Our team holds industry-leading certifications and adheres to the highest
professional standards, ensuring quality and compliance in every inspection.
</p>
<div className="flex flex-wrap gap-2">
{certifications.map((cert, index) => (
<Badge <Badge
key={index} key={index}
variant="secondary" variant="secondary"
className="bg-primary/10 text-primary border-primary/30 hover:bg-primary/20 transition-colors" className="bg-primary/10 text-primary border-primary/30 text-xs"
> >
{cert} {cert}
</Badge> </Badge>
))} ))}
</div> </div>
</div> </div>
</div>
{/* Stats */} {/* Stats */}
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">

View File

@ -1,3 +1,4 @@
import { useEffect, useState } from "react";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
@ -13,6 +14,13 @@ import {
} from "lucide-react"; } from "lucide-react";
const Contact = () => { const Contact = () => {
const [scrollY, setScrollY] = useState(0);
useEffect(() => {
const handleScroll = () => setScrollY(window.scrollY);
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const contactInfo = [ const contactInfo = [
{ {
icon: Phone, icon: Phone,
@ -41,28 +49,28 @@ const Contact = () => {
]; ];
return ( return (
<section id="contact" className="py-24 bg-gradient-dark"> <section id="contact" className="light-section diagonal-cut-top py-24">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div
className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 parallax-element"
style={{ transform: `translateY(${scrollY * 0.05}px)` }}
>
{/* Section Header */} {/* Section Header */}
<div className="text-center mb-16"> <div className="text-center mb-16">
<h2 className="text-4xl md:text-5xl font-bold text-foreground mb-6"> <h2 className="text-4xl md:text-5xl font-bold mb-6">
Get In <span className="text-glow">Touch</span> Get In <span className="text-glow">Touch</span>
</h2> </h2>
<p className="text-xl text-muted-foreground max-w-3xl mx-auto"> <p className="text-xl max-w-2xl mx-auto">
Ready to schedule an inspection or need emergency support? Ready to schedule an inspection? Contact our certified professionals today.
Contact our certified professionals today.
</p> </p>
</div> </div>
{/* Emergency Alert */} {/* Emergency Alert */}
<div className="bg-primary/10 border border-primary/30 rounded-lg p-4 mb-12 max-w-4xl mx-auto"> <div className="bg-primary/10 border border-primary/30 rounded-lg p-4 mb-12 max-w-3xl mx-auto">
<div className="flex items-center space-x-3"> <div className="flex items-center space-x-3">
<AlertCircle className="w-5 h-5 text-primary flex-shrink-0" /> <AlertCircle className="w-5 h-5 text-primary flex-shrink-0" />
<div> <div>
<h3 className="font-semibold text-primary">24/7 Emergency Support Available</h3> <h3 className="font-semibold text-primary">24/7 Emergency Support</h3>
<p className="text-sm text-muted-foreground"> <p className="text-sm">For urgent inspection needs, call our hotline immediately.</p>
For urgent inspection needs or emergency situations, call our hotline immediately.
</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,16 +1,26 @@
import { useEffect, useState } from "react";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { ArrowRight, Shield, Clock } from "lucide-react"; import { ArrowRight, Shield, Clock } from "lucide-react";
const Hero = () => { const Hero = () => {
const [scrollY, setScrollY] = useState(0);
useEffect(() => {
const handleScroll = () => setScrollY(window.scrollY);
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
return ( return (
<section id="home" className="relative min-h-screen flex items-center justify-center overflow-hidden"> <section id="home" className="relative min-h-screen flex items-center justify-center overflow-hidden">
{/* Background Image */} {/* Background Image with Parallax */}
<div <div
className="absolute inset-0 z-0" className="absolute inset-0 z-0 parallax-element"
style={{ style={{
backgroundImage: `url('/lovable-uploads/9e823547-8ef1-49cf-8796-5bdd3ef81771.png')`, backgroundImage: `url('/lovable-uploads/981f66b9-4fe6-482d-8377-9c377a293e62.png')`,
backgroundSize: 'cover', backgroundSize: 'cover',
backgroundPosition: 'center', backgroundPosition: 'center',
transform: `translateY(${scrollY * 0.5}px)`,
}} }}
/> />
@ -29,19 +39,18 @@ const Hero = () => {
{/* Main Headline */} {/* Main Headline */}
<h1 className="text-5xl md:text-7xl font-bold text-foreground mb-6 leading-tight"> <h1 className="text-5xl md:text-7xl font-bold text-foreground mb-6 leading-tight">
Premier Industrial Premier Industrial
<span className="block text-glow">Inspection Services</span> <span className="block text-glow">Inspection</span>
</h1> </h1>
{/* Subheadline */} {/* Subheadline */}
<p className="text-xl md:text-2xl text-muted-foreground mb-8 max-w-3xl mx-auto leading-relaxed"> <p className="text-xl md:text-2xl text-muted-foreground mb-8 max-w-2xl mx-auto leading-relaxed">
Ensuring safety, reliability & integrity with cutting-edge non-destructive Professional non-destructive testing and pipeline integrity services across Texas.
testing techniques. Professional pipeline inspection and welding services across Texas.
</p> </p>
{/* CTA Buttons */} {/* CTA Buttons */}
<div className="flex flex-col sm:flex-row gap-4 justify-center items-center mb-12"> <div className="flex flex-col sm:flex-row gap-4 justify-center items-center mb-12">
<Button size="lg" className="btn-orange-glow text-lg px-8 py-4"> <Button size="lg" className="btn-orange-glow text-lg px-8 py-4">
Schedule Your Inspection Today Schedule Inspection
<ArrowRight className="w-5 h-5 ml-2" /> <ArrowRight className="w-5 h-5 ml-2" />
</Button> </Button>
<Button <Button
@ -50,23 +59,23 @@ const Hero = () => {
className="text-lg px-8 py-4 border-primary/30 text-primary hover:bg-primary/10" className="text-lg px-8 py-4 border-primary/30 text-primary hover:bg-primary/10"
> >
<Clock className="w-5 h-5 mr-2" /> <Clock className="w-5 h-5 mr-2" />
Request Emergency Support (24/7) 24/7 Emergency
</Button> </Button>
</div> </div>
{/* Trust Indicators */} {/* Trust Indicators */}
<div className="grid grid-cols-1 md:grid-cols-3 gap-8 mt-16"> <div className="grid grid-cols-3 gap-8 mt-16">
<div className="text-center"> <div className="text-center">
<div className="text-3xl font-bold text-glow mb-2">15+</div> <div className="text-2xl font-bold text-glow mb-1">15+</div>
<div className="text-muted-foreground">Years Experience</div> <div className="text-muted-foreground text-sm">Years</div>
</div> </div>
<div className="text-center"> <div className="text-center">
<div className="text-3xl font-bold text-glow mb-2">24/7</div> <div className="text-2xl font-bold text-glow mb-1">24/7</div>
<div className="text-muted-foreground">Emergency Response</div> <div className="text-muted-foreground text-sm">Support</div>
</div> </div>
<div className="text-center"> <div className="text-center">
<div className="text-3xl font-bold text-glow mb-2">100%</div> <div className="text-2xl font-bold text-glow mb-1">100%</div>
<div className="text-muted-foreground">Certified Inspectors</div> <div className="text-muted-foreground text-sm">Certified</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,3 +1,4 @@
import { useEffect, useState } from "react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { import {
@ -5,71 +6,64 @@ import {
Wrench, Wrench,
Shield, Shield,
Zap, Zap,
Settings,
CheckCircle, CheckCircle,
ArrowRight ArrowRight
} from "lucide-react"; } from "lucide-react";
const Services = () => { const Services = () => {
const [scrollY, setScrollY] = useState(0);
useEffect(() => {
const handleScroll = () => setScrollY(window.scrollY);
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const services = [ const services = [
{ {
icon: Search, icon: Search,
title: "Non-Destructive Testing", title: "Non-Destructive Testing",
description: "Advanced ultrasonic, radiographic, and magnetic particle testing for comprehensive material analysis without damage.", description: "Advanced testing methods for comprehensive analysis without material damage.",
features: ["Ultrasonic Testing (UT)", "Radiographic Testing (RT)", "Magnetic Particle Testing (MT)", "Liquid Penetrant Testing (PT)"] features: ["Ultrasonic Testing", "Radiographic Testing", "Magnetic Particle Testing"]
}, },
{ {
icon: Wrench, icon: Wrench,
title: "Pipeline Integrity", title: "Pipeline Integrity",
description: "Complete pipeline inspection and integrity management services ensuring optimal performance and safety compliance.", description: "Complete pipeline inspection and integrity management services.",
features: ["Pipeline Inspection", "Integrity Assessment", "Corrosion Monitoring", "Leak Detection"] features: ["Pipeline Inspection", "Integrity Assessment", "Corrosion Monitoring"]
}, },
{ {
icon: Shield, icon: Shield,
title: "Welding Inspection", title: "Welding Inspection",
description: "Certified welding inspection services meeting AWS and ASME standards for critical industrial applications.", description: "Certified welding inspection meeting AWS and ASME standards.",
features: ["Visual Inspection", "Weld Quality Assessment", "Code Compliance", "Documentation"] features: ["Visual Inspection", "Weld Quality Assessment", "Code Compliance"]
}, },
{ {
icon: Zap, icon: Zap,
title: "Pressure Vessel Testing", title: "Pressure Vessel Testing",
description: "Comprehensive pressure vessel inspection and testing services ensuring operational safety and regulatory compliance.", description: "Comprehensive pressure vessel inspection and testing services.",
features: ["Hydrostatic Testing", "Pneumatic Testing", "Thickness Measurement", "Safety Evaluation"] features: ["Hydrostatic Testing", "Thickness Measurement", "Safety Evaluation"]
},
{
icon: Settings,
title: "Industrial Maintenance",
description: "Preventive maintenance and inspection programs designed to maximize equipment life and minimize downtime.",
features: ["Scheduled Inspections", "Condition Monitoring", "Maintenance Planning", "Equipment Certification"]
},
{
icon: CheckCircle,
title: "Quality Assurance",
description: "Complete quality assurance programs ensuring your operations meet the highest industry standards and regulations.",
features: ["Quality Control", "Standards Compliance", "Audit Services", "Training Programs"]
} }
]; ];
return ( return (
<section id="services" className="py-24 bg-gradient-dark"> <section id="services" className="light-section diagonal-cut-top py-24">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div
className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 parallax-element"
style={{ transform: `translateY(${scrollY * 0.1}px)` }}
>
{/* Section Header */} {/* Section Header */}
<div className="text-center mb-16"> <div className="text-center mb-16">
<h2 className="text-4xl md:text-5xl font-bold text-foreground mb-6"> <h2 className="text-4xl md:text-5xl font-bold mb-6">
Comprehensive Industrial Our <span className="text-glow">Services</span>
<span className="block text-glow">Inspection Services</span>
</h2> </h2>
<p className="text-xl text-muted-foreground max-w-3xl mx-auto"> <p className="text-xl max-w-2xl mx-auto">
From non-destructive testing to complete integrity management, we provide Professional inspection services to keep your operations safe and compliant.
the expertise and technology to keep your operations safe and compliant.
</p> </p>
</div> </div>
{/* Energy Divider */}
<div className="w-full h-px bg-gradient-energy mb-16"></div>
{/* Services Grid */} {/* Services Grid */}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mb-16"> <div className="grid grid-cols-1 md:grid-cols-2 gap-8 mb-16">
{services.map((service, index) => { {services.map((service, index) => {
const IconComponent = service.icon; const IconComponent = service.icon;
return ( return (
@ -78,17 +72,17 @@ const Services = () => {
<div className="w-12 h-12 bg-primary/10 rounded-lg flex items-center justify-center mb-4 group-hover:bg-primary/20 transition-colors"> <div className="w-12 h-12 bg-primary/10 rounded-lg flex items-center justify-center mb-4 group-hover:bg-primary/20 transition-colors">
<IconComponent className="w-6 h-6 text-primary" /> <IconComponent className="w-6 h-6 text-primary" />
</div> </div>
<CardTitle className="text-xl font-bold text-foreground"> <CardTitle className="text-xl font-bold">
{service.title} {service.title}
</CardTitle> </CardTitle>
<CardDescription className="text-muted-foreground"> <CardDescription>
{service.description} {service.description}
</CardDescription> </CardDescription>
</CardHeader> </CardHeader>
<CardContent> <CardContent>
<ul className="space-y-2"> <ul className="space-y-2">
{service.features.map((feature, idx) => ( {service.features.map((feature, idx) => (
<li key={idx} className="flex items-center text-sm text-muted-foreground"> <li key={idx} className="flex items-center text-sm">
<CheckCircle className="w-4 h-4 text-primary mr-2 flex-shrink-0" /> <CheckCircle className="w-4 h-4 text-primary mr-2 flex-shrink-0" />
{feature} {feature}
</li> </li>
@ -102,15 +96,15 @@ const Services = () => {
{/* CTA Section */} {/* CTA Section */}
<div className="text-center"> <div className="text-center">
<div className="bg-card/50 backdrop-blur-sm border border-border rounded-2xl p-8 max-w-4xl mx-auto"> <div className="bg-white/50 backdrop-blur-sm border border-gray-200 rounded-2xl p-8 max-w-3xl mx-auto">
<h3 className="text-2xl font-bold text-foreground mb-4"> <h3 className="text-2xl font-bold mb-4">
Need Custom Inspection Solutions? Need Custom Solutions?
</h3> </h3>
<p className="text-muted-foreground mb-6"> <p className="mb-6">
Our experienced team can develop tailored inspection programs to meet your specific requirements and industry standards. We develop tailored inspection programs to meet your specific requirements.
</p> </p>
<Button className="btn-orange-glow"> <Button className="btn-orange-glow">
Discuss Your Requirements Discuss Requirements
<ArrowRight className="w-4 h-4 ml-2" /> <ArrowRight className="w-4 h-4 ml-2" />
</Button> </Button>
</div> </div>

View File

@ -45,6 +45,14 @@ All colors MUST be HSL.
--radius: 0.5rem; --radius: 0.5rem;
/* Light theme variants for white sections */
--background-light: 0 0% 100%;
--foreground-light: 0 0% 10%;
--card-light: 0 0% 98%;
--card-foreground-light: 0 0% 15%;
--muted-light: 0 0% 95%;
--muted-foreground-light: 0 0% 40%;
/* Custom luxury industrial tokens */ /* Custom luxury industrial tokens */
--industrial-orange: 24 100% 50%; --industrial-orange: 24 100% 50%;
--industrial-orange-glow: 24 100% 60%; --industrial-orange-glow: 24 100% 60%;
@ -135,6 +143,22 @@ All colors MUST be HSL.
} }
@layer components { @layer components {
/* Light theme classes */
.light-section {
background: hsl(var(--background-light));
color: hsl(var(--foreground-light));
}
.light-section .card {
background: hsl(var(--card-light));
color: hsl(var(--card-foreground-light));
border-color: hsl(0 0% 90%);
}
.light-section .text-muted-foreground {
color: hsl(var(--muted-foreground-light));
}
/* Orange glow button variant */ /* Orange glow button variant */
.btn-orange-glow { .btn-orange-glow {
@apply bg-primary text-primary-foreground font-semibold px-8 py-4 rounded-lg; @apply bg-primary text-primary-foreground font-semibold px-8 py-4 rounded-lg;
@ -143,6 +167,48 @@ All colors MUST be HSL.
@apply border border-primary/30; @apply border border-primary/30;
} }
/* Parallax container */
.parallax-container {
transform-style: preserve-3d;
perspective: 1000px;
}
.parallax-element {
will-change: transform;
}
/* Diagonal cut sections */
.diagonal-cut-bottom {
position: relative;
}
.diagonal-cut-bottom::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 100px;
background: hsl(var(--background));
clip-path: polygon(0 50%, 100% 100%, 0 100%);
}
.diagonal-cut-top {
position: relative;
padding-top: 100px;
}
.diagonal-cut-top::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 100px;
background: hsl(var(--background-light));
clip-path: polygon(0 0, 100% 50%, 100% 0);
}
/* Energy flow animation */ /* Energy flow animation */
.energy-flow { .energy-flow {
@apply relative overflow-hidden; @apply relative overflow-hidden;
@ -162,6 +228,12 @@ All colors MUST be HSL.
@apply hover:-translate-y-1; @apply hover:-translate-y-1;
} }
/* Light theme industrial card */
.light-section .industrial-card {
@apply bg-white border-gray-200;
@apply hover:border-primary/50 hover:shadow-[var(--shadow-orange-glow)];
}
/* Glowing text */ /* Glowing text */
.text-glow { .text-glow {
@apply text-primary; @apply text-primary;