// 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,
});