// Simulateur Scentium — composants étapes (version B2B clients) const { useState, useEffect, useRef, useMemo } = React; // ====== Helpers ====== const lerp = (a,b,t)=>a+(b-a)*t; const clamp = (v,a,b)=>Math.max(a,Math.min(b,v)); // Mix accent global selon état window.simBlendAccent = function(state){ const palettes = { coolLight: [180, 0.06, 0.78], coolShade: [220, 0.08, 0.45], warmLight: [40, 0.10, 0.78], warmShade: [25, 0.14, 0.45], }; const w = state.warm ?? .5; const s = state.shade ?? .5; const tl = palettes.coolLight, tr = palettes.warmLight; const bl = palettes.coolShade, br = palettes.warmShade; const top = tl.map((v,i)=>lerp(v, tr[i], w)); const bot = bl.map((v,i)=>lerp(v, br[i], w)); const out = top.map((v,i)=>lerp(v, bot[i], s)); const [h, c, l] = out; return `oklch(${l} ${c} ${h})`; }; // ====== INTRO ====== window.SimIntro = function SimIntro({ onStart }){ return (
Scentium · Simulateur olfactif

Quelle fragrance pour
votre espace ?

5 questions simples pour identifier la signature olfactive
qui correspond à votre activité et à vos clients.

5 étapes · ≈ 2 minutes · 68 fragrances
); }; // ====== ÉTAPE 1 — Secteur d'activité ====== window.SimStepMoment = function SimStepMoment({ value, onPick }){ const opts = [ { id:'matin', label:'Hôtellerie', sub:'Hôtels, lobbies, résidences', warm:.55, shade:.5 }, { id:'jour', label:'Commerce', sub:'Boutiques, retail, concept stores', warm:.4, shade:.3 }, { id:'soir', label:'Bien-être', sub:'Spas, salons, centres de soins', warm:.65, shade:.55 }, { id:'nuit', label:'Restauration', sub:'Restaurants, bars, lounges', warm:.75, shade:.7 }, ]; return (
01 · Votre secteur

Dans quel secteur exercez-vous ?

{opts.map(o=>( ))}
); }; // ====== ÉTAPE 2 — Ambiance souhaitée ====== window.SimStepLieu = function SimStepLieu({ value, onPick }){ const opts = [ { id:'atrium', label:'Chic & raffinée', sub:'Élégance discrète, matériaux nobles' }, { id:'salon', label:'Chaleureuse', sub:'Confort, cocooning, douceur' }, { id:'chambre', label:'Zen & apaisante', sub:'Calme, sérénité, bien-être' }, { id:'jardin', label:'Fraîche & naturelle', sub:'Vitalité, air libre, verdure' }, { id:'cave', label:'Intense & caractère', sub:'Profondeur, singularité, prestige' }, { id:'plage', label:'Légère & aérienne', sub:'Fraîcheur, transparence, liberté' }, ]; return (
02 · L'ambiance

Quelle ambiance voulez-vous créer ?

{opts.map((o,i)=>( ))}
); }; // ====== ÉTAPE 3 — Famille olfactive ====== window.SimStepMatiere = function SimStepMatiere({ value, onPick }){ const opts = [ { id:'bois', label:'Boisé', sub:'Cèdre, vétiver, santal', wood:.85 }, { id:'fleur', label:'Floral', sub:'Rose, iris, jasmin', wood:.2 }, { id:'cuir', label:'Cuir', sub:'Caractère, élégance brute', wood:.7 }, { id:'agrume', label:'Frais', sub:'Agrumes, menthe, notes vertes', wood:.3 }, { id:'épice', label:'Épicé', sub:'Cannelle, poivre, cardamome', wood:.6 }, { id:'ambre', label:'Oriental', sub:'Ambre, résines, vanille', wood:.7 }, { id:'vert', label:'Vert', sub:'Feuilles, herbes, thé', wood:.4 }, { id:'eau', label:'Marin', sub:'Notes océaniques, sel, minéral', wood:.35 }, ]; return (
03 · La famille olfactive

Vers quelle direction penchez-vous ?

{opts.map((o,i)=>( ))}
); }; // ====== ÉTAPE 4 — Réglages ====== window.SimStepSensors = function SimStepSensors({ state, onChange }){ const intense = state.intense ?? .5; const sweet = state.sweet ?? .5; const woodLocal = state.wood ?? .5; const Slider = ({label, leftLabel, rightLabel, value, onSet})=>(
{label} {Math.round(value*100)}
onSet(+e.target.value/100)} />
{leftLabel} {rightLabel}
); return (
04 · Vos préférences

Ajustez selon vos envies.

onChange({intense:v})}/> onChange({sweet:v})}/> onChange({wood:v})}/>
); }; // ====== ÉTAPE 5 — Objectif ====== window.SimStepMood = function SimStepMood({ value, onPick }){ const opts = [ { id:'calme', label:'Détente', sub:'Vos clients se sentent apaisés' }, { id:'désir', label:'Séduction', sub:'Créer une attraction irrésistible' }, { id:'audace', label:'Prestige', sub:'Affirmer une image haut de gamme' }, { id:'mémoire', label:'Mémorabilité',sub:'Qu\'on se souvienne de votre lieu' }, { id:'évasion', label:'Évasion', sub:'Transporter dans un autre univers' }, ]; return (
05 · L'objectif

Que voulez-vous que vos clients ressentent ?

{opts.map((o,i)=>( ))}
); }; Object.assign(window, { SimIntro: window.SimIntro, SimStepMoment: window.SimStepMoment, SimStepLieu: window.SimStepLieu, SimStepMatiere: window.SimStepMatiere, SimStepSensors: window.SimStepSensors, SimStepMood: window.SimStepMood, });