import React, { useState, useEffect } from 'react';
import { Menu, X, ArrowRight, Star, Scissors, Info, ShoppingBag, Trash2, Check, Plus, Calendar, ShieldCheck, Image as ImageIcon, Upload, Instagram } from 'lucide-react';
const AgathaFernedaVogue = () => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const [scrolled, setScrolled] = useState(false);
// Modal & Cart States
const [selectedService, setSelectedService] = useState(null);
const [activeStyle, setActiveStyle] = useState(null);
const [cart, setCart] = useState([]);
const [isCartOpen, setIsCartOpen] = useState(false);
// Add-on State (Local selection inside modal)
const [selectedAddOns, setSelectedAddOns] = useState([]);
// Constants
const WHATSAPP_NUMBER = "5519991970576";
// --- IMAGE SYSTEM CONFIGURATION ---
const SITE_IMAGES = {
hero: 'assets/hero.jpg',
profile: 'assets/profile.jpg',
bg_texture: 'assets/bg.jpg'
};
// Helper para imagem com fallback (Tratamento visual quando não há foto)
const ImageWithFallback = ({ src, alt, className, isHero = false }) => {
const [error, setError] = useState(false);
// Reset error state when src changes
useEffect(() => {
setError(false);
}, [src]);
if (error || !src) {
if (isHero) {
// Fallback específico para a Capa (Hero)
return (
{/* Empty hero fallback for cleaner look */}
);
}
// Fallback padrão para Serviços - OTIMIZADO PARA LEITURA
return (
Sem Foto
Nome exato do arquivo:
{src}
);
}
return (
setError(true)}
/>
);
};
// Handle scroll for navbar styling
useEffect(() => {
const handleScroll = () => {
setScrolled(window.scrollY > 50);
};
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
// Reset active selections when service changes
useEffect(() => {
setActiveStyle(null);
setSelectedAddOns([]);
}, [selectedService]);
const toggleMenu = () => setIsMenuOpen(!isMenuOpen);
const toggleCart = () => setIsCartOpen(!isCartOpen);
const scrollToSection = (id) => {
const element = document.getElementById(id);
if (element) {
element.scrollIntoView({ behavior: 'smooth' });
}
setIsMenuOpen(false);
setActiveSection(id);
};
// --- Logic Helpers ---
const parsePrice = (priceStr) => {
if (!priceStr || typeof priceStr !== 'string') return 0;
const cleanStr = priceStr.toLowerCase().replace('r$', '').replace('*', '').replace('a partir de', '').trim();
if (isNaN(cleanStr.replace(',', '.'))) return 0;
return parseFloat(cleanStr.replace(',', '.'));
};
const toggleAddOn = (addOn) => {
if (selectedAddOns.find(item => item.name === addOn.name)) {
setSelectedAddOns(selectedAddOns.filter(item => item.name !== addOn.name));
} else {
setSelectedAddOns([...selectedAddOns, addOn]);
}
};
const addToCart = (item, specificVariant = null) => {
const parentId = Date.now();
// Add Main Service
const mainItem = {
id: parentId,
name: specificVariant ? `${item.name}: ${specificVariant.name}` : item.name,
price: specificVariant ? specificVariant.price : item.price,
note: specificVariant ? specificVariant.unit : null,
isAddOn: false
};
let itemsToAdd = [mainItem];
// Add Selected Add-ons (if any)
if (selectedAddOns.length > 0) {
selectedAddOns.forEach((addOn, index) => {
itemsToAdd.push({
id: parentId + index + 1,
name: `+ ${addOn.name} (${item.name})`,
price: addOn.price,
note: 'Adicional',
isAddOn: true
});
});
}
setCart([...cart, ...itemsToAdd]);
setIsCartOpen(true);
setSelectedAddOns([]);
};
const removeFromCart = (itemId) => {
setCart(cart.filter(item => item.id !== itemId));
};
const calculateTotal = () => {
return cart.reduce((total, item) => total + parsePrice(item.price), 0);
};
const checkoutWhatsApp = () => {
const total = calculateTotal();
let message = "Olá, Agatha! ✨\n\nFiz uma seleção no site e gostaria de agendar:\n\n";
cart.forEach(item => {
if (item.isAddOn) {
message += ` ➕ *${item.name.replace(/^\+ /, '')}* - R$ ${item.price}\n`;
} else {
message += `▪️ *${item.name}*\n Valor: R$ ${item.price} ${item.note ? `(${item.note})` : ''}\n`;
}
});
message += `\n*Total Estimado: R$ ${total.toFixed(2).replace('.', ',')}*\n`;
message += "\nPodemos verificar a disponibilidade?";
const url = `https://wa.me/${WHATSAPP_NUMBER}?text=${encodeURIComponent(message)}`;
window.open(url, '_blank');
};
// --- Data Configuration ---
const services = {
nails: [
{
id: 'fibra',
image: 'assets/services/fibra.jpg',
name: "Fibra de Vidro",
price: "190,00",
maintenance: "120,00",
note: "Durabilidade de 4 a 5 meses.",
description: "Arquitetura perfeita para suas unhas. Esculpidas fio a fio, proporcionam alongamento com resistência extrema e acabamento natural.",
care: [
"Hidrate as cutículas diariamente.",
"Respeite o prazo de manutenção (15 a 28 dias)."
]
},
{
id: 'gel',
image: 'assets/services/banho_gel.jpg',
name: "Banho de Gel",
price: "130,00",
maintenance: "100,00",
note: "Estruturação sobre unha natural.",
description: "Proteção estruturada sobre as unhas naturais. Permite o crescimento saudável sem quebras, garantindo brilho permanente.",
care: [
"Não lixe as unhas em casa.",
"Manutenção regular evita infiltrações."
]
},
{
id: 'blindagem',
image: 'assets/services/blindagem.jpg',
name: "Blindagem",
price: "90,00",
note: "Proteção leve.",
description: "Camada de proteção para unhas naturais, ideal para evitar descamação e quebra, mantendo a flexibilidade natural da unha com maior resistência.",
care: [
"Evite contato excessivo com produtos químicos.",
"Ideal para quem quer deixar a unha crescer naturalmente."
]
}
],
// Removal Service
removal: {
id: 'remocao',
image: 'assets/services/remocao.jpg',
name: "Remoção Segura",
price: "30,00*",
note: "Consulte opções",
description: "Procedimento técnico para retirada segura do material artificial, preservando a integridade da lâmina natural. Essencial para a saúde das suas unhas.",
menu: [
{ name: "Com Nova Aplicação", desc: "Valor exclusivo para quem fará uma nova aplicação no mesmo atendimento.", price: "30,00", image: 'assets/services/remocao_com_aplicacao.jpg' },
{ name: "Sem Nova Aplicação", desc: "Remoção completa + Manicure Tradicional (Cutilagem e Esmaltação inclusas).", price: "70,00", image: 'assets/services/remocao_sem_aplicacao.jpg' }
],
care: [
"Utilize óleos hidratantes na unha natural após a remoção.",
"Evite contato imediato com produtos químicos fortes."
]
},
// Special Nail Art Object
nailArt: {
id: 'nail_art',
image: 'assets/services/nail_art.jpg',
name: "Nail Art Collection",
price: "20,00*",
note: "Valor inicial base",
description: "Transforme suas unhas em telas de expressão. Nossa curadoria artística oferece desde o minimalismo elegante até composições complexas.",
menu: [
{ name: "Alto Relevo", desc: "Texturas 3D e formas esculpidas.", price: "8,00", unit: "unidade", image: 'assets/services/nail_art_alto_relevo.jpg' },
{ name: "Feito a Mão", desc: "Micropintura artística e traços finos.", price: "15,00", unit: "a partir de", image: 'assets/services/nail_art_feito_a_mao.jpg' },
{ name: "Temáticas", desc: "Coleções sazonais e datas festivas.", price: "15,00", unit: "a partir de", image: 'assets/services/nail_art_tematicas.jpg' },
{ name: "Pedrarias & Charms", desc: "Aplicação de cristais e joias.", price: "5,00", unit: "unidade", image: 'assets/services/nail_art_pedrarias.jpg' }
],
care: ["Evite atrito intenso em artes com relevo."]
},
basics: [
{
id: 'manicure',
image: 'assets/services/manicure.jpg',
name: "Manicure Tradicional",
price: "35,00",
description: "O clássico ritual de cuidado. Cutilagem minuciosa e esmaltação com acabamento impecável.",
addOns: [
{ name: "Esmaltação em Gel", price: "40,00" }
],
care: ["Mantenha a hidratação diária das mãos."]
},
{
id: 'pedicure',
image: 'assets/services/pedicure.jpg',
name: "Pedicure Tradicional",
price: "45,00",
description: "Saúde e estética para seus pés. Inclui tratamento de calosidades superficiais, corte técnico e esmaltação.",
addOns: [
{ name: "Esmaltação em Gel", price: "40,00" },
{ name: "Spa dos Pés", price: "25,00", desc: "Momento relaxante e hidratação para pés ressecados." },
{ name: "Plástica dos Pés", price: "35,00", desc: "Remoção de calosidade superficiais e rachaduras." }
],
care: ["Use calçados confortáveis após o procedimento."]
},
{
id: 'combo',
image: 'assets/services/combo.jpg',
name: "Combo Mãos & Pés",
price: "65,00",
description: "A experiência completa de renovação. Otimize seu tempo cuidando de mãos e pés simultaneamente.",
addOns: [
{ name: "Esmaltação em Gel (Mãos)", price: "40,00" },
{ name: "Esmaltação em Gel (Pés)", price: "40,00" },
{ name: "Esmaltação em Gel (Completo)", price: "75,00" }
],
care: ["Reserve ao menos 2 horas para este atendimento."]
}
],
face: [
{
id: 'des_estrat',
image: 'assets/services/design_estrategico.jpg',
name: "Design Estratégico",
price: "30,00",
description: "Mapeamento geométrico para encontrar o formato de sobrancelha que valoriza seus traços naturais.",
care: ["Evite cremes ou maquiagem na região por 2 horas."]
},
{
id: 'henna',
image: 'assets/services/henna.jpg',
name: "Design com Henna",
price: "45,00",
description: "Design estratégico finalizado com pigmentação temporária.",
care: ["Não molhe as sobrancelhas nas primeiras 12 horas."]
},
{
id: 'brow',
image: 'assets/services/brow_lamination.jpg',
name: "Brow Lamination",
price: "160,00",
description: "Técnica russa de alinhamento dos fios. Cria um efeito volumoso e sofisticado.",
care: ["Mantenha seco nas primeiras 24 horas."]
},
{
id: 'lash',
image: 'assets/services/lash_lifting.jpg',
name: "Lash Lifting",
price: "120,00",
description: "Curvatura e tintura dos cílios naturais.",
care: ["Evite água e vapor nas primeiras 24 horas."]
}
],
packages: [
{ name: "Essential", description: "2 Mãos + 2 Pés", price: "130,00", image: 'assets/services/pacote_essential.jpg' },
{ name: "Premium", description: "4 Mãos + 2 Pés", price: "180,00", image: 'assets/services/pacote_premium.jpg' },
{ name: "Gel Experience", description: "2 Mãos + 2 Pés (Gel)", price: "250,00", image: 'assets/services/pacote_gel_exp.jpg' }
]
};
// Logic to determine display values
const currentDisplayName = activeStyle ? activeStyle.name : (selectedService ? selectedService.name : '');
const currentDisplayPrice = activeStyle && activeStyle.price ? activeStyle.price : (selectedService ? selectedService.price : '');
const currentUnit = activeStyle && activeStyle.unit ? activeStyle.unit : '';
// Logic for Dynamic Image (Style > Service > Default)
const currentImage = activeStyle && activeStyle.image ? activeStyle.image : (selectedService ? selectedService.image : '');
return (
{/* Google Fonts Import */}
{/* Navigation */}
scrollToSection('home')}>
AF Studio
{['Perfil', 'Serviços', 'Pacotes', 'Etiqueta', 'Contato'].map((item) => (
scrollToSection(item.toLowerCase().replace('ç', 'c').replace('õ', 'o'))}
className="hover:text-black transition-colors relative group"
>
{item}
))}
{cart.length > 0 && (
{cart.length}
)}
{isMenuOpen ? : }
{/* Mobile Menu */}
{isMenuOpen && (
{['Perfil', 'Serviços', 'Pacotes', 'Etiqueta', 'Contato'].map((item) => (
scrollToSection(item.toLowerCase().replace('ç', 'c').replace('õ', 'o'))}
className="text-2xl font-serif uppercase tracking-widest hover:text-gray-400 transition-colors"
>
{item}
))}
)}
{/* SHOPPING CART DRAWER */}
setIsCartOpen(false)}
/>
Sua Sacola
setIsCartOpen(false)} className="hover:rotate-90 transition-transform duration-300">
{cart.length === 0 ? (
) : (
{cart.map((item) => (
{item.name}
R$ {item.price} {item.note && item.note !== 'Adicional' && ({item.note}) }
removeFromCart(item.id)}
className="text-black/20 hover:text-red-900 transition-colors"
>
))}
)}
Total Estimado
R$ {calculateTotal().toFixed(2).replace('.', ',')}
Finalizar Pedido via WhatsApp
{/* Service Detail Modal */}
{selectedService && (
setSelectedService(null)}
>
setSelectedService(null)}
className="absolute top-4 right-4 md:top-8 md:right-8 p-2 z-20 group"
>
Fechar
Agatha Ferneda
Edição 2026
•
Collection
•
Piracicaba
{/* Left Column */}
{/* SERVICE IMAGE - Top of Left Column - WIDESCREEN ASPECT RATIO & DYNAMIC SOURCE */}
{/* Subtle editorial number overlay */}
0{Math.floor(Math.random() * 9) + 1}
Serviço em Destaque
{currentDisplayName}
Investimento
{currentDisplayPrice.includes('*') && !activeStyle ? (
a partir de
) : null}
{currentDisplayPrice === 'Consultar' ? 'Consultar' : `R$ ${currentDisplayPrice.replace('*', '')}`}
{currentUnit &&
({currentUnit}) }
{selectedService.maintenance && !activeStyle && (
Manutenção: R$ {selectedService.maintenance}
)}
{/* Right Column */}
{/* Description */}
A
{selectedService.description}
{/* Add-ons for Basics (Esmaltação em Gel, Spa, Plástica) */}
{selectedService.addOns && (
Adicionais Disponíveis
{selectedService.addOns.map((addon, idx) => {
const isSelected = selectedAddOns.some(item => item.name === addon.name);
return (
toggleAddOn(addon)}
className={`flex justify-between items-start p-3 cursor-pointer border transition-all duration-300 ${isSelected ? 'border-black bg-white' : 'border-transparent hover:bg-white hover:border-black/10'}`}
>
{isSelected && }
{addon.name}
{addon.desc && (
{addon.desc}
)}
+ R$ {addon.price}
);
})}
)}
{/* Nail Art / Removal Menu */}
{selectedService.menu && (
Menu de Opções
{selectedService.menu.map((item, idx) => (
setActiveStyle(item)}
className={`group cursor-pointer p-2 -ml-2 rounded transition-colors duration-300 ${activeStyle?.name === item.name ? 'bg-black/5' : 'hover:bg-black/5'}`}
>
{item.name}
{activeStyle?.name === item.name && ● }
{item.desc}
))}
{activeStyle && (
setActiveStyle(null)}
className="text-[9px] uppercase tracking-widest mt-4 text-black/40 hover:text-black border-b border-black/20 pb-0.5"
>
Voltar para visão geral
)}
)}
{selectedService.care && (
Cuidados
{selectedService.care.map((careItem, idx) => (
—
{careItem}
))}
)}
{
if (activeStyle) {
addToCart(selectedService, activeStyle);
} else {
addToCart(selectedService);
}
}}
className="bg-black text-white px-10 py-4 text-xs uppercase tracking-[0.2em] hover:bg-white hover:text-black border border-black transition-all duration-500 w-full md:w-auto shadow-sm hover:shadow-lg flex items-center justify-center gap-2"
>
{selectedAddOns.length > 0 ? `Adicionar (Item + ${selectedAddOns.length} Extras)` : 'Adicionar à Sacola'}
pág. {Math.floor(Math.random() * 50) + 10}
)}
{/* Hero Section */}
{/* Background Image Loading */}
{/* Overlay to ensure text readability */}
Piracicaba — 2026
Agatha Ferneda
Especialista em Nail Design
scrollToSection('servicos')}
className="border-b border-black pb-1 text-[10px] uppercase tracking-[0.3em] hover:text-black/60 transition-all duration-500"
>
Ver a Coleção
{/* Editor's Letter (Bio) */}
{/* Profile Image Loading */}
01
A Assinatura
Acreditamos que unhas não são apenas detalhes, mas a extensão da sua identidade. Com uma visão inovadora e 3 anos de expertise, a Agatha Ferneda Studio oferece mais do que um serviço: entregamos autoestima.
Nossa filosofia une a técnica precisa da fibra de vidro com a delicadeza de um acabamento natural. Um espaço onde o clássico encontra a sofisticação moderna.
A.F.
{/* Services - Interactive List */}
Serviços
Clique para ver detalhes
{/* Column 1 */}
Nails
{services.nails.map((item, idx) => (
setSelectedService(item)}
className="group cursor-pointer"
>
{item.name}
→
R$ {item.price}
{item.note}
Manutenção:
R$ {item.maintenance}
))}
{/* Nail Art */}
setSelectedService(services.nailArt)}
className="pt-8 mt-8 border-t border-dashed border-black/10 opacity-70 cursor-pointer group hover:opacity-100 transition-opacity duration-300"
>
Nail Art
→
a partir de R$ 20,00
Baby boomer, encapsulada, autoral.
{/* Removal - Added Here */}
setSelectedService(services.removal)}
className="pt-8 mt-8 border-t border-dashed border-black/10 opacity-70 cursor-pointer group hover:opacity-100 transition-opacity duration-300"
>
Remoção
→
a partir de R$ 30,00
Retirada segura do alongamento.
{/* Column 2 */}
Care & Face
{/* Manicure Section */}
{services.basics.map((item, idx) => (
setSelectedService(item)}
className="flex flex-col mb-10 last:mb-0 cursor-pointer group"
>
{item.name}
→
R$ {item.price}
{item.addOns && (
Opção Gel (+ R$ 40/75)
)}
))}
{/* Face Section */}
Brow Bar
{services.face.map((item, idx) => (
setSelectedService(item)}
className="flex justify-between items-center mb-6 border-b border-black/5 pb-2 last:border-0 cursor-pointer group hover:bg-gray-50/50 transition-colors"
>
{item.name}
R$ {item.price}
Ver +
))}
{/* Packages */}
The Club
Planos de Assinatura
{services.packages.map((pkg, idx) => (
{pkg.name}
{pkg.description}
R$ {pkg.price}
Mensal
{/* Add Package to Cart Overlay */}
addToCart(pkg)}
className="bg-black text-white px-6 py-3 text-[10px] uppercase tracking-widest hover:bg-black/80"
>
Adicionar à Sacola
))}
{/* Etiqueta */}
Protocolo
Pontualidade
Para garantir a excelência e a tranquilidade do seu atendimento, o cumprimento do horário é essencial. Toleramos atrasos de até 10 minutos . Após esse período, o procedimento poderá sofrer adaptações para não comprometer a agenda.
Atmosfera & Conforto
Nosso studio é um refúgio de calma projetado para o seu relaxamento e autocuidado. Temos um espaço acolhedor pronto para te receber — chegue e desfrute de um cappuccino especial enquanto se desconecta do mundo lá fora.
Manutenções Externas
Acolhemos manutenções de trabalhos realizados por outros profissionais exclusivamente sob análise técnica prévia . Isso garante que possamos entregar o padrão de excelência Agatha Ferneda sem comprometer a saúde das suas unhas.
Reserva & Compromisso
Para oficializar sua primeira experiência , solicitamos um sinal de 30% do valor.
Após a primeira visita, essa taxa é dispensada. No entanto, em caso de reagendamento de um horário já confirmado, será necessário um novo aporte de 30% para a readequação da agenda.
{/* Footer */}
);
};
export default AgathaFernedaVogue;