// ─── ROI CALCULATOR ─────────────────────────────────────────────────────────── function ROICalculator() { const [missed, setMissed] = React.useState(10); const [rate, setRate] = React.useState(30); const [basket, setBasket] = React.useState(150); const monthly = Math.round(missed * 4 * (rate / 100)); const revenue = monthly * basket; const annual = revenue * 12; const sliders = [ { label:'Appels manqués / semaine', value:missed, set:setMissed, min:1, max:50, unit:'appels', color:B.blue }, { label:'Taux de conversion estimé',value:rate, set:setRate, min:5, max:80, unit:'%', color:B.cyan }, { label:'Panier moyen par client', value:basket, set:setBasket, min:50, max:500, unit:'€', color:B.lcyan }, ]; return (
{/* Sliders */}
{sliders.map(({label,value,set,min,max,unit,color})=>{ const pct = ((value-min)/(max-min))*100; return (
{value}{unit}
set(Number(e.target.value))} className="omnira-slider" style={{'--pct':`${pct}%`,'--color':color}}/>
{min}{unit} {max}{unit}
); })}
{/* Results */}
{[ { label:'Clients récupérables / mois', value:`${monthly}`, unit:'clients', color:B.blue, hi:false }, { label:'Revenus récupérables / mois', value:`${revenue.toLocaleString('fr-FR')}`, unit:'€', color:B.cyan, hi:false }, { label:'Revenus récupérables / an', value:`${annual.toLocaleString('fr-FR')}`, unit:'€ / an', color:B.lcyan, hi:true }, ].map(({label,value,unit,color,hi})=>(
{hi &&
}

{label}

{value} {unit}
))} Commencer à récupérer ces revenus
); } window.ROICalculator = ROICalculator; // ─── TESTIMONIALS ───────────────────────────────────────────────────────────── const TESTIMONIALS = [ { name:'Patrick M.', role:'Gérant', garage:'Garage Martin — Lyon 3e', stars:5, photo:'uploads/avis photo 1.png', rotate:'-2.5deg', offsetY:'0px', text:"On ratait facilement 4 ou 5 appels par jour pendant les créneaux chargés. Depuis qu'Omnira décroche à notre place, tout est capté et résumé. Le premier mois, on a récupéré au moins 3 RDV qu'on aurait perdus. C'est rentable immédiatement." }, { name:'Sylvie R.', role:'Responsable accueil', garage:'Auto Expert Gironde — Bordeaux', stars:5, photo:'uploads/avis photo 2-4449261d.png', rotate:'1.8deg', offsetY:'40px', text:"Ce qui m'a surprise, c'est le naturel de l'agent. Mes clients ne réalisent pas qu'ils parlent à une IA. Et moi j'ai enfin du temps pour accueillir correctement ceux qui poussent la porte — c'est ça la vraie valeur." }, { name:'Karim B.', role:'Propriétaire', garage:'Mécano Plus — Marseille 13e', stars:5, photo:'uploads/avis photo 3.jpg', rotate:'-1.2deg', offsetY:'-16px', text:"Un vendredi soir à 21h, un client a appelé pour un voyant moteur. L'agent a tout capté et transmis. Le lundi on l'a rappelé en priorité — il est devenu client fidèle. Ce genre de cas, avant, on le perdait sans même le savoir." }, ]; function Testimonials() { return (
{TESTIMONIALS.map((t,i)=>(
e.currentTarget.style.transform='rotate(0deg) translateY(-4px)'} onMouseLeave={e=>e.currentTarget.style.transform=`rotate(${t.rotate}) translateY(0)`}>
{[...Array(t.stars)].map((_,j)=>)}

"{t.text}"

{t.name}

{t.name}

{t.role} · {t.garage}

))}
); } window.Testimonials = Testimonials;