{"id":49366,"date":"2026-09-05T21:59:47","date_gmt":"2026-09-06T01:59:47","guid":{"rendered":"https:\/\/www.thebeertimes.com\/?page_id=49366"},"modified":"2026-09-07T19:27:40","modified_gmt":"2026-09-07T23:27:40","slug":"beer-sommelier-digital","status":"publish","type":"page","link":"https:\/\/www.thebeertimes.com\/fr\/beer-sommelier-digital\/","title":{"rendered":"Beer Sommelier Digital"},"content":{"rendered":"<!-- El Sommelier \u2014 The Beer Times. Bloc autonome, \u00e0 coller tel quel dans un bloc \"HTML personnalis\u00e9\" (Gutenberg) ou dans un snippet HFCM. Sans d\u00e9pendances externes, sans appels r\u00e9seau. -->\r\n<p>Beer Sommelier est l&rsquo;outil d&rsquo;accords d\u00e9velopp\u00e9 par The Beer Times\u2122. Il recommande des combinaisons entre plats et bi\u00e8res bas\u00e9es sur les styles de bi\u00e8re actuellement reconnus et sur les trois principes classiques de l&rsquo;accord : affinit\u00e9, contraste et compl\u00e9ment.<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-49319 size-full aligncenter\" title=\"Beer Sommelier\" src=\"https:\/\/www.thebeertimes.com\/wp-content\/uploads\/2026\/09\/Beer-Sommelier.jpg\" alt=\"Beer Sommelier\" width=\"600\" height=\"315\" srcset=\"https:\/\/www.thebeertimes.com\/wp-content\/uploads\/2026\/09\/Beer-Sommelier.jpg 600w, https:\/\/www.thebeertimes.com\/wp-content\/uploads\/2026\/09\/Beer-Sommelier-300x158.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\r\n<p>Choisissez si vous voulez partir d&rsquo;un plat ou d&rsquo;une bi\u00e8re, s\u00e9lectionnez une option dans la liste (ou tapez pour la filtrer), et le syst\u00e8me affiche les combinaisons qui s&rsquo;accordent le mieux, avec la justification technique derri\u00e8re chaque choix.<\/p>\r\n<h2>Qu&rsquo;est-ce qu&rsquo;un sommelier en bi\u00e8re ?<\/h2>\r\n<p>En quelques mots, un sommelier en bi\u00e8re est un sp\u00e9cialiste de la bi\u00e8re qui conna\u00eet ses styles, ar\u00f4mes, saveurs et caract\u00e9ristiques pour recommander des accords adapt\u00e9s avec diff\u00e9rents aliments.<\/p>\r\n<div id=\"tbt-sommelier\" class=\"tbt-sommelier\">\r\n<div class=\"tbt-som-tabs\" role=\"tablist\"><button class=\"tbt-som-tab is-active\" role=\"tab\" type=\"button\" data-mode=\"comida\" aria-selected=\"true\">J&rsquo;ai un plat<\/button> <button class=\"tbt-som-tab\" role=\"tab\" type=\"button\" data-mode=\"cerveza\" aria-selected=\"false\">J&rsquo;ai une bi\u00e8re<\/button><\/div>\r\n<div class=\"tbt-som-search\"><input class=\"tbt-som-search-input\" type=\"text\" placeholder=\"Filtrer les cat\u00e9gories ou styles\u2026\" aria-label=\"Filtrer les options\" \/><\/div>\r\n<div class=\"tbt-som-chips\" role=\"group\" aria-label=\"S\u00e9lectionnez une option\">\u00a0<\/div>\r\n<div class=\"tbt-som-results\" aria-live=\"polite\">\u00a0<\/div>\r\n<\/div>\r\n<p><style>\r\n\r\n\r\n\r\n  .tbt-sommelier{\r\n\r\n\r\n\r\n    --tbt-ink:#111111;\r\n\r\n\r\n\r\n    --tbt-body:#494949;\r\n\r\n\r\n\r\n    --tbt-muted:#898989;\r\n\r\n\r\n\r\n    --tbt-line:#dddddd;\r\n\r\n\r\n\r\n    max-width:720px;\r\n\r\n\r\n\r\n    margin:2rem auto;\r\n\r\n\r\n\r\n    font-family:Roboto,Arial,Helvetica,sans-serif;\r\n\r\n\r\n\r\n    color:var(--tbt-body);\r\n\r\n\r\n\r\n    line-height:1.45;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier *{box-sizing:border-box;}\r\n\r\n\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-intro{\r\n\r\n\r\n\r\n    font-size:1.13rem;line-height:1.6;color:var(--tbt-body);margin:0 0 1.2rem;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tabs{\r\n\r\n\r\n\r\n    display:flex;gap:1.4rem;border-bottom:1px solid var(--tbt-line);margin-bottom:1rem;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tab{\r\n\r\n\r\n\r\n    background:none;border:none;padding:.2rem 0 .7rem;cursor:pointer;\r\n\r\n\r\n\r\n    font-family:inherit;font-size:.95rem;color:var(--tbt-muted);\r\n\r\n\r\n\r\n    border-bottom:2px solid transparent;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tab.is-active{color:var(--tbt-ink);font-weight:700;border-bottom-color:var(--tbt-ink);}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tab:focus-visible{outline:2px solid var(--tbt-ink);outline-offset:2px;}\r\n\r\n\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-search{margin-bottom:.9rem;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-search-input{\r\n\r\n\r\n\r\n    width:100%;padding:.65rem .8rem;border:1px solid var(--tbt-ink);border-radius:3px;\r\n\r\n\r\n\r\n    font-family:inherit;font-size:1.09rem;color:var(--tbt-ink);background:#fff;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-search-input:focus-visible{outline:2px solid var(--tbt-ink);outline-offset:1px;}\r\n\r\n\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-chips{\r\n\r\n\r\n\r\n    display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-chip{\r\n\r\n\r\n\r\n    font-family:inherit;font-size:.91rem;letter-spacing:.03em;text-transform:uppercase;font-weight:600;\r\n\r\n\r\n\r\n    padding:.45rem .7rem;border-radius:3px;border:1px solid var(--tbt-ink);background:#fff;color:var(--tbt-ink);\r\n\r\n\r\n\r\n    text-align:left;\r\n\r\n\r\n\r\n    cursor:pointer;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-chip.is-selected{background:var(--tbt-ink);border-color:var(--tbt-ink);color:#fff;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-chip:focus-visible{outline:2px solid var(--tbt-ink);outline-offset:2px;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-chip.is-hidden{display:none;}\r\n\r\n\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-results{display:flex;flex-direction:column;gap:.9rem;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-results-heading{\r\n\r\n\r\n\r\n    font-size:1.14rem;font-weight:700;color:var(--tbt-ink);margin:0 0 .2rem;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-card{\r\n\r\n\r\n\r\n    border:1px solid var(--tbt-line);border-radius:5px;padding:.9rem 1rem;\r\n\r\n\r\n\r\n    display:flex;flex-direction:column;gap:.55rem;background:#fff;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:.6rem;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-card-head h3{margin:0;font-size:1.17rem;color:var(--tbt-ink);font-weight:700;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-badge{\r\n\r\n\r\n\r\n    font-size:.81rem;letter-spacing:.03em;text-transform:uppercase;font-weight:700;\r\n\r\n\r\n\r\n    padding:.22rem .45rem;border-radius:3px;white-space:nowrap;flex:none;\r\n\r\n\r\n\r\n    background:var(--tbt-ink);color:#fff;text-decoration:none;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-attrs{display:flex;gap:1.1rem;font-variant-numeric:tabular-nums;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-attrs div{display:flex;flex-direction:column;gap:.1rem;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-attrs .k{font-size:.79rem;color:var(--tbt-muted);text-transform:uppercase;letter-spacing:.06em;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-attrs .v{font-size:.99rem;color:var(--tbt-ink);font-weight:500;}\r\n\r\n\r\n\r\n  .tbt-sommelier{\r\n\r\n\r\n\r\n    --tbt-cat-afinidad:#d97706;\r\n\r\n\r\n\r\n    --tbt-cat-contraste:#3b82f6;\r\n\r\n\r\n\r\n    --tbt-cat-complemento:#7c2d92;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tag{\r\n\r\n\r\n\r\n    display:inline-block;font-size:.72rem;letter-spacing:.05em;text-transform:uppercase;font-weight:700;\r\n\r\n\r\n\r\n    border:1px solid transparent;border-radius:3px;\r\n\r\n\r\n\r\n    padding:.12rem .4rem;margin-bottom:.35rem;text-align:left;width:auto;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tag--afinidad{background:#fef3c7;color:#92400e;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tag--contraste{background:#dbeafe;color:#1e40af;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-tag--complemento{background:#f3e8f7;color:#5b1f6e;}\r\n\r\n\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-card--afinidad{border-left:4px solid var(--tbt-cat-afinidad);}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-card--contraste{border-left:4px solid var(--tbt-cat-contraste);}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-card--complemento{border-left:4px solid var(--tbt-cat-complemento);}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-why{font-size:1.04rem;color:var(--tbt-body);margin:0;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-foot{\r\n\r\n\r\n\r\n    display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--tbt-line);\r\n\r\n\r\n\r\n    padding-top:.5rem;margin-top:.1rem;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-foot span{font-size:.91rem;color:var(--tbt-muted);}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-fb{display:flex;gap:.4rem;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-fb button{\r\n\r\n\r\n\r\n    font-family:inherit;font-size:.7rem;border:1px solid transparent;background:none;color:var(--tbt-ink);\r\n\r\n\r\n\r\n    padding:.2rem .55rem;border-radius:3px;cursor:pointer;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-fb button.tbt-som-fb-yes{background:#dcfce7;color:#166534;border-color:#bbf7d0;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-fb button.tbt-som-fb-no{background:#fee2e2;color:#991b1b;border-color:#fecaca;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-fb button.tbt-som-fb-yes.is-voted{background:#16a34a;color:#fff;border-color:#16a34a;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-fb button.tbt-som-fb-no.is-voted{background:#dc2626;color:#fff;border-color:#dc2626;}\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-fb button:disabled{opacity:.5;cursor:default;}\r\n\r\n\r\n\r\n\r\n\r\n  .tbt-sommelier .tbt-som-empty{font-size:1.04rem;color:var(--tbt-muted);}\r\n\r\n\r\n\r\n<\/style> <script>\r\n\r\n\r\n\r\n(function(){\r\n\r\n\r\n\r\n  \"use strict\";\r\n\r\n\r\n\r\n\r\n\r\n  var root = document.getElementById(\"tbt-sommelier\");\r\n\r\n\r\n\r\n  if (!root) return;\r\n\r\n\r\n\r\n\r\n\r\n  var PER_CATEGORY = 3;\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  \/\/ DONN\u00c9ES \u2014 plats\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  var FOODS = [\r\n\r\n\r\n\r\n    { id:\"asado\", label:\"Viandes grill\u00e9es et barbecue\" },\r\n\r\n\r\n\r\n    { id:\"bbq-ahumado\", label:\"Barbecue et viandes fum\u00e9es\" },\r\n\r\n\r\n\r\n    { id:\"brasa\", label:\"Viandes grill\u00e9es sur braise\" },\r\n\r\n\r\n\r\n    { id:\"carnes-rojas\", label:\"Viandes rouges\" },\r\n\r\n\r\n\r\n    { id:\"cerdo\", label:\"Porc\" },\r\n\r\n\r\n\r\n    { id:\"pollo\", label:\"Poulet et volaille\" },\r\n\r\n\r\n\r\n    { id:\"pato\", label:\"Canard\" },\r\n\r\n\r\n\r\n    { id:\"caza\", label:\"Gibier (lapin, sanglier, cerf)\" },\r\n\r\n\r\n\r\n    { id:\"marinados-especiados\", label:\"Viandes marin\u00e9es et \u00e9pic\u00e9es\" },\r\n\r\n\r\n\r\n    { id:\"embutidos\", label:\"Charcuterie et viandes s\u00e9ch\u00e9es\" },\r\n\r\n\r\n\r\n    { id:\"pescados-blancos\", label:\"Poissons blancs\" },\r\n\r\n\r\n\r\n    { id:\"pescados-azules\", label:\"Poissons gras\" },\r\n\r\n\r\n\r\n    { id:\"mariscos\", label:\"Fruits de mer\" },\r\n\r\n\r\n\r\n    { id:\"pescados-ahumados\", label:\"Poissons fum\u00e9s\" },\r\n\r\n\r\n\r\n    { id:\"sushi\", label:\"Sushi et poissons crus\" },\r\n\r\n\r\n\r\n    { id:\"ceviche\", label:\"Ceviche\" },\r\n\r\n\r\n\r\n    { id:\"pastas\", label:\"P\u00e2tes (sauce rouge, blanche ou mixte)\" },\r\n\r\n\r\n\r\n    { id:\"pizza\", label:\"Pizza\" },\r\n\r\n\r\n\r\n    { id:\"panaderia\", label:\"Boulangerie et pain artisanal\" },\r\n\r\n\r\n\r\n    { id:\"paella-arroces-secos\", label:\"Paella et riz secs\" },\r\n\r\n\r\n\r\n    { id:\"arroces-caldosos\", label:\"Riz en sauce\" },\r\n\r\n\r\n\r\n    { id:\"legumbres\", label:\"L\u00e9gumineuses (lentilles, pois chiches, haricots)\" },\r\n\r\n\r\n\r\n    { id:\"guisos-legumbres\", label:\"Rago\u00fbts de l\u00e9gumineuses\" },\r\n\r\n\r\n\r\n    { id:\"hamburguesas\", label:\"Hamburgers\" },\r\n\r\n\r\n\r\n    { id:\"frituras\", label:\"Fritures et fast-food\" },\r\n\r\n\r\n\r\n    { id:\"perros-calientes\", label:\"Hot-dogs\" },\r\n\r\n\r\n\r\n    { id:\"snacks-salados\", label:\"Popcorn et snacks sal\u00e9s\" },\r\n\r\n\r\n\r\n    { id:\"ensaladas\", label:\"Salades et l\u00e9gumes\" },\r\n\r\n\r\n\r\n    { id:\"vegetariano\", label:\"Plats v\u00e9g\u00e9tariens\" },\r\n\r\n\r\n\r\n    { id:\"verduras-asadas\", label:\"L\u00e9gumes r\u00f4tis\" },\r\n\r\n\r\n\r\n    { id:\"sopas-guisos\", label:\"Soupes et rago\u00fbts l\u00e9gers\" },\r\n\r\n\r\n\r\n    { id:\"estofados-carne\", label:\"Rago\u00fbts de viande (b\u0153uf, agneau)\" },\r\n\r\n\r\n\r\n    { id:\"cocidos-pucheros\", label:\"Pot-au-feu et rago\u00fbts copieux\" },\r\n\r\n\r\n\r\n    { id:\"fabadas-potajes\", label:\"Fabada et pot\u00e9es de l\u00e9gumineuses\" },\r\n\r\n\r\n\r\n    { id:\"chili-con-carne\", label:\"Chili con carne\" },\r\n\r\n\r\n\r\n    { id:\"gazpacho-salmorejo\", label:\"Gazpacho et salmorejo\" },\r\n\r\n\r\n\r\n    { id:\"ensaladilla-rusa\", label:\"Salade russe et salades de p\u00e2tes\" },\r\n\r\n\r\n\r\n    { id:\"empanadas-pasteles-salados\", label:\"Empanadas et p\u00e2t\u00e9s sal\u00e9s\" },\r\n\r\n\r\n\r\n    { id:\"pates-terrinas\", label:\"P\u00e2t\u00e9s et terrines\" },\r\n\r\n\r\n\r\n    { id:\"huevos-revueltos-fritos\", label:\"\u0152ufs brouill\u00e9s \/ frits\" },\r\n\r\n\r\n\r\n    { id:\"tortillas\", label:\"Omelettes (espagnole, fran\u00e7aise)\" },\r\n\r\n\r\n\r\n    { id:\"huevos-poche-benedictino\", label:\"\u0152ufs poch\u00e9s \/ B\u00e9n\u00e9dicte\" },\r\n\r\n\r\n\r\n    { id:\"frittatas-quiches\", label:\"Frittatas et quiches\" },\r\n\r\n\r\n\r\n    { id:\"tapas-frias\", label:\"Tapas froides\" },\r\n\r\n\r\n\r\n    { id:\"tapas-calientes\", label:\"Tapas chaudes\" },\r\n\r\n\r\n\r\n    { id:\"aperitivos-variados\", label:\"Ap\u00e9ritifs vari\u00e9s\" },\r\n\r\n\r\n\r\n    { id:\"picante\", label:\"Plats \u00e9pic\u00e9s\" },\r\n\r\n\r\n\r\n    { id:\"curry\", label:\"Curry\" },\r\n\r\n\r\n\r\n    { id:\"asiatica\", label:\"Cuisine asiatique saut\u00e9e\" },\r\n\r\n\r\n\r\n    { id:\"cocina-hindu\", label:\"Cuisine indienne\" },\r\n\r\n\r\n\r\n    { id:\"quesos-frescos\", label:\"Fromages frais\" },\r\n\r\n\r\n\r\n    { id:\"quesos-curados\", label:\"Fromages affin\u00e9s\" },\r\n\r\n\r\n\r\n    { id:\"quesos-azules\", label:\"Fromages bleus\" },\r\n\r\n\r\n\r\n    { id:\"frutos-secos-aceitunas\", label:\"Fruits secs et olives\" },\r\n\r\n\r\n\r\n    { id:\"salsas\", label:\"Sauces (mayonnaise, a\u00efoli, chimichurri)\" },\r\n\r\n\r\n\r\n    { id:\"encurtidos\", label:\"Pickles (cornichons, oignons, c\u00e2pres)\" },\r\n\r\n\r\n\r\n    { id:\"mermeladas-conservas\", label:\"Confitures et conserves\" },\r\n\r\n\r\n\r\n    { id:\"postres-chocolate\", label:\"Desserts au chocolat\" },\r\n\r\n\r\n\r\n    { id:\"postres-frutales\", label:\"Desserts aux fruits\" },\r\n\r\n\r\n\r\n    { id:\"postres-cremosos\", label:\"Desserts cr\u00e9meux et au caramel\" },\r\n\r\n\r\n\r\n    { id:\"postres-especiados\", label:\"Desserts \u00e9pic\u00e9s\" },\r\n\r\n\r\n\r\n    { id:\"helados-sorbetes\", label:\"Glaces et sorbets\" },\r\n\r\n\r\n\r\n    { id:\"donuts-rosquillas\", label:\"Beignets et doughnuts\" },\r\n\r\n\r\n\r\n    { id:\"galletas\", label:\"Biscuits (beurre, avoine, p\u00e9pites)\" },\r\n\r\n\r\n\r\n    { id:\"pasteles-esponjosos\", label:\"Muffins et g\u00e2teaux moelleux\" }\r\n\r\n\r\n\r\n  ];\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  \/\/ DONN\u00c9ES \u2014 les 93 styles BJCP 2021 avec statistiques ABV\/IBU\/couleur\r\n\r\n\r\n\r\n  \/\/ (les 17 restants des 110 r\u00e9f\u00e9rentiels sont des mod\u00e8les de sp\u00e9cialit\u00e9\r\n\r\n\r\n\r\n  \/\/ sans fourchette num\u00e9rique fixe, laiss\u00e9s de c\u00f4t\u00e9 d\u00e9lib\u00e9r\u00e9ment).\r\n\r\n\r\n\r\n  \/\/ bitterness\/roast\/strength\/sour\/wheat\/belgian\/smoked\/fruit sont\r\n\r\n\r\n\r\n  \/\/ des attributs calcul\u00e9s \u00e0 partir de l'IBU, de la couleur et de la\r\n\r\n\r\n\r\n  \/\/ cat\u00e9gorie officielle, utilis\u00e9s par le moteur de r\u00e8gles ci-dessous.\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  var STYLES = [\r\n\r\n\r\n\r\n    { id:\"american-light-lager\", label:\"American Light Lager\", abv:\"2,8\u20134,2%\", ibu:\"8\u201312\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-lager\", label:\"American Lager\", abv:\"4,2\u20135,3%\", ibu:\"8\u201318\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"cream-ale\", label:\"Cream Ale\", abv:\"4,2\u20135,6%\", ibu:\"8\u201320\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-wheat-beer\", label:\"American Wheat Beer\", abv:\"4\u20135,5%\", ibu:\"15\u201330\", bitterness:\"med\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"international-pale-lager\", label:\"International Pale Lager\", abv:\"4,5\u20136%\", ibu:\"18\u201325\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"international-amber-lager\", label:\"International Amber Lager\", abv:\"4,5\u20136%\", ibu:\"8\u201325\", bitterness:\"low\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"international-dark-lager\", label:\"International Dark Lager\", abv:\"4,2\u20136%\", ibu:\"8\u201320\", bitterness:\"low\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"czech-pale-lager\", label:\"Czech Pale Lager\", abv:\"3\u20134,1%\", ibu:\"20\u201335\", bitterness:\"med\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"czech-premium-pale-lager\", label:\"Czech Premium Pale Lager\", abv:\"4,2\u20135,8%\", ibu:\"30\u201345\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"czech-amber-lager\", label:\"Czech Amber Lager\", abv:\"4,4\u20135,8%\", ibu:\"20\u201335\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"czech-dark-lager\", label:\"Czech Dark Lager\", abv:\"4,4\u20135,8%\", ibu:\"18\u201334\", bitterness:\"med\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"munich-helles\", label:\"Munich Helles\", abv:\"4,7\u20135,4%\", ibu:\"16\u201322\", bitterness:\"low\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"festbier\", label:\"Festbier\", abv:\"5,8\u20136,3%\", ibu:\"18\u201325\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"helles-bock\", label:\"Helles Bock\", abv:\"6,3\u20137,4%\", ibu:\"23\u201335\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"german-leichtbier\", label:\"German Leichtbier\", abv:\"2,4\u20133,6%\", ibu:\"15\u201328\", bitterness:\"med\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"kolsch\", label:\"K\u00f6lsch\", abv:\"4,4\u20135,2%\", ibu:\"18\u201330\", bitterness:\"med\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"german-helles-exportbier\", label:\"German Helles Exportbier\", abv:\"5\u20136%\", ibu:\"20\u201330\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"german-pils\", label:\"German Pils\", abv:\"4,4\u20135,2%\", ibu:\"22\u201340\", bitterness:\"med\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"marzen\", label:\"M\u00e4rzen\", abv:\"5,6\u20136,3%\", ibu:\"18\u201324\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"rauchbier\", label:\"Rauchbier\", abv:\"4,8\u20136%\", ibu:\"20\u201330\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:true, fruit:false },\r\n\r\n\r\n\r\n    { id:\"dunkles-bock\", label:\"Dunkles Bock\", abv:\"6,3\u20137,2%\", ibu:\"20\u201327\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"vienna-lager\", label:\"Vienna Lager\", abv:\"4,7\u20135,5%\", ibu:\"18\u201330\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"altbier\", label:\"Altbier\", abv:\"4,3\u20135,5%\", ibu:\"25\u201350\", bitterness:\"med\", roast:\"amber\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"munich-dunkel\", label:\"Munich Dunkel\", abv:\"4,5\u20135,6%\", ibu:\"18\u201328\", bitterness:\"med\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"schwarzbier\", label:\"Schwarzbier\", abv:\"4,4\u20135,4%\", ibu:\"20\u201335\", bitterness:\"med\", roast:\"dark\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"doppelbock\", label:\"Doppelbock\", abv:\"7\u201310%\", ibu:\"16\u201326\", bitterness:\"med\", roast:\"amber\", strength:\"strong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"eisbock\", label:\"Eisbock\", abv:\"9\u201314%\", ibu:\"25\u201335\", bitterness:\"med\", roast:\"dark\", strength:\"veryStrong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"baltic-porter\", label:\"Baltic Porter\", abv:\"6,5\u20139,5%\", ibu:\"20\u201340\", bitterness:\"med\", roast:\"dark\", strength:\"strong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"weissbier\", label:\"Weissbier\", abv:\"4,3\u20135,6%\", ibu:\"8\u201315\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:false, wheat:true, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"dunkles-weissbier\", label:\"Dunkles Weissbier\", abv:\"4,3\u20135,6%\", ibu:\"10\u201318\", bitterness:\"low\", roast:\"amber\", strength:\"session\", sour:false, wheat:true, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"weizenbock\", label:\"Weizenbock\", abv:\"6,5\u20139%\", ibu:\"15\u201330\", bitterness:\"med\", roast:\"amber\", strength:\"strong\", sour:false, wheat:true, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"ordinary-bitter\", label:\"Ordinary Bitter\", abv:\"3,2\u20133,8%\", ibu:\"25\u201335\", bitterness:\"med\", roast:\"amber\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"best-bitter\", label:\"Best Bitter\", abv:\"3,8\u20134,6%\", ibu:\"25\u201340\", bitterness:\"med\", roast:\"amber\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"strong-bitter\", label:\"Strong Bitter\", abv:\"4,6\u20136,2%\", ibu:\"30\u201350\", bitterness:\"high\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"british-golden-ale\", label:\"British Golden Ale\", abv:\"3,8\u20135%\", ibu:\"20\u201345\", bitterness:\"med\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"australian-sparkling-ale\", label:\"Australian Sparkling Ale\", abv:\"4,5\u20136%\", ibu:\"20\u201335\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"english-ipa\", label:\"English IPA\", abv:\"5\u20137,5%\", ibu:\"40\u201360\", bitterness:\"high\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"dark-mild\", label:\"Dark Mild\", abv:\"3\u20133,8%\", ibu:\"10\u201325\", bitterness:\"low\", roast:\"amber\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"british-brown-ale\", label:\"British Brown Ale\", abv:\"4,2\u20135,9%\", ibu:\"20\u201330\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"english-porter\", label:\"English Porter\", abv:\"4\u20135,4%\", ibu:\"18\u201335\", bitterness:\"med\", roast:\"dark\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"scottish-light\", label:\"Scottish Light\", abv:\"2,5\u20133,3%\", ibu:\"10\u201320\", bitterness:\"low\", roast:\"dark\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"scottish-heavy\", label:\"Scottish Heavy\", abv:\"3,3\u20133,9%\", ibu:\"10\u201320\", bitterness:\"low\", roast:\"amber\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"scottish-export\", label:\"Scottish Export\", abv:\"3,9\u20136%\", ibu:\"15\u201330\", bitterness:\"med\", roast:\"amber\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"irish-red-ale\", label:\"Irish Red Ale\", abv:\"3,8\u20135%\", ibu:\"18\u201328\", bitterness:\"med\", roast:\"amber\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"irish-stout\", label:\"Irish Stout\", abv:\"3,8\u20135%\", ibu:\"25\u201345\", bitterness:\"med\", roast:\"dark\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"irish-extra-stout\", label:\"Irish Extra Stout\", abv:\"5\u20136,5%\", ibu:\"35\u201350\", bitterness:\"high\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"sweet-stout\", label:\"Sweet Stout\", abv:\"4\u20136%\", ibu:\"20\u201340\", bitterness:\"med\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"oatmeal-stout\", label:\"Oatmeal Stout\", abv:\"4,2\u20135,9%\", ibu:\"25\u201340\", bitterness:\"med\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"tropical-stout\", label:\"Tropical Stout\", abv:\"5,5\u20138%\", ibu:\"30\u201350\", bitterness:\"high\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"foreign-extra-stout\", label:\"Foreign Extra Stout\", abv:\"6,3\u20138%\", ibu:\"50\u201370\", bitterness:\"high\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"british-strong-ale\", label:\"British Strong Ale\", abv:\"5,5\u20138%\", ibu:\"30\u201360\", bitterness:\"high\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"old-ale\", label:\"Old Ale\", abv:\"5,5\u20139%\", ibu:\"30\u201360\", bitterness:\"high\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"wee-heavy\", label:\"Wee Heavy\", abv:\"6,5\u201310%\", ibu:\"17\u201335\", bitterness:\"med\", roast:\"amber\", strength:\"strong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"english-barley-wine\", label:\"English Barley Wine\", abv:\"8\u201312%\", ibu:\"35\u201370\", bitterness:\"high\", roast:\"amber\", strength:\"veryStrong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"blonde-ale\", label:\"Blonde Ale\", abv:\"3,8\u20135,5%\", ibu:\"15\u201328\", bitterness:\"med\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-pale-ale\", label:\"American Pale Ale\", abv:\"4,5\u20136,2%\", ibu:\"30\u201350\", bitterness:\"high\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-amber-ale\", label:\"American Amber Ale\", abv:\"4,5\u20136,2%\", ibu:\"25\u201340\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"california-common\", label:\"California Common\", abv:\"4,5\u20135,5%\", ibu:\"30\u201345\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-brown-ale\", label:\"American Brown Ale\", abv:\"4,3\u20136,2%\", ibu:\"20\u201330\", bitterness:\"med\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-porter\", label:\"American Porter\", abv:\"4,8\u20136,5%\", ibu:\"25\u201350\", bitterness:\"med\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-stout\", label:\"American Stout\", abv:\"5\u20137%\", ibu:\"35\u201375\", bitterness:\"high\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"imperial-stout\", label:\"Imperial Stout\", abv:\"8\u201312%\", ibu:\"50\u201390\", bitterness:\"high\", roast:\"dark\", strength:\"veryStrong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-ipa\", label:\"American IPA\", abv:\"5,5\u20137,5%\", ibu:\"40\u201370\", bitterness:\"high\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"specialty-ipa\", label:\"Specialty IPA\", abv:\"5,5\u20139%\", ibu:\"50\u201390\", bitterness:\"high\", roast:\"dark\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"hazy-ipa\", label:\"Hazy IPA\", abv:\"6\u20139%\", ibu:\"25\u201360\", bitterness:\"high\", roast:\"pale\", strength:\"strong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"double-ipa\", label:\"Double IPA\", abv:\"7,5\u201310%\", ibu:\"60\u2013100\", bitterness:\"high\", roast:\"amber\", strength:\"strong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-strong-ale\", label:\"American Strong Ale\", abv:\"6,3\u201310%\", ibu:\"50\u2013100\", bitterness:\"high\", roast:\"amber\", strength:\"strong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"american-barleywine\", label:\"American Barleywine\", abv:\"8\u201312%\", ibu:\"50\u2013100\", bitterness:\"high\", roast:\"amber\", strength:\"veryStrong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"wheatwine\", label:\"Wheatwine\", abv:\"8\u201312%\", ibu:\"30\u201360\", bitterness:\"high\", roast:\"amber\", strength:\"veryStrong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"berliner-weisse\", label:\"Berliner Weisse\", abv:\"2,8\u20133,8%\", ibu:\"3\u20138\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"flanders-red-ale\", label:\"Flanders Red Ale\", abv:\"4,6\u20136,5%\", ibu:\"10\u201325\", bitterness:\"low\", roast:\"amber\", strength:\"standard\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"oud-bruin\", label:\"Oud Bruin\", abv:\"4\u20138%\", ibu:\"20\u201325\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"lambic\", label:\"Lambic\", abv:\"5\u20136,5%\", ibu:\"0\u201310\", bitterness:\"low\", roast:\"pale\", strength:\"standard\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"gueuze\", label:\"Gueuze\", abv:\"5\u20138%\", ibu:\"0\u201310\", bitterness:\"low\", roast:\"pale\", strength:\"standard\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"fruit-lambic\", label:\"Fruit Lambic\", abv:\"5\u20137%\", ibu:\"0\u201310\", bitterness:\"low\", roast:\"pale\", strength:\"standard\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"gose\", label:\"Gose\", abv:\"4,2\u20134,8%\", ibu:\"5\u201312\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"witbier\", label:\"Witbier\", abv:\"4,5\u20135,5%\", ibu:\"8\u201320\", bitterness:\"low\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"belgian-pale-ale\", label:\"Belgian Pale Ale\", abv:\"4,8\u20135,5%\", ibu:\"20\u201330\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"biere-de-garde\", label:\"Bi\u00e8re de Garde\", abv:\"6\u20138,5%\", ibu:\"18\u201328\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"belgian-blond-ale\", label:\"Belgian Blond Ale\", abv:\"6\u20137,5%\", ibu:\"15\u201330\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"saison\", label:\"Saison\", abv:\"5\u20137%\", ibu:\"20\u201335\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"belgian-golden-strong-ale\", label:\"Belgian Golden Strong Ale\", abv:\"7,5\u201310,5%\", ibu:\"22\u201335\", bitterness:\"med\", roast:\"pale\", strength:\"strong\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"belgian-single\", label:\"Belgian Single\", abv:\"4,8\u20136%\", ibu:\"25\u201345\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"belgian-dubbel\", label:\"Belgian Dubbel\", abv:\"6\u20137,6%\", ibu:\"15\u201325\", bitterness:\"med\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"belgian-tripel\", label:\"Belgian Tripel\", abv:\"7,5\u20139,5%\", ibu:\"20\u201340\", bitterness:\"med\", roast:\"pale\", strength:\"strong\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"belgian-dark-strong-ale\", label:\"Belgian Dark Strong Ale\", abv:\"8\u201312%\", ibu:\"20\u201335\", bitterness:\"med\", roast:\"amber\", strength:\"veryStrong\", sour:false, wheat:false, belgian:true, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"straight-sour-beer\", label:\"Straight Sour Beer\", abv:\"4,5\u20137%\", ibu:\"3\u20138\", bitterness:\"low\", roast:\"pale\", strength:\"standard\", sour:true, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"grape-ale\", label:\"Grape Ale\", abv:\"6\u20138,5%\", ibu:\"10\u201330\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:true },\r\n\r\n\r\n\r\n    { id:\"dorada-pampeana\", label:\"Dorada Pampeana\", abv:\"4,3\u20135,5%\", ibu:\"15\u201322\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"ipa-argenta\", label:\"IPA Argenta\", abv:\"5\u20136,5%\", ibu:\"35\u201360\", bitterness:\"high\", roast:\"amber\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"italian-grape-ale\", label:\"Italian Grape Ale\", abv:\"4,5\u201312%\", ibu:\"6\u201330\", bitterness:\"low\", roast:\"amber\", strength:\"strong\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"catharina-sour\", label:\"Catharina Sour\", abv:\"4\u20135,5%\", ibu:\"2\u20138\", bitterness:\"low\", roast:\"pale\", strength:\"session\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false },\r\n\r\n\r\n\r\n    { id:\"new-zealand-pilsner\", label:\"New Zealand Pilsner\", abv:\"4,5\u20135,8%\", ibu:\"25\u201345\", bitterness:\"med\", roast:\"pale\", strength:\"standard\", sour:false, wheat:false, belgian:false, smoked:false, fruit:false }\r\n\r\n\r\n\r\n  ];\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  \/\/ MOTEUR D'ACCORDS PAR ATTRIBUTS \u2014 chaque plat d\u00e9finit trois r\u00e8gles\r\n\r\n\r\n\r\n  \/\/ ind\u00e9pendantes, une par principe (affinit\u00e9, contraste, compl\u00e9ment),\r\n\r\n\r\n\r\n  \/\/ \u00e9valu\u00e9es sur les 93 styles. Ce n'est pas une liste ferm\u00e9e de paires,\r\n\r\n\r\n\r\n  \/\/ tout nouveau style ajout\u00e9 \u00e0 STYLES est automatiquement disponible\r\n\r\n\r\n\r\n  \/\/ pour les trois sans toucher cette section.\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  var CATS = [\"afinidad\", \"contraste\", \"complemento\"];\r\n\r\n\r\n\r\n\r\n\r\n  var RULES = {\r\n\r\n\r\n\r\n    \"asado\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.smoked || s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(s){ return s.smoked ? \"Le caract\u00e8re fum\u00e9 du style dialogue directement avec la fum\u00e9e du grill.\" : \"Le torr\u00e9fi\u00e9 du malt fait \u00e9cho au grill\u00e9 et \u00e0 la fum\u00e9e de la viande r\u00f4tie.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume prononc\u00e9e coupe le gras des pi\u00e8ces grill\u00e9es intenses.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger et la carbonatation \u00e9lev\u00e9e rafra\u00eechissent pendant un long barbecue sans alourdir.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"bbq-ahumado\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.smoked; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le caract\u00e8re fum\u00e9 du style dialogue directement avec la fum\u00e9e de la cuisson lente.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras d'une cuisson longue et onctueuse.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 du malt accompagne la saveur fum\u00e9e sans rivaliser.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"brasa\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 moyen fait \u00e9cho au dor\u00e9 et aux marques de la braise.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras d'une viande cuite \u00e0 la braise.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne la viande \u00e0 la braise sans la dominer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"carnes-rojas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 du malt fait \u00e9cho au grill\u00e9 et \u00e0 la cro\u00fbte de la viande rouge.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume et la carbonatation coupent le gras d'une viande rouge juteuse.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 moyen accompagne la viande sans la dominer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"cerdo\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur fruit\u00e9e et les esters belges accompagnent les sauces et gla\u00e7ages typiques du porc.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras du porc.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 moyen se combine avec les gla\u00e7ages et sauces dor\u00e9es.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pollo\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.wheat; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les esters fruit\u00e9s du bl\u00e9 se combinent avec le poulet pr\u00e9par\u00e9 avec des \u00e9pices douces.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return (s.bitterness===\"med\" || s.bitterness===\"high\") && s.roast!==\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe le gras d'un poulet frit ou glac\u00e9.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger et la faible amertume n'\u00e9crasent pas un poulet d\u00e9licat.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pato\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.fruit; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es font \u00e9cho \u00e0 la sauce aux fruits typique du canard.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe le gras riche du canard.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense \u00e9gale l'intensit\u00e9 du canard.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"caza\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\" || s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 sombre ou la douceur \u00e9pic\u00e9e belge font \u00e9cho \u00e0 la saveur intense du gibier.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe le gras et la saveur forte d'une viande de gibier.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense \u00e9gale l'intensit\u00e9 d'une viande de gibier.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"marinados-especiados\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.smoked; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le caract\u00e8re fum\u00e9 ou torr\u00e9fi\u00e9 du style fait \u00e9cho \u00e0 une marinade \u00e9pic\u00e9e au grill.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume \u00e9lev\u00e9e coupe le gras d'une pi\u00e8ce marin\u00e9e.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne une viande marin\u00e9e sans la dominer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"embutidos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes de fruits sombres et de caramel accompagnent le gras affin\u00e9 de la charcuterie.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\" || s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume ou l'acidit\u00e9 coupe le gras affin\u00e9 de la charcuterie.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne la charcuterie sans rivaliser avec son sel.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pescados-blancos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes d'agrumes ou florales du houblon font \u00e9cho au citron qui accompagne souvent le poisson blanc.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 du style contraste avec la douceur naturelle du poisson blanc.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas un poisson blanc au go\u00fbt d\u00e9licat.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pescados-azules\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes d'agrumes ou florales du houblon font \u00e9cho au citron qui coupe le gras du poisson gras.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume ou l'acidit\u00e9 coupe le gras naturel d'un poisson gras.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne la saveur plus intense d'un poisson gras.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"mariscos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes d'agrumes ou florales du houblon font \u00e9cho au citron qui accompagne souvent les fruits de mer.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 du style contraste avec la douceur naturelle des fruits de mer.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness!==\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil l\u00e9ger et la carbonatation fine rehaussent le sal\u00e9 des fruits de mer sans le masquer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pescados-ahumados\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.smoked; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le caract\u00e8re fum\u00e9 du style fait \u00e9cho au poisson fum\u00e9.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe l'onctuosit\u00e9 d'un poisson fum\u00e9.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas un poisson fum\u00e9.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"sushi\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 joue un r\u00f4le similaire \u00e0 celui du vinaigre de riz.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Une amertume mod\u00e9r\u00e9e nettoie le gras des pi\u00e8ces comme le saumon ou le thon gras.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger et la faible intensit\u00e9 laissent le poisson cru en vedette.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"ceviche\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 fait \u00e9cho \u00e0 l'agrume d'un ceviche.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe l'huile naturelle du poisson cru.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas un ceviche d\u00e9licat.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pastas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur fruit\u00e9e se combine avec les p\u00e2tes farcies \u00e0 la viande et les sauces r\u00e9duites.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" && s.roast!==\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e \u00e9quilibre les sauces \u00e0 base de tomate.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil l\u00e9ger ne rivalise pas avec les p\u00e2tes simples \u00e0 l'huile et \u00e0 l'ail.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pizza\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 du malt fait \u00e9cho \u00e0 une cro\u00fbte bien cuite ou \u00e0 des charcuteries fum\u00e9es.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" && s.roast!==\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras du fromage fondu.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 accompagne la cro\u00fbte sans rivaliser avec les autres ingr\u00e9dients.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"panaderia\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les esters belges font \u00e9cho \u00e0 la cro\u00fbte caram\u00e9lis\u00e9e du pain artisanal.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe le beurre tartin\u00e9 sur le pain.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 moyen fait \u00e9cho \u00e0 la cro\u00fbte sans rivaliser.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"paella-arroces-secos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 moyen fait \u00e9cho au socarrat et au sofrito d'une paella ou d'un riz sec.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume ou l'acidit\u00e9 coupe l'huile du sofrito.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"La fra\u00eecheur citronn\u00e9e du houblon accompagne la vari\u00e9t\u00e9 d'ingr\u00e9dients sans les masquer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"arroces-caldosos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 moyen fait \u00e9cho \u00e0 la profondeur d'un bouillon r\u00e9duit.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe l'onctuosit\u00e9 d'un riz en sauce.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"session\" || s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger \u00e0 moyen n'\u00e9crase pas un bouillon d\u00e9licat.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"legumbres\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 sombre fait \u00e9cho au caract\u00e8re terreux des l\u00e9gumineuses.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e all\u00e8ge la densit\u00e9 d'un plat de l\u00e9gumineuses.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne les l\u00e9gumineuses sans les dominer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"guisos-legumbres\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.smoked || s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le caract\u00e8re fum\u00e9 ou torr\u00e9fi\u00e9 fait \u00e9cho au chorizo ou au boudin d'un rago\u00fbt de l\u00e9gumineuses.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras d'un rago\u00fbt de l\u00e9gumineuses avec charcuterie.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen \u00e9gale l'intensit\u00e9 d'un rago\u00fbt de l\u00e9gumineuses.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"hamburguesas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 du malt accompagne les viandes aux notes fum\u00e9es.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume r\u00e9sineuse coupe le gras de la viande et du fromage fondu.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne le hamburger sans rivaliser avec le pain ni la laitue.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"frituras\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 du style fait \u00e9cho au dor\u00e9 d'une friture.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras d'une friture.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"La l\u00e9g\u00e8ret\u00e9 et la carbonatation \u00e9lev\u00e9e nettoient le palais entre deux bouch\u00e9es de friture.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"perros-calientes\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 fait \u00e9cho \u00e0 la saucisse grill\u00e9e ou po\u00eal\u00e9e.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras de la saucisse et les sauces sucr\u00e9es du hot-dog.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger et rafra\u00eechissant accompagne un fast-food sans ajouter de poids.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"snacks-salados\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 moyen fait \u00e9cho au ma\u00efs grill\u00e9 d'un snack sal\u00e9.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras des fritures et du beurre.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger rafra\u00eechit entre deux bouch\u00e9es de snack sal\u00e9.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"ensaladas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 du style fait \u00e9cho au vinaigre d'une vinaigrette fra\u00eeche.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le cr\u00e9meux d'une vinaigrette de type c\u00e9sar ou ranch.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil l\u00e9ger et rafra\u00eechissant n'\u00e9crase pas les l\u00e9gumes crus ni les vinaigrettes citronn\u00e9es.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"vegetariano\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.wheat || s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es ou \u00e9pic\u00e9es se combinent avec les l\u00e9gumes r\u00f4tis et les herbes fra\u00eeches.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume contraste avec la douceur naturelle des l\u00e9gumes r\u00f4tis ou glac\u00e9s.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas les saveurs v\u00e9g\u00e9tales d\u00e9licates.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"verduras-asadas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 du style fait \u00e9cho \u00e0 la caram\u00e9lisation d'un l\u00e9gume r\u00f4ti.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume contraste avec la douceur d'un l\u00e9gume caram\u00e9lis\u00e9 au four.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas la saveur naturelle du l\u00e9gume r\u00f4ti.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"sopas-guisos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 sombre fait \u00e9cho \u00e0 une soupe ou un rago\u00fbt cuit lentement.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe l'onctuosit\u00e9 d'une soupe \u00e9paisse.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger accompagne une soupe douce sans ajouter de poids.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"estofados-carne\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 sombre fait \u00e9cho \u00e0 la profondeur d'un rago\u00fbt de viande cuit longtemps.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe l'onctuosit\u00e9 d'un rago\u00fbt de viande.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"standard\" || s.strength===\"strong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense \u00e9gale l'intensit\u00e9 d'un rago\u00fbt de b\u0153uf ou d'agneau.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"cocidos-pucheros\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.smoked || s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le caract\u00e8re fum\u00e9 ou torr\u00e9fi\u00e9 fait \u00e9cho au chorizo ou au boudin d'un pot-au-feu.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras des viandes d'un pot-au-feu.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne un pot-au-feu sans le dominer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"fabadas-potajes\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.smoked; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le caract\u00e8re fum\u00e9 du style fait \u00e9cho au chorizo et au boudin d'une fabada.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume \u00e9lev\u00e9e coupe le gras dense d'une fabada.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"dark\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 sombre et le corps moyen \u00e9galent la richesse d'un pot\u00e9e de l\u00e9gumineuses.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"chili-con-carne\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 sombre fait \u00e9cho \u00e0 la viande et au paprika d'un chili con carne.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Une amertume faible rafra\u00eechit le palais sans ajouter plus de piquant au chili.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen \u00e9gale l'intensit\u00e9 d'un chili con carne.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"gazpacho-salmorejo\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 du style fait \u00e9cho \u00e0 la tomate et au vinaigre d'un gazpacho ou salmorejo.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe l'huile d'olive d'une soupe froide.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger et rafra\u00eechissant accompagne une soupe froide sans ajouter de poids.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"ensaladilla-rusa\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes d'agrumes du houblon font \u00e9cho au thon et aux pickles d'une salade russe.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe la mayonnaise d'une salade russe.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas une salade froide \u00e0 base de mayonnaise.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"empanadas-pasteles-salados\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 fait \u00e9cho \u00e0 une p\u00e2te cuite au four ou frite.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras de la p\u00e2te et de la farce d'une empanada.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne une empanada ou un p\u00e2t\u00e9 sal\u00e9 sans le dominer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pates-terrinas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian || s.fruit; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur fruit\u00e9e du style fait \u00e9cho au coing ou \u00e0 la confiture qui accompagne souvent un p\u00e2t\u00e9.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 ou l'amertume coupe le gras dense d'un p\u00e2t\u00e9 ou d'une terrine.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense \u00e9gale la richesse d'un p\u00e2t\u00e9.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"huevos-revueltos-fritos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 du style fait \u00e9cho \u00e0 la richesse du jaune d'\u0153uf.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe le gras du jaune.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas un plat d'\u0153uf simple.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"tortillas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 moyen fait \u00e9cho \u00e0 l'oignon ou \u00e0 la pomme de terre caram\u00e9lis\u00e9e d'une omelette.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe le gras de l'\u0153uf et de la pomme de terre.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas une omelette simple.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"huevos-poche-benedictino\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes d'agrumes du houblon font \u00e9cho au citron d'une sauce hollandaise.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe le gras d'une sauce hollandaise.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger ne rivalise pas avec un \u0153uf poch\u00e9 d\u00e9licat.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"frittatas-quiches\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.wheat || s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es ou \u00e9pic\u00e9es du style se combinent avec les herbes et l\u00e9gumes d'une quiche.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e coupe le gras du fromage et de la cr\u00e8me d'une frittata ou quiche.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne une frittata ou quiche sans la dominer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"tapas-frias\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"La fra\u00eecheur citronn\u00e9e du houblon fait \u00e9cho \u00e0 un jambon, un fromage ou une tapa froide.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe le gras et le sel d'une charcuterie ou d'un fromage affin\u00e9.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger accompagne une vari\u00e9t\u00e9 de tapas froides sans en dominer aucune.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"tapas-calientes\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"amber\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil torr\u00e9fi\u00e9 fait \u00e9cho au dor\u00e9 d'une croquette ou de calamars frits.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\" || s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras d'une tapa frite.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne une vari\u00e9t\u00e9 de tapas chaudes.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"aperitivos-variados\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les esters belges accompagnent la vari\u00e9t\u00e9 de saveurs d'une planche d'ap\u00e9ritifs.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\" || s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume ou l'acidit\u00e9 coupe le gras et le sel des fritures et bouch\u00e9es sal\u00e9es.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne des ap\u00e9ritifs vari\u00e9s sans rivaliser.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"picante\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes \u00e9pic\u00e9es du style font \u00e9cho aux \u00e9pices du plat piquant.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Une amertume faible rafra\u00eechit le palais sans ajouter plus d'ardeur au piquant.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'ajoute pas plus d'intensit\u00e9 \u00e0 un plat d\u00e9j\u00e0 piquant.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"curry\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian || s.wheat; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes \u00e9pic\u00e9es et fruit\u00e9es du style se combinent avec les \u00e9pices du curry.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe l'onctuosit\u00e9 d'une sauce curry cr\u00e9meuse.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil l\u00e9ger ne rivalise pas avec les \u00e9pices du curry.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"asiatica\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.wheat || s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es ou l'acidit\u00e9 du style dialoguent avec les saveurs aigres-douces.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe le gras des sauces \u00e0 base de soja ou d'huile de s\u00e9same.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil l\u00e9ger et propre ne rivalise pas avec les sauces soja, gingembre ou s\u00e9same.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"cocina-hindu\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian || s.wheat; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes \u00e9pic\u00e9es et fruit\u00e9es du style font \u00e9cho aux \u00e9pices de la cuisine indienne.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe l'onctuosit\u00e9 du ghee et des sauces cr\u00e9meuses.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.bitterness===\"low\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le profil l\u00e9ger ne rivalise pas avec la couche d'\u00e9pices d'un plat indien.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"quesos-frescos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.wheat; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le caract\u00e8re doux du bl\u00e9 fait \u00e9cho au cr\u00e9meux d'un fromage frais.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 contraste avec le cr\u00e9meux d'un fromage frais.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger n'\u00e9crase pas un fromage frais au go\u00fbt d\u00e9licat.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"quesos-curados\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes de fruits sombres accompagnent un fromage affin\u00e9 \u00e0 la saveur intense.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 contraste avec la densit\u00e9 d'un fromage affin\u00e9.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps et la douceur alcoolis\u00e9e \u00e9quilibrent un fromage affin\u00e9 ou \u00e0 p\u00e2te dure.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"quesos-azules\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.fruit; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur fruit\u00e9e du style fait \u00e9cho au miel ou \u00e0 la confiture qui accompagne souvent un fromage bleu.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur et le corps dense d'un style intense \u00e9quilibrent le sel et le piquant d'un fromage bleu.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les esters belges accompagnent un fromage bleu sans \u00eatre \u00e9cras\u00e9s par son intensit\u00e9.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"frutos-secos-aceitunas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les esters belges font \u00e9cho aux fruits secs torr\u00e9fi\u00e9s.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe le gras de l'olive.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne les fruits secs et les olives sans rivaliser.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"salsas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 du style fait \u00e9cho \u00e0 une sauce \u00e0 base de vinaigre comme le mojo ou le chimichurri.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"high\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume coupe le gras d'une sauce \u00e0 base de mayonnaise comme l'a\u00efoli ou la brava.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"amber\" && s.strength===\"standard\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps moyen accompagne une sauce sans rivaliser avec le plat principal.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"encurtidos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 du style fait \u00e9cho au vinaigre d'un pickles.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'amertume mod\u00e9r\u00e9e \u00e9quilibre l'acidit\u00e9 d'un pickles.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.roast===\"pale\" && s.strength===\"session\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps l\u00e9ger et croquant ne rivalise pas avec un pickles.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"mermeladas-conservas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.fruit; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es du style font \u00e9cho \u00e0 une confiture ou conserve de fruits.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 \u00e9quilibre la douceur d'une confiture ou conserve.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"standard\" || s.strength===\"strong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps et la douceur du style accompagnent une confiture ou conserve sans la masquer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"postres-chocolate\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\" && (s.strength===\"strong\" || s.strength===\"veryStrong\"); },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur intense et les notes de caf\u00e9 ou chocolat d'un style sombre et fort accompagnent le chocolat.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 \u00e9quilibre la douceur d'un dessert au chocolat intense.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense et la douceur du style accompagnent un dessert au chocolat sans rivaliser.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"postres-frutales\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.fruit; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es font \u00e9cho aux fruits du dessert.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 \u00e9quilibre la douceur d'un dessert fruit\u00e9.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"standard\" || s.strength===\"strong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps et la douceur du style accompagnent un dessert fruit\u00e9 sans le masquer.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"postres-cremosos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur fruit\u00e9e et caram\u00e9lis\u00e9e du style fait \u00e9cho \u00e0 un dessert cr\u00e9meux ou au dulce de leche.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe l'onctuosit\u00e9 d'un dessert cr\u00e9meux.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense du style accompagne un dessert cr\u00e9meux sans rivaliser.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"postres-especiados\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les esters belges font \u00e9cho \u00e0 la cannelle, au gingembre ou \u00e0 la noix de muscade.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 \u00e9quilibre la douceur d'un dessert \u00e9pic\u00e9.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense \u00e9gale l'intensit\u00e9 d'un dessert \u00e9pic\u00e9.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"helados-sorbetes\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.fruit; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es du style font \u00e9cho \u00e0 un sorbet aux fruits.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.bitterness===\"med\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Une amertume mod\u00e9r\u00e9e coupe le gras et la douceur d'une glace cr\u00e9meuse.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps dense et la douceur du style accompagnent une glace en style float.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"donuts-rosquillas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le torr\u00e9fi\u00e9 sombre fait \u00e9cho au gla\u00e7age caram\u00e9lis\u00e9 d'un donut.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe la douceur et le gras d'une p\u00e2te frite.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur et le corps du style accompagnent un donut sans \u00eatre \u00e9cras\u00e9s.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"galletas\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.roast===\"dark\" && (s.strength===\"strong\" || s.strength===\"veryStrong\"); },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes de caramel, caf\u00e9 ou chocolat d'un style sombre et fort font \u00e9cho \u00e0 un biscuit cuit au four.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 \u00e9quilibre la douceur d'un biscuit.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"strong\" || s.strength===\"veryStrong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"La douceur et le corps du style accompagnent un biscuit sans rivaliser.\"; } }\r\n\r\n\r\n\r\n    },\r\n\r\n\r\n\r\n    \"pasteles-esponjosos\": {\r\n\r\n\r\n\r\n      afinidad: { test:function(s){ return s.fruit || s.belgian; },\r\n\r\n\r\n\r\n        text:function(){ return \"Les notes fruit\u00e9es ou \u00e9pic\u00e9es du style font \u00e9cho au zeste d'agrume d'un g\u00e2teau moelleux ou d'un muffin.\"; } },\r\n\r\n\r\n\r\n      contraste: { test:function(s){ return s.sour; },\r\n\r\n\r\n\r\n        text:function(){ return \"L'acidit\u00e9 coupe la douceur d'un g\u00e2teau moelleux.\"; } },\r\n\r\n\r\n\r\n      complemento: { test:function(s){ return s.strength===\"standard\" || s.strength===\"strong\"; },\r\n\r\n\r\n\r\n        text:function(){ return \"Le corps et la douceur mod\u00e9r\u00e9e du style accompagnent un g\u00e2teau moelleux sans le masquer.\"; } }\r\n\r\n\r\n\r\n    }\r\n\r\n\r\n\r\n  };\r\n\r\n\r\n\r\n\r\n\r\n  var CAT_LABELS = { afinidad:\"Affinit\u00e9\", contraste:\"Contraste\", complemento:\"Compl\u00e9ment\" };\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  \/\/ NIVEAU A \u2014 bi\u00e8res chroniqu\u00e9es par TBT qui renforcent une recommandation.\r\n\r\n\r\n\r\n  \/\/ Vide volontairement. Remplir uniquement avec des donn\u00e9es v\u00e9rifi\u00e9es\r\n\r\n\r\n\r\n  \/\/ \u00e0 partir de l'article r\u00e9el (post_id, style exact tel que publi\u00e9).\r\n\r\n\r\n\r\n  \/\/ Format : { style:\"<id de STYLES>\", title:\"...\", postId: 0 }\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  var REVIEWED_BEERS = [\r\n\r\n\r\n\r\n    { style:\"belgian-blond-ale\", title:\"Chimay Dor\u00e9e (Blonde)\", postId:49160 },\r\n\r\n\r\n\r\n    { style:\"weissbier\", title:\"Weihenstephaner Hefe Weissbier\", postId:44791 },\r\n\r\n\r\n\r\n    { style:\"double-ipa\", title:\"Pliny the Elder\", postId:44686 },\r\n\r\n\r\n\r\n    { style:\"gueuze\", title:\"3 Fonteinen Oude Geuze\", postId:49167 },\r\n\r\n\r\n\r\n    { style:\"international-pale-lager\", title:\"Stella Artois\", postId:42684 },\r\n\r\n\r\n\r\n    { style:\"vienna-lager\", title:\"Cerveza Indio\", postId:42456 },\r\n\r\n\r\n\r\n    { style:\"best-bitter\", title:\"Fuller\u2019s London Pride\", postId:17095 },\r\n\r\n\r\n\r\n    { style:\"munich-dunkel\", title:\"Negra Modelo Dunkel\", postId:34782 },\r\n\r\n\r\n\r\n    { style:\"belgian-dark-strong-ale\", title:\"St. Bernardus Abt 12\", postId:17125 },\r\n\r\n\r\n\r\n    { style:\"witbier\", title:\"Hoegaarden Wit\", postId:17008 },\r\n\r\n\r\n\r\n    { style:\"american-ipa\", title:\"Lagunitas IPA\", postId:16912 },\r\n\r\n\r\n\r\n    { style:\"english-ipa\", title:\"Goose Island IPA\", postId:16948 },\r\n\r\n\r\n\r\n    { style:\"imperial-stout\", title:\"Fuller\u2019s Imperial Stout\", postId:17074 },\r\n\r\n\r\n\r\n    { style:\"belgian-golden-strong-ale\", title:\"Duvel Belgian Strong Ale\", postId:17085 },\r\n\r\n\r\n\r\n    { style:\"rauchbier\", title:\"Schlenkerla Rauchbier\", postId:17080 },\r\n\r\n\r\n\r\n    { style:\"foreign-extra-stout\", title:\"Cuello Negro Stout\", postId:27905 },\r\n\r\n\r\n\r\n    { style:\"belgian-tripel\", title:\"Westmalle Tripel\", postId:16976 },\r\n\r\n\r\n\r\n    { style:\"belgian-pale-ale\", title:\"Orval Belgian Pale Ale\", postId:17110 },\r\n\r\n\r\n\r\n    { style:\"belgian-dubbel\", title:\"Westmalle Dubbel\", postId:27573 },\r\n\r\n\r\n\r\n    { style:\"saison\", title:\"Saison Dupont\", postId:17015 },\r\n\r\n\r\n\r\n    { style:\"american-porter\", title:\"Anchor Porter\", postId:17379 },\r\n\r\n\r\n\r\n    { style:\"czech-premium-pale-lager\", title:\"Pilsner Urquell\", postId:17115 },\r\n\r\n\r\n\r\n    { style:\"flanders-red-ale\", title:\"Petrus Aged Red\", postId:17182 },\r\n\r\n\r\n\r\n    { style:\"american-amber-ale\", title:\"Rogue American Amber Ale\", postId:17105 },\r\n\r\n\r\n\r\n    { style:\"american-lager\", title:\"Corona Extra\", postId:16917 },\r\n\r\n\r\n\r\n    { style:\"american-barleywine\", title:\"Sierra Nevada Bigfoot\", postId:17147 },\r\n\r\n\r\n\r\n    { style:\"schwarzbier\", title:\"K\u00f6stritzer Schwarzbier\", postId:17155 },\r\n\r\n\r\n\r\n    { style:\"wee-heavy\", title:\"Founders Backwoods Bastard\", postId:17376 }\r\n\r\n\r\n\r\n  ];\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  \/\/ \u00c9TAT ET RENDU\r\n\r\n\r\n\r\n  \/\/ ---------------------------------------------------------------------\r\n\r\n\r\n\r\n  var state = { mode:\"comida\", selectedId:null, filter:\"\" };\r\n\r\n\r\n\r\n\r\n\r\n  var tabsEl = root.querySelectorAll(\".tbt-som-tab\");\r\n\r\n\r\n\r\n  var searchInput = root.querySelector(\".tbt-som-search-input\");\r\n\r\n\r\n\r\n  var chipsEl = root.querySelector(\".tbt-som-chips\");\r\n\r\n\r\n\r\n  var resultsEl = root.querySelector(\".tbt-som-results\");\r\n\r\n\r\n\r\n\r\n\r\n  function itemsForMode(){ return state.mode === \"comida\" ? FOODS : STYLES; }\r\n\r\n\r\n\r\n\r\n\r\n  function renderChips(){\r\n\r\n\r\n\r\n    var items = itemsForMode();\r\n\r\n\r\n\r\n    chipsEl.innerHTML = \"\";\r\n\r\n\r\n\r\n    items.forEach(function(item){\r\n\r\n\r\n\r\n      var btn = document.createElement(\"button\");\r\n\r\n\r\n\r\n      btn.type = \"button\";\r\n\r\n\r\n\r\n      btn.className = \"tbt-som-chip\";\r\n\r\n\r\n\r\n      btn.textContent = item.label;\r\n\r\n\r\n\r\n      btn.dataset.id = item.id;\r\n\r\n\r\n\r\n      if (item.id === state.selectedId) btn.classList.add(\"is-selected\");\r\n\r\n\r\n\r\n      if (state.filter && item.label.toLowerCase().indexOf(state.filter) === -1) {\r\n\r\n\r\n\r\n        btn.classList.add(\"is-hidden\");\r\n\r\n\r\n\r\n      }\r\n\r\n\r\n\r\n      btn.addEventListener(\"click\", function(){\r\n\r\n\r\n\r\n        state.selectedId = item.id;\r\n\r\n\r\n\r\n        renderChips();\r\n\r\n\r\n\r\n        renderResults();\r\n\r\n\r\n\r\n      });\r\n\r\n\r\n\r\n      chipsEl.appendChild(btn);\r\n\r\n\r\n\r\n    });\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  function findReviewed(styleId){\r\n\r\n\r\n\r\n    for (var i = 0; i < REVIEWED_BEERS.length; i++) {\r\n\r\n\r\n\r\n      if (REVIEWED_BEERS[i].style === styleId) return REVIEWED_BEERS[i];\r\n\r\n\r\n\r\n    }\r\n\r\n\r\n\r\n    return null;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  function tagEl(cat){\r\n\r\n\r\n\r\n    var span = document.createElement(\"span\");\r\n\r\n\r\n\r\n    span.className = \"tbt-som-tag tbt-som-tag--\" + cat;\r\n\r\n\r\n\r\n    span.textContent = CAT_LABELS[cat] || cat;\r\n\r\n\r\n\r\n    return span;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  function cardForStyle(style, info){\r\n\r\n\r\n\r\n    var reviewed = findReviewed(style.id);\r\n\r\n\r\n\r\n    var card = document.createElement(\"div\");\r\n\r\n\r\n\r\n    card.className = \"tbt-som-card tbt-som-card--\" + info.cat;\r\n\r\n\r\n\r\n\r\n\r\n    var head = document.createElement(\"div\");\r\n\r\n\r\n\r\n    head.className = \"tbt-som-card-head\";\r\n\r\n\r\n\r\n    var h3 = document.createElement(\"h3\");\r\n\r\n\r\n\r\n    h3.textContent = style.label;\r\n\r\n\r\n\r\n    head.appendChild(h3);\r\n\r\n\r\n\r\n    if (reviewed) {\r\n\r\n\r\n\r\n      var badge = document.createElement(\"a\");\r\n\r\n\r\n\r\n      badge.className = \"tbt-som-badge\";\r\n\r\n\r\n\r\n      badge.href = \"https:\/\/www.thebeertimes.com\/?p=\" + reviewed.postId;\r\n\r\n\r\n\r\n      badge.appendChild(document.createTextNode(reviewed.title));\r\n\r\n\r\n\r\n      head.appendChild(badge);\r\n\r\n\r\n\r\n    }\r\n\r\n\r\n\r\n    card.appendChild(head);\r\n\r\n\r\n\r\n\r\n\r\n    var attrs = document.createElement(\"div\");\r\n\r\n\r\n\r\n    attrs.className = \"tbt-som-attrs\";\r\n\r\n\r\n\r\n    attrs.innerHTML =\r\n\r\n\r\n\r\n      '<div><span class=\"k\">ABV<\/span><span class=\"v\">' + style.abv + '<\/span><\/div>' +\r\n\r\n\r\n\r\n      '<div><span class=\"k\">IBU<\/span><span class=\"v\">' + style.ibu + '<\/span><\/div>';\r\n\r\n\r\n\r\n    card.appendChild(attrs);\r\n\r\n\r\n\r\n\r\n\r\n    var p = document.createElement(\"p\");\r\n\r\n\r\n\r\n    p.className = \"tbt-som-why\";\r\n\r\n\r\n\r\n    p.appendChild(tagEl(info.cat));\r\n\r\n\r\n\r\n    p.appendChild(document.createElement(\"br\"));\r\n\r\n\r\n\r\n    p.appendChild(document.createTextNode(info.text));\r\n\r\n\r\n\r\n    card.appendChild(p);\r\n\r\n\r\n\r\n\r\n\r\n    card.appendChild(feedbackRow());\r\n\r\n\r\n\r\n    return card;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  function cardForFood(food, info){\r\n\r\n\r\n\r\n    var card = document.createElement(\"div\");\r\n\r\n\r\n\r\n    card.className = \"tbt-som-card tbt-som-card--\" + info.cat;\r\n\r\n\r\n\r\n\r\n\r\n    var head = document.createElement(\"div\");\r\n\r\n\r\n\r\n    head.className = \"tbt-som-card-head\";\r\n\r\n\r\n\r\n    var h3 = document.createElement(\"h3\");\r\n\r\n\r\n\r\n    h3.textContent = food.label;\r\n\r\n\r\n\r\n    head.appendChild(h3);\r\n\r\n\r\n\r\n    card.appendChild(head);\r\n\r\n\r\n\r\n\r\n\r\n    var p = document.createElement(\"p\");\r\n\r\n\r\n\r\n    p.className = \"tbt-som-why\";\r\n\r\n\r\n\r\n    p.appendChild(tagEl(info.cat));\r\n\r\n\r\n\r\n    p.appendChild(document.createElement(\"br\"));\r\n\r\n\r\n\r\n    p.appendChild(document.createTextNode(info.text));\r\n\r\n\r\n\r\n    card.appendChild(p);\r\n\r\n\r\n\r\n\r\n\r\n    card.appendChild(feedbackRow());\r\n\r\n\r\n\r\n    return card;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  function feedbackRow(){\r\n\r\n\r\n\r\n    var foot = document.createElement(\"div\");\r\n\r\n\r\n\r\n    foot.className = \"tbt-som-foot\";\r\n\r\n\r\n\r\n    var span = document.createElement(\"span\");\r\n\r\n\r\n\r\n    span.textContent = \"Cette recommandation vous a-t-elle \u00e9t\u00e9 utile ?\";\r\n\r\n\r\n\r\n    var fb = document.createElement(\"div\");\r\n\r\n\r\n\r\n    fb.className = \"tbt-som-fb\";\r\n\r\n\r\n\r\n    var yes = document.createElement(\"button\");\r\n\r\n\r\n\r\n    yes.type = \"button\"; yes.textContent = \"Oui\"; yes.className = \"tbt-som-fb-yes\";\r\n\r\n\r\n\r\n    var no = document.createElement(\"button\");\r\n\r\n\r\n\r\n    no.type = \"button\"; no.textContent = \"Non\"; no.className = \"tbt-som-fb-no\";\r\n\r\n\r\n\r\n    function vote(chosen, other){\r\n\r\n\r\n\r\n      chosen.classList.add(\"is-voted\");\r\n\r\n\r\n\r\n      chosen.disabled = true;\r\n\r\n\r\n\r\n      other.disabled = true;\r\n\r\n\r\n\r\n      \/\/ TODO : envoyer ce vote vers un endpoint r\u00e9el (API REST WordPress, feuille de calcul, etc.) lorsqu'il existera ; aujourd'hui change seulement l'\u00e9tat visuel.\r\n\r\n\r\n\r\n    }\r\n\r\n\r\n\r\n    yes.addEventListener(\"click\", function(){ vote(yes, no); });\r\n\r\n\r\n\r\n    no.addEventListener(\"click\", function(){ vote(no, yes); });\r\n\r\n\r\n\r\n    fb.appendChild(yes); fb.appendChild(no);\r\n\r\n\r\n\r\n    foot.appendChild(span); foot.appendChild(fb);\r\n\r\n\r\n\r\n    return foot;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  function renderResults(){\r\n\r\n\r\n\r\n    resultsEl.innerHTML = \"\";\r\n\r\n\r\n\r\n    if (!state.selectedId) return;\r\n\r\n\r\n\r\n\r\n\r\n    var heading = document.createElement(\"p\");\r\n\r\n\r\n\r\n    heading.className = \"tbt-som-results-heading\";\r\n\r\n\r\n\r\n    var anyCard = false;\r\n\r\n\r\n\r\n\r\n\r\n    if (state.mode === \"comida\") {\r\n\r\n\r\n\r\n      var food = FOODS.filter(function(f){ return f.id === state.selectedId; })[0];\r\n\r\n\r\n\r\n      var rulesForFood = RULES[state.selectedId];\r\n\r\n\r\n\r\n      heading.textContent = \"Styles recommand\u00e9s pour \" + food.label.toLowerCase();\r\n\r\n\r\n\r\n      resultsEl.appendChild(heading);\r\n\r\n\r\n\r\n      if (!rulesForFood) { resultsEl.appendChild(emptyState()); return; }\r\n\r\n\r\n\r\n\r\n\r\n      CATS.forEach(function(cat){\r\n\r\n\r\n\r\n        var rule = rulesForFood[cat];\r\n\r\n\r\n\r\n        var found = STYLES.filter(function(s){ return rule.test(s); }).slice(0, PER_CATEGORY);\r\n\r\n\r\n\r\n        found.forEach(function(s){\r\n\r\n\r\n\r\n          anyCard = true;\r\n\r\n\r\n\r\n          resultsEl.appendChild(cardForStyle(s, { cat:cat, text:rule.text(s) }));\r\n\r\n\r\n\r\n        });\r\n\r\n\r\n\r\n      });\r\n\r\n\r\n\r\n    } else {\r\n\r\n\r\n\r\n      var style = STYLES.filter(function(s){ return s.id === state.selectedId; })[0];\r\n\r\n\r\n\r\n      heading.textContent = style.label + \" (ABV \" + style.abv + \", IBU \" + style.ibu + \") s'accorde bien avec\";\r\n\r\n\r\n\r\n      resultsEl.appendChild(heading);\r\n\r\n\r\n\r\n\r\n\r\n      CATS.forEach(function(cat){\r\n\r\n\r\n\r\n        var found = FOODS.filter(function(f){\r\n\r\n\r\n\r\n          var rule = RULES[f.id] && RULES[f.id][cat];\r\n\r\n\r\n\r\n          return rule && rule.test(style);\r\n\r\n\r\n\r\n        }).slice(0, PER_CATEGORY);\r\n\r\n\r\n\r\n        found.forEach(function(f){\r\n\r\n\r\n\r\n          anyCard = true;\r\n\r\n\r\n\r\n          resultsEl.appendChild(cardForFood(f, { cat:cat, text:RULES[f.id][cat].text(style) }));\r\n\r\n\r\n\r\n        });\r\n\r\n\r\n\r\n      });\r\n\r\n\r\n\r\n    }\r\n\r\n\r\n\r\n\r\n\r\n    if (!anyCard) resultsEl.appendChild(emptyState());\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  function emptyState(){\r\n\r\n\r\n\r\n    var p = document.createElement(\"p\");\r\n\r\n\r\n\r\n    p.className = \"tbt-som-empty\";\r\n\r\n\r\n\r\n    p.textContent = \"Aucune r\u00e8gle n'est encore charg\u00e9e pour cette combinaison.\";\r\n\r\n\r\n\r\n    return p;\r\n\r\n\r\n\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  tabsEl.forEach(function(tab){\r\n\r\n\r\n\r\n    tab.addEventListener(\"click\", function(){\r\n\r\n\r\n\r\n      tabsEl.forEach(function(t){ t.classList.remove(\"is-active\"); t.setAttribute(\"aria-selected\",\"false\"); });\r\n\r\n\r\n\r\n      tab.classList.add(\"is-active\");\r\n\r\n\r\n\r\n      tab.setAttribute(\"aria-selected\",\"true\");\r\n\r\n\r\n\r\n      state.mode = tab.dataset.mode;\r\n\r\n\r\n\r\n      state.selectedId = null;\r\n\r\n\r\n\r\n      state.filter = \"\";\r\n\r\n\r\n\r\n      searchInput.value = \"\";\r\n\r\n\r\n\r\n      renderChips();\r\n\r\n\r\n\r\n      renderResults();\r\n\r\n\r\n\r\n    });\r\n\r\n\r\n\r\n  });\r\n\r\n\r\n\r\n\r\n\r\n  searchInput.addEventListener(\"input\", function(){\r\n\r\n\r\n\r\n    state.filter = searchInput.value.trim().toLowerCase();\r\n\r\n\r\n\r\n    renderChips();\r\n\r\n\r\n\r\n  });\r\n\r\n\r\n\r\n\r\n\r\n  renderChips();\r\n\r\n\r\n\r\n  renderResults();\r\n\r\n\r\n\r\n})();\r\n\r\n\r\n\r\n<\/script><\/p>\r\n<h2>Foire aux questions (FAQ)<\/h2>\r\n<h3>1. Comment fonctionne Beer Sommelier ?<\/h3>\r\n<p>Beer Sommelier permet de partir d&rsquo;un plat ou d&rsquo;une bi\u00e8re et de trouver des combinaisons d&rsquo;accords recommand\u00e9es en fonction du style de bi\u00e8re et des principes d&rsquo;affinit\u00e9, de contraste et de compl\u00e9ment.<\/p>\r\n<h3>2. Quels principes Beer Sommelier utilise-t-il pour recommander un accord ?<\/h3>\r\n<p>Les recommandations sont bas\u00e9es sur trois principes classiques de l&rsquo;accord : l&rsquo;affinit\u00e9, lorsque des caract\u00e9ristiques similaires sont renforc\u00e9es ; le contraste, lorsque des caract\u00e9ristiques oppos\u00e9es sont \u00e9quilibr\u00e9es ; et le compl\u00e9ment, lorsque la bi\u00e8re et l&rsquo;aliment s&rsquo;int\u00e8grent pour cr\u00e9er une combinaison \u00e9quilibr\u00e9e.<\/p>\r\n<h3>3. Puis-je rechercher un accord \u00e0 partir d&rsquo;un plat ?<\/h3>\r\n<p>Oui. Vous pouvez s\u00e9lectionner ou rechercher un plat, et Beer Sommelier affichera les styles de bi\u00e8re qui offrent les combinaisons les plus adapt\u00e9es pour cet aliment.<\/p>\r\n<h3>4. Puis-je rechercher quel aliment s&rsquo;accorde avec une bi\u00e8re ?<\/h3>\r\n<p>Oui. S\u00e9lectionnez une bi\u00e8re ou un style de bi\u00e8re pour conna\u00eetre les aliments qui compl\u00e8tent le mieux ses caract\u00e9ristiques.<\/p>\r\n<h3>5. Les recommandations sont-elles bas\u00e9es sur les styles de bi\u00e8re ?<\/h3>\r\n<p>Oui. Beer Sommelier utilise les styles de bi\u00e8re actuellement reconnus comme r\u00e9f\u00e9rence technique pour \u00e9tablir les combinaisons d&rsquo;accords.<\/p>\r\n<p><script type=\"application\/ld+json\">\r\n{\r\n  \"@context\": \"https:\/\/schema.org\",\r\n  \"@type\": \"FAQPage\",\r\n  \"mainEntity\": [\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"Comment fonctionne Beer Sommelier ?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"Beer Sommelier permet de partir d'un plat ou d'une bi\u00e8re et de trouver des combinaisons d'accords recommand\u00e9es en fonction du style de bi\u00e8re et des principes d'affinit\u00e9, de contraste et de compl\u00e9ment.\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"Quels principes Beer Sommelier utilise-t-il pour recommander un accord ?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"Les recommandations sont bas\u00e9es sur trois principes classiques de l'accord : l'affinit\u00e9, lorsque des caract\u00e9ristiques similaires sont renforc\u00e9es ; le contraste, lorsque des caract\u00e9ristiques oppos\u00e9es sont \u00e9quilibr\u00e9es ; et le compl\u00e9ment, lorsque la bi\u00e8re et l'aliment s'int\u00e8grent pour cr\u00e9er une combinaison \u00e9quilibr\u00e9e.\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"Puis-je rechercher un accord \u00e0 partir d'un plat ?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"Oui. Vous pouvez s\u00e9lectionner ou rechercher un plat, et Beer Sommelier affichera les styles de bi\u00e8re qui offrent les combinaisons les plus adapt\u00e9es pour cet aliment.\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"Puis-je rechercher quel aliment s'accorde avec une bi\u00e8re ?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"Oui. S\u00e9lectionnez une bi\u00e8re ou un style de bi\u00e8re pour conna\u00eetre les aliments qui compl\u00e8tent le mieux ses caract\u00e9ristiques.\"\r\n      }\r\n    },\r\n    {\r\n      \"@type\": \"Question\",\r\n      \"name\": \"Les recommandations sont-elles bas\u00e9es sur les styles de bi\u00e8re ?\",\r\n      \"acceptedAnswer\": {\r\n        \"@type\": \"Answer\",\r\n        \"text\": \"Oui. Beer Sommelier utilise les styles de bi\u00e8re actuellement reconnus comme r\u00e9f\u00e9rence technique pour \u00e9tablir les combinaisons d'accords.\"\r\n      }\r\n    }\r\n  ]\r\n}\r\n<\/script><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Beer Sommelier est l&rsquo;outil d&rsquo;accords d\u00e9velopp\u00e9 par The Beer Times\u2122. Il recommande des combinaisons entre plats et bi\u00e8res bas\u00e9es sur les styles de bi\u00e8re actuellement reconnus et sur les trois principes classiques de l&rsquo;accord : affinit\u00e9, contraste et compl\u00e9ment. Choisissez si vous voulez partir d&rsquo;un plat ou d&rsquo;une bi\u00e8re, s\u00e9lectionnez une option dans la liste<\/p>\n","protected":false},"author":1,"featured_media":49365,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"wpai_generated_summary":"","footnotes":""},"class_list":["post-49366","page","type-page","status-publish","has-post-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/pages\/49366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/comments?post=49366"}],"version-history":[{"count":5,"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/pages\/49366\/revisions"}],"predecessor-version":[{"id":49392,"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/pages\/49366\/revisions\/49392"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/media\/49365"}],"wp:attachment":[{"href":"https:\/\/www.thebeertimes.com\/fr\/wp-json\/wp\/v2\/media?parent=49366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}