// CookieBanner.jsx — bandeau de consentement cookies, minimal et honnête : // le site n'utilise que des cookies essentiels (aucun suivi publicitaire). // Persisté en localStorage — n'apparaît qu'une fois par navigateur. const STORAGE_KEY = 'b2a-cookie-consent'; const cookieBannerStyles = { bar: { position: 'fixed', left: 0, right: 0, bottom: 0, zIndex: 95, background: 'var(--ink-900)', color: 'var(--paper)', borderTop: '1px solid var(--amber-500)', boxShadow: '0 -4px 0 0 rgba(0,0,0,.08)', }, inner: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 24, flexWrap: 'wrap', padding: '16px 0', }, text: { fontSize: 13.5, lineHeight: 1.5, color: 'var(--mist-200)', margin: 0, maxWidth: 640, }, actions: { flexShrink: 0 }, }; /** * @param {Object} p * @param {(visible: boolean) => void} [p.onVisibilityChange] — permet à la * page (ex. bouton « retour en haut ») de se décaler pendant que le * bandeau est affiché. */ const CookieBanner = ({ onVisibilityChange }) => { const [visible, setVisible] = React.useState(false); React.useEffect(() => { let show = false; try { show = window.localStorage.getItem(STORAGE_KEY) !== '1'; } catch (e) { show = true; // localStorage indisponible (navigation privée stricte) : on affiche par prudence } setVisible(show); if (onVisibilityChange) onVisibilityChange(show); }, []); const accept = () => { try { window.localStorage.setItem(STORAGE_KEY, '1'); } catch (e) { /* ignore */ } setVisible(false); if (onVisibilityChange) onVisibilityChange(false); }; if (!visible) return null; return (
Ce site utilise uniquement des cookies essentiels à son bon fonctionnement — aucun suivi publicitaire, aucune revente de données.