BREWMANCE
Notes de dégustation FRUITÉ + CHOCOLATÉ + CRÉMEUX Informations sur le café Le BREWMANCE (Joyeux Roger + Tariku) est notre mélange qui allie le réconfort du chocolat et des noix à l a touche funky de fruits bien mûrs. C'est un café du quotidien, mais avec juste assez de notes fruitées pour éveiller la curiosité. En gros Vous voulez commander deux sacs de 5 lbs ou plus? Visitez notre section EN GROS pour profiter d'un rabais de volume! Espresso — paramètres recommandés Café moulu 18,5 g Café dans la tasse 31 g Temps d'extraction 33 sec À noter — Recette optimisée pour un panier de 18 g. Ajuster légèrement la mouture pour atteindre 32 secondes d'extraction. Paramètres pour la Fellow Aiden Télécharge le profil Brewmance pour la machine Aiden de Fellow! V60 – Recette Ratio 1:15 15 g in – 225 g out Température de l'eau : 88 °C Démarrer Stop Timer 0:00 ℹ️ Appuie sur "Démarrer" pour garder l'écran allumé. 0:00 Phase 1 — Bloom Verser pendant 0:10s Total 35 g 0:30 Phase 2 Verser pendant 0:30s Total 170 g +135 g 1:30 Phase 3 Verser pendant 0:15s Total 225 g +55 g 3:00 Temps final écoulement complet ℹ️ Astuce — Si le temps total est plus court, la mouture est probablement trop grosse. S'il est plus long, la mouture est probablement trop fine. @keyframes v60PulsePhase { 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(200,169,126,.35); } 50% { transform: scale(1.06); box-shadow: 0 0 0 10px rgba(200,169,126,0); } 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(200,169,126,0); } } .v60-pulse { animation: v60PulsePhase 700ms ease-out 1; transform-origin: center; will-change: transform; } @keyframes v60BlinkPill { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: .22; transform: scale(1.03); } } .v60-pill-pour-active { background: #ffe7b7 !important; border: 2px solid #d2a44a !important; color: #3b2a12 !important; font-weight: 900 !important; letter-spacing: .02em; animation: v60BlinkPill 2500ms ease-in-out infinite; box-shadow: 0 0 0 2px rgba(210,164,74,.18) inset, 0 10px 22px rgba(0,0,0,.12), 0 0 0 6px rgba(210,164,74,.10); } @media (prefers-reduced-motion: reduce) { .v60-pill-pour-active { animation: none; } .v60-pulse { animation: none; } } (function() { var SUFFIX = '-brewmance'; var END_AT = 180; var phases = [ { key: 1, t: 0, pourLen: 10 }, { key: 2, t: 30, pourLen: 30 }, { key: 3, t: 90, pourLen: 15 } ]; var latte = { cardBg: '#f6f1ea', cardBorder: '#c8a97e', pillBg: '#eadfce' }; var details = document.getElementById('v60Details' + SUFFIX); var startBtn = document.getElementById('v60StartBtn' + SUFFIX); var stopBtn = document.getElementById('v60StopBtn' + SUFFIX); var timerEl = document.getElementById('v60Timer' + SUFFIX); var statusEl = document.getElementById('v60WakeStatus' + SUFFIX); var pills = { 1: document.getElementById('v60-pill-1' + SUFFIX), 2: document.getElementById('v60-pill-2' + SUFFIX), 3: document.getElementById('v60-pill-3' + SUFFIX) }; var cards = { 1: document.getElementById('v60-card-1' + SUFFIX), 2: document.getElementById('v60-card-2' + SUFFIX), 3: document.getElementById('v60-card-3' + SUFFIX) }; function setCardActive(key) { Object.keys(cards).forEach(function(k) { var c = cards[k]; if (!c) return; if (parseInt(k) === key) { c.style.borderColor = latte.cardBorder; c.style.background = latte.cardBg; c.style.boxShadow = '0 0 0 2px rgba(200,169,126,.25) inset, 0 8px 22px rgba(200,169,126,.28)'; } else { c.style.borderColor = 'rgba(0,0,0,.18)'; c.style.background = 'transparent'; c.style.boxShadow = 'none'; } }); } function setPillPhaseActive(key, doPulse) { Object.keys(pills).forEach(function(k) { var p = pills[k]; if (!p) return; p.style.background = 'rgba(0,0,0,.05)'; p.style.borderColor = 'rgba(0,0,0,.12)'; p.style.boxShadow = 'none'; p.classList.remove('v60-pulse'); }); var pill = pills[key]; if (pill) { pill.style.background = latte.pillBg; pill.style.borderColor = latte.cardBorder; pill.style.boxShadow = '0 0 0 2px rgba(200,169,126,.25) inset'; if (doPulse) { pill.classList.remove('v60-pulse'); void pill.offsetWidth; pill.classList.add('v60-pulse'); } } } function resetPourPills() { Object.values(pills).forEach(function(p) { if (!p) return; p.classList.remove('v60-pill-pour-active'); }); } function setPourPillActive(key) { resetPourPills(); if (!key) return; var pill = pills[key]; if (pill) pill.classList.add('v60-pill-pour-active'); } function clearAll() { Object.values(cards).forEach(function(c) { if (!c) return; c.style.borderColor = 'rgba(0,0,0,.18)'; c.style.background = 'transparent'; c.style.boxShadow = 'none'; }); Object.values(pills).forEach(function(p) { if (!p) return; p.style.background = 'rgba(0,0,0,.05)'; p.style.borderColor = 'rgba(0,0,0,.12)'; p.style.boxShadow = 'none'; p.classList.remove('v60-pulse'); p.classList.remove('v60-pill-pour-active'); }); } var wakeLock = null; var startTime = null; var rafId = null; var lastPhaseKey = null; var lastPourKey = null; function fmt(sec) { sec = Math.max(0, Math.floor(sec)); var m = Math.floor(sec / 60); var s = sec % 60; return m + ':' + (s < 10 ? '0' : '') + s; } function getCurrentPhaseKey(elapsed) { var current = phases[0].key; for (var i = 0; i < phases.length; i++) if (elapsed >= phases[i].t) current = phases[i].key; return current; } function getPourKey(elapsed) { for (var i = phases.length - 1; i >= 0; i--) { var p = phases[i]; if (elapsed >= p.t && elapsed < (p.t + p.pourLen)) return p.key; } return null; } function enableWakeLock() { if (!('wakeLock' in navigator)) { statusEl.textContent = '⚠️ Ton navigateur ne supporte pas le mode écran allumé.'; return Promise.resolve(); } return navigator.wakeLock.request('screen').then(function(wl) { wakeLock = wl; statusEl.textContent = '✅ Écran maintenu allumé pendant la recette.'; wakeLock.addEventListener('release', function() { statusEl.textContent = 'ℹ️ Mode écran allumé relâché.'; }); }).catch(function() { statusEl.textContent = '⚠️ Impossible d\'activer le mode écran allumé.'; wakeLock = null; }); } function disableWakeLock() { if (wakeLock) { wakeLock.release(); wakeLock = null; } } function setButtons(running) { startBtn.disabled = running; stopBtn.disabled = !running; stopBtn.style.opacity = running ? '1' : '.5'; } function tick() { var elapsed = (Date.now() - startTime) / 1000; timerEl.textContent = fmt(elapsed); var phaseKey = getCurrentPhaseKey(elapsed); if (phaseKey !== lastPhaseKey) { setCardActive(phaseKey); setPillPhaseActive(phaseKey, lastPhaseKey !== null); lastPhaseKey = phaseKey; } var pourKey = getPourKey(elapsed); if (pourKey !== lastPourKey) { setPourPillActive(pourKey); lastPourKey = pourKey; } if (elapsed >= END_AT) { stopRecipe(true); return; } rafId = requestAnimationFrame(tick); } function startRecipe() { setButtons(true); timerEl.textContent = '0:00'; lastPhaseKey = null; lastPourKey = null; enableWakeLock().then(function() { setCardActive(1); setPillPhaseActive(1, false); setPourPillActive(1); lastPhaseKey = 1; lastPourKey = 1; startTime = Date.now(); if (rafId) cancelAnimationFrame(rafId); rafId = requestAnimationFrame(tick); }); } function stopRecipe(autoEnded) { if (rafId) cancelAnimationFrame(rafId); rafId = null; startTime = null; disableWakeLock(); setButtons(false); clearAll(); lastPhaseKey = null; lastPourKey = null; if (autoEnded) { statusEl.textContent = '✅ Recette terminée — écran libéré.'; timerEl.textContent = fmt(END_AT); } else { statusEl.textContent = 'ℹ️ Recette arrêtée — écran libéré.'; } } startBtn.addEventListener('click', startRecipe); stopBtn.addEventListener('click', function() { stopRecipe(false); }); details.addEventListener('toggle', function() { if (!details.open) stopRecipe(false); }); document.addEventListener('visibilitychange', function() { if (document.visibilityState === 'visible' && startTime && !wakeLock) enableWakeLock(); }); })();
More you might like
Related
Brewmance
Related
ZAB - Brewmance
Related
SUPERCAFE (BREWMANCE)
Related