att layout

This commit is contained in:
eycksilva 2026-01-20 15:48:58 -03:00
parent 6ceb8c70bb
commit 6a9bbd84cd
9 changed files with 187 additions and 180 deletions

BIN
frontend/public/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 MiB

BIN
frontend/public/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
frontend/public/9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View file

@ -1,6 +1,12 @@
@import "tailwindcss";
@import "tw-animate-css";
body {
margin: 0;
padding: 0;
background-color: #1F2F40;
}
@custom-variant dark (&:is(.dark *));
@theme inline {

View file

@ -20,7 +20,7 @@ import type { Job } from "@/lib/types"
export default function HomePage() {
const { t } = useTranslation()
const config = useConfig()
const [featuredJobs, setFeaturedJobs] = useState<Job[]>([])
const [featuredJobs, setFeaturedJobs] = useState<Job[]>(mockJobs.slice(0, 31))
const [loading, setLoading] = useState(true)
const [featuredIndex, setFeaturedIndex] = useState(0)
const [moreJobsIndex, setMoreJobsIndex] = useState(0)
@ -56,9 +56,9 @@ export default function HomePage() {
const featuredList = featuredData.data ? mapJobs(featuredData.data) : []
console.log("[DEBUG] Mapped featured jobs:", featuredList.length, "jobs")
if (featuredList.length === 31) {
console.log("[DEBUG] Using featured jobs only (31 found)")
setFeaturedJobs(featuredList)
if (featuredList.length >= 24) {
console.log("[DEBUG] Using featured/API jobs")
setFeaturedJobs(featuredList.slice(0, 31))
return
}
@ -76,20 +76,12 @@ export default function HomePage() {
const combined = [...featuredList, ...fallbackList].slice(0, 31)
console.log("[DEBUG] Combined jobs:", combined.length, "jobs")
if (combined.length === 31) {
console.log("[DEBUG] Using combined jobs (31)")
if (combined.length >= 24) {
console.log("[DEBUG] Using combined jobs")
setFeaturedJobs(combined)
} else if (combined.length > 0) {
console.log("[DEBUG] Using combined jobs (less than 31)")
setFeaturedJobs(combined)
} else {
console.log("[DEBUG] ⚠️ USING MOCK DATA - No API jobs found!")
setFeaturedJobs(mockJobs.slice(0, 31))
}
} catch (error) {
console.error("[DEBUG] ❌ Error fetching featured jobs:", error)
console.log("[DEBUG] ⚠️ USING MOCK DATA due to error")
setFeaturedJobs(mockJobs.slice(0, 31))
} finally {
setLoading(false)
}
@ -98,29 +90,18 @@ export default function HomePage() {
}, [])
return (
<div className="min-h-screen flex flex-col py-2.5">
<div className="min-h-screen flex flex-col">
<Navbar />
<main className="flex-1">
{/* Hero Section */}
<section className="bg-primary text-white relative overflow-hidden flex items-center min-h-[640px] mb-12">
<section className="bg-primary text-white relative overflow-hidden flex items-center min-h-[500px]">
<div className="absolute inset-0 z-0">
{/* Desktop */}
<Image
src="/vaga2.png"
src="/10.png"
alt="Background"
fill
className="hidden md:block object-cover object-center"
quality={100}
priority
sizes="100vw"
/>
{/* Mobile */}
<Image
src="/vagamobile2.png"
alt="Background"
fill
className="block md:hidden object-cover object-center"
className="object-cover object-center"
quality={100}
priority
sizes="100vw"
@ -128,12 +109,12 @@ export default function HomePage() {
</div>
<div className="container mx-auto px-4 sm:px-6 lg:px-8 w-full relative z-10">
<div className="max-w-7xl mx-auto">
<div className="text-left max-w-2xl">
<div className="text-left max-w-2xl py-12">
<motion.h1
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5 }}
className="text-4xl sm:text-5xl lg:text-5xl font-bold mb-6"
className="text-4xl sm:text-5xl lg:text-5xl font-bold mb-4 text-white"
>
{t('home.hero.title')}<br/>{t('home.hero.titleLine2')}
</motion.h1>
@ -141,7 +122,7 @@ export default function HomePage() {
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5, delay: 0.1 }}
className="text-lg mb-8 leading-relaxed text-white/90"
className="text-base mb-8 leading-relaxed text-white"
>
{t('home.hero.subtitle')}
</motion.p>
@ -152,7 +133,7 @@ export default function HomePage() {
className="flex gap-4"
>
<Link href="/jobs">
<Button size="lg" className="bg-white text-primary hover:bg-white/95 hover:shadow-lg font-semibold px-8 py-6 text-base rounded-lg transition-all duration-200">
<Button size="lg" className="bg-primary hover:bg-primary/90 text-white hover:shadow-lg font-semibold px-8 py-3 text-base rounded-lg transition-all duration-200 border-0">
{t('home.hero.cta')}
</Button>
</Link>
@ -163,10 +144,10 @@ export default function HomePage() {
</section>
{/* Search Bar Section */}
<section className="bg-white py-12">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl">
<div className="bg-white rounded-xl shadow-md p-8">
<div className="flex items-center gap-3 mb-6">
<section className="bg-white py-16">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
<div className="mb-8">
<div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-3 mb-6">
<div className="flex-1 relative">
<svg className="absolute left-4 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
@ -174,84 +155,72 @@ export default function HomePage() {
<input
type="text"
placeholder={t('home.search.placeholder')}
className="w-full pl-12 pr-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent text-sm"
className="w-full h-14 pl-12 pr-4 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent text-base bg-white shadow-sm"
/>
</div>
<Button className="bg-primary hover:bg-primary/90 text-white px-8 py-3 rounded-lg font-medium flex items-center gap-2">
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<Button className="bg-primary hover:bg-primary/90 text-white h-14 px-10 rounded-lg font-semibold flex items-center justify-center gap-2 shadow-md hover:shadow-lg transition-all">
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z" />
</svg>
{t('home.search.filter')}
</Button>
</div>
<div className="grid grid-cols-1 md:grid-cols-4 gap-6">
<div className="border border-gray-300 rounded-lg p-4">
<button className="flex items-center justify-between w-full mb-3">
<span className="text-sm font-semibold text-gray-900">{t('home.search.contractType')}</span>
<svg className="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
<div className="space-y-2">
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-2" />
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<div className="bg-white border-2 border-gray-200 rounded-xl p-5 shadow-sm hover:border-primary/30 transition-colors">
<div className="flex items-center justify-between w-full mb-4">
<span className="text-base font-bold text-gray-900">{t('home.search.contractType')}</span>
</div>
<div className="space-y-3">
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900 transition-colors">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-3" />
<span>{t('home.search.pj')}</span>
</label>
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-2" />
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900 transition-colors">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-3" />
<span>{t('home.search.clt')}</span>
</label>
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-2" />
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900 transition-colors">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-3" />
<span>{t('home.search.freelancer')}</span>
</label>
</div>
</div>
<div className="border border-gray-300 rounded-lg p-4">
<button className="flex items-center justify-between w-full mb-3">
<span className="text-sm font-semibold text-gray-900">{t('home.search.workMode')}</span>
<svg className="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
<div className="space-y-2">
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-2" />
<div className="bg-white border-2 border-gray-200 rounded-xl p-5 shadow-sm hover:border-primary/30 transition-colors">
<div className="flex items-center justify-between w-full mb-4">
<span className="text-base font-bold text-gray-900">{t('home.search.workMode')}</span>
</div>
<div className="space-y-3">
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900 transition-colors">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-3" />
<span>{t('home.search.homeOffice')}</span>
</label>
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-2" />
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900 transition-colors">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-3" />
<span>{t('home.search.presencial')}</span>
</label>
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-2" />
<label className="flex items-center text-sm text-gray-700 cursor-pointer hover:text-gray-900 transition-colors">
<input type="checkbox" className="w-4 h-4 text-primary border-gray-300 rounded focus:ring-primary mr-3" />
<span>{t('home.search.hybrid')}</span>
</label>
</div>
</div>
<div className="border border-gray-300 rounded-lg p-4">
<button className="flex items-center justify-between w-full mb-3">
<span className="text-sm font-semibold text-gray-900">{t('home.search.location')}</span>
<svg className="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
<select className="w-full px-3 py-2 text-sm text-gray-500 bg-gray-50 border border-gray-200 rounded focus:outline-none focus:ring-2 focus:ring-primary">
<div className="bg-white border-2 border-gray-200 rounded-xl p-5 shadow-sm hover:border-primary/30 transition-colors">
<div className="flex items-center justify-between w-full mb-4">
<span className="text-base font-bold text-gray-900">{t('home.search.location')}</span>
</div>
<select className="w-full px-4 py-2.5 text-sm text-gray-700 bg-gray-50 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent">
<option>{t('home.search.select')}</option>
</select>
</div>
<div className="border border-gray-300 rounded-lg p-4">
<button className="flex items-center justify-between w-full mb-3">
<span className="text-sm font-semibold text-gray-900">{t('home.search.salary')}</span>
<svg className="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
</svg>
</button>
<select className="w-full px-3 py-2 text-sm text-gray-500 bg-gray-50 border border-gray-200 rounded focus:outline-none focus:ring-2 focus:ring-primary">
<div className="bg-white border-2 border-gray-200 rounded-xl p-5 shadow-sm hover:border-primary/30 transition-colors">
<div className="flex items-center justify-between w-full mb-4">
<span className="text-base font-bold text-gray-900">{t('home.search.salary')}</span>
</div>
<select className="w-full px-4 py-2.5 text-sm text-gray-700 bg-gray-50 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent">
<option>{t('home.search.select')}</option>
</select>
</div>
@ -262,7 +231,7 @@ export default function HomePage() {
{/* Featured Jobs */}
<section className="bg-white py-12">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
<div className="flex justify-between items-center mb-8">
<h2 className="text-2xl font-bold text-gray-900">{t('home.featuredJobs.title')}</h2>
<div className="flex gap-2">
@ -290,7 +259,7 @@ export default function HomePage() {
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
{(featuredJobs.length >= 16 ? featuredJobs.slice(0, 16) : mockJobs.slice(0, 16))
.slice(featuredIndex, featuredIndex + 8)
.map((job, index) => {
@ -303,38 +272,39 @@ export default function HomePage() {
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.3 }}
>
<Card className="hover:shadow-lg transition-shadow border-0 rounded-xl overflow-hidden bg-white">
<div className="bg-gradient-to-br from-gray-800 to-gray-900 p-8 flex items-center justify-center rounded-t-xl">
<div className="w-16 h-16 bg-white rounded-lg flex items-center justify-center">
<Building2 className="w-8 h-8 text-gray-900" />
</div>
<Card className="hover:shadow-xl transition-shadow border border-gray-200 rounded-2xl overflow-hidden bg-white h-full flex flex-col">
{/* Ícone no topo */}
<div className="p-6 pb-4">
<div className="w-14 h-14 bg-gray-100 rounded-xl flex items-center justify-center mb-4">
<Building2 className="w-7 h-7 text-gray-900" />
</div>
{/* Conteúdo do card */}
<div className="p-4">
<h3 className="font-bold text-base mb-3 text-gray-900 line-clamp-2">{job.title}</h3>
{/* Título */}
<h3 className="font-bold text-lg mb-3 text-gray-900 line-clamp-2 min-h-[3.5rem]">{job.title}</h3>
{/* Tags */}
<div className="flex flex-wrap gap-2 mb-4">
<span className="text-xs px-2 py-1 bg-blue-50 text-blue-700 rounded-md border border-blue-200">
<div className="flex flex-wrap gap-2 mb-3">
<span className="text-xs px-3 py-1 bg-blue-50 text-blue-700 rounded-md border border-blue-200">
{job.company}
</span>
<span className="text-xs px-2 py-1 bg-blue-50 text-blue-700 rounded-md border border-blue-200">
<span className="text-xs px-3 py-1 bg-blue-50 text-blue-700 rounded-md border border-blue-200">
{job.location}
</span>
</div>
{/* Data */}
<div className="flex items-center gap-1 mb-4 text-gray-500">
<div className="flex items-center gap-1.5 text-gray-500 mb-4">
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
</svg>
<span className="text-xs">{randomDate}</span>
</div>
</div>
{/* Botão */}
<div className="px-6 pb-6 mt-auto">
<Link href={`/jobs/${job.id}`}>
<Button size="sm" className="w-full bg-primary hover:bg-primary/90 text-white rounded-md font-semibold">
<Button size="lg" className="w-full bg-primary hover:bg-primary/90 text-white rounded-lg font-semibold shadow-lg">
{t('home.featuredJobs.apply')}
</Button>
</Link>
@ -348,19 +318,25 @@ export default function HomePage() {
{/* More Jobs Section */}
<section className="bg-white py-12">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
<div className="flex justify-between items-center mb-6">
<h2 className="text-2xl font-bold text-gray-900">{t('home.moreJobs.title')}</h2>
<Link href="/jobs">
<Button className="bg-primary hover:bg-primary/90 text-white rounded-md px-6">{t('home.moreJobs.viewAll')}</Button>
<Button className="bg-primary hover:bg-primary/90 text-white rounded-md px-6 py-2">{t('home.moreJobs.viewAll')}</Button>
</Link>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
{(featuredJobs.length >= 30 ? featuredJobs.slice(16, 30) : mockJobs.slice(0, 14))
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
{mockJobs.slice(0, 8)
.map((job, index) => {
const dates = ['03/06', '07/06', '10/06', '13/06', '16/06', '18/06'];
const randomDate = dates[index % dates.length];
const colors = [
'bg-cyan-500', 'bg-blue-500', 'bg-indigo-500', 'bg-gray-500',
'bg-teal-500', 'bg-sky-500', 'bg-orange-500', 'bg-purple-500'
];
const bgColor = colors[index % colors.length];
const icons = ['💻', '🎨', '📊', '🚀', '⚙️', '🔧', '📱', '🎯'];
const icon = icons[index % icons.length];
return (
<motion.div
key={job.id}
@ -368,46 +344,46 @@ export default function HomePage() {
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.3 }}
>
<Card className="hover:shadow-md transition-shadow border border-gray-200 bg-white">
<Card className="hover:shadow-lg transition-all border border-gray-200 bg-white rounded-xl overflow-hidden group cursor-pointer h-full">
<CardContent className="p-5">
<div className="flex gap-4">
{/* Logo da empresa */}
<div className="flex-shrink-0">
<Building2 className="w-12 h-12 text-gray-900" />
{/* Cabeçalho com logo e seta */}
<div className="flex items-start justify-between mb-4">
<div className="flex items-start gap-3 flex-1">
<div className={`w-12 h-12 ${bgColor} rounded-full flex items-center justify-center text-white text-xl flex-shrink-0`}>
{icon}
</div>
<div className="flex-1 min-w-0">
<h3 className="font-bold text-base text-gray-900 line-clamp-1 mb-1">{job.title}</h3>
<p className="text-sm text-gray-600 line-clamp-1">{job.company}</p>
</div>
</div>
<ChevronRight className="w-5 h-5 text-gray-400 group-hover:text-gray-600 transition-colors flex-shrink-0 ml-2" />
</div>
{/* Informações da vaga */}
<div className="flex-1 min-w-0">
<div className="flex items-start justify-between mb-2">
<div className="flex-1">
<h3 className="font-semibold text-base mb-1 text-gray-900">{job.title}</h3>
<p className="text-sm text-gray-600 mb-2">{job.company}</p>
<div className="flex flex-wrap gap-2 mb-3">
<span className="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800">
{/* Tags */}
<div className="mb-4">
<div className="flex flex-wrap gap-1.5">
<span className="text-xs px-2 py-0.5 bg-gray-100 text-gray-700 rounded">
{job.location}
</span>
<span className="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800">
<span className="text-xs px-2 py-0.5 bg-gray-100 text-gray-700 rounded">
{job.type}
</span>
</div>
</div>
<ChevronRight className="w-5 h-5 text-gray-400 flex-shrink-0 ml-2" />
</div>
<div className="flex items-center justify-between">
<div className="flex items-center gap-1 text-gray-500">
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" />
</svg>
<span className="text-xs">{randomDate}</span>
</div>
<Link href={`/jobs/${job.id}`}>
<Button size="sm" className="bg-primary hover:bg-primary/90 text-white rounded-md">
{t('home.featuredJobs.apply')}
{/* Rodapé com botões */}
<div className="flex items-center gap-2 pt-3 border-t border-gray-100">
<Link href={`/jobs/${job.id}`} className="flex-1">
<Button size="sm" className="w-full bg-primary hover:bg-primary/90 text-white rounded-md font-medium text-xs h-8">
Aplicar agora
</Button>
</Link>
</div>
</div>
<button className="w-8 h-8 flex items-center justify-center border border-gray-300 rounded-md hover:bg-gray-50 transition-colors">
<svg className="w-4 h-4 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z" />
</svg>
</button>
</div>
</CardContent>
</Card>
@ -423,7 +399,7 @@ export default function HomePage() {
<div className="bg-primary rounded-2xl overflow-hidden shadow-lg relative">
<div className="absolute inset-0 z-0">
<Image
src="/optr1.png"
src="/12.png"
alt="Background"
fill
className="object-cover object-right"

View file

@ -9,7 +9,7 @@ export function Footer() {
return (
<footer className="border-t border-gray-200 bg-white py-12">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-6xl">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-8xl">
<div className="grid grid-cols-1 md:grid-cols-4 gap-8">
<div>
<h3 className="font-bold mb-4 text-gray-900">Informações</h3>
@ -57,27 +57,27 @@ export function Footer() {
<div>
<h3 className="font-bold mb-4 text-gray-900">Redes Sociais</h3>
<div className="flex gap-3">
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-primary flex items-center justify-center transition-colors">
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-[#1F2F40] flex items-center justify-center transition-colors">
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/>
</svg>
</a>
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-primary flex items-center justify-center transition-colors">
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-[#1F2F40] flex items-center justify-center transition-colors">
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M9 8h-3v4h3v12h5v-12h3.642l.358-4h-4v-1.667c0-.955.192-1.333 1.115-1.333h2.885v-5h-3.808c-3.596 0-5.192 1.583-5.192 4.615v3.385z"/>
</svg>
</a>
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-primary flex items-center justify-center transition-colors">
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-[#1F2F40] flex items-center justify-center transition-colors">
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/>
</svg>
</a>
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-primary flex items-center justify-center transition-colors">
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-[#1F2F40] flex items-center justify-center transition-colors">
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/>
</svg>
</a>
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-primary flex items-center justify-center transition-colors">
<a href="#" className="w-10 h-10 rounded-lg border-2 border-gray-300 hover:bg-gray-50 text-[#1F2F40] flex items-center justify-center transition-colors">
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z"/>
</svg>

View file

@ -24,8 +24,8 @@ export function LanguageSwitcher() {
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="sm" className="w-12 px-0 gap-2 focus-visible:ring-0 focus-visible:ring-offset-0">
<Globe className="h-4 w-4" />
<Button variant="ghost" size="sm" className="w-12 px-0 gap-2 focus-visible:ring-0 focus-visible:ring-offset-0 hover:bg-transparent">
<Globe className="h-4 w-4 text-white" />
<span className="sr-only">Toggle language</span>
</Button>
</DropdownMenuTrigger>

View file

@ -28,13 +28,16 @@ export function Navbar() {
]
return (
<nav className="border-b border-border bg-white sticky top-0 z-50 shadow-sm">
<nav className="bg-[#1F2F40] sticky top-0 z-50 shadow-sm">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex h-16 items-center justify-between">
{/* Logo */}
<Link href="/" className="flex items-center gap-2 hover:opacity-80 transition-opacity">
<Image src="/logohorse.png" alt="GoHorse Jobs" width={48} height={48} />
<span className="text-lg font-bold text-black">GoHorse Jobs</span>
<span className="text-xl font-bold">
<span className="text-white">GoHorse </span>
<span className="text-primary">Jobs</span>
</span>
</Link>
{/* Desktop Navigation - moved to right side */}
@ -43,7 +46,7 @@ export function Navbar() {
<Link
key={item.href}
href={item.href}
className="text-sm font-medium text-foreground hover:text-primary transition-colors"
className="text-sm font-medium text-white hover:text-primary transition-colors"
>
{item.label}
</Link>
@ -61,15 +64,15 @@ export function Navbar() {
</Button>
</Link>
) : (
<>
<div className="flex items-center gap-0 border-2 border-primary rounded-lg overflow-hidden">
<Link href="/login">
<Button variant="outline" className="gap-2 text-primary border-primary hover:bg-primary hover:text-white">
<Button variant="ghost" className="gap-2 text-primary hover:bg-primary/10 rounded-none border-r border-primary px-6">
{t('footer.login')}
</Button>
</Link>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="icon" className="text-primary">
<Button variant="ghost" size="icon" className="text-primary hover:bg-primary/10 rounded-none px-3">
<Menu className="w-5 h-5" />
</Button>
</DropdownMenuTrigger>
@ -88,7 +91,7 @@ export function Navbar() {
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</>
</div>
)}
</div>

View file

@ -367,6 +367,28 @@ export const mockJobs: Job[] = [
requirements: ["React", "Node.js", "MongoDB", "4+ years"],
postedAt: "2025-09-14",
},
{
id: "33",
title: "UX Researcher",
company: "UserFirst",
location: "São Paulo, SP",
type: "full-time",
salary: "R$ 9,000 - R$ 14,000",
description: "Conduct user research to improve product experiences.",
requirements: ["UX Research", "User testing", "Analytics", "3+ years"],
postedAt: "2025-09-13",
},
{
id: "34",
title: "Data Scientist",
company: "DataMind",
location: "Remote",
type: "remote",
salary: "R$ 14,000 - R$ 21,000",
description: "Build predictive models and analyze large datasets.",
requirements: ["Python", "Machine Learning", "Statistics", "4+ years"],
postedAt: "2025-09-12",
},
];
export const mockApplications: Application[] = [