Lallaby One
Découvrez ce qui vous attend Description Préparez-vous à des nuits de sommeil véritablement réparatrices. Moins de distractions sonores, plus de confort, pour des nuits paisibles — que vous dormiez sur le côté ou que vous partagiez votre lit avec un partenaire qui ronfle. Confort optimisé pour le sommeil. La forme douce et compacte réduit la pression dans l’oreille, vous permettant de les porter toute la nuit sans gêne, même en dormant sur le côté. Deux tailles d’embouts en silicone. Inclus : une paire en taille standard et une paire en petite taille, pour s’adapter confortablement à la morphologie de vos oreilles. Approuvé par les dormeurs. Plébiscité par celles et ceux qui recherchent un sommeil profond et paisible, grâce à un design pensé exclusivement pour la nuit. Simplicité d’utilisation. Connectez-les en quelques secondes à votre téléphone ou à votre application de relaxation préférée, puis détendez-vous en toute sérénité. Pensé pour vos nuits, conçu pour durer. Chaque paire est fabriquée avec soin à partir de matériaux doux et résistants, pour vous offrir une expérience de sommeil naturelle et apaisante, nuit après nuit. Afficher plus .lp-desc{ --txt:#303030; --muted:rgba(48,48,48,.7); --hair:#ececec; --fade-bg:#fff; --collapsed:300px; max-width:720px; margin:28px 0 8px; } @media (max-width:600px){ .lp-desc{ --collapsed:220px; } } .lp-desc .visually-hidden{position:absolute!important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;overflow:hidden} .lp-desc-hr{border:0;height:1px;background:var(--hair);margin:10px 0} .lp-desc-hr--top{margin-bottom:14px} .lp-desc-hr--bottom{margin-top:14px} .lp-desc-topline{display:flex;align-items:center;justify-content:center;gap:.6rem;color:var(--txt);margin-bottom:12px} .lp-desc-topline__icon{width:22px;height:22px;opacity:.95} .lp-desc-topline__text{font-weight:500} .lp-desc-intro{color:var(--txt);opacity:.9;line-height:1.65;margin:12px 0 18px} .lp-desc-list{display:grid;gap:16px;margin:0;padding:0;list-style:none} .lp-desc-item{display:flex;gap:10px} .lp-desc-check{ width:18px;height:18px;flex:0 0 18px;background:var(--txt); mask:url('data:image/svg+xml;utf8,') no-repeat center/contain; -webkit-mask:url('data:image/svg+xml;utf8,') no-repeat center/contain; margin-top:.25rem; } .lp-desc-item__title{color:var(--txt);font-weight:400;line-height:1.35} .lp-desc-item__sub{color:var(--txt);opacity:.7;margin-top:5px;line-height:1.5;font-weight:300!important;} .lp-desc-body{ position:relative; overflow:hidden; background:transparent; max-height:none!important; height:var(--collapsed)!important; transition:height .35s ease; } .lp-desc-body.is-animating{ will-change:height; } .lp-desc-fade{ position:absolute; inset:auto 0 0 0; height:110px; pointer-events:none; background:linear-gradient(to bottom, rgba(255,255,255,0) 0%, var(--fade-bg) 85%, var(--fade-bg) 100%); opacity:1; transition:opacity .25s ease; display:block!important; } .lp-desc-actions{display:flex;justify-content:center;margin-top:3rem!important} .lp-desc-toggle{ display:inline-flex;align-items:center;gap:.45rem;background:transparent;border:0; color:var(--txt);cursor:pointer;font-weight:500;font-size:1.05rem;transition:transform .15s ease; } .lp-desc-toggle__label{font-size:1.8rem!important;} .lp-desc-toggle:active{transform:scale(.98)} .lp-desc-toggle__chev{width:18px;height:18px;transition:transform .3s ease} .lp-desc.is-open .lp-desc-toggle__chev{transform:rotate(180deg)} (function(){ const root = document.querySelector('.lp-desc'); if(!root) return; const btn = root.querySelector('.lp-desc-toggle'); const label = root.querySelector('.lp-desc-toggle__label'); const body = root.querySelector('#lp-desc-body'); const fade = root.querySelector('.lp-desc-fade'); const getCollapsed = () => { const v = getComputedStyle(root).getPropertyValue('--collapsed').trim(); const n = parseInt(v,10); return Number.isFinite(n) ? n : 300; }; body.style.setProperty('height', getCollapsed() + 'px', 'important'); if (fade) fade.style.setProperty('display','block','important'); function animateHeight(from, to, done){ body.classList.add('is-animating'); body.style.setProperty('height', from + 'px', 'important'); void body.offsetHeight; body.style.setProperty('height', to + 'px', 'important'); const onEnd = () => { body.removeEventListener('transitionend', onEnd); body.classList.remove('is-animating'); done && done(); }; body.addEventListener('transitionend', onEnd, { once:true }); } function open(){ const from = body.getBoundingClientRect().height; const to = body.scrollHeight; if (fade){ fade.style.removeProperty('display'); fade.style.opacity = '0'; } animateHeight(from, to, ()=>{ body.style.setProperty('height', 'auto', 'important'); if (fade){ fade.style.setProperty('display','none','important'); fade.style.opacity = '1'; } root.classList.add('is-open'); if (label) label.textContent = 'Afficher moins'; btn.setAttribute('aria-expanded','true'); }); } function close(){ const from = body.getBoundingClientRect().height; const to = getCollapsed(); if (fade){ fade.style.setProperty('display','block','important'); void fade.offsetHeight; fade.style.opacity = '1'; } body.style.setProperty('height', from + 'px', 'important'); animateHeight(from, to, ()=>{ body.style.setProperty('height', to + 'px', 'important'); root.classList.remove('is-open'); if (label) label.textContent = 'Afficher plus'; btn.setAttribute('aria-expanded','false'); body.scrollIntoView({block:'nearest',behavior:'smooth'}); }); } btn.addEventListener('click', ()=> root.classList.contains('is-open') ? close() : open()); function refreshControls(){ const collapsed = getCollapsed(); if (body.scrollHeight *:not(.lby-vmodal){ filter: blur(var(--lby-page-blur)); transition: filter .22s ease; } body:not(.lby-modal-open) > *:not(.lby-vmodal){ filter:none; transition: filter .22s ease; } /* ===== MODAL (anim open + close) ===== */ .lby-vmodal{ --overlay: rgba(0,0,0,.30); --backdrop-blur: 14px; position:fixed; inset:0; z-index:99999; opacity:0; visibility:hidden; pointer-events:none; transition: opacity .22s ease, visibility 0s linear .22s; } .lby-vmodal.is-open{ opacity:1; visibility:visible; pointer-events:auto; transition: opacity .22s ease; } /* Backdrop + blur (quand supporté) */ .lby-vmodal__backdrop{ position:fixed; inset:0; background: var(--overlay); opacity:0; transition: opacity .22s ease; backdrop-filter: blur(var(--backdrop-blur)) saturate(1.1); -webkit-backdrop-filter: blur(var(--backdrop-blur)) saturate(1.1); } .lby-vmodal.is-open .lby-vmodal__backdrop{opacity:1} /* Panel centré + anim */ .lby-vmodal__panel{ position:fixed; left:50%; top:50%; width:min(92vw, 420px, calc(80vh * 9 / 16)); aspect-ratio:9/16; background:#000; border-radius:16px; overflow:hidden; box-shadow:0 18px 50px rgba(0,0,0,.35); transform:translate(-50%,-50%) scale(.92); opacity:0; transition: transform .28s cubic-bezier(.2,.85,.2,1), opacity .22s ease; will-change: transform, opacity; } .lby-vmodal.is-open .lby-vmodal__panel{ transform:translate(-50%,-50%) scale(1); opacity:1; } /* ✅ Fermeture animée (robuste mobile) */ .lby-vmodal.is-open.is-closing .lby-vmodal__backdrop{opacity:0} .lby-vmodal.is-open.is-closing .lby-vmodal__panel{ transform:translate(-50%,-50%) scale(.96); opacity:0; } /* ✅ plus de bande noire : cover + micro zoom */ .lby-vmodal__video{ width:100%; height:100%; display:block; background:#000; object-fit:cover; transform:scale(1.03); transform-origin:center; } .lby-vmodal__close{ position:absolute; top:10px; right:10px; width:34px;height:34px;border:none;border-radius:999px; background:rgba(255,255,255,.92);color:#000;font-size:20px; cursor:pointer;display:grid;place-items:center; z-index:2; } body.lby-modal-lock{overflow:hidden!important} @media (max-width:640px){ .lby-vcard{flex-basis:110px;height:184px} .lby-videos__header h3{font-size:20px} .lby-vmodal__panel{border-radius:14px} } @media (prefers-reduced-motion: reduce){ .lby-vmodal, .lby-vmodal__backdrop, .lby-vmodal__panel{transition:none!important} body.lby-modal-open > *:not(.lby-vmodal){transition:none!important} .lby-vmodal__video{transform:none!important} } (function(){ const section = document.querySelector('.lby-videos'); if(!section || section.dataset.lbyInit) return; section.dataset.lbyInit = '1'; const modal = section.querySelector('[data-lby-modal]'); const panel = modal ? modal.querySelector('.lby-vmodal__panel') : null; const closeBtn = modal ? modal.querySelector('[data-lby-close]') : null; const modalVideo = modal ? modal.querySelector('video') : null; if(!modal || !panel || !closeBtn || !modalVideo) return; // Move into body to avoid fixed issues (parents transform etc.) const originalParent = modal.parentElement; const originalNext = modal.nextElementSibling; const CLOSE_MS = 280; // doit être >= transition panel function moveModalToBody(){ if(modal.parentElement !== document.body){ document.body.appendChild(modal); } } function restoreModal(){ if(originalParent && modal.parentElement === document.body){ if(originalNext) originalParent.insertBefore(modal, originalNext); else originalParent.appendChild(modal); } } function openModal(src, poster){ moveModalToBody(); // reset video modalVideo.pause(); modalVideo.removeAttribute('src'); modalVideo.load(); modalVideo.src = src; if (poster) modalVideo.poster = poster; modal.setAttribute('aria-hidden', 'false'); document.body.classList.add('lby-modal-lock'); document.body.classList.add('lby-modal-open'); modal.classList.remove('is-closing'); // Force open animation reliably modal.classList.remove('is-open'); void modal.offsetHeight; requestAnimationFrame(() => { modal.classList.add('is-open'); }); modalVideo.load(); } function closeModal(){ if(!modal.classList.contains('is-open') || modal.classList.contains('is-closing')) return; // ✅ ferme avec animation partout (iOS inclus) modal.classList.add('is-closing'); window.setTimeout(() => { modalVideo.pause(); modalVideo.removeAttribute('src'); modalVideo.load(); modal.classList.remove('is-open'); modal.classList.remove('is-closing'); modal.setAttribute('aria-hidden', 'true'); document.body.classList.remove('lby-modal-lock'); document.body.classList.remove('lby-modal-open'); restoreModal(); }, CLOSE_MS); } // Open on click (cards) section.addEventListener('click', (e) => { const card = e.target.closest('[data-lby-video-card]'); if(!card) return; const src = card.getAttribute('data-src'); const poster = card.getAttribute('data-poster') || ''; if(!src) return; openModal(src, poster); }); // Open on keyboard section.addEventListener('keydown', (e) => { const card = e.target.closest('[data-lby-video-card]'); if(!card) return; if(e.key !== 'Enter' && e.key !== ' ') return; e.preventDefault(); const src = card.getAttribute('data-src'); const poster = card.getAttribute('data-poster') || ''; if(!src) return; openModal(src, poster); }); // Close button closeBtn.addEventListener('click', closeModal); // ✅ Close when clicking OUTSIDE the panel (anywhere outside player) modal.addEventListener('click', (e) => { // si le click est dans le panel => ne pas fermer if(panel.contains(e.target)) return; closeModal(); }); // ESC document.addEventListener('keydown', (e) => { if(e.key === 'Escape' && modal.classList.contains('is-open')) closeModal(); }); })();