(function () { "use strict"; window.IS7v2 = window.IS7v2 || {}; // ── Constants ──────────────────────────────────────────────────────────── var WAPP = "5541987430349"; function wa(msg) { return "https://wa.me/" + WAPP + "?text=" + encodeURIComponent(msg || "Olá, vim pelo site da IS7!"); } // ── Inline SVG icon paths (Lucide subset) ──────────────────────────────── var ICONS = { globe: '', "shopping-bag": '', "trending-up": '', "map-pin": '', check: '', "check-circle": '', "check-check": '', star: '', sun: '', moon: '', menu: '', x: '', "arrow-right": '', "external-link": '', expand: '', "message-circle": '', "message-square": '', send: '', "chevron-down": '', "chevron-right": '', "chevron-up": '', instagram: '', linkedin: '', phone: '', mail: '', store: '', award: '', users: '', zap: '', lock: '', package: '', "calendar-days": '', megaphone: '', gauge: '', sparkles: '', "shield-check": '', target: '', "bar-chart": '', search: '', monitor: '', palette: '', headphones: '', "file-text": '', "arrow-up-right": '', "arrow-left": '', "layout-grid": '', minus: '', plus: '', "map": '', }; const Icon = function Icon({ name, size, color, strokeWidth, fill, style, className }) { size = size || 20; color = color || "currentColor"; strokeWidth = strokeWidth || 2; fill = fill || "none"; var paths = ICONS[name] || ""; return ( ); }; // ── Logo ───────────────────────────────────────────────────────────────── const Logo = function Logo({ size, onClick }) { var fs = size === "large" ? 28 : size === "small" ? 18 : 22; return ( iS7 ); }; // ── Eyebrow ─────────────────────────────────────────────────────────────── const Eyebrow = function Eyebrow({ children, center, style }) { return (

{children}

); }; // ── Reveal (IntersectionObserver scroll animation) ─────────────────────── const Reveal = function Reveal({ children, delay, as, className, style, onClick }) { var Tag = as || "div"; var ref = React.useRef(null); React.useEffect(function () { var el = ref.current; if (!el) return; el.classList.add("reveal"); if (delay) el.style.transitionDelay = delay + "ms"; var obs = new IntersectionObserver( function (entries) { if (entries[0].isIntersecting) { el.classList.add("in"); obs.disconnect(); } }, { threshold: 0.06, rootMargin: "0px 0px -32px 0px" } ); obs.observe(el); return function () { obs.disconnect(); }; }, []); return ( {children} ); }; // ── useCountUp ──────────────────────────────────────────────────────────── const useCountUp = function useCountUp(target, duration, active) { duration = duration || 1800; var [count, setCount] = React.useState(0); React.useEffect(function () { if (!active) return; var start = Date.now(); var raf; function frame() { var elapsed = Date.now() - start; var progress = Math.min(elapsed / duration, 1); var eased = 1 - Math.pow(1 - progress, 3); setCount(Math.round(eased * target)); if (progress < 1) raf = requestAnimationFrame(frame); else setCount(target); } raf = requestAnimationFrame(frame); return function () { cancelAnimationFrame(raf); }; }, [target, duration, active]); return count; }; // useLightbox — simple open/close state for portfolio lightbox const useLightbox = function useLightbox() { return React.useState(null); }; Object.assign(window.IS7v2, { Icon, Logo, Eyebrow, Reveal, useCountUp, useLightbox, wa, WAPP }); })();