// js/ui.jsx — Reusable UI primitives for Equilys // Exposes: Button, Pill, ServiceCard, OfferCard, Input, Textarea, Field, // Badge, IconCircle, Quote, Stat, NavLink function Button({ children, variant = 'primary', size = 'md', icon, style, onClick, fullWidth }) { const sizes = { sm: { pad: '10px 18px', font: 13, gap: 8 }, md: { pad: '14px 26px', font: 14, gap: 10 }, lg: { pad: '18px 34px', font: 15, gap: 12 } }[size]; const styles = { primary: { background: 'var(--eq-ink)', color: 'var(--eq-bg)', border: '1px solid var(--eq-ink)' }, gold: { background: 'var(--eq-gold)', color: 'var(--eq-ink-on-gold)', border: '1px solid var(--eq-gold)' }, ghost: { background: 'transparent', color: 'var(--eq-ink)', border: '1px solid var(--eq-line)' }, link: { background: 'transparent', color: 'var(--eq-ink)', border: 0, padding: 0, borderBottom: '1px solid var(--eq-gold)', borderRadius: 0 } }[variant]; return ( ); } function Arrow({ size = 14, color = 'currentColor' }) { return ( ); } function Pill({ children, style }) { return ( {children}); } function Badge({ children, tone = 'gold', style }) { const tones = { gold: { bg: 'rgba(191,161,90,0.12)', color: 'var(--eq-gold)', border: 'rgba(191,161,90,0.35)' }, ink: { bg: 'var(--eq-surface-alt)', color: 'var(--eq-ink-soft)', border: 'var(--eq-line)' }, soft: { bg: 'transparent', color: 'var(--eq-ink-soft)', border: 'var(--eq-line)' } }[tone]; return ( {children}); } function IconCircle({ children, size = 44, tone = 'gold' }) { const bg = tone === 'gold' ? 'rgba(191,161,90,0.10)' : 'var(--eq-surface-alt)'; const stroke = tone === 'gold' ? 'rgba(191,161,90,0.4)' : 'var(--eq-line)'; return ( {children}); } function ServiceCard({ kicker, title, price, duration, body, cta = 'Découvrir', href = '#', highlighted = false, comingSoon = false, icon }) { return (
{highlighted && Programme phare } {icon &&
{icon}
} {kicker &&
{kicker}
}

{title}

{body}

{price} {duration && · {duration} }
{!comingSoon ? {cta} : Prochainement }
); } function Field({ label, children, hint }) { return ( ); } function Input({ placeholder, type = 'text', defaultValue, style }) { return ( ); } function Textarea({ placeholder, rows = 4, defaultValue }) { return (