/* global React, window */ // Shampooch — shared components. const { useState, useEffect, useRef } = React; const D = window.SHAMPOOCH_DATA; // ----- Routing helpers ----- function useHashRoute() { const [route, setRoute] = useState(() => window.location.hash.replace(/^#/, "") || "/"); useEffect(() => { const onHash = () => { setRoute(window.location.hash.replace(/^#/, "") || "/"); window.scrollTo({ top: 0, behavior: "instant" }); }; window.addEventListener("hashchange", onHash); return () => window.removeEventListener("hashchange", onHash); }, []); return route; } function go(path) { window.location.hash = path; } // Trivial icon set (kept minimal — no decorative SVG) function Icon({ name, size = 18 }) { const common = { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" }; switch (name) { case "wa": return ( ); case "phone": return ; case "arrow": return ; case "arrow-up": return ; case "check": return ; case "menu": return ; case "close": return ; case "shield": return ; case "sparkle": return ; case "map": return ; case "clock": return ; case "mail": return ; case "star": return ; case "paw": return ; case "ig": return ; case "tiktok": return ; default: return null; } } // ----- Logo mark ----- function LogoMark() { return ( Shampooch ); } // ----- Nav ----- function Nav() { const route = useHashRoute(); const [drawer, setDrawer] = useState(false); useEffect(() => { setDrawer(false); }, [route]); const isActive = (p) => route === p || (p !== "/" && route.startsWith(p)); return (
{s.short}
{t.body}