// Shared components: Nav, Footer, Icon, Button, TweaksPanel const { useState, useEffect, useRef, useMemo } = React; function Icon({ name, className = '', style }) { return {name}; } function NavBar({ route, setRoute, cartCount, onOpenCart, onOpenTweaks }) { const items = [ { key: 'boutique', label: 'Fleuriste' }, { key: 'tanatorios', label: 'Funérariums' }, { key: 'contact', label: 'Contact' }, { key: 'apropos', label: 'À propos' }, ]; return (
); } function Footer({ setRoute }) { return ( ); } function TrustBar() { const items = [ { icon: 'local_shipping', label: 'Logistique', value: 'Livraison le jour même' }, { icon: 'visibility_off', label: 'Engagement', value: 'Service discret' }, { icon: 'schedule', label: 'Disponibilité', value: 'Disponible 24h/24' }, { icon: 'location_on', label: 'Périmètre', value: 'Livraison Grand Lyon' }, ]; return (
{items.map(it => (

{it.label}

{it.value}

))}
); } function TweaksPanel({ open, onClose, primaryColor, setPrimaryColor }) { const palette = [ { key: '#000e77', label: 'Bleu Sanctuaire', sub: 'Original' }, { key: '#0f22a5', label: 'Bleu Cobalt', sub: 'Plus saturé' }, { key: '#1e3a5f', label: 'Bleu Ardoise', sub: 'Feutré' }, { key: '#2d4a3e', label: 'Vert Sauge', sub: 'Organique' }, { key: '#4a1e3a', label: 'Prune', sub: 'Mémoriel' }, { key: '#3a2d1e', label: 'Terre Brûlée', sub: 'Chaleureux' }, { key: '#1c1c1c', label: 'Noir Encre', sub: 'Minimaliste' }, ]; if (!open) return null; return (

Tweaks

Couleur primaire

{palette.map(p => { const active = p.key.toLowerCase() === primaryColor.toLowerCase(); return ( ); })}
Le changement s'applique à toute l'interface. Activable aussi depuis la barre d'édition.
); } Object.assign(window, { Icon, NavBar, Footer, TrustBar, TweaksPanel });