/* Diferenciais + Sobre + Resultados + Depoimentos */ function Diferenciais() { const items = [ { icon: React.createElement(IconMonitor), title: 'Planejamento Digital Exclusivo', text: 'Simulação do resultado antes de iniciar o tratamento com tecnologia 3D.' }, { icon: React.createElement(IconCpu), title: 'Tecnologia de Ponta', text: 'Equipamentos de última geração para diagnóstico e tratamento preciso.' }, { icon: React.createElement(IconUser), title: 'Atendimento Personalizado', text: 'Cada paciente recebe um plano único, pensado para suas necessidades.' }, { icon: React.createElement(IconLock), title: 'Sigilo e Conforto Total', text: 'Ambiente privativo, acolhedor e com total discrição em cada etapa.' } ]; return React.createElement('section', { className: 'diferenciais', id: 'diferenciais' }, React.createElement('div', { className: 'container' }, React.createElement('div', { className: 'reveal', style: { textAlign: 'center', display: 'flex', flexDirection: 'column', alignItems: 'center' } }, React.createElement(SectionHeader, { label: 'Diferenciais', title: 'Por que escolher o Dr. Fabiano Beal?', center: true }) ), React.createElement('div', { className: 'dif-grid' }, items.map((item, i) => React.createElement('div', { key: i, className: `dif-card reveal reveal-delay-${i}` }, React.createElement('div', { className: 'dif-icon' }, item.icon), React.createElement('h4', null, item.title), React.createElement('p', null, item.text) ) ) ) ) ); } function Sobre() { return React.createElement('section', { className: 'sobre', id: 'sobre' }, React.createElement('div', { className: 'container sobre-inner' }, React.createElement('div', { className: 'sobre-photo reveal' }, React.createElement('img', { src: 'uploads/foto-4259.jpg', alt: 'Dr. Fabiano Beal', loading: 'lazy' }) ), React.createElement('div', { className: 'sobre-content reveal reveal-delay-2' }, React.createElement('h3', null, 'Dr. Fabiano Beal'), React.createElement('p', { className: 'sobre-specialty' }, 'Cirurgião-Dentista — Especialista em Estética Dental'), React.createElement('p', { className: 'sobre-bio' }, 'Ao longo dos anos, entendi uma verdade: grandes transformações começam com boas decisões. Antes de qualquer procedimento, existe um processo de análise, escuta e compreensão do que realmente importa para cada paciente. É dessa forma que construímos tratamentos mais previsíveis, resultados mais naturais e relações baseadas em confiança.' ), React.createElement('ul', { className: 'sobre-credentials' }, React.createElement('li', null, '18 anos de experiência'), React.createElement('li', null, 'CRO/SC — 9800'), React.createElement('li', null, 'Especialista em Dentística Restauradora'), React.createElement('li', null, 'Especialista em Ortodontia'), React.createElement('li', null, 'Invisalign Doctor') ), React.createElement(CTA, { text: 'Agendar com o Dr. Fabiano', href: waLink('Olá, vim do site e gostaria de agendar uma consulta de avaliação com o Dr. Fabiano.') }) ) ) ); } function SobrePaula() { return React.createElement('section', { className: 'sobre sobre-alt', id: 'paula' }, React.createElement('div', { className: 'container sobre-inner sobre-inner-reverse' }, React.createElement('div', { className: 'sobre-content reveal reveal-delay-2' }, React.createElement('h3', null, 'Dra. Paula Ghiggi'), React.createElement('p', { className: 'sobre-specialty' }, 'Cirurgiã-Dentista — Excelência técnica a serviço da naturalidade'), React.createElement('p', { className: 'sobre-bio' }, 'A Dra. Paula Ghiggi atua na área de Dentística Restauradora, dedicando-se à criação de tratamentos que unem estética, função e longevidade. Além da prática clínica, integra o corpo docente de cursos de especialização em Dentística Restauradora do CEOM — Passo Fundo/RS, contribuindo para a formação de novos profissionais e mantendo uma constante busca por atualização e aperfeiçoamento. Seu compromisso é transformar conhecimento em resultados naturais, personalizados e alinhados à identidade de cada paciente.' ), React.createElement('ul', { className: 'sobre-credentials' }, React.createElement('li', null, 'Especialização em Dentística Restauradora'), React.createElement('li', null, 'Doutorado em Dentística Restauradora'), React.createElement('li', null, 'Docente — CEOM, Passo Fundo/RS') ), React.createElement(CTA, { text: 'Agendar com a Dra. Paula', href: waLink('Olá, vim do site e gostaria de agendar uma consulta de avaliação com a Dra. Paula.') }) ), React.createElement('div', { className: 'sobre-photo reveal' }, React.createElement('img', { src: 'uploads/foto-4108.jpg', alt: 'Dra. Paula Ghiggi', loading: 'lazy' }) ) ) ); } function Resultados() { const cases = [ { img: 'uploads/caso-01.jpeg' }, { img: 'uploads/caso-02.jpeg' }, { img: 'uploads/caso-03.jpeg' }, { img: 'uploads/caso-04.jpeg' }, { img: 'uploads/caso-05.jpeg' }, { img: 'uploads/caso-06.jpeg' }, { img: 'uploads/caso-07.jpeg' }, ]; const [current, setCurrent] = React.useState(0); const total = cases.length; const autoRef = React.useRef(null); const wrapRef = React.useRef(null); const touchRef = React.useRef(0); const goTo = (idx) => setCurrent(((idx % total) + total) % total); const next = () => goTo(current + 1); const prev = () => goTo(current - 1); React.useEffect(() => { autoRef.current = setInterval(next, 4000); return () => clearInterval(autoRef.current); }, [current]); // Largura do card calculada a partir do espaço disponível (1 card no mobile, 2 no desktop) const [layout, setLayout] = React.useState({ cardW: 520, gap: 28, pad: 56, mobile: false }); React.useEffect(() => { const update = () => { const w = wrapRef.current ? wrapRef.current.clientWidth : window.innerWidth; if (w < 640) { setLayout({ cardW: w - 40, gap: 16, pad: 20, mobile: true }); } else { setLayout({ cardW: Math.min(520, Math.floor((w - 112 - 28) / 2)), gap: 28, pad: 56, mobile: false }); } }; update(); window.addEventListener('resize', update); return () => window.removeEventListener('resize', update); }, []); const { cardW, gap, mobile } = layout; const perView = mobile ? 1 : 2; return React.createElement('section', { className: 'resultados', id: 'resultados' }, React.createElement('div', { className: 'container' }, React.createElement('div', { className: 'reveal', style: { textAlign: 'center', display: 'flex', flexDirection: 'column', alignItems: 'center' } }, React.createElement(SectionHeader, { label: 'Casos Reais', title: 'O resultado aparece no sorriso. O diferencial está no planejamento.', subtitle: 'Antes de qualquer transformação, existe um processo de diagnóstico, análise e planejamento que permite criar resultados naturais, personalizados e duradouros. Resultados reais de pacientes que confiaram na expertise do Dr. Fabiano Beal.', center: true }) ), React.createElement('div', { className: 'carousel-wrapper reveal', ref: wrapRef, style: { position: 'relative', marginTop: 48, marginBottom: 48, overflow: 'hidden' }, onTouchStart: (e) => { touchRef.current = e.touches[0].clientX; }, onTouchEnd: (e) => { const dx = e.changedTouches[0].clientX - touchRef.current; if (dx > 40) prev(); else if (dx < -40) next(); } }, !mobile && React.createElement('button', { onClick: prev, 'aria-label': 'Caso anterior', style: { position: 'absolute', left: 0, top: '50%', transform: 'translateY(-50%)', zIndex: 10, width: 48, height: 48, borderRadius: '50%', background: 'rgba(11,18,32,0.85)', border: '1px solid var(--gold-border)', color: 'var(--gold)', fontSize: 20, cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', backdropFilter: 'blur(8px)', transition: 'all 0.3s' } }, '‹'), !mobile && React.createElement('button', { onClick: next, 'aria-label': 'Próximo caso', style: { position: 'absolute', right: 0, top: '50%', transform: 'translateY(-50%)', zIndex: 10, width: 48, height: 48, borderRadius: '50%', background: 'rgba(11,18,32,0.85)', border: '1px solid var(--gold-border)', color: 'var(--gold)', fontSize: 20, cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', backdropFilter: 'blur(8px)', transition: 'all 0.3s' } }, '›'), React.createElement('div', { style: { display: 'flex', gap: gap, padding: '0 ' + layout.pad + 'px', transition: 'transform 0.5s cubic-bezier(0.4, 0, 0.2, 1)', transform: `translateX(-${current * (cardW + gap)}px)` } }, cases.map((c, i) => React.createElement('div', { key: i, style: { flex: '0 0 ' + cardW + 'px', transition: 'opacity 0.4s, transform 0.4s', opacity: (i >= current && i < current + perView) ? 1 : 0.4, transform: (i >= current && i < current + perView) ? 'scale(1)' : 'scale(0.95)' } }, React.createElement('div', { className: 'resultado-card', style: { overflow: 'hidden' } }, React.createElement('div', { style: { position: 'relative' } }, React.createElement('img', { src: c.img, alt: 'Antes e Depois', loading: 'eager', style: { width: '100%', height: mobile ? 300 : 360, objectFit: 'cover', objectPosition: 'center top', display: 'block', borderRadius: 12 } }) ) ) ) ) ) ), React.createElement('div', { style: { display: 'flex', justifyContent: 'center', gap: 10, marginBottom: 40 } }, cases.map((_, i) => React.createElement('button', { key: i, onClick: () => goTo(i), style: { width: current === i ? 28 : 10, height: 10, borderRadius: 5, background: current === i ? 'var(--gold)' : 'var(--gold-dim)', border: 'none', cursor: 'pointer', transition: 'all 0.3s', padding: 0 } }) ) ), React.createElement('div', { style: { textAlign: 'center' } }, React.createElement(CTA, { text: 'Quero Meu Novo Sorriso', href: WA_AGENDAR }) ) ) ); } function Depoimentos() { const deps = [ { initials: 'AC', name: 'Ana Claudia M.', text: 'O Dr. Fabiano transformou meu sorriso e minha autoestima. Profissional incrível, atencioso e com um resultado que superou todas as expectativas.' }, { initials: 'RS', name: 'Roberto S.', text: 'Depois de anos evitando sorrir, hoje não consigo parar. O atendimento é impecável do início ao fim, e o resultado ficou absolutamente natural.' }, { initials: 'ML', name: 'Mariana L.', text: 'Escolhi o Invisalign com o Dr. Fabiano e foi a melhor decisão. O acompanhamento é próximo, o tratamento é confortável e o resultado é perfeito.' }, { initials: 'JP', name: 'João Pedro F.', text: 'Estrutura impecável e equipe extremamente cuidadosa. Me senti seguro em cada etapa. Recomendo de olhos fechados.' }, { initials: 'CB', name: 'Carla B.', text: 'Atendimento humanizado de verdade. Explicaram cada detalhe do planejamento e o resultado das lentes ficou lindo e natural.' }, { initials: 'FT', name: 'Fernanda T.', text: 'Melhor clínica de Chapecó. Profissionalismo, pontualidade e um sorriso que mudou a minha vida. Gratidão!' }, { initials: 'LG', name: 'Lucas G.', text: 'Fiz meus implantes aqui e o cuidado foi excepcional. Nenhum desconforto e um resultado perfeito. Vale cada centavo.' }, { initials: 'PA', name: 'Patrícia A.', text: 'Ambiente acolhedor e equipe nota mil. Saí de cada consulta confiante. O Dr. Fabiano é um verdadeiro artista.' } ]; const track = deps.concat(deps); const scrollerRef = React.useRef(null); const pausedRef = React.useRef(false); const dragRef = React.useRef({ down: false, startX: 0, startScroll: 0, moved: false }); const posRef = React.useRef(0); React.useEffect(function () { const el = scrollerRef.current; if (!el) return; let raf; const SPEED = 0.4; // px por frame — rolagem suave function half() { return el.scrollWidth / 2; } function tick() { if (!pausedRef.current && !dragRef.current.down) { posRef.current += SPEED; if (posRef.current >= half()) posRef.current -= half(); el.scrollLeft = posRef.current; } raf = requestAnimationFrame(tick); } const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; if (!reduce) raf = requestAnimationFrame(tick); function onDown(e) { dragRef.current.down = true; dragRef.current.moved = false; dragRef.current.startX = (e.touches ? e.touches[0].clientX : e.clientX); dragRef.current.startScroll = el.scrollLeft; el.classList.add('dragging'); } function onMove(e) { if (!dragRef.current.down) return; const x = (e.touches ? e.touches[0].clientX : e.clientX); const dx = x - dragRef.current.startX; if (Math.abs(dx) > 3) dragRef.current.moved = true; el.scrollLeft = dragRef.current.startScroll - dx; const h = half(); if (el.scrollLeft >= h) el.scrollLeft -= h; if (el.scrollLeft < 0) el.scrollLeft += h; posRef.current = el.scrollLeft; } function onUp() { dragRef.current.down = false; el.classList.remove('dragging'); } function onEnter() { pausedRef.current = true; } function onLeave() { pausedRef.current = false; onUp(); } el.addEventListener('mouseenter', onEnter); el.addEventListener('mouseleave', onLeave); el.addEventListener('mousedown', onDown); window.addEventListener('mousemove', onMove); window.addEventListener('mouseup', onUp); el.addEventListener('touchstart', onDown, { passive: true }); el.addEventListener('touchmove', onMove, { passive: true }); el.addEventListener('touchend', onUp); el.addEventListener('click', function (e) { if (dragRef.current.moved) { e.preventDefault(); e.stopPropagation(); } }, true); return function () { cancelAnimationFrame(raf); el.removeEventListener('mouseenter', onEnter); el.removeEventListener('mouseleave', onLeave); el.removeEventListener('mousedown', onDown); window.removeEventListener('mousemove', onMove); window.removeEventListener('mouseup', onUp); el.removeEventListener('touchstart', onDown); el.removeEventListener('touchmove', onMove); el.removeEventListener('touchend', onUp); }; }, []); return React.createElement('section', { className: 'depoimentos', id: 'depoimentos' }, React.createElement('div', { className: 'container' }, React.createElement('div', { className: 'reveal', style: { textAlign: 'center', display: 'flex', flexDirection: 'column', alignItems: 'center' } }, React.createElement(SectionHeader, { title: 'Mais do que depoimentos. Histórias reais de transformação.', center: true, line: false }) ) ), React.createElement('div', { className: 'dep-marquee reveal', ref: scrollerRef }, React.createElement('div', { className: 'dep-track' }, track.map((d, i) => React.createElement('div', { key: i, className: 'dep-card', 'aria-hidden': i >= deps.length ? 'true' : undefined }, React.createElement('div', { className: 'dep-card-head' }, React.createElement('div', { className: 'dep-avatar' }, d.initials), React.createElement('div', null, React.createElement('div', { className: 'dep-name' }, d.name), React.createElement(Stars) ), React.createElement('div', { className: 'dep-google', title: 'Avaliação do Google' }, 'G') ), React.createElement('p', { className: 'dep-text' }, d.text) ) ) ) ) ); } Object.assign(window, { Diferenciais, Sobre, SobrePaula, Resultados, Depoimentos });