/* Shared layout primitives for the Hudson Pay marketing site (SnowPay-style, light & airy). Exposes window.HPSite.{ Container, Eyebrow, Section, CurrencyRing, Starburst, WaveField, DashChip } */ const { Icon, Logo } = window.HudsonPayDesignSystem_198a48; /* responsive: true when viewport is phone-width */ function useIsMobile(bp = 860) { const [m, setM] = React.useState(typeof window !== "undefined" && window.innerWidth <= bp); React.useEffect(() => { const f = () => setM(window.innerWidth <= bp); window.addEventListener("resize", f); f(); return () => window.removeEventListener("resize", f); }, [bp]); return m; } function Container({ children, narrow = false, style = {} }) { return (
{children}
); } function Eyebrow({ children, center = false, style = {} }) { return (
{children}
); } function Section({ id, children, soft = false, style = {} }) { return (
{children}
); } /* Small dashed-circle icon used inside chips / contact rows */ function DashIcon({ name, size = 26, color = "var(--blue-500)" }) { return ( ); } /* Pill chip with a dashed-circle leading icon (DEDICATED DESK, etc.) */ function DashChip({ icon = "shield", children }) { return ( {children} ); } /* Logomark inside a dashed ring with orbiting currency codes */ function CurrencyRing({ size = 240 }) { const codes = ["€ EUR", "$ USDC", "£ GBP", "$ USD", "MX$ MXN", "د.إ AED", "R$ BRL", "S$ SGD", "HK$ HKD", "₮ USDT"]; const c = size / 2; const rText = c - 6; return (
{/* orbiting currency labels */}
{codes.map((code, i) => { const a = (i / codes.length) * 2 * Math.PI - Math.PI / 2; const x = c + Math.cos(a) * rText; const y = c + Math.sin(a) * rText; return ( {code} ); })}
{/* mark */} Hudson Pay
); } /* Fine radial starburst — concentric rings of thin ticks (SVG) */ function Starburst({ size = 720, color = "var(--blue-300)" }) { const c = size / 2; const ring = (rOuter, rInner, count, opacity, w) => { const ticks = []; for (let i = 0; i < count; i++) { const a = (i / count) * 2 * Math.PI; ticks.push( ); } return ticks; }; return ( {ring(c * 0.98, c * 0.86, 220, 0.55, 1)} {ring(c * 0.80, c * 0.72, 160, 0.35, 1)} ); } /* Soft flowing topographic wave lines for the hero background (right side) */ function WaveField({ style = {} }) { const lines = Array.from({ length: 16 }); return ( {lines.map((_, i) => { const off = i * 13; return ( ); })} ); } Object.assign(window, { HPSite: { Container, Eyebrow, Section, DashIcon, DashChip, CurrencyRing, Starburst, WaveField, useIsMobile } });