/* global React, ReactDOM */ /* Imediata Service — shared website components (multi-page) */ const { useState, useEffect, useRef } = React; /* ============ Lucide icon (imperative, React-safe) ============ */ function Icon({ name, size, stroke, className, style }) { const ref = useRef(null); useEffect(() => { const host = ref.current; if (!host || !window.lucide) return; host.innerHTML = ""; const i = document.createElement("i"); i.setAttribute("data-lucide", name); if (stroke) i.setAttribute("stroke-width", stroke); host.appendChild(i); window.lucide.createIcons(); const svg = host.querySelector("svg"); if (svg && size) { svg.style.width = size + "px"; svg.style.height = size + "px"; } }, [name, size, stroke]); return ; } /* ============ Button — renders when href given ============ */ function Button({ variant = "primary", size, icon, iconRight, children, href, onClick, target }) { const cls = ["btn", "btn-" + variant, size ? "btn-" + size : ""].join(" "); const inner = (<>{icon && }{children}{iconRight && }); if (href) return {inner}; return ; } /* ============ Badge ============ */ function Badge({ kind = "soft", dot, children }) { return ({dot && }{children}); } /* ============ Dot rule (logo connector motif) ============ */ function DotRule({ color }) { return (
); } const LOGO_LIGHT = "assets/logo-horizontal-light.png"; const LOGO_DARK = "assets/logo-horizontal-dark.png"; const SYMBOL = "assets/symbol.png"; const SYMBOL_LINES = "assets/symbol-lines.png"; const NAV = [ { route: "home", label: "Início", href: "index.html" }, { route: "services", label: "Serviços", href: "servicos.html" }, { route: "about", label: "Quem somos", href: "quem-somos.html" }, { route: "work", label: "Trabalhe conosco", href: "trabalhe-conosco.html" }, { route: "contact", label: "Contato", href: "contato.html" }, ]; /* ============ Header (real links + mobile drawer) ============ */ function Header({ route }) { const [open, setOpen] = useState(false); return (
Imediata Service
(51) 99219-6846
{NAV.map((n) => {n.label})}
); } /* ============ Service card ============ */ function ServiceCard({ icon, title, children, href }) { return (

{title}

{children}

{href && Saiba mais}
); } /* ============ Feature / differentiator row ============ */ function Feature({ icon, title, children }) { return (

{title}

{children}

); } /* ============ Trust pillar (qualitative — no fake numbers) ============ */ function Pillar({ icon, title, children }) { return (
{title}

{children}

); } /* ============ Brand-symbol visual placeholder ============ */ function SymbolFrame({ dark, tag, style, height }) { return (
{tag && {tag}}
); } /* ============ Process step ============ */ function Step({ n, title, children }) { return (
{n}

{title}

{children}

); } /* ============ FAQ accordion ============ */ function FAQ({ items }) { const [open, setOpen] = useState(0); return (
{items.map((it, i) => (
{it.a}
))}
); } /* ============ Footer ============ */ function Footer() { return ( ); } /* ============ WhatsApp floating button ============ */ function WhatsAppFab() { const msg = encodeURIComponent("Olá! Gostaria de solicitar um orçamento de serviços terceirizados."); return ( Fale conosco ); } /* ============ Scroll reveal hook ============ */ function useReveal() { useEffect(() => { const els = document.querySelectorAll(".reveal"); if (!("IntersectionObserver" in window) || !els.length) { els.forEach((e) => e.classList.add("in")); return; } const io = new IntersectionObserver((entries) => { entries.forEach((en) => { if (en.isIntersecting) { en.target.classList.add("in"); io.unobserve(en.target); } }); }, { threshold: 0.12, rootMargin: "0px 0px -8% 0px" }); els.forEach((e) => io.observe(e)); return () => io.disconnect(); }); } /* ============ Tweaks — gold tone, heading font, card corners ============ */ const TWEAK_DEFAULTS = { goldTone: "classico", headingFont: "montserrat", corners: "suave" }; const GOLD_TONES = { classico: { gold: "#c9922a", bright: "#e8b040", light: "#f5d878" }, ambar: { gold: "#d8a02f", bright: "#f2bd52", light: "#f9e6a0" }, bronze: { gold: "#a9781f", bright: "#cf9b34", light: "#ecca7e" }, }; const CORNERS = { suave: { lg: "14px", md: "8px", xl: "22px" }, reto: { lg: "3px", md: "2px", xl: "4px" } }; function applyTweaks(t) { const r = document.documentElement.style; const g = GOLD_TONES[t.goldTone] || GOLD_TONES.classico; r.setProperty("--gold", g.gold); r.setProperty("--gold-bright", g.bright); r.setProperty("--gold-light", g.light); r.setProperty("--accent", g.gold); r.setProperty("--grad-gold", `linear-gradient(160deg, ${g.bright} 0%, ${g.gold} 55%, #5a3a08 130%)`); r.setProperty("--grad-gold-soft", `linear-gradient(135deg, ${g.light} 0%, ${g.bright} 100%)`); r.setProperty("--font-display", t.headingFont === "trebuchet" ? '"Trebuchet MS","Segoe UI",sans-serif' : '"Montserrat","Trebuchet MS","Segoe UI",sans-serif'); const c = CORNERS[t.corners] || CORNERS.suave; r.setProperty("--r-lg", c.lg); r.setProperty("--r-md", c.md); r.setProperty("--r-xl", c.xl); } function SiteTweaks() { const [t, setT] = useState(() => { try { return { ...TWEAK_DEFAULTS, ...(JSON.parse(localStorage.getItem("imd-tweaks")) || {}) }; } catch (e) { return TWEAK_DEFAULTS; } }); const set = (k, v) => { const nt = { ...t, [k]: v }; setT(nt); try { localStorage.setItem("imd-tweaks", JSON.stringify(nt)); } catch (e) {} window.parent.postMessage({ type: "__edit_mode_set_keys", edits: { [k]: v } }, "*"); }; useEffect(() => { applyTweaks(t); }, [t]); return ( set("goldTone", v)} /> set("headingFont", v)} /> set("corners", v)} /> ); } /* ============ Page shell ============ */ function Page({ route, children }) { useReveal(); return (
{children}
); } /* ============ Shared data ============ */ const SERVICES = [ { icon: "sparkles", title: "Limpeza e conservação", desc: "Manutenção impecável dos seus ambientes — limpeza predial, corporativa e de áreas comuns com equipes treinadas e rotinas planejadas." }, { icon: "sprout", title: "Jardinagem e paisagismo", desc: "Cuidado especializado com áreas verdes: poda, plantio e manutenção contínua de jardins e espaços externos." }, { icon: "trash-2", title: "Limpeza urbana", desc: "Soluções de higienização para espaços públicos ou grandes complexos: varrição, coleta e conservação de vias e áreas de circulação." }, { icon: "bell-ring", title: "Portaria e recepção", desc: "Controle de acesso com cordialidade e segurança, recepção e atendimento com postura profissional." }, { icon: "hard-hat", title: "Zeladoria", desc: "Manutenção preventiva e acompanhamento diário do seu condomínio ou empresa, com organização das rotinas do local." }, { icon: "coffee", title: "Serviços de copa", desc: "Profissionais preparados para o atendimento interno, organização do ambiente e apoio ao bem-estar das equipes." }, { icon: "shield-check", title: "Vigilância e apoio operacional", desc: "Estrutura de apoio à segurança e à operação do espaço, conforme a necessidade específica de cada contrato." }, ]; const DIFFERENTIALS = [ { icon: "handshake", title: "Atendimento próximo", desc: "Mais do que fornecer mão de obra, construímos uma relação de confiança e acompanhamos cada entrega de perto." }, { icon: "users", title: "Equipes orientadas", desc: "Comunicação clara e responsabilidade na execução, com profissionais treinados e alinhados à rotina de cada cliente." }, { icon: "shield-check", title: "Segurança e cumprimento", desc: "Atenção à segurança e cumprimento rigoroso das rotinas combinadas em cada contrato." }, { icon: "git-pull-request-arrow", title: "Flexibilidade", desc: "Disposição para ajustar o atendimento conforme a necessidade de cada cliente — e não o contrário." }, ]; Object.assign(window, { Icon, Button, Badge, DotRule, Header, Footer, ServiceCard, Feature, Pillar, SymbolFrame, Step, FAQ, WhatsAppFab, useReveal, SiteTweaks, Page, LOGO_LIGHT, LOGO_DARK, SYMBOL, SYMBOL_LINES, NAV, SERVICES, DIFFERENTIALS, });