// hifi-components.jsx — shared UI atoms for the hi-fi La Foire page. // Exports on window for cross-script use. const { useEffect, useRef, useState } = React; // ─── Tagline JOUER ◆ TRINQUER ◆ MANGER ─────────────────────── function Tagline({ size = 14, className = '', style = {} }) { return ( Jouer ◆ Trinquer ◆ Manger ); } // ─── Ribbon défilant (sticky bandeau top) ──────────────────── function StickyRibbon() { // Construit un long ruban : 12 copies de la tagline → scroll infini const items = Array.from({ length: 12 }).map((_, i) => ( Jouer Trinquer Manger )); return (
); } // ─── Nav ───────────────────────────────────────────────────── function Nav() { const { links, cta } = CONTENT.nav; return ( ); } // ─── NumberDiamond ─────────────────────────────────────────── function NumDiamond({ children, variant = '', size = 'md', rotate, className = '', style = {} }) { const sizeCls = { md: '', lg: 'numdiamond--lg', xl: 'numdiamond--xl' }[size] || ''; const variantCls = variant ? `numdiamond--${variant}` : ''; return ( {children} ); } // ─── Bulb garland (guirlande lampions animée) ──────────────── function BulbGarland({ count = 8 }) { return ( ); } // ─── Starburst (rayons rotation lente derrière hero) ───────── function Starburst({ color = '#F4BF33' }) { // 24 rayons en triangle const rays = Array.from({ length: 24 }, (_, i) => { const angle = (360 / 24) * i; const next = (360 / 24) * (i + 0.5); const x1 = 800 + Math.cos(angle * Math.PI / 180) * 800; const y1 = 800 + Math.sin(angle * Math.PI / 180) * 800; const x2 = 800 + Math.cos(next * Math.PI / 180) * 250; const y2 = 800 + Math.sin(next * Math.PI / 180) * 250; return `M ${x1} ${y1} L ${x2} ${y2} L 800 800 Z`; }); return ( ); } // ─── Kraft overlay subtil ──────────────────────────────────── function KraftOverlay() { return ; } // ─── Damier band ───────────────────────────────────────────── function Damier({ variant = '' }) { return ; } // ─── Eyebrow (sur-titre small caps + barres) ───────────────── function Eyebrow({ children }) { return