Minivan
Minivan has been a staple since the Melk Cafe beginnings! It’s the blend we most often use at our cafés in Montreal, QC! Perfect for espresso or filter, it’s the best balance betwe en classic and third wave coffee. Like a minivan: versatile and reliable, it'll never let you down. Try our best seller in 300g and 907g! 300g Ingredients: Organic coffee, certified organic by Ecocert /* Color variables based on Holistic Roasters branding */ :root { --primary: #555759; --secondary: #ef4e23; --accent: #ff7f2f; --accent-yellow: #ffb819; --light-green: #6cc04a; --medium-green: #009d4e; --dark-green: #006f42; --light-gray: #f5f5f5; --dark: #333333; --box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); --transition: all 0.3s ease; } /* Manual button styling */ .coffee-grind-manual-button { background-color: var(--secondary); color: white; border: none; border-radius: 8px; padding: 10px 20px; font-size: 16px; font-weight: bold; cursor: pointer; display: inline-block; margin: 20px 0; box-shadow: var(--box-shadow); transition: var(--transition); } .coffee-grind-manual-button:hover { background-color: var(--accent); transform: translateY(-2px); } /* Widget container */ #coffee-grind-widget-wrapper { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: none; justify-content: center; align-items: center; z-index: 9999; } .coffee-grind-widget { background-color: white; border-radius: 12px; box-shadow: var(--box-shadow); width: 90%; max-width: 500px; max-height: 70vh; overflow-y: auto; position: relative; } .widget-header { background-color: var(--secondary); color: white; padding: 15px 20px; border-radius: 12px 12px 0 0; position: sticky; top: 0; z-index: 1; display: flex; justify-content: space-between; align-items: center; } .widget-header h2 { margin: 0; font-size: 1.4rem; font-weight: 600; } .close-widget { background: none; border: none; color: white; font-size: 1.5rem; cursor: pointer; padding: 0 5px; } .widget-content { padding: 20px; } .search-container { margin-bottom: 20px; } .search-input { width: 100%; padding: 12px 15px; border: 2px solid var(--light-gray); border-radius: 6px; font-size: 1rem; transition: var(--transition); box-sizing: border-box; } .search-input:focus { outline: none; border-color: var(--medium-green); } .search-button { background-color: var(--medium-green); color: white; border: none; border-radius: 6px; padding: 12px 20px; font-size: 1rem; cursor: pointer; width: 100%; margin-top: 10px; transition: var(--transition); box-sizing: border-box; } .search-button:hover { background-color: var(--dark-green); } .results-container { margin-top: 25px; } .result-card { background-color: white; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); padding: 20px; margin-bottom: 15px; border-left: 4px solid var(--medium-green); } .result-card h3 { color: var(--secondary); margin-bottom: 10px; font-size: 1.2rem; } .result-details { display: flex; align-items: flex-start; margin-bottom: 10px; } .result-label { width: 130px; min-width: 130px; font-weight: bold; color: var(--primary); margin-right: 10px; } .result-value { flex: 1; } .result-value strong { color: var(--secondary); } .model-list { list-style: disc; margin-left: 20px; padding-left: 0; margin-top: 5px; } .model-list li { margin-bottom: 3px; } .grind-size-icon { width: 60px; height: 60px; border-radius: 50%; background-color: var(--light-gray); display: flex; justify-content: center; align-items: center; margin-right: 15px; } .grind-icon-container { margin-top: 15px; display: flex; flex-direction: column; align-items: center; background-color: #fafafa; padding: 15px; border-radius: 6px; margin-top: 20px; border: 1px solid #eee; } .grind-icon { width: 80px; height: 80px; background-color: var(--light-gray); border-radius: 50%; margin-bottom: 10px; display: flex; justify-content: center; align-items: center; position: relative; overflow: hidden; border: 1px solid #ddd; } .grind-icon-inner { position: absolute; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } .grind-icon-label { text-align: center; font-weight: bold; color: var(--primary); } .grind-particle-size { font-size: 0.9rem; color: var(--secondary); margin-top: 5px; text-align: center; } .grind-description { font-size: 0.9rem; color: var(--primary); margin-top: 5px; text-align: center; } .category-list { margin-top: 20px; } .category-item { background-color: white; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); padding: 15px; margin-bottom: 10px; border-left: 4px solid var(--accent); cursor: pointer; transition: var(--transition); } .category-item:hover { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); transform: translateY(-2px); } .category-item h4 { color: var(--primary); margin-bottom: 5px; font-size: 1.1rem; } .category-grind { font-size: 0.9rem; color: var(--primary); /* Adjusted color slightly for raw text */ margin-top: 5px; } .category-grind strong { color: var(--secondary); /* Highlight 'Grind:' */ } .category-grind span { /* Class for particle size */ display: block; font-size: 0.85em; color: var(--primary); margin-top: 3px; } .no-results { background-color: var(--light-gray); padding: 20px; border-radius: 8px; text-align: center; margin-bottom: 20px; color: var(--primary); } .loading { display: flex; justify-content: center; align-items: center; padding: 20px; } .loading-spinner { border: 4px solid var(--light-gray); border-top: 4px solid var(--secondary); border-radius: 50%; width: 30px; height: 30px; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Particle visualization styles */ .fine-particles { background-image: radial-gradient(circle, var(--secondary) 1px, transparent 1px); background-size: 5px 5px; } .medium-fine-particles { background-image: radial-gradient(circle, var(--secondary) 2px, transparent 2px); background-size: 8px 8px; } .medium-particles { background-image: radial-gradient(circle, var(--secondary) 3px, transparent 3px); background-size: 12px 12px; } .coarse-particles { background-image: radial-gradient(circle, var(--secondary) 4px, transparent 4px); background-size: 16px 16px; } /* Animation for widget appearance */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .fade-in { animation: fadeIn 0.3s ease-in-out; } /* Making the widget responsive */ @media (max-width: 768px) { .coffee-grind-widget { width: 95%; max-height: 80vh; } .widget-header h2 { font-size: 1.2rem; } .result-label { width: 100px; min-width: 100px; } } Find Your Perfect Coffee Grind Size Find Your Perfect Coffee Grind × Find My Grind Enter your coffee maker to find the ideal grind size. // Raw data from the provided text (simulating file read) // UPDATED: Corrected "gorund" to "ground" const rawCoffeeData = ` Category,Brand & Model,Ideal Grind Size,Particle Size (microns) Manual / Lever Espresso Machines,Flair 58,Fine espresso (ground coffee),200–400 Manual / Lever Espresso Machines,Flair Pro 2,Fine espresso (ground coffee),200–400 Manual / Lever Espresso Machines,Cafelat Robot,Fine espresso (ground coffee),200–400 Manual / Lever Espresso Machines,ROK Espresso GC,Fine espresso (ground coffee),200–400 Manual / Lever Espresso Machines,La Pavoni Europiccola,Fine espresso (ground coffee),200–400 Manual / Lever Espresso Machines,La Pavoni Professional,Fine espresso (ground coffee),200–400 Manual / Lever Espresso Machines,Elektra Micro Casa a Leva,Fine espresso (ground coffee),200–400 Manual / Lever Espresso Machines,Odyssey Argos,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,La Marzocco Linea Mini,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,La Marzocco GS3,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,ECM Synchronika,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,Profitec Pro 700,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,Rocket Espresso R58 Cinquantotto,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,Rocket Appartamento (TCA and Classic),Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,Lelit Bianca V3,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,Bezzera Duo DE,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,Quick Mill Vetrano 2B Evo,Fine espresso (ground coffee),200–400 Prosumer / High-End Espresso Machines,Slayer Single Group (Manual paddle version),Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Rancilio Silvia,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Gaggia Classic Evo Pro,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,De’Longhi Dedica EC685,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Breville Bambino Plus,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Breville Bambino,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Breville Duo-Temp Pro,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Lelit Anna,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Ascaso Dream PID,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Capresso Café Pro,Fine espresso (ground coffee),200–400 Popular Consumer Espresso Machines,Diletta Mio,Fine espresso (ground coffee),200–400 Pour-Over: Cone-Shaped Drippers,Hario V60,Pourover (ground coffee),400–600 Pour-Over: Cone-Shaped Drippers,Origami Dripper,Pourover (ground coffee),400–600 Pour-Over: Cone-Shaped Drippers,Fellow Stagg [X] and [XF],Pourover (ground coffee),400–600 Pour-Over: Cone-Shaped Drippers,OXO Brew Pour-Over Coffee Maker,Pourover (ground coffee),400–600 Pour-Over: Cone-Shaped Drippers,Tiamo V60-Style,Pourover (ground coffee),400–600 Pour-Over: Cone-Shaped Drippers,Chemex Classic 6-Cup,Filter / Drip (ground coffee),600–800 Pour-Over: Flat-Bottom Drippers,Kalita Wave 155 / 185,Filter / Drip (ground coffee),600–800 Pour-Over: Flat-Bottom Drippers,April Brewer,Filter / Drip (ground coffee),600–800 Pour-Over: Flat-Bottom Drippers,Orea V3,Filter / Drip (ground coffee),600–800 Pour-Over: Flat-Bottom Drippers,Cafec Flower Dripper,Filter / Drip (ground coffee),600–800 Pour-Over: Flat-Bottom Drippers,NotNeutral GINO,Filter / Drip (ground coffee),600–800 Pour-Over: Flat-Bottom Drippers,Torch Mountain Dripper,Filter / Drip (ground coffee),600–800 French Press,Bodum Chambord,French Press (ground coffee),1000–1200 French Press,Fellow Clara,French Press (ground coffee),1000–1200 French Press,Espro P3,French Press (ground coffee),1000–1200 French Press,Espro P7,French Press (ground coffee),1000–1200 French Press,Frieling Double Wall,French Press (ground coffee),1000–1200 French Press,Coffee Gator,French Press (ground coffee),1000–1200 French Press,Le Creuset Stoneware,French Press (ground coffee),1000–1200 French Press,Secura Stainless Steel,French Press (ground coffee),1000–1200 Cold Brew Makers,OXO Good Grips Cold Brew,French Press (ground coffee),1000–1200 Cold Brew Makers,Hario Mizudashi,French Press (ground coffee),1000–1200 Cold Brew Makers,Toddy Cold Brew System,French Press (ground coffee),1000–1200 Cold Brew Makers,Takeya Deluxe,French Press (ground coffee),1000–1200 Cold Brew Makers,County Line Kitchen,French Press (ground coffee),1000–1200 Cold Brew Makers,Brewista Cold Pro,French Press (ground coffee),1000–1200 Cold Brew Makers,Filtron Cold Brew,French Press (ground coffee),1000–1200 Drip Coffee Makers,Technivorm Moccamaster KBGV Select,Pourover (ground coffee),400–600 Drip Coffee Makers,OXO Brew 8-Cup,Filter / Drip (ground coffee),600–800 Drip Coffee Makers,Bonavita Connoisseur 8-Cup,Filter / Drip (ground coffee),600–800 Drip Coffee Makers,Breville Precision Brewer,Filter / Drip (ground coffee),600–800 Drip Coffee Makers,Ratio Six,Filter / Drip (ground coffee),600–800 Drip Coffee Makers,Wilfa Classic+,Filter / Drip (ground coffee),600–800 Drip Coffee Makers,Zojirushi EC-YGC120,Filter / Drip (ground coffee),600–800 Drip Coffee Makers,Behmor Connected,Filter / Drip (ground coffee),600–800 Stovetop / Moka Pot,Bialetti Moka Express,Pourover (ground coffee),400–600 Stovetop / Moka Pot,Bialetti Brikka,Pourover (ground coffee),400–600 Stovetop / Moka Pot,Bialetti Mini Express,Pourover (ground coffee),400–600 Stovetop / Moka Pot,Alessi 9090,Pourover (ground coffee),400–600 Stovetop / Moka Pot,GROSCHE Milano,Pourover (ground coffee),400–600 Stovetop / Moka Pot,Ilsa Turbo Express,Pourover (ground coffee),400–600 Stovetop / Moka Pot,Cuisinox Roma,Pourover (ground coffee),400–600 Stovetop / Moka Pot,Bellman CX-25P,Pourover (ground coffee),400–600 Aeropress, AeroPress Coffee Maker, Widest range – we recommend starting with Pourover (ground coffee), 300-900 `; // Function to parse and standardize the coffee data function parseCoffeeData(rawData) { const lines = rawData.trim().split('\n'); const headers = lines[0].split(',').map(h => h.trim()); const data = []; const categoryIndex = headers.indexOf('Category'); const modelIndex = headers.indexOf('Brand & Model'); const grindIndex = headers.indexOf('Ideal Grind Size'); const particleIndex = headers.indexOf('Particle Size (microns)'); if ([categoryIndex, modelIndex, grindIndex, particleIndex].includes(-1)) { console.error("Error parsing headers. Check CSV format.", headers); alert("Error: Could not read coffee data headers correctly."); return []; } for (let i = 1; i < lines.length; i++) { const values = lines[i].split(','); if (values.length > Math.max(categoryIndex, modelIndex, grindIndex, particleIndex)) { const rawIdealGrind = values[grindIndex].trim(); let standardizedGrind = 'Medium'; let particleSize = values[particleIndex].trim().replace('–', '-'); // Determine standardizedGrind (same logic) if (rawIdealGrind.toLowerCase().includes('fine espresso')) standardizedGrind = 'Fine (espresso)'; else if (rawIdealGrind.toLowerCase().includes('pourover')) standardizedGrind = 'Medium-fine'; else if (rawIdealGrind.toLowerCase().includes('filter / drip')) standardizedGrind = 'Medium'; else if (rawIdealGrind.toLowerCase().includes('french press')) standardizedGrind = 'Coarse'; else { try { const firstParticle = parseInt(particleSize.split('-')[0]); if (!isNaN(firstParticle)) { if (firstParticle 0) displayMatchResults(matches, searchQuery); else displayCategories(searchQuery); }, 300); } // Function to display match results function displayMatchResults(matches, query) { let html = `Found ${matches.length} result(s) for "${query}":`; const groupedMatches = matches.reduce((acc, match) => { const key = `${match.standardizedGrindSize}|${match.particleSize}`; if (!acc[key]) acc[key] = { standardizedGrindSize: match.standardizedGrindSize, particleSize: match.particleSize, models: [] }; acc[key].models.push(match); return acc; }, {}); for (const key in groupedMatches) { const group = groupedMatches[key]; const grindInfo = grindSizeInfo[group.standardizedGrindSize]; if (!grindInfo) { console.error(`Grind info not found for key: ${group.standardizedGrindSize}`); continue; } const displayGrindText = group.models[0]?.idealGrindSize || group.standardizedGrindSize; // Raw text for display html += ` ${group.models.length === 1 ? `${group.models[0].model}Category:${group.models[0].category}` : `Multiple Models Found:Models:${group.models.map(m => `${m.model} (${m.category})`).join('')}` } Ideal Grind Size:${displayGrindText} Particle Size:${group.particleSize} microns ${displayGrindText} ${grindInfo.particleSize} microns ${grindInfo.description} `; } document.getElementById('results-area').innerHTML = html; } // Function to display categories when no match is found function displayCategories(query = "") { let html = `We didn't find a specific match${query ? ` for "${query}"` : ''}. Select a category below for general recommendations:`; consolidatedCategories.forEach(category => { // Use standardizedGrind for icon lookup const grindInfo = grindSizeInfo[category.standardizedGrind]; if (!grindInfo) { console.error(`Grind info missing for category: ${category.name} (Standardized Grind: ${category.standardizedGrind})`); return; } // UPDATED: Use representativeRawGrind for the text display html += ` ${category.name} Grind: ${category.representativeRawGrind} (Approx. ${category.particleSize} microns) ${grindInfo.description} `; }); html += ``; document.getElementById('results-area').innerHTML = html; } // Function to expand a category function expandCategoryDisplay(categoryName) { const category = consolidatedCategories.find(cat => cat.name === categoryName); if (!category) { console.error("Category not found:", categoryName); displayAllCategories(); return; } // Use standardizedGrind for icon lookup const grindInfo = grindSizeInfo[category.standardizedGrind]; if (!grindInfo) { console.error(`Grind info missing for category: ${category.name}`); displayAllCategories(); return; } let html = ` ${category.name} Typical Grind: ${category.representativeRawGrind} Particle Size: ${category.particleSize} microns ${grindInfo.size} ${grindInfo.particleSize} microns ${grindInfo.description} Includes maker types like: ${category.subcategories.map(sub => `${sub}`).join('')} Note: This is a general guideline for the category. ← Back to All Categories`; document.getElementById('results-area').innerHTML = html; } // Function to display all categories (back button) function displayAllCategories() { displayCategories(); }
More you might like
Related
cool minivan! said nobody - Vinyl Car Decal Sticker for Mini
Related
Thule kiinnityssarja 3200 PSA Minivan Minivan Fixed Rail, va
Related
All Weather Premium Car Cover For 1990-1993 Chevrolet Lumina
Related