{"product_id":"twist-vanille-peche","title":"PEACHES \u0026 VANILLA TWIST","description":"\u003cstyle\u003e\n  .zab-fp{\n    --cream:#FFF4D4;--blue:#20409A;--blue-deep:#162d6e;--blue-soft:#c2cce6;\n    --orange:#F5AD6D;--orange-deep:#e08a3f;--orange-soft:#fbdbbd;--ink:#1a1410;\n    color:var(--ink);background:var(--cream);overflow:hidden;width:100%;\n    border:3px solid var(--ink);border-radius:18px;box-shadow:8px 8px 0 var(--ink);\n    margin:0 0 40px;padding-bottom:40px;\n  }\n  .zab-fp *{box-sizing:border-box}\n  .zab-fp a{color:inherit}\n  .zab-fp .stripe{height:18px;border-top:2px solid var(--ink);border-bottom:2px solid var(--ink);background:repeating-linear-gradient(135deg,var(--orange) 0 22px,var(--cream) 22px 44px)}\n  .zab-fp .stripe.blue{background:repeating-linear-gradient(135deg,var(--blue-soft) 0 22px,var(--cream) 22px 44px)}\n  .zab-fp .stripe.deep{background:repeating-linear-gradient(135deg,var(--blue-deep) 0 22px,var(--cream) 22px 44px)}\n  .zab-fp-hero{padding:40px 24px 28px;text-align:center;position:relative;}\n  .zab-fp-eyebrow{display:inline-flex;align-items:center;gap:10px;font-family:ui-monospace,monospace;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;background:var(--ink);color:var(--cream);padding:8px 14px;border-radius:999px;margin-bottom:22px;}\n  .zab-fp-eyebrow .dot{width:8px;height:8px;border-radius:50%;background:var(--orange);animation:zabFpPulse 1.6s ease-in-out infinite}\n  @keyframes zabFpPulse{0%,100%{opacity:1}50%{opacity:.4}}\n  .zab-fp h1.zab-fp-title{font-size:clamp(34px,5.2vw,64px);line-height:.95;letter-spacing:-.03em;margin:0 0 8px;font-weight:900;color:var(--ink);text-wrap:balance;}\n  .zab-fp-sub{font-family:ui-monospace,monospace;font-size:.85rem;text-transform:uppercase;letter-spacing:.08em;opacity:.65;margin-bottom:32px;}\n  .zab-fp-tasting{max-width:900px;margin:0 auto;background:var(--cream);border:3px solid var(--ink);border-radius:18px;box-shadow:8px 8px 0 var(--ink);overflow:hidden;}\n  .zab-fp-tasting-head{background:var(--ink);color:var(--cream);padding:14px 18px;font-family:ui-monospace,monospace;font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700;}\n  .zab-fp-tasting-body{padding:36px 24px;display:flex;align-items:center;justify-content:center;gap:18px;flex-wrap:wrap;}\n  .zab-fp-flavor{display:inline-block;font-weight:900;font-size:clamp(18px,2.6vw,28px);line-height:1.1;letter-spacing:-.01em;padding:10px 18px;border:3px solid var(--ink);border-radius:14px;box-shadow:5px 5px 0 var(--ink);transform:rotate(-1.5deg);background:var(--orange);}\n  .zab-fp-flavor:nth-child(2){transform:rotate(1.2deg);background:var(--blue);color:var(--cream)}\n  .zab-fp-flavor:nth-child(3){transform:rotate(-0.8deg);background:var(--orange-soft)}\n  .zab-fp-plus{font-size:1.6rem;font-weight:900;opacity:.5;}\n  .zab-fp-video-sec{padding:24px 24px 32px;max-width:100%;margin:0 auto}\n  .zab-fp-video-frame{background:var(--cream);border:3px solid var(--ink);border-radius:14px;padding:10px;box-shadow:8px 8px 0 var(--ink);transform:rotate(-0.6deg);}\n  .zab-fp-video-frame .ratio{position:relative;width:100%;padding-bottom:56.25%;height:0;border-radius:8px;overflow:hidden;}\n  .zab-fp-video-frame iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;}\n  .zab-fp-sec{padding:36px 24px 12px;max-width:100%;margin:0 auto}\n  .zab-fp-sec-head{display:flex;justify-content:space-between;align-items:end;gap:16px;margin-bottom:20px;flex-wrap:wrap;}\n  .zab-fp-sec-head h2{font-size:clamp(26px,3.6vw,44px);font-weight:900;line-height:.95;margin:0;color:var(--blue-deep);letter-spacing:-.02em;text-wrap:balance;}\n  .zab-fp-sec-head h2 .pop{color:var(--blue)}\n  .zab-fp-sec-head .num{font-family:ui-monospace,monospace;font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;opacity:.5;white-space:nowrap;}\n  .zab-fp-info{background:var(--cream);border:3px solid var(--ink);border-radius:14px;box-shadow:6px 6px 0 var(--ink);padding:28px 28px 24px;position:relative;}\n  .zab-fp-info p{margin:0 0 14px;font-size:1.02rem;line-height:1.55}\n  .zab-fp-info p:last-child{margin-bottom:0}\n  .zab-fp-recipe{border:3px solid var(--ink);border-radius:14px;overflow:hidden;background:var(--cream);box-shadow:6px 6px 0 var(--ink);margin-bottom:8px;}\n  .zab-fp-recipe summary{cursor:pointer;list-style:none;padding:14px 18px;background:var(--ink);color:var(--cream);font-family:ui-monospace,monospace;font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700;display:flex;align-items:center;justify-content:space-between;gap:10px;}\n  .zab-fp-recipe summary::-webkit-details-marker{display:none}\n  .zab-fp-recipe summary::after{content:\"+\";font-size:1.4rem;font-weight:900;line-height:1;transition:transform .25s;}\n  .zab-fp-recipe[open] summary::after{transform:rotate(45deg)}\n  .zab-fp-recipe-body{padding:22px 24px}\n  .zab-fp-v60-meta{border-bottom:2px dashed var(--ink);padding-bottom:14px;margin-bottom:16px;}\n  .zab-fp-v60-ratio{font-weight:900;font-size:1.1rem;letter-spacing:-.01em}\n  .zab-fp-v60-yield{margin-top:4px;font-family:ui-monospace,monospace;font-size:.8rem;letter-spacing:.04em;opacity:.7}\n  .zab-fp-v60-temp{margin-top:8px;font-size:.92rem}\n  .zab-fp-v60-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:8px 0 14px;}\n  .zab-fp-v60-btns{display:flex;gap:8px;align-items:center;flex-wrap:wrap}\n  .zab-fp-btn{cursor:pointer;font-weight:900;padding:10px 16px;border-radius:999px;text-transform:uppercase;letter-spacing:.04em;font-size:.82rem;border:2.5px solid var(--ink);transition:transform .15s,box-shadow .15s;font-family:inherit;}\n  .zab-fp-btn.start{background:var(--orange);color:var(--ink);box-shadow:3px 3px 0 var(--ink)}\n  .zab-fp-btn.start:hover:not(:disabled){transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--ink)}\n  .zab-fp-btn.start:disabled{opacity:.4;cursor:not-allowed}\n  .zab-fp-btn.stop{background:var(--cream);color:var(--ink);box-shadow:3px 3px 0 var(--ink)}\n  .zab-fp-btn.stop:hover:not(:disabled){transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--ink)}\n  .zab-fp-btn.stop:disabled{opacity:.4;cursor:not-allowed}\n  .zab-fp-v60-timer{display:flex;gap:10px;align-items:baseline;line-height:1;}\n  .zab-fp-v60-timer .lbl{opacity:.6;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-family:ui-monospace,monospace;}\n  .zab-fp-v60-timer .v{font-weight:900;font-size:2rem;letter-spacing:-.01em;color:var(--blue-deep);font-family:ui-monospace,monospace;}\n  .zab-fp-v60-status{flex-basis:100%;opacity:.6;font-size:.78rem;line-height:1.3;margin-top:4px;font-family:ui-monospace,monospace;}\n  .zab-fp-phases{display:grid;gap:12px}\n  .zab-fp-phase{border:2.5px solid var(--ink);border-radius:12px;padding:14px 16px;background:var(--cream);box-shadow:3px 3px 0 var(--ink);transition:background .25s,box-shadow .25s,transform .15s;}\n  .zab-fp-phase-head{display:flex;gap:12px;align-items:baseline;margin-bottom:10px;flex-wrap:wrap;}\n  .zab-fp-phase-time{font-family:ui-monospace,monospace;font-weight:900;font-size:.95rem;background:var(--ink);color:var(--cream);padding:3px 8px;border-radius:6px;}\n  .zab-fp-phase-name{font-weight:900;font-size:1.05rem;letter-spacing:-.01em}\n  .zab-fp-phase-pills{display:flex;gap:8px;flex-wrap:wrap}\n  .zab-fp-pill{padding:6px 12px;border-radius:999px;font-size:.78rem;font-weight:700;background:var(--cream);border:2px solid var(--ink);font-family:ui-monospace,monospace;letter-spacing:.04em;text-transform:uppercase;}\n  .zab-fp-pill.dim{opacity:.55}\n  .zab-fp-v60-end{margin-top:14px;border-top:2px dashed var(--ink);padding-top:14px;}\n  .zab-fp-v60-end-row{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap}\n  .zab-fp-tip{background:var(--blue-soft);border:2px dashed var(--ink);border-radius:10px;padding:12px 14px;font-size:.88rem;line-height:1.4;}\n  .zab-fp-tip strong{font-weight:900}\n  .zab-fp-phase.is-active{background:var(--blue);color:var(--cream);border-color:var(--ink);box-shadow:5px 5px 0 var(--ink);}\n  .zab-fp-phase.is-active .zab-fp-phase-time{background:var(--cream);color:var(--ink)}\n  .zab-fp-phase.is-active .zab-fp-pill{background:var(--cream);color:var(--ink);border-color:var(--ink)}\n  .zab-fp-phase.is-active .zab-fp-pill.dim{opacity:.7}\n  @keyframes zabFpPourBlink{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.55;transform:scale(1.04);}}\n  .zab-fp-pill.is-pouring{background:var(--orange) !important;color:var(--ink) !important;border-color:var(--ink) !important;box-shadow:0 0 0 3px var(--cream) inset,3px 3px 0 var(--ink);animation:zabFpPourBlink 1.6s ease-in-out infinite;}\n  @media (prefers-reduced-motion:reduce){.zab-fp-pill.is-pouring{animation:none}}\n  @media (max-width:760px){\n    .zab-fp-tasting-body{padding:24px 16px;gap:12px}\n    .zab-fp-flavor{font-size:1.4rem;padding:8px 16px}\n    .zab-fp-info{padding:22px 18px}\n    .zab-fp-v60-timer .v{font-size:1.6rem}\n  }\n  @media (max-width:480px){\n    .zab-fp-hero{padding:48px 18px 24px}\n    .zab-fp-sec{padding:36px 18px 12px}\n  }\n\u003c\/style\u003e\n\u003cdiv class=\"zab-fp\"\u003e\n\u003c!-- ============== HERO ============== --\u003e\n\u003csection class=\"zab-fp-hero\"\u003e\n\u003cdiv class=\"zab-fp-eyebrow\"\u003e\n\u003cspan class=\"dot\"\u003e\u003c\/span\u003e \u003cspan\u003eColombia · BLEND\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ch1 class=\"zab-fp-title\"\u003ePEACH \u0026amp; VANILLA TWIST\u003c\/h1\u003e\n\u003cdiv class=\"zab-fp-sub\"\u003eCo-fermented · Peach \u0026amp; Vanilla · Colombia\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-tasting\"\u003e\n\u003cdiv class=\"zab-fp-tasting-head\"\u003eTasting Notes\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-tasting-body\"\u003e\n\u003cspan class=\"zab-fp-flavor\"\u003ePeach\u003c\/span\u003e \u003cspan class=\"zab-fp-plus\"\u003e+\u003c\/span\u003e \u003cspan class=\"zab-fp-flavor\"\u003eVanilla\u003c\/span\u003e \u003cspan class=\"zab-fp-plus\"\u003e+\u003c\/span\u003e \u003cspan class=\"zab-fp-flavor\"\u003eWhipped cream\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- ============== Video ============== --\u003e\n\u003csection class=\"zab-fp-video-sec\"\u003e\n\u003cdiv class=\"zab-fp-video-frame\"\u003e\n\u003cdiv class=\"ratio\"\u003e\u003ciframe src=\"https:\/\/www.youtube.com\/embed\/mXEh7Sw3Xbo?si=Kh4tSZDunzuFfosb\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen\u003e\u003c\/iframe\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cdiv class=\"stripe\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- ============== Coffee info ============== --\u003e\n\u003csection class=\"zab-fp-sec\"\u003e\n\u003cdiv class=\"zab-fp-sec-head\"\u003e\n\u003ch2\u003e\n\u003cspan class=\"pop\"\u003eThe coffee\u003c\/span\u003e in the cup\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-info\"\u003e\n\u003cp\u003eThe peach vanilla twist is the best of both worlds: a vibrant, indulgent coffee where the peach brings a beautiful fruity brightness while the vanilla rounds everything out with a soft, comforting finish. A blend made for sunny days and those moments when you want something a little decadent.\u003c\/p\u003e\n\u003cp\u003eThis blend brings together two Colombian co-fermented coffees made with exceptional expertise: the peach coffee from Edinson Argote and the vanilla coffee developed by the Forest team. Behind each of these lots are years of experience, research, and innovation in fermentation, with particular attention paid to consistency and coffee quality.\u003c\/p\u003e\n\u003cp\u003eBy combining these two approaches, the result is a coffee that is both playful and precise, shining a light on the work of Colombian producers pushing the limits of coffee processing while keeping transparency, sustainability, and terroir at the center.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cdiv class=\"stripe deep\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- ============== V60 ============== --\u003e\n\u003csection class=\"zab-fp-sec\"\u003e\n\u003cdiv class=\"zab-fp-sec-head\"\u003e\n\u003ch2\u003e\n\u003cspan class=\"pop\"\u003eV60\u003c\/span\u003e · Recipe\u003c\/h2\u003e\n\u003cdiv class=\"num\"\u003eRatio 1:15 · 92 °C · 2:30 total\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdetails open=\"\" id=\"v60Details-twistpeche\" class=\"zab-fp-recipe\"\u003e\n\u003csummary\u003eStep-by-step recipe with timer\u003c\/summary\u003e\n\u003cdiv class=\"zab-fp-recipe-body\"\u003e\n\u003cdiv class=\"zab-fp-v60-meta\"\u003e\n\u003cdiv class=\"zab-fp-v60-ratio\"\u003eRatio 1:15\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-v60-yield\"\u003e15 g in - 225 g out\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-v60-temp\"\u003e\n\u003cstrong\u003eWater temperature:\u003c\/strong\u003e 92 °C\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-v60-controls\"\u003e\n\u003cdiv class=\"zab-fp-v60-btns\"\u003e\n\u003cbutton id=\"v60StartBtn-twistpeche\" onclick=\"zabV60Start('twistpeche')\" class=\"zab-fp-btn start\" type=\"button\"\u003eStart\u003c\/button\u003e \u003cbutton disabled id=\"v60StopBtn-twistpeche\" onclick=\"zabV60Stop('twistpeche',false)\" class=\"zab-fp-btn stop\" type=\"button\"\u003eStop\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-v60-timer\"\u003e\n\u003cspan class=\"lbl\"\u003eTimer\u003c\/span\u003e \u003cspan id=\"v60Timer-twistpeche\" class=\"v\"\u003e0:00\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"v60WakeStatus-twistpeche\" class=\"zab-fp-v60-status\"\u003eℹ️ Press \"Start\" to keep your screen on.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-phases\"\u003e\n\u003cdiv id=\"v60-card-1-twistpeche\" class=\"zab-fp-phase\"\u003e\n\u003cdiv class=\"zab-fp-phase-head\"\u003e\n\u003cspan class=\"zab-fp-phase-time\"\u003e0:00\u003c\/span\u003e \u003cspan class=\"zab-fp-phase-name\"\u003ePhase 1 - Bloom\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-phase-pills\"\u003e\n\u003cspan id=\"v60-pill-1-twistpeche\" class=\"zab-fp-pill\"\u003ePour for 0:10s\u003c\/span\u003e \u003cspan class=\"zab-fp-pill\"\u003eTotal 50 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"v60-card-2-twistpeche\" class=\"zab-fp-phase\"\u003e\n\u003cdiv class=\"zab-fp-phase-head\"\u003e\n\u003cspan class=\"zab-fp-phase-time\"\u003e0:40\u003c\/span\u003e \u003cspan class=\"zab-fp-phase-name\"\u003ePhase 2\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-phase-pills\"\u003e\n\u003cspan id=\"v60-pill-2-twistpeche\" class=\"zab-fp-pill\"\u003ePour for 0:10s\u003c\/span\u003e \u003cspan class=\"zab-fp-pill\"\u003eTotal 110 g\u003c\/span\u003e \u003cspan class=\"zab-fp-pill dim\"\u003e+60 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"v60-card-3-twistpeche\" class=\"zab-fp-phase\"\u003e\n\u003cdiv class=\"zab-fp-phase-head\"\u003e\n\u003cspan class=\"zab-fp-phase-time\"\u003e1:10\u003c\/span\u003e \u003cspan class=\"zab-fp-phase-name\"\u003ePhase 3\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-phase-pills\"\u003e\n\u003cspan id=\"v60-pill-3-twistpeche\" class=\"zab-fp-pill\"\u003ePour for 0:10s\u003c\/span\u003e \u003cspan class=\"zab-fp-pill\"\u003eTotal 160 g\u003c\/span\u003e \u003cspan class=\"zab-fp-pill dim\"\u003e+50 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"v60-card-4-twistpeche\" class=\"zab-fp-phase\"\u003e\n\u003cdiv class=\"zab-fp-phase-head\"\u003e\n\u003cspan class=\"zab-fp-phase-time\"\u003e1:40\u003c\/span\u003e \u003cspan class=\"zab-fp-phase-name\"\u003ePhase 4\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-phase-pills\"\u003e\n\u003cspan id=\"v60-pill-4-twistpeche\" class=\"zab-fp-pill\"\u003ePour for 0:20s\u003c\/span\u003e \u003cspan class=\"zab-fp-pill\"\u003eTotal 225 g\u003c\/span\u003e \u003cspan class=\"zab-fp-pill dim\"\u003e+65 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"zab-fp-v60-end\"\u003e\n\u003cdiv class=\"zab-fp-v60-end-row\"\u003e\n\u003cspan class=\"zab-fp-phase-time\"\u003e2:30\u003c\/span\u003e \u003cspan class=\"zab-fp-phase-name\"\u003eTotal drawdown time\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"margin-top: 12px;\" class=\"zab-fp-tip\"\u003e\n\u003cstrong\u003eℹ️ Tip -\u003c\/strong\u003e If the total time is shorter, your grind is probably too coarse. If it\u0026#39;s longer, your grind is probably too fine.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/section\u003e\n\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c!-- V60 Timer - JS in SVG onload to survive Shopify script filtering --\u003e\n\u003csvg style=\"display:none\" onload=\"(function(){var ID='twistpeche';var END_AT=150;var PHASES=[{key:1,t:0,pour:10},{key:2,t:40,pour:10},{key:3,t:70,pour:10},{key:4,t:100,pour:20}];window.zabV60State=window.zabV60State||{};window.zabV60State[ID]={wakeLock:null,startTime:null,rafId:null,lastPhase:null,lastPour:null};function fmt(sec){sec=Math.max(0,Math.floor(sec));var m=Math.floor(sec\/60),s=sec%60;return m+':'+(s\u0026lt;10?'0':'')+s;}function getPhase(e){var c=PHASES[0].key;for(var i=0;i\u0026lt;PHASES.length;i++)if(e\u0026gt;=PHASES[i].t)c=PHASES[i].key;return c;}function getPour(e){for(var i=PHASES.length-1;i\u0026gt;=0;i--){var p=PHASES[i];if(e\u0026gt;=p.t\u0026amp;\u0026amp;e\u0026lt;(p.t+p.pour))return p.key;}return null;}function setCard(key){for(var k=1;k\u0026lt;=4;k++){var c=document.getElementById('v60-card-'+k+'-'+ID);if(!c)continue;if(k===key)c.classList.add('is-active');else c.classList.remove('is-active');}}function setPour(key){for(var k=1;k\u0026lt;=4;k++){var p=document.getElementById('v60-pill-'+k+'-'+ID);if(!p)continue;if(k===key)p.classList.add('is-pouring');else p.classList.remove('is-pouring');}}function clearAll(){for(var k=1;k\u0026lt;=4;k++){var c=document.getElementById('v60-card-'+k+'-'+ID);var p=document.getElementById('v60-pill-'+k+'-'+ID);if(c)c.classList.remove('is-active');if(p)p.classList.remove('is-pouring');}}function setButtons(r){var s=document.getElementById('v60StartBtn-'+ID);var x=document.getElementById('v60StopBtn-'+ID);if(s)s.disabled=r;if(x)x.disabled=!r;}function enableWakeLock(){var st=window.zabV60State[ID];var el=document.getElementById('v60WakeStatus-'+ID);if(!('wakeLock'in navigator)){if(el)el.textContent='⚠️ Your browser does not support the screen wake lock.';return Promise.resolve();}return navigator.wakeLock.request('screen').then(function(wl){st.wakeLock=wl;if(el)el.textContent='✅ Screen kept on during the recipe.';wl.addEventListener('release',function(){if(el)el.textContent='ℹ️ Screen wake lock released.';});}).catch(function(){if(el)el.textContent='⚠️ Could not activate screen wake lock.';st.wakeLock=null;});}function disableWakeLock(){var st=window.zabV60State[ID];if(st.wakeLock){st.wakeLock.release();st.wakeLock=null;}}function tick(){var st=window.zabV60State[ID];if(!st.startTime)return;var elapsed=(Date.now()-st.startTime)\/1000;var timerEl=document.getElementById('v60Timer-'+ID);if(timerEl)timerEl.textContent=fmt(elapsed);var phase=getPhase(elapsed);if(phase!==st.lastPhase){setCard(phase);st.lastPhase=phase;}var pour=getPour(elapsed);if(pour!==st.lastPour){setPour(pour);st.lastPour=pour;}if(elapsed\u0026gt;=END_AT){window.zabV60Stop(ID,true);return;}st.rafId=requestAnimationFrame(tick);}window.zabV60Start=function(id){if(id!==ID)return;var st=window.zabV60State[ID];var timerEl=document.getElementById('v60Timer-'+ID);setButtons(true);if(timerEl)timerEl.textContent='0:00';st.lastPhase=null;st.lastPour=null;enableWakeLock().then(function(){setCard(1);setPour(1);st.lastPhase=1;st.lastPour=1;st.startTime=Date.now();if(st.rafId)cancelAnimationFrame(st.rafId);st.rafId=requestAnimationFrame(tick);});};window.zabV60Stop=function(id,autoEnded){if(id!==ID)return;var st=window.zabV60State[ID];var statusEl=document.getElementById('v60WakeStatus-'+ID);var timerEl=document.getElementById('v60Timer-'+ID);if(st.rafId)cancelAnimationFrame(st.rafId);st.rafId=null;st.startTime=null;disableWakeLock();setButtons(false);clearAll();st.lastPhase=null;st.lastPour=null;if(autoEnded){if(statusEl)statusEl.textContent='✅ Recipe complete - screen released.';if(timerEl)timerEl.textContent=fmt(END_AT);}else{if(statusEl)statusEl.textContent='ℹ️ Recipe stopped - screen released.';}};var d=document.getElementById('v60Details-'+ID);if(d)d.addEventListener('toggle',function(){if(!d.open)window.zabV60Stop(ID,false);});document.addEventListener('visibilitychange',function(){var st=window.zabV60State[ID];if(document.visibilityState==='visible'\u0026amp;\u0026amp;st.startTime\u0026amp;\u0026amp;!st.wakeLock)enableWakeLock();});})();\"\u003e\u003c\/svg\u003e","brand":"ZAB","offers":[{"title":"200g","offer_id":52827164311861,"sku":"CAF-SIN-TWIS-PECH-VAN","price":20.95,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/2716\/1842\/files\/pot-creme-glacee-peche-vanille_d6c4fc17-94d0-4ede-bf3e-af1ea71211d2.jpg?v=1777489065","url":"https:\/\/zabcafe.com\/en\/products\/twist-vanille-peche","provider":"Zab Café","version":"1.0","type":"link"}