import React, { useState, useEffect, useRef } from 'react'; import ReactDOM from 'react-dom/client'; import { X, Instagram, Linkedin } from 'lucide-react'; // --- Hooks --- const useFadeIn = (): [React.RefObject, boolean] => { const [isVisible, setIsVisible] = useState(false); const ref = useRef(null); useEffect(() => { const observer = new IntersectionObserver( ([entry]) => { if (entry.isIntersecting) { setIsVisible(true); if (ref.current) { observer.unobserve(ref.current); } } }, { threshold: 0.1, } ); if (ref.current) { observer.observe(ref.current); } return () => { if (ref.current) { // eslint-disable-next-line react-hooks/exhaustive-deps observer.unobserve(ref.current); } }; }, []); return [ref, isVisible]; }; // --- TopBar Component --- const TopBar: React.FC = () => { const [menuOpen, setMenuOpen] = useState(false); return ( <>
{menuOpen && (
Logo LABIRINTAR
Para escolas Experiências Quem somos Rede Blog Contato Entrar
)} ); }; // --- Hero Section --- const Hero: React.FC = () => { const [titleRef, isTitleVisible] = useFadeIn(); const [subtitleRef, isSubtitleVisible] = useFadeIn(); const getFadeInClass = (isVisible: boolean) => `transition-all duration-1000 ease-out ${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`; return (

Para Escolas

Construindo parcerias que fazem sentido

); }; // --- Section 1: Partnership Flow --- const PartnershipFlowSection: React.FC = () => { const [sectionRef, isVisible] = useFadeIn(); const getFadeInClass = (isVisible: boolean) => `transition-all duration-1000 ease-out ${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`; return (

Como construímos parcerias com as escolas

Organizar o Tempo Integral como sistema exige escuta, planejamento conjunto, validação de viabilidade e acompanhamento contínuo.

Diagrama do fluxo de parceria Labirintar–Escola
); }; // --- Section 2: School Benefits --- const SchoolBenefitsSection: React.FC = () => { const [sectionRef, isVisible] = useFadeIn(); const getFadeInClass = (isVisible: boolean) => `transition-all duration-1000 ease-out ${isVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-8'}`; const benefits = [ 'Receita recorrente com previsibilidade e coerência pedagógica', 'Uso estratégico dos espaços e do tempo escolar', 'Visibilidade sobre o que acontece no contraturno, com dados para decisões mais conscientes', 'Continuidade pedagógica que fortalece vínculos e reduz rotatividade', 'Menos sobrecarga para a coordenação, mais foco no que importa', 'Engajamento real de famílias e crianças ao longo do tempo', 'Reputação de inovação sustentada pela prática, não pelo discurso' ]; return (

Vantagens para a escola ao escolher pela Labirintar

{benefits.map((benefit, index) => (
{index + 1}

{benefit}

))}
); }; // --- Footer Component --- const Footer: React.FC = () => { const [formData, setFormData] = useState({ name: '', email: '', phone: '', role: '', school: '' }); const [isSubmitting, setIsSubmitting] = useState(false); const formatPhoneNumber = (value: string): string => { const numbers = value.replace(/\D/g, ''); const limitedNumbers = numbers.slice(0, 11); if (limitedNumbers.length <= 2) { return `(${limitedNumbers}`; } else if (limitedNumbers.length <= 7) { return `(${limitedNumbers.slice(0, 2)}) ${limitedNumbers.slice(2)}`; } else { return `(${limitedNumbers.slice(0, 2)}) ${limitedNumbers.slice(2, 7)}-${limitedNumbers.slice(7)}`; } }; const validatePhoneNumber = (value: string): boolean => { const numbers = value.replace(/\D/g, ''); return numbers.length >= 10 && numbers.length <= 11; }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; if (name === 'phone') { setFormData(prev => ({ ...prev, [name]: formatPhoneNumber(value) })); } else { setFormData(prev => ({ ...prev, [name]: value })); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validatePhoneNumber(formData.phone)) { alert('Por favor, insira um telefone válido no formato (00) 99999-9999'); return; } setIsSubmitting(true); try { const response = await fetch('https://script.google.com/macros/s/AKfycbwgfSc9VBe2FViJNYVCDiiWGHm_4cl3f9zSLsTCo4ZKNjieMwiJJbxjIXiXopgiHR3C/exec', { method: 'POST', mode: 'no-cors', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ action: 'contact', timestamp: new Date().toISOString(), source: 'para-escolas', ...formData }) }); alert('Mensagem enviada com sucesso! Nossa equipe entrará em contato em breve.'); setFormData({ name: '', email: '', phone: '', role: '', school: '' }); } catch (error) { console.error('Erro ao enviar formulário:', error); alert('Erro ao enviar mensagem. Por favor, tente novamente.'); } finally { setIsSubmitting(false); } }; return (

Vamos organizar juntos o Tempo Integral da sua escola?

Preencha seus dados e nossa equipe entra em contato para compreender o contexto da sua instituição e desenhar uma proposta alinhada ao seu projeto pedagógico.

); }; // --- Main App Component --- const App: React.FC = () => { useEffect(() => { document.documentElement.style.scrollBehavior = 'smooth'; return () => { document.documentElement.style.scrollBehavior = 'auto'; }; }, []); return (
); }; const root = ReactDOM.createRoot(document.getElementById('root')!); root.render();