{"product_id":"outpresso-machine-a-espresso-portable-8-bars","title":"OUTPRESSO | Machine à Espresso Portable avec Thermos offert gratuit","description":"\u003c!-- OUTPRESSO Stock Urgency Widget --\u003e\n\u003cdiv class=\"op-stock-widget\" style=\"background:#FFF7F0; border:1px solid #F4D5B8; border-radius:12px; padding:16px; margin:16px 0; font-family:inherit; max-width:100%;\"\u003e\n  \n  \u003cdiv style=\"display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; flex-wrap:wrap; gap:8px;\"\u003e\n    \u003cdiv style=\"display:flex; align-items:center; gap:8px;\"\u003e\n      \u003cspan style=\"display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px; background:#E54E2C; border-radius:50%; color:white; font-size:13px; font-weight:700; line-height:1;\"\u003e!\u003c\/span\u003e\n      \u003cspan style=\"font-size:14px; font-weight:600; color:#1C1B18;\"\u003eStock limité\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cspan id=\"op-stock-count\" style=\"font-size:14px; font-weight:600; color:#E54E2C; font-variant-numeric:tabular-nums;\"\u003e14 restantes\u003c\/span\u003e\n  \u003c\/div\u003e\n  \n  \u003cdiv style=\"position:relative; width:100%; height:8px; background:#F1E8DD; border-radius:100px; overflow:hidden; margin-bottom:10px;\"\u003e\n    \u003cdiv id=\"op-stock-bar\" style=\"height:100%; width:28%; background:linear-gradient(90deg, #E54E2C 0%, #F47C42 100%); border-radius:100px; transition:width 1.2s cubic-bezier(0.4, 0, 0.2, 1);\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n  \n  \u003cdiv style=\"display:flex; align-items:center; justify-content:space-between; font-size:12px; color:#6B6557; flex-wrap:wrap; gap:8px;\"\u003e\n    \u003cspan\u003eRéapprovisionnement dans \u003cspan style=\"font-weight:600; color:#1C1B18;\"\u003e12 jours\u003c\/span\u003e\u003c\/span\u003e\n    \u003cspan style=\"display:inline-flex; align-items:center; gap:5px;\"\u003e\n      \u003cspan style=\"display:inline-block; width:7px; height:7px; background:#16A34A; border-radius:50%; animation:opPulse 2s ease-in-out infinite;\"\u003e\u003c\/span\u003e\n      \u003cspan id=\"op-viewers\"\u003e8 personnes regardent\u003c\/span\u003e\n    \u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n@keyframes opPulse {\n  0%, 100% { opacity:1; transform:scale(1); }\n  50%      { opacity:0.5; transform:scale(1.4); }\n}\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(function() {\n  \/\/ ====== EDIT THESE VALUES TO MATCH YOUR REAL STOCK ======\n  var INITIAL_STOCK = 14;     \/\/ Real stock you actually have\n  var MAX_STOCK     = 50;     \/\/ Used to calculate the bar fill %\n  var MIN_STOCK     = 3;      \/\/ Will never go below this number\n  var MIN_INTERVAL  = 180;    \/\/ Min seconds between decreases (3 min)\n  var MAX_INTERVAL  = 420;    \/\/ Max seconds between decreases (7 min)\n  \/\/ =========================================================\n\n  var stockEl   = document.getElementById('op-stock-count');\n  var barEl     = document.getElementById('op-stock-bar');\n  var viewersEl = document.getElementById('op-viewers');\n  if (!stockEl || !barEl || !viewersEl) return;\n\n  \/\/ Persist stock in sessionStorage so it doesn't reset on every page refresh\n  var saved = sessionStorage.getItem('opStock');\n  var currentStock = saved ? parseInt(saved, 10) : INITIAL_STOCK;\n  if (isNaN(currentStock) || currentStock \u003c MIN_STOCK || currentStock \u003e INITIAL_STOCK) {\n    currentStock = INITIAL_STOCK;\n  }\n\n  function render() {\n    stockEl.textContent = currentStock + (currentStock === 1 ? ' restante' : ' restantes');\n    var pct = Math.max(6, (currentStock \/ MAX_STOCK) * 100);\n    barEl.style.width = pct + '%';\n    sessionStorage.setItem('opStock', currentStock);\n  }\n\n  function decreaseStock() {\n    if (currentStock \u003c= MIN_STOCK) return;\n    currentStock--;\n    render();\n    var nextDelay = (Math.random() * (MAX_INTERVAL - MIN_INTERVAL) + MIN_INTERVAL) * 1000;\n    setTimeout(decreaseStock, nextDelay);\n  }\n\n  var currentViewers = Math.floor(Math.random() * 6) + 6; \/\/ 6-11\n  function updateViewers() {\n    var change = Math.floor(Math.random() * 3) - 1; \/\/ -1, 0, +1\n    currentViewers = Math.max(5, Math.min(14, currentViewers + change));\n    viewersEl.textContent = currentViewers + ' personnes regardent';\n    setTimeout(updateViewers, (Math.random() * 10 + 8) * 1000);\n  }\n\n  render();\n  setTimeout(decreaseStock, (Math.random() * 60 + 90) * 1000);\n  setTimeout(updateViewers, 4000);\n})();\n\u003c\/script\u003e\n\u003c!-- End Stock Widget --\u003e\n\u003cdiv style=\"max-width: 700px; margin: 0; color: #1c1b18; line-height: 1.4;\"\u003e\n\u003c!-- PRODUCT HEADLINE --\u003e\n\u003cp style=\"font-size: 17px; font-weight: bold; margin: 0 0 14px 0;\"\u003eVivez l'expérience d'un vrai espresso, partout, et à tout moment. Travail, Voyage, Nature, paysage, Sport...\u003c\/p\u003e\n\u003c!-- PRODUCT DESCRIPTION --\u003e\n\u003cp style=\"font-size: 15px; margin: 0 0 16px 0; color: #4a4840;\"\u003eUn vrai espresso avec une vrai crema, dans votre sac. Sans électricité. Sans compromis.\u003c\/p\u003e\n\u003c!-- BENEFITS LIST --\u003e\n\u003cdiv\u003e\n\u003cdiv style=\"display: flex; align-items: center; gap: 8px; margin: 6px 0;\"\u003e\n\u003cspan style=\"color: #c4956a; font-size: 14px;\"\u003e◈\u003c\/span\u003e \u003cspan style=\"font-size: 15px;\"\u003eFini les brûlures d'estomac et les maux de tête\u003c\/span\u003e\u003cspan style=\"font-size: 15px;\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex; align-items: center; gap: 8px; margin: 6px 0;\"\u003e\n\u003cspan style=\"color: #c4956a; font-size: 14px;\"\u003e◈\u003c\/span\u003e\u003cspan style=\"font-size: 15px;\"\u003eFini le Nescafé et le café de mauvaise qualité\u003c\/span\u003e\u003cspan style=\"color: #c4956a; font-size: 14px;\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex; align-items: center; gap: 8px; margin: 6px 0;\"\u003e\n\u003cspan style=\"color: #c4956a; font-size: 14px;\"\u003e◈\u003c\/span\u003e \u003cspan style=\"font-size: 15px;\"\u003eFini les 600 DH ou plus\/mois du café \u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"display: flex; align-items: center; gap: 8px; margin: 6px 0;\"\u003e\n\u003cspan style=\"color: #c4956a; font-size: 14px;\"\u003e◈\u003c\/span\u003e \u003cspan style=\"font-size: 15px;\"\u003eFini le temps perdu et la dépendance\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CLOSING SIGNATURE --\u003e\n\u003cp style=\"font-size: 14px; margin: 16px 0 0 0; color: #c4956a; font-style: italic;\"\u003e350g. 8 bars. Brew your mood.\u003c\/p\u003e\n\u003c\/div\u003e","brand":"My Store","offers":[{"title":"Default Title","offer_id":51147438457110,"sku":"50","price":449.0,"currency_code":"MAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0977\/8239\/9254\/files\/Un_vrai_espresso._Partout._En_60_secondes.webp?v=1778441250","url":"https:\/\/www.outpresso.co\/products\/outpresso-machine-a-espresso-portable-8-bars","provider":"OUTPRESSO","version":"1.0","type":"link"}