/* 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 (
);
}
/* 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 */}
);
}
/* 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 (
);
}
/* Soft flowing topographic wave lines for the hero background (right side) */
function WaveField({ style = {} }) {
const lines = Array.from({ length: 16 });
return (
);
}
Object.assign(window, { HPSite: { Container, Eyebrow, Section, DashIcon, DashChip, CurrencyRing, Starburst, WaveField, useIsMobile } });